datarobot-genai 0.1.62__tar.gz → 0.1.63__tar.gz

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.
Files changed (101) hide show
  1. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/PKG-INFO +1 -1
  2. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/pyproject.toml +1 -1
  3. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/langgraph/agent.py +3 -2
  4. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/nat/agent.py +45 -0
  5. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/.gitignore +0 -0
  6. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/AUTHORS +0 -0
  7. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/LICENSE +0 -0
  8. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/README.md +0 -0
  9. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/__init__.py +0 -0
  10. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/__init__.py +0 -0
  11. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/agents/__init__.py +0 -0
  12. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/agents/base.py +0 -0
  13. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/chat/__init__.py +0 -0
  14. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/chat/auth.py +0 -0
  15. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/chat/client.py +0 -0
  16. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/chat/responses.py +0 -0
  17. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/cli/__init__.py +0 -0
  18. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/cli/agent_environment.py +0 -0
  19. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/cli/agent_kernel.py +0 -0
  20. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/custom_model.py +0 -0
  21. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/mcp/__init__.py +0 -0
  22. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/mcp/common.py +0 -0
  23. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/telemetry_agent.py +0 -0
  24. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/utils/__init__.py +0 -0
  25. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/utils/auth.py +0 -0
  26. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/core/utils/urls.py +0 -0
  27. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/crewai/__init__.py +0 -0
  28. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/crewai/agent.py +0 -0
  29. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/crewai/base.py +0 -0
  30. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/crewai/events.py +0 -0
  31. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/crewai/mcp.py +0 -0
  32. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/__init__.py +0 -0
  33. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/__init__.py +0 -0
  34. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/auth.py +0 -0
  35. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/clients.py +0 -0
  36. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/config.py +0 -0
  37. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/config_utils.py +0 -0
  38. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/constants.py +0 -0
  39. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/credentials.py +0 -0
  40. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dr_mcp_server.py +0 -0
  41. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dr_mcp_server_logo.py +0 -0
  42. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_prompts/__init__.py +0 -0
  43. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_prompts/controllers.py +0 -0
  44. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_prompts/dr_lib.py +0 -0
  45. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_prompts/register.py +0 -0
  46. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_prompts/utils.py +0 -0
  47. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/__init__.py +0 -0
  48. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/deployment/__init__.py +0 -0
  49. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/__init__.py +0 -0
  50. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/base.py +0 -0
  51. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/default.py +0 -0
  52. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/deployment/adapters/drum.py +0 -0
  53. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/deployment/config.py +0 -0
  54. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/deployment/controllers.py +0 -0
  55. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/deployment/metadata.py +0 -0
  56. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/deployment/register.py +0 -0
  57. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/deployment/schemas/drum_agentic_fallback_schema.json +0 -0
  58. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/deployment/schemas/drum_prediction_fallback_schema.json +0 -0
  59. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/register.py +0 -0
  60. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/dynamic_tools/schema.py +0 -0
  61. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/exceptions.py +0 -0
  62. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/logging.py +0 -0
  63. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/mcp_instance.py +0 -0
  64. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/mcp_server_tools.py +0 -0
  65. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/memory_management/__init__.py +0 -0
  66. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/memory_management/manager.py +0 -0
  67. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/memory_management/memory_tools.py +0 -0
  68. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/routes.py +0 -0
  69. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/routes_utils.py +0 -0
  70. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/server_life_cycle.py +0 -0
  71. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/telemetry.py +0 -0
  72. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/tool_filter.py +0 -0
  73. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/core/utils.py +0 -0
  74. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/server.py +0 -0
  75. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/test_utils/__init__.py +0 -0
  76. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/test_utils/integration_mcp_server.py +0 -0
  77. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/test_utils/mcp_utils_ete.py +0 -0
  78. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/test_utils/mcp_utils_integration.py +0 -0
  79. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/test_utils/openai_llm_mcp_client.py +0 -0
  80. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/test_utils/tool_base_ete.py +0 -0
  81. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/test_utils/utils.py +0 -0
  82. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/tools/__init__.py +0 -0
  83. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/tools/predictive/__init__.py +0 -0
  84. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/tools/predictive/data.py +0 -0
  85. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/tools/predictive/deployment.py +0 -0
  86. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/tools/predictive/deployment_info.py +0 -0
  87. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/tools/predictive/model.py +0 -0
  88. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/tools/predictive/predict.py +0 -0
  89. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/tools/predictive/predict_realtime.py +0 -0
  90. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/tools/predictive/project.py +0 -0
  91. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/drmcp/tools/predictive/training.py +0 -0
  92. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/langgraph/__init__.py +0 -0
  93. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/langgraph/mcp.py +0 -0
  94. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/llama_index/__init__.py +0 -0
  95. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/llama_index/agent.py +0 -0
  96. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/llama_index/base.py +0 -0
  97. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/llama_index/mcp.py +0 -0
  98. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/nat/__init__.py +0 -0
  99. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/nat/datarobot_llm_clients.py +0 -0
  100. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/nat/datarobot_llm_providers.py +0 -0
  101. {datarobot_genai-0.1.62 → datarobot_genai-0.1.63}/src/datarobot_genai/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datarobot-genai
3
- Version: 0.1.62
3
+ Version: 0.1.63
4
4
  Summary: Generic helpers for GenAI
5
5
  Project-URL: Homepage, https://github.com/datarobot-oss/datarobot-genai
6
6
  Author: DataRobot, Inc.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "datarobot-genai"
7
- version = "0.1.62"
7
+ version = "0.1.63"
8
8
  description = "Generic helpers for GenAI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10, <3.13"
@@ -32,6 +32,7 @@ from datarobot_genai.core.agents.base import BaseAgent
32
32
  from datarobot_genai.core.agents.base import InvokeReturn
33
33
  from datarobot_genai.core.agents.base import UsageMetrics
34
34
  from datarobot_genai.core.agents.base import extract_user_prompt_content
35
+ from datarobot_genai.core.agents.base import is_streaming
35
36
  from datarobot_genai.langgraph.mcp import mcp_tools_context
36
37
 
37
38
  logger = logging.getLogger(__name__)
@@ -136,10 +137,10 @@ class LangGraphAgent(BaseAgent[BaseTool], abc.ABC):
136
137
  # The following code demonstrate both a synchronous and streaming response.
137
138
  # You can choose one or the other based on your use case, they function the same.
138
139
  # The main difference is returning a generator for streaming or a final response for sync.
139
- if completion_create_params.get("stream"):
140
+ if is_streaming(completion_create_params):
140
141
  # Streaming response: yield each message as it is generated
141
142
  async def stream_generator() -> AsyncGenerator[
142
- tuple[str, Any | None, UsageMetrics], None
143
+ tuple[str, MultiTurnSample | None, UsageMetrics], None
143
144
  ]:
144
145
  # Iterate over the graph stream. For message events, yield the content.
145
146
  # For update events, accumulate the usage metrics.
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
  import asyncio
15
15
  import logging
16
+ from collections.abc import AsyncGenerator
16
17
  from typing import Any
17
18
 
18
19
  from nat.builder.context import Context
@@ -32,6 +33,7 @@ from datarobot_genai.core.agents.base import BaseAgent
32
33
  from datarobot_genai.core.agents.base import InvokeReturn
33
34
  from datarobot_genai.core.agents.base import UsageMetrics
34
35
  from datarobot_genai.core.agents.base import extract_user_prompt_content
36
+ from datarobot_genai.core.agents.base import is_streaming
35
37
 
36
38
  logger = logging.getLogger(__name__)
37
39
 
@@ -160,6 +162,49 @@ class NatAgent(BaseAgent[None]):
160
162
  # Print commands may need flush=True to ensure they are displayed in real-time.
161
163
  print("Running agent with user prompt:", chat_request.messages[0].content, flush=True)
162
164
 
165
+ if is_streaming(completion_create_params):
166
+
167
+ async def stream_generator() -> AsyncGenerator[
168
+ tuple[str, MultiTurnSample | None, UsageMetrics], None
169
+ ]:
170
+ usage_metrics: UsageMetrics = {
171
+ "completion_tokens": 0,
172
+ "prompt_tokens": 0,
173
+ "total_tokens": 0,
174
+ }
175
+ async with load_workflow(self.workflow_path) as workflow:
176
+ async with workflow.run(chat_request) as runner:
177
+ intermediate_future = pull_intermediate_structured()
178
+ async for result in runner.result_stream():
179
+ if isinstance(result, ChatResponse):
180
+ result_text = result.choices[0].message.content
181
+ else:
182
+ result_text = str(result)
183
+
184
+ yield (
185
+ result_text,
186
+ None,
187
+ usage_metrics,
188
+ )
189
+
190
+ steps = await intermediate_future
191
+ llm_end_steps = [
192
+ step
193
+ for step in steps
194
+ if step.event_type == IntermediateStepType.LLM_END
195
+ ]
196
+ for step in llm_end_steps:
197
+ if step.usage_info:
198
+ token_usage = step.usage_info.token_usage
199
+ usage_metrics["total_tokens"] += token_usage.total_tokens
200
+ usage_metrics["prompt_tokens"] += token_usage.prompt_tokens
201
+ usage_metrics["completion_tokens"] += token_usage.completion_tokens
202
+
203
+ pipeline_interactions = create_pipeline_interactions_from_steps(steps)
204
+ yield "", pipeline_interactions, usage_metrics
205
+
206
+ return stream_generator()
207
+
163
208
  # Create and invoke the NAT (Nemo Agent Toolkit) Agentic Workflow with the inputs
164
209
  result, steps = await self.run_nat_workflow(self.workflow_path, chat_request)
165
210