DEMO_COMBINED / app.py
bsmith3715's picture
Upload 2 files
d1ad093 verified
import chainlit as cl
from pilates_evaluator import PilatesVideoEvaluator
from rag_processor import RAGProcessor
import os
from dotenv import load_dotenv
load_dotenv()
# Initialize RAG processor
rag_processor = RAGProcessor()
# Sample Pilates knowledge base - you can replace this with your own documents
PILATES_KNOWLEDGE = [
"The Hundred is a fundamental Pilates exercise that helps build core strength and breathing control.",
"Proper alignment is crucial in Pilates - maintain neutral spine position during exercises.",
"Pilates focuses on six principles: concentration, control, centering, flow, precision, and breathing.",
"The Pilates reformer is a versatile piece of equipment that provides resistance through springs.",
"Pilates exercises should be performed with controlled movements and proper breathing patterns.",
"The Pilates mat work series includes exercises like the Roll Up, Single Leg Stretch, and Double Leg Stretch.",
"Pilates helps improve posture, flexibility, and overall body awareness.",
"Joseph Pilates developed the method as a system of exercises to strengthen the mind and body.",
"Pilates exercises can be modified for different fitness levels and physical conditions.",
"Regular Pilates practice can help prevent injuries and improve athletic performance."
]
# Add documents to RAG system
rag_processor.add_documents(PILATES_KNOWLEDGE)
@cl.on_chat_start
async def start():
await cl.Message(content="Welcome! You can chat with me about Pilates or upload a video to analyze your Pilates exercise.").send()
@cl.on_message
async def main(message: cl.Message):
# Handle video uploads
if message.elements:
video_file = message.elements[0]
if not video_file.name.endswith(('.mp4', '.avi', '.mov')):
await cl.Message(content="Please upload a valid video file (mp4, avi, mov).").send()
return
await cl.Message(content=f"Analyzing video: {video_file.name}...").send()
evaluator = PilatesVideoEvaluator()
try:
evaluator.process_video(video_file.path)
report_path = "pilates_evaluation_report.json"
evaluator.generate_report(report_path)
await cl.Message(content=f"Analysis complete! Report saved to {report_path}.").send()
except Exception as e:
await cl.Message(content=f"Error analyzing video: {e}").send()
return
# Handle chat messages
if message.content:
try:
# Create a message placeholder
msg = cl.Message(content="")
await msg.send()
# Stream the response
async for chunk in rag_processor.generate_response(message.content):
await msg.stream_token(chunk)
except Exception as e:
await cl.Message(content=f"Error processing your message: {e}").send()
return
await cl.Message(content="Please either send a message or upload a video file.").send()