ranjithkumar111's picture
Upload 10 files
1bfbac9 verified
Raw
History Blame Contribute Delete
2.02 kB
# File: src/agent.py
# Purpose: LLM agent that extracts booking intent from transcript using Groq
import json
from pathlib import Path
from groq import Groq
import sys
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
from config import GROQ_API_KEY, DEPARTMENTS, AVAILABLE_SLOTS, MIN_CONFIDENCE_THRESHOLD
client = Groq(api_key=GROQ_API_KEY)
SYSTEM_PROMPT = """
You are a hospital appointment booking assistant. Extract booking details from the patient request.
Respond ONLY with a valid JSON object. No explanation, no extra text, no markdown backticks.
Extract these fields:
- patient_name: string (use "Unknown" if not mentioned)
- department: one of {departments}
- date: string in YYYY-MM-DD format (infer from relative terms like "tomorrow")
- slot: one of {slots}
- confidence: float between 0 and 1
- missing_info: list of fields you could not determine
Today is {today}.
""".strip()
def extract_booking_intent(transcript: str) -> dict:
from datetime import date
system = SYSTEM_PROMPT.format(
departments=DEPARTMENTS,
slots=AVAILABLE_SLOTS,
today=date.today().isoformat(),
)
response = client.chat.completions.create(
model="llama-3.3-70b-versatile",
temperature=0.0,
max_tokens=512,
response_format={"type": "json_object"},
messages=[
{"role": "system", "content": system},
{"role": "user", "content": transcript},
],
)
intent = json.loads(response.choices[0].message.content.strip())
print(f"[Agent] Extracted intent: {json.dumps(intent, indent=2)}")
return intent
def assess_confidence(intent: dict) -> bool:
return intent.get("confidence", 0.0) >= MIN_CONFIDENCE_THRESHOLD
if __name__ == "__main__":
test = "I want to book a cardiology appointment tomorrow at 2 PM. My name is Ranjith Kumar."
result = extract_booking_intent(test)
print(f"Confidence OK: {assess_confidence(result)}")