function chat_v1
Flask route handler that renders the main chat interface with available collections and instruction templates, requiring authentication.
/tf/active/vicechatdev/vice_ai/app.py
700 - 722
moderate
Purpose
This function serves as the main entry point for the chat interface in a Flask web application. It validates that the chat engine is available, retrieves configuration options including available document collections and instruction templates, logs diagnostic information about templates, and renders the chat.html template with user session data and configuration options. It acts as a gateway ensuring users are authenticated and the chat system is properly initialized before allowing access to the chat interface.
Source Code
def chat():
"""Main chat interface"""
if not chat_engine:
flash('Chat engine not available', 'error')
return redirect(url_for('index'))
# Get available collections and configuration options
collections = getattr(chat_engine, 'available_collections', [])
instruction_templates = list(getattr(chat_engine, 'instruction_templates', {}).keys())
logger.info(f"📋 Available instruction templates: {instruction_templates}")
logger.info(f"🔍 Chat engine instruction_templates attribute check: {hasattr(chat_engine, 'instruction_templates')}")
if hasattr(chat_engine, 'instruction_templates'):
templates_dict = getattr(chat_engine, 'instruction_templates', {})
logger.info(f"📊 Templates dictionary keys: {list(templates_dict.keys())}")
for template_name in list(templates_dict.keys())[:3]: # Log first 3 template previews
template_content = templates_dict.get(template_name, '')
logger.info(f"📄 Template '{template_name}': {len(template_content)} chars - '{template_content[:100]}...'")
return render_template('chat.html',
user=session['user'],
collections=collections,
instruction_templates=instruction_templates)
Return Value
Returns a Flask Response object. On success, returns the rendered 'chat.html' template with context variables (user, collections, instruction_templates). On failure (when chat_engine is not available), flashes an error message and returns a redirect Response to the 'index' route.
Dependencies
flasklogginghybrid_rag_engineauth.azure_authdocument_processorwerkzeug
Required Imports
from flask import Flask, render_template, request, jsonify, session, redirect, url_for, flash
import logging
Conditional/Optional Imports
These imports are only needed under specific conditions:
from hybrid_rag_engine import OneCo_hybrid_RAG
Condition: Required for the chat_engine global variable to be instantiated
Required (conditional)from auth.azure_auth import AzureSSO
Condition: Required for the require_auth decorator to function
Required (conditional)Usage Example
# Module-level setup required before this function works
from flask import Flask, session
import logging
from hybrid_rag_engine import OneCo_hybrid_RAG
app = Flask(__name__)
app.secret_key = 'your-secret-key'
logger = logging.getLogger(__name__)
# Initialize chat engine
chat_engine = OneCo_hybrid_RAG()
# Define require_auth decorator
def require_auth(f):
def wrapper(*args, **kwargs):
if 'user' not in session:
return redirect(url_for('login'))
return f(*args, **kwargs)
wrapper.__name__ = f.__name__
return wrapper
# Register the route
@app.route('/chat')
@require_auth
def chat():
if not chat_engine:
flash('Chat engine not available', 'error')
return redirect(url_for('index'))
collections = getattr(chat_engine, 'available_collections', [])
instruction_templates = list(getattr(chat_engine, 'instruction_templates', {}).keys())
return render_template('chat.html',
user=session['user'],
collections=collections,
instruction_templates=instruction_templates)
# Run the app
if __name__ == '__main__':
app.run(debug=True)
Best Practices
- Ensure chat_engine is properly initialized before the Flask app starts accepting requests
- The require_auth decorator must be applied to protect this route from unauthorized access
- Session management must be properly configured with a secure SECRET_KEY
- The chat_engine should implement available_collections and instruction_templates attributes as expected
- Error handling redirects users gracefully when chat_engine is unavailable
- Extensive logging is used for debugging template availability - consider reducing log verbosity in production
- The function uses getattr with default values to safely access potentially missing attributes
- Template 'chat.html' must be designed to accept user, collections, and instruction_templates context variables
- Consider implementing proper error pages instead of just flashing messages and redirecting
- The global chat_engine variable pattern may cause issues in multi-threaded environments - consider using application context or dependency injection
Tags
Similar Components
AI-powered semantic similarity - components with related functionality: