nvidia-nat 1.3.0a20250828__py3-none-any.whl → 1.3.0a20250830__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.
- nat/agent/base.py +6 -1
- nat/agent/react_agent/agent.py +46 -38
- nat/agent/react_agent/register.py +7 -2
- nat/agent/rewoo_agent/agent.py +16 -30
- nat/agent/rewoo_agent/register.py +3 -3
- nat/agent/tool_calling_agent/agent.py +9 -19
- nat/agent/tool_calling_agent/register.py +2 -2
- nat/builder/eval_builder.py +2 -2
- nat/builder/function.py +8 -8
- nat/builder/workflow.py +6 -2
- nat/builder/workflow_builder.py +21 -24
- nat/cli/cli_utils/config_override.py +1 -1
- nat/cli/commands/info/list_channels.py +1 -1
- nat/cli/commands/info/list_mcp.py +183 -47
- nat/cli/commands/registry/publish.py +2 -2
- nat/cli/commands/registry/pull.py +2 -2
- nat/cli/commands/registry/remove.py +2 -2
- nat/cli/commands/registry/search.py +1 -1
- nat/cli/commands/start.py +15 -3
- nat/cli/commands/uninstall.py +1 -1
- nat/cli/commands/workflow/workflow_commands.py +4 -4
- nat/data_models/discovery_metadata.py +4 -4
- nat/data_models/thinking_mixin.py +27 -8
- nat/eval/evaluate.py +6 -6
- nat/eval/intermediate_step_adapter.py +1 -1
- nat/eval/rag_evaluator/evaluate.py +2 -2
- nat/eval/rag_evaluator/register.py +1 -1
- nat/eval/remote_workflow.py +3 -3
- nat/eval/swe_bench_evaluator/evaluate.py +5 -5
- nat/eval/trajectory_evaluator/evaluate.py +1 -1
- nat/eval/tunable_rag_evaluator/evaluate.py +3 -3
- nat/experimental/test_time_compute/functions/ttc_tool_orchestration_function.py +2 -2
- nat/front_ends/fastapi/fastapi_front_end_controller.py +4 -4
- nat/front_ends/fastapi/fastapi_front_end_plugin.py +1 -1
- nat/front_ends/fastapi/fastapi_front_end_plugin_worker.py +3 -3
- nat/front_ends/fastapi/message_handler.py +2 -2
- nat/front_ends/fastapi/message_validator.py +8 -10
- nat/front_ends/fastapi/response_helpers.py +4 -4
- nat/front_ends/fastapi/step_adaptor.py +1 -1
- nat/front_ends/mcp/mcp_front_end_config.py +5 -0
- nat/front_ends/mcp/mcp_front_end_plugin.py +8 -2
- nat/front_ends/mcp/mcp_front_end_plugin_worker.py +2 -2
- nat/front_ends/mcp/tool_converter.py +40 -13
- nat/observability/exporter/base_exporter.py +1 -1
- nat/observability/exporter/processing_exporter.py +8 -9
- nat/observability/exporter_manager.py +5 -5
- nat/observability/mixin/file_mixin.py +7 -7
- nat/observability/processor/batching_processor.py +4 -6
- nat/observability/register.py +3 -1
- nat/profiler/calc/calc_runner.py +3 -4
- nat/profiler/callbacks/agno_callback_handler.py +1 -1
- nat/profiler/callbacks/langchain_callback_handler.py +5 -5
- nat/profiler/callbacks/llama_index_callback_handler.py +3 -3
- nat/profiler/callbacks/semantic_kernel_callback_handler.py +2 -2
- nat/profiler/profile_runner.py +1 -1
- nat/profiler/utils.py +1 -1
- nat/registry_handlers/local/local_handler.py +2 -2
- nat/registry_handlers/package_utils.py +1 -1
- nat/registry_handlers/pypi/pypi_handler.py +3 -3
- nat/registry_handlers/rest/rest_handler.py +4 -4
- nat/retriever/milvus/retriever.py +1 -1
- nat/retriever/nemo_retriever/retriever.py +1 -1
- nat/runtime/loader.py +1 -1
- nat/runtime/runner.py +2 -2
- nat/settings/global_settings.py +1 -1
- nat/tool/code_execution/local_sandbox/local_sandbox_server.py +1 -1
- nat/tool/mcp/{mcp_client.py → mcp_client_base.py} +197 -46
- nat/tool/mcp/mcp_client_impl.py +229 -0
- nat/tool/mcp/mcp_tool.py +79 -42
- nat/tool/nvidia_rag.py +1 -1
- nat/tool/register.py +1 -0
- nat/tool/retriever.py +3 -2
- nat/utils/io/yaml_tools.py +1 -1
- nat/utils/reactive/observer.py +2 -2
- nat/utils/settings/global_settings.py +2 -2
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250830.dist-info}/METADATA +3 -3
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250830.dist-info}/RECORD +82 -81
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250830.dist-info}/WHEEL +0 -0
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250830.dist-info}/entry_points.txt +0 -0
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250830.dist-info}/licenses/LICENSE-3rd-party.txt +0 -0
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250830.dist-info}/licenses/LICENSE.md +0 -0
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250830.dist-info}/top_level.txt +0 -0
|
@@ -103,7 +103,7 @@ class FileExportMixin(ResourceConflictMixin):
|
|
|
103
103
|
self._current_file_path.unlink()
|
|
104
104
|
logger.info("Cleaned up existing file: %s", self._current_file_path)
|
|
105
105
|
except OSError as e:
|
|
106
|
-
logger.
|
|
106
|
+
logger.exception("Error removing existing file %s: %s", self._current_file_path, e)
|
|
107
107
|
|
|
108
108
|
def _get_resource_identifiers(self) -> dict[str, Any]:
|
|
109
109
|
"""Return the file resources this instance will use.
|
|
@@ -154,10 +154,10 @@ class FileExportMixin(ResourceConflictMixin):
|
|
|
154
154
|
old_file.unlink()
|
|
155
155
|
logger.info("Cleaned up old log file during init: %s", old_file)
|
|
156
156
|
except OSError as e:
|
|
157
|
-
logger.
|
|
157
|
+
logger.exception("Error removing old file %s: %s", old_file, e)
|
|
158
158
|
|
|
159
159
|
except Exception as e:
|
|
160
|
-
logger.
|
|
160
|
+
logger.exception("Error during initialization cleanup: %s", e)
|
|
161
161
|
|
|
162
162
|
async def _should_roll_file(self) -> bool:
|
|
163
163
|
"""Check if the current file should be rolled based on size."""
|
|
@@ -191,7 +191,7 @@ class FileExportMixin(ResourceConflictMixin):
|
|
|
191
191
|
await self._cleanup_old_files()
|
|
192
192
|
|
|
193
193
|
except OSError as e:
|
|
194
|
-
logger.
|
|
194
|
+
logger.exception("Error rolling file %s: %s", self._current_file_path, e)
|
|
195
195
|
|
|
196
196
|
async def _cleanup_old_files(self) -> None:
|
|
197
197
|
"""Remove old rolled files beyond the maximum count."""
|
|
@@ -209,10 +209,10 @@ class FileExportMixin(ResourceConflictMixin):
|
|
|
209
209
|
old_file.unlink()
|
|
210
210
|
logger.info("Cleaned up old log file: %s", old_file)
|
|
211
211
|
except OSError as e:
|
|
212
|
-
logger.
|
|
212
|
+
logger.exception("Error removing old file %s: %s", old_file, e)
|
|
213
213
|
|
|
214
214
|
except Exception as e:
|
|
215
|
-
logger.
|
|
215
|
+
logger.exception("Error during cleanup: %s", e)
|
|
216
216
|
|
|
217
217
|
async def export_processed(self, item: str | list[str]) -> None:
|
|
218
218
|
"""Export a processed string or list of strings.
|
|
@@ -248,7 +248,7 @@ class FileExportMixin(ResourceConflictMixin):
|
|
|
248
248
|
await f.write("\n")
|
|
249
249
|
|
|
250
250
|
except Exception as e:
|
|
251
|
-
logger.
|
|
251
|
+
logger.exception("Error exporting event: %s", e)
|
|
252
252
|
|
|
253
253
|
def get_current_file_path(self) -> Path:
|
|
254
254
|
"""Get the current file path being written to.
|
|
@@ -193,14 +193,14 @@ class BatchingProcessor(CallbackProcessor[T, list[T]], Generic[T]):
|
|
|
193
193
|
await self._done_callback(batch)
|
|
194
194
|
logger.debug("Scheduled flush routed batch of %d items through pipeline", len(batch))
|
|
195
195
|
except Exception as e:
|
|
196
|
-
logger.
|
|
196
|
+
logger.exception("Error routing scheduled batch through pipeline: %s", e)
|
|
197
197
|
else:
|
|
198
198
|
logger.warning("Scheduled flush created batch of %d items but no pipeline callback set",
|
|
199
199
|
len(batch))
|
|
200
200
|
except asyncio.CancelledError:
|
|
201
201
|
pass
|
|
202
202
|
except Exception as e:
|
|
203
|
-
logger.
|
|
203
|
+
logger.exception("Error in scheduled flush: %s", e)
|
|
204
204
|
|
|
205
205
|
async def _create_batch(self) -> list[T]:
|
|
206
206
|
"""Create a batch from the current queue."""
|
|
@@ -271,9 +271,7 @@ class BatchingProcessor(CallbackProcessor[T, list[T]], Generic[T]):
|
|
|
271
271
|
"Successfully flushed final batch of %d items through pipeline during shutdown",
|
|
272
272
|
len(final_batch))
|
|
273
273
|
except Exception as e:
|
|
274
|
-
logger.
|
|
275
|
-
e,
|
|
276
|
-
exc_info=True)
|
|
274
|
+
logger.exception("Error routing final batch through pipeline during shutdown: %s", e)
|
|
277
275
|
else:
|
|
278
276
|
logger.warning("Final batch of %d items created during shutdown but no pipeline callback set",
|
|
279
277
|
len(final_batch))
|
|
@@ -285,7 +283,7 @@ class BatchingProcessor(CallbackProcessor[T, list[T]], Generic[T]):
|
|
|
285
283
|
logger.debug("BatchingProcessor shutdown completed successfully")
|
|
286
284
|
|
|
287
285
|
except Exception as e:
|
|
288
|
-
logger.
|
|
286
|
+
logger.exception("Error during BatchingProcessor shutdown: %s", e)
|
|
289
287
|
self._shutdown_complete = True
|
|
290
288
|
self._shutdown_complete_event.set()
|
|
291
289
|
|
nat/observability/register.py
CHANGED
|
@@ -72,8 +72,10 @@ async def console_logging_method(config: ConsoleLoggingMethodConfig, builder: Bu
|
|
|
72
72
|
"""
|
|
73
73
|
Build and return a StreamHandler for console-based logging.
|
|
74
74
|
"""
|
|
75
|
+
import sys
|
|
76
|
+
|
|
75
77
|
level = getattr(logging, config.level.upper(), logging.INFO)
|
|
76
|
-
handler = logging.StreamHandler()
|
|
78
|
+
handler = logging.StreamHandler(stream=sys.stdout)
|
|
77
79
|
handler.setLevel(level)
|
|
78
80
|
yield handler
|
|
79
81
|
|
nat/profiler/calc/calc_runner.py
CHANGED
|
@@ -442,7 +442,7 @@ class CalcRunner:
|
|
|
442
442
|
runtime_fit=self.linear_analyzer.wf_runtime_fit # May be None
|
|
443
443
|
)
|
|
444
444
|
except Exception as e:
|
|
445
|
-
logger.exception("Failed to plot concurrency vs. time metrics: %s", e
|
|
445
|
+
logger.exception("Failed to plot concurrency vs. time metrics: %s", e)
|
|
446
446
|
logger.warning("Skipping plot of concurrency vs. time metrics")
|
|
447
447
|
|
|
448
448
|
def write_output(self, output_dir: Path, calc_runner_output: CalcRunnerOutput):
|
|
@@ -506,11 +506,10 @@ class CalcRunner:
|
|
|
506
506
|
continue
|
|
507
507
|
try:
|
|
508
508
|
calc_output = CalcRunnerOutput.model_validate_json(calc_runner_output_path.read_text())
|
|
509
|
-
except ValidationError
|
|
509
|
+
except ValidationError:
|
|
510
510
|
logger.exception("Failed to validate calc runner output file %s. Skipping job %s.",
|
|
511
511
|
calc_runner_output_path,
|
|
512
|
-
|
|
513
|
-
exc_info=True)
|
|
512
|
+
job_dir.name)
|
|
514
513
|
continue
|
|
515
514
|
|
|
516
515
|
# Extract sizing metrics from calc_data
|
|
@@ -106,7 +106,7 @@ class LangchainProfilerHandler(AsyncCallbackHandler, BaseProfilerCallback):
|
|
|
106
106
|
try:
|
|
107
107
|
model_name = kwargs.get("metadata")["ls_model_name"]
|
|
108
108
|
except Exception as e:
|
|
109
|
-
logger.exception("Error getting model name: %s", e
|
|
109
|
+
logger.exception("Error getting model name: %s", e)
|
|
110
110
|
|
|
111
111
|
run_id = str(kwargs.get("run_id", str(uuid4())))
|
|
112
112
|
self._run_id_to_model_name[run_id] = model_name
|
|
@@ -144,7 +144,7 @@ class LangchainProfilerHandler(AsyncCallbackHandler, BaseProfilerCallback):
|
|
|
144
144
|
try:
|
|
145
145
|
model_name = metadata["ls_model_name"] if metadata else kwargs.get("metadata")["ls_model_name"]
|
|
146
146
|
except Exception as e:
|
|
147
|
-
logger.exception("Error getting model name: %s", e
|
|
147
|
+
logger.exception("Error getting model name: %s", e)
|
|
148
148
|
|
|
149
149
|
run_id = str(run_id)
|
|
150
150
|
self._run_id_to_model_name[run_id] = model_name
|
|
@@ -173,13 +173,13 @@ class LangchainProfilerHandler(AsyncCallbackHandler, BaseProfilerCallback):
|
|
|
173
173
|
try:
|
|
174
174
|
model_name = self._run_id_to_model_name.get(str(kwargs.get("run_id", "")), "")
|
|
175
175
|
except Exception as e:
|
|
176
|
-
logger.exception("Error getting model name: %s", e
|
|
176
|
+
logger.exception("Error getting model name: %s", e)
|
|
177
177
|
|
|
178
178
|
usage_metadata = {}
|
|
179
179
|
try:
|
|
180
180
|
usage_metadata = kwargs.get("chunk").message.usage_metadata if kwargs.get("chunk") else {}
|
|
181
181
|
except Exception as e:
|
|
182
|
-
logger.exception("Error getting usage metadata: %s", e
|
|
182
|
+
logger.exception("Error getting usage metadata: %s", e)
|
|
183
183
|
|
|
184
184
|
stats = IntermediateStepPayload(
|
|
185
185
|
event_type=IntermediateStepType.LLM_NEW_TOKEN,
|
|
@@ -206,7 +206,7 @@ class LangchainProfilerHandler(AsyncCallbackHandler, BaseProfilerCallback):
|
|
|
206
206
|
try:
|
|
207
207
|
model_name = self._run_id_to_model_name.get(str(kwargs.get("run_id", "")), "")
|
|
208
208
|
except Exception as e_inner:
|
|
209
|
-
logger.exception("Error getting model name: %s from outer error %s", e_inner, e
|
|
209
|
+
logger.exception("Error getting model name: %s from outer error %s", e_inner, e)
|
|
210
210
|
|
|
211
211
|
try:
|
|
212
212
|
generation = response.generations[0][0]
|
|
@@ -94,7 +94,7 @@ class LlamaIndexProfilerHandler(BaseCallbackHandler, BaseProfilerCallback):
|
|
|
94
94
|
try:
|
|
95
95
|
model_name = payload.get(EventPayload.SERIALIZED)['model']
|
|
96
96
|
except Exception as e:
|
|
97
|
-
logger.exception("Error getting model name: %s", e
|
|
97
|
+
logger.exception("Error getting model name: %s", e)
|
|
98
98
|
|
|
99
99
|
llm_text_input = " ".join(prompts_or_messages) if prompts_or_messages else ""
|
|
100
100
|
|
|
@@ -159,13 +159,13 @@ class LlamaIndexProfilerHandler(BaseCallbackHandler, BaseProfilerCallback):
|
|
|
159
159
|
for block in response.message.blocks:
|
|
160
160
|
llm_text_output += block.text
|
|
161
161
|
except Exception as e:
|
|
162
|
-
logger.exception("Error getting LLM text output: %s", e
|
|
162
|
+
logger.exception("Error getting LLM text output: %s", e)
|
|
163
163
|
|
|
164
164
|
model_name = ""
|
|
165
165
|
try:
|
|
166
166
|
model_name = response.raw.model
|
|
167
167
|
except Exception as e:
|
|
168
|
-
logger.exception("Error getting model name: %s", e
|
|
168
|
+
logger.exception("Error getting model name: %s", e)
|
|
169
169
|
|
|
170
170
|
# Append usage data to NAT usage stats
|
|
171
171
|
with self._lock:
|
|
@@ -132,7 +132,7 @@ class SemanticKernelProfilerHandler(BaseProfilerCallback):
|
|
|
132
132
|
if "text" in item:
|
|
133
133
|
model_input += item["text"]
|
|
134
134
|
except Exception as e:
|
|
135
|
-
logger.exception("Error in getting model input: %s", e
|
|
135
|
+
logger.exception("Error in getting model input: %s", e)
|
|
136
136
|
|
|
137
137
|
input_stats = IntermediateStepPayload(event_type=IntermediateStepType.LLM_START,
|
|
138
138
|
framework=LLMFrameworkEnum.SEMANTIC_KERNEL,
|
|
@@ -232,7 +232,7 @@ class SemanticKernelProfilerHandler(BaseProfilerCallback):
|
|
|
232
232
|
return result
|
|
233
233
|
|
|
234
234
|
except Exception as e:
|
|
235
|
-
logger.
|
|
235
|
+
logger.error("ToolUsage._use error: %s", e)
|
|
236
236
|
raise
|
|
237
237
|
|
|
238
238
|
return patched_tool_call
|
nat/profiler/profile_runner.py
CHANGED
|
@@ -282,7 +282,7 @@ class ProfilerRunner:
|
|
|
282
282
|
fitted_model = model_trainer.train(all_steps)
|
|
283
283
|
logger.info("Fitted model for forecasting.")
|
|
284
284
|
except Exception as e:
|
|
285
|
-
logger.exception("Fitting model failed. %s", e
|
|
285
|
+
logger.exception("Fitting model failed. %s", e)
|
|
286
286
|
return ProfilerResults()
|
|
287
287
|
|
|
288
288
|
if self.write_output:
|
nat/profiler/utils.py
CHANGED
|
@@ -175,7 +175,7 @@ def create_standardized_dataframe(requests_data: list[list[IntermediateStep]]) -
|
|
|
175
175
|
event_type=step.event_type).model_dump(), )
|
|
176
176
|
|
|
177
177
|
except Exception as e:
|
|
178
|
-
logger.exception("Error creating standardized DataFrame: %s", e
|
|
178
|
+
logger.exception("Error creating standardized DataFrame: %s", e)
|
|
179
179
|
return pd.DataFrame()
|
|
180
180
|
|
|
181
181
|
if not all_rows:
|
|
@@ -133,7 +133,7 @@ class LocalRegistryHandler(AbstractRegistryHandler):
|
|
|
133
133
|
"message": msg,
|
|
134
134
|
"action": ActionEnum.SEARCH
|
|
135
135
|
})
|
|
136
|
-
logger.exception(validated_search_response.status.message
|
|
136
|
+
logger.exception(validated_search_response.status.message)
|
|
137
137
|
|
|
138
138
|
yield validated_search_response
|
|
139
139
|
|
|
@@ -168,7 +168,7 @@ class LocalRegistryHandler(AbstractRegistryHandler):
|
|
|
168
168
|
validated_remove_response = RemoveResponse(status={
|
|
169
169
|
"status": StatusEnum.ERROR, "message": msg, "action": ActionEnum.REMOVE
|
|
170
170
|
}) # type: ignore
|
|
171
|
-
logger.exception(validated_remove_response.status.message
|
|
171
|
+
logger.exception(validated_remove_response.status.message)
|
|
172
172
|
|
|
173
173
|
yield validated_remove_response
|
|
174
174
|
|
|
@@ -396,7 +396,7 @@ def get_transitive_dependencies(distribution_names: list[str]) -> dict[str, set[
|
|
|
396
396
|
except importlib.metadata.PackageNotFoundError:
|
|
397
397
|
pass
|
|
398
398
|
|
|
399
|
-
logger.error("Distribution %s not found (tried common variations)", dist_name)
|
|
399
|
+
logger.error("Distribution %s not found (tried common variations)", dist_name, exc_info=True)
|
|
400
400
|
result[dist_name] = set()
|
|
401
401
|
|
|
402
402
|
return result
|
|
@@ -85,7 +85,7 @@ class PypiRegistryHandler(AbstractRegistryHandler):
|
|
|
85
85
|
validated_publish_response = PublishResponse(status={
|
|
86
86
|
"status": StatusEnum.ERROR, "message": msg, "action": ActionEnum.PUBLISH
|
|
87
87
|
})
|
|
88
|
-
logger.exception(validated_publish_response.status.message
|
|
88
|
+
logger.exception(validated_publish_response.status.message)
|
|
89
89
|
|
|
90
90
|
yield validated_publish_response
|
|
91
91
|
|
|
@@ -149,7 +149,7 @@ class PypiRegistryHandler(AbstractRegistryHandler):
|
|
|
149
149
|
validated_pull_response = PullResponse(status={
|
|
150
150
|
"status": StatusEnum.ERROR, "message": msg, "action": ActionEnum.PULL
|
|
151
151
|
})
|
|
152
|
-
logger.exception(validated_pull_response.status.message
|
|
152
|
+
logger.exception(validated_pull_response.status.message)
|
|
153
153
|
|
|
154
154
|
yield validated_pull_response
|
|
155
155
|
|
|
@@ -212,7 +212,7 @@ class PypiRegistryHandler(AbstractRegistryHandler):
|
|
|
212
212
|
|
|
213
213
|
except Exception as e:
|
|
214
214
|
msg = f"Error searching for artifacts: {e}"
|
|
215
|
-
logger.exception(msg
|
|
215
|
+
logger.exception(msg)
|
|
216
216
|
validated_search_response = SearchResponse(params=query,
|
|
217
217
|
status={
|
|
218
218
|
"status": StatusEnum.ERROR,
|
|
@@ -88,7 +88,7 @@ class RestRegistryHandler(AbstractRegistryHandler):
|
|
|
88
88
|
validated_publish_response = PublishResponse(status={
|
|
89
89
|
"status": StatusEnum.ERROR, "message": msg, "action": ActionEnum.PUBLISH
|
|
90
90
|
})
|
|
91
|
-
logger.exception(validated_publish_response.status.message
|
|
91
|
+
logger.exception(validated_publish_response.status.message)
|
|
92
92
|
|
|
93
93
|
yield validated_publish_response
|
|
94
94
|
|
|
@@ -155,7 +155,7 @@ class RestRegistryHandler(AbstractRegistryHandler):
|
|
|
155
155
|
validated_pull_response = PullResponse(status={
|
|
156
156
|
"status": StatusEnum.ERROR, "message": msg, "action": ActionEnum.PULL
|
|
157
157
|
})
|
|
158
|
-
logger.exception(validated_pull_response.status.message
|
|
158
|
+
logger.exception(validated_pull_response.status.message)
|
|
159
159
|
|
|
160
160
|
yield validated_pull_response
|
|
161
161
|
|
|
@@ -193,7 +193,7 @@ class RestRegistryHandler(AbstractRegistryHandler):
|
|
|
193
193
|
"message": msg,
|
|
194
194
|
"action": ActionEnum.SEARCH
|
|
195
195
|
})
|
|
196
|
-
logger.exception(validated_search_response.status.message
|
|
196
|
+
logger.exception(validated_search_response.status.message)
|
|
197
197
|
|
|
198
198
|
yield validated_search_response
|
|
199
199
|
|
|
@@ -228,7 +228,7 @@ class RestRegistryHandler(AbstractRegistryHandler):
|
|
|
228
228
|
validated_remove_response = RemoveResponse(status={
|
|
229
229
|
"status": StatusEnum.ERROR, "message": msg, "action": ActionEnum.REMOVE
|
|
230
230
|
})
|
|
231
|
-
logger.exception(validated_remove_response.status.message
|
|
231
|
+
logger.exception(validated_remove_response.status.message)
|
|
232
232
|
|
|
233
233
|
yield validated_remove_response
|
|
234
234
|
|
|
@@ -154,7 +154,7 @@ class MilvusRetriever(Retriever):
|
|
|
154
154
|
return _wrap_milvus_results(results, content_field=self.content_field)
|
|
155
155
|
|
|
156
156
|
except Exception as e:
|
|
157
|
-
logger.
|
|
157
|
+
logger.error("Exception when retrieving results from milvus for query %s: %s", query, e)
|
|
158
158
|
raise RetrieverError(f"Error when retrieving documents from {collection_name} for query '{query}'") from e
|
|
159
159
|
|
|
160
160
|
async def _search(self,
|
|
@@ -143,7 +143,7 @@ class NemoRetriever(Retriever):
|
|
|
143
143
|
return _wrap_nemo_results(output=output, content_field="content")
|
|
144
144
|
|
|
145
145
|
except Exception as e:
|
|
146
|
-
logger.
|
|
146
|
+
logger.error("Encountered an error when retrieving results from Nemo Retriever: %s", e)
|
|
147
147
|
raise CollectionUnavailableError(
|
|
148
148
|
f"Error when retrieving documents from {collection_name} for query '{query}'") from e
|
|
149
149
|
|
nat/runtime/loader.py
CHANGED
|
@@ -210,7 +210,7 @@ def discover_and_register_plugins(plugin_type: PluginTypes):
|
|
|
210
210
|
# Optionally, you can mark the plugin as unavailable or take other actions
|
|
211
211
|
|
|
212
212
|
except Exception:
|
|
213
|
-
logger.exception("An error occurred while loading plugin '%s'
|
|
213
|
+
logger.exception("An error occurred while loading plugin '%s'", entry_point.name)
|
|
214
214
|
|
|
215
215
|
finally:
|
|
216
216
|
count += 1
|
nat/runtime/runner.py
CHANGED
|
@@ -149,7 +149,7 @@ class Runner:
|
|
|
149
149
|
|
|
150
150
|
return result
|
|
151
151
|
except Exception as e:
|
|
152
|
-
logger.
|
|
152
|
+
logger.error("Error running workflow: %s", e)
|
|
153
153
|
event_stream = self._context_state.event_stream.get()
|
|
154
154
|
if event_stream:
|
|
155
155
|
event_stream.on_complete()
|
|
@@ -181,7 +181,7 @@ class Runner:
|
|
|
181
181
|
event_stream.on_complete()
|
|
182
182
|
|
|
183
183
|
except Exception as e:
|
|
184
|
-
logger.
|
|
184
|
+
logger.error("Error running workflow: %s", e)
|
|
185
185
|
event_stream = self._context_state.event_stream.get()
|
|
186
186
|
if event_stream:
|
|
187
187
|
event_stream.on_complete()
|
nat/settings/global_settings.py
CHANGED
|
@@ -231,7 +231,7 @@ class Settings(HashableBaseModel):
|
|
|
231
231
|
return True
|
|
232
232
|
|
|
233
233
|
except Exception as e:
|
|
234
|
-
logger.exception("Unable to validate user settings configuration: %s", e
|
|
234
|
+
logger.exception("Unable to validate user settings configuration: %s", e)
|
|
235
235
|
return False
|
|
236
236
|
|
|
237
237
|
def print_channel_settings(self, channel_type: str | None = None) -> None:
|
|
@@ -121,7 +121,7 @@ def execute_code_subprocess(generated_code: str, queue):
|
|
|
121
121
|
resource.setrlimit(resource.RLIMIT_AS, (limit, limit))
|
|
122
122
|
resource.setrlimit(resource.RLIMIT_DATA, (limit, limit))
|
|
123
123
|
except Exception as e:
|
|
124
|
-
logger.
|
|
124
|
+
logger.exception("Failed to set resource limits, PID: %s, error: %s", os.getpid(), e)
|
|
125
125
|
|
|
126
126
|
stdout_capture = StringIO()
|
|
127
127
|
stderr_capture = StringIO()
|