| import gradio as gr | |
| from langchain.chat_models import ChatOpenAI | |
| from langchain.schema import HumanMessage | |
| llm = ChatOpenAI( | |
| base_url="https://api.together.xyz/v1", | |
| api_key="333ac33f5be91819cb7ade101134d73f5e63d299a964ae290850eeac5d82a8d5", | |
| 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 | |
| demo = gr.Interface( | |
| fn=generate_report, | |
| inputs=[ | |
| gr.Textbox( | |
| label="🪖 اطلاعات عملیات نظامی", | |
| lines=10, | |
| placeholder="مثلاً: در ساعت ۵ صبح، گردان الف از محور غربی وارد منطقه شد...", | |
| elem_id="military-input" | |
| ), | |
| gr.Slider(128, 2048, value=1024, step=64, label="🎯 حداکثر توکن خروجی", elem_id="slider-1"), | |
| gr.Slider(0.1, 1.5, value=0.7, step=0.1, label="🔥 دمای خلاقیت (temperature)", elem_id="slider-2"), | |
| gr.Slider(0.1, 1.0, value=0.95, step=0.05, label="🎯 Top-p", elem_id="slider-3"), | |
| ], | |
| outputs=[ | |
| gr.Textbox(label="📄 گزارش رسمی تولید شده", lines=15, elem_id="military-output") | |
| ], | |
| title="🛰️ سامانه گزارشساز رزم یار", | |
| description="🔰 اطلاعات عملیات را وارد کنید تا سامانه یک گزارش رسمی تولید کند.", | |
| css=""" | |
| body { | |
| background-color: #d9dec5 !important; | |
| color: #1e293b !important; | |
| font-family: 'Vazir', sans-serif; | |
| direction: rtl; | |
| } | |
| .gradio-container { | |
| background-color: #d9dec5 !important; | |
| direction: rtl; | |
| } | |
| .gradio-container h1, .gradio-container p { | |
| text-align: center !important; | |
| direction: rtl !important; | |
| } | |
| .gradio-container h1 { | |
| font-size: 32px !important; | |
| margin-top: 20px !important; | |
| font-weight: bold; | |
| color: #1e293b !important; | |
| } | |
| .gradio-container p { | |
| font-size: 20px !important; | |
| color: #374151 !important; | |
| margin-bottom: 30px !important; | |
| } | |
| label { | |
| font-size: 22px !important; | |
| color: #1e293b !important; | |
| font-weight: bold; | |
| text-align: right; | |
| } | |
| #military-input textarea, #military-output textarea { | |
| background-color: #f0f4e5 !important; | |
| color: #1e293b !important; | |
| border: 2px solid #529b39 !important; | |
| direction: rtl !important; | |
| text-align: right !important; | |
| font-size: 16px; | |
| line-height: 1.8; | |
| } | |
| .gr-button { | |
| background-color: #529b39 !important; | |
| color: #eeeeee !important; | |
| border-radius: 12px; | |
| font-size: 18px; | |
| padding: 14px; | |
| transition: all 0.3s ease; | |
| } | |
| .gr-button:hover { | |
| background-color: #45a12d !important; | |
| transform: scale(1.05); | |
| } | |
| .gr-button:active { | |
| background-color: #3b8e27 !important; | |
| } | |
| .gr-button[type="submit"] { | |
| background-color: #529b39 !important; | |
| } | |
| .gr-button[type="reset"] { | |
| background-color: #ff7043 !important; | |
| } | |
| .gradio-footer { | |
| display: none !important; | |
| } | |
| .gr-textbox input[type="text"], .gr-textbox textarea { | |
| font-family: 'Vazir', sans-serif; | |
| } | |
| """, | |
| submit_btn="🎯 تولید گزارش", | |
| clear_btn="🗑️ پاک کردن" | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |