from typing import Literal, TypedDict, Unpack from langchain.chat_models import init_chat_model OPENAI_RESPONSES_WS_BASE_URL = "wss://api.openai.com/v1" 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() 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)