Spaces:
Sleeping
Sleeping
File size: 4,990 Bytes
46a0755 a0a648c cfecbd0 256ba91 a0a648c cfecbd0 8d6b511 46a0755 40da04c a0a648c 40da04c 8d6b511 46a0755 a0a648c 40da04c a0a648c 40da04c 8d6b511 46a0755 db982f4 cfecbd0 db982f4 40da04c 46a0755 256ba91 cfecbd0 a0a648c 40da04c a0a648c f1442f5 256ba91 a0a648c f1442f5 a0a648c f1442f5 a0a648c f1442f5 a0a648c f1442f5 8d6b511 46a0755 40da04c a0a648c 256ba91 40da04c 256ba91 46a0755 a0a648c 46a0755 40da04c a0a648c 8d6b511 40da04c cfecbd0 40da04c 8d6b511 cfecbd0 46a0755 8d6b511 a0a648c cfecbd0 a0a648c 46a0755 |
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 121 122 123 124 125 |
# 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()
# شناسایی ستونهای مورد نیاز
code_col = next((c for c in df.columns if 'code' in c.lower()), None)
title_col = next((c for c in df.columns if 'title' in c.lower()), None)
value_col = next((c for c in df.columns if 'value' in c.lower()), None)
if not (code_col and title_col and value_col):
return product_name, df
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 "ابتدا نمایش دادههای واردات را انجام دهید."
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 با تنظیمات UI ---
with gr.Blocks(css="""
/* رنگ پسزمینه سفید و متن سیاه */
body, .gradio-container { background-color: white !important; color: black !important; }
/* پنهان کردن فوتر و لینکهای Gradio */
footer, .gradio-info { display: none !important; }
""") as demo:
# عنوان سفارشی راستچین
gr.Markdown(
"<div dir='rtl' style='text-align: right; font-family: IRANSans;'>"
"<h2>هوش مصنوعی مشاوره صادراتی با HS Code محصول – ساخته شده توسط Diginoron</h2>"
"</div>"
)
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="<div dir='rtl' style='text-align: right; font-family: IRANSans;'>**نام محصول**</div>")
out_table = gr.Dataframe(
headers=['کد کشور', 'نام کشور', 'ارزش CIF'],
datatype=["number", "text", "number"],
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="<div dir='rtl' style='text-align: right; font-family: IRANSans;'>مشاوره تخصصی</div>", 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(
share=True,
show_api=False,
show_tips=False,
show_share=False
) |