Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -3,11 +3,13 @@
|
|
| 3 |
# - بارگذاری مدل Sentence Transformer پارسی 'heydariAI/persian-embeddings'
|
| 4 |
# - تعریف اپلیکیشن Flask
|
| 5 |
# - اندپوینت /get_embedding برای دریافت سوال و ارسال بردار آن
|
|
|
|
|
|
|
| 6 |
# - لاگ گیری برای عیب یابی در لاگ های Space و یک فایل جداگانه
|
| 7 |
# - مدیریت خطاهای اولیه در بارگذاری مدل و پردازش درخواست ها
|
| 8 |
|
| 9 |
from sentence_transformers import SentenceTransformer
|
| 10 |
-
from flask import Flask, request, jsonify
|
| 11 |
import numpy as np
|
| 12 |
import logging
|
| 13 |
import os
|
|
@@ -17,7 +19,6 @@ import os
|
|
| 17 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
| 18 |
|
| 19 |
# مسیر فایل لاگ جداگانه در فضای Hugging Face (برای عیب یابی بیشتر)
|
| 20 |
-
# نکته: نوشتن در فایل در برخی محیط های Space ممکن است نیاز به تنظیمات مجوز داشته باشد.
|
| 21 |
log_file_path = "app_log.txt"
|
| 22 |
|
| 23 |
# تابع برای افزودن پیام به فایل لاگ
|
|
@@ -59,13 +60,31 @@ except Exception as e:
|
|
| 59 |
# تعریف اپلیکیشن Flask
|
| 60 |
app = Flask(__name__)
|
| 61 |
|
|
|
|
|
|
|
| 62 |
@app.route('/')
|
| 63 |
-
def
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
|
| 68 |
|
|
|
|
| 69 |
@app.route('/get_embedding', methods=['POST'])
|
| 70 |
def get_embedding():
|
| 71 |
if model is None:
|
|
@@ -98,7 +117,6 @@ def get_embedding():
|
|
| 98 |
log_message(error_message)
|
| 99 |
return jsonify({"error": error_message}), 500
|
| 100 |
|
| 101 |
-
#
|
| 102 |
-
# در Hugging Face Space، خود زیرساخت Space مسئول اجرای برنامه شماست و این بخش معمولاً غیرفعال است.
|
| 103 |
# if __name__ == '__main__':
|
| 104 |
# app.run(host='0.0.0.0', port=7860, debug=False)
|
|
|
|
| 3 |
# - بارگذاری مدل Sentence Transformer پارسی 'heydariAI/persian-embeddings'
|
| 4 |
# - تعریف اپلیکیشن Flask
|
| 5 |
# - اندپوینت /get_embedding برای دریافت سوال و ارسال بردار آن
|
| 6 |
+
# - **سرویس دهی فایل index.html به عنوان صفحه اصلی**
|
| 7 |
+
# - **سرویس دهی سایر فایل های ایستا (js, css, json)**
|
| 8 |
# - لاگ گیری برای عیب یابی در لاگ های Space و یک فایل جداگانه
|
| 9 |
# - مدیریت خطاهای اولیه در بارگذاری مدل و پردازش درخواست ها
|
| 10 |
|
| 11 |
from sentence_transformers import SentenceTransformer
|
| 12 |
+
from flask import Flask, request, jsonify, send_from_directory # <--- اضافه کردن send_from_directory
|
| 13 |
import numpy as np
|
| 14 |
import logging
|
| 15 |
import os
|
|
|
|
| 19 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
| 20 |
|
| 21 |
# مسیر فایل لاگ جداگانه در فضای Hugging Face (برای عیب یابی بیشتر)
|
|
|
|
| 22 |
log_file_path = "app_log.txt"
|
| 23 |
|
| 24 |
# تابع برای افزودن پیام به فایل لاگ
|
|
|
|
| 60 |
# تعریف اپلیکیشن Flask
|
| 61 |
app = Flask(__name__)
|
| 62 |
|
| 63 |
+
# ****** اضافه کردن روت برای سرویس دهی فایل index.html به عنوان صفحه اصلی ******
|
| 64 |
+
# این روت وقتی کاربر به آدرس اصلی Space مراجعه می کند (/) اجرا می شود
|
| 65 |
@app.route('/')
|
| 66 |
+
def serve_index():
|
| 67 |
+
# فرض می کنیم index.html در ریشه دایرکتوری کاری اپلیکیشن (app/) قرار دارد
|
| 68 |
+
# send_from_directory فایل را از دایرکتوری مشخص شده ('.') ارسال می کند
|
| 69 |
+
return send_from_directory('.', 'index.html')
|
| 70 |
+
|
| 71 |
+
# ****** اضافه کردن روت برای سرویس دهی سایر فایل های ایستا ******
|
| 72 |
+
# این روت برای سرویس دهی فایل هایی مانند style.css, script.js, و فایل های JSON استفاده می شود.
|
| 73 |
+
# این روت هر فایلی که در ریشه اپلیکیشن قرار دارد و نام آن با روت های تعریف شده مطابقت ندارد را سرویس می دهد.
|
| 74 |
+
# <path:filename> یک متغیر مسیر است که شامل نام فایل و هر زیرپوشه ای است.
|
| 75 |
+
@app.route('/<path:filename>')
|
| 76 |
+
def serve_static(filename):
|
| 77 |
+
# اطمینان حاصل کنید که فایل در دایرکتوری کاری اپلیکیشن وجود دارد
|
| 78 |
+
# از send_from_directory برای جلوگیری از مشکلات امنیتی استفاده کنید.
|
| 79 |
+
logging.info(f"Attempting to serve static file: {filename}")
|
| 80 |
+
try:
|
| 81 |
+
return send_from_directory('.', filename)
|
| 82 |
+
except FileNotFoundError:
|
| 83 |
+
logging.error(f"Static file not found: {filename}")
|
| 84 |
+
return "File not found", 404 # برگرداندن خطای 404 اگر فایل پیدا نشد
|
| 85 |
|
| 86 |
|
| 87 |
+
# ****** اندپوینت اصلی برای دریافت بردار (embedding) سوال (همانند قبل) ******
|
| 88 |
@app.route('/get_embedding', methods=['POST'])
|
| 89 |
def get_embedding():
|
| 90 |
if model is None:
|
|
|
|
| 117 |
log_message(error_message)
|
| 118 |
return jsonify({"error": error_message}), 500
|
| 119 |
|
| 120 |
+
# این بخش معمولاً در محیط Hugging Face Space توسط Gunicorn مدیریت می شود.
|
|
|
|
| 121 |
# if __name__ == '__main__':
|
| 122 |
# app.run(host='0.0.0.0', port=7860, debug=False)
|