Map a LangChain chat model from NAT's EvalBuilder to a litellm target.
langchain_chat_model_to_litellm
langchain_chat_model_to_litellm(llm: object) -> tuple[str, dict[str, Any]]
Resolve litellm.acompletion model and kwargs from a LangChain chat model.
Source code in datarobot_genai/dragent/eval/litellm_target.py
| def langchain_chat_model_to_litellm(llm: object) -> tuple[str, dict[str, Any]]:
"""Resolve ``litellm.acompletion`` ``model`` and kwargs from a LangChain chat model."""
from langchain_litellm import ChatLiteLLM
from langchain_openai import AzureChatOpenAI
from langchain_openai import ChatOpenAI
if isinstance(llm, ChatLiteLLM):
model = getattr(llm, "model", None)
if not model:
raise ValueError("ChatLiteLLM client has no model name configured.")
return str(model), _litellm_kwargs_from_chat_litellm(llm)
if isinstance(llm, AzureChatOpenAI):
deployment = llm.deployment_name or llm.model_name
if not deployment:
raise ValueError(
"Could not determine Azure deployment name from AzureChatOpenAI client."
)
return f"azure/{deployment}", {
"api_key": _secret_value(llm.openai_api_key),
"api_base": llm.azure_endpoint,
"api_version": llm.openai_api_version,
}
if isinstance(llm, ChatOpenAI):
completion_kwargs: dict[str, Any] = {"api_key": _secret_value(llm.openai_api_key)}
if llm.openai_api_base:
completion_kwargs["api_base"] = llm.openai_api_base
if llm.default_headers:
completion_kwargs["extra_headers"] = dict(llm.default_headers)
if getattr(llm, "extra_body", None):
completion_kwargs["extra_body"] = llm.extra_body
return f"openai/{llm.model_name}", completion_kwargs
raise ValueError(
f"{type(llm).__name__} is not supported for DataRobot NAT evaluation judges. "
"Use a workflow LLM that resolves to ChatLiteLLM, ChatOpenAI, or AzureChatOpenAI "
"(for example ``datarobot-llm-component`` or DataRobot LLM Gateway)."
)
|
wrap_langchain_judge_for_llamaindex
wrap_langchain_judge_for_llamaindex(llm: object) -> Any
Wrap any LangChain chat model for LlamaIndex evaluators.
Source code in datarobot_genai/dragent/eval/litellm_target.py
| def wrap_langchain_judge_for_llamaindex(llm: object) -> Any:
"""Wrap any LangChain chat model for LlamaIndex evaluators."""
from datarobot_dome._import_utils import require_extra
from langchain_core.language_models import BaseChatModel
if not isinstance(llm, BaseChatModel):
raise ValueError(
f"{type(llm).__name__} is not a LangChain chat model and cannot be used "
"for LlamaIndex-based evaluation."
)
try:
from llama_index.core.llms import LLM
from llama_index.llms.langchain import LangChainLLM
except ImportError as e:
raise require_extra("llama-index-llms-langchain", "llm-eval", e) from e
return cast(LLM, LangChainLLM(llm=llm))
|