import { z } from "zod"; import OpenAI from "openai"; export type ReplaceArgs> = TPromptTemplate extends `${infer TStart}{{${infer TDataType}}}${infer TRest}` ? TRest extends `${string}{{${string}}}` | `${string}{{${string}}}${string}` ? `${TStart}${TArgs[TDataType]}${ReplaceArgs}` : `${TStart}${TArgs[TDataType]}${TRest}` : TPromptTemplate; export type ExtractArgsAsTuple = TPromptTemplate extends `${string}{{${infer TDataType}}}${infer TRest}` ? TRest extends `${string}{{${string}}}` | `${string}{{${string}}}${string}` ? [TDataType, ...ExtractArgsAsTuple] : [TDataType] : []; export type ExtractArgs> = { [K in ExtractArgsAsTuple[number] as K]: K extends keyof TSTypeValidator ? TSTypeValidator[K] : any; }; export type TypeToZodShape = [T] extends [string | number | boolean] ? z.Schema : { [K in keyof T]: TypeToZodShape; }; export type ReplaceChatArgs> = { [K in keyof TMessages]: TMessages[K] extends OpenAI.Chat.ChatCompletionMessageParam ? { role: TMessages[K]["role"]; content: ReplaceArgs; } : never; }; export type ExtractChatArgs> = ExtractArgs;