@robota-sdk/openai
Version:
OpenAI integration for Robota SDK - GPT-4, GPT-3.5, function calling, and tool integration with OpenAI's API
1 lines • 31.6 kB
Source Map (JSON)
{"version":3,"sources":["../src/adapter.ts","../src/payload-logger.ts","../src/provider.ts"],"names":["path","fs","BaseAIProvider","logger"],"mappings":"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","file":"index.cjs","sourcesContent":["import OpenAI from 'openai';\nimport type { UniversalMessage, UserMessage, AssistantMessage, SystemMessage, ToolMessage } from '@robota-sdk/core';\n\n/**\n * OpenAI ConversationHistory adapter\n * \n * Converts UniversalMessage to OpenAI Chat Completions API format\n */\nexport class OpenAIConversationAdapter {\n /**\n * Filter messages for OpenAI compatibility\n * \n * OpenAI has specific requirements:\n * - Tool messages must have valid toolCallId\n * - Messages must be in proper sequence\n * - Tool messages without toolCallId should be excluded\n */\n static filterMessagesForOpenAI(messages: UniversalMessage[]): UniversalMessage[] {\n return messages.filter(msg => {\n // Always include user, assistant, and system messages\n if (msg.role === 'user' || msg.role === 'assistant' || msg.role === 'system') {\n return true;\n }\n\n // For tool messages, only include if they have a valid toolCallId\n if (msg.role === 'tool') {\n const toolMsg = msg as ToolMessage;\n // Must have toolCallId and it must not be empty or 'unknown'\n return !!(toolMsg.toolCallId &&\n toolMsg.toolCallId.trim() !== '' &&\n toolMsg.toolCallId !== 'unknown');\n }\n\n return false;\n });\n }\n\n /**\n * Convert UniversalMessage array to OpenAI message format\n * Now properly handles tool messages for OpenAI's tool calling feature\n */\n static toOpenAIFormat(messages: UniversalMessage[]): OpenAI.Chat.ChatCompletionMessageParam[] {\n // First filter messages for OpenAI compatibility\n const filteredMessages = this.filterMessagesForOpenAI(messages);\n return filteredMessages.map(msg => this.convertMessage(msg));\n }\n\n /**\n * Convert a single UniversalMessage to OpenAI format\n * Handles all message types including tool messages\n */\n static convertMessage(msg: UniversalMessage): OpenAI.Chat.ChatCompletionMessageParam {\n const messageRole = msg.role;\n\n if (messageRole === 'user') {\n const userMsg = msg as UserMessage;\n const result: OpenAI.Chat.ChatCompletionUserMessageParam = {\n role: 'user',\n content: userMsg.content\n };\n if (userMsg.name) {\n result.name = userMsg.name;\n }\n return result;\n }\n\n if (messageRole === 'assistant') {\n const assistantMsg = msg as AssistantMessage;\n\n // Handle tool_calls format\n if (assistantMsg.toolCalls && assistantMsg.toolCalls.length > 0) {\n const result: OpenAI.Chat.ChatCompletionAssistantMessageParam = {\n role: 'assistant',\n content: assistantMsg.content || null,\n tool_calls: assistantMsg.toolCalls.map(toolCall => ({\n id: toolCall.id,\n type: 'function',\n function: {\n name: toolCall.function.name,\n arguments: toolCall.function.arguments\n }\n }))\n };\n return result;\n }\n\n // Regular assistant message\n return {\n role: 'assistant',\n content: assistantMsg.content || ''\n };\n }\n\n if (messageRole === 'system') {\n const systemMsg = msg as SystemMessage;\n return {\n role: 'system',\n content: systemMsg.content\n };\n }\n\n // Handle tool messages for OpenAI tool calling\n if (messageRole === 'tool') {\n const toolMsg = msg as ToolMessage;\n const result: OpenAI.Chat.ChatCompletionToolMessageParam = {\n role: 'tool',\n content: toolMsg.content,\n tool_call_id: toolMsg.toolCallId || 'unknown'\n };\n return result;\n }\n\n // This should never happen but TypeScript requires exhaustive checking\n const _exhaustiveCheck: never = msg;\n return _exhaustiveCheck;\n }\n\n /**\n * Add system prompt to message array if needed\n */\n static addSystemPromptIfNeeded(\n messages: OpenAI.Chat.ChatCompletionMessageParam[],\n systemPrompt?: string\n ): OpenAI.Chat.ChatCompletionMessageParam[] {\n if (!systemPrompt) {\n return messages;\n }\n\n // Check if system message already exists\n const hasSystemMessage = messages.some(msg => msg.role === 'system');\n\n if (hasSystemMessage) {\n return messages;\n }\n\n // Add system prompt at the beginning\n return [\n { role: 'system', content: systemPrompt },\n ...messages\n ];\n }\n} ","import * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Utility class for logging OpenAI API payloads to files\n */\nexport class PayloadLogger {\n private readonly enabled: boolean;\n private readonly logDir: string;\n private readonly includeTimestamp: boolean;\n\n constructor(\n enabled: boolean = false,\n logDir: string = './logs/api-payloads',\n includeTimestamp: boolean = true\n ) {\n this.enabled = enabled;\n this.logDir = logDir;\n this.includeTimestamp = includeTimestamp;\n\n if (this.enabled) {\n this.ensureLogDirectoryExists();\n }\n }\n\n /**\n * Log API payload to file\n * @param payload - The API request payload\n * @param type - Type of request ('chat' or 'stream')\n */\n async logPayload(payload: any, type: 'chat' | 'stream' = 'chat'): Promise<void> {\n if (!this.enabled) {\n return;\n }\n\n try {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const filename = this.includeTimestamp\n ? `openai-${type}-${timestamp}.json`\n : `openai-${type}-${Date.now()}.json`;\n\n const filepath = path.join(this.logDir, filename);\n\n const logData = {\n timestamp: new Date().toISOString(),\n type,\n provider: 'openai',\n payload: this.sanitizePayload(payload)\n };\n\n await fs.promises.writeFile(\n filepath,\n JSON.stringify(logData, null, 2),\n 'utf8'\n );\n\n // Payload saved successfully\n } catch (error) {\n // Don't throw errors - just log them and continue\n // Failed to save payload log file - silently continue\n }\n }\n\n /**\n * Ensure log directory exists\n */\n private ensureLogDirectoryExists(): void {\n if (!fs.existsSync(this.logDir)) {\n try {\n fs.mkdirSync(this.logDir, { recursive: true });\n // Log directory created successfully\n } catch (error) {\n // Don't throw errors - just log them and disable logging\n // Failed to create log directory - payload logging will be disabled\n // Note: We don't disable this.enabled here as it's readonly, but errors will be caught in logPayload\n }\n }\n }\n\n /**\n * Sanitize payload to remove sensitive information\n * @param payload - Raw payload object\n * @returns Sanitized payload\n */\n private sanitizePayload(payload: any): any {\n // Create a deep copy to avoid modifying original\n const sanitized = JSON.parse(JSON.stringify(payload));\n\n // Remove or mask sensitive data if needed\n // For now, we keep everything as OpenAI payloads don't contain API keys\n return sanitized;\n }\n\n /**\n * Check if logging is enabled\n */\n isEnabled(): boolean {\n return this.enabled;\n }\n} ","import OpenAI from 'openai';\nimport {\n Context,\n ModelResponse,\n StreamingResponseChunk,\n BaseAIProvider,\n logger\n} from '@robota-sdk/core';\nimport type { FunctionSchema } from '@robota-sdk/tools';\nimport { OpenAIProviderOptions } from './types';\nimport { OpenAIConversationAdapter } from './adapter';\nimport { PayloadLogger } from './payload-logger';\n\n/**\n * OpenAI AI provider implementation for Robota\n * \n * Provides integration with OpenAI's GPT models and other services.\n * Extends BaseAIProvider for common functionality and tool calling support.\n * \n * @see {@link ../../../apps/examples/03-integrations | Provider Integration Examples}\n * \n * @public\n */\nexport class OpenAIProvider extends BaseAIProvider {\n /**\n * Provider identifier name\n * @readonly\n */\n public readonly name: string = 'openai';\n\n /**\n * OpenAI client instance\n * @internal\n */\n private readonly client: OpenAI;\n\n /**\n * Client type identifier\n * @readonly\n */\n public readonly type: string = 'openai';\n\n /**\n * OpenAI client instance (alias for backwards compatibility)\n * @readonly\n * @deprecated Use the private client property instead\n */\n public readonly instance: OpenAI;\n\n /**\n * Provider configuration options\n * @readonly\n */\n public readonly options: OpenAIProviderOptions;\n\n /**\n * Payload logger for API request logging\n * @internal\n */\n private readonly payloadLogger: PayloadLogger;\n\n /**\n * Create a new OpenAI provider instance\n * \n * @param options - Configuration options for the OpenAI provider\n * \n * @throws {Error} When client is not provided in options\n */\n constructor(options: OpenAIProviderOptions) {\n super();\n\n this.options = {\n temperature: 0.7,\n maxTokens: undefined,\n ...options\n };\n\n // Validate required client injection\n if (!options.client) {\n throw new Error('OpenAI client is not injected. The client option is required.');\n }\n\n this.client = options.client;\n this.instance = options.client; // Maintain backwards compatibility\n\n // Initialize payload logger\n this.payloadLogger = new PayloadLogger(\n this.options.enablePayloadLogging || false,\n this.options.payloadLogDir || './logs/api-payloads',\n this.options.includeTimestampInLogFiles !== false\n );\n }\n\n /**\n * Convert function definitions to OpenAI tool format\n * \n * Transforms universal function definitions into OpenAI's specific tool format\n * required by the Chat Completions API.\n * \n * @param functions - Array of universal function definitions\n * @returns Array of OpenAI-formatted tools\n */\n formatFunctions(functions: FunctionSchema[]): OpenAI.Chat.ChatCompletionTool[] {\n return functions.map(fn => ({\n type: 'function',\n function: {\n name: fn.name,\n description: fn.description || '',\n parameters: fn.parameters\n }\n }));\n }\n\n /**\n * Filter conversation history for OpenAI API compatibility\n * \n * Converts messages to OpenAI format and filters out invalid tool messages.\n * \n * @param messages - Array of messages to filter\n * @returns OpenAI-formatted messages array\n */\n private filterHistory(messages: any[]): OpenAI.Chat.ChatCompletionMessageParam[] {\n return OpenAIConversationAdapter.toOpenAIFormat(messages);\n }\n\n /**\n * Configure tools for OpenAI API request\n * \n * Transforms function schemas into OpenAI tool format and sets tool_choice.\n * \n * @param tools - Array of function schemas\n * @returns OpenAI tool configuration object\n */\n protected configureTools(tools?: FunctionSchema[]): { tools: OpenAI.Chat.ChatCompletionTool[], tool_choice: 'auto' } | undefined {\n if (!tools || !Array.isArray(tools)) {\n return undefined;\n }\n\n return {\n tools: this.formatFunctions(tools),\n tool_choice: 'auto' // Force new tool_calls format\n };\n }\n\n /**\n * Send a chat request to OpenAI and receive a complete response\n * \n * Processes the provided context and sends it to OpenAI's Chat Completions API.\n * Handles message format conversion, error handling, and response parsing.\n * \n * @param model - Model name to use (e.g., 'gpt-4', 'gpt-3.5-turbo')\n * @param context - Context object containing messages and system prompt\n * @param options - Optional generation parameters and tools\n * @returns Promise resolving to the model's response\n * \n * @throws {Error} When context is invalid\n * @throws {Error} When messages array is invalid\n * @throws {Error} When message format conversion fails\n * @throws {Error} When OpenAI API call fails\n */\n async chat(model: string, context: Context, options?: any): Promise<ModelResponse> {\n // Use base class validation\n this.validateContext(context);\n\n // Filter messages for OpenAI API\n const openaiMessages = this.filterHistory(context.messages);\n\n const completionOptions: OpenAI.Chat.ChatCompletionCreateParams = {\n model,\n messages: openaiMessages,\n max_tokens: options?.maxTokens || this.options.maxTokens,\n temperature: options?.temperature || this.options.temperature,\n };\n\n // Configure tools if provided\n const toolConfig = this.configureTools(options?.tools);\n if (toolConfig) {\n completionOptions.tools = toolConfig.tools;\n completionOptions.tool_choice = toolConfig.tool_choice;\n }\n\n // Set response format if specified\n if (this.options.responseFormat) {\n if (this.options.responseFormat === 'text') {\n completionOptions.response_format = { type: 'text' };\n } else if (this.options.responseFormat === 'json_object') {\n completionOptions.response_format = { type: 'json_object' };\n } else if (this.options.responseFormat === 'json_schema') {\n if (!this.options.jsonSchema) {\n throw new Error('jsonSchema is required when responseFormat is \"json_schema\"');\n }\n completionOptions.response_format = {\n type: 'json_schema',\n json_schema: this.options.jsonSchema\n };\n }\n }\n\n try {\n // Log payload if enabled\n await this.payloadLogger.logPayload(completionOptions, 'chat');\n\n const response = await this.client.chat.completions.create(completionOptions);\n return this.parseResponse(response);\n } catch (error) {\n this.handleApiError(error, 'chat');\n }\n }\n\n /**\n * Convert OpenAI API response to universal ModelResponse format\n * \n * Transforms the OpenAI-specific response format into the standard format\n * used across all providers in Robota.\n * \n * @param response - Raw response from OpenAI Chat Completions API\n * @returns Parsed model response in universal format\n * \n * @internal\n */\n parseResponse(response: OpenAI.Chat.ChatCompletion): ModelResponse {\n const message = response.choices[0].message;\n\n const result: ModelResponse = {\n content: message.content || undefined,\n usage: response.usage ? {\n promptTokens: response.usage.prompt_tokens,\n completionTokens: response.usage.completion_tokens,\n totalTokens: response.usage.total_tokens\n } : undefined,\n metadata: {\n model: response.model,\n finishReason: response.choices[0].finish_reason,\n systemFingerprint: response.system_fingerprint\n }\n };\n\n // Handle tool calls\n if (message.tool_calls && message.tool_calls.length > 0) {\n result.toolCalls = message.tool_calls.map(toolCall => ({\n id: toolCall.id,\n type: 'function' as const,\n function: {\n name: toolCall.function.name,\n arguments: toolCall.function.arguments\n }\n }));\n }\n\n return result;\n }\n\n /**\n * Convert OpenAI streaming response chunk to universal format\n * \n * Transforms individual chunks from OpenAI's streaming response into the\n * standard StreamingResponseChunk format used across all providers.\n * \n * @param chunk - Raw chunk from OpenAI streaming API\n * @returns Parsed streaming response chunk\n * \n * @internal\n */\n parseStreamingChunk(chunk: OpenAI.Chat.ChatCompletionChunk): StreamingResponseChunk {\n const delta = chunk.choices[0].delta;\n\n const result: StreamingResponseChunk = {\n content: delta.content || undefined,\n isComplete: chunk.choices[0].finish_reason !== null\n };\n\n // Handle tool call chunks\n if (delta.tool_calls && delta.tool_calls.length > 0) {\n const toolCall = delta.tool_calls[0];\n if (toolCall.type === 'function') {\n result.functionCall = {\n name: toolCall.function?.name,\n arguments: toolCall.function?.arguments\n };\n }\n }\n\n return result;\n }\n\n /**\n * Send a streaming chat request to OpenAI and receive response chunks\n * \n * Similar to chat() but returns an async iterator that yields response chunks\n * as they arrive from OpenAI's streaming API. Useful for real-time display\n * of responses or handling large responses incrementally.\n * \n * @param model - Model name to use\n * @param context - Context object containing messages and system prompt\n * @param options - Optional generation parameters and tools\n * @returns Async generator yielding response chunks\n * \n * @throws {Error} When context is invalid\n * @throws {Error} When messages array is invalid\n * @throws {Error} When message format conversion fails\n * @throws {Error} When OpenAI streaming API call fails\n * \n * @see {@link ../../../apps/examples/01-basic | Basic Usage Examples}\n */\n async *chatStream(model: string, context: Context, options?: any): AsyncGenerator<StreamingResponseChunk, void, unknown> {\n // Validate context parameter\n if (!context || typeof context !== 'object') {\n logger.error('[OpenAIProvider] Invalid context:', context);\n throw new Error('Valid Context object is required');\n }\n\n const { messages } = context;\n\n // Validate messages array\n if (!Array.isArray(messages)) {\n logger.error('[OpenAIProvider] Invalid message array:', messages);\n throw new Error('Valid message array is required');\n }\n\n // Convert messages to OpenAI format and filter out tool messages\n const openaiMessages = OpenAIConversationAdapter.toOpenAIFormat(context.messages);\n\n const completionOptions: OpenAI.Chat.ChatCompletionCreateParams = {\n model,\n messages: openaiMessages,\n max_tokens: options?.maxTokens || this.options.maxTokens,\n temperature: options?.temperature || this.options.temperature,\n stream: true\n };\n\n // Add tool provider functions\n if (options?.tools && Array.isArray(options.tools)) {\n completionOptions.tools = this.formatFunctions(options.tools);\n // Force new tool_calls format by setting tool_choice\n completionOptions.tool_choice = 'auto';\n }\n\n // Set response format if specified\n if (this.options.responseFormat) {\n if (this.options.responseFormat === 'text') {\n completionOptions.response_format = { type: 'text' };\n } else if (this.options.responseFormat === 'json_object') {\n completionOptions.response_format = { type: 'json_object' };\n } else if (this.options.responseFormat === 'json_schema') {\n if (!this.options.jsonSchema) {\n throw new Error('jsonSchema is required when responseFormat is \"json_schema\"');\n }\n completionOptions.response_format = {\n type: 'json_schema',\n json_schema: this.options.jsonSchema\n };\n }\n }\n\n try {\n // Log payload if enabled\n await this.payloadLogger.logPayload(completionOptions, 'stream');\n\n const stream = await this.client.chat.completions.create(completionOptions);\n\n for await (const chunk of stream) {\n yield this.parseStreamingChunk(chunk);\n }\n } catch (error) {\n logger.error('[OpenAIProvider] Streaming API call error:', error);\n throw error;\n }\n }\n\n /**\n * Release resources and close connections\n * \n * Performs cleanup operations when the provider is no longer needed.\n * OpenAI client doesn't require explicit cleanup, so this is a no-op.\n * \n * @returns Promise that resolves when cleanup is complete\n */\n async close(): Promise<void> {\n // OpenAI client doesn't have explicit close method\n // This is implemented as no-op for interface compliance\n }\n} "]}