import streamlit as st from huggingface_hub import hf_hub_download from llama_cpp import Llama import os import time # تحميل النموذج من Hugging Face model_path = hf_hub_download( repo_id="methodya/arabic-summarizer-philosophy-v3", filename="sambalingo-arabic-chat.Q5_K_M.gguf" ) # إعداد النموذج llm = Llama( model_path=model_path, n_ctx=2048, n_threads=4 ) # دالة لتقسيم النصوص إلى فقرات def split_text(text: str, max_length: int = 500): # تقسيم النص إلى فقرات باستخدام النقاط أو الفواصل paragraphs = text.split("\n") chunks = [] current_chunk = "" for paragraph in paragraphs: if len(current_chunk) + len(paragraph) < max_length: current_chunk += paragraph + "\n" else: chunks.append(current_chunk) current_chunk = paragraph + "\n" if current_chunk: chunks.append(current_chunk) # إضافة الفقرة المتبقية return chunks # دالة تلخيص النصوص def summarize(text: str) -> str: if not text: return "يرجى إدخال نص للتلخيص" # تقسيم النص الطويل إلى أجزاء أصغر text_chunks = split_text(text, max_length=500) summarized_text = "" for chunk in text_chunks: prompt = f"""أنت مساعد عربي متخصص في تلخيص النصوص الفلسفية. قم بتلخيص النص التالي: {chunk} """ try: output = llm( prompt, max_tokens=500, # تقليل عدد الرموز في كل جزء temperature=0.7, stop=["User:", "\n\n"] ) summarized_text += output['choices'][0]['text'] + "\n" # دمج التلخيصات except Exception as e: return f"حدث خطأ: {str(e)}" return summarized_text # واجهة المستخدم باستخدام Streamlit st.title("ملخص النصوص الفلسفية") st.markdown("أداة لتلخيص النصوص الفلسفية باللغة العربية") # إنشاء واجهة الإدخال والإخراج text_input = st.text_area("النص الفلسفي", height=200) if st.button("تلخيص"): with st.spinner('Processing...'): # محاكاة لعملية المعالجة التي تستغرق وقتًا طويلاً time.sleep(3) # استبدال هذا بـ عملية النموذج summary = summarize(text_input) st.success('تم التلخيص بنجاح!') st.text_area("الملخص", value=summary, height=150, disabled=True)