import { ProviderV1, LanguageModelV1, EmbeddingModelV1 } from '@ai-sdk/provider';
import { FetchFunction } from '@ai-sdk/provider-utils';

type ZhipuChatModelId = "glm-4-plus" | "glm-4-air-0111" | "glm-4-air" | "glm-4-airx" | "glm-4-long" | "glm-4-flash" | "glm-4-flashx" | "glm-4v-plus-0111" | "glm-4v-plus" | "glm-4v" | "glm-4v-flash" | "glm-zero-preview" | (string & {});
interface ZhipuChatSettings {
    /**
     * The unique ID of the end user, helps the platform intervene in illegal activities, generate illegal or improper information, or other abuse by the end user.
     * ID length requirement: at least 6 characters, up to 128 characters.
     */
    userId?: string;
    /**
     * The unique ID of the request, passed by the user side, must be unique;
     * The platform will generate one by default if not provided by the user side.
     */
    requestId?: string;
    /**
     * When do_sample is true, sampling strategy is enabled, when do_sample is false, the sampling strategy temperature, top_p will not take effect
     */
    doSample?: boolean;
}

type ZhipuEmbeddingModelId = "embedding-2" | "embedding-3" | (string & {});
interface ZhipuEmbeddingSettings {
    /**
     * Override the embedding dimension, defaults to 2048.
     * 256, 512, 1024 or 2048 are recommended for embedding-3.
     */
    dimensions?: number;
}

interface ZhipuProvider extends ProviderV1 {
    (modelId: ZhipuChatModelId, settings?: ZhipuChatSettings): LanguageModelV1;
    /**
  Creates a model for text generation.
  */
    languageModel(modelId: ZhipuChatModelId, settings?: ZhipuChatSettings): LanguageModelV1;
    /**
  Creates a model for text generation.
  */
    chat(modelId: ZhipuChatModelId, settings?: ZhipuChatSettings): LanguageModelV1;
    /**
  @deprecated Use `textEmbeddingModel()` instead.
     */
    embedding(modelId: ZhipuEmbeddingModelId, settings?: ZhipuEmbeddingSettings): EmbeddingModelV1<string>;
    /**
  @deprecated Use `textEmbeddingModel()` instead.
     */
    textEmbedding(modelId: ZhipuEmbeddingModelId, settings?: ZhipuEmbeddingSettings): EmbeddingModelV1<string>;
    textEmbeddingModel: (modelId: ZhipuEmbeddingModelId, settings?: ZhipuEmbeddingSettings) => EmbeddingModelV1<string>;
}
interface ZhipuProviderSettings {
    /**
  Use a different URL prefix for API calls, e.g. to use proxy servers.
  The default prefix is `https://open.bigmodel.cn/api/paas/v4`.
     */
    baseURL?: string;
    /**
  API key that is being send using the `Authorization` header.
  It defaults to the `ZHIPU_API_KEY` environment variable.
     */
    apiKey?: string;
    /**
  Custom headers to include in the requests.
       */
    headers?: Record<string, string>;
    /**
  Custom fetch implementation. You can use it as a middleware to intercept requests,
  or to provide a custom fetch implementation for e.g. testing.
      */
    fetch?: FetchFunction;
}
/**
Create a Zhipu AI provider instance.
 */
declare function createZhipu(options?: ZhipuProviderSettings): ZhipuProvider;
/**
Default Zhipu provider instance.
 */
declare const zhipu: ZhipuProvider;

export { type ZhipuProvider, type ZhipuProviderSettings, createZhipu, zhipu };
