{"version":3,"sources":["../src/deepinfra-provider.ts","../src/deepinfra-image-model.ts"],"sourcesContent":["import {\n  LanguageModelV1,\n  EmbeddingModelV1,\n  ProviderV1,\n  ImageModelV1,\n} from '@ai-sdk/provider';\nimport {\n  OpenAICompatibleChatLanguageModel,\n  OpenAICompatibleCompletionLanguageModel,\n  OpenAICompatibleEmbeddingModel,\n} from '@ai-sdk/openai-compatible';\nimport {\n  FetchFunction,\n  loadApiKey,\n  withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n  DeepInfraChatModelId,\n  DeepInfraChatSettings,\n} from './deepinfra-chat-settings';\nimport {\n  DeepInfraEmbeddingModelId,\n  DeepInfraEmbeddingSettings,\n} from './deepinfra-embedding-settings';\nimport {\n  DeepInfraCompletionModelId,\n  DeepInfraCompletionSettings,\n} from './deepinfra-completion-settings';\nimport {\n  DeepInfraImageModelId,\n  DeepInfraImageSettings,\n} from './deepinfra-image-settings';\nimport { DeepInfraImageModel } from './deepinfra-image-model';\n\nexport interface DeepInfraProviderSettings {\n  /**\nDeepInfra API key.\n*/\n  apiKey?: string;\n  /**\nBase URL for the API calls.\n*/\n  baseURL?: string;\n  /**\nCustom headers to include in the requests.\n*/\n  headers?: Record<string, string>;\n  /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n  fetch?: FetchFunction;\n}\n\nexport interface DeepInfraProvider extends ProviderV1 {\n  /**\nCreates a model for text generation.\n*/\n  (\n    modelId: DeepInfraChatModelId,\n    settings?: DeepInfraChatSettings,\n  ): LanguageModelV1;\n\n  /**\nCreates a chat model for text generation.\n*/\n  chatModel(\n    modelId: DeepInfraChatModelId,\n    settings?: DeepInfraChatSettings,\n  ): LanguageModelV1;\n\n  /**\nCreates a model for image generation.\n  */\n  image(\n    modelId: DeepInfraImageModelId,\n    settings?: DeepInfraImageSettings,\n  ): ImageModelV1;\n\n  /**\nCreates a model for image generation.\n  */\n  imageModel(\n    modelId: DeepInfraImageModelId,\n    settings?: DeepInfraImageSettings,\n  ): ImageModelV1;\n\n  /**\nCreates a chat model for text generation.\n*/\n  languageModel(\n    modelId: DeepInfraChatModelId,\n    settings?: DeepInfraChatSettings,\n  ): LanguageModelV1;\n\n  /**\nCreates a completion model for text generation.\n*/\n  completionModel(\n    modelId: DeepInfraCompletionModelId,\n    settings?: DeepInfraCompletionSettings,\n  ): LanguageModelV1;\n\n  /**\nCreates a text embedding model for text generation.\n*/\n  textEmbeddingModel(\n    modelId: DeepInfraEmbeddingModelId,\n    settings?: DeepInfraEmbeddingSettings,\n  ): EmbeddingModelV1<string>;\n}\n\nexport function createDeepInfra(\n  options: DeepInfraProviderSettings = {},\n): DeepInfraProvider {\n  const baseURL = withoutTrailingSlash(\n    options.baseURL ?? 'https://api.deepinfra.com/v1',\n  );\n  const getHeaders = () => ({\n    Authorization: `Bearer ${loadApiKey({\n      apiKey: options.apiKey,\n      environmentVariableName: 'DEEPINFRA_API_KEY',\n      description: \"DeepInfra's API key\",\n    })}`,\n    ...options.headers,\n  });\n\n  interface CommonModelConfig {\n    provider: string;\n    url: ({ path }: { path: string }) => string;\n    headers: () => Record<string, string>;\n    fetch?: FetchFunction;\n  }\n\n  const getCommonModelConfig = (modelType: string): CommonModelConfig => ({\n    provider: `deepinfra.${modelType}`,\n    url: ({ path }) => `${baseURL}/openai${path}`,\n    headers: getHeaders,\n    fetch: options.fetch,\n  });\n\n  const createChatModel = (\n    modelId: DeepInfraChatModelId,\n    settings: DeepInfraChatSettings = {},\n  ) => {\n    return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n      ...getCommonModelConfig('chat'),\n      defaultObjectGenerationMode: 'json',\n    });\n  };\n\n  const createCompletionModel = (\n    modelId: DeepInfraCompletionModelId,\n    settings: DeepInfraCompletionSettings = {},\n  ) =>\n    new OpenAICompatibleCompletionLanguageModel(\n      modelId,\n      settings,\n      getCommonModelConfig('completion'),\n    );\n\n  const createTextEmbeddingModel = (\n    modelId: DeepInfraEmbeddingModelId,\n    settings: DeepInfraEmbeddingSettings = {},\n  ) =>\n    new OpenAICompatibleEmbeddingModel(\n      modelId,\n      settings,\n      getCommonModelConfig('embedding'),\n    );\n\n  const createImageModel = (\n    modelId: DeepInfraImageModelId,\n    settings: DeepInfraImageSettings = {},\n  ) =>\n    new DeepInfraImageModel(modelId, settings, {\n      ...getCommonModelConfig('image'),\n      baseURL: baseURL\n        ? `${baseURL}/inference`\n        : 'https://api.deepinfra.com/v1/inference',\n    });\n\n  const provider = (\n    modelId: DeepInfraChatModelId,\n    settings?: DeepInfraChatSettings,\n  ) => createChatModel(modelId, settings);\n\n  provider.completionModel = createCompletionModel;\n  provider.chatModel = createChatModel;\n  provider.image = createImageModel;\n  provider.imageModel = createImageModel;\n  provider.languageModel = createChatModel;\n  provider.textEmbeddingModel = createTextEmbeddingModel;\n\n  return provider;\n}\n\nexport const deepinfra = createDeepInfra();\n","import { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport {\n  FetchFunction,\n  combineHeaders,\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport {\n  DeepInfraImageModelId,\n  DeepInfraImageSettings,\n} from './deepinfra-image-settings';\nimport { z } from 'zod';\n\ninterface DeepInfraImageModelConfig {\n  provider: string;\n  baseURL: string;\n  headers: () => Record<string, string>;\n  fetch?: FetchFunction;\n  _internal?: {\n    currentDate?: () => Date;\n  };\n}\n\nexport class DeepInfraImageModel implements ImageModelV1 {\n  readonly specificationVersion = 'v1';\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  get maxImagesPerCall(): number {\n    return this.settings.maxImagesPerCall ?? 1;\n  }\n\n  constructor(\n    readonly modelId: DeepInfraImageModelId,\n    readonly settings: DeepInfraImageSettings,\n    private config: DeepInfraImageModelConfig,\n  ) {}\n\n  async doGenerate({\n    prompt,\n    n,\n    size,\n    aspectRatio,\n    seed,\n    providerOptions,\n    headers,\n    abortSignal,\n  }: Parameters<ImageModelV1['doGenerate']>[0]): Promise<\n    Awaited<ReturnType<ImageModelV1['doGenerate']>>\n  > {\n    const warnings: Array<ImageModelV1CallWarning> = [];\n\n    // Some deepinfra models support size while others support aspect ratio.\n    // Allow passing either and leave it up to the server to validate.\n\n    const splitSize = size?.split('x');\n    const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n    const { value: response, responseHeaders } = await postJsonToApi({\n      url: `${this.config.baseURL}/${this.modelId}`,\n      headers: combineHeaders(this.config.headers(), headers),\n      body: {\n        prompt,\n        num_images: n,\n        ...(aspectRatio && { aspect_ratio: aspectRatio }),\n        ...(splitSize && { width: splitSize[0], height: splitSize[1] }),\n        ...(seed != null && { seed }),\n        ...(providerOptions.deepinfra ?? {}),\n      },\n      failedResponseHandler: createJsonErrorResponseHandler({\n        errorSchema: deepInfraErrorSchema,\n        errorToMessage: error => error.detail.error,\n      }),\n      successfulResponseHandler: createJsonResponseHandler(\n        deepInfraImageResponseSchema,\n      ),\n      abortSignal,\n      fetch: this.config.fetch,\n    });\n\n    return {\n      images: response.images.map(image =>\n        image.replace(/^data:image\\/\\w+;base64,/, ''),\n      ),\n      warnings,\n      response: {\n        timestamp: currentDate,\n        modelId: this.modelId,\n        headers: responseHeaders,\n      },\n    };\n  }\n}\n\nexport const deepInfraErrorSchema = z.object({\n  detail: z.object({\n    error: z.string(),\n  }),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const deepInfraImageResponseSchema = z.object({\n  images: z.array(z.string()),\n});\n"],"mappings":"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","names":[]}