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