diginoron commited on
Commit
f1442f5
·
verified ·
1 Parent(s): acee82a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -35
app.py CHANGED
@@ -33,14 +33,24 @@ def get_importers(hs_code: str, year: str, month: str):
33
  if df is None or df.empty:
34
  return product_name, pd.DataFrame()
35
 
36
- # شناسایی ستون‌های مورد نیاز
37
- code_col = next((c for c in df.columns if 'code' in c.lower()), None)
38
- title_col = next((c for c in df.columns if 'title' in c.lower()), None)
39
- value_col = next((c for c in df.columns if 'value' in c.lower()), None)
 
 
 
 
 
 
 
40
  if not (code_col and title_col and value_col):
 
41
  return product_name, df
42
 
 
43
  df_sorted = df.sort_values(value_col, ascending=False).head(10)
 
44
  out = df_sorted[[code_col, title_col, value_col]]
45
  out.columns = ['کد کشور', 'نام کشور', 'ارزش CIF']
46
  return product_name, out
@@ -53,41 +63,31 @@ translator = GoogleTranslator(source='en', target='fa')
53
  @spaces.GPU
54
  def provide_advice(table_data: pd.DataFrame, hs_code: str, year: str, month: str):
55
  if table_data is None or table_data.empty:
56
- return "<div dir=\"rtl\" style=\"text-align: right; font-family: IRANSans; color: black; background: white;\">ابتدا نمایش داده‌های واردات را انجام دهید.</div>"
57
 
 
58
  df_limited = table_data.head(10)
59
  table_str = df_limited.to_string(index=False)
60
  period = f"{year}/{int(month):02d}"
61
- prompt = f"""
62
- لطفاً یک گزارش تحلیلی به زبان فارسی و با چینش راست‌به‌چپ تولید کن، شامل دو بخش:
63
-
64
- 1. **جدول خلاصه** (Markdown) ۱۰ کشور برتر با ستون‌های «رتبه»، «نام کشور»، «ارزش CIF» و «سه تأمین‌کننده برتر».\n
65
- 2. **نکات کلیدی و پیشنهادات** به‌صورت بولت‌پوینت با تراز راست.
66
-
67
-
68
- **داده‌ها:**
69
- {table_str}
70
- """
71
  try:
72
  outputs = client.text_generation(
73
  prompt=prompt,
74
  model="mistralai/Mixtral-8x7B-Instruct-v0.1",
75
- max_new_tokens=2048
76
  )
77
- persian = translator.translate(outputs)
78
- return f"<div dir=\"rtl\" style=\"text-align: right; font-family: IRANSans; color: black; background: white;\">{persian}</div>"
79
  except Exception as e:
80
- return f"<div dir=\"rtl\" style=\"text-align: right; font-family: IRANSans; color: black; background: white;\">خطا در تولید مشاوره: {e}</div>"
81
 
82
  # --- رابط کاربری Gradio ---
83
- with gr.Blocks(css="""
84
- body, .gradio-container {background-color: white; color: black;}
85
- """) as demo:
86
- gr.Markdown(
87
- "<div dir=\"rtl\" style=\"text-align: right; font-family: IRANSans; color: black; background: white;\">"
88
- "<h2>هوش مصنوعی مشاوره صادراتی با HS Code محصول – ساخته شده توسط Diginoron</h2>"
89
- "</div>"
90
- )
91
 
92
  with gr.Row():
93
  inp_hs = gr.Textbox(label="کد HS", placeholder="مثلاً 1006")
@@ -95,14 +95,9 @@ body, .gradio-container {background-color: white; color: black;}
95
  inp_month = gr.Textbox(label="ماه", placeholder="مثلاً 1 تا 12")
96
 
97
  btn_show = gr.Button("نمایش داده‌های واردات")
98
- out_name = gr.Markdown(
99
- "<div dir=\"rtl\" style=\"text-align: right; font-family: IRANSans; color: black; background: white;\">"
100
- "**نام محصول**"
101
- "</div>"
102
- )
103
  out_table = gr.Dataframe(
104
- headers=["کد کشور", "نام کشور", "ارزش CIF"],
105
- datatype=["text", "text", "text"],
106
  interactive=True
107
  )
108
 
@@ -113,7 +108,7 @@ body, .gradio-container {background-color: white; color: black;}
113
  )
114
 
115
  btn_advice = gr.Button("ارائه مشاوره تخصصی")
116
- out_advice = gr.HTML()
117
 
118
  btn_advice.click(
119
  fn=provide_advice,
 
33
  if df is None or df.empty:
34
  return product_name, pd.DataFrame()
35
 
36
+ # شناسایی ستون‌های مورد نیاز (کد کشور، نام کشور، ارزش)
37
+ # ابتدا سعی در استفاده از ستون‌های استاندارد
38
+ std_map = {
39
+ 'کد کشور': 'ptCode',
40
+ 'نام کشور': 'ptTitle',
41
+ 'ارزش CIF': 'TradeValue'
42
+ }
43
+ code_col = std_map['کد کشور'] if 'ptCode' in df.columns else next((c for c in df.columns if 'code' in c.lower()), None)
44
+ title_col= std_map['نام کشور'] if 'ptTitle' in df.columns else next((c for c in df.columns if 'title' in c.lower()), None)
45
+ value_col= std_map['ارزش CIF'] if 'TradeValue' in df.columns else next((c for c in df.columns if 'value' in c.lower()), None)
46
+
47
  if not (code_col and title_col and value_col):
48
+ # اگر نتوانست ستون‌ها را شناسایی کند، برگرداندن DataFrame خام
49
  return product_name, df
50
 
51
+ # محدودسازی به 10 کشور برتر بر اساس ستون value_col
52
  df_sorted = df.sort_values(value_col, ascending=False).head(10)
53
+
54
  out = df_sorted[[code_col, title_col, value_col]]
55
  out.columns = ['کد کشور', 'نام کشور', 'ارزش CIF']
56
  return product_name, out
 
63
  @spaces.GPU
64
  def provide_advice(table_data: pd.DataFrame, hs_code: str, year: str, month: str):
65
  if table_data is None or table_data.empty:
66
+ return "ابتدا نمایش داده‌های واردات را انجام دهید."
67
 
68
+ # محدودسازی تعداد ردیف‌های ورودی به 10 (در صورت بیشتر)
69
  df_limited = table_data.head(10)
70
  table_str = df_limited.to_string(index=False)
71
  period = f"{year}/{int(month):02d}"
72
+ prompt = (
73
+ f"The following table shows the top {len(df_limited)} countries by CIF value importing HS code {hs_code} during {period}:\n"
74
+ f"{table_str}\n\n"
75
+ "Please provide a detailed and comprehensive analysis of market trends, risks, "
76
+ "and opportunities for a new exporter entering this market."
77
+ )
 
 
 
 
78
  try:
79
  outputs = client.text_generation(
80
  prompt=prompt,
81
  model="mistralai/Mixtral-8x7B-Instruct-v0.1",
82
+ max_new_tokens=1024
83
  )
84
+ return translator.translate(outputs)
 
85
  except Exception as e:
86
+ return f"خطا در تولید مشاوره: {e}"
87
 
88
  # --- رابط کاربری Gradio ---
89
+ with gr.Blocks() as demo:
90
+ gr.Markdown("## تحلیل واردات بر اساس کد HS و ارائه مشاوره تخصصی")
 
 
 
 
 
 
91
 
92
  with gr.Row():
93
  inp_hs = gr.Textbox(label="کد HS", placeholder="مثلاً 1006")
 
95
  inp_month = gr.Textbox(label="ماه", placeholder="مثلاً 1 تا 12")
96
 
97
  btn_show = gr.Button("نمایش داده‌های واردات")
98
+ out_name = gr.Markdown(label="**نام محصول**")
 
 
 
 
99
  out_table = gr.Dataframe(
100
+ datatype="pandas",
 
101
  interactive=True
102
  )
103
 
 
108
  )
109
 
110
  btn_advice = gr.Button("ارائه مشاوره تخصصی")
111
+ out_advice = gr.Textbox(label="مشاوره تخصصی", lines=8)
112
 
113
  btn_advice.click(
114
  fn=provide_advice,