@toloka-platform/sdk 0.1.0-preview.9 → 0.2.0-preview.1
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.
- package/README.md +6 -5
- package/dist/cli/toloka.js +143 -139
- package/dist/cli/toloka.js.jsc +0 -0
- package/dist/cli/toloka.js.jsc.sha256 +1 -1
- package/dist/cli/toloka.js.sha256 +1 -1
- package/docs/authoring.md +9 -4
- package/docs/cli-v2.md +3 -3
- package/docs/cli.md +16 -3
- package/docs/getting-started.md +4 -4
- package/docs/limitations.md +3 -3
- package/docs/testing.md +1 -1
- package/examples/face-image-collection/README.md +1 -1
- package/openapi/gen/api.ts +1482 -777
- package/openapi/gen/models/createDatasetExportBody.ts +5 -3
- package/openapi/gen/models/createDatasetExportBodyFormat.ts +2 -0
- package/openapi/gen/models/createProjectTrainingBody.ts +6 -0
- package/openapi/gen/models/createTrainingRunBody.ts +6 -0
- package/openapi/gen/models/datasetExportReportTokens.ts +4 -1
- package/openapi/gen/models/datasetExportReportTokensEstimatorVersion.ts +2 -0
- package/openapi/gen/models/datasetExportReportTokensTotal.ts +2 -0
- package/openapi/gen/models/estimateTrainingCostBody.ts +5 -0
- package/openapi/gen/models/exportJob.ts +2 -0
- package/openapi/gen/models/exportJobError.ts +3 -0
- package/openapi/gen/models/exportJobErrorAnyOf.ts +7 -0
- package/openapi/gen/models/exportJobErrorAnyOfCode.ts +2 -0
- package/openapi/gen/models/exportJobStatus.ts +1 -1
- package/openapi/gen/models/getTrainingRunLogsParams.ts +5 -0
- package/openapi/gen/models/gistingTrainingConfiguration.ts +13 -0
- package/openapi/gen/models/gistingTrainingConfigurationInput.ts +13 -0
- package/openapi/gen/models/gistingTrainingConfigurationInputRegime.ts +2 -0
- package/openapi/gen/models/gistingTrainingConfigurationRegime.ts +2 -0
- package/openapi/gen/models/index.ts +230 -16
- package/openapi/gen/models/listProjectTrainings200.ts +7 -0
- package/openapi/gen/models/listProjectTrainingsParams.ts +5 -0
- package/openapi/gen/models/listTrainingRuns200.ts +7 -0
- package/openapi/gen/models/listTrainingRunsParams.ts +5 -0
- package/openapi/gen/models/modelVersion.ts +6 -1
- package/openapi/gen/models/modelVersionContent.ts +4 -0
- package/openapi/gen/models/modelVersionContentDownload.ts +11 -0
- package/openapi/gen/models/modelVersionContentDownloadContent.ts +4 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOf.ts +10 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOfManifestItem.ts +8 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOfManifestItemMediaType.ts +2 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOfNine.ts +8 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOfNineManifestItem.ts +8 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOfNineManifestItemMediaType.ts +2 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOfNineRuntimeBase.ts +2 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOfParent.ts +4 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOfParentOneOf.ts +6 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOfParentOneOfBaseModelId.ts +2 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOfParentOneOfThree.ts +5 -0
- package/openapi/gen/models/modelVersionContentDownloadContentOneOfRuntimeBase.ts +2 -0
- package/openapi/gen/models/modelVersionContentDownloadFilesItem.ts +9 -0
- package/openapi/gen/models/modelVersionContentDownloadFilesItemMediaType.ts +2 -0
- package/openapi/gen/models/modelVersionContentOneOf.ts +10 -0
- package/openapi/gen/models/modelVersionContentOneOfManifestItem.ts +8 -0
- package/openapi/gen/models/modelVersionContentOneOfManifestItemMediaType.ts +2 -0
- package/openapi/gen/models/modelVersionContentOneOfNine.ts +8 -0
- package/openapi/gen/models/modelVersionContentOneOfNineManifestItem.ts +8 -0
- package/openapi/gen/models/modelVersionContentOneOfNineManifestItemMediaType.ts +2 -0
- package/openapi/gen/models/modelVersionContentOneOfNineRuntimeBase.ts +2 -0
- package/openapi/gen/models/modelVersionContentOneOfParent.ts +4 -0
- package/openapi/gen/models/modelVersionContentOneOfParentOneOf.ts +6 -0
- package/openapi/gen/models/modelVersionContentOneOfParentOneOfBaseModelId.ts +2 -0
- package/openapi/gen/models/modelVersionContentOneOfParentOneOfThree.ts +5 -0
- package/openapi/gen/models/modelVersionContentOneOfRuntimeBase.ts +2 -0
- package/openapi/gen/models/modelVersionProducer.ts +5 -0
- package/openapi/gen/models/prepareTrainingCostEstimateInputsBody.ts +2 -0
- package/openapi/gen/models/replaceTrainingConfigurationBody.ts +5 -0
- package/openapi/gen/models/sftTrainingConfiguration.ts +13 -0
- package/openapi/gen/models/sftTrainingConfigurationInput.ts +13 -0
- package/openapi/gen/models/sftTrainingConfigurationInputRegime.ts +2 -0
- package/openapi/gen/models/sftTrainingConfigurationRegime.ts +2 -0
- package/openapi/gen/models/training.ts +16 -0
- package/openapi/gen/models/trainingArchivedAt.ts +2 -0
- package/openapi/gen/models/trainingConfiguration.ts +4 -0
- package/openapi/gen/models/trainingConfigurationInput.ts +4 -0
- package/openapi/gen/models/trainingCostEstimate.ts +4 -0
- package/openapi/gen/models/trainingCostEstimateInputSet.ts +12 -0
- package/openapi/gen/models/trainingCostEstimateInputSetExports.ts +6 -0
- package/openapi/gen/models/trainingCostEstimateInputSetExportsValidation.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateInputSetId.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOf.ts +16 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputs.ts +7 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsTraining.ts +9 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsTrainingFailure.ts +3 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsTrainingFailureAnyOf.ts +7 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsTrainingFailureAnyOfCode.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsTrainingReport.ts +3 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsTrainingReportAnyOf.ts +9 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsTrainingReportAnyOfErrorsItem.ts +5 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsTrainingReportAnyOfTokens.ts +10 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsTrainingReportAnyOfTokensEstimatorVersion.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsTrainingReportAnyOfTokensTotal.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsValidation.ts +3 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsValidationAnyOf.ts +9 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsValidationAnyOfFailure.ts +3 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsValidationAnyOfFailureAnyOf.ts +7 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsValidationAnyOfFailureAnyOfCode.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsValidationAnyOfReport.ts +3 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsValidationAnyOfReportAnyOf.ts +9 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsValidationAnyOfReportAnyOfErrorsItem.ts +5 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsValidationAnyOfReportAnyOfTokens.ts +10 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsValidationAnyOfReportAnyOfTokensEstimatorVersion.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfInputsValidationAnyOfReportAnyOfTokensTotal.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfIssuesItem.ts +8 -0
- package/openapi/gen/models/trainingCostEstimateOneOfIssuesItemCode.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfIssuesItemPurpose.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwoseven.ts +23 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenBudget.ts +9 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputs.ts +7 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsTraining.ts +9 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsTrainingFailure.ts +3 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsTrainingFailureAnyOf.ts +7 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsTrainingFailureAnyOfCode.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsTrainingReport.ts +3 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsTrainingReportAnyOf.ts +9 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsTrainingReportAnyOfErrorsItem.ts +5 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsTrainingReportAnyOfTokens.ts +10 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsTrainingReportAnyOfTokensEstimatorVersion.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsTrainingReportAnyOfTokensTotal.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsValidation.ts +3 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsValidationAnyOf.ts +9 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsValidationAnyOfFailure.ts +3 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsValidationAnyOfFailureAnyOf.ts +7 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsValidationAnyOfFailureAnyOfCode.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsValidationAnyOfReport.ts +3 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsValidationAnyOfReportAnyOf.ts +9 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsValidationAnyOfReportAnyOfErrorsItem.ts +5 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsValidationAnyOfReportAnyOfTokens.ts +10 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsValidationAnyOfReportAnyOfTokensEstimatorVersion.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenInputsValidationAnyOfReportAnyOfTokensTotal.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenIssuesItem.ts +8 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenIssuesItemCode.ts +2 -0
- package/openapi/gen/models/trainingCostEstimateOneOfTwosevenIssuesItemPurpose.ts +2 -0
- package/openapi/gen/models/trainingDatasetItemFilter.ts +8 -0
- package/openapi/gen/models/trainingDatasetItemFilterFieldSourcesItem.ts +6 -0
- package/openapi/gen/models/trainingDatasetItemFilterFieldSourcesItemSourcesItem.ts +4 -0
- package/openapi/gen/models/trainingDatasetItemFilterFieldSourcesItemSourcesItemOneOf.ts +5 -0
- package/openapi/gen/models/trainingDatasetItemFilterFieldSourcesItemSourcesItemOneOfTwo.ts +5 -0
- package/openapi/gen/models/trainingDatasetItemFilterFieldValuesItem.ts +12 -0
- package/openapi/gen/models/trainingDatasetItemFilterFieldValuesItemOperator.ts +2 -0
- package/openapi/gen/models/trainingDatasetItemFilterFieldValuesItemSourcesItem.ts +4 -0
- package/openapi/gen/models/trainingDatasetItemFilterFieldValuesItemSourcesItemOneOf.ts +5 -0
- package/openapi/gen/models/trainingDatasetItemFilterFieldValuesItemSourcesItemOneOfTwo.ts +5 -0
- package/openapi/gen/models/trainingDatasetItemFilterFieldValuesItemValue.ts +2 -0
- package/openapi/gen/models/trainingDatasetItemFilterInput.ts +8 -0
- package/openapi/gen/models/trainingDatasetItemFilterInputFieldSourcesItem.ts +6 -0
- package/openapi/gen/models/trainingDatasetItemFilterInputFieldSourcesItemSourcesItem.ts +4 -0
- package/openapi/gen/models/trainingDatasetItemFilterInputFieldSourcesItemSourcesItemOneOf.ts +5 -0
- package/openapi/gen/models/trainingDatasetItemFilterInputFieldSourcesItemSourcesItemOneOfTwo.ts +5 -0
- package/openapi/gen/models/trainingDatasetItemFilterInputFieldValuesItem.ts +12 -0
- package/openapi/gen/models/trainingDatasetItemFilterInputFieldValuesItemOperator.ts +2 -0
- package/openapi/gen/models/trainingDatasetItemFilterInputFieldValuesItemSourcesItem.ts +4 -0
- package/openapi/gen/models/trainingDatasetItemFilterInputFieldValuesItemSourcesItemOneOf.ts +5 -0
- package/openapi/gen/models/trainingDatasetItemFilterInputFieldValuesItemSourcesItemOneOfTwo.ts +5 -0
- package/openapi/gen/models/trainingDatasetItemFilterInputFieldValuesItemValue.ts +2 -0
- package/openapi/gen/models/trainingDatasetSelection.ts +6 -0
- package/openapi/gen/models/trainingDatasetSelectionInput.ts +6 -0
- package/openapi/gen/models/trainingId.ts +2 -0
- package/openapi/gen/models/trainingModelId.ts +3 -0
- package/openapi/gen/models/trainingModelSource.ts +4 -0
- package/openapi/gen/models/trainingModelSourceOneOf.ts +6 -0
- package/openapi/gen/models/trainingModelSourceOneOfBaseModelId.ts +2 -0
- package/openapi/gen/models/trainingModelSourceOneOfThree.ts +5 -0
- package/openapi/gen/models/trainingRun.ts +39 -0
- package/openapi/gen/models/trainingRunBillingStatus.ts +2 -0
- package/openapi/gen/models/trainingRunBlockedReason.ts +2 -0
- package/openapi/gen/models/trainingRunChargedAmount.ts +2 -0
- package/openapi/gen/models/trainingRunError.ts +3 -0
- package/openapi/gen/models/trainingRunErrorAnyOf.ts +7 -0
- package/openapi/gen/models/trainingRunErrorAnyOfCode.ts +2 -0
- package/openapi/gen/models/trainingRunId.ts +2 -0
- package/openapi/gen/models/trainingRunInputs.ts +3 -0
- package/openapi/gen/models/trainingRunInputsAnyOf.ts +7 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTraining.ts +15 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingContract.ts +2 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingItemFilter.ts +9 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingItemFilterFieldSourcesItem.ts +6 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingItemFilterFieldSourcesItemSourcesItem.ts +4 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingItemFilterFieldSourcesItemSourcesItemOneOf.ts +5 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingItemFilterFieldSourcesItemSourcesItemOneOfTwo.ts +5 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingItemFilterFieldValuesItem.ts +12 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingItemFilterFieldValuesItemOperator.ts +2 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingItemFilterFieldValuesItemSourcesItem.ts +4 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingItemFilterFieldValuesItemSourcesItemOneOf.ts +5 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingItemFilterFieldValuesItemSourcesItemOneOfTwo.ts +5 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingItemFilterFieldValuesItemValue.ts +2 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingReport.ts +9 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingReportErrorsItem.ts +5 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingReportTokens.ts +10 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingReportTokensEstimatorVersion.ts +2 -0
- package/openapi/gen/models/trainingRunInputsAnyOfTrainingReportTokensTotal.ts +2 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidation.ts +3 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOf.ts +15 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfContract.ts +2 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfItemFilter.ts +9 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfItemFilterFieldSourcesItem.ts +6 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfItemFilterFieldSourcesItemSourcesItem.ts +4 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfItemFilterFieldSourcesItemSourcesItemOneOf.ts +5 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfItemFilterFieldSourcesItemSourcesItemOneOfTwo.ts +5 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfItemFilterFieldValuesItem.ts +12 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfItemFilterFieldValuesItemOperator.ts +2 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfItemFilterFieldValuesItemSourcesItem.ts +4 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfItemFilterFieldValuesItemSourcesItemOneOf.ts +5 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfItemFilterFieldValuesItemSourcesItemOneOfTwo.ts +5 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfItemFilterFieldValuesItemValue.ts +2 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfReport.ts +9 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfReportErrorsItem.ts +5 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfReportTokens.ts +10 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfReportTokensEstimatorVersion.ts +2 -0
- package/openapi/gen/models/trainingRunInputsAnyOfValidationAnyOfReportTokensTotal.ts +2 -0
- package/openapi/gen/models/trainingRunLogs.ts +9 -0
- package/openapi/gen/models/trainingRunLogsEntriesItem.ts +7 -0
- package/openapi/gen/models/trainingRunLogsEntriesItemLevel.ts +2 -0
- package/openapi/gen/models/trainingRunLogsNextCursor.ts +2 -0
- package/openapi/gen/models/trainingRunMessage.ts +2 -0
- package/openapi/gen/models/trainingRunOutputModelVersionRevision.ts +2 -0
- package/openapi/gen/models/trainingRunProgress.ts +3 -0
- package/openapi/gen/models/trainingRunProgressAnyOf.ts +10 -0
- package/openapi/gen/models/trainingRunProgressAnyOfMessage.ts +2 -0
- package/openapi/gen/models/trainingRunProgressAnyOfStep.ts +2 -0
- package/openapi/gen/models/trainingRunProgressAnyOfTotal.ts +2 -0
- package/openapi/gen/models/trainingRunQuote.ts +17 -0
- package/openapi/gen/models/trainingRunQuoteBudget.ts +9 -0
- package/openapi/gen/models/trainingRunQuoteInputs.ts +7 -0
- package/openapi/gen/models/trainingRunQuoteInputsTraining.ts +9 -0
- package/openapi/gen/models/trainingRunQuoteInputsTrainingFailure.ts +3 -0
- package/openapi/gen/models/trainingRunQuoteInputsTrainingFailureAnyOf.ts +7 -0
- package/openapi/gen/models/trainingRunQuoteInputsTrainingFailureAnyOfCode.ts +2 -0
- package/openapi/gen/models/trainingRunQuoteInputsTrainingReport.ts +3 -0
- package/openapi/gen/models/trainingRunQuoteInputsTrainingReportAnyOf.ts +9 -0
- package/openapi/gen/models/trainingRunQuoteInputsTrainingReportAnyOfErrorsItem.ts +5 -0
- package/openapi/gen/models/trainingRunQuoteInputsTrainingReportAnyOfTokens.ts +10 -0
- package/openapi/gen/models/trainingRunQuoteInputsTrainingReportAnyOfTokensEstimatorVersion.ts +2 -0
- package/openapi/gen/models/trainingRunQuoteInputsTrainingReportAnyOfTokensTotal.ts +2 -0
- package/openapi/gen/models/trainingRunQuoteInputsValidation.ts +3 -0
- package/openapi/gen/models/trainingRunQuoteInputsValidationAnyOf.ts +9 -0
- package/openapi/gen/models/trainingRunQuoteInputsValidationAnyOfFailure.ts +3 -0
- package/openapi/gen/models/trainingRunQuoteInputsValidationAnyOfFailureAnyOf.ts +7 -0
- package/openapi/gen/models/trainingRunQuoteInputsValidationAnyOfFailureAnyOfCode.ts +2 -0
- package/openapi/gen/models/trainingRunQuoteInputsValidationAnyOfReport.ts +3 -0
- package/openapi/gen/models/trainingRunQuoteInputsValidationAnyOfReportAnyOf.ts +9 -0
- package/openapi/gen/models/trainingRunQuoteInputsValidationAnyOfReportAnyOfErrorsItem.ts +5 -0
- package/openapi/gen/models/trainingRunQuoteInputsValidationAnyOfReportAnyOfTokens.ts +10 -0
- package/openapi/gen/models/trainingRunQuoteInputsValidationAnyOfReportAnyOfTokensEstimatorVersion.ts +2 -0
- package/openapi/gen/models/trainingRunQuoteInputsValidationAnyOfReportAnyOfTokensTotal.ts +2 -0
- package/openapi/gen/models/trainingRunStatus.ts +2 -0
- package/openapi/gen/models/updateTrainingMetadataBody.ts +5 -0
- package/package.json +3 -3
- package/skills/catalog.json +19 -7
- package/skills/toloka-build/SKILL.md +4 -4
- package/skills/toloka-build/references/node-semantics.md +2 -2
- package/skills/toloka-build/references/workflow-and-cli.md +21 -3
- package/skills/toloka-report-issue/references/report-template.md +1 -1
- package/src/authoring/index.ts +10 -0
- package/src/cli/auth.ts +1 -1
- package/src/cli/auto-update.ts +1 -5
- package/src/cli/bin.ts +1 -1
- package/src/cli/check.ts +91 -30
- package/src/cli/cost.ts +8 -2
- package/src/cli/models.ts +107 -2
- package/src/cli/program.ts +271 -2
- package/src/cli/project-context.ts +55 -11
- package/src/cli/project.ts +55 -11
- package/src/cli/secrets.ts +4 -4
- package/src/cli/trainings.ts +627 -0
- package/src/cli/version.ts +68 -0
- package/src/client.ts +164 -30
- package/src/index.ts +4 -0
- package/openapi/gen/models/createDatasetExportBodyOneOf.ts +0 -6
- package/openapi/gen/models/createDatasetExportBodyOneOfFormat.ts +0 -2
- package/openapi/gen/models/createDatasetExportBodyOneOfThree.ts +0 -10
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeContract.ts +0 -2
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeFormat.ts +0 -2
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilter.ts +0 -9
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldSourcesItem.ts +0 -6
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldSourcesItemSourcesItem.ts +0 -4
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldSourcesItemSourcesItemOneOf.ts +0 -5
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldSourcesItemSourcesItemOneOfTwo.ts +0 -5
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItem.ts +0 -12
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItemOperator.ts +0 -2
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItemSourcesItem.ts +0 -4
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItemSourcesItemOneOf.ts +0 -5
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItemSourcesItemOneOfTwo.ts +0 -5
- package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItemValue.ts +0 -2
package/src/cli/check.ts
CHANGED
|
@@ -114,6 +114,18 @@ export type CheckProjectResult = {
|
|
|
114
114
|
readonly source?: ProjectSource;
|
|
115
115
|
readonly output: string;
|
|
116
116
|
};
|
|
117
|
+
|
|
118
|
+
export type FreshCheckFailurePhase = "spawn" | "execute" | "read_result" | "parse_result";
|
|
119
|
+
|
|
120
|
+
export class FreshCheckProcessError extends Error {
|
|
121
|
+
readonly phase: FreshCheckFailurePhase;
|
|
122
|
+
|
|
123
|
+
constructor(phase: FreshCheckFailurePhase, message: string, options?: ErrorOptions) {
|
|
124
|
+
super(message, options);
|
|
125
|
+
this.name = "FreshCheckProcessError";
|
|
126
|
+
this.phase = phase;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
117
129
|
const MAX_DIAGNOSTIC_CHARS = 5_000;
|
|
118
130
|
const MAX_TOOL_OUTPUT_BYTES = 64 * 1024;
|
|
119
131
|
export const CHECK_RESULT_FILE_ENV = "TOLOKA_INTERNAL_CHECK_RESULT_FILE";
|
|
@@ -865,44 +877,93 @@ const parseFreshCheckResult = (value: unknown, json: boolean): CheckProjectResul
|
|
|
865
877
|
output: json ? JSON.stringify({ exitCode, results }) : formatCheckResults(results),
|
|
866
878
|
};
|
|
867
879
|
};
|
|
880
|
+
|
|
881
|
+
const checkProcessOutput = (run: ToolRunResult): string =>
|
|
882
|
+
[run.stderr, run.stdout].filter(Boolean).join("\n");
|
|
883
|
+
|
|
884
|
+
export const readFreshCheckResult = async (
|
|
885
|
+
run: ToolRunResult,
|
|
886
|
+
readResult: () => Promise<string>,
|
|
887
|
+
json = false,
|
|
888
|
+
): Promise<CheckProjectResult> => {
|
|
889
|
+
let raw: string;
|
|
890
|
+
try {
|
|
891
|
+
raw = await readResult();
|
|
892
|
+
} catch (error) {
|
|
893
|
+
if (run.exitCode !== 0) {
|
|
894
|
+
const output = checkProcessOutput(run);
|
|
895
|
+
throw new FreshCheckProcessError(
|
|
896
|
+
"execute",
|
|
897
|
+
output.length === 0
|
|
898
|
+
? `Local check process exited ${run.exitCode} before producing results`
|
|
899
|
+
: `Local check process failed before producing results:\n${output}`,
|
|
900
|
+
{ cause: error },
|
|
901
|
+
);
|
|
902
|
+
}
|
|
903
|
+
throw new FreshCheckProcessError(
|
|
904
|
+
"read_result",
|
|
905
|
+
"Local check process completed without producing a result file",
|
|
906
|
+
{ cause: error },
|
|
907
|
+
);
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
let parsed: unknown;
|
|
911
|
+
try {
|
|
912
|
+
parsed = JSON.parse(raw);
|
|
913
|
+
} catch (error) {
|
|
914
|
+
throw new FreshCheckProcessError("parse_result", "Local check process returned invalid JSON", {
|
|
915
|
+
cause: error,
|
|
916
|
+
});
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
try {
|
|
920
|
+
return parseFreshCheckResult(parsed, json);
|
|
921
|
+
} catch (error) {
|
|
922
|
+
throw new FreshCheckProcessError(
|
|
923
|
+
"parse_result",
|
|
924
|
+
`Local check process returned an invalid result: ${error instanceof Error ? error.message : String(error)}`,
|
|
925
|
+
{ cause: error },
|
|
926
|
+
);
|
|
927
|
+
}
|
|
928
|
+
};
|
|
868
929
|
export const runFreshCheck = async (options: CheckProjectOptions): Promise<CheckProjectResult> => {
|
|
869
930
|
const entry = resolveCliEntry();
|
|
870
931
|
const resultDirectory = await mkdtemp(join(tmpdir(), "toloka-check-watch-result-"));
|
|
871
932
|
const resultPath = join(resultDirectory, "result.json");
|
|
872
|
-
let run: ToolRunResult | undefined;
|
|
873
933
|
try {
|
|
874
|
-
run
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
[
|
|
878
|
-
"--source-root",
|
|
934
|
+
let run: ToolRunResult;
|
|
935
|
+
try {
|
|
936
|
+
run = await runModule(
|
|
879
937
|
options.sourceRoot,
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
938
|
+
entry,
|
|
939
|
+
[
|
|
940
|
+
"--source-root",
|
|
941
|
+
options.sourceRoot,
|
|
942
|
+
"check",
|
|
943
|
+
...(options.pipeline === undefined ? [] : [options.pipeline]),
|
|
944
|
+
...(options.node === undefined ? [] : ["--node", options.node]),
|
|
945
|
+
"--json",
|
|
946
|
+
],
|
|
947
|
+
{
|
|
948
|
+
...(process.env.PATH === undefined ? {} : { PATH: process.env.PATH }),
|
|
949
|
+
...(options.environment ?? process.env),
|
|
950
|
+
[CHECK_RESULT_FILE_ENV]: resultPath,
|
|
951
|
+
},
|
|
952
|
+
options.signal,
|
|
953
|
+
"bun",
|
|
954
|
+
);
|
|
955
|
+
} catch (error) {
|
|
956
|
+
throw new FreshCheckProcessError(
|
|
957
|
+
"spawn",
|
|
958
|
+
`Unable to start the local check process: ${error instanceof Error ? error.message : String(error)}`,
|
|
959
|
+
{ cause: error },
|
|
960
|
+
);
|
|
961
|
+
}
|
|
962
|
+
return await readFreshCheckResult(
|
|
963
|
+
run,
|
|
964
|
+
async () => readFile(resultPath, "utf8"),
|
|
895
965
|
options.json === true,
|
|
896
966
|
);
|
|
897
|
-
} catch (error) {
|
|
898
|
-
const detail = [
|
|
899
|
-
run?.stderr,
|
|
900
|
-
run?.stdout,
|
|
901
|
-
error instanceof Error ? error.message : String(error),
|
|
902
|
-
]
|
|
903
|
-
.filter(Boolean)
|
|
904
|
-
.join("\n");
|
|
905
|
-
throw new Error(`Fresh check process returned unreadable output: ${detail}`, { cause: error });
|
|
906
967
|
} finally {
|
|
907
968
|
await rm(resultDirectory, { recursive: true, force: true });
|
|
908
969
|
}
|
package/src/cli/cost.ts
CHANGED
|
@@ -80,9 +80,15 @@ const collectNodeRows = (
|
|
|
80
80
|
};
|
|
81
81
|
|
|
82
82
|
const collectTotalRows = (total: PipelineCostEstimate["total"]): TableRow[] => {
|
|
83
|
-
const totals: TableRow[] =
|
|
83
|
+
const totals: TableRow[] =
|
|
84
|
+
total.expected === total.worstCase
|
|
85
|
+
? [["Run cost", total.expected, ""]]
|
|
86
|
+
: [
|
|
87
|
+
["Expected run cost", total.expected, ""],
|
|
88
|
+
["Maximum run cost", "", total.worstCase],
|
|
89
|
+
];
|
|
84
90
|
if (total.bestCase != null) {
|
|
85
|
-
totals.push(["Best case", total.bestCase, ""]);
|
|
91
|
+
totals.push(["Best case", total.bestCase, "N/A"]);
|
|
86
92
|
}
|
|
87
93
|
if (total.perItemExpected != null) {
|
|
88
94
|
totals.push(["Per item", total.perItemExpected, total.perItemWorstCase ?? ""]);
|
package/src/cli/models.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { mkdir, open, realpath, rename, rm } from "node:fs/promises";
|
|
4
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
5
|
+
import { Readable, Transform } from "node:stream";
|
|
6
|
+
import { pipeline } from "node:stream/promises";
|
|
7
|
+
|
|
1
8
|
import { assert } from "es-toolkit";
|
|
2
9
|
|
|
3
10
|
import type { BaseModel, BaseModelId, Model, ModelVersion, PotatoClient } from "../client";
|
|
@@ -73,6 +80,29 @@ const resolveModel = async (
|
|
|
73
80
|
return matches[0]!;
|
|
74
81
|
};
|
|
75
82
|
|
|
83
|
+
const resolveModelVersion = async (
|
|
84
|
+
client: ModelApi,
|
|
85
|
+
projectId: string | undefined,
|
|
86
|
+
nameOrId: string,
|
|
87
|
+
): Promise<ModelVersion> => {
|
|
88
|
+
if (nameOrId.startsWith("mdv.")) return client.models.getVersion({ modelVersionId: nameOrId });
|
|
89
|
+
const separator = nameOrId.lastIndexOf("@");
|
|
90
|
+
assert(separator > 0, `Model Version ${nameOrId} was not found. Use mdv.<id> or Model@name.`);
|
|
91
|
+
assert(projectId, "Select a project to resolve Model Version names.");
|
|
92
|
+
const model = await resolveModel(client, projectId, nameOrId.slice(0, separator));
|
|
93
|
+
const versionName = nameOrId.slice(separator + 1);
|
|
94
|
+
const matches: ModelVersion[] = [];
|
|
95
|
+
for await (const version of client.models.listAllVersions({
|
|
96
|
+
projectId,
|
|
97
|
+
modelId: model.id,
|
|
98
|
+
limit: 100,
|
|
99
|
+
})) {
|
|
100
|
+
if (version.name === versionName) matches.push(version);
|
|
101
|
+
}
|
|
102
|
+
assert(matches.length === 1, `Model Version ${nameOrId} was not found or is ambiguous.`);
|
|
103
|
+
return matches[0]!;
|
|
104
|
+
};
|
|
105
|
+
|
|
76
106
|
export const listBaseModels = async (
|
|
77
107
|
client: ModelApi,
|
|
78
108
|
input: { json: boolean },
|
|
@@ -155,8 +185,13 @@ export const listModelVersions = async (
|
|
|
155
185
|
versions.length === 0
|
|
156
186
|
? "No Model Versions found."
|
|
157
187
|
: formatTable([
|
|
158
|
-
["
|
|
159
|
-
...versions.map((version) => [
|
|
188
|
+
["REVISION", "NAME", "ID", "CREATED AT"],
|
|
189
|
+
...versions.map((version) => [
|
|
190
|
+
String(version.revision),
|
|
191
|
+
version.name,
|
|
192
|
+
version.id,
|
|
193
|
+
version.createdAt,
|
|
194
|
+
]),
|
|
160
195
|
]),
|
|
161
196
|
);
|
|
162
197
|
};
|
|
@@ -186,3 +221,73 @@ export const archiveModel = async (
|
|
|
186
221
|
const archived = await client.models.archive({ projectId: input.projectId, modelId: model.id });
|
|
187
222
|
writeOutput(io, input.json, archived, `Archived Model ${archived.id}.`);
|
|
188
223
|
};
|
|
224
|
+
|
|
225
|
+
export const downloadModelVersion = async (
|
|
226
|
+
client: ModelApi,
|
|
227
|
+
input: { projectId?: string; modelVersionId: string; out: string },
|
|
228
|
+
io: ModelIo,
|
|
229
|
+
): Promise<void> => {
|
|
230
|
+
const version = await resolveModelVersion(client, input.projectId, input.modelVersionId);
|
|
231
|
+
const descriptor = await client.models.getVersionContent({
|
|
232
|
+
modelVersionId: version.id,
|
|
233
|
+
});
|
|
234
|
+
const root = resolve(input.out);
|
|
235
|
+
await mkdir(root, { recursive: true });
|
|
236
|
+
const realRoot = await realpath(root);
|
|
237
|
+
|
|
238
|
+
for (const file of descriptor.files) {
|
|
239
|
+
const target = resolve(root, file.path);
|
|
240
|
+
const relativeTarget = relative(root, target);
|
|
241
|
+
assert(
|
|
242
|
+
relativeTarget !== "" &&
|
|
243
|
+
relativeTarget !== ".." &&
|
|
244
|
+
!relativeTarget.startsWith(`..${sep}`) &&
|
|
245
|
+
!isAbsolute(relativeTarget),
|
|
246
|
+
`Invalid Model Version file path: ${file.path}`,
|
|
247
|
+
);
|
|
248
|
+
let parent = root;
|
|
249
|
+
for (const segment of file.path.split("/").slice(0, -1)) {
|
|
250
|
+
parent = resolve(parent, segment);
|
|
251
|
+
await mkdir(parent, { recursive: true });
|
|
252
|
+
const realParent = await realpath(parent);
|
|
253
|
+
assert(
|
|
254
|
+
realParent === realRoot || realParent.startsWith(`${realRoot}${sep}`),
|
|
255
|
+
`Invalid Model Version file path: ${file.path}`,
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
const response = await fetch(file.url, { redirect: "error" });
|
|
259
|
+
assert(response.ok && response.body, `Failed to download Model Version file ${file.path}.`);
|
|
260
|
+
const hash = createHash("sha256");
|
|
261
|
+
let byteSize = 0;
|
|
262
|
+
const verify = new Transform({
|
|
263
|
+
transform(chunk: Buffer, _encoding, callback) {
|
|
264
|
+
byteSize += chunk.byteLength;
|
|
265
|
+
hash.update(chunk);
|
|
266
|
+
callback(null, chunk);
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
const temporary = `${target}.${randomUUID()}.tmp`;
|
|
270
|
+
try {
|
|
271
|
+
const handle = await open(
|
|
272
|
+
temporary,
|
|
273
|
+
constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW,
|
|
274
|
+
0o600,
|
|
275
|
+
);
|
|
276
|
+
await pipeline(Readable.from(response.body), verify, handle.createWriteStream());
|
|
277
|
+
assert(
|
|
278
|
+
byteSize === file.byteSize,
|
|
279
|
+
`Downloaded Model Version file ${file.path} has an unexpected size.`,
|
|
280
|
+
);
|
|
281
|
+
assert(
|
|
282
|
+
hash.digest("hex") === file.sha256,
|
|
283
|
+
`Downloaded Model Version file ${file.path} has an invalid hash.`,
|
|
284
|
+
);
|
|
285
|
+
await rename(temporary, target);
|
|
286
|
+
} catch (error) {
|
|
287
|
+
await rm(temporary, { force: true });
|
|
288
|
+
throw error;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
io.stdout(`Downloaded Model Version ${descriptor.id} revision ${descriptor.revision} to ${root}`);
|
|
293
|
+
};
|
package/src/cli/program.ts
CHANGED
|
@@ -48,6 +48,7 @@ import {
|
|
|
48
48
|
import {
|
|
49
49
|
archiveModel,
|
|
50
50
|
createModel,
|
|
51
|
+
downloadModelVersion,
|
|
51
52
|
getBaseModel,
|
|
52
53
|
getModel,
|
|
53
54
|
listBaseModels,
|
|
@@ -64,6 +65,7 @@ import {
|
|
|
64
65
|
removeProject,
|
|
65
66
|
resolveProjectContext,
|
|
66
67
|
switchProject,
|
|
68
|
+
untrackProjectResource,
|
|
67
69
|
} from "./project-context";
|
|
68
70
|
import { estimatePipelineCost } from "./cost";
|
|
69
71
|
import { submitIssueReport } from "./report";
|
|
@@ -78,9 +80,24 @@ import {
|
|
|
78
80
|
pipelineRunStatus,
|
|
79
81
|
startPipelineRun,
|
|
80
82
|
} from "./runs";
|
|
83
|
+
import {
|
|
84
|
+
cancelTrainingRun,
|
|
85
|
+
createTraining,
|
|
86
|
+
createTrainingRun,
|
|
87
|
+
estimateTrainingCost,
|
|
88
|
+
getTraining,
|
|
89
|
+
getTrainingRun,
|
|
90
|
+
readTrainingRunLogs,
|
|
91
|
+
listTrainingRuns,
|
|
92
|
+
resumeTrainingRun,
|
|
93
|
+
listTrainings,
|
|
94
|
+
updateTraining,
|
|
95
|
+
} from "./trainings";
|
|
96
|
+
import type { TrainingDraftOptions } from "./trainings";
|
|
81
97
|
|
|
82
98
|
import type { RunOutcome } from "./runs";
|
|
83
99
|
import { skillInstallCommand, skillListCommand, skillSearchCommand } from "./skill";
|
|
100
|
+
import { cliVersionInfo } from "./version";
|
|
84
101
|
import { findSourceRoot } from "./source";
|
|
85
102
|
|
|
86
103
|
export type CliIo = {
|
|
@@ -127,6 +144,55 @@ const positiveInteger = (raw: string): number => {
|
|
|
127
144
|
return value;
|
|
128
145
|
};
|
|
129
146
|
|
|
147
|
+
const nonNegativeInteger = (raw: string): number => {
|
|
148
|
+
const value = Number(raw);
|
|
149
|
+
if (!Number.isInteger(value) || value < 0)
|
|
150
|
+
throw new InvalidArgumentError("Expected a non-negative integer.");
|
|
151
|
+
return value;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
const trainingMethod = (raw: string): "sft" | "gisting" => {
|
|
155
|
+
if (raw !== "sft" && raw !== "gisting") {
|
|
156
|
+
throw new InvalidArgumentError('Expected training method "sft" or "gisting".');
|
|
157
|
+
}
|
|
158
|
+
return raw;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
const trainingRegime = (raw: string): "low" | "medium" | "high" => {
|
|
162
|
+
if (raw !== "low" && raw !== "medium" && raw !== "high") {
|
|
163
|
+
throw new InvalidArgumentError('Expected regime "low", "medium", or "high".');
|
|
164
|
+
}
|
|
165
|
+
return raw;
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
type RawTrainingDraftOptions = {
|
|
169
|
+
method?: TrainingDraftOptions["method"];
|
|
170
|
+
baseModel?: TrainingDraftOptions["baseModelId"];
|
|
171
|
+
modelVersion?: string;
|
|
172
|
+
dataset?: string;
|
|
173
|
+
validationDataset?: string;
|
|
174
|
+
trainFilter?: string;
|
|
175
|
+
validationFilter?: string;
|
|
176
|
+
regime?: TrainingDraftOptions["regime"];
|
|
177
|
+
epochs?: number;
|
|
178
|
+
evalSteps?: number;
|
|
179
|
+
promptFile?: string;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const trainingDraftOptions = (options: RawTrainingDraftOptions): TrainingDraftOptions => ({
|
|
183
|
+
method: options.method,
|
|
184
|
+
baseModelId: options.baseModel,
|
|
185
|
+
modelVersionId: options.modelVersion,
|
|
186
|
+
datasetId: options.dataset,
|
|
187
|
+
validationDatasetId: options.validationDataset,
|
|
188
|
+
trainingFilter: options.trainFilter,
|
|
189
|
+
validationFilter: options.validationFilter,
|
|
190
|
+
regime: options.regime,
|
|
191
|
+
epochs: options.epochs,
|
|
192
|
+
evalSteps: options.evalSteps,
|
|
193
|
+
promptFilePath: options.promptFile,
|
|
194
|
+
});
|
|
195
|
+
|
|
130
196
|
const exitCodeForOutcome = (outcome: RunOutcome): number => {
|
|
131
197
|
if (outcome === "failed") return 1;
|
|
132
198
|
if (outcome === "timedOut") return 2;
|
|
@@ -242,7 +308,7 @@ export function createProgram(context: ProgramContext): CreatedProgram {
|
|
|
242
308
|
|
|
243
309
|
program
|
|
244
310
|
.description(
|
|
245
|
-
"
|
|
311
|
+
"Beta. Build and operate Toloka pipeline projects from TypeScript source. The public API may change before general availability.",
|
|
246
312
|
)
|
|
247
313
|
.version(SDK_VERSION, "-v, --version", "output the current version")
|
|
248
314
|
.option(
|
|
@@ -282,10 +348,14 @@ export function createProgram(context: ProgramContext): CreatedProgram {
|
|
|
282
348
|
warnedAboutStaleSkills = true;
|
|
283
349
|
context.io.stderr(warning);
|
|
284
350
|
});
|
|
351
|
+
|
|
285
352
|
program
|
|
286
353
|
.command("version")
|
|
354
|
+
.option("--json", "print version and build provenance as JSON", false)
|
|
287
355
|
.description("print the current CLI version")
|
|
288
|
-
.action(() =>
|
|
356
|
+
.action((options: { json: boolean }) =>
|
|
357
|
+
context.io.stdout(options.json ? JSON.stringify(cliVersionInfo()) : SDK_VERSION),
|
|
358
|
+
);
|
|
289
359
|
|
|
290
360
|
const config = program.command("config").description("read and write machine CLI settings");
|
|
291
361
|
config
|
|
@@ -472,6 +542,26 @@ export function createProgram(context: ProgramContext): CreatedProgram {
|
|
|
472
542
|
io: context.io,
|
|
473
543
|
});
|
|
474
544
|
});
|
|
545
|
+
project
|
|
546
|
+
.command("untrack")
|
|
547
|
+
.argument("<type>", "pipeline or dataset")
|
|
548
|
+
.argument("<name>", "tracked resource name")
|
|
549
|
+
.option("--confirm", "confirm untracking in a non-interactive environment", false)
|
|
550
|
+
.description("remove a pipeline or dataset from local tracking without deleting it")
|
|
551
|
+
.action(async (type: string, name: string, options: { confirm: boolean }) => {
|
|
552
|
+
assert(
|
|
553
|
+
type === "pipeline" || type === "dataset",
|
|
554
|
+
"Resource type must be pipeline or dataset.",
|
|
555
|
+
);
|
|
556
|
+
const sourceRoot = await resolveSourceRoot(globals(), context.io);
|
|
557
|
+
await untrackProjectResource({
|
|
558
|
+
sourceRoot,
|
|
559
|
+
type,
|
|
560
|
+
name,
|
|
561
|
+
confirm: options.confirm,
|
|
562
|
+
io: context.io,
|
|
563
|
+
});
|
|
564
|
+
});
|
|
475
565
|
project
|
|
476
566
|
.command("create")
|
|
477
567
|
.argument("[alias]", "local name for the new project")
|
|
@@ -772,6 +862,185 @@ export function createProgram(context: ProgramContext): CreatedProgram {
|
|
|
772
862
|
await archiveModel(client, { projectId, nameOrId, json: options.json }, context.io);
|
|
773
863
|
});
|
|
774
864
|
|
|
865
|
+
const modelVersion = model.command("version").description("manage one immutable Model Version");
|
|
866
|
+
modelVersion
|
|
867
|
+
.command("download")
|
|
868
|
+
.argument("<model-version>", "Model Version ID or Model@name")
|
|
869
|
+
.requiredOption("--out <directory>", "output directory")
|
|
870
|
+
.description("download and verify Model Version content")
|
|
871
|
+
.action(async (modelVersionId: string, options: { out: string }) => {
|
|
872
|
+
const { client, projectId } = await resolveContext(globals(), context);
|
|
873
|
+
await downloadModelVersion(
|
|
874
|
+
client,
|
|
875
|
+
{ projectId, modelVersionId, out: options.out },
|
|
876
|
+
context.io,
|
|
877
|
+
);
|
|
878
|
+
});
|
|
879
|
+
|
|
880
|
+
const training = program.command("training").description("manage project Training drafts");
|
|
881
|
+
training
|
|
882
|
+
.command("list")
|
|
883
|
+
.option("--json", "print JSON", false)
|
|
884
|
+
.description("list active Trainings owned by the selected project")
|
|
885
|
+
.action(async (options: { json: boolean }) => {
|
|
886
|
+
const { client, projectId } = await resolveContext(globals(), context);
|
|
887
|
+
assert(projectId, MISSING_PROJECT_ID_MESSAGE);
|
|
888
|
+
await listTrainings(client, { projectId, json: options.json }, context.io);
|
|
889
|
+
});
|
|
890
|
+
training
|
|
891
|
+
.command("get")
|
|
892
|
+
.argument("<name-or-id>", "Training name or ID")
|
|
893
|
+
.option("--json", "print JSON", false)
|
|
894
|
+
.description("show one Training draft")
|
|
895
|
+
.action(async (nameOrId: string, options: { json: boolean }) => {
|
|
896
|
+
const { client, projectId } = await resolveContext(globals(), context);
|
|
897
|
+
assert(projectId, MISSING_PROJECT_ID_MESSAGE);
|
|
898
|
+
await getTraining(client, { projectId, nameOrId, json: options.json }, context.io);
|
|
899
|
+
});
|
|
900
|
+
training
|
|
901
|
+
.command("create")
|
|
902
|
+
.argument("<name>", "new Training name")
|
|
903
|
+
.option("--method <method>", "Training method", trainingMethod, "sft")
|
|
904
|
+
.option("--base-model <id>", "catalog Base Model source", parseBaseModelId)
|
|
905
|
+
.option("--model-version <id>", "exact Model Version source")
|
|
906
|
+
.requiredOption("--dataset <id>", "required training Dataset ID")
|
|
907
|
+
.option("--validation-dataset <id>", "optional validation Dataset ID")
|
|
908
|
+
.option("--train-filter <field=value>", "training Dataset field equality filter")
|
|
909
|
+
.option("--validation-filter <field=value>", "validation Dataset field equality filter")
|
|
910
|
+
.option("--regime <regime>", "Python training regime", trainingRegime)
|
|
911
|
+
.option("--epochs <count>", "training epochs", nonNegativeInteger)
|
|
912
|
+
.option("--eval-steps <count>", "SFT eval steps", positiveInteger)
|
|
913
|
+
.option("--prompt-file <path>", "gisting prompt text file")
|
|
914
|
+
.option("--json", "print JSON", false)
|
|
915
|
+
.description("create a normalized Training draft")
|
|
916
|
+
.action(async (name: string, options: RawTrainingDraftOptions & { json: boolean }) => {
|
|
917
|
+
const { client, projectId } = await resolveContext(globals(), context);
|
|
918
|
+
assert(projectId, MISSING_PROJECT_ID_MESSAGE);
|
|
919
|
+
await createTraining(
|
|
920
|
+
client,
|
|
921
|
+
{
|
|
922
|
+
...trainingDraftOptions(options),
|
|
923
|
+
projectId,
|
|
924
|
+
name,
|
|
925
|
+
json: options.json,
|
|
926
|
+
},
|
|
927
|
+
context.io,
|
|
928
|
+
);
|
|
929
|
+
});
|
|
930
|
+
training
|
|
931
|
+
.command("update")
|
|
932
|
+
.argument("<name-or-id>", "Training name or ID")
|
|
933
|
+
.option("--base-model <id>", "catalog Base Model source", parseBaseModelId)
|
|
934
|
+
.option("--model-version <id>", "exact Model Version source")
|
|
935
|
+
.option("--dataset <id>", "required training Dataset ID")
|
|
936
|
+
.option("--validation-dataset <id>", "replacement validation Dataset ID")
|
|
937
|
+
.option("--train-filter <field=value>", "replacement training Dataset field equality filter")
|
|
938
|
+
.option("--validation-filter <field=value>", "replacement validation Dataset field equality filter")
|
|
939
|
+
.option("--regime <regime>", "Python training regime", trainingRegime)
|
|
940
|
+
.option("--epochs <count>", "training epochs", nonNegativeInteger)
|
|
941
|
+
.option("--eval-steps <count>", "SFT eval steps", positiveInteger)
|
|
942
|
+
.option("--prompt-file <path>", "replacement gisting prompt text file")
|
|
943
|
+
.option("--json", "print JSON", false)
|
|
944
|
+
.description("replace the complete Training draft")
|
|
945
|
+
.action(async (nameOrId: string, options: RawTrainingDraftOptions & { json: boolean }) => {
|
|
946
|
+
const { client, projectId } = await resolveContext(globals(), context);
|
|
947
|
+
assert(projectId, MISSING_PROJECT_ID_MESSAGE);
|
|
948
|
+
await updateTraining(
|
|
949
|
+
client,
|
|
950
|
+
{
|
|
951
|
+
...trainingDraftOptions(options),
|
|
952
|
+
projectId,
|
|
953
|
+
nameOrId,
|
|
954
|
+
json: options.json,
|
|
955
|
+
},
|
|
956
|
+
context.io,
|
|
957
|
+
);
|
|
958
|
+
});
|
|
959
|
+
training
|
|
960
|
+
.command("cost")
|
|
961
|
+
.argument("<name-or-id>", "Training name or ID")
|
|
962
|
+
.option("--idempotency-key <key>", "reuse one Cost Estimate input preparation")
|
|
963
|
+
.option("--json", "print JSON", false)
|
|
964
|
+
.description("validate Training inputs and calculate the maximum charge")
|
|
965
|
+
.action(async (nameOrId: string, options: { idempotencyKey?: string; json: boolean }) => {
|
|
966
|
+
const { client, projectId } = await resolveContext(globals(), context);
|
|
967
|
+
assert(projectId, MISSING_PROJECT_ID_MESSAGE);
|
|
968
|
+
await estimateTrainingCost(
|
|
969
|
+
client,
|
|
970
|
+
{ projectId, nameOrId, idempotencyKey: options.idempotencyKey, json: options.json },
|
|
971
|
+
context.io,
|
|
972
|
+
);
|
|
973
|
+
});
|
|
974
|
+
training
|
|
975
|
+
.command("run")
|
|
976
|
+
.argument("<name-or-id>", "Training name or ID")
|
|
977
|
+
.requiredOption("--estimate-file <path>", "ready Training Cost Estimate JSON")
|
|
978
|
+
.requiredOption("--version-name <name>", "unique Model Version name for this run")
|
|
979
|
+
.option("--idempotency-key <key>", "reuse one Training Run creation")
|
|
980
|
+
.option("--json", "print JSON", false)
|
|
981
|
+
.description("create one queued Training Run from a ready Cost Estimate")
|
|
982
|
+
.action(
|
|
983
|
+
async (
|
|
984
|
+
nameOrId: string,
|
|
985
|
+
options: {
|
|
986
|
+
estimateFile: string;
|
|
987
|
+
versionName: string;
|
|
988
|
+
idempotencyKey?: string;
|
|
989
|
+
json: boolean;
|
|
990
|
+
},
|
|
991
|
+
) => {
|
|
992
|
+
const { client, projectId } = await resolveContext(globals(), context);
|
|
993
|
+
assert(projectId, MISSING_PROJECT_ID_MESSAGE);
|
|
994
|
+
await createTrainingRun(client, { projectId, nameOrId, ...options }, context.io);
|
|
995
|
+
},
|
|
996
|
+
);
|
|
997
|
+
training
|
|
998
|
+
.command("runs")
|
|
999
|
+
.argument("<name-or-id>", "Training name or ID")
|
|
1000
|
+
.option("--json", "print JSON", false)
|
|
1001
|
+
.description("list Training Run history")
|
|
1002
|
+
.action(async (nameOrId: string, options: { json: boolean }) => {
|
|
1003
|
+
const { client, projectId } = await resolveContext(globals(), context);
|
|
1004
|
+
assert(projectId, MISSING_PROJECT_ID_MESSAGE);
|
|
1005
|
+
await listTrainingRuns(client, { projectId, nameOrId, json: options.json }, context.io);
|
|
1006
|
+
});
|
|
1007
|
+
training
|
|
1008
|
+
.command("status")
|
|
1009
|
+
.argument("<training-run-id>", "Training Run ID")
|
|
1010
|
+
.option("--json", "print JSON", false)
|
|
1011
|
+
.description("show one Training Run")
|
|
1012
|
+
.action(async (trainingRunId: string, options: { json: boolean }) => {
|
|
1013
|
+
const { client } = await resolveContext(globals(), context);
|
|
1014
|
+
await getTrainingRun(client, { trainingRunId, json: options.json }, context.io);
|
|
1015
|
+
});
|
|
1016
|
+
training
|
|
1017
|
+
.command("resume")
|
|
1018
|
+
.argument("<training-run-id>", "Training Run ID")
|
|
1019
|
+
.option("--json", "print JSON", false)
|
|
1020
|
+
.description("resume a Training Run blocked on funds or payment")
|
|
1021
|
+
.action(async (trainingRunId: string, options: { json: boolean }) => {
|
|
1022
|
+
const { client } = await resolveContext(globals(), context);
|
|
1023
|
+
await resumeTrainingRun(client, { trainingRunId, json: options.json }, context.io);
|
|
1024
|
+
});
|
|
1025
|
+
training
|
|
1026
|
+
.command("cancel")
|
|
1027
|
+
.argument("<training-run-id>", "Training Run ID")
|
|
1028
|
+
.option("--json", "print JSON", false)
|
|
1029
|
+
.description("cancel a Training Run before provider work completes")
|
|
1030
|
+
.action(async (trainingRunId: string, options: { json: boolean }) => {
|
|
1031
|
+
const { client } = await resolveContext(globals(), context);
|
|
1032
|
+
await cancelTrainingRun(client, { trainingRunId, json: options.json }, context.io);
|
|
1033
|
+
});
|
|
1034
|
+
training
|
|
1035
|
+
.command("logs")
|
|
1036
|
+
.argument("<training-run-id>", "Training Run ID")
|
|
1037
|
+
.option("--follow", "wait for new log entries until complete", false)
|
|
1038
|
+
.description("read sanitized Training Run logs")
|
|
1039
|
+
.action(async (trainingRunId: string, options: { follow: boolean }) => {
|
|
1040
|
+
const { client } = await resolveContext(globals(), context);
|
|
1041
|
+
await readTrainingRunLogs(client, { trainingRunId, follow: options.follow }, context.io);
|
|
1042
|
+
});
|
|
1043
|
+
|
|
775
1044
|
const dataset = program
|
|
776
1045
|
.command("dataset")
|
|
777
1046
|
.description("inspect and move dataset catalog and rows");
|