Skip to content

Commit fa19045

Browse files
fix(aisdk): make providerData less opinionated and passed in content
1 parent 5a66c11 commit fa19045

File tree

2 files changed

+64
-18
lines changed

2 files changed

+64
-18
lines changed

.changeset/smart-mirrors-join.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@openai/agents-extensions': patch
3+
---
4+
5+
fix(aisdk): make providerData less opinionated and pass to content

packages/agents-extensions/src/aiSdk.ts

Lines changed: 59 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,25 @@ export function itemsToLanguageV1Messages(
6464
typeof content === 'string'
6565
? [{ type: 'text', text: content }]
6666
: content.map((c) => {
67+
const { providerData: contentProviderData } = c;
6768
if (c.type === 'input_text') {
68-
return { type: 'text', text: c.text };
69+
return {
70+
type: 'text',
71+
text: c.text,
72+
providerMetadata: {
73+
...(contentProviderData ?? {}),
74+
},
75+
};
6976
}
7077
if (c.type === 'input_image') {
7178
const url = new URL(c.image);
72-
return { type: 'image', image: url };
79+
return {
80+
type: 'image',
81+
image: url,
82+
providerMetadata: {
83+
...(contentProviderData ?? {}),
84+
},
85+
};
7386
}
7487
if (c.type === 'input_file') {
7588
if (typeof c.file !== 'string') {
@@ -80,6 +93,9 @@ export function itemsToLanguageV1Messages(
8093
file: c.file,
8194
mimeType: 'application/octet-stream',
8295
data: c.file,
96+
providerMetadata: {
97+
...(contentProviderData ?? {}),
98+
},
8399
};
84100
}
85101
throw new UserError(`Unknown content type: ${c.type}`);
@@ -102,11 +118,24 @@ export function itemsToLanguageV1Messages(
102118
content: content
103119
.filter((c) => c.type === 'input_text' || c.type === 'output_text')
104120
.map((c) => {
121+
const { providerData: contentProviderData } = c;
105122
if (c.type === 'output_text') {
106-
return { type: 'text', text: c.text };
123+
return {
124+
type: 'text',
125+
text: c.text,
126+
providerMetadata: {
127+
...(contentProviderData ?? {}),
128+
},
129+
};
107130
}
108131
if (c.type === 'input_text') {
109-
return { type: 'text', text: c.text };
132+
return {
133+
type: 'text',
134+
text: c.text,
135+
providerMetadata: {
136+
...(contentProviderData ?? {}),
137+
},
138+
};
110139
}
111140
const exhaustiveCheck = c satisfies never;
112141
throw new UserError(`Unknown content type: ${exhaustiveCheck}`);
@@ -140,6 +169,9 @@ export function itemsToLanguageV1Messages(
140169
toolCallId: item.callId,
141170
toolName: item.name,
142171
args: JSON.parse(item.arguments),
172+
providerMetadata: {
173+
...(item.providerData ?? {}),
174+
},
143175
};
144176
currentAssistantMessage.content.push(content);
145177
}
@@ -154,6 +186,9 @@ export function itemsToLanguageV1Messages(
154186
toolCallId: item.callId,
155187
toolName: item.name,
156188
result: item.output,
189+
providerMetadata: {
190+
...(item.providerData ?? {}),
191+
},
157192
};
158193
messages.push({
159194
role: 'tool',
@@ -332,11 +367,6 @@ export class AiSdkModel implements Model {
332367
}
333368

334369
async getResponse(request: ModelRequest) {
335-
if (this.#logger.dontLogModelData) {
336-
this.#logger.debug('Request received');
337-
} else {
338-
this.#logger.debug('Request:', request);
339-
}
340370
return withGenerationSpan(async (span) => {
341371
try {
342372
span.spanData.model = this.#model.provider + ':' + this.#model.modelId;
@@ -384,7 +414,7 @@ export class AiSdkModel implements Model {
384414
const responseFormat: LanguageModelV1CallOptions['responseFormat'] =
385415
getResponseFormat(request.outputType);
386416

387-
const result = await this.#model.doGenerate({
417+
const aiSdkRequest: LanguageModelV1CallOptions = {
388418
inputFormat: 'messages',
389419
mode: {
390420
type: 'regular',
@@ -400,7 +430,15 @@ export class AiSdkModel implements Model {
400430
abortSignal: request.signal,
401431

402432
...(request.modelSettings.providerData ?? {}),
403-
});
433+
};
434+
435+
if (this.#logger.dontLogModelData) {
436+
this.#logger.debug('Request sent');
437+
} else {
438+
this.#logger.debug('Request:', aiSdkRequest);
439+
}
440+
441+
const result = await this.#model.doGenerate(aiSdkRequest);
404442

405443
const output: ModelResponse['output'] = [];
406444

@@ -495,11 +533,6 @@ export class AiSdkModel implements Model {
495533
async *getStreamedResponse(
496534
request: ModelRequest,
497535
): AsyncIterable<ResponseStreamEvent> {
498-
if (this.#logger.dontLogModelData) {
499-
this.#logger.debug('Request received (streamed)');
500-
} else {
501-
this.#logger.debug('Request (streamed):', request);
502-
}
503536
const span = request.tracing ? createGenerationSpan() : undefined;
504537
try {
505538
if (span) {
@@ -550,7 +583,7 @@ export class AiSdkModel implements Model {
550583
const responseFormat: LanguageModelV1CallOptions['responseFormat'] =
551584
getResponseFormat(request.outputType);
552585

553-
const { stream } = await this.#model.doStream({
586+
const aiSdkRequest: LanguageModelV1CallOptions = {
554587
inputFormat: 'messages',
555588
mode: {
556589
type: 'regular',
@@ -565,7 +598,15 @@ export class AiSdkModel implements Model {
565598
responseFormat,
566599
abortSignal: request.signal,
567600
...(request.modelSettings.providerData ?? {}),
568-
});
601+
};
602+
603+
if (this.#logger.dontLogModelData) {
604+
this.#logger.debug('Request received (streamed)');
605+
} else {
606+
this.#logger.debug('Request (streamed):', aiSdkRequest);
607+
}
608+
609+
const { stream } = await this.#model.doStream(aiSdkRequest);
569610

570611
let started = false;
571612
let responseId: string | undefined;

0 commit comments

Comments
 (0)