@ai-sdk/openai 1.0.8 → 1.0.10

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 CHANGED
@@ -1,5 +1,19 @@
1
1
  # @ai-sdk/openai
2
2
 
3
+ ## 1.0.10
4
+
5
+ ### Patch Changes
6
+
7
+ - d4fad4e: fix (provider/openai): fix reasoning model detection
8
+
9
+ ## 1.0.9
10
+
11
+ ### Patch Changes
12
+
13
+ - 3fab0fb: feat (provider/openai): support reasoning_effort setting
14
+ - e956eed: feat (provider/openai): update model list and add o1
15
+ - 6faab13: feat (provider/openai): simulated streaming setting
16
+
3
17
  ## 1.0.8
4
18
 
5
19
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { LanguageModelV1, ProviderV1, EmbeddingModelV1, ImageModelV1 } from '@ai-sdk/provider';
2
2
  import { FetchFunction } from '@ai-sdk/provider-utils';
3
3
 
4
- type OpenAIChatModelId = 'o1-preview' | 'o1-mini' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-audio-preview' | 'gpt-4o-audio-preview-2024-10-01' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | (string & {});
4
+ type OpenAIChatModelId = 'o1' | 'o1-2024-12-17' | 'o1-mini' | 'o1-mini-2024-09-12' | 'o1-preview' | 'o1-preview-2024-09-12' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-audio-preview' | 'gpt-4o-audio-preview-2024-10-01' | 'gpt-4o-audio-preview-2024-12-17' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | (string & {});
5
5
  interface OpenAIChatSettings {
6
6
  /**
7
7
  Modify the likelihood of specified tokens appearing in the completion.
@@ -65,6 +65,17 @@ interface OpenAIChatSettings {
65
65
  Defaults to `false`.
66
66
  */
67
67
  downloadImages?: boolean;
68
+ /**
69
+ Simulates streaming by using a normal generate call and returning it as a stream.
70
+ Enable this if the model that you are using does not support streaming.
71
+
72
+ Defaults to `false`.
73
+ */
74
+ simulateStreaming?: boolean;
75
+ /**
76
+ Reasoning effort for reasoning models. Defaults to `medium`.
77
+ */
78
+ reasoningEffort?: 'low' | 'medium' | 'high';
68
79
  }
69
80
 
70
81
  type OpenAICompletionModelId = 'gpt-3.5-turbo-instruct' | (string & {});
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { LanguageModelV1, ProviderV1, EmbeddingModelV1, ImageModelV1 } from '@ai-sdk/provider';
2
2
  import { FetchFunction } from '@ai-sdk/provider-utils';
3
3
 
4
- type OpenAIChatModelId = 'o1-preview' | 'o1-mini' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-audio-preview' | 'gpt-4o-audio-preview-2024-10-01' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | (string & {});
4
+ type OpenAIChatModelId = 'o1' | 'o1-2024-12-17' | 'o1-mini' | 'o1-mini-2024-09-12' | 'o1-preview' | 'o1-preview-2024-09-12' | 'gpt-4o' | 'gpt-4o-2024-05-13' | 'gpt-4o-2024-08-06' | 'gpt-4o-2024-11-20' | 'gpt-4o-audio-preview' | 'gpt-4o-audio-preview-2024-10-01' | 'gpt-4o-audio-preview-2024-12-17' | 'gpt-4o-mini' | 'gpt-4o-mini-2024-07-18' | 'gpt-4-turbo' | 'gpt-4-turbo-2024-04-09' | 'gpt-4-turbo-preview' | 'gpt-4-0125-preview' | 'gpt-4-1106-preview' | 'gpt-4' | 'gpt-4-0613' | 'gpt-3.5-turbo-0125' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | (string & {});
5
5
  interface OpenAIChatSettings {
6
6
  /**
7
7
  Modify the likelihood of specified tokens appearing in the completion.
@@ -65,6 +65,17 @@ interface OpenAIChatSettings {
65
65
  Defaults to `false`.
66
66
  */
67
67
  downloadImages?: boolean;
68
+ /**
69
+ Simulates streaming by using a normal generate call and returning it as a stream.
70
+ Enable this if the model that you are using does not support streaming.
71
+
72
+ Defaults to `false`.
73
+ */
74
+ simulateStreaming?: boolean;
75
+ /**
76
+ Reasoning effort for reasoning models. Defaults to `medium`.
77
+ */
78
+ reasoningEffort?: 'low' | 'medium' | 'high';
68
79
  }
69
80
 
70
81
  type OpenAICompletionModelId = 'gpt-3.5-turbo-instruct' | (string & {});
package/dist/index.js CHANGED
@@ -376,7 +376,7 @@ var OpenAIChatLanguageModel = class {
376
376
  seed,
377
377
  providerMetadata
378
378
  }) {
379
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
379
+ var _a, _b, _c, _d, _e, _f, _g, _h;
380
380
  const type = mode.type;
381
381
  const warnings = [];
382
382
  if (topK != null) {
@@ -430,10 +430,11 @@ var OpenAIChatLanguageModel = class {
430
430
  stop: stopSequences,
431
431
  seed,
432
432
  // openai specific settings:
433
- max_completion_tokens: (_c = (_b = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _b.maxCompletionTokens) != null ? _c : void 0,
434
- store: (_e = (_d = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _d.store) != null ? _e : void 0,
435
- metadata: (_g = (_f = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _f.metadata) != null ? _g : void 0,
436
- prediction: (_i = (_h = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _h.prediction) != null ? _i : void 0,
433
+ max_completion_tokens: (_b = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _b.maxCompletionTokens,
434
+ store: (_c = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _c.store,
435
+ metadata: (_d = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _d.metadata,
436
+ prediction: (_e = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _e.prediction,
437
+ reasoning_effort: (_g = (_f = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _f.reasoningEffort) != null ? _g : this.settings.reasoningEffort,
437
438
  // messages:
438
439
  messages: convertToOpenAIChatMessages({
439
440
  prompt,
@@ -473,7 +474,7 @@ var OpenAIChatLanguageModel = class {
473
474
  json_schema: {
474
475
  schema: mode.schema,
475
476
  strict: true,
476
- name: (_j = mode.name) != null ? _j : "response",
477
+ name: (_h = mode.name) != null ? _h : "response",
477
478
  description: mode.description
478
479
  }
479
480
  } : { type: "json_object" }
@@ -584,6 +585,42 @@ var OpenAIChatLanguageModel = class {
584
585
  };
585
586
  }
586
587
  async doStream(options) {
588
+ if (this.settings.simulateStreaming) {
589
+ const result = await this.doGenerate(options);
590
+ const simulatedStream = new ReadableStream({
591
+ start(controller) {
592
+ controller.enqueue({ type: "response-metadata", ...result.response });
593
+ if (result.text) {
594
+ controller.enqueue({
595
+ type: "text-delta",
596
+ textDelta: result.text
597
+ });
598
+ }
599
+ if (result.toolCalls) {
600
+ for (const toolCall of result.toolCalls) {
601
+ controller.enqueue({
602
+ type: "tool-call",
603
+ ...toolCall
604
+ });
605
+ }
606
+ }
607
+ controller.enqueue({
608
+ type: "finish",
609
+ finishReason: result.finishReason,
610
+ usage: result.usage,
611
+ logprobs: result.logprobs,
612
+ providerMetadata: result.providerMetadata
613
+ });
614
+ controller.close();
615
+ }
616
+ });
617
+ return {
618
+ stream: simulatedStream,
619
+ rawCall: result.rawCall,
620
+ rawResponse: result.rawResponse,
621
+ warnings: result.warnings
622
+ };
623
+ }
587
624
  const { args, warnings } = this.getArgs(options);
588
625
  const body = {
589
626
  ...args,
@@ -894,7 +931,7 @@ var openaiChatChunkSchema = import_zod2.z.union([
894
931
  openaiErrorDataSchema
895
932
  ]);
896
933
  function isReasoningModel(modelId) {
897
- return modelId.startsWith("o1-");
934
+ return modelId === "o1" || modelId.startsWith("o1-");
898
935
  }
899
936
  function isAudioModel(modelId) {
900
937
  return modelId.startsWith("gpt-4o-audio-preview");