wire llms, ui tweaks
This commit is contained in:
@@ -100,17 +100,36 @@ def get_pending_rebookings(hub: str, limit: int = 20) -> list[dict]:
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
def generate_narrative(context: dict) -> str:
|
||||
async def generate_narrative(context: dict) -> str:
|
||||
"""Synthesizes aggregated operational context into a structured
|
||||
handover brief for ops managers.
|
||||
|
||||
Uses Claude Sonnet via AWS Bedrock Converse API.
|
||||
Uses Claude via Anthropic SDK (or Bedrock when USE_BEDROCK=true).
|
||||
Output: prioritized, concise, structured by IMMEDIATE / MONITOR / FYI.
|
||||
|
||||
NOTE: In v1, this returns a structured template from the context data.
|
||||
LLM integration will be added when Bedrock is wired up.
|
||||
Falls back to template if no API key is configured.
|
||||
"""
|
||||
# V1: structured template — will be replaced with Bedrock call
|
||||
try:
|
||||
from mcp_servers.shared_llm import generate, _get_provider
|
||||
|
||||
hub = context.get("hub", "ALL")
|
||||
shift_time = context.get("shift_time", datetime.now(timezone.utc).strftime("%H:%M UTC"))
|
||||
|
||||
system_prompt = (
|
||||
f"You are an airline operations shift handover briefing system. "
|
||||
f"Generate a concise handover brief for {hub} at {shift_time}. "
|
||||
f"Structure as: HEADER, then IMMEDIATE ACTION (items needing action within 2h), "
|
||||
f"MONITOR (items that could escalate), FYI (resolved or low-risk). "
|
||||
f"Be concise — ops managers scan, they don't read paragraphs. "
|
||||
f"Use the data provided. Do not invent details."
|
||||
)
|
||||
text = await generate(system_prompt, json.dumps(context, indent=2))
|
||||
return json.dumps({"text": text, "provider": _get_provider()})
|
||||
except Exception:
|
||||
return json.dumps({"text": _template_narrative(context), "provider": "template"})
|
||||
|
||||
|
||||
def _template_narrative(context: dict) -> str:
|
||||
"""Structured template fallback when LLM is unavailable."""
|
||||
sections = []
|
||||
immediate = context.get("immediate", [])
|
||||
monitor = context.get("monitor", [])
|
||||
@@ -119,8 +138,7 @@ def generate_narrative(context: dict) -> str:
|
||||
hub = context.get("hub", "ALL")
|
||||
shift_time = context.get("shift_time", datetime.now(timezone.utc).strftime("%H:%M UTC"))
|
||||
|
||||
header = f"SHIFT HANDOVER BRIEF — {hub} / {shift_time}"
|
||||
sections.append(header)
|
||||
sections.append(f"SHIFT HANDOVER BRIEF — {hub} / {shift_time}")
|
||||
sections.append(f"Generated: {datetime.now(timezone.utc).strftime('%H:%M UTC')}")
|
||||
sections.append("")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user