Spaces:
Runtime error
Runtime error
| """ | |
| Flask OpenAI Chat Application | |
| Modern Flask app with proper structure and error handling | |
| """ | |
| import os | |
| import logging | |
| from flask import Flask | |
| from flask_cors import CORS | |
| from dotenv import load_dotenv | |
| def create_app(): | |
| """Application factory pattern""" | |
| # Load environment variables | |
| load_dotenv() | |
| app = Flask(__name__) | |
| # Configuration | |
| app.config['SECRET_KEY'] = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production') | |
| app.config['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY') | |
| # Validate required environment variables | |
| if not app.config['OPENAI_API_KEY']: | |
| raise ValueError("β OPENAI_API_KEY is not set. Please add it to your .env file.") | |
| # Enable CORS for all routes | |
| CORS(app, origins=["*"]) # In production, specify allowed origins | |
| # Setup logging | |
| setup_logging(app) | |
| # Register blueprints | |
| from app.routes.chat import chat_bp | |
| from app.routes.health import health_bp | |
| app.register_blueprint(chat_bp) | |
| app.register_blueprint(health_bp) | |
| # Error handlers | |
| register_error_handlers(app) | |
| return app | |
| def setup_logging(app): | |
| """Configure application logging""" | |
| if not app.debug: | |
| # Production logging | |
| if not os.path.exists('logs'): | |
| os.mkdir('logs') | |
| file_handler = logging.handlers.RotatingFileHandler( | |
| 'logs/app.log', maxBytes=10240, backupCount=10 | |
| ) | |
| file_handler.setFormatter(logging.Formatter( | |
| '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]' | |
| )) | |
| file_handler.setLevel(logging.INFO) | |
| app.logger.addHandler(file_handler) | |
| app.logger.setLevel(logging.INFO) | |
| app.logger.info('Flask OpenAI Chat startup') | |
| def register_error_handlers(app): | |
| """Register global error handlers""" | |
| def bad_request(error): | |
| return {'error': 'Bad request', 'message': str(error)}, 400 | |
| def not_found(error): | |
| return {'error': 'Not found', 'message': 'The requested resource was not found'}, 404 | |
| def internal_error(error): | |
| app.logger.error(f'Server Error: {error}') | |
| return {'error': 'Internal server error', 'message': 'Something went wrong'}, 500 |