{"version":3,"sources":["../src/fireworks-provider.ts","../src/fireworks-image-model.ts"],"sourcesContent":["import {\n  OpenAICompatibleChatLanguageModel,\n  OpenAICompatibleCompletionLanguageModel,\n  OpenAICompatibleEmbeddingModel,\n  ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport {\n  EmbeddingModelV1,\n  ImageModelV1,\n  LanguageModelV1,\n  ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n  FetchFunction,\n  loadApiKey,\n  withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport {\n  FireworksChatModelId,\n  FireworksChatSettings,\n} from './fireworks-chat-settings';\nimport {\n  FireworksCompletionModelId,\n  FireworksCompletionSettings,\n} from './fireworks-completion-settings';\nimport {\n  FireworksEmbeddingModelId,\n  FireworksEmbeddingSettings,\n} from './fireworks-embedding-settings';\nimport { FireworksImageModel } from './fireworks-image-model';\nimport {\n  FireworksImageModelId,\n  FireworksImageSettings,\n} from './fireworks-image-settings';\n\nexport type FireworksErrorData = z.infer<typeof fireworksErrorSchema>;\n\nconst fireworksErrorSchema = z.object({\n  error: z.string(),\n});\n\nconst fireworksErrorStructure: ProviderErrorStructure<FireworksErrorData> = {\n  errorSchema: fireworksErrorSchema,\n  errorToMessage: data => data.error,\n};\n\nexport interface FireworksProviderSettings {\n  /**\nFireworks API key. Default value is taken from the `FIREWORKS_API_KEY`\nenvironment variable.\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 FireworksProvider extends ProviderV1 {\n  /**\nCreates a model for text generation.\n*/\n  (\n    modelId: FireworksChatModelId,\n    settings?: FireworksChatSettings,\n  ): LanguageModelV1;\n\n  /**\nCreates a chat model for text generation.\n*/\n  chatModel(\n    modelId: FireworksChatModelId,\n    settings?: FireworksChatSettings,\n  ): LanguageModelV1;\n\n  /**\nCreates a completion model for text generation.\n*/\n  completionModel(\n    modelId: FireworksCompletionModelId,\n    settings?: FireworksCompletionSettings,\n  ): LanguageModelV1;\n\n  /**\nCreates a chat model for text generation.\n*/\n  languageModel(\n    modelId: FireworksChatModelId,\n    settings?: FireworksChatSettings,\n  ): LanguageModelV1;\n\n  /**\nCreates a text embedding model for text generation.\n*/\n  textEmbeddingModel(\n    modelId: FireworksEmbeddingModelId,\n    settings?: FireworksEmbeddingSettings,\n  ): EmbeddingModelV1<string>;\n\n  /**\nCreates a model for image generation.\n*/\n  image(\n    modelId: FireworksImageModelId,\n    settings?: FireworksImageSettings,\n  ): ImageModelV1;\n\n  /**\nCreates a model for image generation.\n*/\n  imageModel(\n    modelId: FireworksImageModelId,\n    settings?: FireworksImageSettings,\n  ): ImageModelV1;\n}\n\nconst defaultBaseURL = 'https://api.fireworks.ai/inference/v1';\n\nexport function createFireworks(\n  options: FireworksProviderSettings = {},\n): FireworksProvider {\n  const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n  const getHeaders = () => ({\n    Authorization: `Bearer ${loadApiKey({\n      apiKey: options.apiKey,\n      environmentVariableName: 'FIREWORKS_API_KEY',\n      description: 'Fireworks 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: `fireworks.${modelType}`,\n    url: ({ path }) => `${baseURL}${path}`,\n    headers: getHeaders,\n    fetch: options.fetch,\n  });\n\n  const createChatModel = (\n    modelId: FireworksChatModelId,\n    settings: FireworksChatSettings = {},\n  ) => {\n    return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n      ...getCommonModelConfig('chat'),\n      errorStructure: fireworksErrorStructure,\n      defaultObjectGenerationMode: 'json',\n    });\n  };\n\n  const createCompletionModel = (\n    modelId: FireworksCompletionModelId,\n    settings: FireworksCompletionSettings = {},\n  ) =>\n    new OpenAICompatibleCompletionLanguageModel(modelId, settings, {\n      ...getCommonModelConfig('completion'),\n      errorStructure: fireworksErrorStructure,\n    });\n\n  const createTextEmbeddingModel = (\n    modelId: FireworksEmbeddingModelId,\n    settings: FireworksEmbeddingSettings = {},\n  ) =>\n    new OpenAICompatibleEmbeddingModel(modelId, settings, {\n      ...getCommonModelConfig('embedding'),\n      errorStructure: fireworksErrorStructure,\n    });\n\n  const createImageModel = (\n    modelId: FireworksImageModelId,\n    settings: FireworksImageSettings = {},\n  ) =>\n    new FireworksImageModel(modelId, settings, {\n      ...getCommonModelConfig('image'),\n      baseURL: baseURL ?? defaultBaseURL,\n    });\n\n  const provider = (\n    modelId: FireworksChatModelId,\n    settings?: FireworksChatSettings,\n  ) => createChatModel(modelId, settings);\n\n  provider.completionModel = createCompletionModel;\n  provider.chatModel = createChatModel;\n  provider.languageModel = createChatModel;\n  provider.textEmbeddingModel = createTextEmbeddingModel;\n  provider.image = createImageModel;\n  provider.imageModel = createImageModel;\n  return provider;\n}\n\nexport const fireworks = createFireworks();\n","import { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  createBinaryResponseHandler,\n  createStatusCodeErrorResponseHandler,\n  FetchFunction,\n  postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport {\n  FireworksImageModelId,\n  FireworksImageSettings,\n} from './fireworks-image-settings';\n\ninterface FireworksImageModelBackendConfig {\n  urlFormat: 'workflows' | 'image_generation';\n  supportsSize?: boolean;\n}\n\nconst modelToBackendConfig: Partial<\n  Record<FireworksImageModelId, FireworksImageModelBackendConfig>\n> = {\n  'accounts/fireworks/models/flux-1-dev-fp8': {\n    urlFormat: 'workflows',\n  },\n  'accounts/fireworks/models/flux-1-schnell-fp8': {\n    urlFormat: 'workflows',\n  },\n  'accounts/fireworks/models/playground-v2-5-1024px-aesthetic': {\n    urlFormat: 'image_generation',\n    supportsSize: true,\n  },\n  'accounts/fireworks/models/japanese-stable-diffusion-xl': {\n    urlFormat: 'image_generation',\n    supportsSize: true,\n  },\n  'accounts/fireworks/models/playground-v2-1024px-aesthetic': {\n    urlFormat: 'image_generation',\n    supportsSize: true,\n  },\n  'accounts/fireworks/models/stable-diffusion-xl-1024-v1-0': {\n    urlFormat: 'image_generation',\n    supportsSize: true,\n  },\n  'accounts/fireworks/models/SSD-1B': {\n    urlFormat: 'image_generation',\n    supportsSize: true,\n  },\n};\n\nfunction getUrlForModel(\n  baseUrl: string,\n  modelId: FireworksImageModelId,\n): string {\n  switch (modelToBackendConfig[modelId]?.urlFormat) {\n    case 'image_generation':\n      return `${baseUrl}/image_generation/${modelId}`;\n    case 'workflows':\n    default:\n      return `${baseUrl}/workflows/${modelId}/text_to_image`;\n  }\n}\n\ninterface FireworksImageModelConfig {\n  provider: string;\n  baseURL: string;\n  headers: () => Record<string, string>;\n  fetch?: FetchFunction;\n  _internal?: {\n    currentDate?: () => Date;\n  };\n}\n\nexport class FireworksImageModel 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: FireworksImageModelId,\n    readonly settings: FireworksImageSettings,\n    private config: FireworksImageModelConfig,\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    const backendConfig = modelToBackendConfig[this.modelId];\n    if (!backendConfig?.supportsSize && size != null) {\n      warnings.push({\n        type: 'unsupported-setting',\n        setting: 'size',\n        details:\n          'This model does not support the `size` option. Use `aspectRatio` instead.',\n      });\n    }\n\n    // Use supportsSize as a proxy for whether the model does not support\n    // aspectRatio. This invariant holds for the current set of models.\n    if (backendConfig?.supportsSize && aspectRatio != null) {\n      warnings.push({\n        type: 'unsupported-setting',\n        setting: 'aspectRatio',\n        details: 'This model does not support the `aspectRatio` option.',\n      });\n    }\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: getUrlForModel(this.config.baseURL, this.modelId),\n      headers: combineHeaders(this.config.headers(), headers),\n      body: {\n        prompt,\n        aspect_ratio: aspectRatio,\n        seed,\n        samples: n,\n        ...(splitSize && { width: splitSize[0], height: splitSize[1] }),\n        ...(providerOptions.fireworks ?? {}),\n      },\n      failedResponseHandler: createStatusCodeErrorResponseHandler(),\n      successfulResponseHandler: createBinaryResponseHandler(),\n      abortSignal,\n      fetch: this.config.fetch,\n    });\n\n    return {\n      images: [response],\n      warnings,\n      response: {\n        timestamp: currentDate,\n        modelId: this.modelId,\n        headers: responseHeaders,\n      },\n    };\n  }\n}\n"],"mappings":"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","names":[]}