nvidia-nat 1.3.0a20250828__py3-none-any.whl → 1.3.0a20250829__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 +9 -13
- nat/agent/react_agent/register.py +1 -1
- 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_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/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 +1 -1
- 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/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/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/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/nvidia_rag.py +1 -1
- 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.0a20250829.dist-info}/METADATA +1 -1
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250829.dist-info}/RECORD +70 -70
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250829.dist-info}/WHEEL +0 -0
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250829.dist-info}/entry_points.txt +0 -0
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250829.dist-info}/licenses/LICENSE-3rd-party.txt +0 -0
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250829.dist-info}/licenses/LICENSE.md +0 -0
- {nvidia_nat-1.3.0a20250828.dist-info → nvidia_nat-1.3.0a20250829.dist-info}/top_level.txt +0 -0
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()
|
nat/tool/nvidia_rag.py
CHANGED
|
@@ -86,7 +86,7 @@ async def nvidia_rag_tool(config: NVIDIARAGToolConfig, builder: Builder):
|
|
|
86
86
|
[await aformat_document(doc, document_prompt) for doc in docs])
|
|
87
87
|
return parsed_output
|
|
88
88
|
except Exception as e:
|
|
89
|
-
logger.exception("Error while running the tool"
|
|
89
|
+
logger.exception("Error while running the tool")
|
|
90
90
|
return f"Error while running the tool: {e}"
|
|
91
91
|
|
|
92
92
|
yield FunctionInfo.from_fn(
|
nat/tool/retriever.py
CHANGED
|
@@ -78,8 +78,9 @@ async def retriever_tool(config: RetrieverConfig, builder: Builder):
|
|
|
78
78
|
|
|
79
79
|
except RetrieverError as e:
|
|
80
80
|
if config.raise_errors:
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
logger.error("Retriever threw an error: %s.", e)
|
|
82
|
+
raise
|
|
83
|
+
logger.exception("Retriever threw an error: %s. Returning an empty response.", e)
|
|
83
84
|
return RetrieverOutput(results=[])
|
|
84
85
|
|
|
85
86
|
yield FunctionInfo.from_fn(
|
nat/utils/io/yaml_tools.py
CHANGED
|
@@ -85,7 +85,7 @@ def yaml_loads(config: str) -> dict:
|
|
|
85
85
|
try:
|
|
86
86
|
config_data = yaml.safe_load(stream)
|
|
87
87
|
except yaml.YAMLError as e:
|
|
88
|
-
logger.error("Error loading YAML: %s", interpolated_config_str
|
|
88
|
+
logger.error("Error loading YAML: %s", interpolated_config_str)
|
|
89
89
|
raise ValueError(f"Error loading YAML: {e}") from e
|
|
90
90
|
|
|
91
91
|
assert isinstance(config_data, dict)
|
nat/utils/reactive/observer.py
CHANGED
|
@@ -64,7 +64,7 @@ class Observer(ObserverBase[_T_in_contra]):
|
|
|
64
64
|
try:
|
|
65
65
|
self._on_error(exc)
|
|
66
66
|
except Exception as e:
|
|
67
|
-
logger.exception("Error in on_error callback: %s", e
|
|
67
|
+
logger.exception("Error in on_error callback: %s", e)
|
|
68
68
|
|
|
69
69
|
def on_complete(self) -> None:
|
|
70
70
|
if not self._stopped:
|
|
@@ -73,4 +73,4 @@ class Observer(ObserverBase[_T_in_contra]):
|
|
|
73
73
|
try:
|
|
74
74
|
self._on_complete()
|
|
75
75
|
except Exception as e:
|
|
76
|
-
logger.exception("Error in on_complete callback: %s", e
|
|
76
|
+
logger.exception("Error in on_complete callback: %s", e)
|
|
@@ -55,7 +55,7 @@ def configure_registry_channel(config_type: RegistryHandlerBaseConfig, channel_n
|
|
|
55
55
|
channel_registry_pre[field] = getattr(validated_field_model, field)
|
|
56
56
|
break
|
|
57
57
|
except Exception as e:
|
|
58
|
-
logger.exception(e
|
|
58
|
+
logger.exception(e)
|
|
59
59
|
logger.warning("Invalid '%s' input, input must be of type %s.", field, info.annotation)
|
|
60
60
|
|
|
61
61
|
validated_model = config_type(**channel_registry_pre)
|
|
@@ -78,7 +78,7 @@ def add_channel_interative(channel_type: str) -> None:
|
|
|
78
78
|
try:
|
|
79
79
|
ChannelConfigType = registry.get_registered_channel_info_by_channel_type(channel_type=channel_type).config_type
|
|
80
80
|
except Exception as e:
|
|
81
|
-
logger.exception("Invalid channel type: %s", e
|
|
81
|
+
logger.exception("Invalid channel type: %s", e)
|
|
82
82
|
return
|
|
83
83
|
|
|
84
84
|
while (True):
|