M17idd commited on
Commit
35c3d0c
·
verified ·
1 Parent(s): 3df797e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -22
app.py CHANGED
@@ -1,17 +1,25 @@
1
  import gradio as gr
2
  from langchain.chat_models import ChatOpenAI
3
  from langchain.schema import HumanMessage
 
 
 
4
 
5
  # مدل LLaMA-3 از طریق Together API
6
  llm = ChatOpenAI(
7
  base_url="https://api.together.xyz/v1",
8
- api_key="0291f33aee03412a47fa5d8e562e515182dcc5d9aac5a7fb5eefdd1759005979",
9
  model="meta-llama/Llama-3.3-70B-Instruct-Turbo-Free",
10
  max_tokens=1024
11
  )
12
 
 
 
 
13
  # تابع تولید گزارش
14
  def generate_report(operation_data, max_tokens, temperature, top_p):
 
 
15
  system_prompt = """تو یک افسر گزارش‌نویس نظامی هستی. وظیفه تو تهیه یک گزارش رسمی، دقیق، ساختاریافته و حرفه‌ای از عملیات نظامی بر اساس داده‌های ارائه‌شده است. اگر اطلاعاتی در متن وجود نداشت، صراحتاً بنویس «ذکر نشده است».
16
 
17
  لطفاً گزارش را دقیقاً در قالب فرمتیافته زیر تولید کن، با استفاده از نشانه‌گذاری واضح (مانند ایموجی‌ها و خطوط جداکننده) تا خروجی قابل‌خواندن و رسمی باشد:
@@ -53,33 +61,64 @@ def generate_report(operation_data, max_tokens, temperature, top_p):
53
  [شرایط خاص، اطلاعات پشتیبانی، آب‌وهوا، یا بنویس: ذکر نشده است]
54
 
55
  ━━━━━━━━━━━━━━━━━━━━━━
56
- ✅ این گزارش بر اساس اطلاعات خام ارائه‌شده تولید شده و ممکن است برخی جزئیات در دسترس نبوده باشند.
57
-
58
  """
 
 
 
 
59
 
60
 
61
- # تعریف پیام‌ها برای مدل
62
- messages = [
63
- HumanMessage(content=f"{system_prompt}\n\n{operation_data}")
64
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
- # ارسال پیام به مدل و گرفتن پاسخ
67
- response = llm(messages)
68
- return response.content
69
 
70
  # رابط Gradio
71
- demo = gr.Interface(
72
- fn=generate_report,
73
- inputs=[
74
- gr.Textbox(label="اطلاعات عملیات نظامی", lines=10, placeholder="مثلاً: در ساعت ۵ صبح، گردان الف از محور غربی وارد منطقه شد..."),
75
- gr.Slider(128, 2048, value=1024, step=64, label="حداکثر توکن خروجی"),
76
- gr.Slider(0.1, 1.5, value=0.7, step=0.1, label="دمای خلاقیت (temperature)"),
77
- gr.Slider(0.1, 1.0, value=0.95, step=0.05, label="Top-p"),
78
- ],
79
- outputs=gr.Textbox(label="گزارش رسمی تولید شده", lines=10),
80
- title="گزارش‌نویس هوش مصنوعی عملیات نظامی",
81
- description="اطلاعات خام عملیات نظامی را وارد کن تا گزارش رسمی، خلاصه و حرفه‌ای تولید شود."
82
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
 
84
  if __name__ == "__main__":
85
  demo.launch()
 
1
  import gradio as gr
2
  from langchain.chat_models import ChatOpenAI
3
  from langchain.schema import HumanMessage
4
+ from fpdf import FPDF
5
+ import tempfile
6
+ import os
7
 
8
  # مدل LLaMA-3 از طریق Together API
9
  llm = ChatOpenAI(
10
  base_url="https://api.together.xyz/v1",
11
+ api_key="0291f33aee03412a47fa5d8e562e515182dcc5a7fb5eefdd1759005979",
12
  model="meta-llama/Llama-3.3-70B-Instruct-Turbo-Free",
13
  max_tokens=1024
14
  )
15
 
16
+ # متغیر جهانی برای ذخیره گزارش
17
+ generated_report_text = ""
18
+
19
  # تابع تولید گزارش
20
  def generate_report(operation_data, max_tokens, temperature, top_p):
21
+ global generated_report_text
22
+
23
  system_prompt = """تو یک افسر گزارش‌نویس نظامی هستی. وظیفه تو تهیه یک گزارش رسمی، دقیق، ساختاریافته و حرفه‌ای از عملیات نظامی بر اساس داده‌های ارائه‌شده است. اگر اطلاعاتی در متن وجود نداشت، صراحتاً بنویس «ذکر نشده است».
24
 
25
  لطفاً گزارش را دقیقاً در قالب فرمتیافته زیر تولید کن، با استفاده از نشانه‌گذاری واضح (مانند ایموجی‌ها و خطوط جداکننده) تا خروجی قابل‌خواندن و رسمی باشد:
 
61
  [شرایط خاص، اطلاعات پشتیبانی، آب‌وهوا، یا بنویس: ذکر نشده است]
62
 
63
  ━━━━━━━━━━━━━━━━━━━━━━
64
+ ✅ این گزارش بر اساس اطلاعات ارائه‌شده تولید شده و ممکن است برخی جزئیات در دسترس نبوده باشند.
 
65
  """
66
+ messages = [HumanMessage(content=f"{system_prompt}\n\n{operation_data}")]
67
+ response = llm(messages)
68
+ generated_report_text = response.content
69
+ return generated_report_text
70
 
71
 
72
+ # تابع ساخت PDF فارسی راست‌چین
73
+ def download_pdf():
74
+ global generated_report_text
75
+
76
+ # مسیر فونت فارسی (Vazir.ttf)
77
+ font_path = "fonts/Vazir.ttf"
78
+ if not os.path.exists(font_path):
79
+ return "❌ فونت فارسی Vazir پیدا نشد. لطفاً در مسیر fonts/Vazir.ttf قرار دهید."
80
+
81
+ pdf = FPDF()
82
+ pdf.add_page()
83
+ pdf.add_font("Vazir", "", font_path, uni=True)
84
+ pdf.set_font("Vazir", size=12)
85
+
86
+ # تنظیم راست‌چین با align=R
87
+ for line in generated_report_text.split("\n"):
88
+ pdf.multi_cell(0, 10, line.strip(), align="R")
89
+
90
+ temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf")
91
+ pdf.output(temp_file.name)
92
+ return temp_file.name
93
 
 
 
 
94
 
95
  # رابط Gradio
96
+ with gr.Blocks(title="🛡️ گزارش‌نویس هوش مصنوعی عملیات نظامی") as demo:
97
+ gr.Markdown("## 🛡️ گزارش‌نویس عملیات نظامی با هوش مصنوعی\nاطلاعات خام عملیات نظامی را وارد کن تا گزارش رسمی، خلاصه و حرفه‌ای تولید شود.")
98
+
99
+ input_text = gr.Textbox(label="📝 اطلاعات عملیات نظامی", lines=10, placeholder="مثلاً: در ساعت ۵ صبح، گردان الف از محور غربی وارد منطقه شد...")
100
+ max_tokens = gr.Slider(128, 2048, value=1024, step=64, label="🎛️ حداکثر توکن خروجی")
101
+ temperature = gr.Slider(0.1, 1.5, value=0.7, step=0.1, label="🔥 دمای خلاقیت (temperature)")
102
+ top_p = gr.Slider(0.1, 1.0, value=0.95, step=0.05, label="🎯 Top-p")
103
+
104
+ generate_btn = gr.Button("🚀 تولید گزارش")
105
+
106
+ output_report = gr.Code(label="📄 گزارش رسمی تولید شده", language="markdown")
107
+
108
+ download_button = gr.Button("📥 دانلود PDF گزارش")
109
+ file_output = gr.File(label="📎 فایل PDF برای دانلود")
110
+
111
+ generate_btn.click(
112
+ fn=generate_report,
113
+ inputs=[input_text, max_tokens, temperature, top_p],
114
+ outputs=output_report
115
+ )
116
+
117
+ download_button.click(
118
+ fn=download_pdf,
119
+ inputs=[],
120
+ outputs=file_output
121
+ )
122
 
123
  if __name__ == "__main__":
124
  demo.launch()