Aiemotbot2 / app.py
mariasaif20's picture
Rename main.py to app.py
855dc4d verified
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from contextlib import asynccontextmanager
from dotenv import load_dotenv
import base64
import requests
import os
## APPLICATION LIFESPAN
# Load the environment variables using FastAPI lifespan event so that they are available throughout the application
@asynccontextmanager
async def lifespan(app: FastAPI):
# Load the environment variables
load_dotenv()
yield
## FASTAPI APP
# Initialize the FastAPI app
app = FastAPI(lifespan=lifespan)
## PYDANTIC MODELS
# Define a Voice Pydantic model for the request body
class Voice(BaseModel):
audio_content: str
## FUNCTIONS
# Function to encode the audio
def encode_audio(audio_content):
return base64.b64encode(audio_content.encode()).decode('utf-8')
# Function to detect emotion and generate emojis
def detect_emotion_and_generate_emoji(audio_content):
try:
# Get the base64 string
base64_audio = encode_audio(audio_content)
# Make a request to the emotion detection API
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {os.environ['EMOTION_API_KEY']}"
}
payload = {
"audio_content": base64_audio
}
response = requests.post("https://api.emotion-analysis.com/detect", headers=headers, json=payload)
response_data = response.json()
# Process the emotion data and generate emojis
# Assuming the response_data contains the detected emotion (e.g., "happy", "sad", "angry", etc.)
# You would write logic here to map emotions to emojis
# For demonstration, let's assume we have a function to generate emojis based on detected emotion
emojis = generate_emojis(response_data['emotion'])
return emojis
except Exception as e:
# Handle errors
raise HTTPException(status_code=500, detail=str(e))
# Function to generate emojis based on detected emotion
def generate_emojis(emotion):
# This is just a placeholder function
# You would replace this with your actual logic to generate emojis based on the detected emotion
if emotion == "happy":
return "😊😄🥳"
elif emotion == "sad":
return "😢😔😞"
elif emotion == "angry":
return "😡😤🤬"
else:
return "😐🤔😶"
## FASTAPI ENDPOINTS
## POST - /detect_emotion
# Detect emotion from voice content and generate emojis
@app.post("/detect_emotion")
async def detect_emotion(voice: Voice):
try:
# Call the function to detect emotion and generate emojis
emojis = detect_emotion_and_generate_emoji(voice.audio_content)
return emojis
except Exception as e:
# Handle errors
raise HTTPException(status_code=500, detail=str(e))