| from __future__ import annotations |
|
|
| from flask import Flask, jsonify |
| from flask_sock import Sock |
|
|
| from .config import BASE_INSTRUCTIONS, GPT5_CODEX_INSTRUCTIONS |
| from .http import build_cors_headers |
| from .routes_openai import openai_bp |
| from .routes_ollama import ollama_bp |
| from .routes_custom import custom_bp |
| from .websocket_routes import register_websocket_routes |
|
|
|
|
| def create_app( |
| verbose: bool = False, |
| verbose_obfuscation: bool = False, |
| reasoning_effort: str = "medium", |
| reasoning_summary: str = "auto", |
| reasoning_compat: str = "think-tags", |
| fast_mode: bool = False, |
| debug_model: str | None = None, |
| expose_reasoning_models: bool = False, |
| default_web_search: bool = False, |
| ) -> Flask: |
| app = Flask(__name__) |
|
|
| app.config.update( |
| VERBOSE=bool(verbose), |
| VERBOSE_OBFUSCATION=bool(verbose_obfuscation), |
| REASONING_EFFORT=reasoning_effort, |
| REASONING_SUMMARY=reasoning_summary, |
| REASONING_COMPAT=reasoning_compat, |
| FAST_MODE=bool(fast_mode), |
| DEBUG_MODEL=debug_model, |
| BASE_INSTRUCTIONS=BASE_INSTRUCTIONS, |
| GPT5_CODEX_INSTRUCTIONS=GPT5_CODEX_INSTRUCTIONS, |
| EXPOSE_REASONING_MODELS=bool(expose_reasoning_models), |
| DEFAULT_WEB_SEARCH=bool(default_web_search), |
| ) |
|
|
| @app.get("/") |
| @app.get("/health") |
| def health(): |
| return jsonify({"status": "ok"}) |
|
|
| @app.after_request |
| def _cors(resp): |
| for k, v in build_cors_headers().items(): |
| resp.headers.setdefault(k, v) |
| return resp |
|
|
| app.register_blueprint(openai_bp) |
| app.register_blueprint(ollama_bp) |
| app.register_blueprint(custom_bp) |
| sock = Sock(app) |
| register_websocket_routes(sock) |
|
|
| return app |
|
|