import { axBaseAIDefaultConfig } from '../base.js'; import { AxAIOpenAIBase } from '../openai/api.js'; import type { AxAIOpenAIArgs } from '../openai/api.js'; import type { AxAIOpenAIConfig } from '../openai/chat_types.js'; import type { AxAIServiceOptions } from '../types.js'; type DreamsRouterConfig = AxAIOpenAIConfig; export const axAIDreamsRouterDefaultConfig = (): DreamsRouterConfig => structuredClone({ model: 'dreamsrouter/auto', ...axBaseAIDefaultConfig(), }); export type AxAIDreamsRouterArgs = Omit< AxAIOpenAIArgs<'dreamsrouter', string, unknown, TModelKey>, 'apiKey' > & { referer?: string; title?: string; options?: Readonly; }; export class AxAIDreamsRouter extends AxAIOpenAIBase< string, unknown, TModelKey > { constructor({ config, options, models, modelInfo, referer, title, }: Readonly, 'name'>>) { const Config: DreamsRouterConfig = { ...axAIDreamsRouterDefaultConfig(), ...config, }; const supportFor = { functions: true, streaming: true, hasThinkingBudget: false, hasShowThoughts: false, media: { images: { supported: false, formats: [] }, audio: { supported: false, formats: [] }, files: { supported: false, formats: [], uploadMethod: 'none' as const }, urls: { supported: false, webSearch: false, contextFetching: false }, }, caching: { supported: false, types: [] }, thinking: false, multiTurn: true, }; const ModelInfo = modelInfo ?? []; super({ apiKey: 'dreamsrouter-not-required', config: Config, options, apiURL: 'https://dreamsrouter.ai/api/v1', modelInfo: ModelInfo, models, supportFor, }); super.setName('DreamsRouter'); super.setHeaders(async () => { const headers: Record = {}; if (referer) headers['HTTP-Referer'] = referer; if (title) headers['X-Title'] = title; return headers; }); } }