Files
get_wechat/chatlog_fastAPI/config.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

64 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import os
import tempfile
from pathlib import Path
from pydantic_settings import BaseSettings
from typing import List
def _default_data_dir() -> str:
configured = os.environ.get("CHATLAB_DATA_DIR")
if configured:
return str(Path(configured).expanduser())
appdata = os.environ.get("APPDATA")
if appdata:
return str(Path(appdata) / "ChatLab")
return str(Path.home() / ".chatlab")
def _default_static_dir() -> str:
configured = os.environ.get("CHATLAB_STATIC_DIR")
if configured:
return str(Path(configured).expanduser())
return str((Path(__file__).resolve().parents[1] / "chatlab-web" / "frontend" / "dist"))
class Settings(BaseSettings):
chatlog_base_url: str = "http://127.0.0.1:5030"
ai_base_url: str = "https://dashscope.aliyuncs.com/compatible-mode/v1"
ai_api_key: str = ""
ai_model: str = "" # 不设默认值,必须由用户在设置页配置
summary_model: str = "" # 不设默认值,必须由用户在设置页配置
voice_model: str = "" # 不设默认值,必须由用户在设置页配置
vision_model: str = "" # 不设默认值,必须由用户在设置页配置
# 语音/视觉/报告生成可使用与话题分析不同的网关与密钥(如万川平台不同 code
# 留空则回退到 ai_base_url / ai_api_key。
voice_base_url: str = ""
voice_api_key: str = ""
vision_base_url: str = ""
vision_api_key: str = ""
summary_base_url: str = ""
summary_api_key: str = ""
data_dir: str = _default_data_dir()
static_dir: str = _default_static_dir()
db_path: str = str(Path(_default_data_dir()) / "data" / "knowledge.db")
cors_origins: List[str] = [
"http://127.0.0.1:5173",
"http://localhost:5173",
"http://localhost:3000",
]
class Config:
env_file = ".env"
settings = Settings()
try:
Path(settings.data_dir).mkdir(parents=True, exist_ok=True)
Path(settings.db_path).parent.mkdir(parents=True, exist_ok=True)
except PermissionError:
fallback_dir = Path(tempfile.gettempdir()) / "ChatLab"
fallback_dir.mkdir(parents=True, exist_ok=True)
settings.data_dir = str(fallback_dir)
settings.db_path = str(fallback_dir / "data" / "knowledge.db")
Path(settings.db_path).parent.mkdir(parents=True, exist_ok=True)