formiq / chatbot_server.py
chandini2595's picture
Initial commit without binary files
83dd2a8
import os
from fastapi import FastAPI
from pydantic import BaseModel
from openai import OpenAI
from dotenv import load_dotenv
import boto3
# Load environment variables from .env
load_dotenv()
# Initialize OpenAI client for Perplexity
client = OpenAI(
api_key=os.getenv('PERPLEXITY_API_KEY'),
base_url="https://api.perplexity.ai"
)
app = FastAPI()
class ChatRequest(BaseModel):
question: str
@app.post("/chat")
def chat_endpoint(chat_request: ChatRequest):
# Connect to DynamoDB
dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
table = dynamodb.Table('Receipts')
# Get question and search DynamoDB
question = chat_request.question
response = table.scan()
items = response.get('Items', [])
# Format items for context with all receipt details
context = "\n".join([
f"Receipt {item['receipt_no']}:\n"
f" Name: {item['name']}\n"
f" Date: {item['date']}\n"
f" Product: {item['product']}\n"
f" Amount Paid: {item['amount_paid']}\n"
for item in items
])
question = f"Based on these receipts:\n{context}\n\nQuestion: {question}\nPlease provide a 2-3 line answer."
# Prepare messages for the chat
messages = [
{
"role": "system",
"content": (
"You are an artificial intelligence assistant and you need to "
"engage in a helpful, detailed, polite conversation with a user."
"Give a 2-3 line answer."
)
},
{
"role": "user",
"content": question
}
]
try:
# Get response from Perplexity
response = client.chat.completions.create(
model="sonar",
messages=messages
)
return {"answer": response.choices[0].message.content}
except Exception as e:
return {"error": f"Error from LLM: {str(e)}"}