import {Schema, streamObject, streamText} from "ai"; import {PromptTemplate} from "@langchain/core/prompts"; export type OneOf = Key extends keyof T ? T[Key] : Key extends keyof T2 ? T2[Key] : any; export type StreamTextOptions = Parameters[0] & {template?: string}; export type StreamObjectOptions= Omit>[0], "output"> & {template?: string}; export type FromDefault> = Omit extends Omit? { template?: string, prompt?: string } : Omit & Partial ; export async function aiOptions = StreamTextOptions,TDefaultOptions extends Partial =Partial>(context: any, defaultOptions: TDefaultOptions | undefined, input:FromDefault | string ) { const options = typeof input === 'object' ? input : {template: input} const resolvedOptions = { ...defaultOptions, ...options } ; const {template, prompt } = resolvedOptions; resolvedOptions.prompt = template && await PromptTemplate.fromTemplate(template as unknown as string, { templateFormat: 'mustache', }).format(context) || prompt; // console.log('aiOptions', resolvedOptions.prompt); return resolvedOptions as unknown as TOptions ; }