refactor: config_views 单入口 + 0语义统一 + FakeAI 收敛(清理单#1#2#3)
- #3 六个消费视图 resolver 收拢 app/platform/config_views(单一定义点): resolve_email/push/ai_settings ← 各服务文件, resolve_contact_flags/ context_seed_map ← conversation, name_to_region_extras ← manager __init__ 内联取值(or None 语义原样)——函数体逐字搬入,服务层 import 之, 旧定义删;Phase 3 编辑器/试金石与该模块对接 - #2 限流 0 语义统一: conn_limiter.try_acquire 的 limit 与 chat_rest 的 rate_limit_per_hour 取值同款——0 或负 = 回退出厂默认(与姊妹键一致), 原 conn_limiter 0=全拒改为回退;chat_rest 取值抽 _resolve_rate_limit 纯函数供锚定 - #1 FakeAI 收敛进 conftest(超集: extract/evaluate/eval_calls),四份拷贝 删(test_lead_email_trigger/test_cc_integration/test_channel_hygiene/ test_lead_push_wiring——计划记三份,grep 实有四份;push_wiring 经 evaluate 参数注入原本地固定返回值,断言零改动) 全量 558 passed(554 + 新增 4: 单入口/内联等价/两处 0 语义) Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -6,9 +6,10 @@ from pathlib import Path
|
||||
|
||||
from app.engine.providers.base import AIProvider
|
||||
from app.engine.providers.glm import GLMProvider
|
||||
from app.engine.config import settings
|
||||
from app.engine.services.boundary_filter import DEFAULT_WALL
|
||||
from app.engine.wall_schema import CompiledWall
|
||||
# Task 10: AI 参数 resolver 收拢至 config_views(单一定义点)
|
||||
from app.platform.config_views import resolve_ai_settings
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -130,33 +131,6 @@ DEFAULT_PROVIDER = PromptProvider.from_dir(
|
||||
Path(__file__).resolve().parents[3] / "seed_profiles" / "jiancai" / "prompts")
|
||||
|
||||
|
||||
# model 的出厂默认值——视同"未设置"哨兵: 租户未定制(merged 值 == 出厂默认)
|
||||
# 时回退 env AI_MODEL,部署级模型选择不因接线失效。显式配了其他值则用租户的。
|
||||
_FACTORY_DEFAULT_MODEL = "glm-4-flash"
|
||||
|
||||
|
||||
def resolve_ai_settings(config_data: dict | None) -> dict:
|
||||
"""租户 config.ai → provider 实例化参数(Task 9 接线; env 回退)。
|
||||
|
||||
api_key/base_url 空槽(None/空串)→ env 智谱凭据(平台默认集团 key,
|
||||
spec §5.5 "用平台默认"状态下租户侧不存密钥);model 空或等于出厂默认
|
||||
→ env AI_MODEL。
|
||||
已知边界: provider 出厂 "glm" 同样遮 env AI_PROVIDER——当前单 provider
|
||||
无实害,多 provider 接入时再改哨兵结构(与 push 数值同款纪律)。
|
||||
config_data=None 路径仅供测试直调,生产调用一律传 runtime.config.data。
|
||||
"""
|
||||
ai = ((config_data or {}).get("ai")) or {}
|
||||
model = ai.get("model")
|
||||
if not model or model == _FACTORY_DEFAULT_MODEL:
|
||||
model = settings.AI_MODEL or _FACTORY_DEFAULT_MODEL
|
||||
return {
|
||||
"provider": ai.get("provider") or settings.AI_PROVIDER,
|
||||
"api_key": ai.get("api_key") or settings.ZHIPU_API_KEY,
|
||||
"base_url": ai.get("base_url") or settings.ZHIPU_BASE_URL,
|
||||
"model": model,
|
||||
}
|
||||
|
||||
|
||||
def create_provider(config_data: dict | None = None) -> AIProvider:
|
||||
"""provider 工厂(Task 9: 按租户配置实例化 glm;None 走 env 平台默认)。"""
|
||||
cfg = resolve_ai_settings(config_data)
|
||||
|
||||
Reference in New Issue
Block a user