Spaces:
Runtime error
Runtime error
File size: 1,574 Bytes
a4a22e3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
from fastapi import FastAPI
from pydantic import BaseModel
from sentence_transformers import SentenceTransformer
from transformers import pipeline
import pandas as pd
import numpy as np
# Load embedding model (retriever)
embedder = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
# Load summarizer/generator
summarizer = pipeline("text2text-generation", model="google/flan-t5-base")
# Load your check-in data
checkins = pd.read_csv("all_checkins.csv") # Must have Timestamp, Sender, Msg
messages = checkins["Msg"].astype(str).tolist()
# Precompute embeddings
embeddings = embedder.encode(messages, convert_to_numpy=True)
# FastAPI setup
app = FastAPI()
class Query(BaseModel):
question: str
@app.post("/ask")
def ask(query: Query):
# Step 1: Encode query
q_vec = embedder.encode(query.question, convert_to_numpy=True)
scores = np.dot(embeddings, q_vec) / (
np.linalg.norm(embeddings, axis=1) * np.linalg.norm(q_vec)
)
# Step 2: Grab top 5 matching check-ins
top_idx = np.argsort(scores)[::-1][:5]
retrieved = [f"- {checkins.iloc[i]['Sender']}: {checkins.iloc[i]['Msg']}" for i in top_idx]
context = "\n".join(retrieved)
# Step 3: Summarize into natural answer
prompt = f"Based only on the following check-ins, answer the question.\n\nCheck-ins:\n{context}\n\nQuestion: {query.question}\nAnswer:"
summary = summarizer(prompt, max_length=200, do_sample=False)[0]["generated_text"]
return {
"question": query.question,
"answer": summary,
"evidence": retrieved
}
|