75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
import httpx
|
||
from openai import OpenAI
|
||
from app.config import get_settings
|
||
|
||
_TIMEOUT = httpx.Timeout(connect=10, read=300, write=60, pool=10)
|
||
|
||
_gpt_client: OpenAI | None = None
|
||
_qwen_client: OpenAI | None = None
|
||
_gemini_flash_client: OpenAI | None = None
|
||
_gemini_lite_client: OpenAI | None = None
|
||
_deepseek_client: OpenAI | None = None
|
||
|
||
|
||
def get_gpt_client() -> OpenAI:
|
||
"""laozhang API — gpt-4o / gpt-4o-mini"""
|
||
global _gpt_client
|
||
if _gpt_client is None:
|
||
s = get_settings()
|
||
_gpt_client = OpenAI(
|
||
base_url=s.laozhang_base_url,
|
||
api_key=s.laozhang_api_key,
|
||
)
|
||
return _gpt_client
|
||
|
||
|
||
def get_qwen_client() -> OpenAI:
|
||
"""DashScope — qwen-plus"""
|
||
global _qwen_client
|
||
if _qwen_client is None:
|
||
s = get_settings()
|
||
_qwen_client = OpenAI(
|
||
base_url=s.dashscope_base_url,
|
||
api_key=s.dashscope_api_key,
|
||
)
|
||
return _qwen_client
|
||
|
||
|
||
def get_vision_client() -> OpenAI:
|
||
"""Google Gemini 官方 API(视觉,用于拆题+OCR)— 部署在新加坡可用"""
|
||
global _gemini_flash_client
|
||
if _gemini_flash_client is None:
|
||
s = get_settings()
|
||
_gemini_flash_client = OpenAI(
|
||
base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
|
||
api_key=s.google_gemini_api_key,
|
||
timeout=_TIMEOUT,
|
||
)
|
||
return _gemini_flash_client
|
||
|
||
|
||
def get_gemini_lite_client() -> OpenAI:
|
||
"""laozhang — gemini-3.1-flash-lite-preview(轻量,用于 AI trio)"""
|
||
global _gemini_lite_client
|
||
if _gemini_lite_client is None:
|
||
s = get_settings()
|
||
_gemini_lite_client = OpenAI(
|
||
base_url=s.laozhang_base_url,
|
||
api_key=s.laozhang_api_key,
|
||
timeout=_TIMEOUT,
|
||
)
|
||
return _gemini_lite_client
|
||
|
||
|
||
def get_deepseek_client() -> OpenAI:
|
||
"""DeepSeek — deepseek-chat(用于 AI trio)"""
|
||
global _deepseek_client
|
||
if _deepseek_client is None:
|
||
s = get_settings()
|
||
_deepseek_client = OpenAI(
|
||
base_url=s.deepseek_base_url,
|
||
api_key=s.deepseek_api_key,
|
||
timeout=_TIMEOUT,
|
||
)
|
||
return _deepseek_client
|