datarobot-genai 0.1.65__py3-none-any.whl → 0.1.68__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.
@@ -52,6 +52,7 @@ class BaseAgent(Generic[TTool], abc.ABC):
52
52
  verbose: bool | str | None = True,
53
53
  timeout: int | None = 90,
54
54
  authorization_context: dict[str, Any] | None = None,
55
+ forwarded_headers: dict[str, str] | None = None,
55
56
  **_: Any,
56
57
  ) -> None:
57
58
  self.api_key = api_key or os.environ.get("DATAROBOT_API_TOKEN")
@@ -68,6 +69,7 @@ class BaseAgent(Generic[TTool], abc.ABC):
68
69
  self.verbose = bool(verbose)
69
70
  self._mcp_tools: list[TTool] = []
70
71
  self._authorization_context = authorization_context or {}
72
+ self._forwarded_headers: dict[str, str] = forwarded_headers or {}
71
73
 
72
74
  def set_mcp_tools(self, tools: list[TTool]) -> None:
73
75
  self._mcp_tools = tools
@@ -86,6 +88,11 @@ class BaseAgent(Generic[TTool], abc.ABC):
86
88
  """Return the authorization context for this agent."""
87
89
  return self._authorization_context
88
90
 
91
+ @property
92
+ def forwarded_headers(self) -> dict[str, str]:
93
+ """Return the forwarded headers for this agent."""
94
+ return self._forwarded_headers
95
+
89
96
  def litellm_api_base(self, deployment_id: str | None) -> str:
90
97
  return get_api_base(self.api_base, deployment_id)
91
98
 
@@ -139,6 +139,11 @@ def chat_entrypoint(
139
139
  completion_create_params["authorization_context"] = resolve_authorization_context(
140
140
  completion_create_params, **kwargs
141
141
  )
142
+ # Keep only allowed headers from the forwarded_headers.
143
+ incoming_headers = kwargs.get("headers", {}) or {}
144
+ allowed_headers = {"x-datarobot-api-token", "x-datarobot-api-key"}
145
+ forwarded_headers = {k: v for k, v in incoming_headers.items() if k.lower() in allowed_headers}
146
+ completion_create_params["forwarded_headers"] = forwarded_headers
142
147
 
143
148
  # Instantiate user agent with all supplied completion params including auth context
144
149
  agent = agent_cls(**completion_create_params)
@@ -16,6 +16,7 @@ import json
16
16
  import re
17
17
  from typing import Any
18
18
  from typing import Literal
19
+ from urllib.parse import urlparse
19
20
 
20
21
  from datarobot.core.config import DataRobotAppFrameworkBaseSettings
21
22
  from pydantic import field_validator
@@ -37,6 +38,7 @@ class MCPConfig(DataRobotAppFrameworkBaseSettings):
37
38
  datarobot_endpoint: str | None = None
38
39
  datarobot_api_token: str | None = None
39
40
  authorization_context: dict[str, Any] | None = None
41
+ forwarded_headers: dict[str, str] | None = None
40
42
 
41
43
  _auth_context_handler: AuthContextHeaderHandler | None = None
42
44
  _server_config: dict[str, Any] | None = None
@@ -121,18 +123,33 @@ class MCPConfig(DataRobotAppFrameworkBaseSettings):
121
123
  """
122
124
  if self.external_mcp_url:
123
125
  # External MCP URL - no authentication needed
126
+ headers: dict[str, str] = {}
127
+
128
+ # Forward headers for localhost connections
129
+ if self.forwarded_headers:
130
+ try:
131
+ parsed_url = urlparse(self.external_mcp_url)
132
+ hostname = parsed_url.hostname or ""
133
+ # Check if hostname is localhost or 127.0.0.1
134
+ if hostname in ("localhost", "127.0.0.1", "::1"):
135
+ headers.update(self.forwarded_headers)
136
+ except Exception:
137
+ # If URL parsing fails, fall back to simple string check
138
+ if "localhost" in self.external_mcp_url or "127.0.0.1" in self.external_mcp_url:
139
+ headers.update(self.forwarded_headers)
140
+
141
+ # Merge external headers if provided
124
142
  if self.external_mcp_headers:
125
- headers = json.loads(self.external_mcp_headers)
126
- else:
127
- headers = {}
143
+ external_headers = json.loads(self.external_mcp_headers)
144
+ headers.update(external_headers)
128
145
 
129
- config = {
146
+ return {
130
147
  "url": self.external_mcp_url.rstrip("/"),
131
148
  "transport": self.external_mcp_transport,
132
149
  "headers": headers,
133
150
  }
134
- return config
135
- elif self.mcp_deployment_id:
151
+
152
+ if self.mcp_deployment_id:
136
153
  # DataRobot deployment ID - requires authentication
137
154
  if self.datarobot_endpoint is None:
138
155
  raise ValueError(
@@ -142,15 +159,21 @@ class MCPConfig(DataRobotAppFrameworkBaseSettings):
142
159
  raise ValueError(
143
160
  "When using a DataRobot hosted MCP deployment, datarobot_api_token must be set."
144
161
  )
162
+
145
163
  base_url = self.datarobot_endpoint.rstrip("/")
146
164
  if not base_url.endswith("/api/v2"):
147
- base_url = base_url + "/api/v2"
165
+ base_url = f"{base_url}/api/v2"
166
+
148
167
  url = f"{base_url}/deployments/{self.mcp_deployment_id}/directAccess/mcp"
149
168
 
150
- headers = {
151
- **self._authorization_bearer_header(),
152
- **self._authorization_context_header(),
153
- }
169
+ # Start with forwarded headers if available
170
+ headers = {}
171
+ if self.forwarded_headers:
172
+ headers.update(self.forwarded_headers)
173
+
174
+ # Add authentication headers
175
+ headers.update(self._authorization_bearer_header())
176
+ headers.update(self._authorization_context_header())
154
177
 
155
178
  return {
156
179
  "url": url,
@@ -93,6 +93,7 @@ class CrewAIAgent(BaseAgent[BaseTool], abc.ABC):
93
93
  # Use MCP context manager to handle connection lifecycle
94
94
  with mcp_tools_context(
95
95
  authorization_context=self._authorization_context,
96
+ forwarded_headers=self.forwarded_headers,
96
97
  ) as mcp_tools:
97
98
  # Set MCP tools for all agents if MCP is not configured this is effectively a no-op
98
99
  self.set_mcp_tools(mcp_tools)
@@ -30,9 +30,13 @@ from datarobot_genai.core.mcp.common import MCPConfig
30
30
  @contextmanager
31
31
  def mcp_tools_context(
32
32
  authorization_context: dict[str, Any] | None = None,
33
+ forwarded_headers: dict[str, str] | None = None,
33
34
  ) -> Generator[list[Any], None, None]:
34
35
  """Context manager for MCP tools that handles connection lifecycle."""
35
- config = MCPConfig(authorization_context=authorization_context)
36
+ config = MCPConfig(
37
+ authorization_context=authorization_context,
38
+ forwarded_headers=forwarded_headers,
39
+ )
36
40
  # If no MCP server configured, return empty tools list
37
41
  if not config.server_config:
38
42
  print("No MCP server configured, using empty tools list", flush=True)
@@ -18,6 +18,8 @@ from fastmcp.prompts.prompt import Prompt
18
18
 
19
19
  from datarobot_genai.drmcp.core.dynamic_prompts.dr_lib import get_datarobot_prompt_template
20
20
  from datarobot_genai.drmcp.core.dynamic_prompts.dr_lib import get_datarobot_prompt_template_version
21
+ from datarobot_genai.drmcp.core.dynamic_prompts.dr_lib import get_datarobot_prompt_template_versions
22
+ from datarobot_genai.drmcp.core.dynamic_prompts.dr_lib import get_datarobot_prompt_templates
21
23
  from datarobot_genai.drmcp.core.dynamic_prompts.register import (
22
24
  register_prompt_from_datarobot_prompt_management,
23
25
  )
@@ -83,3 +85,46 @@ async def delete_registered_prompt_template(prompt_template_id: str) -> bool:
83
85
  f"version {prompt_template_version_id}"
84
86
  )
85
87
  return True
88
+
89
+
90
+ async def refresh_registered_prompt_template() -> None:
91
+ """Refresh all registered prompt templates in the MCP instance."""
92
+ prompt_templates = get_datarobot_prompt_templates()
93
+ prompt_templates_ids = {p.id for p in prompt_templates}
94
+ prompt_templates_versions = get_datarobot_prompt_template_versions(list(prompt_templates_ids))
95
+
96
+ mcp_prompt_templates_mappings = await mcp.get_prompt_mapping()
97
+
98
+ for prompt_template in prompt_templates:
99
+ prompt_template_versions = prompt_templates_versions.get(prompt_template.id)
100
+ if not prompt_template_versions:
101
+ continue
102
+
103
+ latest_version = max(prompt_template_versions, key=lambda v: v.version)
104
+
105
+ if prompt_template.id not in mcp_prompt_templates_mappings:
106
+ # New prompt template -> add
107
+ await register_prompt_from_datarobot_prompt_management(
108
+ prompt_template=prompt_template, prompt_template_version=latest_version
109
+ )
110
+ continue
111
+
112
+ mcp_prompt_template_version, mcp_prompt = mcp_prompt_templates_mappings[prompt_template.id]
113
+
114
+ if mcp_prompt_template_version != latest_version:
115
+ # Current version saved in MCP is not the latest one => update it
116
+ await register_prompt_from_datarobot_prompt_management(
117
+ prompt_template=prompt_template, prompt_template_version=latest_version
118
+ )
119
+ continue
120
+
121
+ # Else => mcp_prompt_template_version == latest_version
122
+ # For now it means nothing changed as there's no possibility to edit promp template version.
123
+
124
+ for mcp_prompt_template_id, (
125
+ mcp_prompt_template_version_id,
126
+ _,
127
+ ) in mcp_prompt_templates_mappings.items():
128
+ if mcp_prompt_template_id not in prompt_templates_ids:
129
+ # We need to also delete prompt templates that are
130
+ await mcp.remove_prompt_mapping(mcp_prompt_template_id, mcp_prompt_template_version_id)
@@ -51,7 +51,7 @@ async def list_tools_by_tags(tags: list[str] | None = None, match_all: bool = Fa
51
51
  -------
52
52
  A formatted string listing tools that match the tag criteria.
53
53
  """
54
- tools = await mcp._list_tools_mcp(tags=tags, match_all=match_all)
54
+ tools = await mcp.list_tools(tags=tags, match_all=match_all)
55
55
 
56
56
  if not tools:
57
57
  if tags:
@@ -95,7 +95,7 @@ async def get_tool_info_by_name(tool_name: str) -> str:
95
95
  -------
96
96
  A formatted string with detailed information about the tool.
97
97
  """
98
- all_tools = await mcp._list_tools_mcp()
98
+ all_tools = await mcp.list_tools()
99
99
 
100
100
  for tool in all_tools:
101
101
  if tool.name == tool_name:
@@ -19,6 +19,7 @@ from starlette.requests import Request
19
19
  from starlette.responses import JSONResponse
20
20
 
21
21
  from .dynamic_prompts.controllers import delete_registered_prompt_template
22
+ from .dynamic_prompts.controllers import refresh_registered_prompt_template
22
23
  from .dynamic_prompts.controllers import register_prompt_from_prompt_template_id_and_version
23
24
  from .dynamic_tools.deployment.controllers import delete_registered_tool_deployment
24
25
  from .dynamic_tools.deployment.controllers import get_registered_tool_deployments
@@ -418,6 +419,18 @@ def register_routes(mcp: TaggedFastMCP) -> None:
418
419
  )
419
420
  except Exception as e:
420
421
  return JSONResponse(
421
- status_code=HTTPStatus.BAD_REQUEST,
422
+ status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
422
423
  content={"error": f"Failed to add prompt template: {str(e)}"},
423
424
  )
425
+
426
+ @mcp.custom_route(prefix_mount_path("/registeredPrompts"), methods=["PUT"])
427
+ async def refresh_prompt_templates(_: Request) -> JSONResponse:
428
+ """Refresh prompt templates."""
429
+ try:
430
+ await refresh_registered_prompt_template()
431
+ return JSONResponse(status_code=HTTPStatus.NO_CONTENT, content=None)
432
+ except Exception as e:
433
+ return JSONResponse(
434
+ status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
435
+ content={"error": f"Failed to refresh prompt templates: {str(e)}"},
436
+ )
@@ -86,6 +86,7 @@ class LangGraphAgent(BaseAgent[BaseTool], abc.ABC):
86
86
  ]:
87
87
  async with mcp_tools_context(
88
88
  authorization_context=self._authorization_context,
89
+ forwarded_headers=self.forwarded_headers,
89
90
  ) as mcp_tools:
90
91
  self.set_mcp_tools(mcp_tools)
91
92
  result = await self._invoke(completion_create_params)
@@ -104,6 +105,7 @@ class LangGraphAgent(BaseAgent[BaseTool], abc.ABC):
104
105
  # For non-streaming, use async with directly
105
106
  async with mcp_tools_context(
106
107
  authorization_context=self._authorization_context,
108
+ forwarded_headers=self.forwarded_headers,
107
109
  ) as mcp_tools:
108
110
  self.set_mcp_tools(mcp_tools)
109
111
  result = await self._invoke(completion_create_params)
@@ -28,6 +28,7 @@ from datarobot_genai.core.mcp.common import MCPConfig
28
28
  @asynccontextmanager
29
29
  async def mcp_tools_context(
30
30
  authorization_context: dict[str, Any] | None = None,
31
+ forwarded_headers: dict[str, str] | None = None,
31
32
  ) -> AsyncGenerator[list[BaseTool], None]:
32
33
  """Yield a list of LangChain BaseTool instances loaded via MCP.
33
34
 
@@ -37,8 +38,13 @@ async def mcp_tools_context(
37
38
  ----------
38
39
  authorization_context : dict[str, Any] | None
39
40
  Authorization context to use for MCP connections
41
+ forwarded_headers : dict[str, str] | None
42
+ Forwarded headers, e.g. x-datarobot-api-key to use for MCP authentication
40
43
  """
41
- mcp_config = MCPConfig(authorization_context=authorization_context)
44
+ mcp_config = MCPConfig(
45
+ authorization_context=authorization_context,
46
+ forwarded_headers=forwarded_headers,
47
+ )
42
48
  server_config = mcp_config.server_config
43
49
 
44
50
  if not server_config:
@@ -84,6 +84,7 @@ class LlamaIndexAgent(BaseAgent[BaseTool], abc.ABC):
84
84
  # Load MCP tools (if configured) asynchronously before building workflow
85
85
  mcp_tools = await load_mcp_tools(
86
86
  authorization_context=self._authorization_context,
87
+ forwarded_headers=self.forwarded_headers,
87
88
  )
88
89
  self.set_mcp_tools(mcp_tools)
89
90
 
@@ -30,18 +30,23 @@ from datarobot_genai.core.mcp.common import MCPConfig
30
30
 
31
31
  async def load_mcp_tools(
32
32
  authorization_context: dict[str, Any] | None = None,
33
+ forwarded_headers: dict[str, str] | None = None,
33
34
  ) -> list[Any]:
34
35
  """
35
36
  Asynchronously load MCP tools for LlamaIndex.
36
37
 
37
38
  Args:
38
39
  authorization_context: Optional authorization context for MCP connections
40
+ forwarded_headers: Optional forwarded headers, e.g. x-datarobot-api-key for MCP auth
39
41
 
40
42
  Returns
41
43
  -------
42
44
  List of MCP tools, or empty list if no MCP configuration is present.
43
45
  """
44
- config = MCPConfig(authorization_context=authorization_context)
46
+ config = MCPConfig(
47
+ authorization_context=authorization_context,
48
+ forwarded_headers=forwarded_headers,
49
+ )
45
50
  server_params = config.server_config
46
51
 
47
52
  if not server_params:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datarobot-genai
3
- Version: 0.1.65
3
+ Version: 0.1.68
4
4
  Summary: Generic helpers for GenAI
5
5
  Project-URL: Homepage, https://github.com/datarobot-oss/datarobot-genai
6
6
  Author: DataRobot, Inc.
@@ -32,7 +32,7 @@ Requires-Dist: aiohttp<4.0.0,>=3.9.0; extra == 'drmcp'
32
32
  Requires-Dist: aiosignal<2.0.0,>=1.3.1; extra == 'drmcp'
33
33
  Requires-Dist: boto3<2.0.0,>=1.34.0; extra == 'drmcp'
34
34
  Requires-Dist: datarobot-asgi-middleware<1.0.0,>=0.2.0; extra == 'drmcp'
35
- Requires-Dist: fastmcp==2.13.0.2; extra == 'drmcp'
35
+ Requires-Dist: fastmcp<3.0.0,>=2.13.0.2; extra == 'drmcp'
36
36
  Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'drmcp'
37
37
  Requires-Dist: opentelemetry-api<2.0.0,>=1.22.0; extra == 'drmcp'
38
38
  Requires-Dist: opentelemetry-exporter-otlp-proto-http<2.0.0,>=1.22.0; extra == 'drmcp'
@@ -1,10 +1,10 @@
1
1
  datarobot_genai/__init__.py,sha256=QwWCADIZigzGvew8tGT9rAjgQjchSMjaZtFPbi3Bt2s,527
2
2
  datarobot_genai/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  datarobot_genai/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- datarobot_genai/core/custom_model.py,sha256=vnV62eyBpokWTA5BDU7GBgpB2nYop4oY8z4K1AOAet4,6799
4
+ datarobot_genai/core/custom_model.py,sha256=8SMW3BAToI44331pF6fATQlS-FulDXop1OmmrVxuB1U,7155
5
5
  datarobot_genai/core/telemetry_agent.py,sha256=CxvoyResG3jXQ7ucU26NXCzWjWQyua-5qSYvVxpZJQg,5343
6
6
  datarobot_genai/core/agents/__init__.py,sha256=mTG_QVV5aoOWOgVA3KEq7KQLJllyxtG2ZQoq9wiUNYo,1542
7
- datarobot_genai/core/agents/base.py,sha256=gG54Q7jckW8eFe-z89JdiX4mq6UYGXGsv-zBe3WhVuc,6390
7
+ datarobot_genai/core/agents/base.py,sha256=kyMk9m1qGFT_XretYIEbP0F-vstPIWh_OZlECqWXvdw,6685
8
8
  datarobot_genai/core/chat/__init__.py,sha256=kAxp4Dc-6HIM_cdBl-3IxwzJQr13UYYQ2Zc-hMwz2F8,638
9
9
  datarobot_genai/core/chat/auth.py,sha256=6qITKTHFtESsBc2NsA6cvJf78pPUrcA5XV3Vxlhb5us,5457
10
10
  datarobot_genai/core/chat/client.py,sha256=fk8MebXa8_R33VK0_DrXCS0Fgw3wFvPEvsuubC27c3s,6639
@@ -13,15 +13,15 @@ datarobot_genai/core/cli/__init__.py,sha256=B93Yb6VavoZpatrh8ltCL6YglIfR5FHgytXb
13
13
  datarobot_genai/core/cli/agent_environment.py,sha256=BJzQoiDvZF5gW4mFE71U0yeg-l72C--kxiE-fv6W194,1662
14
14
  datarobot_genai/core/cli/agent_kernel.py,sha256=3XX58DQ6XPpWB_tn5m3iGb3XTfhZf5X3W9tc6ADieU4,7790
15
15
  datarobot_genai/core/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- datarobot_genai/core/mcp/common.py,sha256=7ugPoj0YGJMoHGQVBqQw2LgYOhXh1YX21mfGIMMAS68,5762
16
+ datarobot_genai/core/mcp/common.py,sha256=Y24Ij8e4BwOnxojnz2BJRIFcs_Y7EfbORLrN6txowpY,6833
17
17
  datarobot_genai/core/utils/__init__.py,sha256=VxtRUz6iwb04eFQQy0zqTNXLAkYpPXcJxVoKV0nOdXk,59
18
18
  datarobot_genai/core/utils/auth.py,sha256=Xo1PxVr6oMgtMHkmHdS02klDKK1cyDpjGvIMF4Tx0Lo,7874
19
19
  datarobot_genai/core/utils/urls.py,sha256=tk0t13duDEPcmwz2OnS4vwEdatruiuX8lnxMMhSaJik,2289
20
20
  datarobot_genai/crewai/__init__.py,sha256=MtFnHA3EtmgiK_GjwUGPgQQ6G1MCEzz1SDBwQi9lE8M,706
21
21
  datarobot_genai/crewai/agent.py,sha256=vp8_2LExpeLls7Fpzo0R6ud5I6Ryfu3n3oVTN4Yyi6A,1417
22
- datarobot_genai/crewai/base.py,sha256=7zHq9pmfdjV-xtDUqjdRJ4bKVPArWik8RbI3ap54ab0,7452
22
+ datarobot_genai/crewai/base.py,sha256=iDIbU5LrdEaBKd914WuZuVg5f9yMw7pZTsWZqMTO1TI,7506
23
23
  datarobot_genai/crewai/events.py,sha256=K67bO1zwPrxmppz2wh8dFGNbVebyWGXAMD7oodFE2sQ,5462
24
- datarobot_genai/crewai/mcp.py,sha256=1jSzLJ9GRA5wsz53uScJ-HSXwJJrdo6-a4z5cSSp09k,2002
24
+ datarobot_genai/crewai/mcp.py,sha256=AJTrs-8KdiRSjRECfBT1lJOsszWMoFoN9NIa1p5_wsM,2115
25
25
  datarobot_genai/drmcp/__init__.py,sha256=JE83bfpGU7v77VzrDdlb0l8seM5OwUsUbaQErJ2eisc,2983
26
26
  datarobot_genai/drmcp/server.py,sha256=KE4kjS5f9bfdYftG14HBHrfvxDfCD4pwCXePfvl1OvU,724
27
27
  datarobot_genai/drmcp/core/__init__.py,sha256=y4yapzp3KnFMzSR6HlNDS4uSuyNT7I1iPBvaCLsS0sU,577
@@ -36,15 +36,15 @@ datarobot_genai/drmcp/core/dr_mcp_server_logo.py,sha256=Npkn-cPPBv261kiiaNwfeS_y
36
36
  datarobot_genai/drmcp/core/exceptions.py,sha256=eqsGI-lxybgvWL5w4BFhbm3XzH1eU5tetwjnhJxelpc,905
37
37
  datarobot_genai/drmcp/core/logging.py,sha256=Y_hig4eBWiXGaVV7B_3wBcaYVRNH4ydptbEQhrP9-mY,3414
38
38
  datarobot_genai/drmcp/core/mcp_instance.py,sha256=wMsP39xqTmNBYqd49olEQb5UHTSsxj6BOIoIElorRB0,19235
39
- datarobot_genai/drmcp/core/mcp_server_tools.py,sha256=OyTDhvm38t8gzaMrSVn-SQOWtoaEugKtbZIhCmGkR6w,4288
40
- datarobot_genai/drmcp/core/routes.py,sha256=zW4Ukr9f_odF-_oXq_WlTaCH5P4mb7gBSFp67IiuAoo,17208
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
41
  datarobot_genai/drmcp/core/routes_utils.py,sha256=vSseXWlplMSnRgoJgtP_rHxWSAVYcx_tpTv4lyTpQoc,944
42
42
  datarobot_genai/drmcp/core/server_life_cycle.py,sha256=WKGJWGxalvqxupzJ2y67Kklc_9PgpZT0uyjlv_sr5wc,3419
43
43
  datarobot_genai/drmcp/core/telemetry.py,sha256=NEkSTC1w6uQgtukLHI-sWvR4EMgInysgATcvfQ5CplM,15378
44
44
  datarobot_genai/drmcp/core/tool_filter.py,sha256=tLOcG50QBvS48cOVHM6OqoODYiiS6KeM_F-2diaHkW0,2858
45
45
  datarobot_genai/drmcp/core/utils.py,sha256=dSjrayWVcnC5GxQcvOIOSHaoEymPIVtG_s2ZBMlmSOw,4336
46
46
  datarobot_genai/drmcp/core/dynamic_prompts/__init__.py,sha256=y4yapzp3KnFMzSR6HlNDS4uSuyNT7I1iPBvaCLsS0sU,577
47
- datarobot_genai/drmcp/core/dynamic_prompts/controllers.py,sha256=vCMYxwYjNDadRxSlRk6p8pHK6h_2K-PkbBTTW_lqBJ0,3318
47
+ datarobot_genai/drmcp/core/dynamic_prompts/controllers.py,sha256=AGJlKqgHRO0Kd7Gl-Ulw9KYBgzjTTFXWBvOUF-SuKUI,5454
48
48
  datarobot_genai/drmcp/core/dynamic_prompts/dr_lib.py,sha256=IEdD2Gqm4SfUdiXJB99RiWxkN6frGaxJ2SfATetMM3c,4243
49
49
  datarobot_genai/drmcp/core/dynamic_prompts/register.py,sha256=5AEh1m8GX-gPZHUdiE1VATt7IKJQk-eThcxh01sWn0I,7204
50
50
  datarobot_genai/drmcp/core/dynamic_prompts/utils.py,sha256=BZ3792AgfvYlwL0_J0MzQfGecyEA5_OKUMynEZYzCds,1136
@@ -83,19 +83,19 @@ datarobot_genai/drmcp/tools/predictive/predict_realtime.py,sha256=t7f28y_ealZoA6
83
83
  datarobot_genai/drmcp/tools/predictive/project.py,sha256=KaMDAvJY4s12j_4ybA7-KcCS1yMOj-KPIKNBgCSE2iM,2536
84
84
  datarobot_genai/drmcp/tools/predictive/training.py,sha256=kxeDVLqUh9ajDk8wK7CZRRydDK8UNuTVZCB3huUihF8,23660
85
85
  datarobot_genai/langgraph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
- datarobot_genai/langgraph/agent.py,sha256=us-DXSgmI2271tsbzOOtDbRHdStCsOro-YRQ30ePpkA,9739
87
- datarobot_genai/langgraph/mcp.py,sha256=_ggxlRFkydhJgJVcAdwDWZL0WWCejctNC5X9ycAWeUM,2610
86
+ datarobot_genai/langgraph/agent.py,sha256=IcNawsi2Avsw3usTQ6Z8Ku0JdCsK3sYa2CQMhUe2Kk4,9859
87
+ datarobot_genai/langgraph/mcp.py,sha256=iA2_j46mZAaNaL7ntXT-LW6C-NMJkzr3VfKDDfe7mh8,2851
88
88
  datarobot_genai/llama_index/__init__.py,sha256=JEMkLQLuP8n14kNE3bZ2j08NdajnkJMfYjDQYqj7C0c,407
89
89
  datarobot_genai/llama_index/agent.py,sha256=V6ZsD9GcBDJS-RJo1tJtIHhyW69_78gM6_fOHFV-Piw,1829
90
- datarobot_genai/llama_index/base.py,sha256=MwhSlRCwsP0Z9IxaTJ4tMZO2mCMX3pvqNFl3s9aj1P8,14427
91
- datarobot_genai/llama_index/mcp.py,sha256=3XULVxtLBV_ItM491zWRg2KMHGszy6OTyPzHW08zO2k,2439
90
+ datarobot_genai/llama_index/base.py,sha256=ovcQQtC-djD_hcLrWdn93jg23AmD6NBEj7xtw4a6K6c,14481
91
+ datarobot_genai/llama_index/mcp.py,sha256=leXqF1C4zhuYEKFwNEfZHY4dsUuGZk3W7KArY-zxVL8,2645
92
92
  datarobot_genai/nat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
93
  datarobot_genai/nat/agent.py,sha256=siBLDWAff2-JwZ8Q3iNpM_e4_IoSwG9IvY0hyEjNenw,10292
94
94
  datarobot_genai/nat/datarobot_llm_clients.py,sha256=IZq_kooUL8QyDTkpEreszLQk9vCzg6-FbTjIkXR9wc0,7203
95
95
  datarobot_genai/nat/datarobot_llm_providers.py,sha256=lOVaL_0Fl6-7GFYl3HmfqttqKpKt-2w8o92P3T7B6cU,3683
96
- datarobot_genai-0.1.65.dist-info/METADATA,sha256=nb1kLhptvgb26Fwsr58IzaT1YGSTUEFGx4ySLMmkRo4,5911
97
- datarobot_genai-0.1.65.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
98
- datarobot_genai-0.1.65.dist-info/entry_points.txt,sha256=CZhmZcSyt_RBltgLN_b9xasJD6J5SaDc_z7K0wuOY9Y,150
99
- datarobot_genai-0.1.65.dist-info/licenses/AUTHORS,sha256=isJGUXdjq1U7XZ_B_9AH8Qf0u4eX0XyQifJZ_Sxm4sA,80
100
- datarobot_genai-0.1.65.dist-info/licenses/LICENSE,sha256=U2_VkLIktQoa60Nf6Tbt7E4RMlfhFSjWjcJJfVC-YCE,11341
101
- datarobot_genai-0.1.65.dist-info/RECORD,,
96
+ datarobot_genai-0.1.68.dist-info/METADATA,sha256=xq2ZHJmEjMUH1313Nxx1A4lQcArJi0Y-Dt8yo-6CnXY,5918
97
+ datarobot_genai-0.1.68.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
98
+ datarobot_genai-0.1.68.dist-info/entry_points.txt,sha256=CZhmZcSyt_RBltgLN_b9xasJD6J5SaDc_z7K0wuOY9Y,150
99
+ datarobot_genai-0.1.68.dist-info/licenses/AUTHORS,sha256=isJGUXdjq1U7XZ_B_9AH8Qf0u4eX0XyQifJZ_Sxm4sA,80
100
+ datarobot_genai-0.1.68.dist-info/licenses/LICENSE,sha256=U2_VkLIktQoa60Nf6Tbt7E4RMlfhFSjWjcJJfVC-YCE,11341
101
+ datarobot_genai-0.1.68.dist-info/RECORD,,