paudelapil's picture
initial commit
27e9c18
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from app.db.session import get_db
from app.db.models import CustomerProfile
from app.schemas.customers import QueryRequest, QueryResponse
from groq import Groq
from app.core.config import settings
from decouple import config
import json
router = APIRouter()
SECRET_KEY = config("SECRET_KEY")
client = Groq(api_key=config('GROQ_API_KEY'))
@router.post("/results/{job_id}/query", response_model=QueryResponse)
def natural_language_query(
job_id: str,
request: QueryRequest,
db: Session = Depends(get_db)
):
profiles = db.query(CustomerProfile).filter(
CustomerProfile.job_id == job_id
).all()
if not profiles:
raise HTTPException(status_code=404, detail="No results found")
total = len(profiles)
revenue = sum(p.monetary for p in profiles)
segments = {}
for p in profiles:
segments[p.segment] = segments.get(p.segment, 0) + 1
context = f"""
Customer Analytics Data:
- Total customers: {total}
- Total revenue: £{revenue:,.2f}
- Segments: {json.dumps(segments)}
- Anomalies: {sum(1 for p in profiles if p.is_anomaly)}
"""
response = client.chat.completions.create(
model="qwen/qwen3-32b",
messages=[
{
"role": "system",
"content": "You are a customer analytics assistant. Answer questions using the provided data. Be specific and cite numbers."
},
{
"role": "user",
"content": f"Data:\n{context}\n\nQuestion: {request.question}"
}
],
temperature=0.3,
max_tokens=400
)
return QueryResponse(
question=request.question,
answer=response.choices[0].message.content
)