|
|
|
|
|
try: |
|
|
from ..setting_config import settings |
|
|
except ImportError: |
|
|
|
|
|
from setting_config import settings |
|
|
import logging |
|
|
from typing import Union |
|
|
|
|
|
|
|
|
from agents import ( |
|
|
OpenAIChatCompletionsModel, |
|
|
OpenAIResponsesModel, |
|
|
set_tracing_disabled, |
|
|
) |
|
|
from openai import AsyncOpenAI |
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
set_tracing_disabled(True) |
|
|
OPENAI_API_KEY = settings.OPENAI_API_KEY |
|
|
QIANWEN_API_KEY = settings.QIANWEN_API_KEY |
|
|
|
|
|
LONG_MODEL_KEY = OPENAI_API_KEY |
|
|
LONG_MODEL = "claude-3-7-sonnet-20250219" |
|
|
|
|
|
QIANWEN_PLUS_MODEL = "qwen-plus-latest" |
|
|
|
|
|
|
|
|
qianwen_client = AsyncOpenAI( |
|
|
api_key=QIANWEN_API_KEY, |
|
|
base_url=settings.QIANWEN_BASE_URL, |
|
|
) |
|
|
|
|
|
qianwen_plus_model = OpenAIChatCompletionsModel( |
|
|
model=QIANWEN_PLUS_MODEL, |
|
|
openai_client=qianwen_client, |
|
|
) |
|
|
|
|
|
claude_client = AsyncOpenAI( |
|
|
api_key=OPENAI_API_KEY, |
|
|
base_url=settings.OPENAI_BASE_URL, |
|
|
) |
|
|
long_model = OpenAIChatCompletionsModel( |
|
|
model=LONG_MODEL, |
|
|
openai_client=claude_client, |
|
|
) |
|
|
|
|
|
|
|
|
def get_base_url(model: Union[OpenAIChatCompletionsModel, OpenAIResponsesModel]) -> str: |
|
|
"""Utility function to get the base URL for a given model""" |
|
|
return str(model._client._base_url) |
|
|
|
|
|
|
|
|
def model_supports_structured_output( |
|
|
model: Union[OpenAIChatCompletionsModel, OpenAIResponsesModel], |
|
|
) -> bool: |
|
|
"""Utility function to check if a model supports structured output""" |
|
|
structured_output_providers = [ |
|
|
"openai.com", |
|
|
"anthropic.com", |
|
|
"sohoyo.io", |
|
|
"nhss.zhejianglab.com", |
|
|
] |
|
|
return any( |
|
|
provider in get_base_url(model) for provider in structured_output_providers |
|
|
) |
|
|
|