fix: configure dedicated asr upload gateway
This commit is contained in:
21
api/main.py
21
api/main.py
@@ -58,6 +58,8 @@ for _library_dir in [
|
||||
|
||||
LLM_BASE_URL = os.getenv("LLM_BASE_URL", "").strip()
|
||||
LLM_API_KEY = os.getenv("LLM_API_KEY", "").strip()
|
||||
ASR_BASE_URL = os.getenv("ASR_BASE_URL", LLM_BASE_URL).strip()
|
||||
ASR_API_KEY = (os.getenv("ASR_API_KEY") or LLM_API_KEY).strip()
|
||||
ASR_MODEL = os.getenv("ASR_MODEL", "whisper-1")
|
||||
ASR_FALLBACK_MODEL = os.getenv("ASR_FALLBACK_MODEL", "gemini-2.5-flash").strip() or "gemini-2.5-flash"
|
||||
ASR_TIMEOUT_SECONDS = max(15, int(os.getenv("ASR_TIMEOUT_SECONDS", "45")))
|
||||
@@ -200,6 +202,7 @@ _MEDIA_BIN_CACHE: dict[str, str] = {}
|
||||
# OpenAI 客户端(OpenAI 兼容网关,含 SKG ezlink)
|
||||
from openai import OpenAI
|
||||
_llm_client: OpenAI | None = None
|
||||
_asr_client: OpenAI | None = None
|
||||
_image_client: OpenAI | None = None
|
||||
|
||||
def ai_http_client(timeout: float = 120) -> httpx.Client:
|
||||
@@ -230,6 +233,20 @@ def llm() -> OpenAI:
|
||||
_llm_client = OpenAI(**kwargs)
|
||||
return _llm_client
|
||||
|
||||
|
||||
def asr_llm() -> OpenAI:
|
||||
global _asr_client
|
||||
if _asr_client is None:
|
||||
if not ASR_API_KEY:
|
||||
raise RuntimeError("ASR_API_KEY 或 LLM_API_KEY 未配置")
|
||||
kwargs = {"base_url": ASR_BASE_URL or LLM_BASE_URL or None, "api_key": ASR_API_KEY}
|
||||
http_client = openai_http_client()
|
||||
if http_client:
|
||||
kwargs["http_client"] = http_client
|
||||
_asr_client = OpenAI(**kwargs)
|
||||
return _asr_client
|
||||
|
||||
|
||||
def image_llm() -> OpenAI:
|
||||
global _image_client
|
||||
if _image_client is None:
|
||||
@@ -2813,7 +2830,7 @@ def _transcribe_sync(wav: Path) -> list[dict]:
|
||||
duration = media_duration(wav)
|
||||
try:
|
||||
with wav.open("rb") as f:
|
||||
resp = llm().with_options(timeout=ASR_TIMEOUT_SECONDS).audio.transcriptions.create(
|
||||
resp = asr_llm().with_options(timeout=ASR_TIMEOUT_SECONDS).audio.transcriptions.create(
|
||||
file=(wav.name, f, "audio/wav"),
|
||||
model=ASR_MODEL,
|
||||
response_format="verbose_json",
|
||||
@@ -3933,10 +3950,12 @@ def health() -> dict:
|
||||
"llm_configured": bool(LLM_API_KEY),
|
||||
"auth_configured": WEB_AUTH_CONFIGURED,
|
||||
"base_url": LLM_BASE_URL or "openai-default",
|
||||
"asr_base_url": ASR_BASE_URL or LLM_BASE_URL or "openai-default",
|
||||
"image_base_url": IMAGE_BASE_URL or LLM_BASE_URL or "openai-default",
|
||||
"voice_base_url": AZURE_OPENAI_BASE_URL,
|
||||
"models": {
|
||||
"asr": ASR_MODEL,
|
||||
"asr_base_url": ASR_BASE_URL or LLM_BASE_URL or "openai-default",
|
||||
"local_asr": LOCAL_ASR_MODEL,
|
||||
"asr_fallback": ASR_FALLBACK_MODEL,
|
||||
"translate": TRANSLATE_MODEL,
|
||||
|
||||
Reference in New Issue
Block a user