diff --git a/package.json b/package.json index 5a9239f..6b7fc9a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "promptl-ai", - "version": "0.7.1", + "version": "0.7.2", "author": "Latitude Data", "license": "MIT", "description": "Compiler for PromptL, the prompt language", @@ -20,9 +20,7 @@ } } }, - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "dev": "rollup -c -w", "build": "rollup -c", diff --git a/src/providers/openai-responses/adapter.ts b/src/providers/openai-responses/adapter.ts index a9305ff..c767eb1 100644 --- a/src/providers/openai-responses/adapter.ts +++ b/src/providers/openai-responses/adapter.ts @@ -99,7 +99,7 @@ function fromPromptlContentToOpenAIResponseContent( file_data: toOpenAiFileData(item), }) return acc - } else if (ContentType.toolCall) { + } else if (type === ContentType.toolCall) { acc.toolCalls.push({ type: 'function_call', call_id: item.toolCallId, @@ -154,68 +154,68 @@ type ToolMappings = { } const fromOpenAiResponseToPromptlMessage = (toolMappings: ToolMappings) => - (message: MessageInputItem): PromptlMessage | null => { - if (isReasoning(message)) { - return parseReasoning(message) - } - - if (isOutputMessage(message)) { - return parseOutputMessage({ - message, - webSearch: toolMappings.websearch, - fileSearch: toolMappings.fileSearch, - }) - } + (message: MessageInputItem): PromptlMessage | null => { + if (isReasoning(message)) { + return parseReasoning(message) + } - if (isInputMessage(message)) { - return parseInputMessage(message) - } + if (isOutputMessage(message)) { + return parseOutputMessage({ + message, + webSearch: toolMappings.websearch, + fileSearch: toolMappings.fileSearch, + }) + } - if (isFunctionCall(message)) { - toolMappings.userTools.set(message.call_id, message.name) - return parseFunctionCall(message) - } + if (isInputMessage(message)) { + return parseInputMessage(message) + } - if (isFunctionCallOutput(message)) { - return parseFunctionCallOutput({ - message, - toolNameMap: toolMappings.userTools, - }) - } + if (isFunctionCall(message)) { + toolMappings.userTools.set(message.call_id, message.name) + return parseFunctionCall(message) + } - if (isWebsearchCall(message)) { - return parseWebsearchCall({ - message, - webSearch: toolMappings.websearch, - }) - } + if (isFunctionCallOutput(message)) { + return parseFunctionCallOutput({ + message, + toolNameMap: toolMappings.userTools, + }) + } - if (isFileSearchCall(message)) { - return parseFileSearch({ - message, - fileSearch: toolMappings.fileSearch, - }) - } + if (isWebsearchCall(message)) { + return parseWebsearchCall({ + message, + webSearch: toolMappings.websearch, + }) + } - if (isSimpleInputMessage(message)) { - return parseSimpleInputMessage(message) - } + if (isFileSearchCall(message)) { + return parseFileSearch({ + message, + fileSearch: toolMappings.fileSearch, + }) + } - if (message.type === 'item_reference') return null + if (isSimpleInputMessage(message)) { + return parseSimpleInputMessage(message) + } - if (message.type === 'computer_call') { - throw new Error('Not implemented computer_call') - } + if (message.type === 'item_reference') return null - if (message.type === 'computer_call_output') { - throw new Error('Not implemented computer_call_output') - } + if (message.type === 'computer_call') { + throw new Error('Not implemented computer_call') + } - throw new Error( - `Unknown message type ${message.type} in OpenAIResponse adapter`, - ) + if (message.type === 'computer_call_output') { + throw new Error('Not implemented computer_call_output') } + throw new Error( + `Unknown message type ${message.type} in OpenAIResponse adapter`, + ) + } + export const OpenAIResponsesAdapter: ProviderAdapter = { type: 'openaiResponses', fromPromptl(promptlConversation: PromptlConversation) { diff --git a/src/types/message.ts b/src/types/message.ts index b6a28a9..b2af015 100644 --- a/src/types/message.ts +++ b/src/types/message.ts @@ -5,6 +5,7 @@ export enum ContentType { image = 'image', file = 'file', toolCall = 'tool-call', + toolResult = 'tool-result', } export enum ContentTypeTagName { @@ -50,11 +51,20 @@ export type ToolCallContent = { toolArguments: Record } +export type ToolResultContent = { + type: ContentType.toolResult + toolCallId: string + toolName: string + result: unknown + isError?: boolean +} + export type MessageContent = | TextContent | ImageContent | FileContent | ToolCallContent + | ToolResultContent /* Message */ @@ -95,9 +105,14 @@ export type ToolMessage = IMessage & { toolId: string } +export type ToolResultMessage = IMessage & { + role: MessageRole.tool +} + export type Message = | SystemMessage | DeveloperMessage | UserMessage | AssistantMessage | ToolMessage + | ToolResultMessage