webProjet2 / backend /models.py
Soltane777's picture
Upload 11 files
1631029 verified
import os
import requests
import time
from pdfminer.high_level import extract_text
from docx import Document
# تحميل متغيرات البيئة
HUGGING_FACE_API_KEY = os.environ.get("HUGGING_FACE_API_KEY")
print("HUGGING_FACE_API_KEY:", HUGGING_FACE_API_KEY)
# دالة تلخيص النصوص
def summarizer(text):
url = "https://api-inference.huggingface.co/models/facebook/bart-large-cnn"
headers = {"Authorization": f"Bearer {HUGGING_FACE_API_KEY}"}
payload = {"inputs": text}
response = requests.post(url, headers=headers, json=payload)
# ✅ طباعة حالة الاستجابة لمعرفة هل هناك خطأ؟
print("API Response Status Code:", response.status_code)
try:
response_json = response.json() # تحويل الاستجابة إلى JSON
print("API Response:", response_json)
except Exception as e:
print("Error parsing response JSON:", e)
return response.json()
# دالة توليد وصف الصور
def image_captioning(image_bytes):
url = "https://api-inference.huggingface.co/models/nlpconnect/vit-gpt2-image-captioning"
headers = {"Authorization": f"Bearer {HUGGING_FACE_API_KEY}"}
response = requests.post(url, headers=headers, files={"file": ("image.jpg", image_bytes, "image/jpeg")})
return response.json()
# دالة الإجابة على الأسئلة
def qa_pipeline(question, context):
url = "https://api-inference.huggingface.co/models/deepset/roberta-base-squad2"
headers = {"Authorization": f"Bearer {HUGGING_FACE_API_KEY}"}
payload = {"inputs": {"question": question, "context": context}}
response = requests.post(url, headers=headers, json=payload)
return response.json()
# دالة الترجمة بين اللغات المدعومة
def translator(text, source_lang, target_lang):
# تحقق من أن اللغات مدعومة
supported_langs = ['en', 'fr', 'es', 'ar', 'zh']
if source_lang not in supported_langs or target_lang not in supported_langs:
return {"error": "there is not support , supported languages: en, fr, es, ar, zh"}
# توليد اسم النموذج بناءً على اللغات
model_name = f"Helsinki-NLP/opus-mt-{source_lang}-{target_lang}"
url = f"https://api-inference.huggingface.co/models/{model_name}"
headers = {"Authorization": f"Bearer {HUGGING_FACE_API_KEY}"}
payload = {"inputs": text}
# إرسال الطلب
response = requests.post(url, headers=headers, json=payload)
# معالجة الأخطاء المحتملة
try:
return response.json()
except Exception as e:
return {"error": str(e)}
# دالة توليد كود التصور البياني
def code_generator(prompt: str, max_retries: int = 3) -> dict:
url = "https://api-inference.huggingface.co/models/Salesforce/codegen-350M-multi"
headers = {"Authorization": f"Bearer {HUGGING_FACE_API_KEY}"}
for attempt in range(max_retries):
try:
response = requests.post(
url,
headers=headers,
json={"inputs": prompt},
timeout=30 # زيادة الوقت لانتظار النموذج
)
# تحقق من حالة الاستجابة
if response.status_code == 200:
return response.json()
elif response.status_code == 503:
print(f"API is overloaded. Retrying in 5 seconds... Attempt {attempt + 1}/{max_retries}...")
time.sleep(5) # انتظر قبل إعادة المحاولة
else:
return {"error": f"API Error: {response.status_code}", "details": response.text}
except requests.exceptions.RequestException as e:
return {"error": f"Connection Error: {str(e)}"}
return {"error": "Failed to generate code after multiple attempts."}
def extract_text_from_document(path):
if path.endswith(".pdf"):
return extract_text(path)
elif path.endswith(".docx"):
doc = Document(path)
return "\n".join([p.text for p in doc.paragraphs])
elif path.endswith(".txt"):
with open(path, encoding="utf-8") as f:
return f.read()
else:
return "Unsupported file format."