{"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-AKQOSSWK.cjs","../src/models/AiModelsService.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACPA,+CAAoC;AAapC,SAAS,aAAA,CAAc,OAAA,EAAqD;AAC1E,EAAA,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAa,OAAO,SAAA;AAChC,EAAA,wBAAO,OAAA,CAAQ,MAAA,UAAU,QAAA;AAC3B;AAEA,SAAS,oBAAA,CACP,SAAA,EACA,GAAA,EACiB;AACjB,EAAA,MAAM,IAAA,EAAuB,CAAC,CAAA;AAC9B,EAAA,MAAM,KAAA,kBAAO,IAAI,GAAA,CAAY,CAAA;AAC7B,EAAA,IAAA,CAAA,MAAW,EAAA,GAAK,SAAA,EAAW;AACzB,IAAA,MAAM,WAAA,EAAa;AAAA,MACjB,CAAA,EAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA;AACF;AAMa;AACM,EAAA;AACA,EAAA;AAEjB,EAAA;AACE,IAAA;AACA,IAAA;AACF,EAAA;AAEA,EAAA;AACE,IAAA;AACF,EAAA;AAEA,EAAA;AAGE,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACD,IAAA;AACH,EAAA;AAEA,EAAA;AACE,IAAA;AACA,IAAA;AACA,IAAA;AAEA,IAAA;AACE,MAAA;AACA,MAAA;AACF,IAAA;AAEA,IAAA;AACA,IAAA;AACF,EAAA;AAEA,EAAA;AACE,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AAEA,EAAA;AACE,IAAA;AACA,IAAA;AACF,EAAA;AAEA,EAAA;AACE,IAAA;AACF,EAAA;AAEA,EAAA;AAIE,IAAA;AACF,EAAA;AAEA,EAAA;AAIE,IAAA;AACF,EAAA;AAEA,EAAA;AACE,IAAA;AACF,EAAA;AACF;AAEA;AAKE,EAAA;AACF;ADrCO;AACA;AACA;AACA;AACA","file":"/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-AKQOSSWK.cjs","sourcesContent":[null,"import { listAICatalogModels } from \"@x12i/ai-profiles\";\nimport type { CatalogModelSummary, RegistrySourceMode } from \"@x12i/ai-profiles\";\nimport { AiModelsCatalogClient } from \"../catalog/AiModelsCatalogClient.js\";\nimport type { AiModelsCatalogClientOptions } from \"../catalog/AiModelsCatalogClient.js\";\nimport type { AiModelRecord, ModelListFilters, ModelListResult } from \"./types.js\";\nimport {\n  resolveModelVendor,\n  type ModelVendorRef,\n  type ResolveModelVendorOptions,\n} from \"../cost/resolveModelVendor.js\";\n\nexport type AiModelsServiceOptions = AiModelsCatalogClientOptions;\n\nfunction catalogSource(options: AiModelsServiceOptions): RegistrySourceMode {\n  if (options.bundledOnly) return \"bundled\";\n  return options.source ?? \"auto\";\n}\n\nfunction hydrateFromSummaries(\n  summaries: CatalogModelSummary[],\n  all: Map<string, AiModelRecord>,\n): AiModelRecord[] {\n  const out: AiModelRecord[] = [];\n  const seen = new Set<string>();\n  for (const s of summaries) {\n    const candidates = [\n      `${s.provider}/${s.modelId}`,\n      s.modelId,\n      s.openRouterModelId,\n    ];\n    let record: AiModelRecord | undefined;\n    for (const id of candidates) {\n      const hit = all.get(id);\n      if (!hit) continue;\n      if (hit.providerId === s.provider) {\n        record = hit;\n        break;\n      }\n      record ??= hit;\n    }\n    if (record && !seen.has(record.modelId)) {\n      seen.add(record.modelId);\n      out.push(record);\n    }\n  }\n  return out;\n}\n\n/**\n * High-level model catalog API — list, filter, count, and get full model info.\n * Attribute filters are delegated to `@x12i/ai-profiles` {@link listAICatalogModels}.\n */\nexport class AiModelsService {\n  private readonly client: AiModelsCatalogClient;\n  private readonly options: AiModelsServiceOptions;\n\n  constructor(options: AiModelsServiceOptions = {}) {\n    this.options = options;\n    this.client = new AiModelsCatalogClient(options);\n  }\n\n  async getAllModels(): Promise<Map<string, AiModelRecord>> {\n    return this.client.getAllModels();\n  }\n\n  private async listSummaries(\n    filters: Omit<ModelListFilters, \"limit\" | \"offset\" | \"supportedParameter\">,\n  ): Promise<CatalogModelSummary[]> {\n    const source = catalogSource(this.options);\n    return listAICatalogModels({\n      source,\n      ...(source !== \"auto\" ? { refresh: true as const } : {}),\n      provider: filters.providerId,\n      status: filters.status,\n      inputModality: filters.inputModality,\n      outputModality: filters.outputModality,\n      supportsTools: filters.supportsTools,\n      supportsReasoning: filters.supportsReasoning,\n      search: filters.search,\n    });\n  }\n\n  private async filteredRecords(filters: ModelListFilters = {}): Promise<AiModelRecord[]> {\n    const summaries = await this.listSummaries(filters);\n    const all = await this.getAllModels();\n    let models = hydrateFromSummaries(summaries, all);\n\n    if (filters.supportedParameter) {\n      const param = filters.supportedParameter;\n      models = models.filter((m) => m.supportedParameters.includes(param));\n    }\n\n    models.sort((a, b) => a.name.localeCompare(b.name));\n    return models;\n  }\n\n  async listModels(filters: ModelListFilters = {}): Promise<ModelListResult> {\n    const allMatching = await this.filteredRecords(filters);\n    const total = allMatching.length;\n    const limit = filters.limit ?? 50;\n    const offset = filters.offset ?? 0;\n    const models = allMatching.slice(offset, offset + limit);\n    return { models, total, limit, offset };\n  }\n\n  async countModels(filters: Omit<ModelListFilters, \"limit\" | \"offset\"> = {}): Promise<number> {\n    const models = await this.filteredRecords(filters);\n    return models.length;\n  }\n\n  async getModelInfo(modelIdOrAlias: string, provider?: string): Promise<AiModelRecord | null> {\n    return this.client.getModel(modelIdOrAlias, provider);\n  }\n\n  async resolve(\n    modelIdOrAlias: string,\n    provider?: string,\n  ): Promise<import(\"../sync/modelNameResolver/types.js\").ModelResolutionResult> {\n    return this.client.resolveModel({ model: modelIdOrAlias, provider });\n  }\n\n  async resolveVendor(\n    model: string,\n    options?: ResolveModelVendorOptions,\n  ): Promise<ModelVendorRef | null> {\n    return resolveModelVendor(model, this.client, options);\n  }\n\n  async refresh(): Promise<void> {\n    await this.client.refresh();\n  }\n}\n\nexport async function getModelInfo(\n  modelIdOrAlias: string,\n  options: AiModelsServiceOptions = {},\n  provider?: string,\n): Promise<AiModelRecord | null> {\n  return new AiModelsService(options).getModelInfo(modelIdOrAlias, provider);\n}\n"]}