import {z} from 'zod' export type GetApiPromptTemplatesArgs = {page?: number | undefined, per_page?: number | undefined, label?: string | undefined, name?: string | undefined, tags?: (string | Array) | undefined, status?: ('active' | 'deleted' | 'all') | undefined, external_source?: string | undefined, external_id?: string | undefined, created_by_email?: string | undefined, created_after?: string | undefined, created_before?: string | undefined, updated_after?: string | undefined, updated_before?: string | undefined, sort_by?: ('created_at' | 'updated_at' | 'name' | 'id') | undefined, sort_order?: ('asc' | 'desc') | undefined, is_snippet?: boolean | undefined}; export type GetApiPromptTemplatesOptions = {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 listPromptTemplateItem = z.object({id: z.number().int(), prompt_name: z.string(), prompt_template: z.discriminatedUnion("type", [completionPrompt, chatPrompt]), metadata: metadata.nullable().optional(), commit_message: z.string().nullable().optional(), llm_kwargs: z.object({}).nullable().optional(), version: z.number().int().optional(), external_ids: z.array(externalId), is_snippet: z.boolean().optional()}); export const listPromptTemplates = z.object({has_next: z.boolean(), has_prev: z.boolean(), items: z.array(listPromptTemplateItem), next_num: z.number().int(), prev_num: z.number().int(), page: z.number().int(), pages: z.number().int(), total: z.number().int()}); 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 }; /** * Get All * * GET /prompt-templates */ export const getApiPromptTemplates = async (args: GetApiPromptTemplatesArgs, options: GetApiPromptTemplatesOptions) => { const {baseUrl, fetch: fetchFn = fetch, ApiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.page != null) query.append("page", String(args.page)) if (args.per_page != null) query.append("per_page", String(args.per_page)) if (args.label != null) query.append("label", String(args.label)) if (args.name != null) query.append("name", String(args.name)) if (args.tags != null) query.append("tags", String(args.tags)) if (args.status != null) query.append("status", String(args.status)) if (args.external_source != null) query.append("external_source", String(args.external_source)) if (args.external_id != null) query.append("external_id", String(args.external_id)) if (args.created_by_email != null) query.append("created_by_email", String(args.created_by_email)) if (args.created_after != null) query.append("created_after", String(args.created_after)) if (args.created_before != null) query.append("created_before", String(args.created_before)) if (args.updated_after != null) query.append("updated_after", String(args.updated_after)) if (args.updated_before != null) query.append("updated_before", String(args.updated_before)) if (args.sort_by != null) query.append("sort_by", String(args.sort_by)) if (args.sort_order != null) query.append("sort_order", String(args.sort_order)) if (args.is_snippet != null) query.append("is_snippet", String(args.is_snippet)) if (ApiKeyAuth !== undefined) headers.set("X-API-KEY", ApiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/prompt-templates${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(listPromptTemplates, await res.json()) };