export { convertArrayToReadableStream } from '@ai-sdk/provider-utils/test';
import { EmbeddingModelV1, LanguageModelV1 } from '@ai-sdk/provider';

declare class MockEmbeddingModelV1<VALUE> implements EmbeddingModelV1<VALUE> {
    readonly specificationVersion = "v1";
    readonly provider: EmbeddingModelV1<VALUE>['provider'];
    readonly modelId: EmbeddingModelV1<VALUE>['modelId'];
    readonly maxEmbeddingsPerCall: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'];
    readonly supportsParallelCalls: EmbeddingModelV1<VALUE>['supportsParallelCalls'];
    doEmbed: EmbeddingModelV1<VALUE>['doEmbed'];
    constructor({ provider, modelId, maxEmbeddingsPerCall, supportsParallelCalls, doEmbed, }?: {
        provider?: EmbeddingModelV1<VALUE>['provider'];
        modelId?: EmbeddingModelV1<VALUE>['modelId'];
        maxEmbeddingsPerCall?: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'] | null;
        supportsParallelCalls?: EmbeddingModelV1<VALUE>['supportsParallelCalls'];
        doEmbed?: EmbeddingModelV1<VALUE>['doEmbed'];
    });
}

declare function mockId(): () => string;

declare class MockLanguageModelV1 implements LanguageModelV1 {
    readonly specificationVersion = "v1";
    readonly provider: LanguageModelV1['provider'];
    readonly modelId: LanguageModelV1['modelId'];
    supportsUrl: LanguageModelV1['supportsUrl'];
    doGenerate: LanguageModelV1['doGenerate'];
    doStream: LanguageModelV1['doStream'];
    readonly defaultObjectGenerationMode: LanguageModelV1['defaultObjectGenerationMode'];
    readonly supportsStructuredOutputs: LanguageModelV1['supportsStructuredOutputs'];
    constructor({ provider, modelId, supportsUrl, doGenerate, doStream, defaultObjectGenerationMode, supportsStructuredOutputs, }?: {
        provider?: LanguageModelV1['provider'];
        modelId?: LanguageModelV1['modelId'];
        supportsUrl?: LanguageModelV1['supportsUrl'];
        doGenerate?: LanguageModelV1['doGenerate'];
        doStream?: LanguageModelV1['doStream'];
        defaultObjectGenerationMode?: LanguageModelV1['defaultObjectGenerationMode'];
        supportsStructuredOutputs?: LanguageModelV1['supportsStructuredOutputs'];
    });
}

declare function mockValues<T>(...values: T[]): () => T;

/**
 * Creates a ReadableStream that emits the provided values with an optional delay between each value.
 *
 * @param options - The configuration options
 * @param options.values - Array of values to be emitted by the stream
 * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0)
 * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0)
 * @returns A ReadableStream that emits the provided values
 */
declare function simulateReadableStream<T>({ values, initialDelayInMs, chunkDelayInMs, _internal, }: {
    values: T[];
    initialDelayInMs?: number;
    chunkDelayInMs?: number;
    _internal?: {
        delay?: (ms: number) => Promise<void>;
    };
}): ReadableStream<T>;

export { MockEmbeddingModelV1, MockLanguageModelV1, mockId, mockValues, simulateReadableStream };
