import {z} from 'zod' export type PatchPromptTemplateVersion = {version?: (number | null) | undefined, label?: (string | null) | undefined, messages?: ({[key: string]: unknown} | Array | null) | undefined, tools?: ({[key: string]: unknown} | Array | null) | undefined, functions?: ({[key: string]: unknown} | Array | null) | undefined, function_call?: (string | {[key: string]: unknown} | null) | undefined, tool_choice?: (string | {[key: string]: unknown} | null) | undefined, content?: ({[key: string]: unknown} | Array | null) | undefined, model_parameters?: ({[key: string]: unknown} | null) | undefined, response_format?: ({[key: string]: unknown} | null) | undefined, commit_message?: (string | null) | undefined, release_labels?: (Array | null) | undefined}; export type PatchApiRestPromptTemplatesIdentifierArgs = {identifier: string, body: PatchPromptTemplateVersion}; export type PatchApiRestPromptTemplatesIdentifierOptions = {baseUrl: string, ApiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const webAnnotation = z.object({type: z.literal("url_citation"), title: z.string(), url: z.string(), start_index: z.number().int(), end_index: z.number().int(), cited_text: z.string().nullable().optional(), encrypted_index: z.string().nullable().optional()}); export const fileAnnotation = z.object({type: z.literal("file_citation"), index: z.number().int(), file_id: z.string(), filename: z.string()}); export const mapAnnotation = z.object({type: z.literal("map_citation"), title: z.string(), url: z.string(), place_id: z.string().nullable().optional(), start_index: z.number().int(), end_index: z.number().int(), cited_text: z.string().nullable().optional()}); export const containerFileAnnotation = z.object({type: z.literal("container_file_citation"), container_id: z.string(), start_index: z.number().int().nullable().optional(), end_index: z.number().int().nullable().optional(), filename: z.string().nullable().optional(), file_id: z.string().nullable().optional()}); export const textContent = z.object({type: z.literal("text").optional(), text: z.string(), id: z.string().nullable().optional(), annotations: z.array(z.union([webAnnotation, fileAnnotation, mapAnnotation, containerFileAnnotation])).nullable().optional(), thought_signature: z.string().nullable().optional()}); export const thinkingContent = z.object({signature: z.string().nullable().optional(), type: z.literal("thinking").optional(), thinking: z.string(), id: z.string().nullable().optional()}); export const codeContent = z.object({type: z.literal("code").optional(), code: z.string(), id: z.string().nullable().optional(), container_id: z.string().nullable().optional()}); export const imageURL = z.object({url: z.string(), detail: z.string().nullable().optional()}); export const imageContent = z.object({type: z.literal("image_url").optional(), image_url: imageURL, image_variable: z.string().nullable().optional()}); export const media = z.object({title: z.string().optional(), type: z.string().nullable().optional(), url: z.string().nullable().optional(), format: z.enum(["base64", "url", "neither"]).optional()}); export const mediaContent = z.object({type: z.literal("media").optional(), media: media}); export const mediaVariable = z.object({type: z.literal("media_variable").optional(), name: z.string()}); export const outputMediaContent = z.object({type: z.literal("output_media").optional(), id: z.string().nullable().optional(), url: z.string(), mime_type: z.string().optional(), media_type: z.enum(["image", "video", "audio"]).optional(), provider_metadata: z.object({}).nullable().optional()}); export const serverToolUseContent = z.object({type: z.literal("server_tool_use").optional(), id: z.string(), name: z.string(), input: z.object({}).optional()}); export const webSearchResult = z.object({type: z.literal("web_search_result").optional(), url: z.string().optional(), title: z.string().optional(), encrypted_content: z.string().optional(), page_age: z.string().nullable().optional()}); export const webSearchToolResultContent = z.object({type: z.literal("web_search_tool_result").optional(), tool_use_id: z.string(), content: z.array(webSearchResult).optional()}); export const codeExecutionResultContent = z.object({type: z.literal("code_execution_result").optional(), output: z.string(), outcome: z.string().optional()}); export const mcpListToolsContent = z.object({type: z.literal("mcp_list_tools").optional(), id: z.string().nullable().optional(), server_label: z.string().optional(), tools: z.array(z.object({})).optional(), error: z.union([z.string(), z.object({})]).nullable().optional()}); export const mcpCallContent = z.object({type: z.literal("mcp_call").optional(), id: z.string().nullable().optional(), name: z.string().optional(), server_label: z.string().optional(), arguments: z.string().optional(), output: z.string().nullable().optional(), error: z.union([z.string(), z.object({})]).nullable().optional(), approval_request_id: z.string().nullable().optional()}); export const mcpApprovalRequestContent = z.object({type: z.literal("mcp_approval_request").optional(), id: z.string().nullable().optional(), name: z.string().optional(), arguments: z.string().optional(), server_label: z.string().optional()}); export const mcpApprovalResponseContent = z.object({type: z.literal("mcp_approval_response").optional(), approval_request_id: z.string(), approve: z.boolean()}); export const bashCodeExecutionToolResultContent = z.object({type: z.literal("bash_code_execution_tool_result").optional(), tool_use_id: z.string(), content: z.object({}).optional()}); export const textEditorCodeExecutionToolResultContent = z.object({type: z.literal("text_editor_code_execution_tool_result").optional(), tool_use_id: z.string(), content: z.object({}).optional()}); export const shellCallContent = z.object({type: z.literal("shell_call").optional(), id: z.string().nullable().optional(), call_id: z.string().nullable().optional(), action: z.object({}).optional(), status: z.string().nullable().optional()}); export const shellCallOutputContent = z.object({type: z.literal("shell_call_output").optional(), id: z.string().nullable().optional(), call_id: z.string().nullable().optional(), output: z.array(z.object({})).optional(), status: z.string().nullable().optional()}); export const applyPatchCallContent = z.object({type: z.literal("apply_patch_call").optional(), id: z.string().nullable().optional(), call_id: z.string().nullable().optional(), operation: z.object({}).optional(), status: z.string().nullable().optional()}); export const applyPatchCallOutputContent = z.object({type: z.literal("apply_patch_call_output").optional(), id: z.string().nullable().optional(), call_id: z.string().nullable().optional(), output: z.string().nullable().optional(), status: z.string().nullable().optional()}); export const completionPrompt = z.object({content: z.array(z.discriminatedUnion("type", [textContent, thinkingContent, codeContent, imageContent, mediaContent, mediaVariable, outputMediaContent, serverToolUseContent, webSearchToolResultContent, codeExecutionResultContent, mcpListToolsContent, mcpCallContent, mcpApprovalRequestContent, mcpApprovalResponseContent, bashCodeExecutionToolResultContent, textEditorCodeExecutionToolResultContent, shellCallContent, shellCallOutputContent, applyPatchCallContent, applyPatchCallOutputContent])), input_variables: z.array(z.string()).optional(), template_format: z.enum(["f-string", "jinja2"]).optional(), type: z.literal("completion").optional()}).and(z.record(z.string(), z.unknown())); export const systemMessage = z.object({input_variables: z.array(z.string()).optional(), template_format: z.enum(["f-string", "jinja2"]).optional(), content: z.array(z.discriminatedUnion("type", [textContent, thinkingContent, codeContent, imageContent, mediaContent, mediaVariable, outputMediaContent, serverToolUseContent, webSearchToolResultContent, codeExecutionResultContent, mcpListToolsContent, mcpCallContent, mcpApprovalRequestContent, mcpApprovalResponseContent, bashCodeExecutionToolResultContent, textEditorCodeExecutionToolResultContent, shellCallContent, shellCallOutputContent, applyPatchCallContent, applyPatchCallOutputContent])), role: z.literal("system").optional(), name: z.string().nullable().optional()}); export const userMessage = z.object({input_variables: z.array(z.string()).optional(), template_format: z.enum(["f-string", "jinja2"]).optional(), content: z.array(z.discriminatedUnion("type", [textContent, thinkingContent, codeContent, imageContent, mediaContent, mediaVariable, outputMediaContent, serverToolUseContent, webSearchToolResultContent, codeExecutionResultContent, mcpListToolsContent, mcpCallContent, mcpApprovalRequestContent, mcpApprovalResponseContent, bashCodeExecutionToolResultContent, textEditorCodeExecutionToolResultContent, shellCallContent, shellCallOutputContent, applyPatchCallContent, applyPatchCallOutputContent])), role: z.literal("user").optional(), name: z.string().nullable().optional()}); export const functionCall = z.object({name: z.string(), arguments: z.string()}); export const toolCall = z.object({tool_id: z.string().nullable().optional(), id: z.string(), type: z.literal("function").optional(), function: functionCall}); export const assistantMessage = z.object({input_variables: z.array(z.string()).optional(), template_format: z.enum(["f-string", "jinja2"]).optional(), content: z.array(z.discriminatedUnion("type", [textContent, thinkingContent, codeContent, imageContent, mediaContent, mediaVariable, outputMediaContent, serverToolUseContent, webSearchToolResultContent, codeExecutionResultContent, mcpListToolsContent, mcpCallContent, mcpApprovalRequestContent, mcpApprovalResponseContent, bashCodeExecutionToolResultContent, textEditorCodeExecutionToolResultContent, shellCallContent, shellCallOutputContent, applyPatchCallContent, applyPatchCallOutputContent])).nullable().optional(), role: z.literal("assistant").optional(), function_call: functionCall.nullable().optional(), name: z.string().nullable().optional(), tool_calls: z.array(toolCall).nullable().optional()}); export const functionMessage = z.object({input_variables: z.array(z.string()).optional(), template_format: z.enum(["f-string", "jinja2"]).optional(), content: z.array(z.discriminatedUnion("type", [textContent, thinkingContent, codeContent, imageContent, mediaContent, mediaVariable, outputMediaContent, serverToolUseContent, webSearchToolResultContent, codeExecutionResultContent, mcpListToolsContent, mcpCallContent, mcpApprovalRequestContent, mcpApprovalResponseContent, bashCodeExecutionToolResultContent, textEditorCodeExecutionToolResultContent, shellCallContent, shellCallOutputContent, applyPatchCallContent, applyPatchCallOutputContent])).nullable().optional(), role: z.literal("function").optional(), name: z.string()}); export const toolMessage = z.object({input_variables: z.array(z.string()).optional(), template_format: z.enum(["f-string", "jinja2"]).optional(), content: z.array(z.discriminatedUnion("type", [textContent, thinkingContent, codeContent, imageContent, mediaContent, mediaVariable, outputMediaContent, serverToolUseContent, webSearchToolResultContent, codeExecutionResultContent, mcpListToolsContent, mcpCallContent, mcpApprovalRequestContent, mcpApprovalResponseContent, bashCodeExecutionToolResultContent, textEditorCodeExecutionToolResultContent, shellCallContent, shellCallOutputContent, applyPatchCallContent, applyPatchCallOutputContent])), role: z.literal("tool").optional(), tool_call_id: z.string(), name: z.string().nullable().optional()}); export const placeholderMessage = z.object({input_variables: z.array(z.string()).optional(), template_format: z.enum(["f-string", "jinja2"]).optional(), content: z.array(z.discriminatedUnion("type", [textContent, thinkingContent, codeContent, imageContent, mediaContent, mediaVariable, outputMediaContent, serverToolUseContent, webSearchToolResultContent, codeExecutionResultContent, mcpListToolsContent, mcpCallContent, mcpApprovalRequestContent, mcpApprovalResponseContent, bashCodeExecutionToolResultContent, textEditorCodeExecutionToolResultContent, shellCallContent, shellCallOutputContent, applyPatchCallContent, applyPatchCallOutputContent])).nullable().optional(), raw_request_display_role: z.string().optional(), role: z.literal("placeholder").optional(), name: z.string()}); export const developerMessage = z.object({input_variables: z.array(z.string()).optional(), template_format: z.enum(["f-string", "jinja2"]).optional(), content: z.array(z.discriminatedUnion("type", [textContent, thinkingContent, codeContent, imageContent, mediaContent, mediaVariable, outputMediaContent, serverToolUseContent, webSearchToolResultContent, codeExecutionResultContent, mcpListToolsContent, mcpCallContent, mcpApprovalRequestContent, mcpApprovalResponseContent, bashCodeExecutionToolResultContent, textEditorCodeExecutionToolResultContent, shellCallContent, shellCallOutputContent, applyPatchCallContent, applyPatchCallOutputContent])), role: z.literal("developer").optional(), name: z.string().nullable().optional()}); export const function = z.object({name: z.string(), description: z.string().optional(), strict: z.boolean().optional(), parameters: z.object({}).optional()}); export const functionTool = z.object({type: z.literal("function").optional(), function: function}); export const builtInTool = z.object({id: z.string(), name: z.string(), description: z.string(), provider: z.string(), type: z.enum(["web_search", "file_search", "code_interpreter", "image_generation", "google_maps", "url_context", "mcp", "bash", "shell", "apply_patch", "text_editor"]), config: z.object({})}); export const tool = z.discriminatedUnion("type", [functionTool, builtInTool]); export const messageFunctionCall = z.object({name: z.string()}); export const chatToolChoice = z.object({type: z.literal("function").optional(), function: messageFunctionCall}); export const chatPrompt = z.object({messages: z.array(z.discriminatedUnion("role", [systemMessage, userMessage, assistantMessage, functionMessage, toolMessage, placeholderMessage, developerMessage])), functions: z.array(function).nullable().optional(), tools: z.array(tool).nullable().optional(), function_call: z.union([z.string(), messageFunctionCall]).nullable().optional(), tool_choice: z.union([z.string(), chatToolChoice]).nullable().optional(), type: z.literal("chat").optional(), input_variables: z.array(z.string()).optional()}); export const model = z.object({provider: z.string(), model_config_display_name: z.string().max(255).nullable().optional(), base_model: z.string().max(100).nullable().optional(), name: z.string(), parameters: z.object({}).optional(), display_params: z.object({}).optional(), api_type: z.string().nullable().optional()}); export const metadata = z.object({model: model.nullable().optional()}).and(z.record(z.string(), z.unknown())); export const externalId = z.object({source: z.string().min(1).max(128), external_id: z.string().min(1).max(512)}); export const createPromptTemplateResponse = z.object({id: z.number().int(), prompt_name: z.string(), prompt_version_id: z.number().int(), version_number: z.number().int(), tags: z.array(z.string()), release_labels: z.array(z.string()).nullable().optional(), prompt_template: z.discriminatedUnion("type", [completionPrompt, chatPrompt]), metadata: metadata.nullable().optional(), commit_message: z.string().nullable().optional(), external_ids: z.array(externalId)}); 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 }; /** * Patch Prompt Template Version * * PATCH /rest/prompt-templates/{identifier} */ export const patchApiRestPromptTemplatesIdentifier = async (args: PatchApiRestPromptTemplatesIdentifierArgs, options: PatchApiRestPromptTemplatesIdentifierOptions) => { const {baseUrl, fetch: fetchFn = fetch, ApiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (ApiKeyAuth !== undefined) headers.set("X-API-KEY", ApiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/rest/prompt-templates/${encodeURIComponent(String(args.identifier))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PATCH", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(createPromptTemplateResponse, await res.json()) };