| |
| """API 模块 |
| |
| 定义 Connexion 应用和 API 函数,供 server.yaml 引用。 |
| """ |
|
|
| import os |
|
|
| from workaround_env_fix import diagnose_and_fix_thread_env_vars |
|
|
| |
| diagnose_and_fix_thread_env_vars() |
|
|
| os.environ["TOKENIZERS_PARALLELISM"] = "false" |
|
|
| import connexion |
| from backend.logging_config import configure_logging |
| from backend.api.static import register_static_routes |
| from backend.visit_stats import register_visit_stats |
|
|
| |
| from backend.api.analyze import analyze |
| from backend.api.demo import ( |
| list_demos, |
| save_demo, |
| delete_demo, |
| move_demo, |
| rename_demo, |
| check_admin, |
| ) |
| from backend.api.folder import ( |
| rename_folder_api as rename_folder, |
| delete_folder_api as delete_folder, |
| list_all_folders, |
| create_folder_api, |
| ) |
| from backend.api.fetch_url import fetch_url |
| from backend.api.client_activity import client_activity_report |
| from backend.api.analyze_semantic import analyze_semantic |
| from backend.api.prediction_attribute import prediction_attribute |
| from backend.api.tokenize import tokenize |
| from backend.api.model_switch import ( |
| get_available_models, |
| get_current_model, |
| switch_model, |
| ) |
| from backend.api.visit_stats_api import get_visit_stats |
| from backend.api.openai_completions import ( |
| completions, |
| completions_prompt, |
| completions_stop, |
| ) |
| from backend.completion_generator import register_inference_shutdown_handlers |
|
|
| register_inference_shutdown_handlers() |
|
|
| |
| app = connexion.App(__name__) |
|
|
| |
| configure_logging(app) |
| register_visit_stats(app) |
|
|
| |
| register_static_routes(app) |
| app.add_api('server.yaml') |
|
|
|
|
| def _log_500_handler(request, exc): |
| """未捕获异常时打印完整 traceback 到 stdout,便于 Docker 日志排查""" |
| import traceback |
| from connexion.problem import problem |
| |
| if hasattr(exc, 'status_code') and 400 <= getattr(exc, 'status_code', 0) < 500: |
| raise exc |
| print("=" * 60) |
| print("❌ 500 Internal Server Error") |
| traceback.print_exc() |
| print("=" * 60) |
| return problem( |
| status=500, |
| title="Internal Server Error", |
| detail=str(exc), |
| ) |
|
|
|
|
| app.add_error_handler(Exception, _log_500_handler) |
|
|