nemo-platform-plugin 0.1.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.
- nemo_platform/__init__.py +117 -0
- nemo_platform/_base_client.py +2146 -0
- nemo_platform/_client.py +1200 -0
- nemo_platform/_compat.py +241 -0
- nemo_platform/_constants.py +29 -0
- nemo_platform/_decoders/jsonl.py +138 -0
- nemo_platform/_exceptions.py +123 -0
- nemo_platform/_files.py +188 -0
- nemo_platform/_models.py +967 -0
- nemo_platform/_qs.py +164 -0
- nemo_platform/_resource.py +58 -0
- nemo_platform/_response.py +872 -0
- nemo_platform/_streaming.py +391 -0
- nemo_platform/_types.py +288 -0
- nemo_platform/_utils/__init__.py +79 -0
- nemo_platform/_utils/_compat.py +60 -0
- nemo_platform/_utils/_datetime_parse.py +151 -0
- nemo_platform/_utils/_json.py +50 -0
- nemo_platform/_utils/_logs.py +40 -0
- nemo_platform/_utils/_path.py +142 -0
- nemo_platform/_utils/_proxy.py +80 -0
- nemo_platform/_utils/_reflection.py +57 -0
- nemo_platform/_utils/_resources_proxy.py +39 -0
- nemo_platform/_utils/_streams.py +27 -0
- nemo_platform/_utils/_sync.py +73 -0
- nemo_platform/_utils/_transform.py +472 -0
- nemo_platform/_utils/_typing.py +171 -0
- nemo_platform/_utils/_utils.py +448 -0
- nemo_platform/_version.py +21 -0
- nemo_platform/auth/__init__.py +15 -0
- nemo_platform/auth/device_flow.py +303 -0
- nemo_platform/auth/helpers.py +211 -0
- nemo_platform/auth/token_provider.py +239 -0
- nemo_platform/beta/evaluator/__init__.py +120 -0
- nemo_platform/beta/evaluator/agent_inference.py +360 -0
- nemo_platform/beta/evaluator/constants.py +4 -0
- nemo_platform/beta/evaluator/dataset_schemas/common.py +177 -0
- nemo_platform/beta/evaluator/dataset_schemas/compatibility.py +353 -0
- nemo_platform/beta/evaluator/dataset_schemas/templates.py +389 -0
- nemo_platform/beta/evaluator/datasets/__init__.py +28 -0
- nemo_platform/beta/evaluator/datasets/loader.py +415 -0
- nemo_platform/beta/evaluator/enums.py +64 -0
- nemo_platform/beta/evaluator/execution/_protocols.py +20 -0
- nemo_platform/beta/evaluator/execution/backends/base.py +86 -0
- nemo_platform/beta/evaluator/execution/backends/local/backend.py +132 -0
- nemo_platform/beta/evaluator/execution/benchmark_execution.py +666 -0
- nemo_platform/beta/evaluator/execution/config.py +64 -0
- nemo_platform/beta/evaluator/execution/evaluator.py +289 -0
- nemo_platform/beta/evaluator/execution/job_poll.py +98 -0
- nemo_platform/beta/evaluator/execution/metric_execution.py +878 -0
- nemo_platform/beta/evaluator/execution/pipeline.py +64 -0
- nemo_platform/beta/evaluator/execution/runs.py +143 -0
- nemo_platform/beta/evaluator/execution/scoring.py +224 -0
- nemo_platform/beta/evaluator/execution/utils.py +116 -0
- nemo_platform/beta/evaluator/execution/values.py +53 -0
- nemo_platform/beta/evaluator/inference.py +456 -0
- nemo_platform/beta/evaluator/metrics/aggregation.py +451 -0
- nemo_platform/beta/evaluator/metrics/bleu.py +94 -0
- nemo_platform/beta/evaluator/metrics/exact_match.py +52 -0
- nemo_platform/beta/evaluator/metrics/f1.py +50 -0
- nemo_platform/beta/evaluator/metrics/hooks.py +41 -0
- nemo_platform/beta/evaluator/metrics/llm_judge.py +392 -0
- nemo_platform/beta/evaluator/metrics/number_check.py +95 -0
- nemo_platform/beta/evaluator/metrics/protocol.py +241 -0
- nemo_platform/beta/evaluator/metrics/ragas/__init__.py +41 -0
- nemo_platform/beta/evaluator/metrics/ragas/base.py +521 -0
- nemo_platform/beta/evaluator/metrics/ragas/git_patch.py +36 -0
- nemo_platform/beta/evaluator/metrics/ragas/imports.py +192 -0
- nemo_platform/beta/evaluator/metrics/ragas/metrics.py +183 -0
- nemo_platform/beta/evaluator/metrics/remote.py +250 -0
- nemo_platform/beta/evaluator/metrics/rouge.py +71 -0
- nemo_platform/beta/evaluator/metrics/string_check.py +69 -0
- nemo_platform/beta/evaluator/metrics/template_rendering.py +141 -0
- nemo_platform/beta/evaluator/metrics/tool_calling.py +173 -0
- nemo_platform/beta/evaluator/metrics/types.py +62 -0
- nemo_platform/beta/evaluator/metrics/utils.py +54 -0
- nemo_platform/beta/evaluator/resilience/api.py +142 -0
- nemo_platform/beta/evaluator/resilience/classifier.py +142 -0
- nemo_platform/beta/evaluator/resilience/config.py +69 -0
- nemo_platform/beta/evaluator/resilience/errors.py +117 -0
- nemo_platform/beta/evaluator/resilience/policy.py +50 -0
- nemo_platform/beta/evaluator/resilience/scheduler.py +459 -0
- nemo_platform/beta/evaluator/resilience/types.py +93 -0
- nemo_platform/beta/evaluator/structured_output.py +184 -0
- nemo_platform/beta/evaluator/templates.py +115 -0
- nemo_platform/beta/evaluator/values/__init__.py +162 -0
- nemo_platform/beta/evaluator/values/agents.py +84 -0
- nemo_platform/beta/evaluator/values/common.py +28 -0
- nemo_platform/beta/evaluator/values/dataset_schemas.py +112 -0
- nemo_platform/beta/evaluator/values/datasets.py +28 -0
- nemo_platform/beta/evaluator/values/metrics.py +587 -0
- nemo_platform/beta/evaluator/values/models.py +157 -0
- nemo_platform/beta/evaluator/values/multi_metric_results.py +359 -0
- nemo_platform/beta/evaluator/values/params.py +109 -0
- nemo_platform/beta/evaluator/values/results.py +699 -0
- nemo_platform/beta/evaluator/values/scores.py +300 -0
- nemo_platform/beta/safe_synthesizer/__init__.py +4 -0
- nemo_platform/beta/safe_synthesizer/config.py +29 -0
- nemo_platform/beta/safe_synthesizer/job.py +309 -0
- nemo_platform/beta/safe_synthesizer/job_builder.py +355 -0
- nemo_platform/cli/__init__.py +4 -0
- nemo_platform/cli/app.py +321 -0
- nemo_platform/cli/commands/__init__.py +15 -0
- nemo_platform/cli/commands/api/__init__.py +114 -0
- nemo_platform/cli/commands/api/adapters.py +384 -0
- nemo_platform/cli/commands/api/files/__init__.py +237 -0
- nemo_platform/cli/commands/api/files/filesets.py +386 -0
- nemo_platform/cli/commands/api/files/otlp/__init__.py +12 -0
- nemo_platform/cli/commands/api/files/otlp/logs.py +116 -0
- nemo_platform/cli/commands/api/guardrail/__init__.py +270 -0
- nemo_platform/cli/commands/api/guardrail/configs.py +311 -0
- nemo_platform/cli/commands/api/iam/__init__.py +12 -0
- nemo_platform/cli/commands/api/iam/role_bindings.py +264 -0
- nemo_platform/cli/commands/api/inference/__init__.py +76 -0
- nemo_platform/cli/commands/api/inference/deployment_configs/__init__.py +370 -0
- nemo_platform/cli/commands/api/inference/deployment_configs/versions.py +132 -0
- nemo_platform/cli/commands/api/inference/deployments/__init__.py +565 -0
- nemo_platform/cli/commands/api/inference/deployments/versions.py +141 -0
- nemo_platform/cli/commands/api/inference/gateway/__init__.py +14 -0
- nemo_platform/cli/commands/api/inference/gateway/model.py +324 -0
- nemo_platform/cli/commands/api/inference/gateway/openai/__init__.py +12 -0
- nemo_platform/cli/commands/api/inference/gateway/openai/v1/__init__.py +12 -0
- nemo_platform/cli/commands/api/inference/gateway/openai/v1/models.py +106 -0
- nemo_platform/cli/commands/api/inference/gateway/provider.py +327 -0
- nemo_platform/cli/commands/api/inference/models.py +106 -0
- nemo_platform/cli/commands/api/inference/providers.py +612 -0
- nemo_platform/cli/commands/api/inference/virtual_models.py +412 -0
- nemo_platform/cli/commands/api/intake/__init__.py +18 -0
- nemo_platform/cli/commands/api/intake/apps/__init__.py +326 -0
- nemo_platform/cli/commands/api/intake/apps/tasks.py +340 -0
- nemo_platform/cli/commands/api/intake/entries/__init__.py +445 -0
- nemo_platform/cli/commands/api/intake/entries/events.py +118 -0
- nemo_platform/cli/commands/api/intake/evaluator_results.py +267 -0
- nemo_platform/cli/commands/api/intake/exports/__init__.py +63 -0
- nemo_platform/cli/commands/api/intake/exports/jobs.py +245 -0
- nemo_platform/cli/commands/api/intake/ingest/__init__.py +14 -0
- nemo_platform/cli/commands/api/intake/ingest/atif.py +115 -0
- nemo_platform/cli/commands/api/intake/ingest/chat_completions.py +125 -0
- nemo_platform/cli/commands/api/intake/ingest/otlp/__init__.py +12 -0
- nemo_platform/cli/commands/api/intake/ingest/otlp/v1/__init__.py +12 -0
- nemo_platform/cli/commands/api/intake/ingest/otlp/v1/traces.py +72 -0
- nemo_platform/cli/commands/api/intake/spans/__init__.py +202 -0
- nemo_platform/cli/commands/api/intake/spans/evaluator_results.py +65 -0
- nemo_platform/cli/commands/api/intake/traces.py +183 -0
- nemo_platform/cli/commands/api/jobs/__init__.py +576 -0
- nemo_platform/cli/commands/api/jobs/results.py +211 -0
- nemo_platform/cli/commands/api/jobs/steps.py +243 -0
- nemo_platform/cli/commands/api/jobs/tasks.py +210 -0
- nemo_platform/cli/commands/api/members.py +304 -0
- nemo_platform/cli/commands/api/models/__init__.py +555 -0
- nemo_platform/cli/commands/api/models/adapters.py +261 -0
- nemo_platform/cli/commands/api/projects.py +332 -0
- nemo_platform/cli/commands/api/safe_synthesizer/__init__.py +12 -0
- nemo_platform/cli/commands/api/safe_synthesizer/jobs/__init__.py +417 -0
- nemo_platform/cli/commands/api/safe_synthesizer/jobs/results.py +211 -0
- nemo_platform/cli/commands/api/secrets/__init__.py +315 -0
- nemo_platform/cli/commands/api/secrets/admin.py +44 -0
- nemo_platform/cli/commands/api/workspaces.py +339 -0
- nemo_platform/cli/commands/auth.py +803 -0
- nemo_platform/cli/commands/config.py +308 -0
- nemo_platform/cli/commands/docs.py +277 -0
- nemo_platform/cli/commands/manifest_registry.py +180 -0
- nemo_platform/cli/commands/plugins.py +87 -0
- nemo_platform/cli/commands/quickstart/__init__.py +15 -0
- nemo_platform/cli/commands/quickstart/cli.py +1178 -0
- nemo_platform/cli/commands/services/_process.py +472 -0
- nemo_platform/cli/commands/services/cli.py +694 -0
- nemo_platform/cli/commands/setup.py +1947 -0
- nemo_platform/cli/commands/skills/agents/claude.py +29 -0
- nemo_platform/cli/commands/skills/agents/codex.py +32 -0
- nemo_platform/cli/commands/skills/agents/cursor.py +18 -0
- nemo_platform/cli/commands/skills/agents/opencode.py +20 -0
- nemo_platform/cli/commands/skills/base.py +53 -0
- nemo_platform/cli/commands/skills/cli.py +313 -0
- nemo_platform/cli/commands/skills/installer.py +51 -0
- nemo_platform/cli/commands/skills/registry.py +396 -0
- nemo_platform/cli/commands/use_cases/__init__.py +15 -0
- nemo_platform/cli/commands/use_cases/agent.py +245 -0
- nemo_platform/cli/commands/use_cases/chat.py +965 -0
- nemo_platform/cli/commands/use_cases/wait.py +151 -0
- nemo_platform/cli/core/__init__.py +8 -0
- nemo_platform/cli/core/agent_helpers.py +84 -0
- nemo_platform/cli/core/api.py +160 -0
- nemo_platform/cli/core/autocomplete.py +63 -0
- nemo_platform/cli/core/code_generator.py +306 -0
- nemo_platform/cli/core/context.py +179 -0
- nemo_platform/cli/core/errors.py +349 -0
- nemo_platform/cli/core/formatters.py +718 -0
- nemo_platform/cli/core/help_formatter.py +868 -0
- nemo_platform/cli/core/lazy_load.py +187 -0
- nemo_platform/cli/core/logging.py +24 -0
- nemo_platform/cli/core/pagination.py +255 -0
- nemo_platform/cli/core/stdin_utils.py +233 -0
- nemo_platform/cli/core/streaming.py +30 -0
- nemo_platform/cli/core/table_config.py +302 -0
- nemo_platform/cli/core/timestamp_formatter.py +127 -0
- nemo_platform/cli/core/types.py +112 -0
- nemo_platform/cli/core/waiters.py +339 -0
- nemo_platform/cli/manifest.py +108 -0
- nemo_platform/client/__init__.py +15 -0
- nemo_platform/client/factory.py +597 -0
- nemo_platform/config/README.md +168 -0
- nemo_platform/config/__init__.py +23 -0
- nemo_platform/config/config.py +538 -0
- nemo_platform/config/models.py +377 -0
- nemo_platform/config/types.py +7 -0
- nemo_platform/filesets/__init__.py +19 -0
- nemo_platform/filesets/filesystem/callbacks.py +229 -0
- nemo_platform/filesets/filesystem/filesystem.py +940 -0
- nemo_platform/filesets/resources.py +1120 -0
- nemo_platform/lib/.keep +4 -0
- nemo_platform/models/__init__.py +14 -0
- nemo_platform/models/resources.py +836 -0
- nemo_platform/pagination.py +149 -0
- nemo_platform/py.typed +0 -0
- nemo_platform/quickstart/__init__.py +99 -0
- nemo_platform/quickstart/cluster.py +198 -0
- nemo_platform/quickstart/config.py +402 -0
- nemo_platform/quickstart/container.py +758 -0
- nemo_platform/quickstart/gpu_config.py +111 -0
- nemo_platform/quickstart/platform_config.py +82 -0
- nemo_platform/quickstart/preflight.py +451 -0
- nemo_platform/quickstart/prompts.py +426 -0
- nemo_platform/quickstart/storage.py +90 -0
- nemo_platform/quickstart/validators.py +268 -0
- nemo_platform/resources/__init__.py +16 -0
- nemo_platform/resources/adapters/__init__.py +34 -0
- nemo_platform/resources/adapters/adapters.py +704 -0
- nemo_platform/resources/adapters/api.md +15 -0
- nemo_platform/resources/audit/__init__.py +16 -0
- nemo_platform/resources/entities/__init__.py +34 -0
- nemo_platform/resources/entities/api.md +16 -0
- nemo_platform/resources/entities/entities.py +1014 -0
- nemo_platform/resources/evaluation/__init__.py +118 -0
- nemo_platform/resources/evaluation/api.md +303 -0
- nemo_platform/resources/evaluation/benchmark_job_results.py +541 -0
- nemo_platform/resources/evaluation/benchmark_jobs/__init__.py +48 -0
- nemo_platform/resources/evaluation/benchmark_jobs/benchmark_jobs.py +900 -0
- nemo_platform/resources/evaluation/benchmark_jobs/results/__init__.py +76 -0
- nemo_platform/resources/evaluation/benchmark_jobs/results/aggregate_scores.py +197 -0
- nemo_platform/resources/evaluation/benchmark_jobs/results/artifacts.py +206 -0
- nemo_platform/resources/evaluation/benchmark_jobs/results/results.py +516 -0
- nemo_platform/resources/evaluation/benchmark_jobs/results/row_scores.py +213 -0
- nemo_platform/resources/evaluation/benchmarks.py +690 -0
- nemo_platform/resources/evaluation/evaluation.py +277 -0
- nemo_platform/resources/evaluation/metric_job_results.py +533 -0
- nemo_platform/resources/evaluation/metric_jobs/__init__.py +48 -0
- nemo_platform/resources/evaluation/metric_jobs/metric_jobs.py +888 -0
- nemo_platform/resources/evaluation/metric_jobs/results/__init__.py +76 -0
- nemo_platform/resources/evaluation/metric_jobs/results/aggregate_scores.py +197 -0
- nemo_platform/resources/evaluation/metric_jobs/results/artifacts.py +206 -0
- nemo_platform/resources/evaluation/metric_jobs/results/results.py +512 -0
- nemo_platform/resources/evaluation/metric_jobs/results/row_scores.py +213 -0
- nemo_platform/resources/evaluation/metrics.py +3495 -0
- nemo_platform/resources/files/__init__.py +62 -0
- nemo_platform/resources/files/api.md +65 -0
- nemo_platform/resources/files/files.py +683 -0
- nemo_platform/resources/files/filesets.py +783 -0
- nemo_platform/resources/files/otlp/__init__.py +48 -0
- nemo_platform/resources/files/otlp/logs.py +337 -0
- nemo_platform/resources/files/otlp/otlp.py +117 -0
- nemo_platform/resources/guardrail/__init__.py +48 -0
- nemo_platform/resources/guardrail/api.md +116 -0
- nemo_platform/resources/guardrail/configs.py +679 -0
- nemo_platform/resources/guardrail/guardrail.py +463 -0
- nemo_platform/resources/iam/__init__.py +48 -0
- nemo_platform/resources/iam/api.md +22 -0
- nemo_platform/resources/iam/iam.py +117 -0
- nemo_platform/resources/iam/role_bindings.py +537 -0
- nemo_platform/resources/inference/__init__.py +118 -0
- nemo_platform/resources/inference/api.md +224 -0
- nemo_platform/resources/inference/deployment_configs/__init__.py +48 -0
- nemo_platform/resources/inference/deployment_configs/deployment_configs.py +756 -0
- nemo_platform/resources/inference/deployment_configs/versions.py +418 -0
- nemo_platform/resources/inference/deployments/__init__.py +48 -0
- nemo_platform/resources/inference/deployments/deployments.py +1017 -0
- nemo_platform/resources/inference/deployments/versions.py +434 -0
- nemo_platform/resources/inference/gateway/__init__.py +76 -0
- nemo_platform/resources/inference/gateway/gateway.py +181 -0
- nemo_platform/resources/inference/gateway/model.py +708 -0
- nemo_platform/resources/inference/gateway/openai/__init__.py +48 -0
- nemo_platform/resources/inference/gateway/openai/openai.py +700 -0
- nemo_platform/resources/inference/gateway/openai/v1/__init__.py +48 -0
- nemo_platform/resources/inference/gateway/openai/v1/models.py +290 -0
- nemo_platform/resources/inference/gateway/openai/v1/v1.py +117 -0
- nemo_platform/resources/inference/gateway/provider.py +749 -0
- nemo_platform/resources/inference/inference.py +277 -0
- nemo_platform/resources/inference/models.py +290 -0
- nemo_platform/resources/inference/providers.py +1049 -0
- nemo_platform/resources/inference/virtual_models.py +846 -0
- nemo_platform/resources/intake/__init__.py +132 -0
- nemo_platform/resources/intake/api.md +268 -0
- nemo_platform/resources/intake/apps/__init__.py +48 -0
- nemo_platform/resources/intake/apps/apps.py +718 -0
- nemo_platform/resources/intake/apps/tasks.py +731 -0
- nemo_platform/resources/intake/entries/__init__.py +48 -0
- nemo_platform/resources/intake/entries/entries.py +855 -0
- nemo_platform/resources/intake/entries/events.py +320 -0
- nemo_platform/resources/intake/evaluator_results.py +512 -0
- nemo_platform/resources/intake/exports/__init__.py +48 -0
- nemo_platform/resources/intake/exports/exports.py +229 -0
- nemo_platform/resources/intake/exports/jobs.py +464 -0
- nemo_platform/resources/intake/ingest/__init__.py +76 -0
- nemo_platform/resources/intake/ingest/atif.py +242 -0
- nemo_platform/resources/intake/ingest/chat_completions.py +270 -0
- nemo_platform/resources/intake/ingest/ingest.py +181 -0
- nemo_platform/resources/intake/ingest/otlp/__init__.py +48 -0
- nemo_platform/resources/intake/ingest/otlp/otlp.py +117 -0
- nemo_platform/resources/intake/ingest/otlp/v1/__init__.py +48 -0
- nemo_platform/resources/intake/ingest/otlp/v1/traces.py +183 -0
- nemo_platform/resources/intake/ingest/otlp/v1/v1.py +117 -0
- nemo_platform/resources/intake/intake.py +309 -0
- nemo_platform/resources/intake/spans/__init__.py +48 -0
- nemo_platform/resources/intake/spans/evaluator_results.py +197 -0
- nemo_platform/resources/intake/spans/spans.py +367 -0
- nemo_platform/resources/intake/traces.py +351 -0
- nemo_platform/resources/jobs/__init__.py +76 -0
- nemo_platform/resources/jobs/api.md +118 -0
- nemo_platform/resources/jobs/jobs.py +1300 -0
- nemo_platform/resources/jobs/results.py +555 -0
- nemo_platform/resources/jobs/steps.py +491 -0
- nemo_platform/resources/jobs/tasks.py +470 -0
- nemo_platform/resources/members/__init__.py +34 -0
- nemo_platform/resources/members/api.md +19 -0
- nemo_platform/resources/members/members.py +634 -0
- nemo_platform/resources/models/__init__.py +48 -0
- nemo_platform/resources/models/adapters.py +514 -0
- nemo_platform/resources/models/api.md +44 -0
- nemo_platform/resources/models/models.py +981 -0
- nemo_platform/resources/projects/__init__.py +34 -0
- nemo_platform/resources/projects/api.md +21 -0
- nemo_platform/resources/projects/projects.py +736 -0
- nemo_platform/resources/safe_synthesizer/__init__.py +48 -0
- nemo_platform/resources/safe_synthesizer/api.md +62 -0
- nemo_platform/resources/safe_synthesizer/jobs/__init__.py +48 -0
- nemo_platform/resources/safe_synthesizer/jobs/jobs.py +895 -0
- nemo_platform/resources/safe_synthesizer/jobs/results.py +819 -0
- nemo_platform/resources/safe_synthesizer/safe_synthesizer.py +117 -0
- nemo_platform/resources/secrets/__init__.py +48 -0
- nemo_platform/resources/secrets/admin.py +150 -0
- nemo_platform/resources/secrets/api.md +34 -0
- nemo_platform/resources/secrets/secrets.py +756 -0
- nemo_platform/resources/workspaces/__init__.py +34 -0
- nemo_platform/resources/workspaces/api.md +20 -0
- nemo_platform/resources/workspaces/workspaces.py +734 -0
- nemo_platform/skills/__init__.py +28 -0
- nemo_platform/skills/inference/SKILL.md +564 -0
- nemo_platform/skills/nemo-build-agent/SKILL.md +221 -0
- nemo_platform/skills/nemo-build-agent/references/templates/data-designer-config.py +80 -0
- nemo_platform/skills/nemo-evaluator/SKILL.md +140 -0
- nemo_platform/skills/nemo-explore/SKILL.md +70 -0
- nemo_platform/skills/nemo-files/SKILL.md +81 -0
- nemo_platform/skills/nemo-fine-tune/SKILL.md +43 -0
- nemo_platform/skills/nemo-guardrails/SKILL.md +519 -0
- nemo_platform/skills/nemo-secrets/SKILL.md +60 -0
- nemo_platform/skills/nemo-skill-selection/SKILL.md +146 -0
- nemo_platform/skills/nemo-spec/SKILL.md +76 -0
- nemo_platform/skills/nemo-spec/references/templates/agent-spec.md +68 -0
- nemo_platform/skills/nemo-status/SKILL.md +115 -0
- nemo_platform/skills/nemo-teardown/SKILL.md +185 -0
- nemo_platform/skills/nemo-try-agent/SKILL.md +102 -0
- nemo_platform/types/__init__.py +54 -0
- nemo_platform/types/adapters/__init__.py +24 -0
- nemo_platform/types/adapters/adapter_create_params.py +63 -0
- nemo_platform/types/adapters/adapter_entity_filter_param.py +56 -0
- nemo_platform/types/adapters/adapter_list_params.py +46 -0
- nemo_platform/types/adapters/adapter_patch_params.py +35 -0
- nemo_platform/types/adapters/adapters_page.py +37 -0
- nemo_platform/types/audit/__init__.py +18 -0
- nemo_platform/types/audit/jobs/__init__.py +18 -0
- nemo_platform/types/entities/__init__.py +26 -0
- nemo_platform/types/entities/entities_page.py +37 -0
- nemo_platform/types/entities/entity.py +63 -0
- nemo_platform/types/entities/entity_create_params.py +46 -0
- nemo_platform/types/entities/entity_delete_entity_by_name_params.py +31 -0
- nemo_platform/types/entities/entity_get_entity_by_name_params.py +31 -0
- nemo_platform/types/entities/entity_list_params.py +47 -0
- nemo_platform/types/entities/entity_update_entity_by_name_params.py +52 -0
- nemo_platform/types/evaluation/__init__.py +242 -0
- nemo_platform/types/evaluation/agent.py +68 -0
- nemo_platform/types/evaluation/agent_goal_accuracy_metric.py +92 -0
- nemo_platform/types/evaluation/agent_goal_accuracy_metric_param.py +69 -0
- nemo_platform/types/evaluation/agent_goal_accuracy_metric_param_param.py +70 -0
- nemo_platform/types/evaluation/agent_goal_accuracy_metric_response.py +88 -0
- nemo_platform/types/evaluation/agent_param.py +69 -0
- nemo_platform/types/evaluation/aggregate_range_score.py +65 -0
- nemo_platform/types/evaluation/aggregate_rubric_score.py +64 -0
- nemo_platform/types/evaluation/aggregated_metric_result.py +34 -0
- nemo_platform/types/evaluation/answer_accuracy_metric.py +89 -0
- nemo_platform/types/evaluation/answer_accuracy_metric_param.py +66 -0
- nemo_platform/types/evaluation/answer_accuracy_metric_param_param.py +67 -0
- nemo_platform/types/evaluation/answer_accuracy_metric_response.py +85 -0
- nemo_platform/types/evaluation/benchmark.py +81 -0
- nemo_platform/types/evaluation/benchmark_create_params.py +64 -0
- nemo_platform/types/evaluation/benchmark_create_response.py +26 -0
- nemo_platform/types/evaluation/benchmark_evaluation_job.py +75 -0
- nemo_platform/types/evaluation/benchmark_evaluation_jobs_list_filter_param.py +49 -0
- nemo_platform/types/evaluation/benchmark_evaluation_jobs_page.py +37 -0
- nemo_platform/types/evaluation/benchmark_evaluation_jobs_sort_field.py +22 -0
- nemo_platform/types/evaluation/benchmark_job_create_params.py +58 -0
- nemo_platform/types/evaluation/benchmark_job_get_logs_params.py +30 -0
- nemo_platform/types/evaluation/benchmark_job_list_params.py +44 -0
- nemo_platform/types/evaluation/benchmark_job_result.py +93 -0
- nemo_platform/types/evaluation/benchmark_job_result_list_params.py +116 -0
- nemo_platform/types/evaluation/benchmark_job_result_retrieve_params.py +50 -0
- nemo_platform/types/evaluation/benchmark_job_results_list_response.py +37 -0
- nemo_platform/types/evaluation/benchmark_jobs/__init__.py +18 -0
- nemo_platform/types/evaluation/benchmark_jobs/results/__init__.py +22 -0
- nemo_platform/types/evaluation/benchmark_jobs/results/benchmark_evaluation_result.py +30 -0
- nemo_platform/types/evaluation/benchmark_jobs/results/benchmark_metric_result.py +44 -0
- nemo_platform/types/evaluation/benchmark_jobs/results/row_score_download_params.py +28 -0
- nemo_platform/types/evaluation/benchmark_list_params.py +84 -0
- nemo_platform/types/evaluation/benchmark_offline_job.py +43 -0
- nemo_platform/types/evaluation/benchmark_offline_job_param.py +44 -0
- nemo_platform/types/evaluation/benchmark_online_agent_job.py +71 -0
- nemo_platform/types/evaluation/benchmark_online_agent_job_param.py +74 -0
- nemo_platform/types/evaluation/benchmark_online_job.py +66 -0
- nemo_platform/types/evaluation/benchmark_online_job_param.py +68 -0
- nemo_platform/types/evaluation/benchmark_ref.py +22 -0
- nemo_platform/types/evaluation/benchmark_retrieve_params.py +29 -0
- nemo_platform/types/evaluation/benchmark_retrieve_response.py +27 -0
- nemo_platform/types/evaluation/benchmarks_list_response.py +42 -0
- nemo_platform/types/evaluation/bleu_metric.py +76 -0
- nemo_platform/types/evaluation/bleu_metric_param.py +50 -0
- nemo_platform/types/evaluation/bleu_metric_param_param.py +52 -0
- nemo_platform/types/evaluation/bleu_metric_response.py +69 -0
- nemo_platform/types/evaluation/built_in_dataset.py +46 -0
- nemo_platform/types/evaluation/context_entity_recall_metric.py +89 -0
- nemo_platform/types/evaluation/context_entity_recall_metric_param.py +66 -0
- nemo_platform/types/evaluation/context_entity_recall_metric_param_param.py +67 -0
- nemo_platform/types/evaluation/context_entity_recall_metric_response.py +85 -0
- nemo_platform/types/evaluation/context_precision_metric.py +89 -0
- nemo_platform/types/evaluation/context_precision_metric_param.py +66 -0
- nemo_platform/types/evaluation/context_precision_metric_param_param.py +67 -0
- nemo_platform/types/evaluation/context_precision_metric_response.py +85 -0
- nemo_platform/types/evaluation/context_recall_metric.py +89 -0
- nemo_platform/types/evaluation/context_recall_metric_param.py +66 -0
- nemo_platform/types/evaluation/context_recall_metric_param_param.py +67 -0
- nemo_platform/types/evaluation/context_recall_metric_response.py +85 -0
- nemo_platform/types/evaluation/context_relevance_metric.py +89 -0
- nemo_platform/types/evaluation/context_relevance_metric_param.py +66 -0
- nemo_platform/types/evaluation/context_relevance_metric_param_param.py +67 -0
- nemo_platform/types/evaluation/context_relevance_metric_response.py +85 -0
- nemo_platform/types/evaluation/dataset_rows.py +35 -0
- nemo_platform/types/evaluation/dataset_rows_param.py +36 -0
- nemo_platform/types/evaluation/evaluate_dataset_rows_param.py +33 -0
- nemo_platform/types/evaluation/exact_match_metric.py +79 -0
- nemo_platform/types/evaluation/exact_match_metric_param.py +53 -0
- nemo_platform/types/evaluation/exact_match_metric_param_param.py +53 -0
- nemo_platform/types/evaluation/exact_match_metric_response.py +72 -0
- nemo_platform/types/evaluation/extended_benchmark.py +130 -0
- nemo_platform/types/evaluation/f1_metric.py +76 -0
- nemo_platform/types/evaluation/f1_metric_param.py +50 -0
- nemo_platform/types/evaluation/f1_metric_param_param.py +50 -0
- nemo_platform/types/evaluation/f1_metric_response.py +69 -0
- nemo_platform/types/evaluation/faithfulness_metric.py +89 -0
- nemo_platform/types/evaluation/faithfulness_metric_param.py +66 -0
- nemo_platform/types/evaluation/faithfulness_metric_param_param.py +67 -0
- nemo_platform/types/evaluation/faithfulness_metric_response.py +85 -0
- nemo_platform/types/evaluation/field_mapping.py +56 -0
- nemo_platform/types/evaluation/field_mapping_param.py +57 -0
- nemo_platform/types/evaluation/fileset.py +48 -0
- nemo_platform/types/evaluation/fileset_param.py +49 -0
- nemo_platform/types/evaluation/fileset_ref.py +22 -0
- nemo_platform/types/evaluation/histogram.py +30 -0
- nemo_platform/types/evaluation/histogram_bin.py +33 -0
- nemo_platform/types/evaluation/inference_params.py +65 -0
- nemo_platform/types/evaluation/inference_params_param.py +53 -0
- nemo_platform/types/evaluation/json_score_parser.py +35 -0
- nemo_platform/types/evaluation/json_score_parser_param.py +34 -0
- nemo_platform/types/evaluation/llm_judge_metric.py +126 -0
- nemo_platform/types/evaluation/llm_judge_metric_param.py +103 -0
- nemo_platform/types/evaluation/llm_judge_metric_param_param.py +105 -0
- nemo_platform/types/evaluation/llm_judge_metric_response.py +120 -0
- nemo_platform/types/evaluation/metric_create_params.py +959 -0
- nemo_platform/types/evaluation/metric_create_response.py +75 -0
- nemo_platform/types/evaluation/metric_evaluate_params.py +111 -0
- nemo_platform/types/evaluation/metric_evaluation_job.py +65 -0
- nemo_platform/types/evaluation/metric_evaluation_jobs_list_filter_param.py +49 -0
- nemo_platform/types/evaluation/metric_evaluation_jobs_page.py +37 -0
- nemo_platform/types/evaluation/metric_evaluation_jobs_sort_field.py +22 -0
- nemo_platform/types/evaluation/metric_evaluation_response.py +98 -0
- nemo_platform/types/evaluation/metric_evaluation_row_score.py +45 -0
- nemo_platform/types/evaluation/metric_job_create_params.py +48 -0
- nemo_platform/types/evaluation/metric_job_get_logs_params.py +30 -0
- nemo_platform/types/evaluation/metric_job_list_params.py +44 -0
- nemo_platform/types/evaluation/metric_job_result.py +93 -0
- nemo_platform/types/evaluation/metric_job_result_list_params.py +114 -0
- nemo_platform/types/evaluation/metric_job_result_retrieve_params.py +50 -0
- nemo_platform/types/evaluation/metric_job_results_list_response.py +37 -0
- nemo_platform/types/evaluation/metric_jobs/__init__.py +18 -0
- nemo_platform/types/evaluation/metric_jobs/results/__init__.py +20 -0
- nemo_platform/types/evaluation/metric_jobs/results/row_score_download_params.py +28 -0
- nemo_platform/types/evaluation/metric_list_params.py +73 -0
- nemo_platform/types/evaluation/metric_offline_job.py +106 -0
- nemo_platform/types/evaluation/metric_offline_job_param.py +107 -0
- nemo_platform/types/evaluation/metric_online_agent_job.py +133 -0
- nemo_platform/types/evaluation/metric_online_agent_job_param.py +135 -0
- nemo_platform/types/evaluation/metric_online_job.py +127 -0
- nemo_platform/types/evaluation/metric_online_job_param.py +129 -0
- nemo_platform/types/evaluation/metric_output.py +30 -0
- nemo_platform/types/evaluation/metric_ref.py +22 -0
- nemo_platform/types/evaluation/metric_retrieve_response.py +98 -0
- nemo_platform/types/evaluation/metric_retriever_job.py +64 -0
- nemo_platform/types/evaluation/metric_retriever_job_param.py +65 -0
- nemo_platform/types/evaluation/metric_type.py +47 -0
- nemo_platform/types/evaluation/metrics_list_response.py +90 -0
- nemo_platform/types/evaluation/model.py +44 -0
- nemo_platform/types/evaluation/model_param.py +44 -0
- nemo_platform/types/evaluation/model_ref.py +22 -0
- nemo_platform/types/evaluation/nemo_agent_toolkit_remote_metric.py +87 -0
- nemo_platform/types/evaluation/nemo_agent_toolkit_remote_metric_param.py +64 -0
- nemo_platform/types/evaluation/nemo_agent_toolkit_remote_metric_param_param.py +65 -0
- nemo_platform/types/evaluation/nemo_agent_toolkit_remote_metric_response.py +80 -0
- nemo_platform/types/evaluation/noise_sensitivity_metric.py +89 -0
- nemo_platform/types/evaluation/noise_sensitivity_metric_param.py +66 -0
- nemo_platform/types/evaluation/noise_sensitivity_metric_param_param.py +67 -0
- nemo_platform/types/evaluation/noise_sensitivity_metric_response.py +85 -0
- nemo_platform/types/evaluation/number_check_metric.py +104 -0
- nemo_platform/types/evaluation/number_check_metric_param.py +81 -0
- nemo_platform/types/evaluation/number_check_metric_param_param.py +83 -0
- nemo_platform/types/evaluation/number_check_metric_response.py +97 -0
- nemo_platform/types/evaluation/parameter.py +42 -0
- nemo_platform/types/evaluation/parameter_param.py +40 -0
- nemo_platform/types/evaluation/percentiles.py +54 -0
- nemo_platform/types/evaluation/range_score.py +56 -0
- nemo_platform/types/evaluation/range_score_param.py +57 -0
- nemo_platform/types/evaluation/reasoning_params.py +41 -0
- nemo_platform/types/evaluation/reasoning_params_param.py +41 -0
- nemo_platform/types/evaluation/regex_score_parser.py +38 -0
- nemo_platform/types/evaluation/regex_score_parser_param.py +37 -0
- nemo_platform/types/evaluation/remote_metric.py +91 -0
- nemo_platform/types/evaluation/remote_metric_param.py +68 -0
- nemo_platform/types/evaluation/remote_metric_param_param.py +69 -0
- nemo_platform/types/evaluation/remote_metric_response.py +84 -0
- nemo_platform/types/evaluation/remote_score.py +49 -0
- nemo_platform/types/evaluation/remote_score_param.py +50 -0
- nemo_platform/types/evaluation/response_groundedness_metric.py +89 -0
- nemo_platform/types/evaluation/response_groundedness_metric_param.py +66 -0
- nemo_platform/types/evaluation/response_groundedness_metric_param_param.py +67 -0
- nemo_platform/types/evaluation/response_groundedness_metric_response.py +85 -0
- nemo_platform/types/evaluation/response_relevancy_metric.py +95 -0
- nemo_platform/types/evaluation/response_relevancy_metric_param.py +74 -0
- nemo_platform/types/evaluation/response_relevancy_metric_param_param.py +75 -0
- nemo_platform/types/evaluation/response_relevancy_metric_response.py +93 -0
- nemo_platform/types/evaluation/retriever_pipeline.py +34 -0
- nemo_platform/types/evaluation/retriever_pipeline_param.py +35 -0
- nemo_platform/types/evaluation/rouge_metric.py +76 -0
- nemo_platform/types/evaluation/rouge_metric_param.py +53 -0
- nemo_platform/types/evaluation/rouge_metric_param_param.py +53 -0
- nemo_platform/types/evaluation/rouge_metric_response.py +69 -0
- nemo_platform/types/evaluation/row_score.py +59 -0
- nemo_platform/types/evaluation/rubric.py +40 -0
- nemo_platform/types/evaluation/rubric_param.py +40 -0
- nemo_platform/types/evaluation/rubric_score.py +54 -0
- nemo_platform/types/evaluation/rubric_score_param.py +55 -0
- nemo_platform/types/evaluation/rubric_score_stat.py +38 -0
- nemo_platform/types/evaluation/run_config.py +39 -0
- nemo_platform/types/evaluation/run_config_online.py +51 -0
- nemo_platform/types/evaluation/run_config_online_model.py +73 -0
- nemo_platform/types/evaluation/run_config_online_model_param.py +75 -0
- nemo_platform/types/evaluation/run_config_online_param.py +51 -0
- nemo_platform/types/evaluation/run_config_param.py +39 -0
- nemo_platform/types/evaluation/string_check_metric.py +82 -0
- nemo_platform/types/evaluation/string_check_metric_param.py +59 -0
- nemo_platform/types/evaluation/string_check_metric_param_param.py +61 -0
- nemo_platform/types/evaluation/string_check_metric_response.py +75 -0
- nemo_platform/types/evaluation/system_benchmark.py +71 -0
- nemo_platform/types/evaluation/system_benchmark_offline_job.py +58 -0
- nemo_platform/types/evaluation/system_benchmark_offline_job_param.py +60 -0
- nemo_platform/types/evaluation/system_benchmark_online_job.py +54 -0
- nemo_platform/types/evaluation/system_benchmark_online_job_param.py +55 -0
- nemo_platform/types/evaluation/system_metric.py +70 -0
- nemo_platform/types/evaluation/system_metric_param.py +50 -0
- nemo_platform/types/evaluation/system_metric_param_param.py +51 -0
- nemo_platform/types/evaluation/system_metric_response.py +66 -0
- nemo_platform/types/evaluation/tool_call_accuracy_metric.py +70 -0
- nemo_platform/types/evaluation/tool_call_accuracy_metric_param.py +44 -0
- nemo_platform/types/evaluation/tool_call_accuracy_metric_param_param.py +44 -0
- nemo_platform/types/evaluation/tool_call_accuracy_metric_response.py +63 -0
- nemo_platform/types/evaluation/tool_calling_metric.py +70 -0
- nemo_platform/types/evaluation/tool_calling_metric_param.py +47 -0
- nemo_platform/types/evaluation/tool_calling_metric_param_param.py +47 -0
- nemo_platform/types/evaluation/tool_calling_metric_response.py +63 -0
- nemo_platform/types/evaluation/topic_adherence_metric.py +92 -0
- nemo_platform/types/evaluation/topic_adherence_metric_param.py +69 -0
- nemo_platform/types/evaluation/topic_adherence_metric_param_param.py +70 -0
- nemo_platform/types/evaluation/topic_adherence_metric_response.py +88 -0
- nemo_platform/types/files/__init__.py +45 -0
- nemo_platform/types/files/cache_status.py +22 -0
- nemo_platform/types/files/dataset_metadata_content.py +46 -0
- nemo_platform/types/files/dataset_metadata_content_param.py +45 -0
- nemo_platform/types/files/file_list_files_params.py +35 -0
- nemo_platform/types/files/file_upload_file_params.py +28 -0
- nemo_platform/types/files/fileset.py +62 -0
- nemo_platform/types/files/fileset_create_params.py +74 -0
- nemo_platform/types/files/fileset_file.py +36 -0
- nemo_platform/types/files/fileset_filter_param.py +54 -0
- nemo_platform/types/files/fileset_list_params.py +47 -0
- nemo_platform/types/files/fileset_metadata_param.py +46 -0
- nemo_platform/types/files/fileset_metadata_param_param.py +47 -0
- nemo_platform/types/files/fileset_outputs_page.py +37 -0
- nemo_platform/types/files/fileset_purpose.py +22 -0
- nemo_platform/types/files/fileset_update_params.py +49 -0
- nemo_platform/types/files/huggingface_storage_config.py +60 -0
- nemo_platform/types/files/huggingface_storage_config_param.py +60 -0
- nemo_platform/types/files/list_fileset_files_response.py +27 -0
- nemo_platform/types/files/local_storage_config.py +39 -0
- nemo_platform/types/files/local_storage_config_param.py +38 -0
- nemo_platform/types/files/ngc_storage_config.py +66 -0
- nemo_platform/types/files/ngc_storage_config_param.py +66 -0
- nemo_platform/types/files/otlp/__init__.py +22 -0
- nemo_platform/types/files/otlp/log_query_params.py +36 -0
- nemo_platform/types/files/otlp/otel_export_logs_partial_success.py +34 -0
- nemo_platform/types/files/otlp/otel_export_logs_service_response.py +35 -0
- nemo_platform/types/files/s3_storage_config.py +85 -0
- nemo_platform/types/files/s3_storage_config_param.py +85 -0
- nemo_platform/types/files/secret_ref.py +22 -0
- nemo_platform/types/files/storage_config_type.py +22 -0
- nemo_platform/types/guardrail/__init__.py +165 -0
- nemo_platform/types/guardrail/action_rails.py +36 -0
- nemo_platform/types/guardrail/action_rails_param.py +38 -0
- nemo_platform/types/guardrail/activated_rail.py +61 -0
- nemo_platform/types/guardrail/ai_defense_rail_config.py +36 -0
- nemo_platform/types/guardrail/ai_defense_rail_config_param.py +36 -0
- nemo_platform/types/guardrail/auto_align_options.py +29 -0
- nemo_platform/types/guardrail/auto_align_options_param.py +30 -0
- nemo_platform/types/guardrail/auto_align_rail_config.py +35 -0
- nemo_platform/types/guardrail/auto_align_rail_config_param.py +37 -0
- nemo_platform/types/guardrail/cache_stats_config.py +32 -0
- nemo_platform/types/guardrail/cache_stats_config_param.py +32 -0
- nemo_platform/types/guardrail/chat_completion_assistant_message_param.py +45 -0
- nemo_platform/types/guardrail/chat_completion_content_part_image_param.py +34 -0
- nemo_platform/types/guardrail/chat_completion_content_part_text_param.py +32 -0
- nemo_platform/types/guardrail/chat_completion_function_message_param.py +35 -0
- nemo_platform/types/guardrail/chat_completion_message_tool_call_param.py +37 -0
- nemo_platform/types/guardrail/chat_completion_system_message_param.py +35 -0
- nemo_platform/types/guardrail/chat_completion_tool_message_param.py +35 -0
- nemo_platform/types/guardrail/chat_completion_user_message_param.py +41 -0
- nemo_platform/types/guardrail/clavata_rail_config.py +47 -0
- nemo_platform/types/guardrail/clavata_rail_config_param.py +48 -0
- nemo_platform/types/guardrail/clavata_rail_options.py +36 -0
- nemo_platform/types/guardrail/clavata_rail_options_param.py +38 -0
- nemo_platform/types/guardrail/config_create_params.py +36 -0
- nemo_platform/types/guardrail/config_list_params.py +47 -0
- nemo_platform/types/guardrail/config_update_params.py +33 -0
- nemo_platform/types/guardrail/content_safety_config.py +34 -0
- nemo_platform/types/guardrail/content_safety_config_param.py +35 -0
- nemo_platform/types/guardrail/crowd_strike_aidr_rail_config.py +29 -0
- nemo_platform/types/guardrail/crowd_strike_aidr_rail_config_param.py +29 -0
- nemo_platform/types/guardrail/dialog_rails.py +34 -0
- nemo_platform/types/guardrail/dialog_rails_param.py +35 -0
- nemo_platform/types/guardrail/executed_action.py +48 -0
- nemo_platform/types/guardrail/fact_checking_rail_config.py +31 -0
- nemo_platform/types/guardrail/fact_checking_rail_config_param.py +32 -0
- nemo_platform/types/guardrail/fiddler_guardrails.py +35 -0
- nemo_platform/types/guardrail/fiddler_guardrails_param.py +35 -0
- nemo_platform/types/guardrail/function_call_param.py +35 -0
- nemo_platform/types/guardrail/function_param.py +35 -0
- nemo_platform/types/guardrail/g_li_ner_detection.py +51 -0
- nemo_platform/types/guardrail/g_li_ner_detection_options.py +29 -0
- nemo_platform/types/guardrail/g_li_ner_detection_options_param.py +31 -0
- nemo_platform/types/guardrail/g_li_ner_detection_param.py +52 -0
- nemo_platform/types/guardrail/generation_log.py +44 -0
- nemo_platform/types/guardrail/generation_log_options_param.py +50 -0
- nemo_platform/types/guardrail/generation_options_param.py +55 -0
- nemo_platform/types/guardrail/generation_rails_options_param.py +53 -0
- nemo_platform/types/guardrail/generation_stats.py +56 -0
- nemo_platform/types/guardrail/guardrail_check_params.py +164 -0
- nemo_platform/types/guardrail/guardrail_check_response.py +36 -0
- nemo_platform/types/guardrail/guardrail_config.py +59 -0
- nemo_platform/types/guardrail/guardrail_config_filter_param.py +49 -0
- nemo_platform/types/guardrail/guardrail_configs_page.py +37 -0
- nemo_platform/types/guardrail/guardrails_ai_rail_config.py +33 -0
- nemo_platform/types/guardrail/guardrails_ai_rail_config_param.py +35 -0
- nemo_platform/types/guardrail/guardrails_ai_validator_config.py +44 -0
- nemo_platform/types/guardrail/guardrails_ai_validator_config_param.py +45 -0
- nemo_platform/types/guardrail/guardrails_data.py +40 -0
- nemo_platform/types/guardrail/guardrails_data_param.py +67 -0
- nemo_platform/types/guardrail/image_u_rl_param.py +32 -0
- nemo_platform/types/guardrail/injection_detection.py +49 -0
- nemo_platform/types/guardrail/injection_detection_param.py +52 -0
- nemo_platform/types/guardrail/input_rails.py +32 -0
- nemo_platform/types/guardrail/input_rails_param.py +34 -0
- nemo_platform/types/guardrail/instruction.py +30 -0
- nemo_platform/types/guardrail/instruction_param.py +32 -0
- nemo_platform/types/guardrail/jailbreak_detection_config.py +52 -0
- nemo_platform/types/guardrail/jailbreak_detection_config_param.py +58 -0
- nemo_platform/types/guardrail/llm_call_info.py +63 -0
- nemo_platform/types/guardrail/log_adapter_config.py +41 -0
- nemo_platform/types/guardrail/log_adapter_config_param.py +27 -0
- nemo_platform/types/guardrail/message_template.py +30 -0
- nemo_platform/types/guardrail/message_template_param.py +32 -0
- nemo_platform/types/guardrail/model.py +55 -0
- nemo_platform/types/guardrail/model_cache_config.py +36 -0
- nemo_platform/types/guardrail/model_cache_config_param.py +37 -0
- nemo_platform/types/guardrail/model_param.py +55 -0
- nemo_platform/types/guardrail/model_parameters.py +51 -0
- nemo_platform/types/guardrail/model_parameters_param.py +38 -0
- nemo_platform/types/guardrail/multilingual_config.py +40 -0
- nemo_platform/types/guardrail/multilingual_config_param.py +41 -0
- nemo_platform/types/guardrail/output_rails.py +44 -0
- nemo_platform/types/guardrail/output_rails_param.py +46 -0
- nemo_platform/types/guardrail/output_rails_streaming_config.py +44 -0
- nemo_platform/types/guardrail/output_rails_streaming_config_param.py +44 -0
- nemo_platform/types/guardrail/pangea_rail_config.py +33 -0
- nemo_platform/types/guardrail/pangea_rail_config_param.py +34 -0
- nemo_platform/types/guardrail/pangea_rail_options.py +31 -0
- nemo_platform/types/guardrail/pangea_rail_options_param.py +33 -0
- nemo_platform/types/guardrail/patronus_evaluate_api_params.py +38 -0
- nemo_platform/types/guardrail/patronus_evaluate_api_params_param.py +40 -0
- nemo_platform/types/guardrail/patronus_evaluate_config.py +30 -0
- nemo_platform/types/guardrail/patronus_evaluate_config_param.py +31 -0
- nemo_platform/types/guardrail/patronus_evaluation_success_strategy.py +22 -0
- nemo_platform/types/guardrail/patronus_rail_config.py +33 -0
- nemo_platform/types/guardrail/patronus_rail_config_param.py +34 -0
- nemo_platform/types/guardrail/private_ai_detection.py +39 -0
- nemo_platform/types/guardrail/private_ai_detection_options.py +29 -0
- nemo_platform/types/guardrail/private_ai_detection_options_param.py +31 -0
- nemo_platform/types/guardrail/private_ai_detection_param.py +40 -0
- nemo_platform/types/guardrail/rail_status.py +26 -0
- nemo_platform/types/guardrail/rails.py +73 -0
- nemo_platform/types/guardrail/rails_config.py +79 -0
- nemo_platform/types/guardrail/rails_config_data.py +94 -0
- nemo_platform/types/guardrail/rails_config_data_param.py +95 -0
- nemo_platform/types/guardrail/rails_config_param.py +81 -0
- nemo_platform/types/guardrail/rails_param.py +74 -0
- nemo_platform/types/guardrail/reasoning_config.py +32 -0
- nemo_platform/types/guardrail/reasoning_config_param.py +32 -0
- nemo_platform/types/guardrail/regex_detection.py +36 -0
- nemo_platform/types/guardrail/regex_detection_options.py +32 -0
- nemo_platform/types/guardrail/regex_detection_options_param.py +34 -0
- nemo_platform/types/guardrail/regex_detection_param.py +37 -0
- nemo_platform/types/guardrail/retrieval_rails.py +29 -0
- nemo_platform/types/guardrail/retrieval_rails_param.py +31 -0
- nemo_platform/types/guardrail/sensitive_data_detection.py +43 -0
- nemo_platform/types/guardrail/sensitive_data_detection_options.py +37 -0
- nemo_platform/types/guardrail/sensitive_data_detection_options_param.py +39 -0
- nemo_platform/types/guardrail/sensitive_data_detection_param.py +45 -0
- nemo_platform/types/guardrail/single_call_config.py +31 -0
- nemo_platform/types/guardrail/single_call_config_param.py +31 -0
- nemo_platform/types/guardrail/status_enum.py +22 -0
- nemo_platform/types/guardrail/task_prompt.py +63 -0
- nemo_platform/types/guardrail/task_prompt_param.py +65 -0
- nemo_platform/types/guardrail/tool_input_rails.py +36 -0
- nemo_platform/types/guardrail/tool_input_rails_param.py +38 -0
- nemo_platform/types/guardrail/tool_output_rails.py +36 -0
- nemo_platform/types/guardrail/tool_output_rails_param.py +38 -0
- nemo_platform/types/guardrail/tracing_config.py +48 -0
- nemo_platform/types/guardrail/tracing_config_param.py +50 -0
- nemo_platform/types/guardrail/trend_micro_rail_config.py +51 -0
- nemo_platform/types/guardrail/trend_micro_rail_config_param.py +51 -0
- nemo_platform/types/guardrail/user_messages_config.py +42 -0
- nemo_platform/types/guardrail/user_messages_config_param.py +42 -0
- nemo_platform/types/iam/__init__.py +26 -0
- nemo_platform/types/iam/date_range_filter_param.py +36 -0
- nemo_platform/types/iam/role_binding.py +42 -0
- nemo_platform/types/iam/role_binding_create_params.py +39 -0
- nemo_platform/types/iam/role_binding_delete_params.py +30 -0
- nemo_platform/types/iam/role_binding_filter_param.py +49 -0
- nemo_platform/types/iam/role_binding_list_params.py +44 -0
- nemo_platform/types/iam/role_bindings_page.py +37 -0
- nemo_platform/types/inference/__init__.py +60 -0
- nemo_platform/types/inference/deployment_config_create_params.py +47 -0
- nemo_platform/types/inference/deployment_config_list_params.py +46 -0
- nemo_platform/types/inference/deployment_config_update_params.py +37 -0
- nemo_platform/types/inference/deployment_configs/__init__.py +20 -0
- nemo_platform/types/inference/deployment_configs/version_list_response.py +25 -0
- nemo_platform/types/inference/deployment_create_params.py +45 -0
- nemo_platform/types/inference/deployment_list_models_response.py +23 -0
- nemo_platform/types/inference/deployment_list_params.py +52 -0
- nemo_platform/types/inference/deployment_update_params.py +35 -0
- nemo_platform/types/inference/deployment_update_status_params.py +42 -0
- nemo_platform/types/inference/deployments/__init__.py +20 -0
- nemo_platform/types/inference/deployments/version_list_response.py +25 -0
- nemo_platform/types/inference/gateway/__init__.py +38 -0
- nemo_platform/types/inference/gateway/model_patch_params.py +31 -0
- nemo_platform/types/inference/gateway/model_patch_response.py +23 -0
- nemo_platform/types/inference/gateway/model_post_params.py +31 -0
- nemo_platform/types/inference/gateway/model_post_response.py +23 -0
- nemo_platform/types/inference/gateway/model_put_params.py +31 -0
- nemo_platform/types/inference/gateway/model_put_response.py +23 -0
- nemo_platform/types/inference/gateway/openai/__init__.py +18 -0
- nemo_platform/types/inference/gateway/openai/v1/__init__.py +21 -0
- nemo_platform/types/inference/gateway/openai/v1/openai_list_models_resp.py +31 -0
- nemo_platform/types/inference/gateway/openai/v1/openai_model_resp.py +34 -0
- nemo_platform/types/inference/gateway/openai_patch_params.py +29 -0
- nemo_platform/types/inference/gateway/openai_patch_response.py +23 -0
- nemo_platform/types/inference/gateway/openai_post_params.py +29 -0
- nemo_platform/types/inference/gateway/openai_post_response.py +23 -0
- nemo_platform/types/inference/gateway/openai_put_params.py +29 -0
- nemo_platform/types/inference/gateway/openai_put_response.py +23 -0
- nemo_platform/types/inference/gateway/provider_patch_params.py +31 -0
- nemo_platform/types/inference/gateway/provider_patch_response.py +23 -0
- nemo_platform/types/inference/gateway/provider_post_params.py +31 -0
- nemo_platform/types/inference/gateway/provider_post_response.py +23 -0
- nemo_platform/types/inference/gateway/provider_put_params.py +31 -0
- nemo_platform/types/inference/gateway/provider_put_response.py +23 -0
- nemo_platform/types/inference/gateway/provider_ready_response.py +23 -0
- nemo_platform/types/inference/k8s_nim_operator_config.py +57 -0
- nemo_platform/types/inference/k8s_nim_operator_config_param.py +58 -0
- nemo_platform/types/inference/middleware_call.py +55 -0
- nemo_platform/types/inference/middleware_call_param.py +56 -0
- nemo_platform/types/inference/model_deployment.py +97 -0
- nemo_platform/types/inference/model_deployment_config.py +76 -0
- nemo_platform/types/inference/model_deployment_config_filter_param.py +49 -0
- nemo_platform/types/inference/model_deployment_configs_page.py +37 -0
- nemo_platform/types/inference/model_deployment_filter_param.py +56 -0
- nemo_platform/types/inference/model_deployment_status.py +24 -0
- nemo_platform/types/inference/model_deployment_status_history_item.py +37 -0
- nemo_platform/types/inference/model_deployments_page.py +37 -0
- nemo_platform/types/inference/model_provider.py +134 -0
- nemo_platform/types/inference/model_provider_filter_param.py +56 -0
- nemo_platform/types/inference/model_provider_sort.py +24 -0
- nemo_platform/types/inference/model_provider_status.py +24 -0
- nemo_platform/types/inference/model_providers_page.py +37 -0
- nemo_platform/types/inference/model_type.py +22 -0
- nemo_platform/types/inference/nim_deployment.py +96 -0
- nemo_platform/types/inference/nim_deployment_param.py +93 -0
- nemo_platform/types/inference/provider_create_params.py +94 -0
- nemo_platform/types/inference/provider_list_params.py +47 -0
- nemo_platform/types/inference/provider_update_params.py +87 -0
- nemo_platform/types/inference/provider_update_status_params.py +48 -0
- nemo_platform/types/inference/served_model_mapping.py +35 -0
- nemo_platform/types/inference/served_model_mapping_param.py +32 -0
- nemo_platform/types/inference/virtual_model.py +91 -0
- nemo_platform/types/inference/virtual_model_create_params.py +83 -0
- nemo_platform/types/inference/virtual_model_inference_config.py +32 -0
- nemo_platform/types/inference/virtual_model_inference_config_param.py +34 -0
- nemo_platform/types/inference/virtual_model_list_params.py +35 -0
- nemo_platform/types/inference/virtual_model_patch_params.py +80 -0
- nemo_platform/types/inference/virtual_models_page.py +37 -0
- nemo_platform/types/intake/__init__.py +86 -0
- nemo_platform/types/intake/app.py +51 -0
- nemo_platform/types/intake/app_create_params.py +38 -0
- nemo_platform/types/intake/app_filter_param.py +46 -0
- nemo_platform/types/intake/app_list_params.py +44 -0
- nemo_platform/types/intake/app_patch_params.py +35 -0
- nemo_platform/types/intake/app_sort_field.py +22 -0
- nemo_platform/types/intake/apps/__init__.py +26 -0
- nemo_platform/types/intake/apps/task.py +54 -0
- nemo_platform/types/intake/apps/task_create_params.py +40 -0
- nemo_platform/types/intake/apps/task_filter_param.py +49 -0
- nemo_platform/types/intake/apps/task_list_params.py +44 -0
- nemo_platform/types/intake/apps/task_patch_params.py +37 -0
- nemo_platform/types/intake/apps/task_sort_field.py +22 -0
- nemo_platform/types/intake/apps/tasks_page.py +37 -0
- nemo_platform/types/intake/apps_page.py +37 -0
- nemo_platform/types/intake/entries/__init__.py +20 -0
- nemo_platform/types/intake/entries/event_create_params.py +40 -0
- nemo_platform/types/intake/entry.py +98 -0
- nemo_platform/types/intake/entry_context.py +79 -0
- nemo_platform/types/intake/entry_context_filter_param.py +41 -0
- nemo_platform/types/intake/entry_context_param.py +82 -0
- nemo_platform/types/intake/entry_create_params.py +85 -0
- nemo_platform/types/intake/entry_data.py +48 -0
- nemo_platform/types/intake/entry_data_param.py +51 -0
- nemo_platform/types/intake/entry_filter_param.py +85 -0
- nemo_platform/types/intake/entry_list_params.py +47 -0
- nemo_platform/types/intake/entry_patch_params.py +79 -0
- nemo_platform/types/intake/entry_sort_field.py +22 -0
- nemo_platform/types/intake/entry_user_rating_filter_param.py +31 -0
- nemo_platform/types/intake/entrys_page.py +37 -0
- nemo_platform/types/intake/evaluation_context_param.py +41 -0
- nemo_platform/types/intake/evaluator_result.py +52 -0
- nemo_platform/types/intake/evaluator_result_create_params.py +52 -0
- nemo_platform/types/intake/evaluator_result_data_type.py +22 -0
- nemo_platform/types/intake/evaluator_result_event.py +67 -0
- nemo_platform/types/intake/evaluator_result_event_param.py +69 -0
- nemo_platform/types/intake/evaluator_result_filter_param.py +49 -0
- nemo_platform/types/intake/evaluator_result_list_params.py +43 -0
- nemo_platform/types/intake/evaluator_result_sort_field.py +22 -0
- nemo_platform/types/intake/evaluator_results_page.py +37 -0
- nemo_platform/types/intake/export_config_param.py +44 -0
- nemo_platform/types/intake/export_config_param_param.py +45 -0
- nemo_platform/types/intake/export_preview_params.py +34 -0
- nemo_platform/types/intake/export_preview_response.py +39 -0
- nemo_platform/types/intake/exports/__init__.py +28 -0
- nemo_platform/types/intake/exports/export_config.py +44 -0
- nemo_platform/types/intake/exports/export_job.py +76 -0
- nemo_platform/types/intake/exports/export_job_filter_param.py +50 -0
- nemo_platform/types/intake/exports/export_job_sort_field.py +22 -0
- nemo_platform/types/intake/exports/export_jobs_page.py +37 -0
- nemo_platform/types/intake/exports/export_status_details.py +35 -0
- nemo_platform/types/intake/exports/job_create_params.py +40 -0
- nemo_platform/types/intake/exports/job_list_params.py +46 -0
- nemo_platform/types/intake/exports/job_status.py +22 -0
- nemo_platform/types/intake/flexible_entry_request.py +63 -0
- nemo_platform/types/intake/flexible_entry_request_param.py +51 -0
- nemo_platform/types/intake/flexible_entry_response.py +62 -0
- nemo_platform/types/intake/flexible_entry_response_param.py +49 -0
- nemo_platform/types/intake/flexible_message.py +56 -0
- nemo_platform/types/intake/flexible_message_param.py +43 -0
- nemo_platform/types/intake/float_filter_param.py +32 -0
- nemo_platform/types/intake/ingest/__init__.py +37 -0
- nemo_platform/types/intake/ingest/atif_agent_param.py +35 -0
- nemo_platform/types/intake/ingest/atif_content_part_image_param.py +30 -0
- nemo_platform/types/intake/ingest/atif_content_part_param.py +28 -0
- nemo_platform/types/intake/ingest/atif_content_part_text_param.py +28 -0
- nemo_platform/types/intake/ingest/atif_create_params.py +52 -0
- nemo_platform/types/intake/ingest/atif_final_metrics_param.py +37 -0
- nemo_platform/types/intake/ingest/atif_image_source_param.py +28 -0
- nemo_platform/types/intake/ingest/atif_metrics_param.py +41 -0
- nemo_platform/types/intake/ingest/atif_observation_param.py +29 -0
- nemo_platform/types/intake/ingest/atif_observation_result_param.py +36 -0
- nemo_platform/types/intake/ingest/atif_step_agent_param.py +58 -0
- nemo_platform/types/intake/ingest/atif_step_param.py +29 -0
- nemo_platform/types/intake/ingest/atif_step_system_param.py +43 -0
- nemo_platform/types/intake/ingest/atif_step_user_param.py +43 -0
- nemo_platform/types/intake/ingest/atif_subagent_trajectory_ref_param.py +33 -0
- nemo_platform/types/intake/ingest/atif_tool_call_param.py +31 -0
- nemo_platform/types/intake/ingest/chat_completion_create_params.py +66 -0
- nemo_platform/types/intake/ingest/chat_completions_ingest_response.py +26 -0
- nemo_platform/types/intake/ingest/otlp/__init__.py +18 -0
- nemo_platform/types/intake/ingest/otlp/v1/__init__.py +20 -0
- nemo_platform/types/intake/ingest/otlp/v1/ingest_response.py +26 -0
- nemo_platform/types/intake/message_role.py +22 -0
- nemo_platform/types/intake/reviewer_annotation_event.py +95 -0
- nemo_platform/types/intake/reviewer_annotation_event_param.py +97 -0
- nemo_platform/types/intake/span.py +100 -0
- nemo_platform/types/intake/span_evaluation_context.py +40 -0
- nemo_platform/types/intake/span_filter_param.py +95 -0
- nemo_platform/types/intake/span_kind.py +24 -0
- nemo_platform/types/intake/span_list_params.py +46 -0
- nemo_platform/types/intake/span_sort_field.py +22 -0
- nemo_platform/types/intake/span_status.py +22 -0
- nemo_platform/types/intake/spans/__init__.py +20 -0
- nemo_platform/types/intake/spans/evaluator_result_list_response.py +25 -0
- nemo_platform/types/intake/spans_page.py +37 -0
- nemo_platform/types/intake/thumb_direction.py +22 -0
- nemo_platform/types/intake/trace.py +65 -0
- nemo_platform/types/intake/trace_filter_param.py +60 -0
- nemo_platform/types/intake/trace_list_params.py +49 -0
- nemo_platform/types/intake/trace_retrieve_params.py +32 -0
- nemo_platform/types/intake/trace_sort_field.py +22 -0
- nemo_platform/types/intake/traces_page.py +37 -0
- nemo_platform/types/intake/usage.py +65 -0
- nemo_platform/types/intake/usage_param.py +68 -0
- nemo_platform/types/intake/user_action_event.py +65 -0
- nemo_platform/types/intake/user_action_event_param.py +68 -0
- nemo_platform/types/intake/user_feedback_event.py +84 -0
- nemo_platform/types/intake/user_feedback_event_param.py +86 -0
- nemo_platform/types/intake/user_rating.py +68 -0
- nemo_platform/types/intake/user_rating_param.py +70 -0
- nemo_platform/types/jobs/__init__.py +95 -0
- nemo_platform/types/jobs/compute_resource_spec.py +32 -0
- nemo_platform/types/jobs/compute_resource_spec_param.py +32 -0
- nemo_platform/types/jobs/compute_resources.py +46 -0
- nemo_platform/types/jobs/compute_resources_param.py +47 -0
- nemo_platform/types/jobs/container_spec.py +35 -0
- nemo_platform/types/jobs/container_spec_param.py +37 -0
- nemo_platform/types/jobs/cpu_execution_provider.py +46 -0
- nemo_platform/types/jobs/cpu_execution_provider_param.py +46 -0
- nemo_platform/types/jobs/distributed_gpu_execution_provider.py +46 -0
- nemo_platform/types/jobs/distributed_gpu_execution_provider_param.py +46 -0
- nemo_platform/types/jobs/docker_job_execution_profile.py +43 -0
- nemo_platform/types/jobs/docker_job_execution_profile_config.py +52 -0
- nemo_platform/types/jobs/docker_job_network_config.py +27 -0
- nemo_platform/types/jobs/docker_job_storage_config.py +36 -0
- nemo_platform/types/jobs/docker_volume_mount.py +47 -0
- nemo_platform/types/jobs/e2e_job_execution_profile.py +43 -0
- nemo_platform/types/jobs/gpu_execution_provider.py +46 -0
- nemo_platform/types/jobs/gpu_execution_provider_param.py +46 -0
- nemo_platform/types/jobs/image_pull_secret.py +27 -0
- nemo_platform/types/jobs/job_create_params.py +46 -0
- nemo_platform/types/jobs/job_execution_profile_config.py +42 -0
- nemo_platform/types/jobs/job_get_logs_params.py +41 -0
- nemo_platform/types/jobs/job_list_execution_profiles_response.py +37 -0
- nemo_platform/types/jobs/job_list_params.py +47 -0
- nemo_platform/types/jobs/job_update_status_details_params.py +29 -0
- nemo_platform/types/jobs/kubernetes_empty_dir_volume.py +32 -0
- nemo_platform/types/jobs/kubernetes_job_execution_profile.py +43 -0
- nemo_platform/types/jobs/kubernetes_job_execution_profile_config.py +101 -0
- nemo_platform/types/jobs/kubernetes_job_storage_config.py +40 -0
- nemo_platform/types/jobs/kubernetes_object_metadata.py +28 -0
- nemo_platform/types/jobs/kubernetes_persistent_volume_claim.py +32 -0
- nemo_platform/types/jobs/kubernetes_volume.py +37 -0
- nemo_platform/types/jobs/kubernetes_volume_mount.py +38 -0
- nemo_platform/types/jobs/platform_job_environment_variable.py +36 -0
- nemo_platform/types/jobs/platform_job_environment_variable_param.py +37 -0
- nemo_platform/types/jobs/platform_job_list_task_response.py +29 -0
- nemo_platform/types/jobs/platform_job_response.py +75 -0
- nemo_platform/types/jobs/platform_job_responses_page.py +37 -0
- nemo_platform/types/jobs/platform_job_secret_environment_variable_ref.py +27 -0
- nemo_platform/types/jobs/platform_job_secret_environment_variable_ref_param.py +29 -0
- nemo_platform/types/jobs/platform_job_sort_field.py +22 -0
- nemo_platform/types/jobs/platform_job_spec.py +30 -0
- nemo_platform/types/jobs/platform_job_spec_param.py +32 -0
- nemo_platform/types/jobs/platform_job_step.py +75 -0
- nemo_platform/types/jobs/platform_job_step_spec.py +63 -0
- nemo_platform/types/jobs/platform_job_step_spec_param.py +65 -0
- nemo_platform/types/jobs/platform_job_step_with_context.py +67 -0
- nemo_platform/types/jobs/platform_job_step_with_contexts_page.py +37 -0
- nemo_platform/types/jobs/platform_job_steps_list_filter_param.py +38 -0
- nemo_platform/types/jobs/platform_job_task.py +75 -0
- nemo_platform/types/jobs/platform_jobs_list_filter_param.py +51 -0
- nemo_platform/types/jobs/result_create_params.py +34 -0
- nemo_platform/types/jobs/result_list_params.py +34 -0
- nemo_platform/types/jobs/step_lifecycle.py +37 -0
- nemo_platform/types/jobs/step_lifecycle_param.py +37 -0
- nemo_platform/types/jobs/step_list_params.py +44 -0
- nemo_platform/types/jobs/step_update_status_params.py +44 -0
- nemo_platform/types/jobs/subprocess_execution_provider.py +33 -0
- nemo_platform/types/jobs/subprocess_execution_provider_param.py +34 -0
- nemo_platform/types/jobs/subprocess_job_execution_profile.py +36 -0
- nemo_platform/types/jobs/subprocess_job_execution_profile_config.py +49 -0
- nemo_platform/types/jobs/task_create_or_update_params.py +46 -0
- nemo_platform/types/jobs/volcano_job_execution_profile.py +39 -0
- nemo_platform/types/jobs/volcano_job_execution_profile_config.py +114 -0
- nemo_platform/types/members/__init__.py +24 -0
- nemo_platform/types/members/member_create_params.py +40 -0
- nemo_platform/types/members/member_delete_params.py +32 -0
- nemo_platform/types/members/member_update_params.py +37 -0
- nemo_platform/types/members/workspace_member.py +39 -0
- nemo_platform/types/members/workspace_member_list_response.py +29 -0
- nemo_platform/types/models/__init__.py +34 -0
- nemo_platform/types/models/adapter.py +73 -0
- nemo_platform/types/models/adapter_create_params.py +54 -0
- nemo_platform/types/models/adapter_update_params.py +37 -0
- nemo_platform/types/models/base_model_filter_param.py +29 -0
- nemo_platform/types/models/finetuning_type_filter_param.py +31 -0
- nemo_platform/types/models/lora.py +30 -0
- nemo_platform/types/models/lora_param.py +30 -0
- nemo_platform/types/models/model_create_params.py +93 -0
- nemo_platform/types/models/model_entity.py +112 -0
- nemo_platform/types/models/model_entity_filter_param.py +72 -0
- nemo_platform/types/models/model_entity_sort_field.py +22 -0
- nemo_platform/types/models/model_entitys_page.py +37 -0
- nemo_platform/types/models/model_list_params.py +50 -0
- nemo_platform/types/models/model_retrieve_params.py +29 -0
- nemo_platform/types/models/model_update_params.py +86 -0
- nemo_platform/types/projects/__init__.py +25 -0
- nemo_platform/types/projects/project.py +45 -0
- nemo_platform/types/projects/project_create_params.py +37 -0
- nemo_platform/types/projects/project_list_params.py +49 -0
- nemo_platform/types/projects/project_sort_field.py +22 -0
- nemo_platform/types/projects/project_update_params.py +29 -0
- nemo_platform/types/projects/projects_page.py +37 -0
- nemo_platform/types/safe_synthesizer/__init__.py +68 -0
- nemo_platform/types/safe_synthesizer/classify_config.py +41 -0
- nemo_platform/types/safe_synthesizer/classify_config_param.py +43 -0
- nemo_platform/types/safe_synthesizer/column.py +46 -0
- nemo_platform/types/safe_synthesizer/column_actions.py +36 -0
- nemo_platform/types/safe_synthesizer/column_actions_param.py +38 -0
- nemo_platform/types/safe_synthesizer/column_param.py +49 -0
- nemo_platform/types/safe_synthesizer/data_parameters.py +69 -0
- nemo_platform/types/safe_synthesizer/data_parameters_param.py +69 -0
- nemo_platform/types/safe_synthesizer/differential_privacy_hyperparams.py +48 -0
- nemo_platform/types/safe_synthesizer/differential_privacy_hyperparams_param.py +48 -0
- nemo_platform/types/safe_synthesizer/evaluation_parameters.py +64 -0
- nemo_platform/types/safe_synthesizer/evaluation_parameters_param.py +66 -0
- nemo_platform/types/safe_synthesizer/generate_parameters.py +104 -0
- nemo_platform/types/safe_synthesizer/generate_parameters_param.py +102 -0
- nemo_platform/types/safe_synthesizer/gliner_config.py +41 -0
- nemo_platform/types/safe_synthesizer/gliner_config_param.py +41 -0
- nemo_platform/types/safe_synthesizer/globals.py +45 -0
- nemo_platform/types/safe_synthesizer/globals_param.py +47 -0
- nemo_platform/types/safe_synthesizer/job_create_params.py +46 -0
- nemo_platform/types/safe_synthesizer/job_get_logs_params.py +30 -0
- nemo_platform/types/safe_synthesizer/job_list_params.py +44 -0
- nemo_platform/types/safe_synthesizer/jobs/__init__.py +21 -0
- nemo_platform/types/safe_synthesizer/jobs/safe_synthesizer_summary.py +95 -0
- nemo_platform/types/safe_synthesizer/jobs/safe_synthesizer_timing.py +41 -0
- nemo_platform/types/safe_synthesizer/ner_config.py +42 -0
- nemo_platform/types/safe_synthesizer/ner_config_param.py +44 -0
- nemo_platform/types/safe_synthesizer/pii_replacer_config.py +40 -0
- nemo_platform/types/safe_synthesizer/pii_replacer_config_param.py +42 -0
- nemo_platform/types/safe_synthesizer/row.py +50 -0
- nemo_platform/types/safe_synthesizer/row_actions.py +33 -0
- nemo_platform/types/safe_synthesizer/row_actions_param.py +35 -0
- nemo_platform/types/safe_synthesizer/row_param.py +53 -0
- nemo_platform/types/safe_synthesizer/safe_synthesizer_job.py +63 -0
- nemo_platform/types/safe_synthesizer/safe_synthesizer_job_config.py +55 -0
- nemo_platform/types/safe_synthesizer/safe_synthesizer_job_config_param.py +56 -0
- nemo_platform/types/safe_synthesizer/safe_synthesizer_jobs_list_filter_param.py +49 -0
- nemo_platform/types/safe_synthesizer/safe_synthesizer_jobs_page.py +37 -0
- nemo_platform/types/safe_synthesizer/safe_synthesizer_jobs_sort_field.py +22 -0
- nemo_platform/types/safe_synthesizer/safe_synthesizer_parameters.py +91 -0
- nemo_platform/types/safe_synthesizer/safe_synthesizer_parameters_param.py +92 -0
- nemo_platform/types/safe_synthesizer/step_definition.py +39 -0
- nemo_platform/types/safe_synthesizer/step_definition_param.py +41 -0
- nemo_platform/types/safe_synthesizer/time_series_parameters.py +73 -0
- nemo_platform/types/safe_synthesizer/time_series_parameters_param.py +74 -0
- nemo_platform/types/safe_synthesizer/training_hyperparams.py +165 -0
- nemo_platform/types/safe_synthesizer/training_hyperparams_param.py +167 -0
- nemo_platform/types/safe_synthesizer/validation_parameters.py +54 -0
- nemo_platform/types/safe_synthesizer/validation_parameters_param.py +54 -0
- nemo_platform/types/secrets/__init__.py +28 -0
- nemo_platform/types/secrets/platform_secret_access_response.py +33 -0
- nemo_platform/types/secrets/platform_secret_admin_rotation_response.py +28 -0
- nemo_platform/types/secrets/platform_secret_response.py +40 -0
- nemo_platform/types/secrets/platform_secret_responses_page.py +37 -0
- nemo_platform/types/secrets/secret_create_params.py +39 -0
- nemo_platform/types/secrets/secret_list_params.py +32 -0
- nemo_platform/types/secrets/secret_update_params.py +32 -0
- nemo_platform/types/shared/__init__.py +50 -0
- nemo_platform/types/shared/api_endpoint_data.py +43 -0
- nemo_platform/types/shared/auth_context.py +48 -0
- nemo_platform/types/shared/auth_discovery_response.py +32 -0
- nemo_platform/types/shared/backend_format.py +22 -0
- nemo_platform/types/shared/datetime_filter.py +33 -0
- nemo_platform/types/shared/delete_response.py +33 -0
- nemo_platform/types/shared/error_response.py +46 -0
- nemo_platform/types/shared/field_error.py +28 -0
- nemo_platform/types/shared/file_storage_type.py +22 -0
- nemo_platform/types/shared/fileset_metadata.py +46 -0
- nemo_platform/types/shared/finetuning_type.py +48 -0
- nemo_platform/types/shared/generic_sort_field.py +22 -0
- nemo_platform/types/shared/http_validation_error.py +27 -0
- nemo_platform/types/shared/linear_layer_spec.py +33 -0
- nemo_platform/types/shared/mamba_config.py +44 -0
- nemo_platform/types/shared/mo_e_config.py +41 -0
- nemo_platform/types/shared/model_metadata_content.py +38 -0
- nemo_platform/types/shared/model_spec.py +111 -0
- nemo_platform/types/shared/oidc_discovery_response.py +42 -0
- nemo_platform/types/shared/pagination_data.py +37 -0
- nemo_platform/types/shared/platform_job_list_result_response.py +27 -0
- nemo_platform/types/shared/platform_job_log.py +34 -0
- nemo_platform/types/shared/platform_job_log_page.py +33 -0
- nemo_platform/types/shared/platform_job_result_response.py +44 -0
- nemo_platform/types/shared/platform_job_status.py +24 -0
- nemo_platform/types/shared/platform_job_status_response.py +48 -0
- nemo_platform/types/shared/platform_job_step_status_response.py +48 -0
- nemo_platform/types/shared/platform_job_task_status_response.py +47 -0
- nemo_platform/types/shared/prompt_data.py +47 -0
- nemo_platform/types/shared/sliding_window_config.py +27 -0
- nemo_platform/types/shared/tool_call_config.py +46 -0
- nemo_platform/types/shared/tool_calling_metadata_content.py +48 -0
- nemo_platform/types/shared/validation_error.py +34 -0
- nemo_platform/types/shared_params/__init__.py +33 -0
- nemo_platform/types/shared_params/api_endpoint_data.py +38 -0
- nemo_platform/types/shared_params/backend_format.py +24 -0
- nemo_platform/types/shared_params/datetime_filter.py +34 -0
- nemo_platform/types/shared_params/file_storage_type.py +24 -0
- nemo_platform/types/shared_params/finetuning_type.py +50 -0
- nemo_platform/types/shared_params/generic_sort_field.py +24 -0
- nemo_platform/types/shared_params/linear_layer_spec.py +35 -0
- nemo_platform/types/shared_params/mamba_config.py +44 -0
- nemo_platform/types/shared_params/mo_e_config.py +41 -0
- nemo_platform/types/shared_params/model_metadata_content.py +39 -0
- nemo_platform/types/shared_params/model_spec.py +113 -0
- nemo_platform/types/shared_params/platform_job_status.py +26 -0
- nemo_platform/types/shared_params/prompt_data.py +48 -0
- nemo_platform/types/shared_params/sliding_window_config.py +29 -0
- nemo_platform/types/shared_params/tool_call_config.py +46 -0
- nemo_platform/types/shared_params/tool_calling_metadata_content.py +48 -0
- nemo_platform/types/workspaces/__init__.py +24 -0
- nemo_platform/types/workspaces/workspace.py +48 -0
- nemo_platform/types/workspaces/workspace_create_params.py +41 -0
- nemo_platform/types/workspaces/workspace_list_params.py +47 -0
- nemo_platform/types/workspaces/workspace_update_params.py +27 -0
- nemo_platform/types/workspaces/workspaces_page.py +37 -0
- nemo_platform/ui/__init__.py +15 -0
- nemo_platform/ui/output.py +109 -0
- nemo_platform/ui/prompts.py +678 -0
- nemo_platform_plugin/.agents/skills/creating-a-plugin/SKILL.md +275 -0
- nemo_platform_plugin/.agents/skills/plugin-config/SKILL.md +168 -0
- nemo_platform_plugin/.agents/skills/plugin-controller/SKILL.md +320 -0
- nemo_platform_plugin/.agents/skills/plugin-entities/SKILL.md +290 -0
- nemo_platform_plugin/.agents/skills/plugin-function/SKILL.md +292 -0
- nemo_platform_plugin/.agents/skills/plugin-inference-middleware/SKILL.md +346 -0
- nemo_platform_plugin/.agents/skills/plugin-job/SKILL.md +247 -0
- nemo_platform_plugin/.agents/skills/plugin-platform-services/SKILL.md +239 -0
- nemo_platform_plugin/.agents/skills/plugin-platform-services/services-reference.md +192 -0
- nemo_platform_plugin/.agents/skills/plugin-service/SKILL.md +181 -0
- nemo_platform_plugin/.agents/skills/plugin-service/crud-example.md +353 -0
- nemo_platform_plugin/.agents/skills/plugin-testing/SKILL.md +206 -0
- nemo_platform_plugin/README.md +43 -0
- nemo_platform_plugin/_base.py +53 -0
- nemo_platform_plugin/_spec_flags.py +573 -0
- nemo_platform_plugin/api/filter.py +189 -0
- nemo_platform_plugin/api/parsed_filter.py +288 -0
- nemo_platform_plugin/api/text_filter.py +291 -0
- nemo_platform_plugin/cli.py +152 -0
- nemo_platform_plugin/cli_errors.py +232 -0
- nemo_platform_plugin/cli_renderer.py +92 -0
- nemo_platform_plugin/commands.py +1433 -0
- nemo_platform_plugin/config.py +844 -0
- nemo_platform_plugin/controller.py +148 -0
- nemo_platform_plugin/dependencies.py +64 -0
- nemo_platform_plugin/discovery.py +484 -0
- nemo_platform_plugin/docs/ARCHITECTURE.md +160 -0
- nemo_platform_plugin/docs/CONFIG.md +151 -0
- nemo_platform_plugin/docs/CONTROLLER.md +209 -0
- nemo_platform_plugin/docs/ENTITY.md +186 -0
- nemo_platform_plugin/docs/INFERENCE_MIDDLEWARE.md +408 -0
- nemo_platform_plugin/docs/JOB.md +237 -0
- nemo_platform_plugin/docs/QUICKSTART.md +306 -0
- nemo_platform_plugin/docs/SERVICE.md +302 -0
- nemo_platform_plugin/entities.py +793 -0
- nemo_platform_plugin/entity.py +79 -0
- nemo_platform_plugin/entity_client.py +54 -0
- nemo_platform_plugin/filter_ops.py +169 -0
- nemo_platform_plugin/function.py +299 -0
- nemo_platform_plugin/function_context.py +61 -0
- nemo_platform_plugin/functions/frames.py +69 -0
- nemo_platform_plugin/functions/routes.py +454 -0
- nemo_platform_plugin/inference_middleware.py +1191 -0
- nemo_platform_plugin/interface.py +28 -0
- nemo_platform_plugin/job.py +370 -0
- nemo_platform_plugin/job_context.py +86 -0
- nemo_platform_plugin/job_results.py +209 -0
- nemo_platform_plugin/jobs/_cli_options.py +204 -0
- nemo_platform_plugin/jobs/api_factory.py +1178 -0
- nemo_platform_plugin/jobs/constants.py +27 -0
- nemo_platform_plugin/jobs/docker.py +76 -0
- nemo_platform_plugin/jobs/exceptions.py +8 -0
- nemo_platform_plugin/jobs/file_manager.py +238 -0
- nemo_platform_plugin/jobs/openapi_utils.py +174 -0
- nemo_platform_plugin/jobs/profile.py +110 -0
- nemo_platform_plugin/jobs/result_manager.py +291 -0
- nemo_platform_plugin/jobs/routes.py +297 -0
- nemo_platform_plugin/jobs/schemas.py +174 -0
- nemo_platform_plugin/refs.py +154 -0
- nemo_platform_plugin/run_dependencies.py +137 -0
- nemo_platform_plugin/scheduler.py +537 -0
- nemo_platform_plugin/schema.py +216 -0
- nemo_platform_plugin/sdk.py +34 -0
- nemo_platform_plugin/seed.py +71 -0
- nemo_platform_plugin/service.py +130 -0
- nemo_platform_plugin/tasks/dispatcher.py +226 -0
- nemo_platform_plugin-0.1.0.dist-info/METADATA +88 -0
- nemo_platform_plugin-0.1.0.dist-info/RECORD +1224 -0
- nemo_platform_plugin-0.1.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,836 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
"""Extended ModelsResource with high-level helper methods."""
|
|
5
|
+
|
|
6
|
+
import asyncio
|
|
7
|
+
import time
|
|
8
|
+
from datetime import datetime
|
|
9
|
+
|
|
10
|
+
from nemo_platform import NotFoundError
|
|
11
|
+
from nemo_platform.resources.models import AsyncModelsResource as BaseAsyncModelsResource
|
|
12
|
+
from nemo_platform.resources.models import ModelsResource as BaseModelsResource
|
|
13
|
+
from nemo_platform.types.inference import ModelDeployment, ModelProvider
|
|
14
|
+
from nemo_platform.types.models import ModelEntity
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _seconds_since_creation(entry_timestamp: datetime | str | None, created_at: datetime | None) -> int | None:
|
|
18
|
+
"""Seconds from deployment creation to the entry timestamp. Returns None if either is missing or not comparable."""
|
|
19
|
+
if created_at is None or entry_timestamp is None:
|
|
20
|
+
return None
|
|
21
|
+
if isinstance(entry_timestamp, str):
|
|
22
|
+
try:
|
|
23
|
+
entry_timestamp = datetime.fromisoformat(entry_timestamp.replace("Z", "+00:00"))
|
|
24
|
+
except (ValueError, TypeError):
|
|
25
|
+
return None
|
|
26
|
+
if not hasattr(entry_timestamp, "timestamp") or not hasattr(created_at, "timestamp"):
|
|
27
|
+
return None
|
|
28
|
+
try:
|
|
29
|
+
return int(entry_timestamp.timestamp() - created_at.timestamp())
|
|
30
|
+
except (TypeError, OSError):
|
|
31
|
+
return None
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ModelsResource(BaseModelsResource):
|
|
35
|
+
"""Extended ModelsResource with high-level helper methods.
|
|
36
|
+
|
|
37
|
+
All existing methods (create, retrieve, list, etc.) work unchanged.
|
|
38
|
+
Adds convenience methods for OpenAI integration and deployment management.
|
|
39
|
+
|
|
40
|
+
Example:
|
|
41
|
+
>>> sdk = NeMoPlatform(base_url="http://nmp-host", workspace="default")
|
|
42
|
+
>>> sdk.nemo_platform.models.get_openai_route_base_url()
|
|
43
|
+
>>> sdk.nemo_platform.models.wait_for_status("my-deployment", "READY")
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
def _get_base_url_str(self) -> str:
|
|
47
|
+
"""Get the base URL as a string with trailing slash removed."""
|
|
48
|
+
return str(self._client.base_url).rstrip("/")
|
|
49
|
+
|
|
50
|
+
def get_openai_route_base_url(self, *, workspace: str | None = None) -> str:
|
|
51
|
+
"""
|
|
52
|
+
Generate the base URL for the OpenAI proxy route.
|
|
53
|
+
|
|
54
|
+
This route uses the `model` field in the request body for routing,
|
|
55
|
+
formatted as `workspace/model_entity_name`.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
workspace: The workspace identifier
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
A URL string suitable for use as OpenAI client's base_url
|
|
62
|
+
|
|
63
|
+
Example:
|
|
64
|
+
>>> base_url = sdk.nemo_platform.models.get_openai_route_base_url()
|
|
65
|
+
>>> # Returns: {base_url}/apis/inference-gateway/v2/workspaces/default/openai/-/v1
|
|
66
|
+
>>> openai_client = OpenAI(base_url=base_url)
|
|
67
|
+
"""
|
|
68
|
+
if workspace is None:
|
|
69
|
+
workspace = self._client._get_workspace_path_param()
|
|
70
|
+
base_url = self._get_base_url_str()
|
|
71
|
+
return f"{base_url}/apis/inference-gateway/v2/workspaces/{workspace}/openai/-/v1"
|
|
72
|
+
|
|
73
|
+
def get_client_default_headers(self) -> dict[str, str]:
|
|
74
|
+
"""Get string-only default headers for third-party client libraries.
|
|
75
|
+
|
|
76
|
+
Use this helper when constructing external clients (for example OpenAI
|
|
77
|
+
SDK or LiteLLM) so auth and identity headers from the SDK are forwarded.
|
|
78
|
+
This is required for successful inference requests when platform auth/
|
|
79
|
+
authorization is enabled.
|
|
80
|
+
"""
|
|
81
|
+
return {key: value for key, value in self._client.default_headers.items() if isinstance(value, str)}
|
|
82
|
+
|
|
83
|
+
def get_openai_client(self, *, workspace: str | None = None):
|
|
84
|
+
"""
|
|
85
|
+
Get a sync OpenAI client configured for NeMo Platform's inference gateway.
|
|
86
|
+
|
|
87
|
+
This method returns an OpenAI client with the base_url set to the
|
|
88
|
+
OpenAI proxy route for the specified workspace. The client can be
|
|
89
|
+
used directly with the standard OpenAI SDK interface.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
workspace: The workspace identifier
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
An OpenAI client configured for the inference gateway
|
|
96
|
+
|
|
97
|
+
Example:
|
|
98
|
+
>>> client = sdk.nemo_platform.models.get_openai_client()
|
|
99
|
+
>>> response = client.chat.completions.create(
|
|
100
|
+
... model="default/meta_llama-3.2-1b-instruct",
|
|
101
|
+
... messages=[{"role": "user", "content": "Hello!"}]
|
|
102
|
+
... )
|
|
103
|
+
"""
|
|
104
|
+
import openai
|
|
105
|
+
|
|
106
|
+
base_url = self.get_openai_route_base_url(workspace=workspace)
|
|
107
|
+
# Preserve auth and identity headers from the parent SDK client.
|
|
108
|
+
default_headers = self.get_client_default_headers()
|
|
109
|
+
return openai.OpenAI(base_url=base_url, api_key="not-needed", default_headers=default_headers)
|
|
110
|
+
|
|
111
|
+
def get_provider_route_openai_url(self, provider: ModelProvider) -> str:
|
|
112
|
+
"""
|
|
113
|
+
Generate an OpenAI SDK-compatible URL for the provider proxy route.
|
|
114
|
+
|
|
115
|
+
Handles the conditional /v1 suffix based on the provider's host_url:
|
|
116
|
+
- If host_url ends with /v1, no suffix is added
|
|
117
|
+
- Otherwise, /v1 is appended
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
provider: The ModelProvider object from the SDK
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
A URL string suitable for use as OpenAI client's base_url
|
|
124
|
+
|
|
125
|
+
Example:
|
|
126
|
+
>>> provider = sdk.inference.providers.retrieve("my-provider", workspace="default")
|
|
127
|
+
>>> base_url = sdk.nemo_platform.models.get_provider_route_openai_url(provider)
|
|
128
|
+
>>> # Returns: {base_url}/apis/inference-gateway/v2/workspaces/default/provider/my-provider/-/v1
|
|
129
|
+
>>> openai_client = OpenAI(base_url=base_url)
|
|
130
|
+
"""
|
|
131
|
+
base_url = self._get_base_url_str()
|
|
132
|
+
route = f"{base_url}/apis/inference-gateway/v2/workspaces/{provider.workspace}/provider/{provider.name}/-"
|
|
133
|
+
|
|
134
|
+
host_url_normalized = provider.host_url.rstrip("/")
|
|
135
|
+
if not host_url_normalized.endswith("/v1"):
|
|
136
|
+
route = f"{route}/v1"
|
|
137
|
+
|
|
138
|
+
return route
|
|
139
|
+
|
|
140
|
+
def get_provider_route_openai_url_for_deployment(self, deployment: ModelDeployment) -> str:
|
|
141
|
+
"""
|
|
142
|
+
Generate an OpenAI SDK-compatible URL for a deployment's model provider.
|
|
143
|
+
|
|
144
|
+
This is a convenience method that fetches the ModelProvider associated
|
|
145
|
+
with the deployment and returns the provider route URL.
|
|
146
|
+
|
|
147
|
+
Args:
|
|
148
|
+
deployment: The ModelDeployment object from the SDK
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
A URL string suitable for use as OpenAI client's base_url
|
|
152
|
+
|
|
153
|
+
Raises:
|
|
154
|
+
ValueError: If the deployment has no associated model_provider_id
|
|
155
|
+
|
|
156
|
+
Example:
|
|
157
|
+
>>> deployment = sdk.inference.deployments.retrieve("my-deployment", workspace="default")
|
|
158
|
+
>>> base_url = sdk.nemo_platform.models.get_provider_route_openai_url_for_deployment(deployment)
|
|
159
|
+
>>> openai_client = OpenAI(base_url=base_url)
|
|
160
|
+
"""
|
|
161
|
+
if not deployment.model_provider_id:
|
|
162
|
+
raise ValueError(f"Deployment '{deployment.name}' has no associated model_provider_id")
|
|
163
|
+
|
|
164
|
+
# model_provider_id is in "workspace/name" format
|
|
165
|
+
workspace, name = deployment.model_provider_id.split("/", 1)
|
|
166
|
+
provider = self._client.inference.providers.retrieve(name, workspace=workspace)
|
|
167
|
+
return self.get_provider_route_openai_url(provider)
|
|
168
|
+
|
|
169
|
+
def get_model_entity_route_openai_url(self, model_entity: ModelEntity) -> str:
|
|
170
|
+
"""
|
|
171
|
+
Generate an OpenAI SDK-compatible URL for the model entity proxy route.
|
|
172
|
+
|
|
173
|
+
Always appends /v1 suffix since the client doesn't interact directly
|
|
174
|
+
with the provider's host_url.
|
|
175
|
+
|
|
176
|
+
Args:
|
|
177
|
+
model_entity: The ModelEntity object from the SDK
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
A URL string suitable for use as OpenAI client's base_url
|
|
181
|
+
|
|
182
|
+
Example:
|
|
183
|
+
>>> entity = sdk.nemo_platform.models.retrieve("my-model", workspace="default")
|
|
184
|
+
>>> base_url = sdk.nemo_platform.models.get_model_entity_route_openai_url(entity)
|
|
185
|
+
>>> # Returns: {base_url}/apis/inference-gateway/v2/workspaces/default/model/my-model/-/v1
|
|
186
|
+
>>> openai_client = OpenAI(base_url=base_url)
|
|
187
|
+
"""
|
|
188
|
+
base_url = self._get_base_url_str()
|
|
189
|
+
return (
|
|
190
|
+
f"{base_url}/apis/inference-gateway/v2/workspaces/{model_entity.workspace}/model/{model_entity.name}/-/v1"
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
def wait_for_status(
|
|
194
|
+
self,
|
|
195
|
+
deployment_name: str,
|
|
196
|
+
desired_status: str,
|
|
197
|
+
*,
|
|
198
|
+
workspace: str | None = None,
|
|
199
|
+
timeout: int = 1200,
|
|
200
|
+
check_gateway: bool = True,
|
|
201
|
+
) -> bool:
|
|
202
|
+
"""
|
|
203
|
+
Wait for a ModelDeployment to reach the desired status.
|
|
204
|
+
|
|
205
|
+
For "DELETED" status, this function waits for the resource to be fully garbage
|
|
206
|
+
collected (404 NotFoundError), not just for the status to show as DELETED.
|
|
207
|
+
|
|
208
|
+
Args:
|
|
209
|
+
deployment_name: Name of the deployment
|
|
210
|
+
desired_status: Target status ("READY", "DELETED", etc.)
|
|
211
|
+
workspace: Workspace of the deployment
|
|
212
|
+
timeout: Maximum time to wait in seconds
|
|
213
|
+
check_gateway: When True and desired_status is "READY", verify the
|
|
214
|
+
gateway can route to the provider before returning (default: True).
|
|
215
|
+
|
|
216
|
+
Returns:
|
|
217
|
+
True if desired status reached, False if timeout
|
|
218
|
+
"""
|
|
219
|
+
if workspace is None:
|
|
220
|
+
workspace = self._client._get_workspace_path_param()
|
|
221
|
+
deployment_status = self.wait_for_deployment_status(
|
|
222
|
+
deployment_name, desired_status, workspace=workspace, timeout=timeout
|
|
223
|
+
)
|
|
224
|
+
if not deployment_status:
|
|
225
|
+
return False
|
|
226
|
+
|
|
227
|
+
# Verify gateway can route to the provider
|
|
228
|
+
if desired_status == "READY" and check_gateway:
|
|
229
|
+
gateway_ready = self.wait_for_gateway(deployment_name, workspace=workspace, timeout=timeout)
|
|
230
|
+
if not gateway_ready:
|
|
231
|
+
return False
|
|
232
|
+
|
|
233
|
+
return True
|
|
234
|
+
|
|
235
|
+
def wait_for_gateway(
|
|
236
|
+
self,
|
|
237
|
+
provider_name: str,
|
|
238
|
+
*,
|
|
239
|
+
workspace: str | None = None,
|
|
240
|
+
timeout: int = 60,
|
|
241
|
+
) -> bool:
|
|
242
|
+
"""
|
|
243
|
+
Wait for the inference gateway to be able to route to a provider.
|
|
244
|
+
|
|
245
|
+
Polls the gateway's /ready endpoint until it returns success, indicating
|
|
246
|
+
the gateway has refreshed its cache and is aware of the provider.
|
|
247
|
+
|
|
248
|
+
Args:
|
|
249
|
+
provider_name: Name of the model provider
|
|
250
|
+
workspace: Workspace of the provider
|
|
251
|
+
timeout: Maximum time to wait in seconds
|
|
252
|
+
|
|
253
|
+
Returns:
|
|
254
|
+
True if gateway is ready, False if timeout
|
|
255
|
+
"""
|
|
256
|
+
if workspace is None:
|
|
257
|
+
workspace = self._client._get_workspace_path_param()
|
|
258
|
+
start_time = time.time()
|
|
259
|
+
|
|
260
|
+
print("Waiting for gateway to be ready...")
|
|
261
|
+
|
|
262
|
+
while time.time() - start_time < timeout:
|
|
263
|
+
try:
|
|
264
|
+
self._client.inference.gateway.provider.ready(
|
|
265
|
+
provider_name,
|
|
266
|
+
workspace=workspace,
|
|
267
|
+
)
|
|
268
|
+
timestamp = datetime.now().strftime("%H:%M:%S")
|
|
269
|
+
print(f" [{timestamp}] Gateway is ready!\n")
|
|
270
|
+
return True
|
|
271
|
+
except NotFoundError:
|
|
272
|
+
# Gateway doesn't know about the provider yet, keep waiting
|
|
273
|
+
time.sleep(1)
|
|
274
|
+
except Exception:
|
|
275
|
+
# Connection error or other issue, keep waiting
|
|
276
|
+
time.sleep(1)
|
|
277
|
+
|
|
278
|
+
elapsed = int(time.time() - start_time)
|
|
279
|
+
print(f"Gateway timeout after {elapsed}s\n")
|
|
280
|
+
return False
|
|
281
|
+
|
|
282
|
+
def wait_for_provider(
|
|
283
|
+
self,
|
|
284
|
+
provider_name: str,
|
|
285
|
+
desired_status: str = "READY",
|
|
286
|
+
*,
|
|
287
|
+
workspace: str | None = None,
|
|
288
|
+
timeout: int = 60,
|
|
289
|
+
check_gateway: bool = True,
|
|
290
|
+
) -> bool:
|
|
291
|
+
"""
|
|
292
|
+
Wait for a provider to reach the desired status.
|
|
293
|
+
|
|
294
|
+
This is useful for external providers (like NVIDIA Build or OpenAI) where
|
|
295
|
+
you need to wait for the provider to be ready before making inference calls.
|
|
296
|
+
|
|
297
|
+
Args:
|
|
298
|
+
provider_name: Name of the provider
|
|
299
|
+
desired_status: Target status (default: "READY")
|
|
300
|
+
workspace: Workspace of the provider
|
|
301
|
+
timeout: Maximum time to wait in seconds
|
|
302
|
+
check_gateway: When True and desired_status is "READY", also verify the
|
|
303
|
+
gateway can route to the provider before returning (default: True).
|
|
304
|
+
|
|
305
|
+
Returns:
|
|
306
|
+
True if desired status reached, False if timeout
|
|
307
|
+
"""
|
|
308
|
+
if workspace is None:
|
|
309
|
+
workspace = self._client._get_workspace_path_param()
|
|
310
|
+
start_time = time.time()
|
|
311
|
+
last_status = ""
|
|
312
|
+
|
|
313
|
+
print(f"Waiting for provider '{provider_name}' to reach status: {desired_status}...")
|
|
314
|
+
|
|
315
|
+
while time.time() - start_time < timeout:
|
|
316
|
+
try:
|
|
317
|
+
provider = self._client.inference.providers.retrieve(
|
|
318
|
+
provider_name,
|
|
319
|
+
workspace=workspace,
|
|
320
|
+
)
|
|
321
|
+
current_status = provider.status
|
|
322
|
+
|
|
323
|
+
if current_status != last_status:
|
|
324
|
+
timestamp = datetime.now().strftime("%H:%M:%S")
|
|
325
|
+
elapsed = int(time.time() - start_time)
|
|
326
|
+
print(f" [{timestamp}] ({elapsed}s) Status: {current_status}")
|
|
327
|
+
last_status = current_status
|
|
328
|
+
|
|
329
|
+
if current_status == desired_status:
|
|
330
|
+
if desired_status == "READY" and check_gateway:
|
|
331
|
+
return self.wait_for_gateway(provider_name, workspace=workspace, timeout=timeout)
|
|
332
|
+
print()
|
|
333
|
+
return True
|
|
334
|
+
|
|
335
|
+
if current_status == "ERROR":
|
|
336
|
+
print(f"\nProvider entered ERROR state: {provider.status_message}\n")
|
|
337
|
+
return False
|
|
338
|
+
|
|
339
|
+
except NotFoundError:
|
|
340
|
+
print(f"\nProvider '{provider_name}' not found\n")
|
|
341
|
+
return False
|
|
342
|
+
|
|
343
|
+
time.sleep(1)
|
|
344
|
+
|
|
345
|
+
elapsed = int(time.time() - start_time)
|
|
346
|
+
print(f"\nProvider timeout after {elapsed}s. Last status: {last_status}\n")
|
|
347
|
+
return False
|
|
348
|
+
|
|
349
|
+
def wait_for_deployment_status(
|
|
350
|
+
self,
|
|
351
|
+
deployment_name: str,
|
|
352
|
+
desired_status: str,
|
|
353
|
+
*,
|
|
354
|
+
workspace: str | None = None,
|
|
355
|
+
timeout: int = 1200,
|
|
356
|
+
) -> bool:
|
|
357
|
+
"""
|
|
358
|
+
Wait for a ModelDeployment to reach the desired status.
|
|
359
|
+
|
|
360
|
+
For "DELETED" status, this function waits for the resource to be fully garbage
|
|
361
|
+
collected (404 NotFoundError), not just for the status to show as DELETED.
|
|
362
|
+
|
|
363
|
+
Args:
|
|
364
|
+
deployment_name: Name of the deployment
|
|
365
|
+
desired_status: Target status ("READY", "DELETED", etc.)
|
|
366
|
+
workspace: Workspace of the deployment
|
|
367
|
+
timeout: Maximum time to wait in seconds
|
|
368
|
+
|
|
369
|
+
Returns:
|
|
370
|
+
True if desired status reached, False if timeout
|
|
371
|
+
"""
|
|
372
|
+
if workspace is None:
|
|
373
|
+
workspace = self._client._get_workspace_path_param()
|
|
374
|
+
start_time = time.time()
|
|
375
|
+
last_status = ""
|
|
376
|
+
last_message = ""
|
|
377
|
+
last_history_len = 0
|
|
378
|
+
|
|
379
|
+
print(f"Waiting for status: {desired_status}...\n")
|
|
380
|
+
|
|
381
|
+
while time.time() - start_time < timeout:
|
|
382
|
+
try:
|
|
383
|
+
deployment = self._client.inference.deployments.retrieve(deployment_name, workspace=workspace)
|
|
384
|
+
history = getattr(deployment, "status_history", None)
|
|
385
|
+
created_at = getattr(deployment, "created_at", None)
|
|
386
|
+
# API guarantees last history entry is current state; fall back to top-level fields if no history
|
|
387
|
+
if history and len(history) > 0:
|
|
388
|
+
last_entry = history[-1]
|
|
389
|
+
current_status = getattr(last_entry, "status", deployment.status)
|
|
390
|
+
status_message = getattr(last_entry, "status_message", "") or ""
|
|
391
|
+
else:
|
|
392
|
+
current_status = deployment.status
|
|
393
|
+
status_message = deployment.status_message or ""
|
|
394
|
+
last_status = current_status
|
|
395
|
+
last_message = status_message
|
|
396
|
+
|
|
397
|
+
# Only print status from history; elapsed shown is seconds since deployment creation
|
|
398
|
+
if history and len(history) > last_history_len:
|
|
399
|
+
for i in range(last_history_len, len(history)):
|
|
400
|
+
entry = history[i]
|
|
401
|
+
ts = getattr(entry, "timestamp", None)
|
|
402
|
+
ts_str = ts.strftime("%H:%M:%S") if hasattr(ts, "strftime") else str(ts) if ts else ""
|
|
403
|
+
st = getattr(entry, "status", "")
|
|
404
|
+
msg = getattr(entry, "status_message", "") or ""
|
|
405
|
+
secs = _seconds_since_creation(ts, created_at)
|
|
406
|
+
part = f" [{ts_str}] "
|
|
407
|
+
if secs is not None:
|
|
408
|
+
part += f"(+{secs}s) "
|
|
409
|
+
part += f"Status: {st}"
|
|
410
|
+
if msg:
|
|
411
|
+
part += f" - {msg}"
|
|
412
|
+
print(part)
|
|
413
|
+
last_history_len = len(history)
|
|
414
|
+
|
|
415
|
+
# Check if we've reached the desired status
|
|
416
|
+
# For DELETED status, we need to wait for the actual 404 (garbage collection)
|
|
417
|
+
if current_status == desired_status and desired_status != "DELETED":
|
|
418
|
+
print(f"Deployment reached {desired_status} status!\n")
|
|
419
|
+
return True
|
|
420
|
+
|
|
421
|
+
# Handle error states
|
|
422
|
+
if current_status == "ERROR":
|
|
423
|
+
print(f"Deployment entered ERROR state: {status_message}\n")
|
|
424
|
+
return False
|
|
425
|
+
|
|
426
|
+
except NotFoundError:
|
|
427
|
+
# For DELETED status, not found means success
|
|
428
|
+
if desired_status == "DELETED":
|
|
429
|
+
print(f"Deployment {desired_status}!\n")
|
|
430
|
+
return True
|
|
431
|
+
# For other statuses, not found is an error
|
|
432
|
+
print("Deployment not found\n")
|
|
433
|
+
return False
|
|
434
|
+
|
|
435
|
+
time.sleep(3)
|
|
436
|
+
|
|
437
|
+
# Timeout reached (wait_elapsed is time since we started polling)
|
|
438
|
+
wait_elapsed = int(time.time() - start_time)
|
|
439
|
+
detail = f"Last status: {last_status}"
|
|
440
|
+
if last_message:
|
|
441
|
+
detail += f" - {last_message}"
|
|
442
|
+
print(f"Timeout after {wait_elapsed}s. {detail}\n")
|
|
443
|
+
return False
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
class AsyncModelsResource(BaseAsyncModelsResource):
|
|
447
|
+
"""Extended AsyncModelsResource with high-level helper methods.
|
|
448
|
+
|
|
449
|
+
All existing async methods (create, retrieve, list, etc.) work unchanged.
|
|
450
|
+
Adds convenience methods for OpenAI integration and deployment management.
|
|
451
|
+
|
|
452
|
+
URL builder methods are synchronous (no I/O) and safe to call from async code.
|
|
453
|
+
Methods that perform I/O are properly async.
|
|
454
|
+
|
|
455
|
+
Example:
|
|
456
|
+
>>> sdk = AsyncNeMoPlatform(base_url="http://nmp-host", workspace="default")
|
|
457
|
+
>>> sdk.nemo_platform.models.get_openai_route_base_url()
|
|
458
|
+
>>> await sdk.nemo_platform.models.wait_for_status("my-deployment", "READY")
|
|
459
|
+
"""
|
|
460
|
+
|
|
461
|
+
def _get_base_url_str(self) -> str:
|
|
462
|
+
"""Get the base URL as a string with trailing slash removed."""
|
|
463
|
+
return str(self._client.base_url).rstrip("/")
|
|
464
|
+
|
|
465
|
+
def get_openai_route_base_url(self, *, workspace: str | None = None) -> str:
|
|
466
|
+
"""
|
|
467
|
+
Generate the base URL for the OpenAI proxy route.
|
|
468
|
+
|
|
469
|
+
This is a synchronous method (no I/O) and safe to call from async code.
|
|
470
|
+
|
|
471
|
+
Args:
|
|
472
|
+
workspace: The workspace identifier
|
|
473
|
+
|
|
474
|
+
Returns:
|
|
475
|
+
A URL string suitable for use as OpenAI client's base_url
|
|
476
|
+
"""
|
|
477
|
+
if workspace is None:
|
|
478
|
+
workspace = self._client._get_workspace_path_param()
|
|
479
|
+
base_url = self._get_base_url_str()
|
|
480
|
+
return f"{base_url}/apis/inference-gateway/v2/workspaces/{workspace}/openai/-/v1"
|
|
481
|
+
|
|
482
|
+
def get_client_default_headers(self) -> dict[str, str]:
|
|
483
|
+
"""Get string-only default headers for third-party client libraries.
|
|
484
|
+
|
|
485
|
+
Use this helper when constructing external clients (for example OpenAI
|
|
486
|
+
SDK or LiteLLM) so auth and identity headers from the SDK are forwarded.
|
|
487
|
+
This is required for successful inference requests when platform auth/
|
|
488
|
+
authorization is enabled.
|
|
489
|
+
"""
|
|
490
|
+
return {key: value for key, value in self._client.default_headers.items() if isinstance(value, str)}
|
|
491
|
+
|
|
492
|
+
def get_async_openai_client(self, *, workspace: str | None = None):
|
|
493
|
+
"""
|
|
494
|
+
Get an async OpenAI client configured for NeMo Platform's inference gateway.
|
|
495
|
+
|
|
496
|
+
This method returns an AsyncOpenAI client with the base_url set to the
|
|
497
|
+
OpenAI proxy route for the specified workspace.
|
|
498
|
+
|
|
499
|
+
Args:
|
|
500
|
+
workspace: The workspace identifier
|
|
501
|
+
|
|
502
|
+
Returns:
|
|
503
|
+
An AsyncOpenAI client configured for the inference gateway
|
|
504
|
+
|
|
505
|
+
Example:
|
|
506
|
+
>>> client = sdk.nemo_platform.models.get_async_openai_client()
|
|
507
|
+
>>> response = await client.chat.completions.create(
|
|
508
|
+
... model="default/meta_llama-3.2-1b-instruct",
|
|
509
|
+
... messages=[{"role": "user", "content": "Hello!"}]
|
|
510
|
+
... )
|
|
511
|
+
"""
|
|
512
|
+
import openai
|
|
513
|
+
|
|
514
|
+
base_url = self.get_openai_route_base_url(workspace=workspace)
|
|
515
|
+
# Preserve auth and identity headers from the parent SDK client.
|
|
516
|
+
default_headers = self.get_client_default_headers()
|
|
517
|
+
return openai.AsyncOpenAI(base_url=base_url, api_key="not-needed", default_headers=default_headers)
|
|
518
|
+
|
|
519
|
+
def get_provider_route_openai_url(self, provider: ModelProvider) -> str:
|
|
520
|
+
"""
|
|
521
|
+
Generate an OpenAI SDK-compatible URL for the provider proxy route.
|
|
522
|
+
|
|
523
|
+
This is a synchronous method (no I/O) and safe to call from async code.
|
|
524
|
+
|
|
525
|
+
Args:
|
|
526
|
+
provider: The ModelProvider object from the SDK
|
|
527
|
+
|
|
528
|
+
Returns:
|
|
529
|
+
A URL string suitable for use as OpenAI client's base_url
|
|
530
|
+
"""
|
|
531
|
+
base_url = self._get_base_url_str()
|
|
532
|
+
route = f"{base_url}/apis/inference-gateway/v2/workspaces/{provider.workspace}/provider/{provider.name}/-"
|
|
533
|
+
|
|
534
|
+
host_url_normalized = provider.host_url.rstrip("/")
|
|
535
|
+
if not host_url_normalized.endswith("/v1"):
|
|
536
|
+
route = f"{route}/v1"
|
|
537
|
+
|
|
538
|
+
return route
|
|
539
|
+
|
|
540
|
+
async def get_provider_route_openai_url_for_deployment(self, deployment: ModelDeployment) -> str:
|
|
541
|
+
"""
|
|
542
|
+
Generate an OpenAI SDK-compatible URL for a deployment's model provider.
|
|
543
|
+
|
|
544
|
+
This is an async method that fetches the ModelProvider associated
|
|
545
|
+
with the deployment and returns the provider route URL.
|
|
546
|
+
|
|
547
|
+
Args:
|
|
548
|
+
deployment: The ModelDeployment object from the SDK
|
|
549
|
+
|
|
550
|
+
Returns:
|
|
551
|
+
A URL string suitable for use as OpenAI client's base_url
|
|
552
|
+
|
|
553
|
+
Raises:
|
|
554
|
+
ValueError: If the deployment has no associated model_provider_id
|
|
555
|
+
|
|
556
|
+
Example:
|
|
557
|
+
>>> deployment = await sdk.inference.deployments.retrieve("my-deployment", workspace="default")
|
|
558
|
+
>>> base_url = await sdk.nemo_platform.models.get_provider_route_openai_url_for_deployment(deployment)
|
|
559
|
+
>>> openai_client = AsyncOpenAI(base_url=base_url)
|
|
560
|
+
"""
|
|
561
|
+
if not deployment.model_provider_id:
|
|
562
|
+
raise ValueError(f"Deployment '{deployment.name}' has no associated model_provider_id")
|
|
563
|
+
|
|
564
|
+
# model_provider_id is in "workspace/name" format
|
|
565
|
+
workspace, name = deployment.model_provider_id.split("/", 1)
|
|
566
|
+
provider = await self._client.inference.providers.retrieve(name, workspace=workspace)
|
|
567
|
+
return self.get_provider_route_openai_url(provider)
|
|
568
|
+
|
|
569
|
+
def get_model_entity_route_openai_url(self, model_entity: ModelEntity) -> str:
|
|
570
|
+
"""
|
|
571
|
+
Generate an OpenAI SDK-compatible URL for the model entity proxy route.
|
|
572
|
+
|
|
573
|
+
This is a synchronous method (no I/O) and safe to call from async code.
|
|
574
|
+
|
|
575
|
+
Args:
|
|
576
|
+
model_entity: The ModelEntity object from the SDK
|
|
577
|
+
|
|
578
|
+
Returns:
|
|
579
|
+
A URL string suitable for use as OpenAI client's base_url
|
|
580
|
+
"""
|
|
581
|
+
base_url = self._get_base_url_str()
|
|
582
|
+
return (
|
|
583
|
+
f"{base_url}/apis/inference-gateway/v2/workspaces/{model_entity.workspace}/model/{model_entity.name}/-/v1"
|
|
584
|
+
)
|
|
585
|
+
|
|
586
|
+
async def wait_for_status(
|
|
587
|
+
self,
|
|
588
|
+
deployment_name: str,
|
|
589
|
+
desired_status: str,
|
|
590
|
+
*,
|
|
591
|
+
workspace: str | None = None,
|
|
592
|
+
timeout: int = 1200,
|
|
593
|
+
check_gateway: bool = True,
|
|
594
|
+
) -> bool:
|
|
595
|
+
"""
|
|
596
|
+
Wait for a ModelDeployment and ModelProvider to reach the desired status.
|
|
597
|
+
|
|
598
|
+
For "DELETED" status, this function waits for the resource to be fully garbage
|
|
599
|
+
collected (404 NotFoundError), not just for the status to show as DELETED.
|
|
600
|
+
|
|
601
|
+
Args:
|
|
602
|
+
deployment_name: Name of the deployment
|
|
603
|
+
desired_status: Target status ("READY", "DELETED", etc.)
|
|
604
|
+
workspace: Workspace of the deployment
|
|
605
|
+
timeout: Maximum time to wait in seconds
|
|
606
|
+
check_gateway: When True and desired_status is "READY", verify the
|
|
607
|
+
gateway can route to the provider before returning (default: True).
|
|
608
|
+
|
|
609
|
+
Returns:
|
|
610
|
+
True if desired status reached, False if timeout
|
|
611
|
+
"""
|
|
612
|
+
if workspace is None:
|
|
613
|
+
workspace = self._client._get_workspace_path_param()
|
|
614
|
+
deployment_status = await self.wait_for_deployment_status(
|
|
615
|
+
deployment_name, desired_status, workspace=workspace, timeout=timeout
|
|
616
|
+
)
|
|
617
|
+
if not deployment_status:
|
|
618
|
+
return False
|
|
619
|
+
|
|
620
|
+
# Verify gateway can route to the provider
|
|
621
|
+
if desired_status == "READY" and check_gateway:
|
|
622
|
+
gateway_ready = await self.wait_for_gateway(deployment_name, workspace=workspace, timeout=timeout)
|
|
623
|
+
if not gateway_ready:
|
|
624
|
+
return False
|
|
625
|
+
|
|
626
|
+
return True
|
|
627
|
+
|
|
628
|
+
async def wait_for_gateway(
|
|
629
|
+
self,
|
|
630
|
+
provider_name: str,
|
|
631
|
+
*,
|
|
632
|
+
workspace: str | None = None,
|
|
633
|
+
timeout: int = 60,
|
|
634
|
+
) -> bool:
|
|
635
|
+
"""
|
|
636
|
+
Wait for the inference gateway to be able to route to a provider.
|
|
637
|
+
|
|
638
|
+
Polls the gateway's /ready endpoint until it returns success, indicating
|
|
639
|
+
the gateway has refreshed its cache and is aware of the provider.
|
|
640
|
+
|
|
641
|
+
Args:
|
|
642
|
+
provider_name: Name of the model provider
|
|
643
|
+
workspace: Workspace of the provider
|
|
644
|
+
timeout: Maximum time to wait in seconds
|
|
645
|
+
|
|
646
|
+
Returns:
|
|
647
|
+
True if gateway is ready, False if timeout
|
|
648
|
+
"""
|
|
649
|
+
if workspace is None:
|
|
650
|
+
workspace = self._client._get_workspace_path_param()
|
|
651
|
+
start_time = time.time()
|
|
652
|
+
|
|
653
|
+
print("Waiting for gateway to be ready...")
|
|
654
|
+
|
|
655
|
+
while time.time() - start_time < timeout:
|
|
656
|
+
try:
|
|
657
|
+
await self._client.inference.gateway.provider.ready(
|
|
658
|
+
provider_name,
|
|
659
|
+
workspace=workspace,
|
|
660
|
+
)
|
|
661
|
+
timestamp = datetime.now().strftime("%H:%M:%S")
|
|
662
|
+
print(f" [{timestamp}] Gateway is ready!\n")
|
|
663
|
+
return True
|
|
664
|
+
except NotFoundError:
|
|
665
|
+
# Gateway doesn't know about the provider yet, keep waiting
|
|
666
|
+
await asyncio.sleep(1)
|
|
667
|
+
except Exception:
|
|
668
|
+
# Connection error or other issue, keep waiting
|
|
669
|
+
await asyncio.sleep(1)
|
|
670
|
+
|
|
671
|
+
elapsed = int(time.time() - start_time)
|
|
672
|
+
print(f"Gateway timeout after {elapsed}s\n")
|
|
673
|
+
return False
|
|
674
|
+
|
|
675
|
+
async def wait_for_provider(
|
|
676
|
+
self,
|
|
677
|
+
provider_name: str,
|
|
678
|
+
desired_status: str = "READY",
|
|
679
|
+
*,
|
|
680
|
+
workspace: str | None = None,
|
|
681
|
+
timeout: int = 60,
|
|
682
|
+
check_gateway: bool = True,
|
|
683
|
+
) -> bool:
|
|
684
|
+
"""
|
|
685
|
+
Wait for a provider to reach the desired status (async version).
|
|
686
|
+
|
|
687
|
+
This is useful for external providers (like NVIDIA Build or OpenAI) where
|
|
688
|
+
you need to wait for the provider to be ready before making inference calls.
|
|
689
|
+
|
|
690
|
+
Args:
|
|
691
|
+
provider_name: Name of the provider
|
|
692
|
+
desired_status: Target status (default: "READY")
|
|
693
|
+
workspace: Workspace of the provider
|
|
694
|
+
timeout: Maximum time to wait in seconds
|
|
695
|
+
check_gateway: When True and desired_status is "READY", also verify the
|
|
696
|
+
gateway can route to the provider before returning (default: True).
|
|
697
|
+
|
|
698
|
+
Returns:
|
|
699
|
+
True if desired status reached, False if timeout
|
|
700
|
+
"""
|
|
701
|
+
if workspace is None:
|
|
702
|
+
workspace = self._client._get_workspace_path_param()
|
|
703
|
+
start_time = time.time()
|
|
704
|
+
last_status = ""
|
|
705
|
+
|
|
706
|
+
print(f"Waiting for provider '{provider_name}' to reach status: {desired_status}...")
|
|
707
|
+
|
|
708
|
+
while time.time() - start_time < timeout:
|
|
709
|
+
try:
|
|
710
|
+
provider = await self._client.inference.providers.retrieve(
|
|
711
|
+
provider_name,
|
|
712
|
+
workspace=workspace,
|
|
713
|
+
)
|
|
714
|
+
current_status = provider.status
|
|
715
|
+
|
|
716
|
+
if current_status != last_status:
|
|
717
|
+
timestamp = datetime.now().strftime("%H:%M:%S")
|
|
718
|
+
elapsed = int(time.time() - start_time)
|
|
719
|
+
print(f" [{timestamp}] ({elapsed}s) Status: {current_status}")
|
|
720
|
+
last_status = current_status
|
|
721
|
+
|
|
722
|
+
if current_status == desired_status:
|
|
723
|
+
if desired_status == "READY" and check_gateway:
|
|
724
|
+
return await self.wait_for_gateway(provider_name, workspace=workspace, timeout=timeout)
|
|
725
|
+
print()
|
|
726
|
+
return True
|
|
727
|
+
|
|
728
|
+
if current_status == "ERROR":
|
|
729
|
+
print(f"\nProvider entered ERROR state: {provider.status_message}\n")
|
|
730
|
+
return False
|
|
731
|
+
|
|
732
|
+
except NotFoundError:
|
|
733
|
+
print(f"\nProvider '{provider_name}' not found\n")
|
|
734
|
+
return False
|
|
735
|
+
|
|
736
|
+
await asyncio.sleep(1)
|
|
737
|
+
|
|
738
|
+
elapsed = int(time.time() - start_time)
|
|
739
|
+
print(f"\nProvider timeout after {elapsed}s. Last status: {last_status}\n")
|
|
740
|
+
return False
|
|
741
|
+
|
|
742
|
+
async def wait_for_deployment_status(
|
|
743
|
+
self,
|
|
744
|
+
deployment_name: str,
|
|
745
|
+
desired_status: str,
|
|
746
|
+
*,
|
|
747
|
+
workspace: str | None = None,
|
|
748
|
+
timeout: int = 1200,
|
|
749
|
+
) -> bool:
|
|
750
|
+
"""
|
|
751
|
+
Wait for a ModelDeployment to reach the desired status (async version).
|
|
752
|
+
|
|
753
|
+
For "DELETED" status, this function waits for the resource to be fully garbage
|
|
754
|
+
collected (404 NotFoundError), not just for the status to show as DELETED.
|
|
755
|
+
|
|
756
|
+
Args:
|
|
757
|
+
deployment_name: Name of the deployment
|
|
758
|
+
desired_status: Target status ("READY", "DELETED", etc.)
|
|
759
|
+
workspace: Workspace of the deployment
|
|
760
|
+
timeout: Maximum time to wait in seconds
|
|
761
|
+
|
|
762
|
+
Returns:
|
|
763
|
+
True if desired status reached, False if timeout
|
|
764
|
+
"""
|
|
765
|
+
if workspace is None:
|
|
766
|
+
workspace = self._client._get_workspace_path_param()
|
|
767
|
+
start_time = time.time()
|
|
768
|
+
last_status = ""
|
|
769
|
+
last_message = ""
|
|
770
|
+
last_history_len = 0
|
|
771
|
+
|
|
772
|
+
print(f"Waiting for status: {desired_status}...\n")
|
|
773
|
+
|
|
774
|
+
while time.time() - start_time < timeout:
|
|
775
|
+
try:
|
|
776
|
+
deployment = await self._client.inference.deployments.retrieve(deployment_name, workspace=workspace)
|
|
777
|
+
history = getattr(deployment, "status_history", None)
|
|
778
|
+
created_at = getattr(deployment, "created_at", None)
|
|
779
|
+
# API guarantees last history entry is current state; fall back to top-level fields if no history
|
|
780
|
+
if history and len(history) > 0:
|
|
781
|
+
last_entry = history[-1]
|
|
782
|
+
current_status = getattr(last_entry, "status", deployment.status)
|
|
783
|
+
status_message = getattr(last_entry, "status_message", "") or ""
|
|
784
|
+
else:
|
|
785
|
+
current_status = deployment.status
|
|
786
|
+
status_message = deployment.status_message or ""
|
|
787
|
+
last_status = current_status
|
|
788
|
+
last_message = status_message
|
|
789
|
+
|
|
790
|
+
# Only print status from history; elapsed shown is seconds since deployment creation
|
|
791
|
+
if history and len(history) > last_history_len:
|
|
792
|
+
for i in range(last_history_len, len(history)):
|
|
793
|
+
entry = history[i]
|
|
794
|
+
ts = getattr(entry, "timestamp", None)
|
|
795
|
+
ts_str = ts.strftime("%H:%M:%S") if hasattr(ts, "strftime") else str(ts) if ts else ""
|
|
796
|
+
st = getattr(entry, "status", "")
|
|
797
|
+
msg = getattr(entry, "status_message", "") or ""
|
|
798
|
+
secs = _seconds_since_creation(ts, created_at)
|
|
799
|
+
part = f" [{ts_str}] "
|
|
800
|
+
if secs is not None:
|
|
801
|
+
part += f"(+{secs}s) "
|
|
802
|
+
part += f"Status: {st}"
|
|
803
|
+
if msg:
|
|
804
|
+
part += f" - {msg}"
|
|
805
|
+
print(part)
|
|
806
|
+
last_history_len = len(history)
|
|
807
|
+
|
|
808
|
+
# Check if we've reached the desired status
|
|
809
|
+
# For DELETED status, we need to wait for the actual 404 (garbage collection)
|
|
810
|
+
if current_status == desired_status and desired_status != "DELETED":
|
|
811
|
+
print(f"Deployment reached {desired_status} status!\n")
|
|
812
|
+
return True
|
|
813
|
+
|
|
814
|
+
# Handle error states
|
|
815
|
+
if current_status == "ERROR":
|
|
816
|
+
print(f"Deployment entered ERROR state: {status_message}\n")
|
|
817
|
+
return False
|
|
818
|
+
|
|
819
|
+
except NotFoundError:
|
|
820
|
+
# For DELETED status, not found means success
|
|
821
|
+
if desired_status == "DELETED":
|
|
822
|
+
print(f"Deployment {desired_status}!\n")
|
|
823
|
+
return True
|
|
824
|
+
# For other statuses, not found is an error
|
|
825
|
+
print("Deployment not found\n")
|
|
826
|
+
return False
|
|
827
|
+
|
|
828
|
+
await asyncio.sleep(3)
|
|
829
|
+
|
|
830
|
+
# Timeout reached (wait_elapsed is time since we started polling)
|
|
831
|
+
wait_elapsed = int(time.time() - start_time)
|
|
832
|
+
detail = f"Last status: {last_status}"
|
|
833
|
+
if last_message:
|
|
834
|
+
detail += f" - {last_message}"
|
|
835
|
+
print(f"Timeout after {wait_elapsed}s. {detail}\n")
|
|
836
|
+
return False
|