reporting / app.py
M17idd's picture
Update app.py
53033da verified
raw
history blame
5.21 kB
import gradio as gr
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from bidi.algorithm import get_display
import arabic_reshaper
import os
# تعریف مدل LLaMA-3
llm = ChatOpenAI(
base_url="https://api.together.xyz/v1",
api_key="0291f33aee03412a47fa5d8e562e515182dcc5d9aac5a7fb5eefdd1759005979",
model="meta-llama/Llama-3.3-70B-Instruct-Turbo-Free",
max_tokens=1024
)
def generate_report(operation_data, max_tokens, temperature, top_p):
system_prompt = """تو یک افسر گزارش‌نویس نظامی هستی. وظیفه تو تهیه یک گزارش رسمی، دقیق، ساختاریافته و حرفه‌ای از عملیات نظامی بر اساس داده‌های ارائه‌شده است. اگر اطلاعاتی در متن وجود نداشت، صراحتاً بنویس «ذکر نشده است».
لطفاً گزارش را دقیقاً در قالب فرمتیافته زیر تولید کن، با استفاده از نشانه‌گذاری واضح (مانند ایموجی‌ها و خطوط جداکننده) تا خروجی قابل‌خواندن و رسمی باشد:
━━━━━━━━━━━━━━━━━━━━━━
📄 گزارش رسمی عملیات نظامی
🕒 تاریخ و ساعت شروع عملیات:
[اگر در متن بود بنویس، در غیر این صورت بنویس: ذکر نشده است]
🕓 تاریخ و ساعت پایان عملیات:
[اگر در متن بود بنویس، در غیر این صورت بنویس: ذکر نشده است]
📍 مکان عملیات:
[نام مکان عملیات یا بنویس: ذکر نشده است]
🪖 واحدهای شرکت‌کننده:
[نام گردان‌ها یا یگان‌ها یا بنویس: ذکر نشده است]
🎯 هدف عملیات:
[اهداف اصلی عملیات یا بنویس: ذکر نشده است]
📝 شرح عملیات:
[شرح مختصر عملیات شامل مسیر، تاکتیک، درگیری‌ها و روند پیشروی]
🏁 نتیجه عملیات:
[پیروزی، شکست، توقف، عقب‌نشینی یا ذکر نشده است]
🩻 تلفات نیروهای خودی:
[تعداد شهدا، مجروحین یا بنویس: ذکر نشده است]
🚫 تلفات دشمن:
[در صورت موجود بودن، ذکر شود - در غیر این صورت بنویس: ذکر نشده است]
🛠️ تجهیزات استفاده‌شده یا از دست‌رفته:
[مثلاً تانک، پهپاد، سلاح خاص یا ذکر نشده است]
🗒️ یادداشت‌های اضافی:
[شرایط خاص، اطلاعات پشتیبانی، آب‌وهوا، یا بنویس: ذکر نشده است]
━━━━━━━━━━━━━━━━━━━━━━
✅ این گزارش بر اساس اطلاعات خام ارائه‌شده تولید شده و ممکن است برخی جزئیات در دسترس نبوده باشند.
"""
# تعریف پیام‌ها برای مدل
messages = [
HumanMessage(content=f"{system_prompt}\n\n{operation_data}")
]
# ارسال پیام به مدل و گرفتن پاسخ
response = llm(messages)
return response.content
def export_to_pdf():
reshaped_text = arabic_reshaper.reshape(response.content)
bidi_text = get_display(reshaped_text)
output_path = "military_report.pdf"
pdfmetrics.registerFont(TTFont('Vazir', 'Vazir.ttf'))
c = canvas.Canvas(output_path, pagesize=A4)
c.setFont("Vazir", 12)
width, height = A4
x = width - 40
y = height - 40
for line in bidi_text.split('\n'):
reshaped = arabic_reshaper.reshape(line)
bidi_line = get_display(reshaped)
c.drawRightString(x, y, bidi_line)
y -= 18
c.save()
return output_path
with gr.Blocks() as demo:
gr.Markdown("## گزارش‌نویس هوش مصنوعی عملیات نظامی")
operation_input = gr.Textbox(label="اطلاعات عملیات نظامی", lines=10)
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")
output_text = gr.Textbox(label="📄 گزارش رسمی تولید شده", lines=15)
generate_button = gr.Button("تولید گزارش")
pdf_output = gr.File(label="📥 دانلود گزارش PDF")
def wrapper(operation_data, max_tokens, temperature, top_p):
report = generate_report(operation_data, max_tokens, temperature, top_p)
return report
generate_button.click(
fn=wrapper,
inputs=[operation_input, max_tokens, temperature, top_p],
outputs=output_text
)
download_button = gr.Button("📤 دانلود PDF")
download_button.click(fn=export_to_pdf, outputs=pdf_output)
if __name__ == "__main__":
demo.launch()