|
|
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 |
|
|
|
|
|
|
|
|
login(os.getenv("HUGGINGFACEHUB_API_TOKEN")) |
|
|
|
|
|
|
|
|
llm_engine = HfEngine("Rohan-Kurdekar/Arabic_Bert_Model") |
|
|
|
|
|
|
|
|
llm = HuggingFaceLLM(engine=llm_engine) |
|
|
pandas_ai = PandasAI(llm) |
|
|
|
|
|
|
|
|
base_prompt = """أنت محلل بيانات خبير. |
|
|
وفقًا للميزات التي لديك وهيكل البيانات الموضح أدناه، حدد أي ميزة يجب أن تكون الهدف. |
|
|
ثم قم بإدراج 3 أسئلة مثيرة للاهتمام يمكن طرحها على هذه البيانات، على سبيل المثال حول الارتباطات المحددة مع متغير الهدف. |
|
|
ثم أجب عن هذه الأسئلة واحدًا تلو الآخر، من خلال العثور على الأرقام ذات الصلة. |
|
|
وفي الوقت نفسه، قم برسم بعض الرسوم البيانية باستخدام matplotlib/seaborn واحفظها في المجلد './figures/' (الموجود مسبقًا): تأكد من مسح كل رسم بياني باستخدام plt.clf() قبل القيام برسم بياني آخر. |
|
|
في إجابتك النهائية: قم بتلخيص هذه الارتباطات والاتجاهات |
|
|
بعد كل رقم اشتق رؤى من العالم الحقيقي، على سبيل المثال: "الارتباط بين is_december والشعور بالملل هو 1.3453، مما يشير إلى أن الناس يشعرون بالملل أكثر في الشتاء". |
|
|
يجب أن تكون إجابتك النهائية سلسلة طويلة تحتوي على 3 أجزاء مفصلة ومرقمة على الأقل. |
|
|
هيكل البيانات: |
|
|
{structure_notes} |
|
|
يتم تمرير ملف البيانات إليك كإطار بيانات pandas، يمكنك استخدامه مباشرة. |
|
|
لا تحاول تحميل data_file، فهي بالفعل إطار بيانات محمل مسبقًا في مترجم Python الخاص بك! |
|
|
""" |
|
|
|
|
|
|
|
|
example_notes = """هذه البيانات تتعلق بنتائج الطلاب. |
|
|
الهدف من هذه البيانات هو معرفة الدرجة النهائية للطلاب. |
|
|
name: اسم الطالب |
|
|
age: عمر الطالب |
|
|
gender: جنس الطالب |
|
|
score: درجة الطالب""" |
|
|
|
|
|
def interact_with_agent(file_input, additional_notes): |
|
|
try: |
|
|
|
|
|
figures_dir = "./figures" |
|
|
if os.path.exists(figures_dir): |
|
|
shutil.rmtree(figures_dir) |
|
|
os.makedirs(figures_dir) |
|
|
|
|
|
|
|
|
data_file = pd.read_csv(file_input.name, encoding='ISO-8859-1') |
|
|
|
|
|
|
|
|
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) |
|
|
|