Spaces:
Sleeping
Sleeping
File size: 4,895 Bytes
40da04c a0a648c cfecbd0 256ba91 a0a648c cfecbd0 8d6b511 cfecbd0 40da04c a0a648c 40da04c 8d6b511 cfecbd0 a0a648c 40da04c a0a648c 40da04c 8d6b511 f1442f5 db982f4 f1442f5 db982f4 cfecbd0 f1442f5 db982f4 f1442f5 db982f4 40da04c cfecbd0 256ba91 cfecbd0 a0a648c 40da04c a0a648c f1442f5 256ba91 f1442f5 256ba91 a0a648c f1442f5 a0a648c f1442f5 a0a648c f1442f5 a0a648c f1442f5 8d6b511 cfecbd0 f1442f5 40da04c a0a648c 256ba91 40da04c 256ba91 f1442f5 a0a648c f1442f5 40da04c a0a648c 8d6b511 40da04c cfecbd0 40da04c 8d6b511 cfecbd0 f1442f5 8d6b511 a0a648c cfecbd0 a0a648c acee82a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# app.py
import os
import pandas as pd
import gradio as gr
import comtradeapicall
from huggingface_hub import InferenceClient
from deep_translator import GoogleTranslator
import spaces # برای مدیریت GPU کرایهای
# --- بارگذاری HS DATA از CSV گیتهاب ---
HS_CSV_URL = (
"https://raw.githubusercontent.com/"
"datasets/harmonized-system/master/data/harmonized-system.csv"
)
hs_df = pd.read_csv(HS_CSV_URL, dtype=str)
def get_product_name(hs_code: str) -> str:
code4 = str(hs_code).zfill(4)
row = hs_df[hs_df["hscode"] == code4]
return row.iloc[0]["description"] if not row.empty else "–"
# --- تابع دریافت واردات و پردازش ستونها ---
def get_importers(hs_code: str, year: str, month: str):
product_name = get_product_name(hs_code)
period = f"{year}{int(month):02d}"
df = comtradeapicall.previewFinalData(
typeCode='C', freqCode='M', clCode='HS', period=period,
reporterCode=None, cmdCode=hs_code, flowCode='M',
partnerCode=None, partner2Code=None,
customsCode=None, motCode=None,
maxRecords=500, includeDesc=True
)
if df is None or df.empty:
return product_name, pd.DataFrame()
# شناسایی ستونهای مورد نیاز (کد کشور، نام کشور، ارزش)
# ابتدا سعی در استفاده از ستونهای استاندارد
std_map = {
'کد کشور': 'ptCode',
'نام کشور': 'ptTitle',
'ارزش CIF': 'TradeValue'
}
code_col = std_map['کد کشور'] if 'ptCode' in df.columns else next((c for c in df.columns if 'code' in c.lower()), None)
title_col= std_map['نام کشور'] if 'ptTitle' in df.columns else next((c for c in df.columns if 'title' in c.lower()), None)
value_col= std_map['ارزش CIF'] if 'TradeValue' in df.columns else next((c for c in df.columns if 'value' in c.lower()), None)
if not (code_col and title_col and value_col):
# اگر نتوانست ستونها را شناسایی کند، برگرداندن DataFrame خام
return product_name, df
# محدودسازی به 10 کشور برتر بر اساس ستون value_col
df_sorted = df.sort_values(value_col, ascending=False).head(10)
out = df_sorted[[code_col, title_col, value_col]]
out.columns = ['کد کشور', 'نام کشور', 'ارزش CIF']
return product_name, out
# --- تابع تولید مشاوره تخصصی با GPU کرایهای ---
hf_token = os.getenv("HF_API_TOKEN")
client = InferenceClient(token=hf_token)
translator = GoogleTranslator(source='en', target='fa')
@spaces.GPU
def provide_advice(table_data: pd.DataFrame, hs_code: str, year: str, month: str):
if table_data is None or table_data.empty:
return "ابتدا نمایش دادههای واردات را انجام دهید."
# محدودسازی تعداد ردیفهای ورودی به 10 (در صورت بیشتر)
df_limited = table_data.head(10)
table_str = df_limited.to_string(index=False)
period = f"{year}/{int(month):02d}"
prompt = (
f"The following table shows the top {len(df_limited)} countries by CIF value importing HS code {hs_code} during {period}:\n"
f"{table_str}\n\n"
"Please provide a detailed and comprehensive analysis of market trends, risks, "
"and opportunities for a new exporter entering this market."
)
try:
outputs = client.text_generation(
prompt=prompt,
model="mistralai/Mixtral-8x7B-Instruct-v0.1",
max_new_tokens=1024
)
return translator.translate(outputs)
except Exception as e:
return f"خطا در تولید مشاوره: {e}"
# --- رابط کاربری Gradio ---
with gr.Blocks() as demo:
gr.Markdown("## تحلیل واردات بر اساس کد HS و ارائه مشاوره تخصصی")
with gr.Row():
inp_hs = gr.Textbox(label="کد HS", placeholder="مثلاً 1006")
inp_year = gr.Textbox(label="سال", placeholder="مثلاً 2023")
inp_month = gr.Textbox(label="ماه", placeholder="مثلاً 1 تا 12")
btn_show = gr.Button("نمایش دادههای واردات")
out_name = gr.Markdown(label="**نام محصول**")
out_table = gr.Dataframe(
datatype="pandas",
interactive=True
)
btn_show.click(
fn=get_importers,
inputs=[inp_hs, inp_year, inp_month],
outputs=[out_name, out_table]
)
btn_advice = gr.Button("ارائه مشاوره تخصصی")
out_advice = gr.Textbox(label="مشاوره تخصصی", lines=8)
btn_advice.click(
fn=provide_advice,
inputs=[out_table, inp_hs, inp_year, inp_month],
outputs=out_advice
)
if __name__ == "__main__":
demo.launch() |