scratch_chat / examples /websocket_example.py
WebashalarForML's picture
Upload 178 files
330b6e4 verified
"""
WebSocket integration example for the multi-language chat agent.
This example demonstrates how to set up and use the WebSocket communication layer
with the chat agent services.
"""
import os
import redis
from flask import Flask
from flask_socketio import SocketIO
# Import WebSocket components
from chat_agent.websocket import initialize_websocket_handlers
from chat_agent.services.chat_agent import create_chat_agent
from chat_agent.services.session_manager import create_session_manager
from chat_agent.services.language_context import create_language_context_manager
from chat_agent.services.chat_history import create_chat_history_manager
from chat_agent.services.groq_client import create_groq_client
def create_app_with_websockets():
"""
Create a Flask app with WebSocket support configured.
This example shows how to integrate all the services and set up WebSocket handlers.
"""
# Create Flask app
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key-here'
app.config['TESTING'] = True
# Create SocketIO instance
socketio = SocketIO(app, cors_allowed_origins="*")
# Create Redis client (in production, use proper Redis configuration)
redis_client = redis.Redis(host='localhost', port=6379, db=0, decode_responses=False)
# Create service instances (these would normally be created with proper configuration)
try:
# Create Groq client (requires API key)
groq_api_key = os.getenv('GROQ_API_KEY', 'your-groq-api-key')
groq_client = create_groq_client(groq_api_key)
# Create language context manager
language_context_manager = create_language_context_manager(redis_client)
# Create session manager
session_manager = create_session_manager(redis_client)
# Create chat history manager
chat_history_manager = create_chat_history_manager(redis_client)
# Create chat agent
chat_agent = create_chat_agent(
groq_client, language_context_manager,
session_manager, chat_history_manager
)
# Initialize WebSocket handlers
initialize_websocket_handlers(
socketio, chat_agent, session_manager, redis_client
)
print("✓ WebSocket handlers initialized successfully")
except Exception as e:
print(f"❌ Failed to initialize services: {e}")
print("Note: This example requires proper service configuration")
return app, socketio
def websocket_client_example():
"""
Example of how a client would interact with the WebSocket API.
This shows the expected message formats and event flow.
"""
print("\n=== WebSocket Client Example ===")
# Connection authentication
auth_data = {
'session_id': 'example-session-123',
'user_id': 'example-user-456'
}
print(f"1. Connect with auth: {auth_data}")
# Send a chat message
message_data = {
'content': 'Hello! Can you help me with Python programming?',
'session_id': 'example-session-123'
}
print(f"2. Send message: {message_data}")
# Expected response events:
print("3. Expected response events:")
print(" - message_received: Acknowledgment")
print(" - processing_status: Processing started")
print(" - response_start: Response generation started")
print(" - response_chunk: Streaming response chunks")
print(" - response_complete: Response finished")
# Switch programming language
language_switch_data = {
'language': 'javascript',
'session_id': 'example-session-123'
}
print(f"4. Switch language: {language_switch_data}")
print(" - Expected: language_switched event")
# Typing indicators
print("5. Typing indicators:")
print(" - Send: typing_start event")
print(" - Send: typing_stop event")
print(" - Receive: user_typing / user_typing_stop events")
# Health check
ping_data = {'timestamp': '2024-01-01T12:00:00Z'}
print(f"6. Health check: ping {ping_data}")
print(" - Expected: pong event with timestamps")
# Get session info
print("7. Get session info: get_session_info event")
print(" - Expected: session_info event with session details")
def main():
"""Main example function."""
print("WebSocket Integration Example")
print("=" * 40)
# Show how to create app with WebSocket support
try:
app, socketio = create_app_with_websockets()
print("✓ Flask app with WebSocket support created")
except Exception as e:
print(f"❌ Failed to create app: {e}")
# Show client interaction examples
websocket_client_example()
print("\n=== WebSocket Events Summary ===")
print("Server Events (sent by server):")
print(" - connection_status: Connection established/status")
print(" - message_received: Message acknowledgment")
print(" - processing_status: Processing state updates")
print(" - response_start: Response generation started")
print(" - response_chunk: Streaming response content")
print(" - response_complete: Response generation finished")
print(" - language_switched: Language context changed")
print(" - user_typing: User is typing indicator")
print(" - user_typing_stop: User stopped typing")
print(" - pong: Health check response")
print(" - session_info: Session information")
print(" - error: Error messages")
print("\nClient Events (sent by client):")
print(" - connect: Establish connection (with auth)")
print(" - message: Send chat message")
print(" - language_switch: Change programming language")
print(" - typing_start: Start typing indicator")
print(" - typing_stop: Stop typing indicator")
print(" - ping: Health check request")
print(" - get_session_info: Request session information")
print(" - disconnect: Close connection")
print("\n=== Security Features ===")
print("✓ Message validation and sanitization")
print("✓ Rate limiting (30 messages per minute)")
print("✓ XSS protection with HTML escaping")
print("✓ Malicious content detection")
print("✓ Session-based authentication")
print("✓ Connection timeout management")
print("\n=== Performance Features ===")
print("✓ Redis-based connection management")
print("✓ In-memory connection caching")
print("✓ Streaming response support")
print("✓ Connection pooling and cleanup")
print("✓ Typing indicators for better UX")
if __name__ == '__main__':
main()