File size: 3,220 Bytes
937f1aa
83a2a70
3ba690a
 
 
0490f39
83a2a70
937f1aa
c62298d
0490f39
 
83a2a70
0490f39
3ba690a
e5574dd
 
3ba690a
 
 
 
 
937f1aa
3ba690a
 
937f1aa
3ba690a
99af9f6
937f1aa
 
99af9f6
 
937f1aa
 
3ba690a
937f1aa
3caec61
83a2a70
3caec61
83a2a70
 
937f1aa
9a96732
937f1aa
83a2a70
937f1aa
 
 
 
 
 
 
 
8c27317
 
 
 
 
 
 
 
937f1aa
 
8c27317
 
 
937f1aa
 
8c27317
 
937f1aa
8c27317
 
 
 
 
937f1aa
 
8c27317
 
 
 
937f1aa
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
graidio
import os
import gradio as gr
import pandas as pd
import comtradeapicall
from huggingface_hub import InferenceClient

# کلید COMTRADE (فعلاً برای preview نیازی به آن نداریم)
subscription_key = os.getenv("COMTRADE_API_KEY", "")
# توکن Hugging Face
hf_token = os.getenv("HF_API_TOKEN")

client = InferenceClient(token=hf_token)

def get_importers(hs_code: str, year: str, month: str):
    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 pd.DataFrame(columns=["کد کشور","نام کشور","ارزش CIF"])
    df = df[df['cifvalue'] > 0]
    result = (
        df.groupby(["reporterCode","reporterDesc"], as_index=False)
          .agg({"cifvalue":"sum"})
          .sort_values("cifvalue", ascending=False)
    )
    result.columns = ["کد کشور","نام کشور","ارزش CIF"]
    return result

def provide_advice(table_data: pd.DataFrame, hs_code: str, year: str, month: str):
    if table_data is None or table_data.empty:
        return "ابتدا باید اطلاعات واردات را نمایش دهید."
    table_str = table_data.to_string(index=False)
    period = f"{year}/{int(month):02d}"
    prompt = (
        f"جدول زیر کشورهایی را نشان می‌دهد که کالا با کد HS {hs_code} را در دوره {period} وارد کرده‌اند:\n"
        f"{table_str}\n\n"
        "لطفاً بر اساس این اطلاعات دو پاراگراف مشاوره تخصصی بنویسید."
    )
    # فراخوانی text_generation
    outputs = client.text_generation(
        model="google/gemma-2b",
        inputs=prompt,
        parameters={"max_new_tokens":256}
    )
    # خروجی اولین شات
    return outputs[0]["generated_text"]

current_year = pd.Timestamp.now().year
years = [str(y) for y in range(2000, current_year+1)]
months = [str(m) for m in range(1, 13)]

with gr.Blocks() as demo:
    gr.Markdown("## نمایش کشورهایی که یک کالا را وارد کرده‌اند")
    with gr.Row():
        inp_hs    = gr.Textbox(label="HS Code")
        inp_year  = gr.Dropdown(choices=years, label="سال", value=str(current_year))
        inp_month = gr.Dropdown(choices=months, label="ماه", value=str(pd.Timestamp.now().month))
    btn_show = gr.Button("نمایش اطلاعات")
    out_table = gr.Dataframe(
        headers=["کد کشور","نام کشور","ارزش CIF"],
        datatype=["number","text","number"],
        interactive=True,
    )
    btn_show.click(get_importers, [inp_hs, inp_year, inp_month], out_table)

    btn_advice = gr.Button("ارائه مشاوره تخصصی")
    out_advice = gr.Textbox(label="مشاوره تخصصی", lines=6)

    btn_advice.click(
        provide_advice,
        inputs=[out_table, inp_hs, inp_year, inp_month],
        outputs=out_advice
    )

if __name__ == "__main__":
    demo.launch()