@cloudbase/agent-adapter-openai-agent-sdk 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +66 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +9 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +13 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,71 @@
|
|
|
1
1
|
# @cloudbase/agent-adapter-openai-agent-sdk
|
|
2
2
|
|
|
3
|
+
## 0.0.11-alpha.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- alpha release 0.0.10-alpha.2
|
|
8
|
+
- Update all public packages to version 0.0.10-alpha.2
|
|
9
|
+
- Trigger automated alpha release workflow
|
|
10
|
+
- Includes latest features and improvements
|
|
11
|
+
|
|
12
|
+
- Updated dependencies
|
|
13
|
+
- @cloudbase/agent-agents@0.0.11-alpha.3
|
|
14
|
+
|
|
15
|
+
## 0.0.11-alpha.2
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- alpha release 0.0.10-alpha.2
|
|
20
|
+
- Update all public packages to version 0.0.10-alpha.2
|
|
21
|
+
- Trigger automated alpha release workflow
|
|
22
|
+
- Includes latest features and improvements
|
|
23
|
+
|
|
24
|
+
- Updated dependencies
|
|
25
|
+
- @cloudbase/agent-agents@0.0.11-alpha.2
|
|
26
|
+
|
|
27
|
+
## 0.0.11-alpha.1
|
|
28
|
+
|
|
29
|
+
### Patch Changes
|
|
30
|
+
|
|
31
|
+
- alpha release 0.0.10-alpha.2
|
|
32
|
+
- Update all public packages to version 0.0.10-alpha.2
|
|
33
|
+
- Trigger automated alpha release workflow
|
|
34
|
+
- Includes latest features and improvements
|
|
35
|
+
|
|
36
|
+
- Updated dependencies
|
|
37
|
+
- @cloudbase/agent-agents@0.0.11-alpha.1
|
|
38
|
+
|
|
39
|
+
## 0.0.11-alpha.0
|
|
40
|
+
|
|
41
|
+
### Patch Changes
|
|
42
|
+
|
|
43
|
+
- 97b2740: alpha release 0.0.10-alpha.2
|
|
44
|
+
- Update all public packages to version 0.0.10-alpha.2
|
|
45
|
+
- Trigger automated alpha release workflow
|
|
46
|
+
- Includes latest features and improvements
|
|
47
|
+
|
|
48
|
+
- fd4c62a: alpha release 0.0.10-alpha.2
|
|
49
|
+
- Update all public packages to version 0.0.10-alpha.2
|
|
50
|
+
- Trigger automated alpha release workflow
|
|
51
|
+
- Includes latest features and improvements
|
|
52
|
+
|
|
53
|
+
- da3388c: alpha release 0.0.10-alpha.2
|
|
54
|
+
- Update all public packages to version 0.0.10-alpha.2
|
|
55
|
+
- Trigger automated alpha release workflow
|
|
56
|
+
- Includes latest features and improvements
|
|
57
|
+
|
|
58
|
+
- alpha release 0.0.10-alpha.2
|
|
59
|
+
- Update all public packages to version 0.0.10-alpha.2
|
|
60
|
+
- Trigger automated alpha release workflow
|
|
61
|
+
- Includes latest features and improvements
|
|
62
|
+
|
|
63
|
+
- Updated dependencies [97b2740]
|
|
64
|
+
- Updated dependencies [fd4c62a]
|
|
65
|
+
- Updated dependencies [da3388c]
|
|
66
|
+
- Updated dependencies
|
|
67
|
+
- @cloudbase/agent-agents@0.0.11-alpha.0
|
|
68
|
+
|
|
3
69
|
## 0.0.10
|
|
4
70
|
|
|
5
71
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -14,7 +14,7 @@ declare class OpenAIAgent extends AbstractAgent {
|
|
|
14
14
|
private runner;
|
|
15
15
|
private memory;
|
|
16
16
|
constructor(agentConfig: OpenAIAgentConfig);
|
|
17
|
-
|
|
17
|
+
run(input: RunAgentInput): Observable<BaseEvent>;
|
|
18
18
|
protected _run(subscriber: Subscriber<BaseEvent>, input: RunAgentInput): Promise<void>;
|
|
19
19
|
}
|
|
20
20
|
|
package/dist/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ declare class OpenAIAgent extends AbstractAgent {
|
|
|
14
14
|
private runner;
|
|
15
15
|
private memory;
|
|
16
16
|
constructor(agentConfig: OpenAIAgentConfig);
|
|
17
|
-
|
|
17
|
+
run(input: RunAgentInput): Observable<BaseEvent>;
|
|
18
18
|
protected _run(subscriber: Subscriber<BaseEvent>, input: RunAgentInput): Promise<void>;
|
|
19
19
|
}
|
|
20
20
|
|
package/dist/index.js
CHANGED
|
@@ -201,13 +201,16 @@ var OpenAIAgent = class extends import_client.AbstractAgent {
|
|
|
201
201
|
}
|
|
202
202
|
await this.memory.clear({ sessionId: threadId });
|
|
203
203
|
for (const message of stream.history) {
|
|
204
|
-
await this.memory.add(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
204
|
+
await this.memory.add(
|
|
205
|
+
{
|
|
206
|
+
message: {
|
|
207
|
+
role: message.role,
|
|
208
|
+
content: message.content
|
|
209
|
+
},
|
|
210
|
+
state: message
|
|
208
211
|
},
|
|
209
|
-
|
|
210
|
-
|
|
212
|
+
{ sessionId: threadId }
|
|
213
|
+
);
|
|
211
214
|
}
|
|
212
215
|
subscriber.next({
|
|
213
216
|
type: import_client.EventType.RUN_FINISHED,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/agent.ts"],"sourcesContent":["export { OpenAIAgent } from './agent';","import { AbstractAgent, AgentConfig, BaseEvent, EventType, RunAgentInput, RunFinishedEvent, RunStartedEvent, TextMessageContentEvent, TextMessageEndEvent, TextMessageStartEvent, ToolCallArgsEvent, ToolCallEndEvent, ToolCallResultEvent, ToolCallStartEvent } from \"@ag-ui/client\";\nimport { Observable, Subscriber } from \"rxjs\";\nimport { Agent, AgentInputItem, Runner, tool } from \"@openai/agents\";\nimport destr from \"destr\";\nimport { InMemoryMemory } from \"@cloudbase/agent-agents\";\n\ntype OpenAIAgentConfig = AgentConfig & {\n agent: Agent;\n runner?: Runner;\n memory?: InMemoryMemory\n};\nexport class OpenAIAgent extends AbstractAgent {\n name: string;\n private agent: Agent;\n private runner: Runner;\n private memory: InMemoryMemory;\n constructor(agentConfig: OpenAIAgentConfig) {\n super(agentConfig);\n this.name = agentConfig.agent.name || 'OpenAI Agent';\n this.agent = agentConfig.agent;\n this.runner = agentConfig.runner ?? new Runner();\n this.memory = agentConfig.memory ?? new InMemoryMemory();\n }\n protected run(input: RunAgentInput): Observable<BaseEvent> {\n return new Observable<BaseEvent>((subscriber) => {\n this._run(subscriber, input);\n });\n }\n protected async _run(subscriber: Subscriber<BaseEvent>, input: RunAgentInput) {\n const { messages, runId, threadId, tools, forwardedProps } = input;\n\n try {\n subscriber.next({\n type: EventType.RUN_STARTED,\n threadId,\n runId,\n } as RunStartedEvent);\n\n const frontendTools = (tools ?? [])?.map((t) => {\n const toolInstance = tool({\n name: t.name,\n description: t.description,\n parameters: destr(t.parameters),\n execute: async (input: any) => {\n throw new Error('Not implemented');\n },\n needsApproval: async (input: any) => {\n return true;\n },\n })\n toolInstance.name = t.name;\n return toolInstance;\n });\n const agent = this.agent.clone({\n // @ts-ignore\n tools: [...this.agent.tools, ...frontendTools],\n });\n const messagesForRun: AgentInputItem[] = [];\n const history = await this.memory.list({ sessionId: threadId });\n for (const historyItem of history) {\n if (historyItem.message.content && historyItem.message.content.length > 0) {\n messagesForRun.push({\n role: historyItem.message.role,\n content: historyItem.message.content,\n });\n } else {\n messagesForRun.push(historyItem.state);\n }\n\n }\n messages.forEach(message => {\n messagesForRun.push(message);\n });\n const stream = await this.runner.run(agent, messagesForRun, {\n stream: true,\n });\n let activeMessageId: string | undefined;\n\n const toolCallSlots: string[] = []\n for await (const event of stream) {\n // LLM model events\n if (event?.type === 'raw_model_stream_event' && event?.data) {\n const data = event.data;\n switch (data.type) {\n case 'response_started': {\n // Start a new assistant message\n activeMessageId = generateId();\n subscriber.next({\n type: EventType.TEXT_MESSAGE_START,\n messageId: activeMessageId,\n role: 'assistant',\n } as TextMessageStartEvent);\n break;\n }\n case 'output_text_delta': {\n const delta: string | undefined = data.delta;\n if (delta && activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: activeMessageId,\n delta,\n } as TextMessageContentEvent);\n }\n break;\n }\n case 'response_done': {\n if (activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_END,\n messageId: activeMessageId,\n } as TextMessageEndEvent);\n activeMessageId = undefined;\n }\n break;\n }\n default: {\n // Try to parse provider chunk for tool call deltas\n const providerChunk = (data as any).event;\n const choices = providerChunk?.choices;\n if (Array.isArray(choices)) {\n for (const choice of choices) {\n const delta = choice?.delta ?? choice?.message?.delta;\n const toolCallsDelta = delta?.tool_calls ?? delta?.tool_calls_delta;\n if (Array.isArray(toolCallsDelta)) {\n for (const callDelta of toolCallsDelta) {\n if (!toolCallSlots[callDelta.index] && callDelta.id) {\n toolCallSlots[callDelta.index] = callDelta.id;\n subscriber.next({\n type: EventType.TOOL_CALL_START,\n toolCallId: callDelta.id,\n toolCallName: callDelta.function?.name,\n } as ToolCallStartEvent);\n if (callDelta.function?.arguments) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: callDelta.id,\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n } else if (toolCallSlots[callDelta.index]) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: toolCallSlots[callDelta.index],\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n }\n }\n if (choice?.finish_reason === 'tool_calls') {\n for (const slot of toolCallSlots) {\n if (slot) {\n subscriber.next({\n type: EventType.TOOL_CALL_END,\n toolCallId: slot,\n } as ToolCallEndEvent);\n }\n }\n }\n }\n }\n\n }\n }\n continue;\n }\n\n // Agent SDK events\n if (event?.type === 'run_item_stream_event' && event?.item) {\n switch (event?.item?.type) {\n case 'tool_call_output_item': {\n subscriber.next({\n messageId: activeMessageId,\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: event?.item?.rawItem.callId,\n threadId,\n runId,\n content: event.item.output\n } as ToolCallResultEvent)\n break;\n }\n }\n }\n // Ignore non-raw events per requirement\n continue;\n }\n await this.memory.clear({ sessionId: threadId });\n for (const message of stream.history) {\n await this.memory.add({\n message: {\n role: message.role,\n content: message.content,\n },\n state: message,\n }, { sessionId: threadId });\n }\n\n subscriber.next({\n type: EventType.RUN_FINISHED,\n threadId,\n runId,\n } as RunFinishedEvent);\n\n } catch (error) {\n subscriber.error(error);\n }\n }\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n"],"mappings":"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","names":["destr","input"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/agent.ts"],"sourcesContent":["export { OpenAIAgent } from './agent';","import {\n AbstractAgent,\n AgentConfig,\n BaseEvent,\n EventType,\n RunAgentInput,\n RunFinishedEvent,\n RunStartedEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n TextMessageStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n ToolCallStartEvent,\n} from \"@ag-ui/client\";\nimport { Observable, Subscriber } from \"rxjs\";\nimport { Agent, AgentInputItem, Runner, tool } from \"@openai/agents\";\nimport destr from \"destr\";\nimport { InMemoryMemory } from \"@cloudbase/agent-agents\";\n\ntype OpenAIAgentConfig = AgentConfig & {\n agent: Agent;\n runner?: Runner;\n memory?: InMemoryMemory;\n};\nexport class OpenAIAgent extends AbstractAgent {\n name: string;\n private agent: Agent;\n private runner: Runner;\n private memory: InMemoryMemory;\n constructor(agentConfig: OpenAIAgentConfig) {\n super(agentConfig);\n this.name = agentConfig.agent.name || \"OpenAI Agent\";\n this.agent = agentConfig.agent;\n this.runner = agentConfig.runner ?? new Runner();\n this.memory = agentConfig.memory ?? new InMemoryMemory();\n }\n run(input: RunAgentInput): Observable<BaseEvent> {\n return new Observable<BaseEvent>((subscriber) => {\n this._run(subscriber, input);\n });\n }\n protected async _run(\n subscriber: Subscriber<BaseEvent>,\n input: RunAgentInput\n ) {\n const { messages, runId, threadId, tools, forwardedProps } = input;\n\n try {\n subscriber.next({\n type: EventType.RUN_STARTED,\n threadId,\n runId,\n } as RunStartedEvent);\n\n const frontendTools = (tools ?? [])?.map((t) => {\n const toolInstance = tool({\n name: t.name,\n description: t.description,\n parameters: destr(t.parameters),\n execute: async (input: any) => {\n throw new Error(\"Not implemented\");\n },\n needsApproval: async (input: any) => {\n return true;\n },\n });\n toolInstance.name = t.name;\n return toolInstance;\n });\n const agent = this.agent.clone({\n // @ts-ignore\n tools: [...this.agent.tools, ...frontendTools],\n });\n const messagesForRun: AgentInputItem[] = [];\n const history = await this.memory.list({ sessionId: threadId });\n for (const historyItem of history) {\n if (\n historyItem.message.content &&\n historyItem.message.content.length > 0\n ) {\n messagesForRun.push({\n role: historyItem.message.role,\n content: historyItem.message.content,\n });\n } else {\n messagesForRun.push(historyItem.state);\n }\n }\n messages.forEach((message) => {\n messagesForRun.push(message);\n });\n const stream = await this.runner.run(agent, messagesForRun, {\n stream: true,\n });\n let activeMessageId: string | undefined;\n\n const toolCallSlots: string[] = [];\n for await (const event of stream) {\n // LLM model events\n if (event?.type === \"raw_model_stream_event\" && event?.data) {\n const data = event.data;\n switch (data.type) {\n case \"response_started\": {\n // Start a new assistant message\n activeMessageId = generateId();\n subscriber.next({\n type: EventType.TEXT_MESSAGE_START,\n messageId: activeMessageId,\n role: \"assistant\",\n } as TextMessageStartEvent);\n break;\n }\n case \"output_text_delta\": {\n const delta: string | undefined = data.delta;\n if (delta && activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: activeMessageId,\n delta,\n } as TextMessageContentEvent);\n }\n break;\n }\n case \"response_done\": {\n if (activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_END,\n messageId: activeMessageId,\n } as TextMessageEndEvent);\n activeMessageId = undefined;\n }\n break;\n }\n default: {\n // Try to parse provider chunk for tool call deltas\n const providerChunk = (data as any).event;\n const choices = providerChunk?.choices;\n if (Array.isArray(choices)) {\n for (const choice of choices) {\n const delta = choice?.delta ?? choice?.message?.delta;\n const toolCallsDelta =\n delta?.tool_calls ?? delta?.tool_calls_delta;\n if (Array.isArray(toolCallsDelta)) {\n for (const callDelta of toolCallsDelta) {\n if (!toolCallSlots[callDelta.index] && callDelta.id) {\n toolCallSlots[callDelta.index] = callDelta.id;\n subscriber.next({\n type: EventType.TOOL_CALL_START,\n toolCallId: callDelta.id,\n toolCallName: callDelta.function?.name,\n } as ToolCallStartEvent);\n if (callDelta.function?.arguments) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: callDelta.id,\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n } else if (toolCallSlots[callDelta.index]) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: toolCallSlots[callDelta.index],\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n }\n }\n if (choice?.finish_reason === \"tool_calls\") {\n for (const slot of toolCallSlots) {\n if (slot) {\n subscriber.next({\n type: EventType.TOOL_CALL_END,\n toolCallId: slot,\n } as ToolCallEndEvent);\n }\n }\n }\n }\n }\n }\n }\n continue;\n }\n\n // Agent SDK events\n if (event?.type === \"run_item_stream_event\" && event?.item) {\n switch (event?.item?.type) {\n case \"tool_call_output_item\": {\n subscriber.next({\n messageId: activeMessageId,\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: event?.item?.rawItem.callId,\n threadId,\n runId,\n content: event.item.output,\n } as ToolCallResultEvent);\n break;\n }\n }\n }\n // Ignore non-raw events per requirement\n continue;\n }\n await this.memory.clear({ sessionId: threadId });\n for (const message of stream.history) {\n await this.memory.add(\n {\n message: {\n role: message.role,\n content: message.content,\n },\n state: message,\n },\n { sessionId: threadId }\n );\n }\n\n subscriber.next({\n type: EventType.RUN_FINISHED,\n threadId,\n runId,\n } as RunFinishedEvent);\n } catch (error) {\n subscriber.error(error);\n }\n }\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n"],"mappings":"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","names":["destr","input"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
// src/agent.ts
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
AbstractAgent,
|
|
4
|
+
EventType
|
|
5
|
+
} from "@ag-ui/client";
|
|
3
6
|
import { Observable } from "rxjs";
|
|
4
7
|
import { Runner, tool } from "@openai/agents";
|
|
5
8
|
import destr from "destr";
|
|
@@ -165,13 +168,16 @@ var OpenAIAgent = class extends AbstractAgent {
|
|
|
165
168
|
}
|
|
166
169
|
await this.memory.clear({ sessionId: threadId });
|
|
167
170
|
for (const message of stream.history) {
|
|
168
|
-
await this.memory.add(
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
171
|
+
await this.memory.add(
|
|
172
|
+
{
|
|
173
|
+
message: {
|
|
174
|
+
role: message.role,
|
|
175
|
+
content: message.content
|
|
176
|
+
},
|
|
177
|
+
state: message
|
|
172
178
|
},
|
|
173
|
-
|
|
174
|
-
|
|
179
|
+
{ sessionId: threadId }
|
|
180
|
+
);
|
|
175
181
|
}
|
|
176
182
|
subscriber.next({
|
|
177
183
|
type: EventType.RUN_FINISHED,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/agent.ts"],"sourcesContent":["import { AbstractAgent, AgentConfig, BaseEvent, EventType, RunAgentInput, RunFinishedEvent, RunStartedEvent, TextMessageContentEvent, TextMessageEndEvent, TextMessageStartEvent, ToolCallArgsEvent, ToolCallEndEvent, ToolCallResultEvent, ToolCallStartEvent } from \"@ag-ui/client\";\nimport { Observable, Subscriber } from \"rxjs\";\nimport { Agent, AgentInputItem, Runner, tool } from \"@openai/agents\";\nimport destr from \"destr\";\nimport { InMemoryMemory } from \"@cloudbase/agent-agents\";\n\ntype OpenAIAgentConfig = AgentConfig & {\n agent: Agent;\n runner?: Runner;\n memory?: InMemoryMemory\n};\nexport class OpenAIAgent extends AbstractAgent {\n name: string;\n private agent: Agent;\n private runner: Runner;\n private memory: InMemoryMemory;\n constructor(agentConfig: OpenAIAgentConfig) {\n super(agentConfig);\n this.name = agentConfig.agent.name || 'OpenAI Agent';\n this.agent = agentConfig.agent;\n this.runner = agentConfig.runner ?? new Runner();\n this.memory = agentConfig.memory ?? new InMemoryMemory();\n }\n protected run(input: RunAgentInput): Observable<BaseEvent> {\n return new Observable<BaseEvent>((subscriber) => {\n this._run(subscriber, input);\n });\n }\n protected async _run(subscriber: Subscriber<BaseEvent>, input: RunAgentInput) {\n const { messages, runId, threadId, tools, forwardedProps } = input;\n\n try {\n subscriber.next({\n type: EventType.RUN_STARTED,\n threadId,\n runId,\n } as RunStartedEvent);\n\n const frontendTools = (tools ?? [])?.map((t) => {\n const toolInstance = tool({\n name: t.name,\n description: t.description,\n parameters: destr(t.parameters),\n execute: async (input: any) => {\n throw new Error('Not implemented');\n },\n needsApproval: async (input: any) => {\n return true;\n },\n })\n toolInstance.name = t.name;\n return toolInstance;\n });\n const agent = this.agent.clone({\n // @ts-ignore\n tools: [...this.agent.tools, ...frontendTools],\n });\n const messagesForRun: AgentInputItem[] = [];\n const history = await this.memory.list({ sessionId: threadId });\n for (const historyItem of history) {\n if (historyItem.message.content && historyItem.message.content.length > 0) {\n messagesForRun.push({\n role: historyItem.message.role,\n content: historyItem.message.content,\n });\n } else {\n messagesForRun.push(historyItem.state);\n }\n\n }\n messages.forEach(message => {\n messagesForRun.push(message);\n });\n const stream = await this.runner.run(agent, messagesForRun, {\n stream: true,\n });\n let activeMessageId: string | undefined;\n\n const toolCallSlots: string[] = []\n for await (const event of stream) {\n // LLM model events\n if (event?.type === 'raw_model_stream_event' && event?.data) {\n const data = event.data;\n switch (data.type) {\n case 'response_started': {\n // Start a new assistant message\n activeMessageId = generateId();\n subscriber.next({\n type: EventType.TEXT_MESSAGE_START,\n messageId: activeMessageId,\n role: 'assistant',\n } as TextMessageStartEvent);\n break;\n }\n case 'output_text_delta': {\n const delta: string | undefined = data.delta;\n if (delta && activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: activeMessageId,\n delta,\n } as TextMessageContentEvent);\n }\n break;\n }\n case 'response_done': {\n if (activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_END,\n messageId: activeMessageId,\n } as TextMessageEndEvent);\n activeMessageId = undefined;\n }\n break;\n }\n default: {\n // Try to parse provider chunk for tool call deltas\n const providerChunk = (data as any).event;\n const choices = providerChunk?.choices;\n if (Array.isArray(choices)) {\n for (const choice of choices) {\n const delta = choice?.delta ?? choice?.message?.delta;\n const toolCallsDelta = delta?.tool_calls ?? delta?.tool_calls_delta;\n if (Array.isArray(toolCallsDelta)) {\n for (const callDelta of toolCallsDelta) {\n if (!toolCallSlots[callDelta.index] && callDelta.id) {\n toolCallSlots[callDelta.index] = callDelta.id;\n subscriber.next({\n type: EventType.TOOL_CALL_START,\n toolCallId: callDelta.id,\n toolCallName: callDelta.function?.name,\n } as ToolCallStartEvent);\n if (callDelta.function?.arguments) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: callDelta.id,\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n } else if (toolCallSlots[callDelta.index]) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: toolCallSlots[callDelta.index],\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n }\n }\n if (choice?.finish_reason === 'tool_calls') {\n for (const slot of toolCallSlots) {\n if (slot) {\n subscriber.next({\n type: EventType.TOOL_CALL_END,\n toolCallId: slot,\n } as ToolCallEndEvent);\n }\n }\n }\n }\n }\n\n }\n }\n continue;\n }\n\n // Agent SDK events\n if (event?.type === 'run_item_stream_event' && event?.item) {\n switch (event?.item?.type) {\n case 'tool_call_output_item': {\n subscriber.next({\n messageId: activeMessageId,\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: event?.item?.rawItem.callId,\n threadId,\n runId,\n content: event.item.output\n } as ToolCallResultEvent)\n break;\n }\n }\n }\n // Ignore non-raw events per requirement\n continue;\n }\n await this.memory.clear({ sessionId: threadId });\n for (const message of stream.history) {\n await this.memory.add({\n message: {\n role: message.role,\n content: message.content,\n },\n state: message,\n }, { sessionId: threadId });\n }\n\n subscriber.next({\n type: EventType.RUN_FINISHED,\n threadId,\n runId,\n } as RunFinishedEvent);\n\n } catch (error) {\n subscriber.error(error);\n }\n }\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n"],"mappings":"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","names":["input"]}
|
|
1
|
+
{"version":3,"sources":["../src/agent.ts"],"sourcesContent":["import {\n AbstractAgent,\n AgentConfig,\n BaseEvent,\n EventType,\n RunAgentInput,\n RunFinishedEvent,\n RunStartedEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n TextMessageStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n ToolCallStartEvent,\n} from \"@ag-ui/client\";\nimport { Observable, Subscriber } from \"rxjs\";\nimport { Agent, AgentInputItem, Runner, tool } from \"@openai/agents\";\nimport destr from \"destr\";\nimport { InMemoryMemory } from \"@cloudbase/agent-agents\";\n\ntype OpenAIAgentConfig = AgentConfig & {\n agent: Agent;\n runner?: Runner;\n memory?: InMemoryMemory;\n};\nexport class OpenAIAgent extends AbstractAgent {\n name: string;\n private agent: Agent;\n private runner: Runner;\n private memory: InMemoryMemory;\n constructor(agentConfig: OpenAIAgentConfig) {\n super(agentConfig);\n this.name = agentConfig.agent.name || \"OpenAI Agent\";\n this.agent = agentConfig.agent;\n this.runner = agentConfig.runner ?? new Runner();\n this.memory = agentConfig.memory ?? new InMemoryMemory();\n }\n run(input: RunAgentInput): Observable<BaseEvent> {\n return new Observable<BaseEvent>((subscriber) => {\n this._run(subscriber, input);\n });\n }\n protected async _run(\n subscriber: Subscriber<BaseEvent>,\n input: RunAgentInput\n ) {\n const { messages, runId, threadId, tools, forwardedProps } = input;\n\n try {\n subscriber.next({\n type: EventType.RUN_STARTED,\n threadId,\n runId,\n } as RunStartedEvent);\n\n const frontendTools = (tools ?? [])?.map((t) => {\n const toolInstance = tool({\n name: t.name,\n description: t.description,\n parameters: destr(t.parameters),\n execute: async (input: any) => {\n throw new Error(\"Not implemented\");\n },\n needsApproval: async (input: any) => {\n return true;\n },\n });\n toolInstance.name = t.name;\n return toolInstance;\n });\n const agent = this.agent.clone({\n // @ts-ignore\n tools: [...this.agent.tools, ...frontendTools],\n });\n const messagesForRun: AgentInputItem[] = [];\n const history = await this.memory.list({ sessionId: threadId });\n for (const historyItem of history) {\n if (\n historyItem.message.content &&\n historyItem.message.content.length > 0\n ) {\n messagesForRun.push({\n role: historyItem.message.role,\n content: historyItem.message.content,\n });\n } else {\n messagesForRun.push(historyItem.state);\n }\n }\n messages.forEach((message) => {\n messagesForRun.push(message);\n });\n const stream = await this.runner.run(agent, messagesForRun, {\n stream: true,\n });\n let activeMessageId: string | undefined;\n\n const toolCallSlots: string[] = [];\n for await (const event of stream) {\n // LLM model events\n if (event?.type === \"raw_model_stream_event\" && event?.data) {\n const data = event.data;\n switch (data.type) {\n case \"response_started\": {\n // Start a new assistant message\n activeMessageId = generateId();\n subscriber.next({\n type: EventType.TEXT_MESSAGE_START,\n messageId: activeMessageId,\n role: \"assistant\",\n } as TextMessageStartEvent);\n break;\n }\n case \"output_text_delta\": {\n const delta: string | undefined = data.delta;\n if (delta && activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: activeMessageId,\n delta,\n } as TextMessageContentEvent);\n }\n break;\n }\n case \"response_done\": {\n if (activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_END,\n messageId: activeMessageId,\n } as TextMessageEndEvent);\n activeMessageId = undefined;\n }\n break;\n }\n default: {\n // Try to parse provider chunk for tool call deltas\n const providerChunk = (data as any).event;\n const choices = providerChunk?.choices;\n if (Array.isArray(choices)) {\n for (const choice of choices) {\n const delta = choice?.delta ?? choice?.message?.delta;\n const toolCallsDelta =\n delta?.tool_calls ?? delta?.tool_calls_delta;\n if (Array.isArray(toolCallsDelta)) {\n for (const callDelta of toolCallsDelta) {\n if (!toolCallSlots[callDelta.index] && callDelta.id) {\n toolCallSlots[callDelta.index] = callDelta.id;\n subscriber.next({\n type: EventType.TOOL_CALL_START,\n toolCallId: callDelta.id,\n toolCallName: callDelta.function?.name,\n } as ToolCallStartEvent);\n if (callDelta.function?.arguments) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: callDelta.id,\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n } else if (toolCallSlots[callDelta.index]) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: toolCallSlots[callDelta.index],\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n }\n }\n if (choice?.finish_reason === \"tool_calls\") {\n for (const slot of toolCallSlots) {\n if (slot) {\n subscriber.next({\n type: EventType.TOOL_CALL_END,\n toolCallId: slot,\n } as ToolCallEndEvent);\n }\n }\n }\n }\n }\n }\n }\n continue;\n }\n\n // Agent SDK events\n if (event?.type === \"run_item_stream_event\" && event?.item) {\n switch (event?.item?.type) {\n case \"tool_call_output_item\": {\n subscriber.next({\n messageId: activeMessageId,\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: event?.item?.rawItem.callId,\n threadId,\n runId,\n content: event.item.output,\n } as ToolCallResultEvent);\n break;\n }\n }\n }\n // Ignore non-raw events per requirement\n continue;\n }\n await this.memory.clear({ sessionId: threadId });\n for (const message of stream.history) {\n await this.memory.add(\n {\n message: {\n role: message.role,\n content: message.content,\n },\n state: message,\n },\n { sessionId: threadId }\n );\n }\n\n subscriber.next({\n type: EventType.RUN_FINISHED,\n threadId,\n runId,\n } as RunFinishedEvent);\n } catch (error) {\n subscriber.error(error);\n }\n }\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n"],"mappings":"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","names":["input"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudbase/agent-adapter-openai-agent-sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "OpenAI Agent SDK adapter for AG-Kit agents",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/",
|
|
@@ -36,16 +36,16 @@
|
|
|
36
36
|
"typescript": "^5.0.0"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@ag-ui/client": "0.0.
|
|
39
|
+
"@ag-ui/client": "0.0.42",
|
|
40
40
|
"@openai/agents": "^0.2.1",
|
|
41
41
|
"destr": "^2.0.5",
|
|
42
42
|
"rxjs": "^7.8.1",
|
|
43
43
|
"zod": "^3.25.0 || ^4.0.0",
|
|
44
|
-
"@cloudbase/agent-agents": "0.0.
|
|
44
|
+
"@cloudbase/agent-agents": "0.0.3"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"zod": "^3.25.0 || ^4.0.0",
|
|
48
|
-
"@cloudbase/agent-agents": "0.0.
|
|
48
|
+
"@cloudbase/agent-agents": "0.0.3"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
51
|
"test": "echo \"Error: no test specified\" && exit 1",
|