2026-04-28 15:03:21 -07:00
|
|
|
from typing import Literal, TypedDict, Unpack
|
|
|
|
|
|
2026-03-02 12:13:24 -08:00
|
|
|
from langchain.chat_models import init_chat_model
|
|
|
|
|
|
|
|
|
|
OPENAI_RESPONSES_WS_BASE_URL = "wss://api.openai.com/v1"
|
|
|
|
|
|
|
|
|
|
|
2026-04-28 15:03:21 -07:00
|
|
|
OpenAIReasoningEffort = Literal["none", "low", "medium", "high", "xhigh"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OpenAIReasoning(TypedDict, total=False):
|
|
|
|
|
effort: OpenAIReasoningEffort
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ModelKwargs(TypedDict, total=False):
|
|
|
|
|
max_tokens: int | None
|
|
|
|
|
reasoning: OpenAIReasoning | None
|
|
|
|
|
temperature: float | None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def make_model(model_id: str, **kwargs: Unpack[ModelKwargs]):
|
|
|
|
|
model_kwargs: dict[str, object] = kwargs.copy()
|
2026-03-02 12:13:24 -08:00
|
|
|
|
|
|
|
|
if model_id.startswith("openai:"):
|
|
|
|
|
model_kwargs["base_url"] = OPENAI_RESPONSES_WS_BASE_URL
|
|
|
|
|
model_kwargs["use_responses_api"] = True
|
|
|
|
|
|
|
|
|
|
return init_chat_model(model=model_id, **model_kwargs)
|