Skip to content

Commit 1ec12e2

Browse files
committed
feat: add tool result content type
1 parent c0c0be8 commit 1ec12e2

File tree

3 files changed

+68
-55
lines changed

3 files changed

+68
-55
lines changed

package.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "promptl-ai",
3-
"version": "0.7.1",
3+
"version": "0.7.2",
44
"author": "Latitude Data",
55
"license": "MIT",
66
"description": "Compiler for PromptL, the prompt language",
@@ -20,9 +20,7 @@
2020
}
2121
}
2222
},
23-
"files": [
24-
"dist"
25-
],
23+
"files": ["dist"],
2624
"scripts": {
2725
"dev": "rollup -c -w",
2826
"build": "rollup -c",

src/providers/openai-responses/adapter.ts

Lines changed: 51 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ function fromPromptlContentToOpenAIResponseContent(
9999
file_data: toOpenAiFileData(item),
100100
})
101101
return acc
102-
} else if (ContentType.toolCall) {
102+
} else if (type === ContentType.toolCall) {
103103
acc.toolCalls.push({
104104
type: 'function_call',
105105
call_id: item.toolCallId,
@@ -154,68 +154,68 @@ type ToolMappings = {
154154
}
155155
const fromOpenAiResponseToPromptlMessage =
156156
(toolMappings: ToolMappings) =>
157-
(message: MessageInputItem): PromptlMessage | null => {
158-
if (isReasoning(message)) {
159-
return parseReasoning(message)
160-
}
161-
162-
if (isOutputMessage(message)) {
163-
return parseOutputMessage({
164-
message,
165-
webSearch: toolMappings.websearch,
166-
fileSearch: toolMappings.fileSearch,
167-
})
168-
}
157+
(message: MessageInputItem): PromptlMessage | null => {
158+
if (isReasoning(message)) {
159+
return parseReasoning(message)
160+
}
169161

170-
if (isInputMessage(message)) {
171-
return parseInputMessage(message)
172-
}
162+
if (isOutputMessage(message)) {
163+
return parseOutputMessage({
164+
message,
165+
webSearch: toolMappings.websearch,
166+
fileSearch: toolMappings.fileSearch,
167+
})
168+
}
173169

174-
if (isFunctionCall(message)) {
175-
toolMappings.userTools.set(message.call_id, message.name)
176-
return parseFunctionCall(message)
177-
}
170+
if (isInputMessage(message)) {
171+
return parseInputMessage(message)
172+
}
178173

179-
if (isFunctionCallOutput(message)) {
180-
return parseFunctionCallOutput({
181-
message,
182-
toolNameMap: toolMappings.userTools,
183-
})
184-
}
174+
if (isFunctionCall(message)) {
175+
toolMappings.userTools.set(message.call_id, message.name)
176+
return parseFunctionCall(message)
177+
}
185178

186-
if (isWebsearchCall(message)) {
187-
return parseWebsearchCall({
188-
message,
189-
webSearch: toolMappings.websearch,
190-
})
191-
}
179+
if (isFunctionCallOutput(message)) {
180+
return parseFunctionCallOutput({
181+
message,
182+
toolNameMap: toolMappings.userTools,
183+
})
184+
}
192185

193-
if (isFileSearchCall(message)) {
194-
return parseFileSearch({
195-
message,
196-
fileSearch: toolMappings.fileSearch,
197-
})
198-
}
186+
if (isWebsearchCall(message)) {
187+
return parseWebsearchCall({
188+
message,
189+
webSearch: toolMappings.websearch,
190+
})
191+
}
199192

200-
if (isSimpleInputMessage(message)) {
201-
return parseSimpleInputMessage(message)
202-
}
193+
if (isFileSearchCall(message)) {
194+
return parseFileSearch({
195+
message,
196+
fileSearch: toolMappings.fileSearch,
197+
})
198+
}
203199

204-
if (message.type === 'item_reference') return null
200+
if (isSimpleInputMessage(message)) {
201+
return parseSimpleInputMessage(message)
202+
}
205203

206-
if (message.type === 'computer_call') {
207-
throw new Error('Not implemented computer_call')
208-
}
204+
if (message.type === 'item_reference') return null
209205

210-
if (message.type === 'computer_call_output') {
211-
throw new Error('Not implemented computer_call_output')
212-
}
206+
if (message.type === 'computer_call') {
207+
throw new Error('Not implemented computer_call')
208+
}
213209

214-
throw new Error(
215-
`Unknown message type ${message.type} in OpenAIResponse adapter`,
216-
)
210+
if (message.type === 'computer_call_output') {
211+
throw new Error('Not implemented computer_call_output')
217212
}
218213

214+
throw new Error(
215+
`Unknown message type ${message.type} in OpenAIResponse adapter`,
216+
)
217+
}
218+
219219
export const OpenAIResponsesAdapter: ProviderAdapter<MessageInputItem> = {
220220
type: 'openaiResponses',
221221
fromPromptl(promptlConversation: PromptlConversation) {

src/types/message.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export enum ContentType {
55
image = 'image',
66
file = 'file',
77
toolCall = 'tool-call',
8+
toolResult = 'tool-result',
89
}
910

1011
export enum ContentTypeTagName {
@@ -50,11 +51,20 @@ export type ToolCallContent = {
5051
toolArguments: Record<string, unknown>
5152
}
5253

54+
export type ToolResultContent = {
55+
type: ContentType.toolResult
56+
toolCallId: string
57+
toolName: string
58+
result: unknown
59+
isError?: boolean
60+
}
61+
5362
export type MessageContent =
5463
| TextContent
5564
| ImageContent
5665
| FileContent
5766
| ToolCallContent
67+
| ToolResultContent
5868

5969
/* Message */
6070

@@ -95,9 +105,14 @@ export type ToolMessage = IMessage & {
95105
toolId: string
96106
}
97107

108+
export type ToolResultMessage = IMessage & {
109+
role: MessageRole.tool
110+
}
111+
98112
export type Message =
99113
| SystemMessage
100114
| DeveloperMessage
101115
| UserMessage
102116
| AssistantMessage
103117
| ToolMessage
118+
| ToolResultMessage

0 commit comments

Comments
 (0)