datarobot-genai 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- datarobot_genai/__init__.py +19 -0
- datarobot_genai/core/__init__.py +0 -0
- datarobot_genai/core/agents/__init__.py +43 -0
- datarobot_genai/core/agents/base.py +195 -0
- datarobot_genai/core/chat/__init__.py +19 -0
- datarobot_genai/core/chat/auth.py +146 -0
- datarobot_genai/core/chat/client.py +178 -0
- datarobot_genai/core/chat/responses.py +297 -0
- datarobot_genai/core/cli/__init__.py +18 -0
- datarobot_genai/core/cli/agent_environment.py +47 -0
- datarobot_genai/core/cli/agent_kernel.py +211 -0
- datarobot_genai/core/custom_model.py +141 -0
- datarobot_genai/core/mcp/__init__.py +0 -0
- datarobot_genai/core/mcp/common.py +218 -0
- datarobot_genai/core/telemetry_agent.py +126 -0
- datarobot_genai/core/utils/__init__.py +3 -0
- datarobot_genai/core/utils/auth.py +234 -0
- datarobot_genai/core/utils/urls.py +64 -0
- datarobot_genai/crewai/__init__.py +24 -0
- datarobot_genai/crewai/agent.py +42 -0
- datarobot_genai/crewai/base.py +159 -0
- datarobot_genai/crewai/events.py +117 -0
- datarobot_genai/crewai/mcp.py +59 -0
- datarobot_genai/drmcp/__init__.py +78 -0
- datarobot_genai/drmcp/core/__init__.py +13 -0
- datarobot_genai/drmcp/core/auth.py +165 -0
- datarobot_genai/drmcp/core/clients.py +180 -0
- datarobot_genai/drmcp/core/config.py +250 -0
- datarobot_genai/drmcp/core/config_utils.py +174 -0
- datarobot_genai/drmcp/core/constants.py +18 -0
- datarobot_genai/drmcp/core/credentials.py +190 -0
- datarobot_genai/drmcp/core/dr_mcp_server.py +316 -0
- datarobot_genai/drmcp/core/dr_mcp_server_logo.py +136 -0
- datarobot_genai/drmcp/core/dynamic_prompts/__init__.py +13 -0
- datarobot_genai/drmcp/core/dynamic_prompts/controllers.py +130 -0
- datarobot_genai/drmcp/core/dynamic_prompts/dr_lib.py +128 -0
- datarobot_genai/drmcp/core/dynamic_prompts/register.py +206 -0
- datarobot_genai/drmcp/core/dynamic_prompts/utils.py +33 -0
- datarobot_genai/drmcp/core/dynamic_tools/__init__.py +14 -0
- datarobot_genai/drmcp/core/dynamic_tools/deployment/__init__.py +0 -0
- datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/__init__.py +14 -0
- datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/base.py +72 -0
- datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/default.py +82 -0
- datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/drum.py +238 -0
- datarobot_genai/drmcp/core/dynamic_tools/deployment/config.py +228 -0
- datarobot_genai/drmcp/core/dynamic_tools/deployment/controllers.py +63 -0
- datarobot_genai/drmcp/core/dynamic_tools/deployment/metadata.py +162 -0
- datarobot_genai/drmcp/core/dynamic_tools/deployment/register.py +87 -0
- datarobot_genai/drmcp/core/dynamic_tools/deployment/schemas/drum_agentic_fallback_schema.json +36 -0
- datarobot_genai/drmcp/core/dynamic_tools/deployment/schemas/drum_prediction_fallback_schema.json +10 -0
- datarobot_genai/drmcp/core/dynamic_tools/register.py +254 -0
- datarobot_genai/drmcp/core/dynamic_tools/schema.py +532 -0
- datarobot_genai/drmcp/core/exceptions.py +25 -0
- datarobot_genai/drmcp/core/logging.py +98 -0
- datarobot_genai/drmcp/core/mcp_instance.py +542 -0
- datarobot_genai/drmcp/core/mcp_server_tools.py +129 -0
- datarobot_genai/drmcp/core/memory_management/__init__.py +13 -0
- datarobot_genai/drmcp/core/memory_management/manager.py +820 -0
- datarobot_genai/drmcp/core/memory_management/memory_tools.py +201 -0
- datarobot_genai/drmcp/core/routes.py +436 -0
- datarobot_genai/drmcp/core/routes_utils.py +30 -0
- datarobot_genai/drmcp/core/server_life_cycle.py +107 -0
- datarobot_genai/drmcp/core/telemetry.py +424 -0
- datarobot_genai/drmcp/core/tool_filter.py +108 -0
- datarobot_genai/drmcp/core/utils.py +131 -0
- datarobot_genai/drmcp/server.py +19 -0
- datarobot_genai/drmcp/test_utils/__init__.py +13 -0
- datarobot_genai/drmcp/test_utils/integration_mcp_server.py +102 -0
- datarobot_genai/drmcp/test_utils/mcp_utils_ete.py +96 -0
- datarobot_genai/drmcp/test_utils/mcp_utils_integration.py +94 -0
- datarobot_genai/drmcp/test_utils/openai_llm_mcp_client.py +234 -0
- datarobot_genai/drmcp/test_utils/tool_base_ete.py +151 -0
- datarobot_genai/drmcp/test_utils/utils.py +91 -0
- datarobot_genai/drmcp/tools/__init__.py +14 -0
- datarobot_genai/drmcp/tools/predictive/__init__.py +27 -0
- datarobot_genai/drmcp/tools/predictive/data.py +97 -0
- datarobot_genai/drmcp/tools/predictive/deployment.py +91 -0
- datarobot_genai/drmcp/tools/predictive/deployment_info.py +392 -0
- datarobot_genai/drmcp/tools/predictive/model.py +148 -0
- datarobot_genai/drmcp/tools/predictive/predict.py +254 -0
- datarobot_genai/drmcp/tools/predictive/predict_realtime.py +307 -0
- datarobot_genai/drmcp/tools/predictive/project.py +72 -0
- datarobot_genai/drmcp/tools/predictive/training.py +651 -0
- datarobot_genai/langgraph/__init__.py +0 -0
- datarobot_genai/langgraph/agent.py +341 -0
- datarobot_genai/langgraph/mcp.py +73 -0
- datarobot_genai/llama_index/__init__.py +16 -0
- datarobot_genai/llama_index/agent.py +50 -0
- datarobot_genai/llama_index/base.py +299 -0
- datarobot_genai/llama_index/mcp.py +79 -0
- datarobot_genai/nat/__init__.py +0 -0
- datarobot_genai/nat/agent.py +258 -0
- datarobot_genai/nat/datarobot_llm_clients.py +249 -0
- datarobot_genai/nat/datarobot_llm_providers.py +130 -0
- datarobot_genai/py.typed +0 -0
- datarobot_genai-0.2.0.dist-info/METADATA +139 -0
- datarobot_genai-0.2.0.dist-info/RECORD +101 -0
- datarobot_genai-0.2.0.dist-info/WHEEL +4 -0
- datarobot_genai-0.2.0.dist-info/entry_points.txt +3 -0
- datarobot_genai-0.2.0.dist-info/licenses/AUTHORS +2 -0
- datarobot_genai-0.2.0.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# Copyright 2025 DataRobot, Inc. and its affiliates.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from collections.abc import AsyncGenerator
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
from crewai import LLM
|
|
19
|
+
from langchain_openai import ChatOpenAI
|
|
20
|
+
from llama_index.core.base.llms.types import LLMMetadata
|
|
21
|
+
from llama_index.llms.litellm import LiteLLM
|
|
22
|
+
from nat.builder.builder import Builder
|
|
23
|
+
from nat.builder.framework_enum import LLMFrameworkEnum
|
|
24
|
+
from nat.cli.register_workflow import register_llm_client
|
|
25
|
+
|
|
26
|
+
from ..nat.datarobot_llm_providers import DataRobotLLMComponentModelConfig
|
|
27
|
+
from ..nat.datarobot_llm_providers import DataRobotLLMDeploymentModelConfig
|
|
28
|
+
from ..nat.datarobot_llm_providers import DataRobotLLMGatewayModelConfig
|
|
29
|
+
from ..nat.datarobot_llm_providers import DataRobotNIMModelConfig
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class DataRobotChatOpenAI(ChatOpenAI):
|
|
33
|
+
def _get_request_payload(
|
|
34
|
+
self,
|
|
35
|
+
*args: Any,
|
|
36
|
+
**kwargs: Any,
|
|
37
|
+
) -> dict:
|
|
38
|
+
# We need to default to include_usage=True for streaming but we get 400 response
|
|
39
|
+
# if stream_options is present for a non-streaming call.
|
|
40
|
+
payload = super()._get_request_payload(*args, **kwargs)
|
|
41
|
+
if not payload.get("stream"):
|
|
42
|
+
payload.pop("stream_options", None)
|
|
43
|
+
return payload
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class DataRobotLiteLLM(LiteLLM): # type: ignore[misc]
|
|
47
|
+
"""DataRobotLiteLLM is a small LiteLLM wrapper class that makes all LiteLLM endpoints
|
|
48
|
+
compatible with the LlamaIndex library.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def metadata(self) -> LLMMetadata:
|
|
53
|
+
"""Returns the metadata for the LLM.
|
|
54
|
+
|
|
55
|
+
This is required to enable the is_chat_model and is_function_calling_model, which are
|
|
56
|
+
mandatory for LlamaIndex agents. By default, LlamaIndex assumes these are false unless each
|
|
57
|
+
individual model config in LiteLLM explicitly sets them to true. To use custom LLM
|
|
58
|
+
endpoints with LlamaIndex agents, you must override this method to return the appropriate
|
|
59
|
+
metadata.
|
|
60
|
+
"""
|
|
61
|
+
return LLMMetadata(
|
|
62
|
+
context_window=128000,
|
|
63
|
+
num_output=self.max_tokens or -1,
|
|
64
|
+
is_chat_model=True,
|
|
65
|
+
is_function_calling_model=True,
|
|
66
|
+
model_name=self.model,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
@register_llm_client(
|
|
71
|
+
config_type=DataRobotLLMGatewayModelConfig, wrapper_type=LLMFrameworkEnum.LANGCHAIN
|
|
72
|
+
)
|
|
73
|
+
async def datarobot_llm_gateway_langchain(
|
|
74
|
+
llm_config: DataRobotLLMGatewayModelConfig, builder: Builder
|
|
75
|
+
) -> AsyncGenerator[ChatOpenAI]:
|
|
76
|
+
config = llm_config.model_dump(exclude={"type", "thinking"}, by_alias=True, exclude_none=True)
|
|
77
|
+
config["base_url"] = config["base_url"] + "/genai/llmgw"
|
|
78
|
+
config["stream_options"] = {"include_usage": True}
|
|
79
|
+
config["model"] = config["model"].removeprefix("datarobot/")
|
|
80
|
+
yield DataRobotChatOpenAI(**config)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
@register_llm_client(
|
|
84
|
+
config_type=DataRobotLLMGatewayModelConfig, wrapper_type=LLMFrameworkEnum.CREWAI
|
|
85
|
+
)
|
|
86
|
+
async def datarobot_llm_gateway_crewai(
|
|
87
|
+
llm_config: DataRobotLLMGatewayModelConfig, builder: Builder
|
|
88
|
+
) -> AsyncGenerator[LLM]:
|
|
89
|
+
config = llm_config.model_dump(exclude={"type", "thinking"}, by_alias=True, exclude_none=True)
|
|
90
|
+
if not config["model"].startswith("datarobot/"):
|
|
91
|
+
config["model"] = "datarobot/" + config["model"]
|
|
92
|
+
config["base_url"] = config["base_url"].removesuffix("/api/v2")
|
|
93
|
+
yield LLM(**config)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@register_llm_client(
|
|
97
|
+
config_type=DataRobotLLMGatewayModelConfig, wrapper_type=LLMFrameworkEnum.LLAMA_INDEX
|
|
98
|
+
)
|
|
99
|
+
async def datarobot_llm_gateway_llamaindex(
|
|
100
|
+
llm_config: DataRobotLLMGatewayModelConfig, builder: Builder
|
|
101
|
+
) -> AsyncGenerator[LLM]:
|
|
102
|
+
config = llm_config.model_dump(exclude={"type", "thinking"}, by_alias=True, exclude_none=True)
|
|
103
|
+
if not config["model"].startswith("datarobot/"):
|
|
104
|
+
config["model"] = "datarobot/" + config["model"]
|
|
105
|
+
config["api_base"] = config.pop("base_url").removesuffix("/api/v2")
|
|
106
|
+
yield DataRobotLiteLLM(**config)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
@register_llm_client(
|
|
110
|
+
config_type=DataRobotLLMDeploymentModelConfig, wrapper_type=LLMFrameworkEnum.LANGCHAIN
|
|
111
|
+
)
|
|
112
|
+
async def datarobot_llm_deployment_langchain(
|
|
113
|
+
llm_config: DataRobotLLMDeploymentModelConfig, builder: Builder
|
|
114
|
+
) -> AsyncGenerator[ChatOpenAI]:
|
|
115
|
+
config = llm_config.model_dump(
|
|
116
|
+
exclude={"type", "thinking"},
|
|
117
|
+
by_alias=True,
|
|
118
|
+
exclude_none=True,
|
|
119
|
+
)
|
|
120
|
+
config["stream_options"] = {"include_usage": True}
|
|
121
|
+
config["model"] = config["model"].removeprefix("datarobot/")
|
|
122
|
+
yield DataRobotChatOpenAI(**config)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
@register_llm_client(
|
|
126
|
+
config_type=DataRobotLLMDeploymentModelConfig, wrapper_type=LLMFrameworkEnum.CREWAI
|
|
127
|
+
)
|
|
128
|
+
async def datarobot_llm_deployment_crewai(
|
|
129
|
+
llm_config: DataRobotLLMDeploymentModelConfig, builder: Builder
|
|
130
|
+
) -> AsyncGenerator[LLM]:
|
|
131
|
+
config = llm_config.model_dump(
|
|
132
|
+
exclude={"type", "thinking"},
|
|
133
|
+
by_alias=True,
|
|
134
|
+
exclude_none=True,
|
|
135
|
+
)
|
|
136
|
+
if not config["model"].startswith("datarobot/"):
|
|
137
|
+
config["model"] = "datarobot/" + config["model"]
|
|
138
|
+
config["api_base"] = config.pop("base_url") + "/chat/completions"
|
|
139
|
+
yield LLM(**config)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
@register_llm_client(
|
|
143
|
+
config_type=DataRobotLLMDeploymentModelConfig, wrapper_type=LLMFrameworkEnum.LLAMA_INDEX
|
|
144
|
+
)
|
|
145
|
+
async def datarobot_llm_deployment_llamaindex(
|
|
146
|
+
llm_config: DataRobotLLMDeploymentModelConfig, builder: Builder
|
|
147
|
+
) -> AsyncGenerator[LLM]:
|
|
148
|
+
config = llm_config.model_dump(
|
|
149
|
+
exclude={"type", "thinking"},
|
|
150
|
+
by_alias=True,
|
|
151
|
+
exclude_none=True,
|
|
152
|
+
)
|
|
153
|
+
if not config["model"].startswith("datarobot/"):
|
|
154
|
+
config["model"] = "datarobot/" + config["model"]
|
|
155
|
+
config["api_base"] = config.pop("base_url") + "/chat/completions"
|
|
156
|
+
yield DataRobotLiteLLM(**config)
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
@register_llm_client(config_type=DataRobotNIMModelConfig, wrapper_type=LLMFrameworkEnum.LANGCHAIN)
|
|
160
|
+
async def datarobot_nim_langchain(
|
|
161
|
+
llm_config: DataRobotNIMModelConfig, builder: Builder
|
|
162
|
+
) -> AsyncGenerator[ChatOpenAI]:
|
|
163
|
+
config = llm_config.model_dump(
|
|
164
|
+
exclude={"type", "thinking"},
|
|
165
|
+
by_alias=True,
|
|
166
|
+
exclude_none=True,
|
|
167
|
+
)
|
|
168
|
+
config["stream_options"] = {"include_usage": True}
|
|
169
|
+
config["model"] = config["model"].removeprefix("datarobot/")
|
|
170
|
+
yield DataRobotChatOpenAI(**config)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
@register_llm_client(config_type=DataRobotNIMModelConfig, wrapper_type=LLMFrameworkEnum.CREWAI)
|
|
174
|
+
async def datarobot_nim_crewai(
|
|
175
|
+
llm_config: DataRobotNIMModelConfig, builder: Builder
|
|
176
|
+
) -> AsyncGenerator[LLM]:
|
|
177
|
+
config = llm_config.model_dump(
|
|
178
|
+
exclude={"type", "thinking", "max_retries"},
|
|
179
|
+
by_alias=True,
|
|
180
|
+
exclude_none=True,
|
|
181
|
+
)
|
|
182
|
+
if not config["model"].startswith("datarobot/"):
|
|
183
|
+
config["model"] = "datarobot/" + config["model"]
|
|
184
|
+
config["api_base"] = config.pop("base_url") + "/chat/completions"
|
|
185
|
+
yield LLM(**config)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
@register_llm_client(config_type=DataRobotNIMModelConfig, wrapper_type=LLMFrameworkEnum.LLAMA_INDEX)
|
|
189
|
+
async def datarobot_nim_llamaindex(
|
|
190
|
+
llm_config: DataRobotNIMModelConfig, builder: Builder
|
|
191
|
+
) -> AsyncGenerator[LLM]:
|
|
192
|
+
config = llm_config.model_dump(
|
|
193
|
+
exclude={"type", "thinking"},
|
|
194
|
+
by_alias=True,
|
|
195
|
+
exclude_none=True,
|
|
196
|
+
)
|
|
197
|
+
if not config["model"].startswith("datarobot/"):
|
|
198
|
+
config["model"] = "datarobot/" + config["model"]
|
|
199
|
+
config["api_base"] = config.pop("base_url") + "/chat/completions"
|
|
200
|
+
yield DataRobotLiteLLM(**config)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
@register_llm_client(
|
|
204
|
+
config_type=DataRobotLLMComponentModelConfig, wrapper_type=LLMFrameworkEnum.LANGCHAIN
|
|
205
|
+
)
|
|
206
|
+
async def datarobot_llm_component_langchain(
|
|
207
|
+
llm_config: DataRobotLLMComponentModelConfig, builder: Builder
|
|
208
|
+
) -> AsyncGenerator[ChatOpenAI]:
|
|
209
|
+
config = llm_config.model_dump(exclude={"type", "thinking"}, by_alias=True, exclude_none=True)
|
|
210
|
+
if config["use_datarobot_llm_gateway"]:
|
|
211
|
+
config["base_url"] = config["base_url"] + "/genai/llmgw"
|
|
212
|
+
config["stream_options"] = {"include_usage": True}
|
|
213
|
+
config["model"] = config["model"].removeprefix("datarobot/")
|
|
214
|
+
config.pop("use_datarobot_llm_gateway")
|
|
215
|
+
yield DataRobotChatOpenAI(**config)
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
@register_llm_client(
|
|
219
|
+
config_type=DataRobotLLMComponentModelConfig, wrapper_type=LLMFrameworkEnum.CREWAI
|
|
220
|
+
)
|
|
221
|
+
async def datarobot_llm_component_crewai(
|
|
222
|
+
llm_config: DataRobotLLMComponentModelConfig, builder: Builder
|
|
223
|
+
) -> AsyncGenerator[LLM]:
|
|
224
|
+
config = llm_config.model_dump(exclude={"type", "thinking"}, by_alias=True, exclude_none=True)
|
|
225
|
+
if not config["model"].startswith("datarobot/"):
|
|
226
|
+
config["model"] = "datarobot/" + config["model"]
|
|
227
|
+
if config["use_datarobot_llm_gateway"]:
|
|
228
|
+
config["base_url"] = config["base_url"].removesuffix("/api/v2")
|
|
229
|
+
else:
|
|
230
|
+
config["api_base"] = config.pop("base_url") + "/chat/completions"
|
|
231
|
+
config.pop("use_datarobot_llm_gateway")
|
|
232
|
+
yield LLM(**config)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
@register_llm_client(
|
|
236
|
+
config_type=DataRobotLLMComponentModelConfig, wrapper_type=LLMFrameworkEnum.LLAMA_INDEX
|
|
237
|
+
)
|
|
238
|
+
async def datarobot_llm_component_llamaindex(
|
|
239
|
+
llm_config: DataRobotLLMComponentModelConfig, builder: Builder
|
|
240
|
+
) -> AsyncGenerator[LLM]:
|
|
241
|
+
config = llm_config.model_dump(exclude={"type", "thinking"}, by_alias=True, exclude_none=True)
|
|
242
|
+
if not config["model"].startswith("datarobot/"):
|
|
243
|
+
config["model"] = "datarobot/" + config["model"]
|
|
244
|
+
if config["use_datarobot_llm_gateway"]:
|
|
245
|
+
config["api_base"] = config.pop("base_url").removesuffix("/api/v2")
|
|
246
|
+
else:
|
|
247
|
+
config["api_base"] = config.pop("base_url") + "/chat/completions"
|
|
248
|
+
config.pop("use_datarobot_llm_gateway")
|
|
249
|
+
yield DataRobotLiteLLM(**config)
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Copyright 2025 DataRobot, Inc. and its affiliates.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from datarobot.core.config import DataRobotAppFrameworkBaseSettings
|
|
16
|
+
from nat.builder.builder import Builder
|
|
17
|
+
from nat.builder.llm import LLMProviderInfo
|
|
18
|
+
from nat.cli.register_workflow import register_llm_provider
|
|
19
|
+
from nat.llm.openai_llm import OpenAIModelConfig
|
|
20
|
+
from pydantic import AliasChoices
|
|
21
|
+
from pydantic import Field
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Config(DataRobotAppFrameworkBaseSettings):
|
|
25
|
+
"""
|
|
26
|
+
Finds variables in the priority order of: env
|
|
27
|
+
variables (including Runtime Parameters), .env, file_secrets, then
|
|
28
|
+
Pulumi output variables.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
datarobot_endpoint: str = "https://app.datarobot.com/api/v2"
|
|
32
|
+
datarobot_api_token: str | None = None
|
|
33
|
+
llm_deployment_id: str | None = None
|
|
34
|
+
nim_deployment_id: str | None = None
|
|
35
|
+
use_datarobot_llm_gateway: bool = False
|
|
36
|
+
llm_default_model: str | None = None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
config = Config()
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class DataRobotLLMComponentModelConfig(OpenAIModelConfig, name="datarobot-llm-component"): # type: ignore[call-arg]
|
|
43
|
+
"""A DataRobot LLM provider to be used with an LLM client."""
|
|
44
|
+
|
|
45
|
+
api_key: str | None = Field(
|
|
46
|
+
default=config.datarobot_api_token, description="DataRobot API key."
|
|
47
|
+
)
|
|
48
|
+
base_url: str | None = Field(
|
|
49
|
+
default=config.datarobot_endpoint.rstrip("/")
|
|
50
|
+
if config.use_datarobot_llm_gateway
|
|
51
|
+
else config.datarobot_endpoint + f"/deployments/{config.llm_deployment_id}",
|
|
52
|
+
description="DataRobot LLM URL.",
|
|
53
|
+
)
|
|
54
|
+
model_name: str = Field(
|
|
55
|
+
validation_alias=AliasChoices("model_name", "model"),
|
|
56
|
+
serialization_alias="model",
|
|
57
|
+
description="The model name.",
|
|
58
|
+
default=config.llm_default_model or "datarobot-deployed-llm",
|
|
59
|
+
)
|
|
60
|
+
use_datarobot_llm_gateway: bool = config.use_datarobot_llm_gateway
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@register_llm_provider(config_type=DataRobotLLMComponentModelConfig)
|
|
64
|
+
async def datarobot_llm_component(
|
|
65
|
+
config: DataRobotLLMComponentModelConfig, _builder: Builder
|
|
66
|
+
) -> LLMProviderInfo:
|
|
67
|
+
yield LLMProviderInfo(
|
|
68
|
+
config=config, description="DataRobot LLM Component for use with an LLM client."
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class DataRobotLLMGatewayModelConfig(OpenAIModelConfig, name="datarobot-llm-gateway"): # type: ignore[call-arg]
|
|
73
|
+
"""A DataRobot LLM provider to be used with an LLM client."""
|
|
74
|
+
|
|
75
|
+
api_key: str | None = Field(
|
|
76
|
+
default=config.datarobot_api_token, description="DataRobot API key."
|
|
77
|
+
)
|
|
78
|
+
base_url: str | None = Field(
|
|
79
|
+
default=config.datarobot_endpoint.rstrip("/"), description="DataRobot LLM gateway URL."
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
@register_llm_provider(config_type=DataRobotLLMGatewayModelConfig)
|
|
84
|
+
async def datarobot_llm_gateway(
|
|
85
|
+
config: DataRobotLLMGatewayModelConfig, _builder: Builder
|
|
86
|
+
) -> LLMProviderInfo:
|
|
87
|
+
yield LLMProviderInfo(
|
|
88
|
+
config=config, description="DataRobot LLM Gateway for use with an LLM client."
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class DataRobotLLMDeploymentModelConfig(OpenAIModelConfig, name="datarobot-llm-deployment"): # type: ignore[call-arg]
|
|
93
|
+
"""A DataRobot LLM provider to be used with an LLM client."""
|
|
94
|
+
|
|
95
|
+
api_key: str | None = Field(
|
|
96
|
+
default=config.datarobot_api_token, description="DataRobot API key."
|
|
97
|
+
)
|
|
98
|
+
base_url: str | None = Field(
|
|
99
|
+
default=config.datarobot_endpoint + f"/deployments/{config.llm_deployment_id}"
|
|
100
|
+
)
|
|
101
|
+
model_name: str = Field(
|
|
102
|
+
validation_alias=AliasChoices("model_name", "model"),
|
|
103
|
+
serialization_alias="model",
|
|
104
|
+
description="The model name to pass through to the deployment.",
|
|
105
|
+
default="datarobot-deployed-llm",
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
@register_llm_provider(config_type=DataRobotLLMDeploymentModelConfig)
|
|
110
|
+
async def datarobot_llm_deployment(
|
|
111
|
+
config: DataRobotLLMDeploymentModelConfig, _builder: Builder
|
|
112
|
+
) -> LLMProviderInfo:
|
|
113
|
+
yield LLMProviderInfo(
|
|
114
|
+
config=config, description="DataRobot LLM deployment for use with an LLM client."
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class DataRobotNIMModelConfig(DataRobotLLMDeploymentModelConfig, name="datarobot-nim"): # type: ignore[call-arg]
|
|
119
|
+
"""A DataRobot NIM LLM provider to be used with an LLM client."""
|
|
120
|
+
|
|
121
|
+
base_url: str | None = Field(
|
|
122
|
+
default=config.datarobot_endpoint + f"/deployments/{config.nim_deployment_id}"
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
@register_llm_provider(config_type=DataRobotNIMModelConfig)
|
|
127
|
+
async def datarobot_nim(config: DataRobotNIMModelConfig, _builder: Builder) -> LLMProviderInfo:
|
|
128
|
+
yield LLMProviderInfo(
|
|
129
|
+
config=config, description="DataRobot NIM deployment for use with an LLM client."
|
|
130
|
+
)
|
datarobot_genai/py.typed
ADDED
|
File without changes
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: datarobot-genai
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Generic helpers for GenAI
|
|
5
|
+
Project-URL: Homepage, https://github.com/datarobot-oss/datarobot-genai
|
|
6
|
+
Author: DataRobot, Inc.
|
|
7
|
+
License: Apache-2.0
|
|
8
|
+
License-File: AUTHORS
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Python: <3.13,>=3.10
|
|
11
|
+
Requires-Dist: ag-ui-protocol<0.2.0,>=0.1.9
|
|
12
|
+
Requires-Dist: datarobot-drum<2.0.0,>=1.17.5
|
|
13
|
+
Requires-Dist: datarobot-predict<2.0.0,>=1.13.2
|
|
14
|
+
Requires-Dist: datarobot<4.0.0,>=3.9.1
|
|
15
|
+
Requires-Dist: openai<2.0.0,>=1.76.2
|
|
16
|
+
Requires-Dist: opentelemetry-instrumentation-aiohttp-client<1.0.0,>=0.43b0
|
|
17
|
+
Requires-Dist: opentelemetry-instrumentation-httpx<1.0.0,>=0.43b0
|
|
18
|
+
Requires-Dist: opentelemetry-instrumentation-openai<1.0.0,>=0.40.5
|
|
19
|
+
Requires-Dist: opentelemetry-instrumentation-requests<1.0.0,>=0.43b0
|
|
20
|
+
Requires-Dist: pandas<3.0.0,>=2.2.3
|
|
21
|
+
Requires-Dist: pyjwt<3.0.0,>=2.10.1
|
|
22
|
+
Requires-Dist: pypdf<7.0.0,>=6.1.3
|
|
23
|
+
Requires-Dist: ragas<0.4.0,>=0.3.8
|
|
24
|
+
Requires-Dist: requests<3.0.0,>=2.32.4
|
|
25
|
+
Provides-Extra: crewai
|
|
26
|
+
Requires-Dist: crewai-tools[mcp]<0.77.0,>=0.69.0; extra == 'crewai'
|
|
27
|
+
Requires-Dist: crewai>=1.1.0; extra == 'crewai'
|
|
28
|
+
Requires-Dist: opentelemetry-instrumentation-crewai<1.0.0,>=0.40.5; extra == 'crewai'
|
|
29
|
+
Requires-Dist: pybase64<2.0.0,>=1.4.2; extra == 'crewai'
|
|
30
|
+
Provides-Extra: drmcp
|
|
31
|
+
Requires-Dist: aiohttp-retry<3.0.0,>=2.8.3; extra == 'drmcp'
|
|
32
|
+
Requires-Dist: aiohttp<4.0.0,>=3.9.0; extra == 'drmcp'
|
|
33
|
+
Requires-Dist: aiosignal<2.0.0,>=1.3.1; extra == 'drmcp'
|
|
34
|
+
Requires-Dist: boto3<2.0.0,>=1.34.0; extra == 'drmcp'
|
|
35
|
+
Requires-Dist: datarobot-asgi-middleware<1.0.0,>=0.2.0; extra == 'drmcp'
|
|
36
|
+
Requires-Dist: fastmcp<3.0.0,>=2.13.0.2; extra == 'drmcp'
|
|
37
|
+
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'drmcp'
|
|
38
|
+
Requires-Dist: opentelemetry-api<2.0.0,>=1.22.0; extra == 'drmcp'
|
|
39
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http<2.0.0,>=1.22.0; extra == 'drmcp'
|
|
40
|
+
Requires-Dist: opentelemetry-exporter-otlp<2.0.0,>=1.22.0; extra == 'drmcp'
|
|
41
|
+
Requires-Dist: opentelemetry-sdk<2.0.0,>=1.22.0; extra == 'drmcp'
|
|
42
|
+
Requires-Dist: pydantic-settings<3.0.0,>=2.1.0; extra == 'drmcp'
|
|
43
|
+
Requires-Dist: pydantic<3.0.0,>=2.6.1; extra == 'drmcp'
|
|
44
|
+
Requires-Dist: python-dotenv<2.0.0,>=1.1.0; extra == 'drmcp'
|
|
45
|
+
Provides-Extra: langgraph
|
|
46
|
+
Requires-Dist: langchain-mcp-adapters<0.2.0,>=0.1.12; extra == 'langgraph'
|
|
47
|
+
Requires-Dist: langgraph-prebuilt<0.7.0,>=0.2.3; extra == 'langgraph'
|
|
48
|
+
Requires-Dist: langgraph<0.7.0,>=0.4.10; extra == 'langgraph'
|
|
49
|
+
Requires-Dist: opentelemetry-instrumentation-langchain<1.0.0,>=0.40.5; extra == 'langgraph'
|
|
50
|
+
Provides-Extra: llamaindex
|
|
51
|
+
Requires-Dist: llama-index-core<0.14.0,>=0.13.6; extra == 'llamaindex'
|
|
52
|
+
Requires-Dist: llama-index-llms-langchain<0.8.0,>=0.6.1; extra == 'llamaindex'
|
|
53
|
+
Requires-Dist: llama-index-llms-litellm<0.7.0,>=0.4.1; extra == 'llamaindex'
|
|
54
|
+
Requires-Dist: llama-index-llms-openai<0.6.0,>=0.3.38; extra == 'llamaindex'
|
|
55
|
+
Requires-Dist: llama-index-tools-mcp<0.5.0,>=0.1.0; extra == 'llamaindex'
|
|
56
|
+
Requires-Dist: llama-index<0.14.0,>=0.13.6; extra == 'llamaindex'
|
|
57
|
+
Requires-Dist: opentelemetry-instrumentation-llamaindex<1.0.0,>=0.40.5; extra == 'llamaindex'
|
|
58
|
+
Requires-Dist: pypdf<7.0.0,>=6.0.0; extra == 'llamaindex'
|
|
59
|
+
Provides-Extra: nat
|
|
60
|
+
Requires-Dist: crewai>=1.1.0; (python_version >= '3.11') and extra == 'nat'
|
|
61
|
+
Requires-Dist: llama-index-llms-litellm<0.7.0,>=0.4.1; extra == 'nat'
|
|
62
|
+
Requires-Dist: nvidia-nat-langchain==1.3.0; (python_version >= '3.11') and extra == 'nat'
|
|
63
|
+
Requires-Dist: nvidia-nat-opentelemetry==1.3.0; (python_version >= '3.11') and extra == 'nat'
|
|
64
|
+
Requires-Dist: nvidia-nat==1.3.0; (python_version >= '3.11') and extra == 'nat'
|
|
65
|
+
Requires-Dist: opentelemetry-instrumentation-crewai<1.0.0,>=0.40.5; extra == 'nat'
|
|
66
|
+
Requires-Dist: opentelemetry-instrumentation-langchain<1.0.0,>=0.40.5; extra == 'nat'
|
|
67
|
+
Requires-Dist: opentelemetry-instrumentation-llamaindex<1.0.0,>=0.40.5; extra == 'nat'
|
|
68
|
+
Provides-Extra: pydanticai
|
|
69
|
+
Requires-Dist: logfire<5.0.0,>=4.6.0; extra == 'pydanticai'
|
|
70
|
+
Requires-Dist: pydantic-ai<1.9.0,>=1.0.5; extra == 'pydanticai'
|
|
71
|
+
Description-Content-Type: text/markdown
|
|
72
|
+
|
|
73
|
+
<p align="center">
|
|
74
|
+
<a href="https://github.com/datarobot-oss/datarobot-genai">
|
|
75
|
+
<img src="docs/img/datarobot_logo.avif" width="600px" alt="DataRobot Logo"/>
|
|
76
|
+
</a>
|
|
77
|
+
</p>
|
|
78
|
+
<h3 align="center">DataRobot GenAI Library</h3>
|
|
79
|
+
|
|
80
|
+
<p align="center">
|
|
81
|
+
<a href="https://www.datarobot.com/">Homepage</a>
|
|
82
|
+
·
|
|
83
|
+
<a href="https://pypi.org/project/datarobot-genai/">PyPI</a>
|
|
84
|
+
·
|
|
85
|
+
<a href="https://docs.datarobot.com/en/docs/get-started/troubleshooting/general-help.html">Support</a>
|
|
86
|
+
</p>
|
|
87
|
+
|
|
88
|
+
<p align="center">
|
|
89
|
+
<a href="/LICENSE">
|
|
90
|
+
<img src="https://img.shields.io/github/license/datarobot-oss/datarobot-genai" alt="License">
|
|
91
|
+
</a>
|
|
92
|
+
<a href="https://pypi.org/project/datarobot-genai/">
|
|
93
|
+
<img src="https://img.shields.io/pypi/v/datarobot-genai" alt="PyPI version">
|
|
94
|
+
</a>
|
|
95
|
+
</p>
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
## Features
|
|
99
|
+
- Utilities for common GenAI workflows
|
|
100
|
+
- Integrations: CrewAI, LangGraph, LlamaIndex, NAT, MCP
|
|
101
|
+
|
|
102
|
+
## Installation
|
|
103
|
+
- Requires Python 3.10–3.12.
|
|
104
|
+
- Install:
|
|
105
|
+
```bash
|
|
106
|
+
pip install --upgrade pip
|
|
107
|
+
pip install "datarobot-genai"
|
|
108
|
+
```
|
|
109
|
+
- Optional extras:
|
|
110
|
+
```bash
|
|
111
|
+
pip install "datarobot-genai[crewai]"
|
|
112
|
+
pip install "datarobot-genai[langgraph]"
|
|
113
|
+
pip install "datarobot-genai[llamaindex]"
|
|
114
|
+
# Multiple extras
|
|
115
|
+
pip install "datarobot-genai[crewai,langgraph,llamaindex]"
|
|
116
|
+
```
|
|
117
|
+
Available extras include: `crewai`, `langgraph`, `llamaindex`, `nat`, `drmcp`, `pydanticai`.
|
|
118
|
+
|
|
119
|
+
## Development
|
|
120
|
+
Prerequisites: Python 3.10–3.12, uv, Task CLI, pre-commit.
|
|
121
|
+
```bash
|
|
122
|
+
uv sync --all-extras --dev
|
|
123
|
+
pre-commit install
|
|
124
|
+
task test
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Publishing
|
|
128
|
+
- PRs (same-repo): dev builds are auto-published to TestPyPI (`.devN`).
|
|
129
|
+
- Merge to `main`: tags `v{version}` and publishes to PyPI automatically.
|
|
130
|
+
- Pushing a `v*` tag also triggers PyPI publish.
|
|
131
|
+
- Optional: `task release:tag-and-push` creates and pushes `v{version}` locally.
|
|
132
|
+
|
|
133
|
+
## Links
|
|
134
|
+
- Home: https://github.com/datarobot-oss/datarobot-genai
|
|
135
|
+
- PyPI: https://pypi.org/project/datarobot-genai/
|
|
136
|
+
- TestPyPI: https://test.pypi.org/project/datarobot-genai/
|
|
137
|
+
|
|
138
|
+
## License
|
|
139
|
+
Apache-2.0
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
datarobot_genai/__init__.py,sha256=QwWCADIZigzGvew8tGT9rAjgQjchSMjaZtFPbi3Bt2s,527
|
|
2
|
+
datarobot_genai/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
datarobot_genai/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
datarobot_genai/core/custom_model.py,sha256=9rSJhKZ1Fo8BpVVLnRMUj3QV2AYUr5ADHEs0aW6s2tY,5813
|
|
5
|
+
datarobot_genai/core/telemetry_agent.py,sha256=CxvoyResG3jXQ7ucU26NXCzWjWQyua-5qSYvVxpZJQg,5343
|
|
6
|
+
datarobot_genai/core/agents/__init__.py,sha256=mTG_QVV5aoOWOgVA3KEq7KQLJllyxtG2ZQoq9wiUNYo,1542
|
|
7
|
+
datarobot_genai/core/agents/base.py,sha256=63JRi0r7L94p6QHpor4JBFu_g5nxaQkqb_I4dsfrDc0,6722
|
|
8
|
+
datarobot_genai/core/chat/__init__.py,sha256=kAxp4Dc-6HIM_cdBl-3IxwzJQr13UYYQ2Zc-hMwz2F8,638
|
|
9
|
+
datarobot_genai/core/chat/auth.py,sha256=6qITKTHFtESsBc2NsA6cvJf78pPUrcA5XV3Vxlhb5us,5457
|
|
10
|
+
datarobot_genai/core/chat/client.py,sha256=fk8MebXa8_R33VK0_DrXCS0Fgw3wFvPEvsuubC27c3s,6639
|
|
11
|
+
datarobot_genai/core/chat/responses.py,sha256=vGxTA433f2AxGVlijV6O4EghyNPJCDmEqpAK2oWnsIs,10583
|
|
12
|
+
datarobot_genai/core/cli/__init__.py,sha256=B93Yb6VavoZpatrh8ltCL6YglIfR5FHgytXbO9UuxBw,733
|
|
13
|
+
datarobot_genai/core/cli/agent_environment.py,sha256=BJzQoiDvZF5gW4mFE71U0yeg-l72C--kxiE-fv6W194,1662
|
|
14
|
+
datarobot_genai/core/cli/agent_kernel.py,sha256=3XX58DQ6XPpWB_tn5m3iGb3XTfhZf5X3W9tc6ADieU4,7790
|
|
15
|
+
datarobot_genai/core/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
+
datarobot_genai/core/mcp/common.py,sha256=Y8SjuquUODKEfI7T9X-QuTMKdIlpCWFI1b3xs6tmHFA,7812
|
|
17
|
+
datarobot_genai/core/utils/__init__.py,sha256=VxtRUz6iwb04eFQQy0zqTNXLAkYpPXcJxVoKV0nOdXk,59
|
|
18
|
+
datarobot_genai/core/utils/auth.py,sha256=LpSoHdPD2siskYwG8q4f9cike4VQdgFWJpuJrpiszXU,8674
|
|
19
|
+
datarobot_genai/core/utils/urls.py,sha256=tk0t13duDEPcmwz2OnS4vwEdatruiuX8lnxMMhSaJik,2289
|
|
20
|
+
datarobot_genai/crewai/__init__.py,sha256=MtFnHA3EtmgiK_GjwUGPgQQ6G1MCEzz1SDBwQi9lE8M,706
|
|
21
|
+
datarobot_genai/crewai/agent.py,sha256=vp8_2LExpeLls7Fpzo0R6ud5I6Ryfu3n3oVTN4Yyi6A,1417
|
|
22
|
+
datarobot_genai/crewai/base.py,sha256=JLljEN7sj8zaH8OamYoevFBZzza5BjZ4f0CGHRp2jUU,6447
|
|
23
|
+
datarobot_genai/crewai/events.py,sha256=K67bO1zwPrxmppz2wh8dFGNbVebyWGXAMD7oodFE2sQ,5462
|
|
24
|
+
datarobot_genai/crewai/mcp.py,sha256=AJTrs-8KdiRSjRECfBT1lJOsszWMoFoN9NIa1p5_wsM,2115
|
|
25
|
+
datarobot_genai/drmcp/__init__.py,sha256=JE83bfpGU7v77VzrDdlb0l8seM5OwUsUbaQErJ2eisc,2983
|
|
26
|
+
datarobot_genai/drmcp/server.py,sha256=KE4kjS5f9bfdYftG14HBHrfvxDfCD4pwCXePfvl1OvU,724
|
|
27
|
+
datarobot_genai/drmcp/core/__init__.py,sha256=y4yapzp3KnFMzSR6HlNDS4uSuyNT7I1iPBvaCLsS0sU,577
|
|
28
|
+
datarobot_genai/drmcp/core/auth.py,sha256=E-5wrGbBFEBlD5377g6Exddrc7HsazamwX8tWr2RLXY,5815
|
|
29
|
+
datarobot_genai/drmcp/core/clients.py,sha256=y-yG8617LbmiZ_L7FWfMrk4WjIekyr76u_Q80aLqGpI,5524
|
|
30
|
+
datarobot_genai/drmcp/core/config.py,sha256=D7bSi40Yc5J71_JxmpfppG83snbIJW9iz1J7qbiJrRs,9855
|
|
31
|
+
datarobot_genai/drmcp/core/config_utils.py,sha256=U-aieWw7MyP03cGDFIp97JH99ZUfr3vD9uuTzBzxn7w,6428
|
|
32
|
+
datarobot_genai/drmcp/core/constants.py,sha256=lUwoW_PTrbaBGqRJifKqCn3EoFacoEgdO-CpoFVrUoU,739
|
|
33
|
+
datarobot_genai/drmcp/core/credentials.py,sha256=PYEUDNMVw1BoMzZKLkPVTypNkVevEPtmk3scKnE-zYg,6706
|
|
34
|
+
datarobot_genai/drmcp/core/dr_mcp_server.py,sha256=7mu5UXHQmKNbIpNoQE0lPJaUI7AZa03avfHZRRtpjNI,12841
|
|
35
|
+
datarobot_genai/drmcp/core/dr_mcp_server_logo.py,sha256=hib-nfR1SNTW6CnpFsFCkL9H_OMwa4YYyinV7VNOuLk,4708
|
|
36
|
+
datarobot_genai/drmcp/core/exceptions.py,sha256=eqsGI-lxybgvWL5w4BFhbm3XzH1eU5tetwjnhJxelpc,905
|
|
37
|
+
datarobot_genai/drmcp/core/logging.py,sha256=Y_hig4eBWiXGaVV7B_3wBcaYVRNH4ydptbEQhrP9-mY,3414
|
|
38
|
+
datarobot_genai/drmcp/core/mcp_instance.py,sha256=wMsP39xqTmNBYqd49olEQb5UHTSsxj6BOIoIElorRB0,19235
|
|
39
|
+
datarobot_genai/drmcp/core/mcp_server_tools.py,sha256=odNZKozfx0VV38SLZHw9lY0C0JM_JnRI06W3BBXnyE4,4278
|
|
40
|
+
datarobot_genai/drmcp/core/routes.py,sha256=nrgzYkiWWcwSy0BUJ-k5AuXdUHNrnGRudCo4AhtYvlY,17856
|
|
41
|
+
datarobot_genai/drmcp/core/routes_utils.py,sha256=vSseXWlplMSnRgoJgtP_rHxWSAVYcx_tpTv4lyTpQoc,944
|
|
42
|
+
datarobot_genai/drmcp/core/server_life_cycle.py,sha256=WKGJWGxalvqxupzJ2y67Kklc_9PgpZT0uyjlv_sr5wc,3419
|
|
43
|
+
datarobot_genai/drmcp/core/telemetry.py,sha256=NEkSTC1w6uQgtukLHI-sWvR4EMgInysgATcvfQ5CplM,15378
|
|
44
|
+
datarobot_genai/drmcp/core/tool_filter.py,sha256=tLOcG50QBvS48cOVHM6OqoODYiiS6KeM_F-2diaHkW0,2858
|
|
45
|
+
datarobot_genai/drmcp/core/utils.py,sha256=dSjrayWVcnC5GxQcvOIOSHaoEymPIVtG_s2ZBMlmSOw,4336
|
|
46
|
+
datarobot_genai/drmcp/core/dynamic_prompts/__init__.py,sha256=y4yapzp3KnFMzSR6HlNDS4uSuyNT7I1iPBvaCLsS0sU,577
|
|
47
|
+
datarobot_genai/drmcp/core/dynamic_prompts/controllers.py,sha256=AGJlKqgHRO0Kd7Gl-Ulw9KYBgzjTTFXWBvOUF-SuKUI,5454
|
|
48
|
+
datarobot_genai/drmcp/core/dynamic_prompts/dr_lib.py,sha256=IEdD2Gqm4SfUdiXJB99RiWxkN6frGaxJ2SfATetMM3c,4243
|
|
49
|
+
datarobot_genai/drmcp/core/dynamic_prompts/register.py,sha256=5AEh1m8GX-gPZHUdiE1VATt7IKJQk-eThcxh01sWn0I,7204
|
|
50
|
+
datarobot_genai/drmcp/core/dynamic_prompts/utils.py,sha256=BZ3792AgfvYlwL0_J0MzQfGecyEA5_OKUMynEZYzCds,1136
|
|
51
|
+
datarobot_genai/drmcp/core/dynamic_tools/__init__.py,sha256=0kq9vMkF7EBsS6lkEdiLibmUrghTQqosHbZ5k-V9a5g,578
|
|
52
|
+
datarobot_genai/drmcp/core/dynamic_tools/register.py,sha256=3M5-F0mhUYTZJWmFDmqzsj3QAd7ut7b0kPv-JZyaTzg,9204
|
|
53
|
+
datarobot_genai/drmcp/core/dynamic_tools/schema.py,sha256=zw_fYleG2dZAYLVS3MWT2Dy_xXcL9JERG_mXgrusU1g,18457
|
|
54
|
+
datarobot_genai/drmcp/core/dynamic_tools/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
|
+
datarobot_genai/drmcp/core/dynamic_tools/deployment/config.py,sha256=eVDsO3b16dY_jeEtIpZNpB085bDV5nhMUxIpuLxG9iU,8075
|
|
56
|
+
datarobot_genai/drmcp/core/dynamic_tools/deployment/controllers.py,sha256=56M1z616kp32j40Ufy0SnHQmWg-UritCnExzYwNHA8s,2209
|
|
57
|
+
datarobot_genai/drmcp/core/dynamic_tools/deployment/metadata.py,sha256=PNNnMX9zSsMxtHokeX_eNutUXBjP5u9G4ezzPMBLrfI,5702
|
|
58
|
+
datarobot_genai/drmcp/core/dynamic_tools/deployment/register.py,sha256=e-or8WcGSe9EdiiPwr4fHlhwJfzV1GrWDWT7ES8jd7s,3300
|
|
59
|
+
datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/__init__.py,sha256=0kq9vMkF7EBsS6lkEdiLibmUrghTQqosHbZ5k-V9a5g,578
|
|
60
|
+
datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/base.py,sha256=wnua-dMcSRH3jTF8YsjwzA9UcsgNQHTH3r4y2xzVhkQ,2400
|
|
61
|
+
datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/default.py,sha256=PLNLpy8_njT-9aLWt4QM0GsDDm8WqCI-Tl1ymNzcdXo,3232
|
|
62
|
+
datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/drum.py,sha256=Ti7r8y-cszsyzagioWtfc-U3owdhRpQ6g5qrXrsJvQQ,8261
|
|
63
|
+
datarobot_genai/drmcp/core/dynamic_tools/deployment/schemas/drum_agentic_fallback_schema.json,sha256=dG-6XyDmIJWirja7UmMhZGsYu851rn7As_dT5utmstQ,1147
|
|
64
|
+
datarobot_genai/drmcp/core/dynamic_tools/deployment/schemas/drum_prediction_fallback_schema.json,sha256=D7SnrkpSlOtqhJ7OnbeelIV8DJ_EhCfX647VcTBEpuM,292
|
|
65
|
+
datarobot_genai/drmcp/core/memory_management/__init__.py,sha256=y4yapzp3KnFMzSR6HlNDS4uSuyNT7I1iPBvaCLsS0sU,577
|
|
66
|
+
datarobot_genai/drmcp/core/memory_management/manager.py,sha256=gmc_SQs12YQFMWl2UbfWR40QmLV9XuCnwPZgQwKWrbA,30552
|
|
67
|
+
datarobot_genai/drmcp/core/memory_management/memory_tools.py,sha256=AxzpwOlldmhhDfKZcAxaGs7Xih2SCe0XbQuXX5nQczI,6397
|
|
68
|
+
datarobot_genai/drmcp/test_utils/__init__.py,sha256=y4yapzp3KnFMzSR6HlNDS4uSuyNT7I1iPBvaCLsS0sU,577
|
|
69
|
+
datarobot_genai/drmcp/test_utils/integration_mcp_server.py,sha256=MdoR7r3m9uT7crodyhY69yhkrM7Thpe__BBD9lB_2oA,3328
|
|
70
|
+
datarobot_genai/drmcp/test_utils/mcp_utils_ete.py,sha256=rvLOePXF9epIEksJzTOqdL9-fGn21bRLbK3yzpvi-6E,3430
|
|
71
|
+
datarobot_genai/drmcp/test_utils/mcp_utils_integration.py,sha256=0sU29Khal0CelnHBDInyTRiuPKrFFbTbIomOoUbyMhs,3271
|
|
72
|
+
datarobot_genai/drmcp/test_utils/openai_llm_mcp_client.py,sha256=Va3_5c2ToZyfIsEjK2ef5d3z-FA5SE51voikvjKPt8Q,8837
|
|
73
|
+
datarobot_genai/drmcp/test_utils/tool_base_ete.py,sha256=-mKHBkGkyOKQCVS2LHFhSnRofIqJBbeAPRkwizBDtTg,6104
|
|
74
|
+
datarobot_genai/drmcp/test_utils/utils.py,sha256=esGKFv8aO31-Qg3owayeWp32BYe1CdYOEutjjdbweCw,3048
|
|
75
|
+
datarobot_genai/drmcp/tools/__init__.py,sha256=0kq9vMkF7EBsS6lkEdiLibmUrghTQqosHbZ5k-V9a5g,578
|
|
76
|
+
datarobot_genai/drmcp/tools/predictive/__init__.py,sha256=WuOHlNNEpEmcF7gVnhckruJRKU2qtmJLE3E7zoCGLDo,1030
|
|
77
|
+
datarobot_genai/drmcp/tools/predictive/data.py,sha256=k4EJxJrl8DYVGVfJ0DM4YTfnZlC_K3OUHZ0eRUzfluI,3165
|
|
78
|
+
datarobot_genai/drmcp/tools/predictive/deployment.py,sha256=lm02Ayuo11L1hP41fgi3QpR1Eyty-Wc16rM0c8SgliM,3277
|
|
79
|
+
datarobot_genai/drmcp/tools/predictive/deployment_info.py,sha256=BGEF_dmbxOBJR0n1Tt9TO2-iNTQSBTr-oQUyaxLZ0ZI,15297
|
|
80
|
+
datarobot_genai/drmcp/tools/predictive/model.py,sha256=Yih5-KedJ-1yupPLXCJsCXOdyWWi9pRvgapXDlgXWJA,4891
|
|
81
|
+
datarobot_genai/drmcp/tools/predictive/predict.py,sha256=7h73VidPJ4nlxtdFWRQ_S1epDvYuXCypKT8DXzDl4-g,9366
|
|
82
|
+
datarobot_genai/drmcp/tools/predictive/predict_realtime.py,sha256=t7f28y_ealZoA6itrCzlJbTc3KqEU0H-a41ah-7U0XI,13468
|
|
83
|
+
datarobot_genai/drmcp/tools/predictive/project.py,sha256=KaMDAvJY4s12j_4ybA7-KcCS1yMOj-KPIKNBgCSE2iM,2536
|
|
84
|
+
datarobot_genai/drmcp/tools/predictive/training.py,sha256=kxeDVLqUh9ajDk8wK7CZRRydDK8UNuTVZCB3huUihF8,23660
|
|
85
|
+
datarobot_genai/langgraph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
86
|
+
datarobot_genai/langgraph/agent.py,sha256=DRnywmS9KDywyChtuIZZwNKbJs8BpC259EG_kxYbiQ8,15828
|
|
87
|
+
datarobot_genai/langgraph/mcp.py,sha256=iA2_j46mZAaNaL7ntXT-LW6C-NMJkzr3VfKDDfe7mh8,2851
|
|
88
|
+
datarobot_genai/llama_index/__init__.py,sha256=JEMkLQLuP8n14kNE3bZ2j08NdajnkJMfYjDQYqj7C0c,407
|
|
89
|
+
datarobot_genai/llama_index/agent.py,sha256=V6ZsD9GcBDJS-RJo1tJtIHhyW69_78gM6_fOHFV-Piw,1829
|
|
90
|
+
datarobot_genai/llama_index/base.py,sha256=ovcQQtC-djD_hcLrWdn93jg23AmD6NBEj7xtw4a6K6c,14481
|
|
91
|
+
datarobot_genai/llama_index/mcp.py,sha256=leXqF1C4zhuYEKFwNEfZHY4dsUuGZk3W7KArY-zxVL8,2645
|
|
92
|
+
datarobot_genai/nat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
|
+
datarobot_genai/nat/agent.py,sha256=siBLDWAff2-JwZ8Q3iNpM_e4_IoSwG9IvY0hyEjNenw,10292
|
|
94
|
+
datarobot_genai/nat/datarobot_llm_clients.py,sha256=STzAZ4OF8U-Y_cUTywxmKBGVotwsnbGP6vTojnu6q0g,9921
|
|
95
|
+
datarobot_genai/nat/datarobot_llm_providers.py,sha256=aDoQcTeGI-odqydPXEX9OGGNFbzAtpqzTvHHEkmJuEQ,4963
|
|
96
|
+
datarobot_genai-0.2.0.dist-info/METADATA,sha256=Qfh60pUsGehZwD7PkQNDLxItoJIkH12bZBZx95F_Ujw,5941
|
|
97
|
+
datarobot_genai-0.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
98
|
+
datarobot_genai-0.2.0.dist-info/entry_points.txt,sha256=CZhmZcSyt_RBltgLN_b9xasJD6J5SaDc_z7K0wuOY9Y,150
|
|
99
|
+
datarobot_genai-0.2.0.dist-info/licenses/AUTHORS,sha256=isJGUXdjq1U7XZ_B_9AH8Qf0u4eX0XyQifJZ_Sxm4sA,80
|
|
100
|
+
datarobot_genai-0.2.0.dist-info/licenses/LICENSE,sha256=U2_VkLIktQoa60Nf6Tbt7E4RMlfhFSjWjcJJfVC-YCE,11341
|
|
101
|
+
datarobot_genai-0.2.0.dist-info/RECORD,,
|