Spaces:
Running
Running
File size: 4,832 Bytes
83a2a70 3ba690a 0490f39 b975240 83a2a70 a556cf5 c62298d 0490f39 83a2a70 0490f39 b975240 3ba690a e5574dd 3ba690a de72ef1 3ba690a de72ef1 3ba690a 99af9f6 a556cf5 99af9f6 a556cf5 de72ef1 3ba690a de72ef1 3caec61 83a2a70 3caec61 83a2a70 de72ef1 9a96732 de72ef1 83a2a70 e7ce7de 8ba43cf e7ce7de 2f84711 8c27317 45e8a69 de72ef1 8c27317 b7da185 e7ce7de b7da185 ebd075f b7da185 8c27317 e7ce7de 8c27317 de72ef1 8c27317 de72ef1 8c27317 de72ef1 8c27317 |
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 |
import os
import gradio as gr
import pandas as pd
import comtradeapicall
from huggingface_hub import InferenceClient
from deep_translator import GoogleTranslator
# کلید COMTRADE
subscription_key = os.getenv("COMTRADE_API_KEY", "")
# توکن Hugging Face
hf_token = os.getenv("HF_API_TOKEN")
client = InferenceClient(token=hf_token)
translator = GoogleTranslator(source='en', target='fa')
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"]
# استخراج نام محصول از توضیحات (فرض بر این است که cmdDesc نام محصول را دارد)
product_name = df['cmdDesc'].iloc[0] if 'cmdDesc' in df.columns else "برنج"
return result, product_name
def provide_advice(table_data: pd.DataFrame, hs_code: str, year: str, month: str, product_name: 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"The following table shows countries that imported the product '{product_name}' with HS code {hs_code} during the period {period}:\n"
f"{table_str}\n\n"
f"لطفاً یک تحلیل کامل ارائه دهید که شامل دو بخش باشد. بخش اول فرصتهای بازار و تقاضای بالقوه برای این محصول در این کشورها را بررسی کند، با توجه به عوامل فرهنگی، اقتصادی و جمعیتی. بخش دوم توصیههای استراتژیک عملی برای صادرکنندگان که این بازارها را هدف قرار دادهاند، با تمرکز بر استراتژیهای تجاری، مدیریت ریسک و ایجاد مشارکتهای محلی، ارائه دهد."
)
print("پرامپت ساختهشده:")
print(prompt)
try:
print("در حال فراخوانی مدل mistralai/Mixtral-8x7B-Instruct-v0.1...")
outputs = client.text_generation(
prompt=prompt,
model="mistralai/Mixtral-8x7B-Instruct-v0.1",
max_new_tokens=1024
)
print("خروجی مدل دریافت شد (به انگلیسی):")
print(outputs)
# ترجمه خروجی به فارسی
translated_outputs = translator.translate(outputs)
print("خروجی ترجمهشده به فارسی:")
print(translated_outputs)
return translated_outputs
except Exception as e:
error_msg = f"خطا در تولید مشاوره: {str(e)}"
print(error_msg)
return error_msg
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", value="1006") # پیشفرض 1006 برای برنج
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(
fn=get_importers,
inputs=[inp_hs, inp_year, inp_month],
outputs=[out_table, gr.State()] # gr.State برای انتقال product_name
)
btn_advice = gr.Button("ارائه مشاوره تخصصی")
out_advice = gr.Textbox(label="مشاوره تخصصی", lines=6)
btn_advice.click(
fn=provide_advice,
inputs=[out_table, inp_hs, inp_year, inp_month, gr.State()],
outputs=out_advice
)
if __name__ == "__main__":
demo.launch() |