@openai/agents-extensions 0.0.1

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/dist/aiSdk.js ADDED
@@ -0,0 +1,604 @@
1
+ import { createGenerationSpan, resetCurrentSpan, setCurrentSpan, Usage, UserError, withGenerationSpan, } from '@openai/agents';
2
+ import { isZodObject } from '@openai/agents/utils';
3
+ /**
4
+ * @internal
5
+ * Converts a list of model items to a list of language model v1 messages.
6
+ *
7
+ * @param model - The model to use.
8
+ * @param items - The items to convert.
9
+ * @returns The list of language model v1 messages.
10
+ */
11
+ export function itemsToLanguageV1Messages(model, items) {
12
+ const messages = [];
13
+ let currentAssistantMessage;
14
+ for (const item of items) {
15
+ if (item.type === 'message' || typeof item.type === 'undefined') {
16
+ const { role, content, providerData } = item;
17
+ if (role === 'system') {
18
+ messages.push({
19
+ role: 'system',
20
+ content: content,
21
+ providerMetadata: {
22
+ [model.provider]: {
23
+ ...(providerData ?? {}),
24
+ },
25
+ },
26
+ });
27
+ continue;
28
+ }
29
+ if (role === 'user') {
30
+ messages.push({
31
+ role,
32
+ content: typeof content === 'string'
33
+ ? [{ type: 'text', text: content }]
34
+ : content.map((c) => {
35
+ if (c.type === 'input_text') {
36
+ return { type: 'text', text: c.text };
37
+ }
38
+ if (c.type === 'input_image') {
39
+ const url = new URL(c.image);
40
+ return { type: 'image', image: url };
41
+ }
42
+ if (c.type === 'input_file') {
43
+ if (typeof c.file !== 'string') {
44
+ throw new UserError('File ID is not supported');
45
+ }
46
+ return {
47
+ type: 'file',
48
+ file: c.file,
49
+ mimeType: 'application/octet-stream',
50
+ data: c.file,
51
+ };
52
+ }
53
+ throw new UserError(`Unknown content type: ${c.type}`);
54
+ }),
55
+ providerMetadata: {
56
+ [model.provider]: {
57
+ ...(providerData ?? {}),
58
+ },
59
+ },
60
+ });
61
+ continue;
62
+ }
63
+ if (role === 'assistant') {
64
+ if (currentAssistantMessage) {
65
+ messages.push(currentAssistantMessage);
66
+ currentAssistantMessage = undefined;
67
+ }
68
+ messages.push({
69
+ role,
70
+ content: content
71
+ .filter((c) => c.type === 'input_text' || c.type === 'output_text')
72
+ .map((c) => {
73
+ if (c.type === 'output_text') {
74
+ return { type: 'text', text: c.text };
75
+ }
76
+ if (c.type === 'input_text') {
77
+ return { type: 'text', text: c.text };
78
+ }
79
+ const exhaustiveCheck = c;
80
+ throw new UserError(`Unknown content type: ${exhaustiveCheck}`);
81
+ }),
82
+ providerMetadata: {
83
+ [model.provider]: {
84
+ ...(providerData ?? {}),
85
+ },
86
+ },
87
+ });
88
+ continue;
89
+ }
90
+ const exhaustiveMessageTypeCheck = item;
91
+ throw new Error(`Unknown message type: ${exhaustiveMessageTypeCheck}`);
92
+ }
93
+ else if (item.type === 'function_call') {
94
+ if (!currentAssistantMessage) {
95
+ currentAssistantMessage = {
96
+ role: 'assistant',
97
+ content: [],
98
+ providerMetadata: {
99
+ [model.provider]: {
100
+ ...(item.providerData ?? {}),
101
+ },
102
+ },
103
+ };
104
+ }
105
+ if (Array.isArray(currentAssistantMessage.content) &&
106
+ currentAssistantMessage.role === 'assistant') {
107
+ const content = {
108
+ type: 'tool-call',
109
+ toolCallId: item.callId,
110
+ toolName: item.name,
111
+ args: item.arguments,
112
+ };
113
+ currentAssistantMessage.content.push(content);
114
+ }
115
+ continue;
116
+ }
117
+ else if (item.type === 'function_call_result') {
118
+ if (currentAssistantMessage) {
119
+ messages.push(currentAssistantMessage);
120
+ currentAssistantMessage = undefined;
121
+ }
122
+ const toolResult = {
123
+ type: 'tool-result',
124
+ toolCallId: item.callId,
125
+ toolName: item.name,
126
+ result: item.output,
127
+ };
128
+ messages.push({
129
+ role: 'tool',
130
+ content: [toolResult],
131
+ providerMetadata: {
132
+ [model.provider]: {
133
+ ...(item.providerData ?? {}),
134
+ },
135
+ },
136
+ });
137
+ continue;
138
+ }
139
+ if (item.type === 'hosted_tool_call') {
140
+ throw new UserError('Hosted tool calls are not supported');
141
+ }
142
+ if (item.type === 'computer_call') {
143
+ throw new UserError('Computer calls are not supported');
144
+ }
145
+ if (item.type === 'computer_call_result') {
146
+ throw new UserError('Computer call results are not supported');
147
+ }
148
+ if (item.type === 'reasoning' &&
149
+ item.content.length > 0 &&
150
+ typeof item.content[0].text === 'string') {
151
+ messages.push({
152
+ role: 'assistant',
153
+ content: [{ type: 'reasoning', text: item.content[0].text }],
154
+ providerMetadata: {
155
+ [model.provider]: {
156
+ ...(item.providerData ?? {}),
157
+ },
158
+ },
159
+ });
160
+ continue;
161
+ }
162
+ if (item.type === 'unknown') {
163
+ messages.push({ ...(item.providerData ?? {}) });
164
+ continue;
165
+ }
166
+ if (item) {
167
+ throw new UserError(`Unknown item type: ${item.type}`);
168
+ }
169
+ const itemType = item;
170
+ throw new UserError(`Unknown item type: ${itemType}`);
171
+ }
172
+ if (currentAssistantMessage) {
173
+ messages.push(currentAssistantMessage);
174
+ }
175
+ return messages;
176
+ }
177
+ /**
178
+ * @internal
179
+ * Converts a handoff to a language model v1 tool.
180
+ *
181
+ * @param model - The model to use.
182
+ * @param handoff - The handoff to convert.
183
+ */
184
+ function handoffToLanguageV1Tool(model, handoff) {
185
+ return {
186
+ type: 'function',
187
+ name: handoff.toolName,
188
+ description: handoff.toolDescription,
189
+ parameters: handoff.inputJsonSchema,
190
+ };
191
+ }
192
+ /**
193
+ * @internal
194
+ * Converts a tool to a language model v1 tool.
195
+ *
196
+ * @param model - The model to use.
197
+ * @param tool - The tool to convert.
198
+ */
199
+ export function toolToLanguageV1Tool(model, tool) {
200
+ if (tool.type === 'function') {
201
+ return {
202
+ type: 'function',
203
+ name: tool.name,
204
+ description: tool.description,
205
+ parameters: tool.parameters,
206
+ };
207
+ }
208
+ if (tool.type === 'hosted_tool') {
209
+ return {
210
+ type: 'provider-defined',
211
+ id: `${model.provider}.${tool.name}`,
212
+ name: tool.name,
213
+ args: tool.providerData?.args ?? {},
214
+ };
215
+ }
216
+ if (tool.type === 'computer') {
217
+ return {
218
+ type: 'provider-defined',
219
+ id: `${model.provider}.${tool.name}`,
220
+ name: tool.name,
221
+ args: {
222
+ environment: tool.environment,
223
+ display_width: tool.dimensions[0],
224
+ display_height: tool.dimensions[1],
225
+ },
226
+ };
227
+ }
228
+ const exhaustiveCheck = tool;
229
+ throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
230
+ }
231
+ /**
232
+ * @internal
233
+ * Converts an output type to a language model v1 response format.
234
+ *
235
+ * @param outputType - The output type to convert.
236
+ * @returns The language model v1 response format.
237
+ */
238
+ export function getResponseFormat(outputType) {
239
+ if (outputType === 'text') {
240
+ return {
241
+ type: 'text',
242
+ };
243
+ }
244
+ return {
245
+ type: 'json',
246
+ name: outputType.name,
247
+ schema: outputType.schema,
248
+ };
249
+ }
250
+ /**
251
+ * Wraps a model from the AI SDK that adheres to the LanguageModelV1 spec to be used used as a model
252
+ * in the OpenAI Agents SDK to use other models.
253
+ *
254
+ * While you can use this with the OpenAI models, it is recommended to use the default OpenAI model
255
+ * provider instead.
256
+ *
257
+ * If tracing is enabled, the model will send generation spans to your traces processor.
258
+ *
259
+ * ```ts
260
+ * import { aisdk } from '@openai/agents-extensions';
261
+ * import { openai } from '@ai-sdk/openai';
262
+ *
263
+ * const model = aisdk(openai('gpt-4o'));
264
+ *
265
+ * const agent = new Agent({
266
+ * name: 'My Agent',
267
+ * model
268
+ * });
269
+ * ```
270
+ *
271
+ * @param model - The Vercel AI SDK model to wrap.
272
+ * @returns The wrapped model.
273
+ */
274
+ export class AiSdkModel {
275
+ #model;
276
+ constructor(model) {
277
+ this.#model = model;
278
+ }
279
+ async getResponse(request) {
280
+ return withGenerationSpan(async (span) => {
281
+ try {
282
+ span.spanData.model = this.#model.provider + ':' + this.#model.modelId;
283
+ span.spanData.model_config = {
284
+ provider: this.#model.provider,
285
+ model_impl: 'ai-sdk',
286
+ };
287
+ let input = typeof request.input === 'string'
288
+ ? [
289
+ {
290
+ role: 'user',
291
+ content: [{ type: 'text', text: request.input }],
292
+ },
293
+ ]
294
+ : itemsToLanguageV1Messages(this.#model, request.input);
295
+ if (request.systemInstructions) {
296
+ input = [
297
+ {
298
+ role: 'system',
299
+ content: [
300
+ {
301
+ type: 'text',
302
+ text: request.systemInstructions,
303
+ },
304
+ ],
305
+ },
306
+ ...input,
307
+ ];
308
+ }
309
+ const tools = request.tools.map((tool) => toolToLanguageV1Tool(this.#model, tool));
310
+ request.handoffs.forEach((handoff) => {
311
+ tools.push(handoffToLanguageV1Tool(this.#model, handoff));
312
+ });
313
+ if (span && request.tracing === true) {
314
+ span.spanData.input = input;
315
+ }
316
+ if (isZodObject(request.outputType)) {
317
+ throw new UserError('Zod output type is not yet supported');
318
+ }
319
+ const responseFormat = getResponseFormat(request.outputType);
320
+ const result = await this.#model.doGenerate({
321
+ inputFormat: 'messages',
322
+ mode: {
323
+ type: 'regular',
324
+ tools,
325
+ },
326
+ prompt: input,
327
+ temperature: request.modelSettings.temperature,
328
+ topP: request.modelSettings.topP,
329
+ frequencyPenalty: request.modelSettings.frequencyPenalty,
330
+ presencePenalty: request.modelSettings.presencePenalty,
331
+ maxTokens: request.modelSettings.maxTokens,
332
+ responseFormat,
333
+ abortSignal: request.signal,
334
+ ...(request.modelSettings.providerData ?? {}),
335
+ });
336
+ const output = [];
337
+ result.toolCalls?.forEach((toolCall) => {
338
+ output.push({
339
+ type: 'function_call',
340
+ callId: toolCall.toolCallId,
341
+ name: toolCall.toolName,
342
+ arguments: toolCall.args,
343
+ status: 'completed',
344
+ providerData: !result.text
345
+ ? result.providerMetadata?.[this.#model.provider]
346
+ : undefined,
347
+ });
348
+ });
349
+ if (result.text) {
350
+ output.push({
351
+ type: 'message',
352
+ content: [{ type: 'output_text', text: result.text }],
353
+ role: 'assistant',
354
+ status: 'completed',
355
+ providerData: result.providerMetadata?.[this.#model.provider],
356
+ });
357
+ }
358
+ if (span && request.tracing === true) {
359
+ span.spanData.output = output;
360
+ }
361
+ return {
362
+ responseId: result.response?.id ?? 'FAKE_ID',
363
+ usage: new Usage({
364
+ inputTokens: result.usage.promptTokens,
365
+ outputTokens: result.usage.completionTokens,
366
+ totalTokens: result.usage.promptTokens + result.usage.completionTokens,
367
+ }),
368
+ output,
369
+ };
370
+ }
371
+ catch (error) {
372
+ if (error instanceof Error) {
373
+ span.setError({
374
+ message: request.tracing === true ? error.message : 'Unknown error',
375
+ data: {
376
+ error: request.tracing === true
377
+ ? String(error)
378
+ : error instanceof Error
379
+ ? error.name
380
+ : undefined,
381
+ },
382
+ });
383
+ }
384
+ else {
385
+ span.setError({
386
+ message: 'Unknown error',
387
+ data: {
388
+ error: request.tracing === true
389
+ ? String(error)
390
+ : error instanceof Error
391
+ ? error.name
392
+ : undefined,
393
+ },
394
+ });
395
+ }
396
+ throw error;
397
+ }
398
+ });
399
+ }
400
+ async *getStreamedResponse(request) {
401
+ const span = request.tracing ? createGenerationSpan() : undefined;
402
+ try {
403
+ if (span) {
404
+ span.start();
405
+ setCurrentSpan(span);
406
+ }
407
+ if (span?.spanData) {
408
+ span.spanData.model = this.#model.provider + ':' + this.#model.modelId;
409
+ span.spanData.model_config = {
410
+ provider: this.#model.provider,
411
+ model_impl: 'ai-sdk',
412
+ };
413
+ }
414
+ let input = typeof request.input === 'string'
415
+ ? [
416
+ {
417
+ role: 'user',
418
+ content: [{ type: 'text', text: request.input }],
419
+ },
420
+ ]
421
+ : itemsToLanguageV1Messages(this.#model, request.input);
422
+ if (request.systemInstructions) {
423
+ input = [
424
+ {
425
+ role: 'system',
426
+ content: [
427
+ {
428
+ type: 'text',
429
+ text: request.systemInstructions,
430
+ },
431
+ ],
432
+ },
433
+ ...input,
434
+ ];
435
+ }
436
+ const tools = request.tools.map((tool) => toolToLanguageV1Tool(this.#model, tool));
437
+ request.handoffs.forEach((handoff) => {
438
+ tools.push(handoffToLanguageV1Tool(this.#model, handoff));
439
+ });
440
+ if (span && request.tracing === true) {
441
+ span.spanData.input = input;
442
+ }
443
+ const responseFormat = getResponseFormat(request.outputType);
444
+ const { stream } = await this.#model.doStream({
445
+ inputFormat: 'messages',
446
+ mode: {
447
+ type: 'regular',
448
+ tools,
449
+ },
450
+ prompt: input,
451
+ temperature: request.modelSettings.temperature,
452
+ topP: request.modelSettings.topP,
453
+ frequencyPenalty: request.modelSettings.frequencyPenalty,
454
+ presencePenalty: request.modelSettings.presencePenalty,
455
+ maxTokens: request.modelSettings.maxTokens,
456
+ responseFormat,
457
+ abortSignal: request.signal,
458
+ ...(request.modelSettings.providerData ?? {}),
459
+ });
460
+ let started = false;
461
+ let responseId;
462
+ let usagePromptTokens = 0;
463
+ let usageCompletionTokens = 0;
464
+ const functionCalls = {};
465
+ let textOutput;
466
+ for await (const part of stream) {
467
+ if (!started) {
468
+ started = true;
469
+ yield { type: 'response_started' };
470
+ }
471
+ yield { type: 'model', event: part };
472
+ switch (part.type) {
473
+ case 'text-delta': {
474
+ if (!textOutput) {
475
+ textOutput = { type: 'output_text', text: '' };
476
+ }
477
+ textOutput.text += part.textDelta;
478
+ yield { type: 'output_text_delta', delta: part.textDelta };
479
+ break;
480
+ }
481
+ case 'tool-call': {
482
+ if (part.toolCallType === 'function') {
483
+ functionCalls[part.toolCallId] = {
484
+ type: 'function_call',
485
+ callId: part.toolCallId,
486
+ name: part.toolName,
487
+ arguments: part.args,
488
+ status: 'completed',
489
+ };
490
+ }
491
+ break;
492
+ }
493
+ case 'tool-call-delta': {
494
+ if (part.toolCallType === 'function') {
495
+ const fc = functionCalls[part.toolCallId] ?? {
496
+ type: 'function_call',
497
+ callId: part.toolCallId,
498
+ name: '',
499
+ arguments: '',
500
+ };
501
+ fc.name += part.toolName;
502
+ fc.arguments += part.argsTextDelta;
503
+ functionCalls[part.toolCallId] = fc;
504
+ }
505
+ break;
506
+ }
507
+ case 'response-metadata': {
508
+ if (part.id) {
509
+ responseId = part.id;
510
+ }
511
+ break;
512
+ }
513
+ case 'finish': {
514
+ usagePromptTokens = part.usage.promptTokens;
515
+ usageCompletionTokens = part.usage.completionTokens;
516
+ break;
517
+ }
518
+ case 'error': {
519
+ throw part.error;
520
+ }
521
+ default:
522
+ break;
523
+ }
524
+ }
525
+ const outputs = [];
526
+ if (textOutput) {
527
+ outputs.push({
528
+ type: 'message',
529
+ role: 'assistant',
530
+ content: [textOutput],
531
+ status: 'completed',
532
+ });
533
+ }
534
+ for (const fc of Object.values(functionCalls)) {
535
+ outputs.push(fc);
536
+ }
537
+ const finalEvent = {
538
+ type: 'response_done',
539
+ response: {
540
+ id: responseId ?? 'FAKE_ID',
541
+ usage: {
542
+ inputTokens: usagePromptTokens,
543
+ outputTokens: usageCompletionTokens,
544
+ totalTokens: usagePromptTokens + usageCompletionTokens,
545
+ },
546
+ output: outputs,
547
+ },
548
+ };
549
+ if (span && request.tracing === true) {
550
+ span.spanData.output = outputs;
551
+ }
552
+ yield finalEvent;
553
+ }
554
+ catch (error) {
555
+ if (span) {
556
+ span.setError({
557
+ message: 'Error streaming response',
558
+ data: {
559
+ error: request.tracing === true
560
+ ? String(error)
561
+ : error instanceof Error
562
+ ? error.name
563
+ : undefined,
564
+ },
565
+ });
566
+ }
567
+ throw error;
568
+ }
569
+ finally {
570
+ if (span) {
571
+ span.end();
572
+ resetCurrentSpan();
573
+ }
574
+ }
575
+ }
576
+ }
577
+ /**
578
+ * Wraps a model from the AI SDK that adheres to the LanguageModelV1 spec to be used used as a model
579
+ * in the OpenAI Agents SDK to use other models.
580
+ *
581
+ * While you can use this with the OpenAI models, it is recommended to use the default OpenAI model
582
+ * provider instead.
583
+ *
584
+ * If tracing is enabled, the model will send generation spans to your traces processor.
585
+ *
586
+ * ```ts
587
+ * import { aisdk } from '@openai/agents-extensions';
588
+ * import { openai } from '@ai-sdk/openai';
589
+ *
590
+ * const model = aisdk(openai('gpt-4o'));
591
+ *
592
+ * const agent = new Agent({
593
+ * name: 'My Agent',
594
+ * model
595
+ * });
596
+ * ```
597
+ *
598
+ * @param model - The Vercel AI SDK model to wrap.
599
+ * @returns The wrapped model.
600
+ */
601
+ export function aisdk(model) {
602
+ return new AiSdkModel(model);
603
+ }
604
+ //# sourceMappingURL=aiSdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiSdk.js","sourceRoot":"","sources":["../src/aiSdk.ts"],"names":[],"mappings":"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"}