import {z} from 'zod' export type GetApiJobDefinitionDefinitionIdRevisionArgs = {definitionId: string}; export type GetApiJobDefinitionDefinitionIdRevisionOptions = {baseUrl?: string | undefined, OpenIdConnect?: string | undefined, fetch?: typeof fetch | undefined}; export const jobDefinitionRevisionState = z.enum(["Pending", "Completed", "Failed"]); export const featureFlag = z.object({key: z.string(), value: z.string()}); export const iPairMakerConfig = z.discriminatedUnion("_t", [z.object({_t: z.literal("FullPermutationPairMaker")}), z.object({_t: z.literal("OnlinePairMaker"), randomMatchesRatio: z.number().optional(), totalComparisonBudget: z.number().int().optional()})]); export const iRankingConfigBradleyTerryRankingConfig = z.object({_t: z.literal("BradleyTerryRankingConfig"), startingScore: z.number().int()}); export const iRankingConfigEloConfig = z.object({_t: z.literal("EloConfig"), startingScore: z.number().int(), kFactor: z.number().int(), scalingFactor: z.number().int()}); export const metadataVisibilities = z.array(z.enum(["None", "Users", "Customers", "Admins", "Dashboard", "All"])); export const iMetadataInput = z.object({_t: z.literal("TextMetadataInput"), text: z.string().nullable(), visibilities: metadataVisibilities}); export const iAssetInput: z.ZodType = z.discriminatedUnion("_t", [z.object({_t: z.literal("ExistingAssetInput"), name: z.string(), metadata: z.record(z.string(), iMetadataInput).nullable().optional(), identifier: z.string().nullable().optional()}), z.object({_t: z.literal("MultiAssetInput"), assets: z.array(z.lazy(() => iAssetInput)), metadata: z.record(z.string(), iMetadataInput).nullable().optional(), identifier: z.string().nullable().optional()}), z.object({_t: z.literal("TextAssetInput"), text: z.string(), metadata: z.record(z.string(), iMetadataInput).nullable().optional(), identifier: z.string().nullable().optional()})]); export const assetBinding = z.object({segment: z.string()}); export const textBinding = z.object({literal: z.string().nullable().optional(), segment: z.string().nullable().optional(), language: z.enum(["Original", "English"]).nullable().optional()}); export const iRapidSpecBoundingBoxRapidSpec = z.object({_t: z.literal("BoundingBox"), asset: assetBinding, context: z.object({literal: z.string().nullable().optional(), segment: z.string().nullable().optional(), language: z.enum(["Original", "English"]).nullable().optional()}).nullable().optional(), contextAssets: z.array(assetBinding).nullable().optional(), target: textBinding}); export const optionsBindingOption = z.object({label: z.string(), value: z.string()}); export const optionsBinding = z.object({literal: z.array(optionsBindingOption).nullable().optional(), segment: z.string().nullable().optional()}); export const iRapidSpecClassifyRapidSpec = z.object({_t: z.literal("Classify"), asset: assetBinding, context: z.object({literal: z.string().nullable().optional(), segment: z.string().nullable().optional(), language: z.enum(["Original", "English"]).nullable().optional()}).nullable().optional(), contextAssets: z.array(assetBinding).nullable().optional(), title: textBinding, categories: optionsBinding}); export const iRapidSpecCompareRapidSpec = z.object({_t: z.literal("Compare"), asset: assetBinding, context: z.object({literal: z.string().nullable().optional(), segment: z.string().nullable().optional(), language: z.enum(["Original", "English"]).nullable().optional()}).nullable().optional(), contextAssets: z.array(assetBinding).nullable().optional(), criteria: textBinding, indexIdentifiers: z.array(z.string()).nullable().optional()}); export const iRapidSpecFreeTextRapidSpec = z.object({_t: z.literal("FreeText"), asset: assetBinding, context: z.object({literal: z.string().nullable().optional(), segment: z.string().nullable().optional(), language: z.enum(["Original", "English"]).nullable().optional()}).nullable().optional(), contextAssets: z.array(assetBinding).nullable().optional(), question: textBinding, shouldValidateResponse: z.boolean().nullable().optional(), validationSystemPrompt: z.string().nullable().optional()}); export const iRapidSpecLineRapidSpec = z.object({_t: z.literal("Line"), asset: assetBinding, context: z.object({literal: z.string().nullable().optional(), segment: z.string().nullable().optional(), language: z.enum(["Original", "English"]).nullable().optional()}).nullable().optional(), contextAssets: z.array(assetBinding).nullable().optional(), target: textBinding}); export const iRapidSpecLocateRapidSpec = z.object({_t: z.literal("Locate"), asset: assetBinding, context: z.object({literal: z.string().nullable().optional(), segment: z.string().nullable().optional(), language: z.enum(["Original", "English"]).nullable().optional()}).nullable().optional(), contextAssets: z.array(assetBinding).nullable().optional(), target: textBinding}); export const iRapidSpecNamedEntityRapidSpec = z.object({_t: z.literal("NamedEntity"), asset: assetBinding, context: z.object({literal: z.string().nullable().optional(), segment: z.string().nullable().optional(), language: z.enum(["Original", "English"]).nullable().optional()}).nullable().optional(), contextAssets: z.array(assetBinding).nullable().optional(), target: textBinding, classes: z.array(z.string())}); export const iRapidSpecPolygonRapidSpec = z.object({_t: z.literal("Polygon"), asset: assetBinding, context: z.object({literal: z.string().nullable().optional(), segment: z.string().nullable().optional(), language: z.enum(["Original", "English"]).nullable().optional()}).nullable().optional(), contextAssets: z.array(assetBinding).nullable().optional(), target: textBinding}); export const iRapidSpecScrubRapidSpec = z.object({_t: z.literal("Scrub"), asset: assetBinding, context: z.object({literal: z.string().nullable().optional(), segment: z.string().nullable().optional(), language: z.enum(["Original", "English"]).nullable().optional()}).nullable().optional(), contextAssets: z.array(assetBinding).nullable().optional(), target: textBinding}); export const iRapidSpecTranscriptionRapidSpec = z.object({_t: z.literal("Transcription"), asset: assetBinding, context: z.object({literal: z.string().nullable().optional(), segment: z.string().nullable().optional(), language: z.enum(["Original", "English"]).nullable().optional()}).nullable().optional(), contextAssets: z.array(assetBinding).nullable().optional(), title: textBinding, transcription: textBinding}); export const iOrderWorkflowInput = z.discriminatedUnion("_t", [z.object({_t: z.literal("EvaluationWorkflow"), validationSetId: z.string(), shouldAcceptIncorrect: z.boolean(), featureFlags: z.array(featureFlag).optional()}), z.object({_t: z.literal("GroupedRankingWorkflow"), criteria: z.string(), pairMakerConfig: iPairMakerConfig.optional(), rankingConfig: z.union([iRankingConfigBradleyTerryRankingConfig, iRankingConfigEloConfig]).nullable().optional(), contexts: z.record(z.string(), z.string()).nullable().optional(), contextAssets: z.record(z.string(), iAssetInput).nullable().optional(), featureFlags: z.array(featureFlag).optional(), maxParallelism: z.number().int().optional()}), z.object({_t: z.literal("SimpleWorkflow"), rapid: z.union([iRapidSpecBoundingBoxRapidSpec, iRapidSpecClassifyRapidSpec, iRapidSpecCompareRapidSpec, iRapidSpecFreeTextRapidSpec, iRapidSpecLineRapidSpec, iRapidSpecLocateRapidSpec, iRapidSpecNamedEntityRapidSpec, iRapidSpecPolygonRapidSpec, iRapidSpecScrubRapidSpec, iRapidSpecTranscriptionRapidSpec]).nullable().optional(), batchSize: z.number().int().nullable().optional(), featureFlags: z.array(featureFlag).optional()})]); export const iReferee = z.discriminatedUnion("_t", [z.object({_t: z.literal("BudgetReferee"), totalBudget: z.number().int()}), z.object({_t: z.literal("EarlyStoppingReferee"), maxVotes: z.number().int(), threshold: z.number()}), z.object({_t: z.literal("NaiveReferee"), totalVotes: z.number().int()}), z.object({_t: z.literal("QuorumReferee"), maxVotes: z.number().int(), threshold: z.number().int()})]); export const getJobRevisionEndpointOutput = z.object({definitionId: z.string(), revisionNumber: z.number().int(), state: jobDefinitionRevisionState, pipelineId: z.string(), datasetId: z.string(), aggregatorType: z.enum(["NonCommittal", "MajorityVote", "SimpleMatchup", "LocateCluster", "Classification", "Locate", "BoundingBox", "Line", "Transcription", "SinglePointLocate", "FreeText", "Scrub", "Ranking", "MultiRanking"]).nullable().optional(), workflow: iOrderWorkflowInput, referee: iReferee, featureFlags: z.array(featureFlag), campaignFeatureFlags: z.array(featureFlag), validationSetId: z.string().nullable().optional(), baseRevisionNumber: z.number().int().nullable().optional(), createdAt: z.string(), createdById: z.string(), createdByMail: z.string(), isInstructionComplex: z.boolean().nullable().optional(), instructionComplexityReason: z.string().nullable().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Gets the latest revision for a job definition. * * GET /job/definition/{definitionId}/revision */ export const getApiJobDefinitionDefinitionIdRevision = async (args: GetApiJobDefinitionDefinitionIdRevisionArgs, options?: GetApiJobDefinitionDefinitionIdRevisionOptions) => { const {baseUrl = "https://api.rapidata.ai", fetch: fetchFn = fetch, OpenIdConnect} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (OpenIdConnect !== undefined) headers.set('authorization', `Bearer ${OpenIdConnect}`) const url = `${baseUrl.replace(/\/+$/, '')}/job/definition/${encodeURIComponent(String(args.definitionId))}/revision${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getJobRevisionEndpointOutput, await res.json()) };