From 50e27a447b647719d2ff13b524cb5e2a35baaf70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A3=BC=ED=98=B8?= <61442066+eora21@users.noreply.github.com> Date: Fri, 5 Dec 2025 23:37:37 +0900 Subject: [PATCH] feat(langchain): add support for Upstage (Solar) in `init_chat_model` (#34220) --- libs/langchain_v1/langchain/chat_models/base.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libs/langchain_v1/langchain/chat_models/base.py b/libs/langchain_v1/langchain/chat_models/base.py index a343c31e23c..c731c15f632 100644 --- a/libs/langchain_v1/langchain/chat_models/base.py +++ b/libs/langchain_v1/langchain/chat_models/base.py @@ -102,6 +102,7 @@ def init_chat_model( - `deepseek...` -> `deepseek` - `grok...` -> `xai` - `sonar...` -> `perplexity` + - `solar...` -> `upstage` model_provider: The model provider if not specified as part of the model arg (see above). @@ -129,6 +130,7 @@ def init_chat_model( - `nvidia` -> [`langchain-nvidia-ai-endpoints`](https://docs.langchain.com/oss/python/integrations/providers/nvidia) - `xai` -> [`langchain-xai`](https://docs.langchain.com/oss/python/integrations/providers/xai) - `perplexity` -> [`langchain-perplexity`](https://docs.langchain.com/oss/python/integrations/providers/perplexity) + - `upstage` -> [`langchain-upstage`](https://docs.langchain.com/oss/python/integrations/providers/upstage) configurable_fields: Which model parameters are configurable at runtime: @@ -449,6 +451,11 @@ def _init_chat_model_helper( from langchain_perplexity import ChatPerplexity return ChatPerplexity(model=model, **kwargs) + if model_provider == "upstage": + _check_pkg("langchain_upstage") + from langchain_upstage import ChatUpstage + + return ChatUpstage(model=model, **kwargs) supported = ", ".join(_SUPPORTED_PROVIDERS) msg = f"Unsupported {model_provider=}.\n\nSupported model providers are: {supported}" raise ValueError(msg) @@ -475,6 +482,7 @@ _SUPPORTED_PROVIDERS = { "ibm", "xai", "perplexity", + "upstage", } @@ -499,6 +507,8 @@ def _attempt_infer_model_provider(model_name: str) -> str | None: return "xai" if model_name.startswith("sonar"): return "perplexity" + if model_name.startswith("solar"): + return "upstage" return None