feat(v2): 补齐模型连接与会议反馈闭环并完成真实模拟联调

This commit is contained in:
2026-10-01 14:13:58 +08:00
parent fa4163b2d0
commit 8c5999c786
21 changed files with 392 additions and 15 deletions
+40 -1
View File
@@ -5,7 +5,7 @@ from fastapi import APIRouter, Depends, HTTPException, Request
from fastapi.responses import JSONResponse, Response
from api.risk_agent_access import authorize, check_project
from api.project_assistant import enabled
from contracts.lease_library import QueryInput, SelectionInput, ExtractionInput, PackageInput
from contracts.lease_library import QueryInput, SelectionInput, ExtractionInput, PackageInput, ModelSettingsInput
from services.project_assistant import ProjectAssistantService
from services import assistant_store as store, component_registry as registry
from services import lease_case_library as library, lease_extraction, skill_packages
@@ -212,3 +212,42 @@ def plan_components(plan_id: str, project_id: str, request: Request):
return {'plan': frozen['plan'], 'skills': frozen['skills'], 'rules': frozen['rules'],
'cards': frozen.get('legacy_cards', []), 'content_hash': frozen['content_hash']}
return translate(action)
@router.get('/model-settings')
def model_status(request: Request):
guard(request, True)
from services import model_settings
return model_settings.status()
@router.put('/model-settings')
def save_model_settings(payload: ModelSettingsInput, request: Request):
actor=guard(request, True)
from services import model_settings
try:
result=model_settings.save(payload.endpoint,payload.name,payload.api_key)
except ValueError as exc:
code=str(exc)
message='模型由环境配置管理,请联系部署管理员修改' if code=='MODEL_ENV_LOCKED' else '模型设置不合法,请使用受信地址和有效模型名称'
return JSONResponse(status_code=409 if code=='MODEL_ENV_LOCKED' else 422,content={'error':{'code':code,'message':message}})
with service().connect() as db:
store.event(db,'','model.settings_updated',actor,{'managed_by':result['managed_by']})
return result
@router.post('/model-settings/probe')
def probe_model(request: Request):
actor=guard(request, True)
from services import model_settings
result=model_settings.probe()
with service().connect() as db:
store.event(db,'','model.connection_checked',actor,{'ok':result['ok']})
return result
@router.get('/projects/{project_id}/feedback')
def meeting_feedback(project_id: str,request: Request):
guard(request)
def action():
from services.meeting_feedback import summarize
with service().connect() as db:
project(db,request,project_id)
return summarize(db,project_id)
return translate(action)