army_doctrine / app.py
ciaochris's picture
Create app.py
14d1fb0 verified
raw
history blame
3.02 kB
import gradio as gr
import os
from groq import Groq
from functools import lru_cache
import time
import requests
import json
# Initialize Groq client
client = Groq(
api_key=os.environ.get("GROQ_API_KEY"),
)
# Load Army Doctrine snippets
with open('army_doctrine_snippets.json', 'r') as f:
DOCTRINE_SNIPPETS = json.load(f)['snippets']
@lru_cache(maxsize=100)
def cached_generate_response(query):
# Prepare a context with relevant doctrine snippets
relevant_snippets = [snippet for snippet in DOCTRINE_SNIPPETS if any(keyword in query.lower() for keyword in snippet['keywords'])]
context = "\n".join([snippet['text'] for snippet in relevant_snippets[:3]]) # Use top 3 relevant snippets
prompt = f"""You are an AI assistant specialized in U.S. Army Doctrine, designed to assist soldiers in the field.
Provide a concise, accurate, and actionable response to the following query, based on official U.S. Army Doctrine.
Your response should be clear, direct, and suitable for field conditions.
Relevant Doctrine Context:
{context}
Soldier's Query: {query}
Response:"""
try:
chat_completion = client.chat.completions.create(
messages=[
{
"role": "system",
"content": "You are a U.S. Army Doctrine expert assistant. Provide clear, concise answers based on official doctrine.",
},
{
"role": "user",
"content": prompt,
}
],
model="mixtral-8x7b-32768",
temperature=0.2, # Lower temperature for more consistent, doctrine-based responses
max_tokens=200,
)
return chat_completion.choices[0].message.content
except requests.exceptions.RequestException as e:
return f"Network error: {str(e)}"
except Exception as e:
return f"An error occurred: {str(e)}"
def generate_response(query):
max_retries = 3
retry_delay = 1 # second
for attempt in range(max_retries):
try:
response = cached_generate_response(query)
return response + "\n\nNote: This is AI-generated guidance based on U.S. Army Doctrine. Always verify with official sources and commanding officers."
except Exception as e:
if attempt < max_retries - 1:
time.sleep(retry_delay)
retry_delay *= 2 # Exponential backoff
else:
return f"Failed to generate response after {max_retries} attempts. Error: {str(e)}"
# Create the Gradio interface
iface = gr.Interface(
fn=generate_response,
inputs=gr.Textbox(lines=2, placeholder="Enter your field situation or doctrine query here..."),
outputs="text",
title="U.S. Army Doctrine Field Assistant",
description="Get quick, doctrine-based guidance for field situations. Always verify with official sources and commanding officers.",
)
# Launch the app
iface.launch()