File size: 2,988 Bytes
83a2a70
3ba690a
 
 
83a2a70
 
c62298d
83a2a70
 
 
 
3ba690a
e5574dd
 
3ba690a
 
 
 
 
 
 
 
 
5ead8fb
3ba690a
99af9f6
 
 
 
 
 
c62298d
3ba690a
04460c9
 
83a2a70
04460c9
83a2a70
 
d59b989
 
83a2a70
 
 
 
 
 
e5574dd
 
 
3ba690a
99af9f6
3ba690a
e5574dd
 
83a2a70
 
 
99af9f6
c62298d
83a2a70
 
04460c9
83a2a70
 
d59b989
83a2a70
04460c9
 
 
 
 
3ba690a
 
 
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
import os
import gradio as gr
import pandas as pd
import comtradeapicall
from huggingface_hub import InferenceApi

subscription_key = os.getenv("COMTRADE_API_KEY", "")
hf_token         = os.getenv("HF_API_TOKEN", None)
proxy_url        = None

inference = InferenceApi(repo_id="google/gemma-2b", 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,
        proxy_url=proxy_url
    )
    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: pd.DataFrame, hs_code: str, year: str, month: str):
    if table is None or table.empty:
        return "ابتدا باید اطلاعات واردات را نمایش دهید."
    table_md = table.to_markdown(index=False)
    period = f"{year}/{int(month):02d}"
    prompt = (
        f"جدول زیر کشورهایی را نشان می‌دهد که کالا با کد HS {hs_code} را در دوره {period} وارد کرده‌اند:\n"
        f"{table_md}\n\n"
        "لطفاً بر اساس این اطلاعات دو پاراگراف مشاوره تخصصی بنویسید."
    )
    response = inference(prompt)
    return response

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=False,
    )
    btn_show.click(get_importers, inputs=[inp_hs, inp_year, inp_month], outputs=out_table)

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

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

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