{"version":3,"sources":["../src/provider.ts"],"names":["options"],"mappings":"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","file":"index.mjs","sourcesContent":["import type {\n  LanguageModelV1,\n  EmbeddingModelV1,\n  ImageModelV1,\n} from '@ai-sdk/provider';\nimport {\n  OpenAICompatibleChatLanguageModel,\n  OpenAICompatibleCompletionLanguageModel,\n  OpenAICompatibleEmbeddingModel,\n  OpenAICompatibleImageModel,\n} from '@ai-sdk/openai-compatible';\nimport {\n  type FetchFunction,\n  loadApiKey,\n  withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport type {\n  VantEdgeAIChatSettings,\n  VantEdgeAIChatModelId,\n} from './chat-settings';\nimport type {\n  VantEdgeAICompletionModelId,\n  VantEdgeAICompletionSettings,\n} from './completion-settings';\nimport type {\n  VantEdgeAIEmbeddingModelId,\n  VantEdgeAIEmbeddingSettings,\n} from './embedding-settings';\nimport type {\n  VantEdgeAIImageSettings,\n  VantEdgeAIImageModelId,\n} from './image-settings';\n\n// Import your model id and settings here.\n\nexport interface VantEdgeAIProviderSettings {\n  /**\nVantEdgeAI 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  /**\nOptional custom url query parameters to include in request urls.\n*/\n  queryParams?: 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 VantEdgeAIProvider {\n  /**\nCreates a model for text generation.\n*/\n  (\n    modelId: VantEdgeAIChatModelId,\n    settings?: VantEdgeAIChatSettings,\n  ): LanguageModelV1;\n\n  /**\nCreates a chat model for text generation.\n*/\n  chatModel(\n    modelId: VantEdgeAIChatModelId,\n    settings?: VantEdgeAIChatSettings,\n  ): LanguageModelV1;\n\n  /**\nCreates a completion model for text generation.\n*/\n  completionModel(\n    modelId: VantEdgeAICompletionModelId,\n    settings?: VantEdgeAICompletionSettings,\n  ): LanguageModelV1;\n\n  /**\nCreates a text embedding model for text generation.\n*/\n  textEmbeddingModel(\n    modelId: VantEdgeAIEmbeddingModelId,\n    settings?: VantEdgeAIEmbeddingSettings,\n  ): EmbeddingModelV1<string>;\n\n  /**\nCreates an image model for image generation.\n*/\n  imageModel(\n    modelId: VantEdgeAIImageModelId,\n    settings?: VantEdgeAIImageSettings,\n  ): ImageModelV1;\n}\n\n// Global threadId context\nlet globalThreadId: string | null = null;\n\nexport function setGlobalThreadId(threadId: string) {\n  globalThreadId = threadId;\n}\n\nexport function createVantEdgeAI(\n  options: VantEdgeAIProviderSettings = {},\n): VantEdgeAIProvider {\n  const baseURL = withoutTrailingSlash(\n    options.baseURL ?? `${process.env.NEXT_PUBLIC_API_URL}`,\n  );\n  const getHeaders = () => ({\n    Authorization: `Bearer ${loadApiKey({\n      apiKey: options.apiKey ?? '1234567890',\n      environmentVariableName: 'VANTEDGEAI_API_KEY',\n      description: 'VantEdgeAI 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: `vantedgeai.${modelType}`,\n    url: ({ path }) => {\n      const url = new URL(`${baseURL}${path}`);\n      if (options.queryParams) {\n        url.search = new URLSearchParams(options.queryParams).toString();\n      }\n      return url.toString();\n    },\n    headers: getHeaders,\n    fetch: options.fetch,\n  });\n\n  const createChatModel = (\n    modelId: VantEdgeAIChatModelId,\n    settings: VantEdgeAIChatSettings = {},\n  ) => {\n    // Create a custom fetch function that adds threadId to the request body\n    const customFetch: FetchFunction = async (url, options) => {\n      if (options?.body && (settings.threadId || globalThreadId)) {\n        try {\n          const body = JSON.parse(options.body as string);\n          body.threadId = settings.threadId || globalThreadId;\n          options.body = JSON.stringify(body);\n        } catch (error) {\n          console.warn(\n            'Failed to parse request body for threadId injection:',\n            error,\n          );\n        }\n      }\n\n      // Use the original fetch function\n      return globalThis.fetch(url, options);\n    };\n\n    return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n      ...getCommonModelConfig('chat'),\n      defaultObjectGenerationMode: 'tool',\n      fetch: customFetch,\n    });\n  };\n\n  const createCompletionModel = (\n    modelId: VantEdgeAICompletionModelId,\n    settings: VantEdgeAICompletionSettings = {},\n  ) =>\n    new OpenAICompatibleCompletionLanguageModel(\n      modelId,\n      settings,\n      getCommonModelConfig('completion'),\n    );\n\n  const createTextEmbeddingModel = (\n    modelId: VantEdgeAIEmbeddingModelId,\n    settings: VantEdgeAIEmbeddingSettings = {},\n  ) =>\n    new OpenAICompatibleEmbeddingModel(\n      modelId,\n      settings,\n      getCommonModelConfig('embedding'),\n    );\n\n  const createImageModel = (\n    modelId: VantEdgeAIImageModelId,\n    settings: VantEdgeAIImageSettings = {},\n  ) =>\n    new OpenAICompatibleImageModel(\n      modelId,\n      settings,\n      getCommonModelConfig('image'),\n    );\n\n  const provider = (\n    modelId: VantEdgeAIChatModelId,\n    settings?: VantEdgeAIChatSettings,\n  ) => createChatModel(modelId, settings);\n\n  provider.completionModel = createCompletionModel;\n  provider.chatModel = createChatModel;\n  provider.textEmbeddingModel = createTextEmbeddingModel;\n  provider.imageModel = createImageModel;\n\n  return provider;\n}\n\n// Export default instance\nexport const vantedgeai = createVantEdgeAI();\n"]}