{"version":3,"sources":["../src/lib/openai-adapter.ts"],"sourcesContent":["import OpenAI from \"openai\";\nimport { CopilotKitServiceAdapter } from \"../types/service-adapter\";\nimport { limitOpenAIMessagesToTokenCount, maxTokensForOpenAIModel } from \"../utils/openai\";\nimport { AnnotatedFunction, annotatedFunctionToChatCompletionFunction } from \"@copilotkit/shared\";\nimport { openaiStreamInterceptor } from \"../utils\";\n\nconst DEFAULT_MODEL = \"gpt-4-1106-preview\";\n\nexport interface OpenAIAdapterParams {\n  openai?: OpenAI;\n  model?: string;\n  debug?: boolean;\n}\n\nexport class OpenAIAdapter implements CopilotKitServiceAdapter {\n  private openai: OpenAI = new OpenAI({});\n  private model: string = DEFAULT_MODEL;\n  private debug: boolean = false;\n  constructor(params?: OpenAIAdapterParams) {\n    if (params?.openai) {\n      this.openai = params.openai;\n    }\n    if (params?.model) {\n      this.model = params.model;\n    }\n    if (params?.debug) {\n      this.debug = params.debug;\n    }\n  }\n\n  stream(functions: AnnotatedFunction<any[]>[], forwardedProps: any): ReadableStream {\n    const messages = limitOpenAIMessagesToTokenCount(\n      forwardedProps.messages || [],\n      forwardedProps.functions || [],\n      maxTokensForOpenAIModel(forwardedProps.model || DEFAULT_MODEL),\n    );\n\n    // combine client and server defined functions\n    let allFunctions = functions.map(annotatedFunctionToChatCompletionFunction);\n    const serverFunctionNames = functions.map((fn) => fn.name);\n    if (forwardedProps.functions) {\n      allFunctions = allFunctions.concat(\n        // filter out any client functions that are already defined on the server\n        forwardedProps.functions.filter((fn: any) => !serverFunctionNames.includes(fn.name)),\n      );\n    }\n\n    const stream = this.openai.beta.chat.completions\n      .stream({\n        model: this.model,\n        ...forwardedProps,\n        stream: true,\n        messages: messages as any,\n        ...(allFunctions.length > 0 ? { functions: allFunctions } : {}),\n      })\n      .toReadableStream();\n    return openaiStreamInterceptor(stream, functions, this.debug);\n  }\n}\n"],"mappings":";;;;;;;;;AAAA,OAAO,YAAY;AAGnB,SAA4B,iDAAiD;AAG7E,IAAM,gBAAgB;AAQf,IAAM,gBAAN,MAAwD;AAAA,EAI7D,YAAY,QAA8B;AAH1C,SAAQ,SAAiB,IAAI,OAAO,CAAC,CAAC;AACtC,SAAQ,QAAgB;AACxB,SAAQ,QAAiB;AAEvB,QAAI,iCAAQ,QAAQ;AAClB,WAAK,SAAS,OAAO;AAAA,IACvB;AACA,QAAI,iCAAQ,OAAO;AACjB,WAAK,QAAQ,OAAO;AAAA,IACtB;AACA,QAAI,iCAAQ,OAAO;AACjB,WAAK,QAAQ,OAAO;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,OAAO,WAAuC,gBAAqC;AACjF,UAAM,WAAW;AAAA,MACf,eAAe,YAAY,CAAC;AAAA,MAC5B,eAAe,aAAa,CAAC;AAAA,MAC7B,wBAAwB,eAAe,SAAS,aAAa;AAAA,IAC/D;AAGA,QAAI,eAAe,UAAU,IAAI,yCAAyC;AAC1E,UAAM,sBAAsB,UAAU,IAAI,CAAC,OAAO,GAAG,IAAI;AACzD,QAAI,eAAe,WAAW;AAC5B,qBAAe,aAAa;AAAA;AAAA,QAE1B,eAAe,UAAU,OAAO,CAAC,OAAY,CAAC,oBAAoB,SAAS,GAAG,IAAI,CAAC;AAAA,MACrF;AAAA,IACF;AAEA,UAAM,SAAS,KAAK,OAAO,KAAK,KAAK,YAClC,OAAO;AAAA,MACN,OAAO,KAAK;AAAA,MACZ,GAAG;AAAA,MACH,QAAQ;AAAA,MACR;AAAA,MACA,GAAI,aAAa,SAAS,IAAI,EAAE,WAAW,aAAa,IAAI,CAAC;AAAA,IAC/D,CAAC,EACA,iBAAiB;AACpB,WAAO,wBAAwB,QAAQ,WAAW,KAAK,KAAK;AAAA,EAC9D;AACF;","names":[]}