diff --git a/.changeset/modern-pets-repeat.md b/.changeset/modern-pets-repeat.md new file mode 100644 index 000000000000..358e14ab4e48 --- /dev/null +++ b/.changeset/modern-pets-repeat.md @@ -0,0 +1,7 @@ +--- +'@ai-sdk/provider-utils': patch +'@ai-sdk/luma': patch +'ai': patch +--- + +feat (provider-utils): move delay to provider-utils from ai diff --git a/packages/ai/core/data-stream/create-data-stream.test.ts b/packages/ai/core/data-stream/create-data-stream.test.ts index b73dae609812..2cfacde1206c 100644 --- a/packages/ai/core/data-stream/create-data-stream.test.ts +++ b/packages/ai/core/data-stream/create-data-stream.test.ts @@ -1,7 +1,7 @@ +import { delay } from '@ai-sdk/provider-utils'; import { convertReadableStreamToArray } from '@ai-sdk/provider-utils/test'; import { formatDataStreamPart } from '@ai-sdk/ui-utils'; import { expect, it } from 'vitest'; -import { delay } from '../../util/delay'; import { DelayedPromise } from '../../util/delayed-promise'; import { createDataStream } from './create-data-stream'; import { DataStreamWriter } from './data-stream-writer'; diff --git a/packages/ai/core/generate-text/run-tools-transformation.test.ts b/packages/ai/core/generate-text/run-tools-transformation.test.ts index 8e6998a22d0b..f4340ebf6059 100644 --- a/packages/ai/core/generate-text/run-tools-transformation.test.ts +++ b/packages/ai/core/generate-text/run-tools-transformation.test.ts @@ -1,11 +1,11 @@ import { LanguageModelV1StreamPart } from '@ai-sdk/provider'; +import { delay } from '@ai-sdk/provider-utils'; import { convertArrayToReadableStream, convertReadableStreamToArray, } from '@ai-sdk/provider-utils/test'; import { z } from 'zod'; import { NoSuchToolError } from '../../errors'; -import { delay } from '../../util/delay'; import { MockTracer } from '../test/mock-tracer'; import { runToolsTransformation } from './run-tools-transformation'; diff --git a/packages/ai/core/generate-text/smooth-stream.ts b/packages/ai/core/generate-text/smooth-stream.ts index 2a6f4a4b986d..c328376d9fa5 100644 --- a/packages/ai/core/generate-text/smooth-stream.ts +++ b/packages/ai/core/generate-text/smooth-stream.ts @@ -1,5 +1,5 @@ import { InvalidArgumentError } from '@ai-sdk/provider'; -import { delay as originalDelay } from '../../util/delay'; +import { delay as originalDelay } from '@ai-sdk/provider-utils'; import { CoreTool } from '../tool/tool'; import { TextStreamPart } from './stream-text-result'; diff --git a/packages/ai/core/generate-text/stream-text.test.ts b/packages/ai/core/generate-text/stream-text.test.ts index 1b931d7c1dbf..4dffcd65fe05 100644 --- a/packages/ai/core/generate-text/stream-text.test.ts +++ b/packages/ai/core/generate-text/stream-text.test.ts @@ -4,6 +4,7 @@ import { LanguageModelV1CallWarning, LanguageModelV1StreamPart, } from '@ai-sdk/provider'; +import { delay } from '@ai-sdk/provider-utils'; import { convertArrayToReadableStream, convertAsyncIterableToArray, @@ -15,7 +16,6 @@ import assert from 'node:assert'; import { z } from 'zod'; import { ToolExecutionError } from '../../errors/tool-execution-error'; import { StreamData } from '../../streams/stream-data'; -import { delay } from '../../util/delay'; import { createDataStream } from '../data-stream/create-data-stream'; import { mockId } from '../test/mock-id'; import { MockLanguageModelV1 } from '../test/mock-language-model-v1'; diff --git a/packages/ai/core/util/simulate-readable-stream.ts b/packages/ai/core/util/simulate-readable-stream.ts index d10c2b63b766..8ceb4a6388aa 100644 --- a/packages/ai/core/util/simulate-readable-stream.ts +++ b/packages/ai/core/util/simulate-readable-stream.ts @@ -1,4 +1,4 @@ -import { delay as delayFunction } from '../../util/delay'; +import { delay as delayFunction } from '@ai-sdk/provider-utils'; /** * Creates a ReadableStream that emits the provided values with an optional delay between each value. diff --git a/packages/ai/rsc/stream-ui/stream-ui.ui.test.tsx b/packages/ai/rsc/stream-ui/stream-ui.ui.test.tsx index 7e227b7e22ce..5d51bd6cec23 100644 --- a/packages/ai/rsc/stream-ui/stream-ui.ui.test.tsx +++ b/packages/ai/rsc/stream-ui/stream-ui.ui.test.tsx @@ -1,8 +1,8 @@ +import { delay } from '@ai-sdk/provider-utils'; import { convertArrayToReadableStream } from '@ai-sdk/provider-utils/test'; import { MockLanguageModelV1 } from '../../core/test/mock-language-model-v1'; import { streamUI } from './stream-ui'; import { z } from 'zod'; -import { delay } from '../../util/delay'; async function recursiveResolve(val: any): Promise { if (val && typeof val === 'object' && typeof val.then === 'function') { diff --git a/packages/ai/rsc/streamable-ui/create-streamable-ui.ui.test.tsx b/packages/ai/rsc/streamable-ui/create-streamable-ui.ui.test.tsx index cca38b972c89..9bec8f477d0b 100644 --- a/packages/ai/rsc/streamable-ui/create-streamable-ui.ui.test.tsx +++ b/packages/ai/rsc/streamable-ui/create-streamable-ui.ui.test.tsx @@ -1,4 +1,4 @@ -import { delay } from '../../util/delay'; +import { delay } from '@ai-sdk/provider-utils'; import { createStreamableUI } from './create-streamable-ui'; // This is a workaround to render the Flight response in a test environment. diff --git a/packages/ai/rsc/streamable-value/create-streamable-value.test.tsx b/packages/ai/rsc/streamable-value/create-streamable-value.test.tsx index 9d38b471c866..0b9c11edfed6 100644 --- a/packages/ai/rsc/streamable-value/create-streamable-value.test.tsx +++ b/packages/ai/rsc/streamable-value/create-streamable-value.test.tsx @@ -1,5 +1,5 @@ +import { delay } from '@ai-sdk/provider-utils'; import { convertArrayToReadableStream } from '@ai-sdk/provider-utils/test'; -import { delay } from '../../util/delay'; import { createStreamableValue } from './create-streamable-value'; import { STREAMABLE_VALUE_TYPE, StreamableValue } from './streamable-value'; diff --git a/packages/ai/rsc/streamable-value/read-streamable-value.ui.test.tsx b/packages/ai/rsc/streamable-value/read-streamable-value.ui.test.tsx index 37c0e939971c..83b9befc565a 100644 --- a/packages/ai/rsc/streamable-value/read-streamable-value.ui.test.tsx +++ b/packages/ai/rsc/streamable-value/read-streamable-value.ui.test.tsx @@ -1,4 +1,4 @@ -import { delay } from '../../util/delay'; +import { delay } from '@ai-sdk/provider-utils'; import { createStreamableValue } from './create-streamable-value'; import { readStreamableValue } from './read-streamable-value'; diff --git a/packages/ai/util/retry-with-exponential-backoff.ts b/packages/ai/util/retry-with-exponential-backoff.ts index 21a31ae4f04c..72c3cfae445f 100644 --- a/packages/ai/util/retry-with-exponential-backoff.ts +++ b/packages/ai/util/retry-with-exponential-backoff.ts @@ -1,6 +1,5 @@ import { APICallError } from '@ai-sdk/provider'; -import { getErrorMessage, isAbortError } from '@ai-sdk/provider-utils'; -import { delay } from './delay'; +import { delay, getErrorMessage, isAbortError } from '@ai-sdk/provider-utils'; import { RetryError } from './retry-error'; export type RetryFunction = ( diff --git a/packages/luma/src/luma-image-model.ts b/packages/luma/src/luma-image-model.ts index 5a256f0cfff0..0706336d1b63 100644 --- a/packages/luma/src/luma-image-model.ts +++ b/packages/luma/src/luma-image-model.ts @@ -10,6 +10,7 @@ import { createJsonResponseHandler, createJsonErrorResponseHandler, createStatusCodeErrorResponseHandler, + delay, getFromApi, postJsonToApi, } from '@ai-sdk/provider-utils'; @@ -29,12 +30,6 @@ interface LumaImageModelConfig { }; } -async function delay(delayInMs?: number | null): Promise { - return delayInMs == null - ? Promise.resolve() - : new Promise(resolve => setTimeout(resolve, delayInMs)); -} - export class LumaImageModel implements ImageModelV1 { readonly specificationVersion = 'v1'; diff --git a/packages/ai/util/delay.ts b/packages/provider-utils/src/delay.ts similarity index 100% rename from packages/ai/util/delay.ts rename to packages/provider-utils/src/delay.ts diff --git a/packages/provider-utils/src/index.ts b/packages/provider-utils/src/index.ts index f89ad5721daa..e2b51f9925f2 100644 --- a/packages/provider-utils/src/index.ts +++ b/packages/provider-utils/src/index.ts @@ -1,5 +1,6 @@ export * from './combine-headers'; export { convertAsyncIteratorToReadableStream } from './convert-async-iterator-to-readable-stream'; +export * from './delay'; export * from './extract-response-headers'; export * from './fetch-function'; export { createIdGenerator, generateId } from './generate-id';