M17idd commited on
Commit
766e6f9
·
verified ·
1 Parent(s): bff60c3

Update app.py

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