File size: 5,629 Bytes
ad87178 6341792 35c3d0c 9aa2922 4a9ccb9 6341792 35c3d0c 6341792 896ef55 4a9ccb9 35c3d0c 4a9ccb9 9aa2922 35c3d0c 3df797e 35c3d0c 5c02a22 35c3d0c 5c02a22 896ef55 4a9ccb9 35c3d0c 2822844 35c3d0c 4a9ccb9 35c3d0c 36bf041 c86406f 35c3d0c 4a9ccb9 35c3d0c 896ef55 6341792 |
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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
import gradio as gr
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
from fpdf import FPDF
import tempfile
import os
# مدل LLaMA-3 از طریق Together API
llm = ChatOpenAI(
base_url="https://api.together.xyz/v1",
api_key="0291f33aee03412a47fa5d8e562e515182dcc5a7fb5eefdd1759005979",
model="meta-llama/Llama-3.3-70B-Instruct-Turbo-Free",
max_tokens=1024
)
# متغیر جهانی برای ذخیره گزارش
generated_report_text = ""
# تابع تولید گزارش
def generate_report(operation_data, max_tokens, temperature, top_p):
global generated_report_text
system_prompt = """تو یک افسر گزارشنویس نظامی هستی. وظیفه تو تهیه یک گزارش رسمی، دقیق، ساختاریافته و حرفهای از عملیات نظامی بر اساس دادههای ارائهشده است. اگر اطلاعاتی در متن وجود نداشت، صراحتاً بنویس «ذکر نشده است».
لطفاً گزارش را دقیقاً در قالب فرمتیافته زیر تولید کن، با استفاده از نشانهگذاری واضح (مانند ایموجیها و خطوط جداکننده) تا خروجی قابلخواندن و رسمی باشد:
━━━━━━━━━━━━━━━━━━━━━━
📄 گزارش رسمی عملیات نظامی
🕒 تاریخ و ساعت شروع عملیات:
[اگر در متن بود بنویس، در غیر این صورت بنویس: ذکر نشده است]
🕓 تاریخ و ساعت پایان عملیات:
[اگر در متن بود بنویس، در غیر این صورت بنویس: ذکر نشده است]
📍 مکان عملیات:
[نام مکان عملیات یا بنویس: ذکر نشده است]
🪖 واحدهای شرکتکننده:
[نام گردانها یا یگانها یا بنویس: ذکر نشده است]
🎯 هدف عملیات:
[اهداف اصلی عملیات یا بنویس: ذکر نشده است]
📝 شرح عملیات:
[شرح مختصر عملیات شامل مسیر، تاکتیک، درگیریها و روند پیشروی]
🏁 نتیجه عملیات:
[پیروزی، شکست، توقف، عقبنشینی یا ذکر نشده است]
🩻 تلفات نیروهای خودی:
[تعداد شهدا، مجروحین یا بنویس: ذکر نشده است]
🚫 تلفات دشمن:
[در صورت موجود بودن، ذکر شود - در غیر این صورت بنویس: ذکر نشده است]
🛠️ تجهیزات استفادهشده یا از دسترفته:
[مثلاً تانک، پهپاد، سلاح خاص یا ذکر نشده است]
🗒️ یادداشتهای اضافی:
[شرایط خاص، اطلاعات پشتیبانی، آبوهوا، یا بنویس: ذکر نشده است]
━━━━━━━━━━━━━━━━━━━━━━
✅ این گزارش بر اساس اطلاعات ارائهشده تولید شده و ممکن است برخی جزئیات در دسترس نبوده باشند.
"""
messages = [HumanMessage(content=f"{system_prompt}\n\n{operation_data}")]
response = llm(messages)
generated_report_text = response.content
return generated_report_text
# تابع ساخت PDF فارسی راستچین
def download_pdf():
global generated_report_text
font_path = "Vazir-Black.ttf"
if not os.path.exists(font_path):
return "❌ فونت فارسی Vazir پیدا نشد. لطفاً در مسیر fonts/Vazir.ttf قرار دهید."
pdf = FPDF()
pdf.add_page()
pdf.add_font("Vazir", "", font_path, uni=True)
pdf.set_font("Vazir", size=12)
# تنظیم راستچین با align=R
for line in generated_report_text.split("\n"):
pdf.multi_cell(0, 10, line.strip(), align="R")
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf")
pdf.output(temp_file.name)
return temp_file.name
with gr.Blocks(title="🛡️ گزارشنویس هوش مصنوعی عملیات نظامی") as demo:
gr.Markdown("## 🛡️ گزارشنویس عملیات نظامی با هوش مصنوعی\nاطلاعات خام عملیات نظامی را وارد کن تا گزارش رسمی، خلاصه و حرفهای تولید شود.")
with gr.Row():
with gr.Column(scale=1):
input_text = gr.Textbox(label="📝 اطلاعات عملیات نظامی", lines=10, placeholder="مثلاً: در ساعت ۵ صبح، گردان الف از محور غربی وارد منطقه شد...")
with gr.Column(scale=1):
output_report = gr.Code(label="📄 گزارش رسمی تولید شده", language="markdown")
max_tokens = gr.Slider(128, 2048, value=1024, step=64, label="🎛️ حداکثر توکن خروجی")
temperature = gr.Slider(0.1, 1.5, value=0.7, step=0.1, label="🔥 دمای خلاقیت (temperature)")
top_p = gr.Slider(0.1, 1.0, value=0.95, step=0.05, label="🎯 Top-p")
generate_btn = gr.Button("🚀 تولید گزارش")
download_button = gr.Button("📥 دانلود PDF گزارش")
file_output = gr.File(label="📎 فایل PDF برای دانلود")
generate_btn.click(
fn=generate_report,
inputs=[input_text, max_tokens, temperature, top_p],
outputs=output_report
)
download_button.click(
fn=download_pdf,
inputs=[],
outputs=file_output
)
if __name__ == "__main__":
demo.launch()
|