feat(config): default to WebSocket and migrate saved HTTP settings

This commit is contained in:
chenmingxuan committed 2026-11-04 17:45:52 +08:00
1 parent 2a3f43fb60
commit 04022f2eaf
18 files changed
+244 -58

No files matched your search

+10 -3
View File
@@ -19,6 +19,7 @@ from pathlib import Path
from typing import Literal
from dotenv import load_dotenv
from filelock import Timeout
from pydantic import Field, SecretStr, model_validator
from pydantic_settings import BaseSettings
@@ -32,6 +33,7 @@ from artemis.config.constants import (
ENV_OPENAI_API_KEY,
ENV_VISION_API_KEY,
)
from artemis.config.environment import migrate_transport_default
from artemis.config.paths import (
GLOBAL_APP_DIR,
get_data_engine_db_path,
@@ -43,13 +45,18 @@ from artemis.utils.logger import get_logger
# Installed wheels load .env from the user directory, outside site-packages.
_canonical_env = get_env_file()
logger = get_logger(__name__)
try:
if migrate_transport_default(_canonical_env):
logger.info("已将全局模型传输协议迁移为 WebSocket;之后可在模型配置中切回 HTTP。")
except (OSError, Timeout):
os.environ["OPENAI_TRANSPORT"] = "websocket"
logger.warning("无法保存 WebSocket 默认迁移;本次使用 WebSocket,下次启动重试。")
load_dotenv(dotenv_path=_canonical_env, verbose=True)
_global_env = GLOBAL_APP_DIR / ".env"
if _global_env.exists() and _global_env.resolve() != _canonical_env.resolve():
load_dotenv(dotenv_path=_global_env, verbose=True)
logger = get_logger(__name__)
def is_placeholder_key(val: str | SecretStr | None) -> bool:
"""Check if an API credential is empty or an unconfigured placeholder value."""
@@ -110,7 +117,7 @@ class Settings(BaseSettings):
OPENAI_BASE_URL: str | None = "https://api-n-cd.playones.com/v1"
OPENAI_MODEL: str = Field(default=DEFAULT_MODEL, min_length=1)
OPENAI_TIMEOUT_SECONDS: float = Field(default=300.0, gt=0)
OPENAI_TRANSPORT: Literal["http", "websocket"] = "http"
OPENAI_TRANSPORT: Literal["http", "websocket"] = "websocket"
# Environment only; deliberately absent from the saved UI/task configuration.
OPENAI_USE_SYSTEM_PROXY: bool = False
OPENAI_MAX_RETRIES: int = Field(default=5, ge=0, le=10)