data-3 / app.py
wesam0099's picture
Update app.py
1f9bb29 verified
import os
import shutil
import gradio as gr
import pandas as pd
from pandasai import PandasAI
from pandasai.llm.huggingface import HuggingFaceLLM
from transformers import HfEngine
from gradio import Chatbot
from huggingface_hub import login
from gradio.data_classes import FileData
# Log in to Hugging Face
login(os.getenv("HUGGINGFACEHUB_API_TOKEN"))
# Initialize the LLM engine with an Arabic model
llm_engine = HfEngine("Rohan-Kurdekar/Arabic_Bert_Model")
# Initialize the agent with PandasAI
llm = HuggingFaceLLM(engine=llm_engine)
pandas_ai = PandasAI(llm)
# Define the base prompt
base_prompt = """أنت محلل بيانات خبير.
وفقًا للميزات التي لديك وهيكل البيانات الموضح أدناه، حدد أي ميزة يجب أن تكون الهدف.
ثم قم بإدراج 3 أسئلة مثيرة للاهتمام يمكن طرحها على هذه البيانات، على سبيل المثال حول الارتباطات المحددة مع متغير الهدف.
ثم أجب عن هذه الأسئلة واحدًا تلو الآخر، من خلال العثور على الأرقام ذات الصلة.
وفي الوقت نفسه، قم برسم بعض الرسوم البيانية باستخدام matplotlib/seaborn واحفظها في المجلد './figures/' (الموجود مسبقًا): تأكد من مسح كل رسم بياني باستخدام plt.clf() قبل القيام برسم بياني آخر.
في إجابتك النهائية: قم بتلخيص هذه الارتباطات والاتجاهات
بعد كل رقم اشتق رؤى من العالم الحقيقي، على سبيل المثال: "الارتباط بين is_december والشعور بالملل هو 1.3453، مما يشير إلى أن الناس يشعرون بالملل أكثر في الشتاء".
يجب أن تكون إجابتك النهائية سلسلة طويلة تحتوي على 3 أجزاء مفصلة ومرقمة على الأقل.
هيكل البيانات:
{structure_notes}
يتم تمرير ملف البيانات إليك كإطار بيانات pandas، يمكنك استخدامه مباشرة.
لا تحاول تحميل data_file، فهي بالفعل إطار بيانات محمل مسبقًا في مترجم Python الخاص بك!
"""
# Example notes for Arabic dataset
example_notes = """هذه البيانات تتعلق بنتائج الطلاب.
الهدف من هذه البيانات هو معرفة الدرجة النهائية للطلاب.
name: اسم الطالب
age: عمر الطالب
gender: جنس الطالب
score: درجة الطالب"""
def interact_with_agent(file_input, additional_notes):
try:
# Ensure the ./figures directory exists
figures_dir = "./figures"
if os.path.exists(figures_dir):
shutil.rmtree(figures_dir)
os.makedirs(figures_dir)
# Read the CSV file with the appropriate encoding for Arabic text
data_file = pd.read_csv(file_input.name, encoding='ISO-8859-1')
# Use PandasAI to analyze the data
prompt = base_prompt.format(structure_notes="")
if additional_notes and len(additional_notes) > 0:
prompt += "\nملاحظات إضافية عن البيانات:\n" + additional_notes
response = pandas_ai.run(data_file, prompt=prompt)
messages = [gr.ChatMessage(role="user", content=prompt)]
messages.append(gr.ChatMessage(role="assistant", content=response))
yield messages
except Exception as e:
print(f"Error: {e}")
yield [gr.ChatMessage(role="assistant", content=f"Error: {e}")]
with gr.Blocks(
theme=gr.themes.Soft(
primary_hue=gr.themes.colors.yellow,
secondary_hue=gr.themes.colors.blue,
)
) as demo:
gr.Markdown("""# محلل البيانات Llama-3.1 📊🤔
قم بإسقاط ملف `.csv` أدناه، وأضف ملاحظات لوصف هذه البيانات إذا لزم الأمر، وسيقوم **Llama-3.1-70B بتحليل محتوى الملف ورسم الأشكال من أجلك!**""")
file_input = gr.File(label="ملفك للتحليل")
text_input = gr.Textbox(
label="ملاحظات إضافية لدعم التحليل"
)
submit = gr.Button("تشغيل التحليل!", variant="primary")
chatbot = gr.Chatbot(
label="وكيل محلل البيانات",
type="messages",
avatar_images=(
None,
"https://em-content.zobj.net/source/twitter/53/robot-face_1f916.png",
),
)
gr.Examples(
examples=[["./example/a.csv", example_notes]],
inputs=[file_input, text_input],
cache_examples=False
)
submit.click(interact_with_agent, [file_input, text_input], [chatbot])
if __name__ == "__main__":
demo.launch(share=True)