Files
get_wechat/chatlog_fastAPI/services/runtime_settings.py
yuanzhipeng 646efa132e ```
feat(api): 添加万川平台模型配置获取和同步功能

- 新增 getWanchuanModelConfig 函数,按模型编码获取平台模型配置
- 新增 syncWanchuanModelToSettings 函数,从万川平台拉取模型配置并写入后端 AI 设置
- 支持按用途分多个模型编码(generic/vision/voice)分别同步配置
- 配置失败时跳过对应字段,不影响其他模型同步

feat(settings): 重构AI模型配置界面支持多模块分组

- 将AI配置按话题分析、报告生成、视觉、语音四个模块分组展示
- 每个模块独立配置接口地址、密钥和模型名称
- 添加从万川平台获取配置的按钮和同步功能
- 优化配置状态指示和错误提示信息

refactor(config): 扩展AI配置支持独立的语音视觉报告网关

- 新增 voice_base_url/voice_api_key 配置项
- 新增 vision_base_url/vision_api_key 配置项
- 新增 summary_base_url/summary_api_key 配置项
- 留空时回退到 ai_base_url/ai_api_key 兼容单网关场景

refactor(http): 统一使用共享HTTP客户端减少连接开销

- 替换各处 httpx.AsyncClient 为 shared_client
- 在 lifespan 中正确关闭共享客户端资源
- 优化 get_current_wxid 和 health 检查中的HTTP请求

refactor(ai): 按用途缓存AI客户端支持不同网关配置

- 重构 get_openai_client 支持按(base_url, api_key)缓存
- 新增 get_client_for 函数按用途获取对应客户端
- 支持语音、视觉、报告等不同用途使用独立网关和密钥
```
2026-06-24 20:34:10 +08:00

53 lines
1.5 KiB
Python

import logging
import aiosqlite
from config import settings as default_settings
from database import get_active_db_path
log = logging.getLogger(__name__)
_cache: dict | None = None
def invalidate_cache():
global _cache
_cache = None
async def get_ai_settings() -> dict:
global _cache
if _cache is not None:
return _cache
# ai_base_url 保留默认值(阿里云兼容 OpenAI 格式地址),其余字段必须由用户在设置页配置
result = {
"ai_base_url": default_settings.ai_base_url,
"ai_api_key": "",
"ai_model": "",
"summary_model": "",
"vision_model": "",
"voice_model": "",
"topic_analysis_prompt": "",
# 语音/视觉/报告生成独立网关与密钥;留空则由调用方回退到 ai_base_url / ai_api_key
"voice_base_url": "",
"voice_api_key": "",
"vision_base_url": "",
"vision_api_key": "",
"summary_base_url": "",
"summary_api_key": "",
}
try:
path = get_active_db_path()
async with aiosqlite.connect(path) as db:
db.row_factory = aiosqlite.Row
async with db.execute("SELECT key, value FROM app_settings") as cur:
rows = await cur.fetchall()
for row in rows:
if row["key"] in result and row["value"]:
result[row["key"]] = row["value"]
except Exception as e:
log.warning(f"Failed to read runtime settings: {e}")
_cache = result
return result