{"version":3,"sources":["../src/provider.ts"],"names":["BaseLLMProvider","OpenAI","convertStringToMessages"],"mappings":"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","file":"index.cjs","sourcesContent":["import OpenAI from 'openai';\nimport { convertStringToMessages, BaseLLMProvider } from '@agenite/llm';\n\nimport type {\n  BaseMessage,\n  GenerateResponse,\n  ContentBlock,\n  StopReason,\n  GenerateOptions,\n  PartialReturn,\n} from '@agenite/llm';\nimport type { OpenAIConfig } from './types';\n\n/**\n * Maps OpenAI finish reasons to our standard stop reasons\n */\nfunction mapStopReason(finishReason: string | null): StopReason | undefined {\n  if (!finishReason) return undefined;\n\n  const stopReasonMap: Record<string, StopReason> = {\n    stop: 'endTurn',\n    length: 'maxTokens',\n    tool_calls: 'toolUse',\n  };\n\n  return stopReasonMap[finishReason] || undefined;\n}\n\n/**\n * Maps OpenAI content to our standard content blocks\n */\nfunction mapContent(\n  content: string | null,\n  toolCalls?: OpenAI.Chat.ChatCompletionMessageToolCall[]\n): ContentBlock[] {\n  const blocks: ContentBlock[] = [];\n\n  if (content) {\n    blocks.push({ type: 'text', text: content });\n  }\n\n  if (toolCalls) {\n    toolCalls.forEach((toolCall) => {\n      blocks.push({\n        type: 'toolUse',\n        id: toolCall.id,\n        name: toolCall.function.name,\n        input: JSON.parse(toolCall.function.arguments),\n      });\n    });\n  }\n\n  return blocks;\n}\n\n/**\n * Converts our message format to OpenAI's format\n */\nfunction convertMessages(\n  messages: BaseMessage[]\n): OpenAI.Chat.ChatCompletionMessageParam[] {\n  return messages.map((msg): OpenAI.Chat.ChatCompletionMessageParam => {\n    const content = msg.content\n      .map((block) => {\n        if (block.type === 'text') return block.text;\n        return '';\n      })\n      .filter(Boolean)\n      .join('\\n');\n\n    return {\n      role: msg.role,\n      content,\n    };\n  });\n}\n\nexport class OpenAIProvider extends BaseLLMProvider {\n  private client: OpenAI;\n  private model: string;\n  readonly name = 'OpenAI';\n  readonly version = '1.0';\n\n  constructor(config: OpenAIConfig) {\n    super();\n    this.client = new OpenAI({\n      apiKey: config.apiKey,\n    });\n    this.model = config.model ?? 'gpt-4-turbo-preview';\n  }\n\n  async generate(\n    input: string | BaseMessage[],\n    options?: Partial<GenerateOptions>\n  ): Promise<GenerateResponse> {\n    try {\n      const messageArray = convertStringToMessages(input);\n      const transformedMessages = convertMessages(messageArray);\n\n      if (options?.systemPrompt) {\n        transformedMessages.unshift({\n          role: 'system',\n          content: options.systemPrompt,\n        });\n      }\n\n      const response = await this.client.chat.completions.create({\n        model: this.model,\n        messages: transformedMessages,\n        temperature: options?.temperature,\n        max_tokens: options?.maxTokens,\n        stop: options?.stopSequences,\n        tools: options?.tools?.map((tool) => ({\n          type: 'function' as const,\n          function: {\n            name: tool.name,\n            description: tool.description,\n            parameters: tool.inputSchema,\n          },\n        })),\n      });\n\n      const choice = response.choices[0];\n      if (!choice) throw new Error('No completion choice returned');\n\n      return {\n        content: mapContent(choice.message.content, choice.message.tool_calls),\n        stopReason: mapStopReason(choice.finish_reason),\n        tokenUsage: {\n          model: response.model,\n          inputTokens: response.usage?.prompt_tokens ?? 0,\n          outputTokens: response.usage?.completion_tokens ?? 0,\n          inputCost: 0,\n          outputCost: 0,\n        },\n      };\n    } catch (error) {\n      console.error('OpenAI generation failed:', error);\n      throw error instanceof Error\n        ? new Error(`OpenAI generation failed: ${error.message}`)\n        : new Error('OpenAI generation failed with unknown error');\n    }\n  }\n\n  async *stream(\n    input: string | BaseMessage[],\n    options?: Partial<GenerateOptions>\n  ): AsyncGenerator<PartialReturn, GenerateResponse, unknown> {\n    try {\n      const messageArray = convertStringToMessages(input);\n      const transformedMessages = convertMessages(messageArray);\n\n      if (options?.systemPrompt) {\n        transformedMessages.unshift({\n          role: 'system',\n          content: options.systemPrompt,\n        });\n      }\n\n      const streamResponse = await this.client.chat.completions.create({\n        model: this.model,\n        messages: transformedMessages,\n        temperature: options?.temperature,\n        max_tokens: options?.maxTokens,\n        stop: options?.stopSequences,\n        tools: options?.tools?.map((tool) => ({\n          type: 'function' as const,\n          function: {\n            name: tool.name,\n            description: tool.description,\n            parameters: tool.inputSchema,\n          },\n        })),\n        stream: true,\n      });\n\n      let buffer = '';\n      for await (const chunk of streamResponse) {\n        const content = chunk.choices[0]?.delta?.content;\n        if (content) {\n          buffer += content;\n\n          if (buffer.length > 10) {\n            yield {\n              type: 'text',\n              text: buffer,\n            };\n            buffer = '';\n          }\n        }\n      }\n\n      if (buffer.length > 0) {\n        yield {\n          type: 'text',\n          text: buffer,\n        };\n      }\n\n      // Get the final completion for metadata\n      const completion = await this.client.chat.completions.create({\n        model: this.model,\n        messages: transformedMessages,\n        temperature: options?.temperature,\n        max_tokens: options?.maxTokens,\n        stop: options?.stopSequences,\n        tools: options?.tools?.map((tool) => ({\n          type: 'function' as const,\n          function: {\n            name: tool.name,\n            description: tool.description,\n            parameters: tool.inputSchema,\n          },\n        })),\n      });\n\n      const choice = completion.choices[0];\n      if (!choice) throw new Error('No completion choice returned');\n\n      return {\n        content: mapContent(choice.message.content, choice.message.tool_calls),\n        stopReason: mapStopReason(choice.finish_reason),\n        tokenUsage: {\n          model: completion.model,\n          inputTokens: completion.usage?.prompt_tokens ?? 0,\n          outputTokens: completion.usage?.completion_tokens ?? 0,\n          inputCost: 0,\n          outputCost: 0,\n        },\n      };\n    } catch (error) {\n      console.error('OpenAI generation failed:', error);\n      throw error instanceof Error\n        ? new Error(`OpenAI generation failed: ${error.message}`)\n        : new Error('OpenAI generation failed with unknown error');\n    }\n  }\n}\n"]}