{"description":"Original TypeScript sources. Preserve folder structure. Provider source uses zod; models.js already bundles it and needs no install.","license":"LICENSES.txt","files":[{"path":"source/packages/core/src/catalog.ts","content":"import type { ModelCatalog, ModelDescriptor, ProviderId, SourceReference } from \"./types.ts\";\n\n/** A material change between two provider catalog snapshots. */\nexport interface ModelChange {\n  readonly key: string;\n  readonly fields: readonly string[];\n}\n\n/** A deterministic catalog drift report. */\nexport interface CatalogDrift {\n  readonly provider: ProviderId;\n  readonly previousFetchedAt: string;\n  readonly nextFetchedAt: string;\n  readonly added: readonly string[];\n  readonly removed: readonly string[];\n  readonly changed: readonly ModelChange[];\n  readonly hasChanges: boolean;\n}\n\n/** Compare two catalogs and report additions, removals, and material changes. */\nexport function diffCatalogs(previous: ModelCatalog, next: ModelCatalog): CatalogDrift {\n  if (previous.provider !== next.provider) {\n    throw new TypeError(\"Catalogs from different providers cannot be compared.\");\n  }\n\n  const previousByKey = new Map(previous.models.map((model) => [model.key, model]));\n  const nextByKey = new Map(next.models.map((model) => [model.key, model]));\n  const added = [...nextByKey.keys()].filter((key) => !previousByKey.has(key)).sort();\n  const removed = [...previousByKey.keys()].filter((key) => !nextByKey.has(key)).sort();\n  const changed: ModelChange[] = [];\n\n  for (const [key, nextModel] of nextByKey) {\n    const previousModel = previousByKey.get(key);\n    if (previousModel === undefined) {\n      continue;\n    }\n    const fields = changedFields(previousModel, nextModel);\n    if (fields.length > 0) {\n      changed.push({ key, fields });\n    }\n  }\n\n  changed.sort((left, right) => left.key.localeCompare(right.key));\n  return {\n    provider: previous.provider,\n    previousFetchedAt: previous.fetchedAt,\n    nextFetchedAt: next.fetchedAt,\n    added,\n    removed,\n    changed,\n    hasChanges: added.length > 0 || removed.length > 0 || changed.length > 0,\n  };\n}\n\n/** Return whether a catalog exceeds a caller-selected freshness window. */\nexport function isCatalogStale(catalog: ModelCatalog, now: Date, maxAgeMs: number): boolean {\n  const fetchedAt = Date.parse(catalog.fetchedAt);\n  return !Number.isFinite(fetchedAt) || now.getTime() - fetchedAt > maxAgeMs;\n}\n\n/** Build a source reference for a fetched provider response. */\nexport function liveApiSource(url: string, retrievedAt: string): SourceReference {\n  return { kind: \"live-api\", url, retrievedAt };\n}\n\nfunction changedFields(previous: ModelDescriptor, next: ModelDescriptor): string[] {\n  const fields: Array<keyof ModelDescriptor> = [\n    \"name\",\n    \"description\",\n    \"kind\",\n    \"author\",\n    \"lifecycle\",\n    \"releasedAt\",\n    \"contextWindow\",\n    \"maxOutputTokens\",\n    \"capabilities\",\n    \"interfaces\",\n    \"prices\",\n    \"routes\",\n    \"options\",\n    \"constraints\",\n    \"requirements\",\n  ];\n  return fields.filter(\n    (field) => stableSerialize(previous[field]) !== stableSerialize(next[field]),\n  );\n}\n\nfunction stableSerialize(value: unknown): string {\n  return JSON.stringify(sortValue(value));\n}\n\nfunction sortValue(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.map(sortValue);\n  }\n  if (typeof value !== \"object\" || value === null) {\n    return value;\n  }\n  return Object.fromEntries(\n    Object.entries(value)\n      .filter(([key]) => key !== \"raw\" && key !== \"retrievedAt\")\n      .sort(([left], [right]) => left.localeCompare(right))\n      .map(([key, child]) => [key, sortValue(child)]),\n  );\n}\n"},{"path":"source/packages/core/src/curation.ts","content":"import type {\n  EnumOptionDefinition,\n  ModelCatalog,\n  ModelDescriptor,\n  OptionGroup,\n  OptionValue,\n  OptionValues,\n  PriceRate,\n  PriceUnit,\n} from \"./types.ts\";\nimport { selectModel, validateOptions } from \"./options.ts\";\n\n/** A model label owned by the consuming application. */\nexport interface ModelRecommendation {\n  /** A provider-qualified model key or exact provider model ID. */\n  readonly model: string;\n  /** Short text such as \"Recommended for this app\". */\n  readonly label: string;\n  /** Optional longer explanation for richer interfaces. */\n  readonly description?: string;\n  /** Initial options applied when this model is chosen; users can still change them. */\n  readonly options?: OptionValues<ModelDescriptor[\"options\"]>;\n}\n\n/** Resolve an app recommendation without accepting settings the model cannot use. */\nexport function recommendedSelection(\n  model: ModelDescriptor,\n  recommendations: readonly ModelRecommendation[],\n) {\n  const recommendation = recommendations.find(\n    (item) => item.model === model.key || item.model === model.id,\n  );\n  return selectModel(model, recommendation?.options ?? {});\n}\n\n/** Rules that narrow a catalog without changing its provider evidence. */\nexport interface ModelCuration {\n  /** Provider-qualified keys or exact provider model IDs, in preferred order. */\n  readonly include?: readonly string[];\n  /** Allowed values for enum options, keyed by the provider-neutral option key. */\n  readonly optionValues?: Readonly<Record<string, readonly string[]>>;\n}\n\n/** One immutable application policy shared by every model selector presentation. */\nexport interface ModelPolicy {\n  /** Optional model allowlist and app-owned recommendation labels. */\n  readonly models?: {\n    readonly include?: readonly string[];\n    readonly recommendations?: readonly ModelRecommendation[];\n  };\n  /** Option groups exposed by the UI and optional enum value limits. */\n  readonly options?: {\n    readonly groups?: readonly OptionGroup[];\n    readonly values?: Readonly<Record<string, readonly string[]>>;\n    /** App-owned initial values, applied only when the selected model accepts them. */\n    readonly defaults?: OptionValues<ModelDescriptor[\"options\"]>;\n  };\n}\n\ntype CatalogModel<TCatalogs extends readonly ModelCatalog[]> = TCatalogs[number][\"models\"][number];\ntype CatalogOption<TCatalogs extends readonly ModelCatalog[]> =\n  CatalogModel<TCatalogs>[\"options\"][number];\ntype CatalogEnumOption<TCatalogs extends readonly ModelCatalog[]> = Extract<\n  CatalogOption<TCatalogs>,\n  EnumOptionDefinition\n>;\n\n/** A policy checked against literal or generated catalog model and option types. */\nexport interface ModelPolicyFor<TCatalogs extends readonly ModelCatalog[]> {\n  readonly models?: {\n    readonly include?: readonly (CatalogModel<TCatalogs>[\"id\"] | CatalogModel<TCatalogs>[\"key\"])[];\n    readonly recommendations?: readonly (Omit<ModelRecommendation, \"model\"> & {\n      readonly model: CatalogModel<TCatalogs>[\"id\"] | CatalogModel<TCatalogs>[\"key\"];\n    })[];\n  };\n  readonly options?: {\n    readonly groups?: readonly CatalogOption<TCatalogs>[\"group\"][];\n    readonly values?: {\n      readonly [\n        TOption in CatalogEnumOption<TCatalogs> as TOption[\"key\"]\n      ]?: readonly OptionValue<TOption>[];\n    };\n    readonly defaults?: {\n      readonly [TOption in CatalogOption<TCatalogs> as TOption[\"key\"]]?: OptionValue<TOption>;\n    };\n  };\n}\n\n/** The catalogs and display metadata produced from one application policy. */\nexport interface ResolvedModelPolicy {\n  readonly catalogs: readonly ModelCatalog[];\n  readonly groups: readonly OptionGroup[];\n  readonly recommendations: readonly ModelRecommendation[];\n  readonly defaults: OptionValues<ModelDescriptor[\"options\"]>;\n  /** Unknown references or values that could not be applied to the supplied catalogs. */\n  readonly diagnostics: readonly ModelPolicyDiagnostic[];\n}\n\n/** One policy entry that does not match the supplied catalog evidence. */\nexport interface ModelPolicyDiagnostic {\n  readonly kind: \"default\" | \"model\" | \"option-key\" | \"option-value\" | \"recommendation\";\n  readonly path: string;\n  readonly message: string;\n}\n\n/** Preserve literal inference while declaring a reusable model policy. */\nexport function defineModelPolicy<const TPolicy extends ModelPolicy>(policy: TPolicy): TPolicy {\n  return policy;\n}\n\n/** Define a policy checked against a literal or generated catalog type. */\nexport function defineModelPolicyFor<\n  const TCatalogs extends readonly ModelCatalog[],\n  const TPolicy extends ModelPolicyFor<TCatalogs>,\n>(catalogs: TCatalogs, policy: TPolicy): TPolicy {\n  void catalogs;\n  return policy;\n}\n\n/** Apply one application policy for use by any selector presentation. */\nexport function resolveModelPolicy(\n  catalogs: readonly ModelCatalog[],\n  policy: ModelPolicy,\n): ResolvedModelPolicy {\n  const diagnostics = policyDiagnostics(catalogs, policy);\n  const curatedCatalogs = curateCatalogs(catalogs, {\n    ...(policy.models?.include === undefined ? {} : { include: policy.models.include }),\n    ...(policy.options?.values === undefined ? {} : { optionValues: policy.options.values }),\n  });\n  return {\n    catalogs: curatedCatalogs,\n    groups: policy.options?.groups ?? [\n      \"reasoning\",\n      \"speed\",\n      \"routing\",\n      \"caching\",\n      \"beta\",\n      \"generation\",\n    ],\n    recommendations: (policy.models?.recommendations ?? []).filter(\n      (recommendation) => findModel(curatedCatalogs, recommendation.model) !== undefined,\n    ),\n    defaults: policy.options?.defaults ?? {},\n    diagnostics,\n  };\n}\n\n/** Resolve and validate app-owned defaults for one selected model. */\nexport function resolvePolicyDefaults(\n  model: ModelDescriptor,\n  policy: ResolvedModelPolicy,\n): OptionValues<ModelDescriptor[\"options\"]> {\n  const values: Record<string, string | number | boolean | readonly string[]> = {};\n  for (const option of model.options) {\n    const value = policy.defaults[option.key];\n    if (value !== undefined && validateOptions([option], { [option.key]: value }).ok) {\n      values[option.key] = value;\n    }\n  }\n  reconcileConstraints(model, values);\n  return values;\n}\n\n/** Return catalog copies containing only the explicitly allowed models and option values. */\nexport function curateCatalogs(\n  catalogs: readonly ModelCatalog[],\n  curation: ModelCuration,\n): readonly ModelCatalog[] {\n  if (curation.include === undefined && curation.optionValues === undefined) {\n    return catalogs;\n  }\n  const order =\n    curation.include === undefined\n      ? undefined\n      : new Map(curation.include.map((reference, index) => [reference, index]));\n  return catalogs.map((catalog) => ({\n    ...catalog,\n    models: curateModels(catalog.models, order, curation.optionValues),\n  }));\n}\n\n/** Find the first model matching a provider-qualified key or exact provider ID. */\nexport function findModel(\n  catalogs: readonly ModelCatalog[],\n  reference: string,\n): ModelDescriptor | undefined {\n  return catalogs.flatMap((catalog) => catalog.models).find((model) => matches(model, reference));\n}\n\n/**\n * Find the model with the lowest unconditional model-level rate for one unit.\n * This does not estimate route prices, conditional tiers, or a blended workload.\n */\nexport function findLowestPricedModel(\n  catalogs: readonly ModelCatalog[],\n  unit: PriceUnit,\n): ModelDescriptor | undefined {\n  let lowest: { readonly model: ModelDescriptor; readonly rate: RationalPrice } | undefined;\n  for (const model of catalogs.flatMap((catalog) => catalog.models)) {\n    const price = model.prices.find((rate) => rate.unit === unit && rate.condition === undefined);\n    const rate = price === undefined ? undefined : rationalPrice(price);\n    if (rate !== undefined && (lowest === undefined || compare(rate, lowest.rate) < 0)) {\n      lowest = { model, rate };\n    }\n  }\n  return lowest?.model;\n}\n\ninterface RationalPrice {\n  readonly numerator: bigint;\n  readonly denominator: bigint;\n}\n\nfunction rationalPrice(price: PriceRate): RationalPrice | undefined {\n  const match = /^(\\d+)(?:\\.(\\d+))?$/.exec(price.usd);\n  if (match === null || price.per <= 0 || !Number.isSafeInteger(price.per)) {\n    return undefined;\n  }\n  const fraction = match[2] ?? \"\";\n  return {\n    numerator: BigInt(`${match[1]}${fraction}`),\n    denominator: 10n ** BigInt(fraction.length) * BigInt(price.per),\n  };\n}\n\nfunction compare(left: RationalPrice, right: RationalPrice): number {\n  const difference = left.numerator * right.denominator - right.numerator * left.denominator;\n  return difference < 0n ? -1 : difference > 0n ? 1 : 0;\n}\n\nfunction modelReferenceIndex(\n  model: ModelDescriptor,\n  order: ReadonlyMap<string, number>,\n): number | undefined {\n  return order.get(model.key) ?? order.get(model.id);\n}\n\nfunction curateModels(\n  models: readonly ModelDescriptor[],\n  order: ReadonlyMap<string, number> | undefined,\n  optionValues: Readonly<Record<string, readonly string[]>> | undefined,\n): readonly ModelDescriptor[] {\n  const included =\n    order === undefined\n      ? models\n      : models\n          .filter((model) => modelReferenceIndex(model, order) !== undefined)\n          .toSorted(\n            (left, right) =>\n              (modelReferenceIndex(left, order) ?? Number.MAX_SAFE_INTEGER) -\n              (modelReferenceIndex(right, order) ?? Number.MAX_SAFE_INTEGER),\n          );\n  return optionValues === undefined\n    ? included\n    : included.map((model) => curateModelOptions(model, optionValues));\n}\n\nfunction curateModelOptions(\n  model: ModelDescriptor,\n  optionValues: Readonly<Record<string, readonly string[]>> | undefined,\n): ModelDescriptor {\n  return {\n    ...model,\n    options: model.options.flatMap((option) => {\n      const allowed = optionValues?.[option.key];\n      if (allowed === undefined || option.kind !== \"enum\") {\n        return [option];\n      }\n      const values = option.values.filter((value) => allowed.includes(value));\n      return values.length === 0 ? [] : [withEnumValues(option, values)];\n    }),\n  };\n}\n\nfunction withEnumValues(\n  option: EnumOptionDefinition,\n  values: readonly string[],\n): EnumOptionDefinition {\n  if (option.defaultValue !== undefined && values.includes(option.defaultValue)) {\n    return { ...option, values };\n  }\n  const { defaultValue: _defaultValue, ...withoutDefault } = option;\n  return { ...withoutDefault, values };\n}\n\nfunction matches(model: ModelDescriptor, reference: string): boolean {\n  return model.key === reference || model.id === reference;\n}\n\nfunction policyDiagnostics(\n  catalogs: readonly ModelCatalog[],\n  policy: ModelPolicy,\n): readonly ModelPolicyDiagnostic[] {\n  const models = catalogs.flatMap((catalog) => catalog.models);\n  const options = models.flatMap((model) => model.options);\n  const diagnostics: ModelPolicyDiagnostic[] = [];\n  for (const [index, reference] of (policy.models?.include ?? []).entries()) {\n    if (findModel(catalogs, reference) === undefined) {\n      diagnostics.push({\n        kind: \"model\",\n        path: `models.include[${index}]`,\n        message: `No model matches ${reference}.`,\n      });\n    }\n  }\n  for (const [index, recommendation] of (policy.models?.recommendations ?? []).entries()) {\n    if (findModel(catalogs, recommendation.model) === undefined) {\n      diagnostics.push({\n        kind: \"recommendation\",\n        path: `models.recommendations[${index}].model`,\n        message: `No model matches ${recommendation.model}.`,\n      });\n    }\n  }\n  for (const [key, values] of Object.entries(policy.options?.values ?? {})) {\n    const definitions = options.filter((option) => option.key === key);\n    if (definitions.length === 0) {\n      diagnostics.push({\n        kind: \"option-key\",\n        path: `options.values.${key}`,\n        message: `No option matches ${key}.`,\n      });\n      continue;\n    }\n    for (const value of values) {\n      if (\n        !definitions.some(\n          (definition) => definition.kind === \"enum\" && definition.values.includes(value),\n        )\n      ) {\n        diagnostics.push({\n          kind: \"option-value\",\n          path: `options.values.${key}`,\n          message: `No ${key} option accepts ${value}.`,\n        });\n      }\n    }\n  }\n  for (const [key, value] of Object.entries(policy.options?.defaults ?? {})) {\n    const definitions = options.filter((option) => option.key === key);\n    if (\n      definitions.length === 0 ||\n      !definitions.some((definition) => validateOptions([definition], { [key]: value }).ok)\n    ) {\n      diagnostics.push({\n        kind: \"default\",\n        path: `options.defaults.${key}`,\n        message: `No ${key} option accepts this default.`,\n      });\n    }\n  }\n  return diagnostics;\n}\n\nfunction reconcileConstraints(\n  model: ModelDescriptor,\n  values: Record<string, string | number | boolean | readonly string[]>,\n): void {\n  for (const constraint of model.constraints ?? []) {\n    if (constraint.kind === \"less-than\") {\n      const left = values[constraint.leftKey];\n      const right = values[constraint.rightKey];\n      if (typeof left === \"number\" && typeof right === \"number\" && left >= right) {\n        delete values[constraint.leftKey];\n      }\n      continue;\n    }\n    if (values[constraint.when.key] !== constraint.when.equals) continue;\n    if (constraint.kind === \"requires\" && values[constraint.key] === undefined) {\n      delete values[constraint.when.key];\n    }\n    if (constraint.kind === \"forbids\" && values[constraint.key] !== undefined) {\n      delete values[constraint.key];\n    }\n  }\n}\n"},{"path":"source/packages/core/src/defaults.ts","content":"import type { CapabilitySupport, ModelCapabilities, SourceReference } from \"./types.ts\";\n\n/** Create a capability statement without hiding its evidence. */\nexport function capability(\n  status: CapabilitySupport[\"status\"],\n  evidence: readonly SourceReference[] = [],\n  note?: string,\n): CapabilitySupport {\n  return {\n    status,\n    evidence,\n    ...(note === undefined ? {} : { note }),\n  };\n}\n\n/** Create an unknown capability set for sparse provider catalogs. */\nexport function unknownCapabilities(): ModelCapabilities {\n  const unknown = capability(\"unknown\");\n  return {\n    input: {},\n    output: {},\n    reasoning: unknown,\n    tools: unknown,\n    structuredOutput: unknown,\n    promptCaching: unknown,\n  };\n}\n"},{"path":"source/packages/core/src/index.ts","content":"export { diffCatalogs, isCatalogStale, liveApiSource } from \"./catalog.ts\";\nexport type { CatalogDrift, ModelChange } from \"./catalog.ts\";\nexport {\n  curateCatalogs,\n  recommendedSelection,\n  defineModelPolicy,\n  defineModelPolicyFor,\n  findLowestPricedModel,\n  findModel,\n  resolvePolicyDefaults,\n  resolveModelPolicy,\n} from \"./curation.ts\";\nexport type {\n  ModelCuration,\n  ModelPolicy,\n  ModelPolicyFor,\n  ModelPolicyDiagnostic,\n  ModelRecommendation,\n  ResolvedModelPolicy,\n} from \"./curation.ts\";\nexport { capability, unknownCapabilities } from \"./defaults.ts\";\nexport { mapDefinedOptions, mapModelOptions } from \"./mapping.ts\";\nexport {\n  defineModel,\n  defineOptions,\n  selectModel,\n  validateConstraints,\n  validateOptions,\n} from \"./options.ts\";\nexport { formatUsd, pricePerMillion } from \"./pricing.ts\";\nexport type * from \"./types.ts\";\n"},{"path":"source/packages/core/src/mapping.ts","content":"import { selectModel } from \"./options.ts\";\nimport type {\n  MappedModelOptions,\n  ModelDescriptor,\n  OptionDefinition,\n  OptionValues,\n} from \"./types.ts\";\n\n/** Validate a model selection before mapping its flat values to provider requests. */\nexport function mapModelOptions<const TModel extends ModelDescriptor>(\n  model: TModel,\n  values: OptionValues<TModel[\"options\"]>,\n): MappedModelOptions {\n  const selection = selectModel(model, values);\n  return mapDefinedOptions(model.options, selection.options);\n}\n\n/** Map validated flat option values to nested request and provider options. */\nexport function mapDefinedOptions(\n  definitions: readonly OptionDefinition[],\n  values: Readonly<Record<string, unknown>>,\n): MappedModelOptions {\n  const providerOptions: Record<string, unknown> = {};\n  const requestOptions: Record<string, unknown> = {};\n  const warnings: string[] = [];\n  const byKey = new Map(definitions.map((definition) => [definition.key, definition]));\n\n  for (const [key, value] of Object.entries(values)) {\n    const definition = byKey.get(key);\n    if (definition?.target === undefined) {\n      warnings.push(`${key} has no request mapping and was not applied.`);\n      continue;\n    }\n\n    const root = definition.target.kind === \"provider-option\" ? providerOptions : requestOptions;\n    const path =\n      definition.target.namespace === undefined\n        ? definition.target.path\n        : [definition.target.namespace, ...definition.target.path];\n    setNested(root, path, value);\n  }\n\n  return { providerOptions, requestOptions, warnings };\n}\n\nfunction setNested(target: Record<string, unknown>, path: readonly string[], value: unknown): void {\n  if (path.length === 0) {\n    return;\n  }\n\n  let current = target;\n  for (const segment of path.slice(0, -1)) {\n    const existing = current[segment];\n    if (typeof existing === \"object\" && existing !== null && !Array.isArray(existing)) {\n      current = existing as Record<string, unknown>;\n      continue;\n    }\n    const nested: Record<string, unknown> = {};\n    current[segment] = nested;\n    current = nested;\n  }\n  const last = path.at(-1);\n  if (last !== undefined) {\n    current[last] = value;\n  }\n}\n"},{"path":"source/packages/core/src/options.ts","content":"import type {\n  ModelDescriptor,\n  ModelSelection,\n  OptionDefinition,\n  OptionValidationIssue,\n  OptionValidationResult,\n  OptionValues,\n} from \"./types.ts\";\n\n/** Preserve literal option definitions while checking their public shape. */\nexport function defineOptions<const T extends readonly OptionDefinition[]>(definitions: T): T {\n  return definitions;\n}\n\n/** Preserve a model's provider and literal option types. */\nexport function defineModel<const T extends ModelDescriptor>(model: T): T {\n  return model;\n}\n\n/** Validate dynamic values against the definitions shipped for a model. */\nexport function validateOptions<const TDefinitions extends readonly OptionDefinition[]>(\n  definitions: TDefinitions,\n  values: Readonly<Record<string, unknown>>,\n): OptionValidationResult<OptionValues<TDefinitions>> {\n  const byKey = new Map(definitions.map((definition) => [definition.key, definition]));\n  const issues: OptionValidationIssue[] = [];\n\n  for (const [key, value] of Object.entries(values)) {\n    const definition = byKey.get(key);\n    if (definition === undefined) {\n      issues.push({ key, message: \"This option is not available for the selected model.\" });\n      continue;\n    }\n\n    if (definition.support.status !== \"supported\") {\n      issues.push({\n        key,\n        message: `This option is ${definition.support.status} for the selected model.`,\n      });\n      continue;\n    }\n\n    validateOptionValue(definition, value, issues);\n  }\n\n  for (const definition of definitions) {\n    const condition = definition.visibleWhen;\n    if (\n      condition !== undefined &&\n      values[definition.key] !== undefined &&\n      values[condition.key] !== condition.equals\n    ) {\n      issues.push({\n        key: definition.key,\n        message: `This option requires ${condition.key} to equal ${String(condition.equals)}.`,\n      });\n    }\n  }\n\n  if (issues.length > 0) {\n    return { ok: false, issues };\n  }\n\n  return { ok: true, value: values as OptionValues<TDefinitions> };\n}\n\n/** Create a type-safe selection for a literal generated model. */\nexport function selectModel<const TModel extends ModelDescriptor>(\n  model: TModel,\n  options: OptionValues<TModel[\"options\"]>,\n): ModelSelection<TModel> {\n  const result = validateOptions(model.options, options);\n  if (!result.ok) {\n    throw new TypeError(result.issues.map((issue) => `${issue.key}: ${issue.message}`).join(\"\\n\"));\n  }\n\n  const constraintIssues = validateConstraints(model, options);\n  if (constraintIssues.length > 0) {\n    throw new TypeError(\n      constraintIssues.map((issue) => `${issue.key}: ${issue.message}`).join(\"\\n\"),\n    );\n  }\n\n  return {\n    model,\n    options: result.value as OptionValues<TModel[\"options\"]>,\n  };\n}\n\n/** Validate rules that depend on more than one option. */\nexport function validateConstraints(\n  model: ModelDescriptor,\n  values: Readonly<Record<string, unknown>>,\n): readonly OptionValidationIssue[] {\n  const issues: OptionValidationIssue[] = [];\n  for (const constraint of model.constraints ?? []) {\n    if (constraint.kind === \"less-than\") {\n      const left = values[constraint.leftKey];\n      const right = values[constraint.rightKey];\n      if (typeof left === \"number\" && typeof right === \"number\" && left >= right) {\n        issues.push({ key: constraint.leftKey, message: constraint.message });\n      }\n      continue;\n    }\n\n    if (values[constraint.when.key] !== constraint.when.equals) {\n      continue;\n    }\n    if (constraint.kind === \"requires\" && values[constraint.key] === undefined) {\n      issues.push({ key: constraint.key, message: constraint.message });\n    }\n    if (constraint.kind === \"forbids\" && values[constraint.key] !== undefined) {\n      issues.push({ key: constraint.key, message: constraint.message });\n    }\n  }\n  return issues;\n}\n\nfunction validateOptionValue(\n  definition: OptionDefinition,\n  value: unknown,\n  issues: OptionValidationIssue[],\n): void {\n  switch (definition.kind) {\n    case \"boolean\":\n      if (typeof value !== \"boolean\") {\n        issues.push({ key: definition.key, message: \"Expected a boolean value.\" });\n      }\n      return;\n    case \"enum\":\n      if (typeof value !== \"string\" || !definition.values.includes(value)) {\n        issues.push({\n          key: definition.key,\n          message: `Expected one of: ${definition.values.join(\", \")}.`,\n        });\n      }\n      return;\n    case \"integer\":\n    case \"number\":\n      if (typeof value !== \"number\" || !Number.isFinite(value)) {\n        issues.push({ key: definition.key, message: \"Expected a finite number.\" });\n        return;\n      }\n      if (definition.kind === \"integer\" && !Number.isInteger(value)) {\n        issues.push({ key: definition.key, message: \"Expected an integer.\" });\n      }\n      if (definition.min !== undefined && value < definition.min) {\n        issues.push({ key: definition.key, message: `Expected at least ${definition.min}.` });\n      }\n      if (definition.max !== undefined && value > definition.max) {\n        issues.push({ key: definition.key, message: `Expected at most ${definition.max}.` });\n      }\n      return;\n    case \"string-list\":\n      if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n        issues.push({ key: definition.key, message: \"Expected a list of strings.\" });\n      }\n  }\n}\n"},{"path":"source/packages/core/src/pricing.ts","content":"import type { PriceRate, PriceUnit } from \"./types.ts\";\n\n/** Return a token price normalized to one million tokens. */\nexport function pricePerMillion(\n  rates: readonly PriceRate[],\n  unit: Extract<PriceUnit, `${string}-token`>,\n): string | undefined {\n  const rate = rates.find(\n    (candidate) => candidate.unit === unit && candidate.condition === undefined,\n  );\n  return rate === undefined ? undefined : scaleDecimal(rate.usd, 1_000_000, rate.per);\n}\n\n/** Format a USD price without implying more precision than the source. */\nexport function formatUsd(value: string): string {\n  return `$${trimDecimal(value)}`;\n}\n\nfunction scaleDecimal(value: string, multiplier: number, divisor: number): string {\n  if (\n    !/^\\d+(?:\\.\\d+)?$/.test(value) ||\n    !Number.isSafeInteger(multiplier) ||\n    !Number.isSafeInteger(divisor)\n  ) {\n    throw new TypeError(\"Prices must be unsigned decimal strings with safe integer scales.\");\n  }\n  const [whole = \"0\", fraction = \"\"] = value.split(\".\");\n  const scale = 10n ** BigInt(fraction.length);\n  const integer = BigInt(`${whole}${fraction}`);\n  const numerator = integer * BigInt(multiplier);\n  const denominator = BigInt(divisor) * scale;\n  const resultWhole = numerator / denominator;\n  const remainder = numerator % denominator;\n  if (remainder === 0n) {\n    return resultWhole.toString();\n  }\n  const digits = ((remainder * 10n ** 12n) / denominator).toString().padStart(12, \"0\");\n  return trimDecimal(`${resultWhole}.${digits}`);\n}\n\nfunction trimDecimal(value: string): string {\n  return value.includes(\".\") ? value.replace(/0+$/, \"\").replace(/\\.$/, \"\") : value;\n}\n"},{"path":"source/packages/core/src/types.ts","content":"/** Providers maintained by the first-party adapter package. */\nexport type KnownProviderId = \"anthropic\" | \"google\" | \"openai\" | \"openrouter\" | \"vercel\";\n\n/** A known provider id or an id supplied by a third-party adapter. */\nexport type ProviderId = KnownProviderId | (string & Record<never, never>);\n\n/** The origin of a catalog fact. */\nexport type EvidenceKind = \"live-api\" | \"provider-docs\" | \"generated-snapshot\" | \"user-override\";\n\n/** A dated source for one or more catalog facts. */\nexport interface SourceReference {\n  readonly kind: EvidenceKind;\n  readonly url: string;\n  readonly retrievedAt: string;\n  readonly digest?: string;\n  readonly scope?: \"account\" | \"endpoint\" | \"model\" | \"provider\" | \"region\";\n}\n\n/** How strongly a source establishes a fact. */\nexport type EvidenceConfidence = \"provider-confirmed\" | \"provider-documented\" | \"inferred\";\n\n/** A value with explicit provenance. */\nexport interface Evidence<T> {\n  readonly value: T;\n  readonly confidence: EvidenceConfidence;\n  readonly sources: readonly SourceReference[];\n}\n\n/** Whether a provider or model supports a capability. */\nexport type SupportStatus = \"supported\" | \"unsupported\" | \"unknown\";\n\n/** An evidence-backed capability statement. */\nexport interface CapabilitySupport {\n  readonly status: SupportStatus;\n  readonly evidence: readonly SourceReference[];\n  readonly note?: string;\n}\n\n/** Input and output media understood by model catalogs. */\nexport type Modality = \"audio\" | \"file\" | \"image\" | \"text\" | \"video\";\n\n/** Capabilities that are useful when selecting a language model. */\nexport interface ModelCapabilities {\n  readonly input: Readonly<Partial<Record<Modality, CapabilitySupport>>>;\n  readonly output: Readonly<Partial<Record<Modality, CapabilitySupport>>>;\n  readonly reasoning: CapabilitySupport;\n  readonly tools: CapabilitySupport;\n  readonly structuredOutput: CapabilitySupport;\n  readonly promptCaching: CapabilitySupport;\n}\n\n/** The unit billed by a provider. */\nexport type PriceUnit =\n  | \"cache-read-token\"\n  | \"cache-write-token\"\n  | \"image\"\n  | \"input-token\"\n  | \"output-token\"\n  | \"request\"\n  | \"second\";\n\n/** One dated price for a model and optional condition. */\nexport interface PriceRate {\n  readonly unit: PriceUnit;\n  readonly usd: string;\n  readonly per: number;\n  readonly condition?: string;\n  readonly evidence: readonly SourceReference[];\n}\n\n/** A model lifecycle label, when the source provides one. */\nexport type ModelLifecycle = \"deprecated\" | \"preview\" | \"production\" | \"unknown\";\n\n/** The broad product kind exposed by a provider model record. */\nexport type ModelKind = \"audio\" | \"embedding\" | \"image\" | \"language\" | \"system\" | \"video\";\n\n/** A provider-neutral family of model options that a host can choose to expose. */\nexport type OptionGroup = \"beta\" | \"caching\" | \"generation\" | \"reasoning\" | \"routing\" | \"speed\";\n\n/** A gateway route or hosting endpoint that can materially change behavior. */\nexport interface ModelRoute {\n  readonly id: string;\n  readonly provider?: string;\n  readonly region?: string;\n  readonly dataPolicy?: string;\n  readonly capabilities?: Partial<ModelCapabilities>;\n  readonly prices: readonly PriceRate[];\n  readonly sources: readonly SourceReference[];\n  readonly raw?: unknown;\n}\n\n/** A capability that needs application work beyond a selector value. */\nexport interface IntegrationRequirement {\n  readonly id: string;\n  readonly kind: \"beta-contract\" | \"content-annotation\" | \"response-handling\" | \"server-only\";\n  readonly title: string;\n  readonly description: string;\n  readonly support: CapabilitySupport;\n  readonly sources: readonly SourceReference[];\n}\n\n/** An API surface through which a model can be called. */\nexport type ModelInterface =\n  | \"anthropic-messages\"\n  | \"google-generate-content\"\n  | \"google-interactions\"\n  | \"openai-chat-completions\"\n  | \"openai-responses\";\n\n/** A complete, evidence-backed model descriptor. */\nexport interface ModelDescriptor<\n  TProvider extends ProviderId = ProviderId,\n  TOptions extends readonly OptionDefinition[] = readonly OptionDefinition[],\n> {\n  readonly key: `${TProvider}:${string}`;\n  readonly provider: TProvider;\n  readonly id: string;\n  readonly name: string;\n  readonly kind: ModelKind;\n  readonly author?: string;\n  readonly description?: string;\n  readonly lifecycle: ModelLifecycle;\n  readonly releasedAt?: string;\n  readonly contextWindow?: Evidence<number>;\n  readonly maxOutputTokens?: Evidence<number>;\n  readonly capabilities: ModelCapabilities;\n  readonly interfaces: readonly ModelInterface[];\n  readonly prices: readonly PriceRate[];\n  readonly routes: readonly ModelRoute[];\n  readonly options: TOptions;\n  readonly constraints?: readonly SelectionConstraint[];\n  readonly requirements: readonly IntegrationRequirement[];\n  readonly sources: readonly SourceReference[];\n  readonly raw?: unknown;\n}\n\n/** A provider model-list result with freshness and raw-source evidence. */\nexport interface ModelCatalog<\n  TProvider extends ProviderId = ProviderId,\n  TModel extends ModelDescriptor<TProvider> = ModelDescriptor<TProvider>,\n> {\n  readonly schemaVersion: 1;\n  readonly provider: TProvider;\n  readonly fetchedAt: string;\n  readonly source: SourceReference;\n  readonly models: readonly TModel[];\n}\n\n/** Credentials and dependencies supplied to model discovery. */\nexport interface DiscoveryContext {\n  readonly apiKey?: string;\n  readonly baseUrl?: string;\n  readonly fetch?: typeof globalThis.fetch;\n  readonly signal?: AbortSignal;\n}\n\n/** A provider adapter that discovers models and maps selected options. */\nexport interface ProviderAdapter<\n  TProvider extends ProviderId = ProviderId,\n  TModel extends ModelDescriptor<TProvider> = ModelDescriptor<TProvider>,\n> {\n  readonly id: TProvider;\n  readonly name: string;\n  readonly catalogEndpoint: string;\n  readonly requiresAuthentication: boolean;\n  discover(context?: DiscoveryContext): Promise<ModelCatalog<TProvider, TModel>>;\n  mapOptions(model: TModel, values: OptionValues<TModel[\"options\"]>): MappedModelOptions;\n}\n\n/** Provider request options produced from a model selection. */\nexport interface MappedModelOptions {\n  readonly providerOptions: Readonly<Record<string, unknown>>;\n  readonly requestOptions: Readonly<Record<string, unknown>>;\n  readonly warnings: readonly string[];\n}\n\n/** Shared fields for every selectable option. */\nexport interface OptionDefinitionBase<TKey extends string = string, TKind extends string = string> {\n  readonly key: TKey;\n  readonly kind: TKind;\n  readonly label: string;\n  readonly description: string;\n  readonly group: OptionGroup;\n  readonly support: CapabilitySupport;\n  readonly target?: OptionTarget;\n  readonly visibleWhen?: OptionCondition;\n}\n\n/** A condition that controls whether an option is relevant. */\nexport interface OptionCondition {\n  readonly key: string;\n  readonly equals: string | number | boolean;\n}\n\n/** A serializable cross-field rule checked against the complete selection. */\nexport type SelectionConstraint =\n  | {\n      readonly kind: \"requires\";\n      readonly when: OptionCondition;\n      readonly key: string;\n      readonly message: string;\n    }\n  | {\n      readonly kind: \"forbids\";\n      readonly when: OptionCondition;\n      readonly key: string;\n      readonly message: string;\n    }\n  | {\n      readonly kind: \"less-than\";\n      readonly leftKey: string;\n      readonly rightKey: string;\n      readonly message: string;\n    };\n\n/** The exact destination for an option in an integration request. */\nexport interface OptionTarget {\n  readonly kind: \"provider-option\" | \"request-option\";\n  readonly namespace?: string;\n  readonly path: readonly string[];\n}\n\n/** A selectable string-valued option. */\nexport interface EnumOptionDefinition<\n  TKey extends string = string,\n  TValues extends readonly string[] = readonly string[],\n> extends OptionDefinitionBase<TKey, \"enum\"> {\n  readonly values: TValues;\n  readonly defaultValue?: TValues[number];\n}\n\n/** A selectable boolean option. */\nexport interface BooleanOptionDefinition<TKey extends string = string> extends OptionDefinitionBase<\n  TKey,\n  \"boolean\"\n> {\n  readonly defaultValue?: boolean;\n}\n\n/** A selectable numeric option. */\nexport interface NumberOptionDefinition<\n  TKey extends string = string,\n  TKind extends \"integer\" | \"number\" = \"integer\" | \"number\",\n> extends OptionDefinitionBase<TKey, TKind> {\n  readonly min?: number;\n  readonly max?: number;\n  readonly step?: number;\n  readonly defaultValue?: number;\n}\n\n/** A string-list option, useful for opt-in beta identifiers. */\nexport interface StringListOptionDefinition<\n  TKey extends string = string,\n> extends OptionDefinitionBase<TKey, \"string-list\"> {\n  readonly suggestions?: readonly string[];\n  readonly defaultValue?: readonly string[];\n}\n\n/** Any option definition understood by the core and UI packages. */\nexport type OptionDefinition =\n  | BooleanOptionDefinition\n  | EnumOptionDefinition\n  | NumberOptionDefinition\n  | StringListOptionDefinition;\n\n/** The value accepted by one option definition. */\nexport type OptionValue<TDefinition extends OptionDefinition> =\n  TDefinition extends EnumOptionDefinition<string, infer TValues>\n    ? TValues[number]\n    : TDefinition extends BooleanOptionDefinition\n      ? boolean\n      : TDefinition extends NumberOptionDefinition\n        ? number\n        : TDefinition extends StringListOptionDefinition\n          ? readonly string[]\n          : never;\n\n/** Option values inferred from a literal option-definition tuple. */\nexport type OptionValues<TDefinitions extends readonly OptionDefinition[]> = Partial<{\n  [TDefinition in TDefinitions[number] as TDefinition[\"key\"]]: OptionValue<TDefinition>;\n}>;\n\n/** A model and its validated option values. */\nexport interface ModelSelection<TModel extends ModelDescriptor = ModelDescriptor> {\n  readonly model: TModel;\n  readonly options: OptionValues<TModel[\"options\"]>;\n}\n\n/** One validation problem for a selected option. */\nexport interface OptionValidationIssue {\n  readonly key: string;\n  readonly message: string;\n}\n\n/** The result of validating dynamic option values. */\nexport type OptionValidationResult<T> =\n  | { readonly ok: true; readonly value: T }\n  | { readonly ok: false; readonly issues: readonly OptionValidationIssue[] };\n"},{"path":"source/packages/elements/src/base.ts","content":"/** An HTMLElement base that keeps package imports safe during server rendering. */\nexport const ModelsHTMLElement = (\n  typeof HTMLElement === \"undefined\" ? class {} : HTMLElement\n) as typeof HTMLElement;\n"},{"path":"source/packages/elements/src/composer.ts","content":"import {\n  recommendedSelection,\n  validateConstraints,\n  validateOptions,\n  type ModelCatalog,\n  type ModelDescriptor,\n  type ModelRecommendation,\n  type ModelSelection,\n  type OptionDefinition,\n  type OptionValues,\n} from \"../../core/src/index.ts\";\nimport { ModelsHTMLElement } from \"./base.ts\";\nimport { emitSelectionChange, OPTIONS_CHANGE_EVENT } from \"./events.ts\";\nimport { modelGroups } from \"./grouping.ts\";\nimport type { ModelGrouping } from \"./grouping.ts\";\nimport { chevronIcon, modelIcon, type ModelIconMode } from \"./icons.ts\";\nimport { ModelsOptionsElement, type VisibleOptionGroup } from \"./options.ts\";\nimport { elementStyles } from \"./styles.ts\";\n\ntype ComposerSection = \"advanced\" | \"effort\" | \"model\" | \"speed\";\n\n/** A compact composer control that reveals model details only when opened. */\nexport class ModelsComposerElement extends ModelsHTMLElement {\n  #catalogs: readonly ModelCatalog[] = [];\n  #selected: ModelDescriptor | undefined;\n  #options: OptionValues<ModelDescriptor[\"options\"]> = {};\n  #isOpen = false;\n  #section: ComposerSection | undefined;\n  #query = \"\";\n  #groupBy: ModelGrouping = \"author\";\n  #iconMode: ModelIconMode = \"none\";\n  #recommendations: readonly ModelRecommendation[] = [];\n  #groups: readonly VisibleOptionGroup[] = [\n    \"reasoning\",\n    \"speed\",\n    \"routing\",\n    \"caching\",\n    \"beta\",\n    \"generation\",\n  ];\n  readonly #root: ShadowRoot;\n  readonly #onDocumentPointerDown = (event: Event): void => {\n    if (this.#isOpen && !event.composedPath().includes(this)) {\n      this.#isOpen = false;\n      this.#section = undefined;\n      this.render();\n    }\n  };\n  readonly #onKeyDown = (event: Event): void => {\n    if (!(event instanceof KeyboardEvent) || event.key !== \"Escape\") {\n      return;\n    }\n    if (this.#section !== undefined) {\n      const section = this.#section;\n      this.#section = undefined;\n      this.render();\n      this.#root.querySelector<HTMLButtonElement>(`button[data-section=\"${section}\"]`)?.focus();\n      return;\n    }\n    this.#isOpen = false;\n    this.render();\n    this.#root.querySelector<HTMLButtonElement>(\".trigger\")?.focus();\n  };\n  readonly #onWindowResize = (): void => this.placePopover();\n\n  constructor() {\n    super();\n    this.#root = this.attachShadow({ mode: \"open\" });\n    this.#root.addEventListener(\"keydown\", this.#onKeyDown);\n  }\n\n  /** Catalogs available to the composer control. */\n  get catalogs(): readonly ModelCatalog[] {\n    return this.#catalogs;\n  }\n\n  set catalogs(value: readonly ModelCatalog[]) {\n    this.#catalogs = value;\n    const models = languageModels(value);\n    if (!models.some((model) => model.key === this.#selected?.key)) {\n      this.#selected = preferredModel(models);\n      this.#options = {};\n    }\n    this.#section = undefined;\n    this.#query = \"\";\n    this.render();\n  }\n\n  /** The current complete model and option selection. */\n  get value(): ModelSelection | undefined {\n    return this.#selected === undefined\n      ? undefined\n      : { model: this.#selected, options: this.#options };\n  }\n\n  set value(value: ModelSelection | undefined) {\n    this.#selected = value?.model;\n    this.#options = value?.options ?? {};\n    this.render();\n  }\n\n  /** Whether the settings dialog is open. */\n  get open(): boolean {\n    return this.#isOpen;\n  }\n\n  set open(value: boolean) {\n    this.#isOpen = value;\n    if (!value) {\n      this.#section = undefined;\n    }\n    this.render();\n  }\n\n  /** How models are grouped in the searchable model panel. */\n  get groupBy(): ModelGrouping {\n    return this.#groupBy;\n  }\n\n  set groupBy(value: ModelGrouping) {\n    this.#groupBy = value;\n    this.render();\n  }\n\n  /** Which optional brand identity is shown for models. */\n  get iconMode(): ModelIconMode {\n    return this.#iconMode;\n  }\n\n  set iconMode(value: ModelIconMode) {\n    this.#iconMode = value;\n    this.render();\n  }\n\n  /** App-owned recommendation labels shown beside matching models. */\n  get recommendations(): readonly ModelRecommendation[] {\n    return this.#recommendations;\n  }\n\n  set recommendations(value: readonly ModelRecommendation[]) {\n    this.#recommendations = value;\n    this.render();\n  }\n\n  /** Option groups available inside the composer. Use an empty list for model-only mode. */\n  get groups(): readonly VisibleOptionGroup[] {\n    return this.#groups;\n  }\n\n  set groups(value: readonly VisibleOptionGroup[]) {\n    this.#groups = value;\n    this.#section = undefined;\n    this.render();\n  }\n\n  connectedCallback(): void {\n    document.addEventListener(\"pointerdown\", this.#onDocumentPointerDown);\n    window.addEventListener(\"resize\", this.#onWindowResize);\n    this.render();\n  }\n\n  disconnectedCallback(): void {\n    document.removeEventListener(\"pointerdown\", this.#onDocumentPointerDown);\n    window.removeEventListener(\"resize\", this.#onWindowResize);\n  }\n\n  private render(): void {\n    const selected = this.#selected;\n    const effort =\n      selected === undefined || !this.#groups.includes(\"reasoning\")\n        ? undefined\n        : findReasoningOption(selected);\n    const speed =\n      selected === undefined || !this.#groups.includes(\"speed\")\n        ? undefined\n        : findOption(selected, [\"speed.mode\", \"service.tier\"]);\n    this.#root.innerHTML = `\n      <style>${elementStyles}</style>\n      <style>\n        :host { display: inline-block; max-width: 100%; }\n        button { border: 0; }\n        .composer { position: relative; width: max-content; max-width: 100%; }\n        .trigger { display: flex; align-items: center; justify-content: center; gap: 6px; width: max-content; max-width: 100%; min-height: var(--models-control-height, 36px); border: 1px solid transparent; border-radius: var(--models-radius, 7px); padding: 4px 8px; background: transparent; font-size: var(--models-font-size, 13px); font-weight: 500; cursor: pointer; }\n        .trigger:hover { background: var(--models-hover, #f5f5f5); }\n        .trigger-icon { width: 16px; height: 16px; color: var(--models-muted, #646464); }\n        .trigger-icon svg { display: block; width: 100%; height: 100%; }\n        .summary { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n        .summary-detail { color: var(--models-muted, #646464); }\n        .chevron { display: grid; place-items: center; align-self: center; flex: 0 0 16px; width: 16px; height: 16px; margin-left: 1px; color: var(--models-muted, #646464); }\n        .forward { transform: rotate(-90deg); }\n        .backward { transform: rotate(90deg); margin: auto; }\n        .chevron svg { display: block; width: 100%; height: 100%; }\n        .popover { position: absolute; right: 0; bottom: calc(100% + 8px); z-index: 10; width: min(340px, calc(100vw - 32px)); }\n        .popover[data-horizontal=\"start\"] { right: auto; left: 0; }\n        .popover[data-vertical=\"below\"] { top: calc(100% + 8px); bottom: auto; }\n        .popover[data-horizontal=\"overlay\"] { right: auto; width: min(340px, calc(100vw - 32px)); }\n        .panel { width: 100%; border: 1px solid var(--models-border, #d6d6d6); border-radius: 8px; padding: 5px; background: var(--models-surface, #fff); box-shadow: 0 12px 30px #0003; font-size: var(--models-font-size, 13px); }\n        .row { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 7px; width: 100%; min-height: var(--models-control-height, 36px); border-radius: 6px; padding: 4px 7px; background: transparent; text-align: left; cursor: pointer; }\n        .row:hover, .row[aria-expanded=\"true\"] { background: var(--models-hover, #f5f5f5); }\n        .row-value { max-width: 170px; overflow: hidden; color: var(--models-muted, #646464); text-overflow: ellipsis; white-space: nowrap; }\n        .advanced-row { margin-top: 4px; border-top: 1px solid var(--models-border, #d6d6d6); border-radius: 0 0 7px 7px; color: var(--models-muted, #646464); }\n        .advanced-options { display: block; padding: 3px 5px; }\n        .submenu { display: flex; flex-direction: column; width: 100%; max-height: min(440px, var(--models-popover-space, 70vh)); overflow: hidden; border: 1px solid var(--models-border, #d6d6d6); border-radius: 8px; padding: 5px; background: var(--models-surface, #fff); box-shadow: 0 12px 30px #0003; font-size: var(--models-font-size, 13px); }\n        .submenu-title { margin: 5px 8px 7px; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); font-weight: 500; }\n        .submenu-head { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; }\n        .back { flex: 0 0 var(--models-control-height, 36px); width: var(--models-control-height, 36px); height: var(--models-control-height, 36px); border-radius: 6px; background: transparent; cursor: pointer; }\n        .back:hover { background: var(--models-hover, #f5f5f5); }\n        .submenu-head .search { flex: 1; margin: 0; }\n        .submenu-list { min-height: 0; overflow: auto; overscroll-behavior: contain; }\n        .search { margin-bottom: 6px; }\n        .choice { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 7px; width: 100%; min-height: var(--models-control-height, 36px); border-radius: 7px; padding: 5px 8px; background: transparent; text-align: left; cursor: pointer; }\n        .choice.no-icon { grid-template-columns: minmax(0, 1fr) auto; }\n        .choice:hover { background: var(--models-hover, #f5f5f5); }\n        .choice-icon { width: 16px; height: 16px; color: var(--models-muted, #646464); }\n        .choice-icon svg { display: block; width: 100%; height: 100%; }\n        .choice-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n        .choice-meta { margin-left: 5px; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); font-weight: 500; }\n        .checkmark { color: var(--models-muted, #646464); }\n        .group { padding: 10px 9px 3px; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); font-weight: 500; letter-spacing: .08em; text-transform: uppercase; }\n        .empty { margin: 18px 10px; color: var(--models-muted, #646464); text-align: center; }\n      </style>\n      <div class=\"composer\" part=\"composer\">\n        ${this.#isOpen ? `<div class=\"popover\" part=\"popover\" role=\"dialog\" aria-label=\"Model settings\">${this.#section === undefined ? renderMainPanel(selected, effort, speed, this.#options, this.#section, this.#groups) : renderSubmenu(this.#section, this.#catalogs, selected, effort, speed, this.#options, this.#query, this.#groupBy, this.#iconMode, this.#recommendations)}</div>` : \"\"}\n        <button class=\"trigger\" part=\"trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-expanded=\"${this.#isOpen}\"${selected === undefined ? \"\" : ` title=\"${escapeHtml(selected.name)}\"`}>\n          ${selected === undefined ? \"\" : renderModelIcon(selected, this.#iconMode, \"trigger-icon\")}\n          <span class=\"summary\">${renderSummary(selected, effort, speed, this.#options)}</span>\n          <span class=\"chevron\" aria-hidden=\"true\">${chevronIcon}</span>\n        </button>\n      </div>\n    `;\n    this.bindEvents();\n    this.bindAdvancedOptions(\n      selected,\n      [effort?.key, speed?.key].filter((key): key is string => key !== undefined),\n    );\n    this.placePopover();\n  }\n\n  private bindEvents(): void {\n    this.#root.querySelector<HTMLButtonElement>(\".trigger\")?.addEventListener(\"click\", () => {\n      this.#isOpen = !this.#isOpen;\n      this.#section = undefined;\n      this.render();\n      if (this.#isOpen) {\n        this.#root.querySelector<HTMLButtonElement>(\".row\")?.focus();\n      }\n    });\n    for (const row of this.#root.querySelectorAll<HTMLButtonElement>(\"button[data-section]\")) {\n      row.addEventListener(\"click\", () => {\n        const section = row.dataset.section as ComposerSection;\n        this.#section = this.#section === section ? undefined : section;\n        this.render();\n        if (this.#section !== undefined) {\n          this.focusSection(this.#section);\n        }\n      });\n    }\n    this.#root\n      .querySelector<HTMLButtonElement>(\"button[data-back]\")\n      ?.addEventListener(\"click\", () => {\n        const section = this.#section;\n        this.#section = undefined;\n        this.render();\n        if (section !== undefined) {\n          this.#root.querySelector<HTMLButtonElement>(`button[data-section=\"${section}\"]`)?.focus();\n        }\n      });\n    const search = this.#root.querySelector<HTMLInputElement>(\".search\");\n    search?.addEventListener(\"input\", () => {\n      this.#query = search.value;\n      this.render();\n      const nextSearch = this.#root.querySelector<HTMLInputElement>(\".search\");\n      nextSearch?.focus();\n      nextSearch?.setSelectionRange(nextSearch.value.length, nextSearch.value.length);\n    });\n    for (const choice of this.#root.querySelectorAll<HTMLButtonElement>(\"button[data-model]\")) {\n      choice.addEventListener(\"click\", () => {\n        const model = languageModels(this.#catalogs).find(\n          (candidate) => candidate.key === choice.dataset.model,\n        );\n        if (model === undefined) {\n          return;\n        }\n        this.#options = recommendedSelection(model, this.#recommendations).options;\n        this.#selected = model;\n        const section = this.#section;\n        this.#section = undefined;\n        this.#query = \"\";\n        this.render();\n        this.emit();\n        if (section !== undefined) {\n          this.#root.querySelector<HTMLButtonElement>(`button[data-section=\"${section}\"]`)?.focus();\n        }\n      });\n    }\n    for (const choice of this.#root.querySelectorAll<HTMLButtonElement>(\"button[data-option]\")) {\n      choice.addEventListener(\"click\", () => {\n        const key = choice.dataset.option;\n        if (key === undefined) {\n          return;\n        }\n        const value = choice.dataset.value;\n        const section = this.#section;\n        const next = { ...this.#options };\n        if (value === undefined || value === \"\") {\n          delete next[key];\n        } else {\n          const definition = this.#selected?.options.find((option) => option.key === key);\n          next[key] = definition?.kind === \"boolean\" ? value === \"true\" : value;\n        }\n        this.#options = next;\n        this.#section = undefined;\n        this.render();\n        this.emit();\n        if (section !== undefined) {\n          this.#root.querySelector<HTMLButtonElement>(`button[data-section=\"${section}\"]`)?.focus();\n        }\n      });\n    }\n  }\n\n  private bindAdvancedOptions(\n    selected: ModelDescriptor | undefined,\n    excludedKeys: readonly string[],\n  ): void {\n    const options = this.#root.querySelector(\"models-options\");\n    if (!(options instanceof ModelsOptionsElement)) {\n      return;\n    }\n    options.model = selected;\n    options.groups = this.#groups;\n    options.excludedKeys = excludedKeys;\n    options.value = this.#options;\n    options.addEventListener(OPTIONS_CHANGE_EVENT, (event) => {\n      this.#options = (event as CustomEvent<OptionValues<ModelDescriptor[\"options\"]>>).detail;\n      this.emit();\n    });\n  }\n\n  private focusSection(section: ComposerSection): void {\n    if (section === \"model\") {\n      this.#root.querySelector<HTMLInputElement>(\".search\")?.focus();\n      this.#root\n        .querySelector<HTMLElement>(`[data-model=\"${CSS.escape(this.#selected?.key ?? \"\")}\"]`)\n        ?.scrollIntoView({ block: \"center\" });\n      return;\n    }\n    if (section === \"advanced\") {\n      const options = this.#root.querySelector(\"models-options\");\n      if (options instanceof ModelsOptionsElement) {\n        options.shadowRoot?.querySelector<HTMLElement>(\"[data-option]\")?.focus();\n      }\n      return;\n    }\n    this.#root.querySelector<HTMLButtonElement>(\"button[data-option]\")?.focus();\n  }\n\n  private placePopover(): void {\n    const popover = this.#root.querySelector<HTMLElement>(\".popover\");\n    if (popover === null || !this.isConnected) {\n      return;\n    }\n    const triggerBounds = this.#root\n      .querySelector<HTMLButtonElement>(\".trigger\")\n      ?.getBoundingClientRect();\n    const bounds =\n      triggerBounds !== undefined && triggerBounds.width > 0\n        ? triggerBounds\n        : this.getBoundingClientRect();\n    const margin = 16;\n    const width = 340;\n    const horizontal =\n      bounds.left + width <= window.innerWidth - margin\n        ? \"start\"\n        : bounds.right - width >= margin\n          ? \"end\"\n          : \"overlay\";\n    popover.dataset.horizontal = horizontal;\n    if (horizontal === \"overlay\") {\n      const overlayWidth = Math.min(340, window.innerWidth - margin * 2);\n      const maximumLeft = window.innerWidth - margin - overlayWidth;\n      const viewportLeft = Math.min(Math.max(bounds.left, margin), maximumLeft);\n      popover.style.left = `${viewportLeft - bounds.left}px`;\n    } else {\n      popover.style.removeProperty(\"left\");\n    }\n    const measuredHeight = Math.max(popover.getBoundingClientRect().height, popover.scrollHeight);\n    const desiredHeight =\n      measuredHeight > 0 ? measuredHeight : Math.min(440, window.innerHeight * 0.7);\n    const gap = 8;\n    const spaceAbove = Math.max(0, bounds.top - margin - gap);\n    const spaceBelow = Math.max(0, window.innerHeight - bounds.bottom - margin - gap);\n    const vertical =\n      desiredHeight <= spaceAbove\n        ? \"above\"\n        : desiredHeight <= spaceBelow\n          ? \"below\"\n          : spaceAbove >= spaceBelow\n            ? \"above\"\n            : \"below\";\n    popover.dataset.vertical = vertical;\n    popover.style.setProperty(\n      \"--models-popover-space\",\n      `${Math.max(96, vertical === \"above\" ? spaceAbove : spaceBelow)}px`,\n    );\n  }\n\n  private emit(): void {\n    const selection = this.value;\n    if (selection === undefined) {\n      return;\n    }\n    const optionResult = validateOptions(selection.model.options, selection.options);\n    if (!optionResult.ok || validateConstraints(selection.model, selection.options).length > 0) {\n      return;\n    }\n    emitSelectionChange(this, selection);\n  }\n}\n\nfunction renderMainPanel(\n  model: ModelDescriptor | undefined,\n  effort: OptionDefinition | undefined,\n  speed: OptionDefinition | undefined,\n  values: Readonly<Record<string, unknown>>,\n  section: ComposerSection | undefined,\n  groups: readonly VisibleOptionGroup[],\n): string {\n  return `<div class=\"panel\" part=\"panel\">\n    ${renderRow(\"model\", \"Model\", model?.name ?? \"Choose\", section)}\n    ${effort === undefined ? \"\" : renderRow(\"effort\", quickOptionLabel(effort, \"Reasoning\"), optionValue(effort, values), section)}\n    ${speed === undefined ? \"\" : renderRow(\"speed\", quickOptionLabel(speed, \"Run speed\"), optionValue(speed, values), section)}\n    ${model === undefined || !hasAdvancedOptions(model, [effort?.key, speed?.key], groups) ? \"\" : renderRow(\"advanced\", \"Advanced\", \"\", section)}\n  </div>`;\n}\n\nfunction renderRow(\n  section: ComposerSection,\n  label: string,\n  value: string,\n  active: ComposerSection | undefined,\n): string {\n  return `<button class=\"row ${section === \"advanced\" ? \"advanced-row\" : \"\"}\" part=\"row\" type=\"button\" data-section=\"${section}\" aria-expanded=\"${active === section}\"${value === \"\" ? \"\" : ` title=\"${escapeHtml(value)}\"`}><span>${escapeHtml(label)}</span><span class=\"row-value\">${escapeHtml(value)}</span><span class=\"chevron forward\" aria-hidden=\"true\">${chevronIcon}</span></button>`;\n}\n\nfunction renderSubmenu(\n  section: ComposerSection | undefined,\n  catalogs: readonly ModelCatalog[],\n  selected: ModelDescriptor | undefined,\n  effort: OptionDefinition | undefined,\n  speed: OptionDefinition | undefined,\n  values: Readonly<Record<string, unknown>>,\n  query: string,\n  grouping: ModelGrouping,\n  iconMode: ModelIconMode,\n  recommendations: readonly ModelRecommendation[],\n): string {\n  if (section === undefined) {\n    return \"\";\n  }\n  if (section === \"advanced\") {\n    return '<div class=\"submenu\" part=\"submenu\"><div class=\"submenu-head\"><button class=\"back\" part=\"back\" type=\"button\" data-back aria-label=\"Back to model settings\"><span class=\"chevron backward\">${chevronIcon}</span></button><p class=\"submenu-title\">Advanced</p></div><models-options class=\"advanced-options\"></models-options></div>';\n  }\n  if (section === \"model\") {\n    const words = query.toLocaleLowerCase().trim().split(/\\s+/).filter(Boolean);\n    const models = languageModels(catalogs).filter((model) => {\n      const labels = recommendations\n        .filter(\n          (recommendation) =>\n            recommendation.model === model.key || recommendation.model === model.id,\n        )\n        .map((recommendation) => recommendation.label)\n        .join(\" \");\n      const search =\n        `${model.name} ${model.id} ${model.author ?? \"\"} ${labels}`.toLocaleLowerCase();\n      return words.every((word) => search.includes(word));\n    });\n    return `<div class=\"submenu\" part=\"submenu\"><div class=\"submenu-head\"><button class=\"back\" part=\"back\" type=\"button\" data-back aria-label=\"Back to model settings\"><span class=\"chevron backward\">${chevronIcon}</span></button><input class=\"control search\" part=\"search\" type=\"search\" aria-label=\"Search models\" placeholder=\"Search models\" value=\"${escapeHtml(query)}\"></div><div class=\"submenu-list\">${models.length === 0 ? '<p class=\"empty\">No matching models</p>' : renderModelChoices(models, selected?.key, grouping, iconMode, recommendations)}</div></div>`;\n  }\n  const option = section === \"effort\" ? effort : speed;\n  if (option === undefined || (option.kind !== \"boolean\" && option.kind !== \"enum\")) {\n    return \"\";\n  }\n  const current = values[option.key];\n  const choices =\n    option.kind === \"boolean\"\n      ? `${renderOptionChoice(option, \"true\", \"On\", current)}${renderOptionChoice(option, \"false\", \"Off\", current)}`\n      : option.values\n          .map((value) => renderOptionChoice(option, value, titleCase(value), current))\n          .join(\"\");\n  return `<div class=\"submenu\" part=\"submenu\" aria-label=\"${escapeHtml(option.label)}\"><div class=\"submenu-head\"><button class=\"back\" part=\"back\" type=\"button\" data-back aria-label=\"Back to model settings\"><span class=\"chevron backward\">${chevronIcon}</span></button><p class=\"submenu-title\">${escapeHtml(option.label)}</p></div>${renderOptionChoice(option, \"\", \"Provider default\", current)}${choices}</div>`;\n}\n\nfunction renderModelChoices(\n  models: readonly ModelDescriptor[],\n  selectedKey: string | undefined,\n  grouping: ModelGrouping,\n  iconMode: ModelIconMode,\n  recommendations: readonly ModelRecommendation[],\n): string {\n  const groups = modelGroups(models, grouping, recommendations);\n  return [...groups]\n    .map(\n      ([group, values]) =>\n        `${group === \"\" ? \"\" : `<div class=\"group\">${escapeHtml(group)}</div>`}${values.map((model) => renderModelChoice(model, selectedKey, iconMode, recommendations)).join(\"\")}`,\n    )\n    .join(\"\");\n}\n\nfunction renderModelChoice(\n  model: ModelDescriptor,\n  selectedKey: string | undefined,\n  iconMode: ModelIconMode,\n  recommendations: readonly ModelRecommendation[],\n): string {\n  const icon = renderModelIcon(model, iconMode, \"choice-icon\");\n  const labels = recommendations\n    .filter(\n      (recommendation) => recommendation.model === model.key || recommendation.model === model.id,\n    )\n    .map((recommendation) => recommendation.label)\n    .join(\" · \");\n  return `<button class=\"choice ${icon === \"\" ? \"no-icon\" : \"\"}\" part=\"option\" type=\"button\" aria-pressed=\"${model.key === selectedKey}\" title=\"${escapeHtml(`${model.name} · ${model.id}`)}\" data-model=\"${escapeHtml(model.key)}\">${icon}<span class=\"choice-label\">${escapeHtml(model.name)}${labels === \"\" ? \"\" : ` <span class=\"choice-meta\">${escapeHtml(labels)}</span>`}</span><span class=\"checkmark\">${model.key === selectedKey ? \"✓\" : \"\"}</span></button>`;\n}\n\nfunction renderModelIcon(model: ModelDescriptor, mode: ModelIconMode, className: string): string {\n  const icon = modelIcon(model, mode);\n  return icon === \"\" ? \"\" : `<span class=\"${className}\">${icon}</span>`;\n}\n\nfunction renderOptionChoice(\n  option: OptionDefinition,\n  value: string,\n  label: string,\n  current: unknown,\n): string {\n  const candidate = option.kind === \"boolean\" && value !== \"\" ? value === \"true\" : value;\n  const isSelected = (current ?? \"\") === candidate;\n  return `<button class=\"choice\" type=\"button\" aria-pressed=\"${isSelected}\" data-option=\"${escapeHtml(option.key)}\" data-value=\"${escapeHtml(value)}\"><span></span><span>${escapeHtml(label)}</span><span class=\"checkmark\">${isSelected ? \"✓\" : \"\"}</span></button>`;\n}\n\nfunction renderSummary(\n  model: ModelDescriptor | undefined,\n  effort: OptionDefinition | undefined,\n  speed: OptionDefinition | undefined,\n  values: Readonly<Record<string, unknown>>,\n): string {\n  if (model === undefined) {\n    return \"Choose a model\";\n  }\n  const details = [effort, speed]\n    .filter((option): option is OptionDefinition => option !== undefined)\n    .map((option) => selectedOptionSummary(option, values[option.key]))\n    .filter((value): value is string => value !== undefined);\n  return `${escapeHtml(model.name)}${details.length === 0 ? \"\" : ` <span class=\"summary-detail\">${escapeHtml(details.join(\" · \"))}</span>`}`;\n}\n\nfunction optionValue(option: OptionDefinition, values: Readonly<Record<string, unknown>>): string {\n  const value = values[option.key];\n  return selectedOptionSummary(option, value) ?? \"Default\";\n}\n\nfunction findOption(model: ModelDescriptor, keys: readonly string[]): OptionDefinition | undefined {\n  return model.options.find(\n    (option) =>\n      keys.includes(option.key) && option.kind === \"enum\" && option.support.status === \"supported\",\n  );\n}\n\nfunction findReasoningOption(model: ModelDescriptor): OptionDefinition | undefined {\n  return (\n    findOption(model, [\"reasoning.effort\", \"reasoning.level\", \"reasoning.mode\"]) ??\n    model.options.find(\n      (option) =>\n        option.group === \"reasoning\" &&\n        option.kind === \"boolean\" &&\n        option.support.status === \"supported\",\n    )\n  );\n}\n\nfunction hasAdvancedOptions(\n  model: ModelDescriptor,\n  excludedKeys: readonly (string | undefined)[],\n  groups: readonly VisibleOptionGroup[],\n): boolean {\n  return model.options.some(\n    (option) =>\n      option.support.status === \"supported\" &&\n      groups.includes(option.group) &&\n      !excludedKeys.includes(option.key),\n  );\n}\n\nfunction quickOptionLabel(option: OptionDefinition, fallback: string): string {\n  if (option.key === \"reasoning.effort\") {\n    return \"Effort\";\n  }\n  if (option.key === \"speed.mode\") {\n    return \"Run speed\";\n  }\n  return option.label || fallback;\n}\n\nfunction selectedOptionSummary(option: OptionDefinition, value: unknown): string | undefined {\n  if (option.kind === \"boolean\" && typeof value === \"boolean\") {\n    return value ? \"On\" : \"Off\";\n  }\n  return typeof value === \"string\" && value !== \"\" ? titleCase(value) : undefined;\n}\n\nfunction preferredModel(models: readonly ModelDescriptor[]): ModelDescriptor | undefined {\n  return (\n    models.find(\n      (model) =>\n        findOption(model, [\"reasoning.effort\"]) !== undefined &&\n        findOption(model, [\"speed.mode\", \"service.tier\"]) !== undefined,\n    ) ??\n    models.find((model) => findOption(model, [\"reasoning.effort\"]) !== undefined) ??\n    models[0]\n  );\n}\n\nfunction languageModels(catalogs: readonly ModelCatalog[]): readonly ModelDescriptor[] {\n  return catalogs.flatMap((catalog) => catalog.models).filter((model) => model.kind === \"language\");\n}\n\nfunction titleCase(value: string): string {\n  if (value === \"xhigh\") {\n    return \"Extra High\";\n  }\n  return value\n    .replaceAll(/[-_]/g, \" \")\n    .replace(/\\b\\w/g, (character) => character.toLocaleUpperCase());\n}\n\nfunction escapeHtml(value: string): string {\n  return value.replace(\n    /[&<>\"']/g,\n    (character) =>\n      ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" })[character] ??\n      character,\n  );\n}\n"},{"path":"source/packages/elements/src/events.ts","content":"import type { ModelDescriptor, ModelSelection } from \"../../core/src/index.ts\";\n\n/** The event name emitted when a model changes. */\nexport const MODEL_CHANGE_EVENT = \"models-model-change\";\n\n/** The event name emitted when a model selection is cleared. */\nexport const MODEL_CLEAR_EVENT = \"models-model-clear\";\n\n/** The event name emitted when a complete selection changes. */\nexport const SELECTION_CHANGE_EVENT = \"models-selection-change\";\n\n/** The event name emitted for option drafts, including temporarily invalid combinations. */\nexport const OPTIONS_CHANGE_EVENT = \"models-options-change\";\n\n/** Emit a standard bubbling, composed custom event. */\nexport function emitModelChange(target: EventTarget, model: ModelDescriptor): void {\n  target.dispatchEvent(\n    new CustomEvent(MODEL_CHANGE_EVENT, {\n      detail: model,\n      bubbles: true,\n      composed: true,\n    }),\n  );\n}\n\n/** Emit a standard bubbling, composed model-clear event. */\nexport function emitModelClear(target: EventTarget): void {\n  target.dispatchEvent(new CustomEvent(MODEL_CLEAR_EVENT, { bubbles: true, composed: true }));\n}\n\n/** Emit a complete model and option selection. */\nexport function emitSelectionChange(target: EventTarget, selection: ModelSelection): void {\n  target.dispatchEvent(\n    new CustomEvent(SELECTION_CHANGE_EVENT, {\n      detail: selection,\n      bubbles: true,\n      composed: true,\n    }),\n  );\n}\n"},{"path":"source/packages/elements/src/generated/brandIcons.ts","content":"// Generated by pnpm icons:refresh from @lobehub/icons-static-svg. Do not edit by hand.\n\n/** Reviewed AI brand SVGs bundled without a runtime icon dependency. */\n// oxfmt-ignore\nexport const brandIcons: Readonly<Record<string, string>> = {\n  \"aionlabs\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M12.038 0c.656.037 1.24.24 1.754.658.026.021.108.095.249.222a.043.043 0 00.02.01c.035.01.063.008.084-.004.204-.117.42-.163.648-.14.185.018.402.024.506.038.231.03.437.095.617.193.077.042.192.116.346.22a.044.044 0 00.021.008c.048.004.085-.027.128-.028.043-.002.078-.022.127-.027.302-.034.598-.029.889.016.142.022.28.073.41.134.403.19.733.444 1.036.762.295.31.513.665.653 1.063.066.187.102.433.127.562a.112.112 0 00.007.023c.052.113.108.235.17.365.133.281.18.553.227.9.004.03.015.069.033.115a.084.084 0 00.02.032l.098.09c.203.184.365.402.486.652.114.238.129.477.124.734-.005.212-.065.366-.14.583a.087.087 0 00-.004.041c.015.102.022.168.02.196-.004.085-.014.22-.03.404a.913.913 0 01-.054.245c-.228.599-.712.911-1.328.995a.357.357 0 00-.083.04.027.027 0 00-.005.01c-.008.029.01.072.008.112-.006.09-.022.209-.05.354a1.495 1.495 0 01-.797 1.09c-.187.1-.388.159-.602.176a.045.045 0 00-.041.046c.003.088-.027.154-.027.239a.555.555 0 01-.017.149c-.013.046-.01.099-.017.147a12.685 12.685 0 01-1.58 4.786c-.108.189-.231.381-.37.577a.067.067 0 00-.012.05c.072.427.162.844.27 1.251.1.375.232.788.582 1.001.67.408 1.4.74 2.133 1.051.003 0 .005.002.006.004a.016.016 0 01.004.013 21.907 21.907 0 01-.837.946 12.565 12.565 0 01-1.826 1.567 7.999 7.999 0 01-2.835 1.24.05.05 0 01-.02.004.348.348 0 00-.129.022 3.537 3.537 0 01-.513.04c-.164.004-.33.012-.494.023h-.039c-.012-.005-.018-.005-.02 0h-.404c-.01-.005-.016-.005-.018 0h-.05a17.276 17.276 0 01-.373-.025 3.11 3.11 0 01-.37-.049c-.754-.153-1.466-.4-2.129-.801a4.34 4.34 0 01-1.277-1.172 1.223 1.223 0 01-.23-.537 2.325 2.325 0 00-.035-.199l-.03-.233v-.006c.005-.09-.026-.197-.03-.283a18.36 18.36 0 00-.184-1.215c-.014-.07-.014-.152-.037-.225a.107.107 0 01-.004-.037.3.3 0 00-.025-.136.066.066 0 01-.005-.027c.002-.097-.033-.196-.038-.282a.15.15 0 00-.016-.062.034.034 0 01-.004-.022.235.235 0 00-.008-.101c-.022-.081-.018-.155-.043-.228a.097.097 0 01-.005-.035.355.355 0 00-.02-.131.113.113 0 01-.006-.036.512.512 0 00-.026-.154.085.085 0 01-.004-.032.242.242 0 00-.023-.122.03.03 0 01-.003-.01l-.012-.126a.072.072 0 00-.005-.02c-.02-.052-.01-.103-.025-.153a.537.537 0 01-.019-.129.135.135 0 00-.008-.042c-.023-.06-.023-.13-.037-.204l-.062-.333a.384.384 0 00-.042-.117.026.026 0 00-.015-.012 2.23 2.23 0 01-.748-.41c-.358-.297-.522-.673-.602-1.12-.028-.159-.165-.329-.223-.436-.08-.151-.13-.312-.147-.484a.03.03 0 00-.004-.011l-.008-.013a.02.02 0 01.002-.024c.035-.042.03-.144-.04-.151a.032.032 0 01-.02-.011c-.198-.228-.403-.482-.495-.74-.06-.166-.1-.342-.123-.527a7.032 7.032 0 01-.032-.4c0-.007 0-.014.003-.02.05-.135.07-.292-.019-.416a.146.146 0 01-.024-.055l-.076-.388a1.661 1.661 0 01.276-.89.022.022 0 00-.004-.028C3.42 10.05 3.008 9.254 3 8.414a3.12 3.12 0 01.083-.809c.1-.388.293-.728.577-1.02.19-.197.388-.337.604-.481a.082.082 0 00.034-.088l-.028-.112a16.806 16.806 0 01.006-1.152c.012-.194.086-.42.161-.626.27-.738.767-1.38 1.473-1.74.163-.083.27-.123.356-.24.125-.17.29-.353.493-.55A2.224 2.224 0 017.912 1c.118-.022.261-.022.392-.035.036.016.06.01.07-.018a.137.137 0 00.024-.014c.163-.121.303-.225.42-.31a2.794 2.794 0 011.433-.537c.151-.012.255.004.42.015.011 0 .022.002.032.005.082.023.15.017.234.035a.278.278 0 00.114.01 4.76 4.76 0 01.836-.15h.151zm-7.43 6.65c.16-.21.318-.398.487-.53a1.78 1.78 0 011.467-.355 7.966 7.966 0 01.501.11.011.011 0 00.007-.017 1.536 1.536 0 01-.136-.62l.018-.112c.043.401.188.752.434 1.052.225.276.51.45.85.521.276.058.57.072.884.043a.239.239 0 01.098-.008 1.728 1.728 0 001.265-.679.014.014 0 00-.013-.016l-.439-.048a2.548 2.548 0 00-.426-.157c-.13-.034-.279-.037-.408-.06a1.03 1.03 0 01-.85-.833c-.03-.299.029-.63.235-.853.088-.095.167-.174.238-.237.053-.046.027-.096.039-.15.02-.097.042-.195.064-.292l.17-.32a.01.01 0 00-.011-.016 1.23 1.23 0 00-.853.562c-.202.31-.294.708-.18 1.064v.003a.005.005 0 01-.005.003.004.004 0 01-.003-.003 1.297 1.297 0 01-.103-1.041c.146-.414.576-.746.985-.884.11-.038.243-.054.399-.048a.029.029 0 00.021-.009l.206-.214c.197-.207.444-.375.744-.504a.462.462 0 00.083-.048.01.01 0 00.001-.005v-.005a.718.718 0 00-.265-.128c-.442-.1-.854-.08-1.235.06a3.034 3.034 0 00-.87.49.014.014 0 01-.014-.005.014.014 0 01-.002-.007c-.001-.01.003-.02.013-.034.155-.22.327-.397.515-.532.485-.347 1.094-.411 1.667-.26.094.025.182.062.265.11.077.046.158.098.243.156a.145.145 0 00.077.025c.202.01.407-.106.451-.318a.256.256 0 00-.002-.141.052.052 0 00-.014-.02.257.257 0 01-.079-.12c-.027-.104.022-.238.148-.233a.37.37 0 01.145.038c.155.074.192.323.177.474v.003l.003.003.003.001h.004c.218-.082.442-.086.647-.09a.018.018 0 01.013.006.017.017 0 01.004.006.018.018 0 01.001.007v.208a.012.012 0 01-.003.008.013.013 0 01-.007.004c-.2.023-.384.04-.563.113a1.725 1.725 0 00-.796.633 1.682 1.682 0 00-.168 1.596 1.74 1.74 0 001.146 1.015c.306.08.625.087.957.021a1.137 1.137 0 00.324-.12l-.002-.002h-.001a1.242 1.242 0 01-.953-.4 2.157 2.157 0 01-.119-.136v-.002h.001a.857.857 0 00.884.071.587.587 0 00.256-.22.023.023 0 00-.005-.018.022.022 0 00-.007-.006c-.49-.246-.702-.724-.656-1.261a.092.092 0 01.024-.054c.013-.012.022-.013.028-.004a.541.541 0 00.029.158c.15.382.41.647.781.793.385.152.788.15 1.21-.005.085-.031.17-.076.252-.134a.738.738 0 00.258-.31.421.421 0 00-.016-.396c-.137-.201-.314-.24-.53-.113a1.6 1.6 0 00-.093.057.57.57 0 01-.383.09.788.788 0 01-.62-.421.672.672 0 01-.064-.478.46.46 0 01.232-.297c.085-.049.162-.065.23-.049.002 0 .002.001.003.002l.002.003v.006a.984.984 0 00-.17.316c-.06.224.007.402.204.533a.366.366 0 00.367-.012c.082-.05.13-.137.187-.203a.419.419 0 01.325-.145c.473-.008.833.362 1.01.765.06.196.09.396.088.601l-.037.321c-.08.13-.142.268-.185.412a.713.713 0 00-.037.263.696.696 0 00.27.456h.004a.006.006 0 00.003-.004v-.003a.978.978 0 01.003-.507c.011-.04.053-.132.127-.278.254-.321.56-.41.958-.421a.01.01 0 00.008-.004.01.01 0 00.002-.004V3.87c-.03-.233-.04-.439.05-.647.315-.737 1.163-.68 1.74-.34a10.893 10.893 0 01.38.234.013.013 0 00.008-.003.013.013 0 00.004-.006v-.008l-.05-.156a1.989 1.989 0 00-.982-1.05 1.77 1.77 0 00-.687-.161.009.009 0 01-.003-.004.008.008 0 010-.004v-.005a.296.296 0 01.263-.145.01.01 0 00.01-.01.01.01 0 00-.002-.006 1.726 1.726 0 00-1.252-.128.032.032 0 00-.025.033c0 .005.002.01.004.014l.092.159a.035.035 0 00.036.017c.238-.036.437-.05.648.075l.001.001v.004l-.003.001a1.802 1.802 0 00-1.33.792.355.355 0 00-.066-.115.035.035 0 01-.008-.02c-.006-.106.071-.21.139-.293.097-.12.208-.22.333-.302a.025.025 0 00.009-.032.786.786 0 00-.197-.265 1.4 1.4 0 00-.684-.416c-.481-.13-.921-.074-1.319.167-.143.088-.31.245-.42.328a.123.123 0 01-.115.023c-.301-.092-.606.003-.838.213a.829.829 0 00-.284.616.024.024 0 01-.018.023c-.282.082-.615.27-.714.562a.846.846 0 00.043.656l-.056.206a1.238 1.238 0 01-.186-.265.989.989 0 01-.008-.84c.099-.22.31-.424.571-.334a.047.047 0 01.02.013l.05.057a.021.021 0 00.035-.005.198.198 0 00.016-.058c.02-.14.043-.248.07-.324.166-.474.579-.832 1.09-.841.033 0 .065-.01.093-.028l.286-.184a.015.015 0 00.005-.005.016.016 0 00-.002-.02c-.715-.757-1.754-.97-2.726-.611a.137.137 0 01-.083.004 2.267 2.267 0 00-1.77.228 2.006 2.006 0 00-.297.198l-.48.411a.035.035 0 01-.028.008c-.119-.023-.198-.049-.302-.043-.179.008-.335.04-.47.097-.416.174-.769.45-1.057.83a2.2 2.2 0 00-.45 1.08c-.006.07-.015.154-.026.25a.052.052 0 01-.022.037 2.019 2.019 0 00-.419.359c-.208.255-.377.535-.421.836-.016.109-.03.218-.04.328a.21.21 0 000 .04l.027.347c0 .004-.001.007-.004.01a.015.015 0 01-.01.005.3.3 0 00-.142.051 1.658 1.658 0 00-.57.725c-.045.105-.198.49-.126.582a.038.038 0 00.027.014.054.054 0 00.032-.008.523.523 0 00.188-.17zM8.98 3.668a.36.36 0 00-.107.111.052.052 0 00-.008.02c-.048.263-.041.514.02.753.146.579.706.929 1.278.982.293.027.576-.01.85-.11.13-.048.24-.12.355-.174a.007.007 0 00.003-.003l.001-.004c0-.002 0-.003-.002-.004a1.379 1.379 0 01-1.182-1.36 2.047 2.047 0 01.193-1.147c.089-.174.194-.337.315-.489a.103.103 0 00.018-.034.01.01 0 00-.001-.008.009.009 0 00-.008-.003c-.642.08-1.233.63-1.331 1.272a.02.02 0 01-.015.016 1.15 1.15 0 00-.379.183zm-4.4 1.847c.084-.114.18-.219.285-.314a.123.123 0 00.039-.085c.013-.143.02-.248.024-.315.074-.429.26-.8.561-1.115.109-.113.224-.194.356-.267a.037.037 0 00.02-.033 1.79 1.79 0 01.119-.705.019.019 0 00-.026-.024 2.57 2.57 0 00-.842.719 3.172 3.172 0 00-.43.783A3.024 3.024 0 004.5 5.611a.008.008 0 00.012 0l.067-.097zm11.885-1.111c-.176.137-.252.305-.228.505a.724.724 0 00.13.31c.198.267.46.426.785.478.436.07.812-.028 1.129-.294.178-.15.305-.338.38-.567.049-.147.063-.313.08-.494a.076.076 0 01.063-.068.276.276 0 01.123.014c.426.135.667.582.762 1.007l-.408.037a.011.011 0 00-.007.003.012.012 0 00-.003.005v.007l.005.005c.154.094.282.28.263.467l-.048.458c-.018.148-.01.266-.013.445 0 .008.001.016.004.024.051.164.162.275.33.14a.504.504 0 00.186-.32c.117-.352.089-.677-.083-.975a4.19 4.19 0 01-.148-.275.061.061 0 01-.005-.036c.04-.239.034-.475-.019-.708a1.937 1.937 0 00-.3-.66c-.207-.297-.518-.546-.871-.578-.38-.035-.763.162-.9.535-.088.246-.041.47.043.697a.019.019 0 01-.01.024 1.078 1.078 0 01-.604.096.68.68 0 01-.528-.353.012.012 0 00-.01-.002.012.012 0 00-.005.002l-.093.071zm-1.349.67c-.393.525-.99.84-1.648.84-.157 0-.347-.017-.486.073-.106.069-.222.142-.348.22a2.5 2.5 0 01-1.256.382 6.572 6.572 0 01-.444-.005c-.12-.005-.206.01-.283.097l-.383.43a.175.175 0 01-.034.03c-.124.082-.28.198-.413.26-.091.043-.256.12-.362.191a1.33 1.33 0 00-.524.665c-.01.029-.052.146-.123.353a1.437 1.437 0 01-.375.573l-.326.19a.024.024 0 00-.01.033c.014.028.041.09.08.184.153.37.1.81-.166 1.115a.83.83 0 01-.374.209c-.455.108-.84-.228-1.022-.611a.006.006 0 00-.004-.003h-.004a.006.006 0 00-.005.007c.018.092.041.199.07.322.028.12.059.212.092.275.079.149.154.295.225.44-.042.242-.223.288-.424.205a8.751 8.751 0 01-.565-.258.41.41 0 01-.15-.186 4.892 4.892 0 00-.142-.428 1.055 1.055 0 00-.622-.593c-.038-.014-.078-.02-.119-.028l-.002-.01-.029-.476a2.415 2.415 0 01-.002-.182c.001-.178.052-.355.185-.475a.482.482 0 01.2-.108c.466-.028.491.45.768.719a.02.02 0 00.032-.007s0-.007-.003-.02c-.049-.324-.103-.597-.328-.834-.105-.11-.246-.157-.423-.141-.397.049-.572.345-.623.714a2.57 2.57 0 00-.016.564c.006.12.02.242.039.367.032.203.075.433.13.691.041.193.088.365.14.517.083.24.2.469.353.689.127.182.288.341.484.476a1.28 1.28 0 001.191.165c-.002-.003 0-.004.004-.002a.008.008 0 01.006.007c.046.336.118.703.217 1.101.045.18.093.326.144.441.167.457.41.864.727 1.22.267.299.57.567.907.806a.17.17 0 00.09.055c.032.04.058.068.08.083.458.314.933.58 1.426.8.392.175.644.282.757.32.275.097.521.174.74.234.298.083.63.13.994.145.513.02 1.077-.093 1.382-.554.324-.492.08-1.097-.374-1.393a1.532 1.532 0 00-.519-.255 1.788 1.788 0 00-.638-.06c.064-.117.112-.192.144-.224.252-.262.62-.159.936-.094.23.048.447.013.417-.288-.017-.153-.101-.249-.241-.318a2.22 2.22 0 00-.663-.203.877.877 0 00-.255-.001c-.093.014-.221.029-.385.046a.687.687 0 00-.2.047.523.523 0 00-.168.116c-.088-.025-.154-.047-.19-.121a.126.126 0 01-.008-.096c.075-.155.19-.23.348-.225.014 0 .028.006.038.016.173.167.38.097.583.028.188-.063.384-.075.572-.027.123.031.263.1.393.135.08.021.145.026.194.014.12-.027.18-.113.177-.256a.648.648 0 00-.174-.145.095.095 0 01-.034-.033 7.996 7.996 0 01-.13-.212c-.079-.137-.21-.191-.356-.226a.543.543 0 01-.286-.157.012.012 0 01-.003-.007v-.009c.128-.247.402-.369.67-.346.067.006.18.043.34.113.093.041.231.094.413.16.263.095.587.109.763-.153.1-.15.123-.258.13-.457.058-1.624.1-2.745.124-3.365.008-.212.032-.394.148-.554.154-.214.386-.262.634-.27.112-.003.185-.007.219-.01.309-.038.42-.286.404-.568a1.228 1.228 0 00-.606-1.003 1.726 1.726 0 00-.404-.187 3.697 3.697 0 01-.537-.2 2.442 2.442 0 01-.358-.264v-.005a.007.007 0 01.005-.003h.006l.198.09a.828.828 0 00.492.051.387.387 0 00.3-.274.373.373 0 00-.084-.328c-.158-.199-.362-.32-.616-.495a2.037 2.037 0 01-.313-.31 1.848 1.848 0 01-.28-.49.006.006 0 00-.004-.001l-.004.001a1.674 1.674 0 01-.243.53zm3.913.447a.309.309 0 01-.06.12 2.166 2.166 0 01-.246.252 7.216 7.216 0 01-.271.204.868.868 0 00-.305.353l.002.004c0 .002.002.003.003.004a.01.01 0 00.005.002c.367.03.761-.09.862-.488a1.19 1.19 0 00.022-.455.007.007 0 00-.009 0 .007.007 0 00-.003.004zM3.285 8.786A2.5 2.5 0 003.92 10.1c.065.068.137.125.215.173.021.02.04.026.056.017a2.18 2.18 0 00.346-.223.033.033 0 00.013-.025v-.091a.068.068 0 00-.062-.068c-.372-.032-.685-.313-.798-.654A2.554 2.554 0 003.605 9l.019-.163a.008.008 0 01.015 0c.037.239.139.432.306.578.115.1.315.134.418.004a.753.753 0 00.152-.332.064.064 0 00-.025-.063 1.915 1.915 0 01-.114-.093.493.493 0 01-.042-.725c.366-.41.997-.45 1.438-.136.12.086.198.13.3.228.064.061.142.127.233.198.231.178.484.237.78.224.432-.019.793-.256 1.009-.633.074-.13.152-.344.248-.474a.915.915 0 01.507-.347.007.007 0 000-.008.97.97 0 00-1.392.08c-.134.102-.264.2-.422.232a.49.49 0 01-.54-.22.315.315 0 01-.051-.186.008.008 0 01.012 0c.205.277.51.103.554-.183a.66.66 0 00-.105-.471.978.978 0 00-.407-.357c-.48-.22-1.095-.012-1.445.366-.049.053-.141.161-.276.326-.091.11-.24.231-.385.243-.152.012-.305-.067-.337-.227a.555.555 0 01.012-.266.01.01 0 00-.01-.007.713.713 0 00-.175.124c-.559.525-.751 1.319-.597 2.074zm3.225.788c.02.07.048.133.086.19.076.113.161.211.256.293.138.31.512.505.808.256.16-.135.206-.403.154-.593a.637.637 0 00-.544-.46 2.678 2.678 0 00-.519.016c-.003 0-.007 0-.01-.002L6.39 9.07a.01.01 0 00-.015.004 1.6 1.6 0 00.135.498zm-2.281 1.288c-.19.273-.248.65-.095.952.076.149.178.24.306.273.146.037.277-.03.393-.203a.74.74 0 00-.034-.48l-.027-.07a2.8 2.8 0 01-.159-.758.02.02 0 00-.01-.016.021.021 0 00-.01-.002.02.02 0 00-.01.003c-.132.081-.25.181-.354.3zm.112 2.45a1.767 1.767 0 00.334.456.023.023 0 00.026-.007l.084-.099c.216-.088.439-.122.668-.1a.589.589 0 01.177.084c.22.144.378.255.526.428l.003.002h.004a.007.007 0 00.003-.003 1.064 1.064 0 00-.756-1.222c-.07-.07-.143-.144-.217-.222a.94.94 0 00-.196-.17.49.49 0 00-.252-.057 1.956 1.956 0 01-.168.023.785.785 0 01-.381-.085.008.008 0 00-.007.004 1.758 1.758 0 00.151.968zm2.146 1.906l-.004.039c.022.303.057.598.107.884.039.408.08.75.126 1.026.252 1.516.412 2.487.481 2.913.03.186.071.528.122 1.027.03.284.075.477.22.685.533.757 1.37 1.296 2.238 1.593.911.342 1.859.455 2.844.34.345-.033.69-.097 1.031-.194.279-.079.556-.178.832-.298a.523.523 0 01.08-.036 1.05 1.05 0 00.08-.034c.306-.147.602-.302.89-.464a2.335 2.335 0 00.271-.185v-.006a.01.01 0 00-.004-.005 4.242 4.242 0 01-2.835-.888 7.214 7.214 0 01-.744-.69 28.211 28.211 0 01-1.274-1.44.04.04 0 00-.02-.013.064.064 0 00-.014-.028l-2.395-2.897a9.254 9.254 0 01-.589-.805 4.565 4.565 0 01-.616-1.382l-.158-.647a.021.021 0 00-.024-.018.67.67 0 00-.48.313c-.135.208-.203.44-.204.697 0 .21.008.377.026.5 0 .004.002.007.004.01.005.006.007.007.009.003zm-1.488-1.204c-.184.263-.064.57.165.755.052.042.083.057.152.037.299-.09.57-.137.869-.03h.003c.002 0 .003 0 .003-.002a.006.006 0 00.001-.006 1.869 1.869 0 00-.304-.479c-.138-.179-.437-.434-.677-.416a.258.258 0 00-.212.14zm.967 2.238a.806.806 0 00.399.092.016.016 0 00.016-.015c.024-.267 0-.533-.07-.796a.016.016 0 00-.016-.011c-.196.01-.385.033-.569.066a1.173 1.173 0 01-.4-.448h-.004a.008.008 0 00-.005.002.009.009 0 00-.002.004c-.063.464.268.888.651 1.106z\\\" fill=\\\"#081A2B\\\"></path><path d=\\\"M11.736 3.877l.084.234a.026.026 0 01.002.009l.011.142a.036.036 0 01-.042.039 1.168 1.168 0 01-.415-.148c-.028-.027-.056-.029-.089-.054a2.333 2.333 0 01-.174-.142.024.024 0 00-.01 0l-.368.04a1.682 1.682 0 01.168-1.595c.194-.285.459-.496.796-.634.18-.073.362-.09.563-.113a.012.012 0 00.01-.012v-.208a.018.018 0 00-.019-.019c-.204.004-.428.008-.646.09a.007.007 0 01-.01-.004V1.5c.015-.151-.021-.4-.177-.474a.37.37 0 00-.145-.038c-.126-.005-.175.13-.148.234.01.04.037.08.08.119.005.005.01.012.013.02a.256.256 0 01.002.141c-.044.212-.249.327-.451.319a.145.145 0 01-.077-.026 4.579 4.579 0 00-.243-.156 1.036 1.036 0 00-.265-.11c-.573-.15-1.182-.087-1.667.26-.188.135-.36.313-.515.533-.01.013-.014.024-.013.033a.014.014 0 00.008.012.014.014 0 00.014-.002c.261-.21.549-.373.864-.489.381-.14.793-.16 1.234-.06a.717.717 0 01.265.129.01.01 0 01.001.005.01.01 0 01-.005.009.467.467 0 01-.08.044c-.299.129-.546.297-.743.504a37.931 37.931 0 01-.215.221.029.029 0 01-.012.002 1.124 1.124 0 00-.4.048c-.408.139-.838.47-.984.884a1.297 1.297 0 00.107 1.044.005.005 0 00.003-.001.004.004 0 00.002-.003v-.002c-.115-.355-.023-.753.18-1.064a1.23 1.23 0 01.857-.56.01.01 0 01.006.014l-.17.32c-.054-.002-.093.007-.117.028l-.167.14c-.16.141-.28.304-.36.488a1.74 1.74 0 00-.127.383c-.028.164.014.424.195.493.081.435.414.758.85.833.13.023.279.026.408.06.143.039.285.09.426.157a.5.5 0 01-.135.132c-.26.171-.551.245-.87.221a4.027 4.027 0 01-.342-.067l-.055-.003a6.216 6.216 0 01-.377-.136 2.236 2.236 0 01-.315-.178l-.165-.22a.597.597 0 01-.005-.123c0-.006-.005-.015-.016-.027a.007.007 0 00-.012.005c-.002.048-.068.05-.095.022a3.057 3.057 0 01-.288-.339.805.805 0 01-.11-.179 2.547 2.547 0 00-.137-.334 2.14 2.14 0 01.012-1.053.006.006 0 00-.009-.003c-.202.15-.348.342-.44.578a.024.024 0 01-.02.016c-.375.03-.694.184-.903.503a.006.006 0 000 .006.006.006 0 00.005.003c.096-.004.188.004.277.024a.029.029 0 00.025-.006c.274-.23.654-.298.966-.087l-.07.38-.019.112c0 .01-.004.015-.01.016l-.006-.002a.024.024 0 00-.006-.003.016.016 0 00-.013.002.904.904 0 01-.213.122c-.07.022-.19.061-.356.117a.131.131 0 01-.048.006 7.315 7.315 0 00-.261-.009c-.255-.004-.51-.008-.742.061a.54.54 0 00-.161.078c-.234.166-.441.363-.536.625-.044.123-.063.276-.138.407a.013.013 0 000 .012.014.014 0 00.01.008c.004 0 .01-.003.017-.01a.721.721 0 00.063-.08.012.012 0 01.015.002l.06.061a.523.523 0 01-.188.17.054.054 0 01-.032.008.038.038 0 01-.027-.014c-.072-.091.081-.477.125-.582.126-.3.316-.542.571-.725a.3.3 0 01.143-.05.015.015 0 00.01-.006.014.014 0 00.003-.01l-.028-.347a.21.21 0 010-.04c.012-.11.025-.22.04-.327.045-.301.214-.581.422-.837a2.02 2.02 0 01.42-.359.051.051 0 00.02-.036l.028-.25a2.2 2.2 0 01.45-1.081c.287-.38.64-.656 1.057-.83.134-.056.29-.088.47-.097.103-.005.182.02.3.044a.034.034 0 00.03-.008L8.9.862c.064-.055.164-.12.297-.197a2.268 2.268 0 011.77-.229.137.137 0 00.083-.004c.972-.358 2.011-.146 2.726.612a.016.016 0 01.004.013.016.016 0 01-.007.011l-.286.184a.177.177 0 01-.093.028c-.511.01-.924.368-1.09.841-.027.076-.05.184-.07.324a.198.198 0 01-.015.058.022.022 0 01-.007.008.021.021 0 01-.028-.003l-.052-.057a.046.046 0 00-.019-.013c-.26-.09-.472.114-.571.334a.989.989 0 00.008.84c.03.066.091.155.185.265zm-3.97-2.038c.001 0 .003 0 .005-.002a.047.047 0 00.014-.016V1.82c-.001-.001-.003 0-.005.001a.047.047 0 00-.013.017v.001zm-.046.052l.005-.002v-.004l-.002-.001H7.72c0 .001 0 .002-.003.004v.002h.002zm-.026.048c.006.001.009 0 .009-.005l-.001-.003a.004.004 0 00-.005 0c-.001 0-.002 0-.002.002a.21.21 0 000 .006zm1.614.521l-.02-.007a.005.005 0 00-.006.002v.007l.024.005h.003a.004.004 0 00-.001-.007zm-.663.058a.037.037 0 00.014-.015.005.005 0 00-.006-.006.146.146 0 00-.015.017.005.005 0 00.004.005.005.005 0 00.003 0zm-.059.008c.002 0 .005 0 .006-.002a.005.005 0 00.002-.006.005.005 0 00-.005-.002c-.004 0-.005.003-.004.008v.001h.001zm-.475.277l-.01.01a.006.006 0 00.007.01.062.062 0 00.009-.013.005.005 0 000-.006.004.004 0 00-.006 0zm2.653.447c-.002-.002-.004-.003-.006-.002l-.003.001v.004l.001.003.003.002c.003 0 .005 0 .006-.003V3.25zm-3.017.046l.001-.003c0-.003-.002-.003-.005 0a.002.002 0 000 .003h.004zm3.07.136s0-.002-.003-.005a.07.07 0 00-.018-.019l-.006-.002.002.006a.071.071 0 00.018.019c.003.002.005.002.006.001zm.005.046l-.002-.003a.005.005 0 00-.006 0l-.002.003c0 .002 0 .004.002.005h.001c.005 0 .007-.001.007-.005z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M8.374.946c-.01.027-.034.033-.07.018a.146.146 0 01.07-.018z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M16.142 1.5a.601.601 0 01-.214-.095.438.438 0 00-.168-.074c-.1-.02-.202-.035-.305-.047a.157.157 0 00-.068.008l-.236.079a.012.012 0 00-.007.005.012.012 0 00-.002.008.013.013 0 00.011.011.696.696 0 01.537.331c.02.032.022.065.047.089a.026.026 0 01.007.012l.037.14v.008a.011.011 0 01-.018.005 1.15 1.15 0 00-.651-.292.042.042 0 01-.025-.012c-.005-.004-.009-.004-.012 0-.004.005-.012.008-.024.009a.189.189 0 01-.072-.004.035.035 0 00-.02-.003 5.638 5.638 0 00-.243.047 1.022 1.022 0 00-.627.487 1.532 1.532 0 00-.152.425c-.197-.132-.265-.31-.204-.534a.984.984 0 01.17-.32v-.002a.006.006 0 00-.002-.003l-.003-.002c-.069-.016-.145 0-.23.05a.46.46 0 00-.232.296.672.672 0 00.063.478.788.788 0 00.621.422.57.57 0 00.383-.09c.018-.013.05-.033.093-.058.216-.126.393-.088.53.113a.102.102 0 01-.044.005.027.027 0 01-.014-.007l-.057-.052a.028.028 0 00-.039 0l-.044.045a1.983 1.983 0 01-.105.162c-.376.489-1.122.451-1.597.175a2.823 2.823 0 01-.513-.405.042.042 0 00-.02-.01.11.11 0 00-.077.016c.002-.016 0-.028-.004-.034-.006-.01-.015-.009-.027.003a.091.091 0 00-.025.054c-.031-.014-.06-.006-.088.024a.703.703 0 00-.198.538c.015.266.2.537.404.706l.002.003v.004a.006.006 0 01-.006.003.825.825 0 01-.13-.031 1.548 1.548 0 01-.751-.515.846.846 0 01-.043-.656c.099-.291.432-.48.714-.562a.024.024 0 00.018-.023.829.829 0 01.283-.616c.233-.21.538-.305.84-.213.039.012.077.004.114-.023.11-.083.277-.24.42-.328.398-.24.838-.297 1.32-.167a1.4 1.4 0 01.683.416zm-1.915.019a1.546 1.546 0 00-.217.163h.002c.001 0 .003 0 .004-.002a3.23 3.23 0 01.217-.152 3.287 3.287 0 01.236-.132v-.001a1.54 1.54 0 00-.242.124z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M16.142 1.5c.082.07.147.158.197.264a.025.025 0 01-.01.032 1.465 1.465 0 00-.332.302c-.068.083-.145.187-.14.293.001.007.004.014.009.02.03.034.052.072.067.115-.044.138-.1.237-.08.403a.216.216 0 01-.028.112c-.176-.403-.536-.773-1.008-.765a.418.418 0 00-.326.145c-.056.066-.105.153-.187.203a.366.366 0 01-.367.012 1.53 1.53 0 01.152-.424c.135-.24.344-.402.627-.487.014-.004.095-.02.243-.047a.034.034 0 01.02.003c.011.004.035.006.072.003.012 0 .02-.003.024-.008.003-.004.007-.004.012 0 .007.007.015.011.025.012a1.15 1.15 0 01.658.294c.002 0 .005 0 .007-.002a.012.012 0 00.004-.006v-.007l-.037-.14a.026.026 0 00-.007-.012c-.025-.024-.027-.058-.047-.09a.696.696 0 00-.537-.33.013.013 0 01-.011-.011c0-.003 0-.006.002-.009a.012.012 0 01.007-.005l.236-.079a.157.157 0 01.068-.007c.103.012.205.028.306.047a.438.438 0 01.167.074.602.602 0 00.214.094z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M19.163 2.943a.468.468 0 01-.196-.042.709.709 0 01-.108-.074l-.045-.023c-.069-.06-.169-.096-.23-.13a.448.448 0 00-.123-.045.125.125 0 01-.022-.007.628.628 0 00-.079-.029 4.958 4.958 0 01-.154-.032.788.788 0 00-.157-.02 2.055 2.055 0 00-.18.002 1.11 1.11 0 00-.58.234.983.983 0 00-.202.25c-.084.137-.147.27-.19.398a.112.112 0 01-.077.078c-.294.1-.596.146-.906.14a1.915 1.915 0 00-.089-.601.217.217 0 00.029-.113c-.021-.165.035-.264.079-.403a1.802 1.802 0 011.331-.792l.001-.002V1.73l-.001-.002c-.211-.125-.41-.111-.648-.074a.036.036 0 01-.036-.018l-.091-.158a.033.033 0 01.02-.048c.355-.093.715-.07 1.06.06a2.35 2.35 0 00.192.068.01.01 0 01-.008.016.296.296 0 00-.264.15l.001.004.003.004a1.989 1.989 0 011.67 1.211z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M7.694 1.938v-.005a.004.004 0 01.009 0c0 .005-.003.007-.009.006z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M10.382 2.731a.092.092 0 00-.048-.009.03.03 0 00-.02.011l-.223.275a.133.133 0 00-.015.024.318.318 0 01-.04.06.29.29 0 00-.03.05l-.117.24a.095.095 0 00-.006.022.051.051 0 01-.006.018.336.336 0 00-.04.11l-.005.02c-.008.003-.01.013-.008.027l-.003.014a.045.045 0 00-.006.017l-.014.075a.11.11 0 00-.01.032l-.015.127v.018l-.002.012a.044.044 0 00-.006.023.022.022 0 00-.002.022l.004.206c.006.006.007.016.006.03l.005.016c0 .008 0 .014.005.02a.14.14 0 00.002.075c0 .006 0 .012.002.017.003.022.01.04.02.054l.002.022c0 .008.001.017.005.025 0 .009.002.018.007.028-.003.016 0 .028.01.036 0 .027.008.05.022.07a.031.031 0 00.002.023c0 .012.005.025.012.036l.002.005.07.148a.051.051 0 00.02.032.005.005 0 01.003.005l-.001.002-.002.002-.008.005a.01.01 0 01-.006 0 .01.01 0 01-.005-.001l-.046-.037a.025.025 0 00-.028-.003l-.42.243a.016.016 0 01-.01.002.016.016 0 01-.01-.005 1.785 1.785 0 01-.3-.47c-.071-.16-.088-.36-.108-.547a.652.652 0 01.01-.233.022.022 0 00-.005-.009l-.045-.048a1.15 1.15 0 01.38-.183.02.02 0 00.013-.016c.1-.643.69-1.192 1.332-1.272h.004c.002 0 .003.002.004.003a.009.009 0 01.002.004.01.01 0 010 .004.106.106 0 01-.02.034c-.12.152-.225.315-.314.49z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M9.306 2.466a.066.066 0 01-.023-.005.005.005 0 01-.001-.006s.001-.002.003-.002h.003l.02.007.002.001v.003a.004.004 0 01-.004.002zM8.64 2.51a.147.147 0 01.013-.013.005.005 0 01.006.006.037.037 0 01-.015.016h-.002a.005.005 0 01-.004-.006.005.005 0 01.002-.003zM8.585 2.524c-.001-.005 0-.008.004-.009a.005.005 0 01.005.003v.003s0 .002-.002.002a.008.008 0 01-.006.002l-.001-.001z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M18.814 2.804c.007.018.022.025.045.022.052.041.088.066.108.075a.468.468 0 00.196.042l.05.156a.013.013 0 01-.02.014c-.126-.081-.25-.158-.372-.23-.578-.342-1.426-.398-1.741.339-.09.208-.08.414-.05.647v.004a.011.011 0 01-.002.004.01.01 0 01-.003.003.01.01 0 01-.004 0c-.398.011-.705.1-.96.422l-.075-.143a.655.655 0 00-.11-.196l.038-.321c.31.006.612-.04.906-.14a.112.112 0 00.077-.077c.043-.129.106-.262.19-.4a.987.987 0 01.203-.249c.077-.063.17-.116.28-.16a1.11 1.11 0 01.3-.074c.025-.003.085-.003.18-.002.047.001.099.008.156.02l.154.033c.01.001.036.01.079.028a.122.122 0 00.022.007c.047.01.087.025.123.045.061.035.162.071.23.13z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M4.93 4.8a4.56 4.56 0 00-.364.517c-.03.05-.082.192.014.198l-.067.095a.008.008 0 01-.014-.003c-.056-.498.007-.98.188-1.449.114-.296.258-.557.43-.783.23-.302.51-.541.842-.718a.019.019 0 01.026.023 1.79 1.79 0 00-.12.705.037.037 0 01-.019.033 1.431 1.431 0 00-.356.267c-.3.315-.487.686-.56 1.116z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M10.382 2.731c-.175.362-.24.745-.193 1.148.024.206.093.4.207.583a1.83 1.83 0 00.975.776l.002.004-.001.004a.007.007 0 01-.003.003c-.115.054-.225.126-.355.174-.274.1-.557.137-.85.11-.572-.053-1.132-.403-1.279-.982a1.755 1.755 0 01-.019-.754.052.052 0 01.008-.019.36.36 0 01.107-.11l.045.048a.022.022 0 01.005.02.652.652 0 00-.01.222c.02.187.037.387.108.548.077.175.177.331.3.47a.016.016 0 00.02.002l.42-.243a.025.025 0 01.028.003l.046.037a.01.01 0 00.005.002.01.01 0 00.006-.001l.008-.005.002-.002v-.002a.005.005 0 00-.001-.005.051.051 0 01-.02-.032l-.071-.148-.002-.005c.003-.018 0-.03-.012-.036a.031.031 0 01-.002-.023l-.021-.07c-.01-.008-.014-.02-.011-.036l-.007-.028a.054.054 0 01-.005-.025l-.001-.022a.104.104 0 01-.02-.054l-.003-.017a.14.14 0 01-.002-.076.041.041 0 00-.005-.019l-.005-.017c.003-.02.001-.029-.006-.029l-.004-.206.002-.022a.061.061 0 00.007-.019l.001-.016v-.018l.015-.127c.008-.012.011-.023.01-.032l.014-.075a.05.05 0 00.006-.013.03.03 0 00.003-.018c-.002-.015 0-.024.008-.028a.025.025 0 00.004-.018.336.336 0 01.04-.111.05.05 0 00.007-.018.095.095 0 01.006-.022l.117-.24a.29.29 0 01.03-.05c.017-.021.03-.04.04-.06a.133.133 0 01.015-.024l.224-.275a.03.03 0 01.019-.01c.014-.003.03 0 .048.008z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M8.117 2.81a.062.062 0 01-.009.013.006.006 0 01-.007-.002.006.006 0 01-.001-.003l.001-.004a.235.235 0 01.01-.01.004.004 0 01.005 0 .005.005 0 010 .006zM18.858 2.826c-.023.003-.037-.004-.044-.022l.044.022z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M15.126 2.987a.42.42 0 01.017.396.738.738 0 01-.259.31 1.105 1.105 0 01-.252.134c-.421.155-.825.157-1.21.005a1.338 1.338 0 01-.78-.793.534.534 0 01-.026-.124.11.11 0 01.078-.016.042.042 0 01.02.01c.188.182.36.317.512.406.475.276 1.221.314 1.597-.175a1.974 1.974 0 00.105-.162l.044-.045a.028.028 0 01.038 0l.058.052a.027.027 0 00.014.006c.013.002.028 0 .044-.004zM12.56 2.939c-.046.537.166 1.015.656 1.26a.024.024 0 01.012.016.023.023 0 01-.003.019.587.587 0 01-.253.21.857.857 0 01-.885-.07c.034.043.074.089.12.136a1.242 1.242 0 00.955.403v.001l-.002.002c-.101.055-.209.094-.322.117-.332.066-.651.06-.957-.021a1.74 1.74 0 01-1.146-1.016l.368-.04a.025.025 0 01.02.006c.045.043.1.088.164.137.033.025.061.027.089.054a1.17 1.17 0 00.416.148.037.037 0 00.039-.023.035.035 0 00.002-.016l-.011-.143-.002-.008-.083-.234.056-.207c.2.248.45.42.75.516a.827.827 0 00.134.03.005.005 0 00.003-.002V4.21l-.002-.003c-.204-.169-.39-.44-.404-.706a.702.702 0 01.198-.538c.028-.03.057-.038.088-.024zM10.765 3.255c-.001.003-.003.004-.006.003a.007.007 0 01-.003-.002.007.007 0 01-.002-.003l.001-.004.003-.001c.002 0 .004 0 .006.002l.002.003-.001.002zM7.747 3.296a.002.002 0 01-.003 0 .002.002 0 010-.003c.002-.003.003-.003.004 0l-.001.003z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M19.744 4.571c-.037-.012-.058-.04-.062-.086a.065.065 0 00-.016-.038l-.156-.174a.012.012 0 00-.007-.004c-.006-.001-.013-.006-.021-.014-.257-.26-.546-.382-.903-.221a.024.024 0 00-.006.003l-.088.066a.048.048 0 00-.01.012c-.045.065-.082.116-.112.194a7.043 7.043 0 01-.156.39.837.837 0 01-.215.255.843.843 0 01-.3.144c-.33.094-.636.046-.92-.143-.18-.12-.282-.304-.306-.552l.093-.071a.013.013 0 01.01-.002.012.012 0 01.008.005.68.68 0 00.525.35c.207.026.408-.004.604-.096a.02.02 0 00.01-.024c-.084-.227-.132-.45-.042-.696.136-.373.519-.57.9-.536.352.032.663.281.87.579.145.21.245.43.3.659z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M10.8 3.422c.008.007.015.012.016.01.002-.001-.003-.008-.01-.015-.008-.007-.015-.012-.016-.01-.002.001.003.008.01.015z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M8.923 3.41l-.064.29c-.012.055.014.105-.039.151a3.41 3.41 0 00-.238.237c-.206.224-.265.554-.235.853-.18-.069-.223-.329-.195-.493a1.74 1.74 0 01.126-.383c.081-.184.201-.347.361-.489l.167-.14c.025-.02.063-.03.117-.027z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M10.822 3.478c0 .003-.002.005-.007.005-.003-.001-.003-.003-.003-.006l.002-.002a.005.005 0 01.006 0l.002.003zM9.824 3.58a.03.03 0 01-.003.017v-.004l.003-.014z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M7.109 4.765l-.087-.019c-.312-.211-.692-.143-.966.086a.029.029 0 01-.025.007 1.065 1.065 0 00-.28-.025.006.006 0 01-.003-.002v-.006c.21-.32.53-.473.903-.504a.024.024 0 00.02-.015 1.286 1.286 0 01.444-.579.006.006 0 01.005.004v.003a2.14 2.14 0 00-.011 1.05z\\\" fill=\\\"#081A2B\\\"></path><path d=\\\"M9.777 3.862l-.002.016v-.004l.001-.012zM16.062 4.303a2.154 2.154 0 00-.127.277.978.978 0 00-.003.51.006.006 0 01-.003.003.006.006 0 01-.003.001l-.004-.001a.695.695 0 01-.267-.455.713.713 0 01.037-.263c.043-.144.105-.282.185-.412a.64.64 0 01.027.084.322.322 0 00.082.113l.076.143z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M19.744 4.57c.053.234.06.47.019.709a.061.061 0 00.005.036c.029.061.078.153.148.275.172.298.2.623.083.976a1.692 1.692 0 00-.333-.824.08.08 0 01-.013-.075.791.791 0 00.038-.373c-.096-.425-.337-.872-.763-1.007a.276.276 0 00-.123-.014.076.076 0 00-.064.068c-.016.181-.03.347-.079.494a1.227 1.227 0 01-.38.567c-.317.266-.693.364-1.129.294a1.178 1.178 0 01-.786-.477.724.724 0 01-.129-.311c-.024-.2.052-.368.228-.505.024.248.126.432.306.552.284.19.59.237.92.143a.845.845 0 00.3-.144.835.835 0 00.215-.254c.015-.029.067-.159.156-.391.03-.078.067-.13.111-.194a.045.045 0 01.011-.012l.088-.066a.026.026 0 01.006-.004c.357-.16.646-.039.902.222.009.008.016.013.022.014.003 0 .006.002.007.004l.156.173c.01.011.015.025.016.039.004.045.025.074.062.086z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M9.786 4.19a.025.025 0 01-.005-.02.041.041 0 01.005.02zM15.648 5.033c-.15.048-.308.063-.486.081l-.045-.04a1.674 1.674 0 00.243-.53.007.007 0 01.004-.002l.004.001.002.003c.068.176.16.339.278.487z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M7.109 4.765c.053.107.1.219.137.334a.805.805 0 00.11.18c.091.123.187.236.288.338.027.028.093.026.095-.022a.007.007 0 01.012-.005c.01.011.016.02.016.027a.599.599 0 00.005.122l-.015-.002a.01.01 0 00-.01.015c.075.135.165.257.27.366a.106.106 0 00.027.02l.201.107c.15.079.297.203.421.287.016.01.034.019.053.024.14.04.273.101.4.186a2.93 2.93 0 01-.882-.043 1.462 1.462 0 01-.851-.52c-.246-.3-.391-.652-.434-1.053l.07-.38.087.019zM4.93 4.8c-.004.067-.013.172-.025.315a.123.123 0 01-.039.084c-.105.096-.2.201-.286.315-.096-.006-.044-.147-.014-.198.106-.176.227-.348.363-.516zM15.87 6.39a1.133 1.133 0 01.03-.333.074.074 0 000-.034.358.358 0 00-.108-.19 6.349 6.349 0 01-.156-.145c-.02-.019-.06-.042-.069-.056a10.02 10.02 0 00-.185-.187c-.025-.025-.049-.063-.076-.096a.613.613 0 01-.054-.075c-.03-.05-.06-.104-.09-.16.178-.018.337-.033.486-.08.137.157.241.26.313.31.254.175.458.296.616.495.082.103.11.212.083.328a.387.387 0 01-.3.274.829.829 0 01-.49-.051z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M15.117 5.074l.045.04c.03.056.06.11.09.16a.602.602 0 00.054.075c.027.034.05.071.076.096.122.122.184.184.185.187.008.014.05.038.07.057.043.042.095.09.155.145.054.05.09.113.108.19a.072.072 0 010 .034c-.027.108-.037.22-.03.332l-.199-.09a.007.007 0 00-.01.003c-.001.002-.002.004-.001.006l.003.004c.107.094.226.18.355.26a.172.172 0 00-.046.038.016.016 0 000 .019.54.54 0 00.08.086c.038.034.065.06.081.08a1.52 1.52 0 01.181.3c.083.14.142.283.18.43a.059.059 0 010 .02c-.002.023.013.034.016.065a.798.798 0 01-.222.673c-.07.074-.146.153-.234.226a.522.522 0 00-.11.127.013.013 0 01-.007.005.014.014 0 01-.009 0 .013.013 0 01-.008-.014c.01-.087.022-.184.033-.29a.668.668 0 00-.007-.251.665.665 0 00-.092-.205 9.836 9.836 0 01-.156-.208l-.119-.298a.054.054 0 00-.014-.02c-.18-.158-.261-.34-.44-.444a55.63 55.63 0 01-.283-.168 2.236 2.236 0 01-.187-.133 2.162 2.162 0 00-.25-.131.042.042 0 00-.031-.003.155.155 0 01-.121-.011c-.025-.013-.053-.013-.075-.027a.76.76 0 00-.195-.093l-.187-.1a.143.143 0 01-.044-.039l-.144-.18a.045.045 0 00-.016-.013c-.087-.043-.198-.048-.297-.057a.01.01 0 00-.01.007.01.01 0 00.002.006 5.74 5.74 0 00.171.06c.113.037.188.16.238.262a.034.034 0 00.014.014.316.316 0 00.068.032c.111.029.21.064.294.104.093.044.21.105.352.184.006.003.01.007.014.012a.115.115 0 00.008.01.09.09 0 00.057.03c.026.003.044.014.054.032a.022.022 0 00.017.012c.01.001.017.003.02.005.156.092.284.19.386.293.13.132.232.235.306.307.076.075.127.131.154.168.106.148.19.251.25.41.024.065.041.146.052.243.023.214.038.412.043.594.005.172-.026.41-.03.563-.015.548-.024.868-.028.963-.006.2-.017.468-.034.805-.014.29-.024.558-.031.805a.582.582 0 01-.012.131.023.023 0 000 .017c.008.02.006.034-.004.046a.017.017 0 00-.002.02c.011.016.011.033 0 .05a.018.018 0 000 .02.025.025 0 01.002.022.074.074 0 00-.005.028c.001.015 0 .089-.005.22-.002.04-.02.086-.008.12a.04.04 0 01-.002.029l-.012.07c-.044.27-.201.401-.472.394a.379.379 0 01-.122-.016.162.162 0 00-.057-.018.086.086 0 01-.023-.002 10.357 10.357 0 00-.47-.124.569.569 0 00-.238-.027 1.658 1.658 0 01-.299.049c-.008 0-.025 0-.053-.003a.44.44 0 01-.34-.21.01.01 0 00-.005 0 .01.01 0 00-.01.007c-.094.277-.037.511.17.703.005.005.014.008.026.009a.014.014 0 00-.001.008c0 .003.001.005.003.007.078.08.16.127.286.157.146.035.277.09.355.226.017.03.06.101.13.213.01.013.02.024.035.032a.645.645 0 01.174.146 7.516 7.516 0 01-.209-.08 2.35 2.35 0 00-.36-.113 1.04 1.04 0 00-.614.058c-.169.066-.35.13-.524.162a.366.366 0 01-.212-.032v-.336c0-.004-.002-.007-.003-.01a.027.027 0 00-.006-.01c-.397-.363-.706-.645-.992-1.003a.032.032 0 01-.007-.018.017.017 0 00-.01-.015c-.032-.015-.046-.067-.064-.09a3.33 3.33 0 01-.153-.225.045.045 0 01-.007-.02c-.001-.014-.021-.028-.032-.043a1.285 1.285 0 00-.417-.398c-.108-.063-.291-.13-.404-.21a1.348 1.348 0 01-.285-.283.943.943 0 01-.095-.134c-.013-.023-.04-.043-.052-.064a.026.026 0 010-.027c.075-.127.036-.272-.038-.395a4.051 4.051 0 00-.33-.464l-.094-.073a.112.112 0 01-.038-.025 11.407 11.407 0 01-.122-.179 1.352 1.352 0 00-.298-.288 1.732 1.732 0 00-.132-.098 1.604 1.604 0 01-.13-.1 4.677 4.677 0 00-.233-.186l-.38-.3a.014.014 0 00-.022.007l-.003.01a.033.033 0 00.015.038c.117.07.202.125.255.166.1.076.116.166.165.271.031.067.06.136.1.174.073.07.107.073.213.106.073.022.14.08.198.14.106.114.168.18.183.198a.095.095 0 00.02.018c.095.062.187.116.168.245a.042.042 0 01-.016.027.1.1 0 00-.036.047.636.636 0 01.08.23c.008.074-.006.18.01.262a.61.61 0 00.166.316.462.462 0 01.077.175l-.041.068a.144.144 0 01-.018.024c-.067.07-.1.148-.06.248a.069.069 0 01.004.019l.018.193a.009.009 0 00.008.008l.005-.001a.009.009 0 00.004-.004.254.254 0 00.028-.096.051.051 0 01.023-.041c.174-.111.345-.118.511-.02.088.05.21.147.367.287.245.22.426.473.545.761.006.014.008.03.005.045a.998.998 0 01-.072.248l-.114.25a.207.207 0 00-.014.042c-.031.15-.033.373-.083.534-.04.13-.103.257-.188.382-.062.092-.166.172-.243.247a.347.347 0 00-.108.18 2.625 2.625 0 00-.01.173c-.008.168.064.252.235.276a.025.025 0 01.017.01.026.026 0 01.004.01v.011l-.117.413a1.816 1.816 0 01-.033.423.044.044 0 01-.026.031.042.042 0 01-.04-.005l-.242-.172a.018.018 0 00-.008-.003.032.032 0 01-.023-.008.158.158 0 00-.032-.028 2.73 2.73 0 01-.213-.129 4.595 4.595 0 00-.212-.128 18.663 18.663 0 01-.73-.434 3.707 3.707 0 01-.085-.06.444.444 0 00-.171-.072c.004 0 .005-.008 0-.024a.82.82 0 01.175-.336.097.097 0 00.015-.024l.137-.298a2.624 2.624 0 00.208-.232c.072-.09.168-.162.265-.25.02-.02.081-.11.061-.15-.006-.015-.007-.026 0-.033.005-.008.005-.019 0-.031-.008-.016-.009-.029-.002-.04a.01.01 0 00.001-.004l-.004-.1a.023.023 0 01.007-.017l.127-.122a.019.019 0 00.004-.02.017.017 0 00-.003-.006l-.001-.001a.015.015 0 00-.012-.005.015.015 0 00-.011.005l-.133.144a.03.03 0 00-.008.022l.015.239c0 .004 0 .009-.002.013a.293.293 0 01-.094.12 14.65 14.65 0 00-.305.24.927.927 0 00-.215.236 2.781 2.781 0 00-.272.58.024.024 0 01-.03.005 12.054 12.054 0 01-1.145-.775.113.113 0 01-.02-.019.65.65 0 00-.245-.18 2.753 2.753 0 01-.144-.441 10.283 10.283 0 01-.219-1.106.008.008 0 00-.004-.003c-.004-.001-.006 0-.004.003l-.038-.338a.016.016 0 00-.01-.013.016.016 0 00-.01 0 .015.015 0 00-.007.004.376.376 0 01-.085.066.705.705 0 01-.274.1 1.26 1.26 0 01-.78-.152.059.059 0 01-.014-.012c-.037-.039-.085-.054-.126-.09a2.343 2.343 0 01-.456-.532 1.392 1.392 0 01-.126-.256 1.704 1.704 0 01-.083-.274 20.451 20.451 0 01-.117-.708 1.352 1.352 0 01-.028-.296.449.449 0 000-.103.072.072 0 00.01-.028c.007-.029.022-.038.046-.028l.002.01c-.002.043.018.09.024.12.074.401.13.724.277 1.07a1.704 1.704 0 00.229.393h.001l.141.132a.024.024 0 00.015.006l.013.001h.004a.007.007 0 00.003-.008l-.001-.003a1.853 1.853 0 01-.209-.272 13.739 13.739 0 00-.213-.372l.001-.006.004-.004a2.046 2.046 0 01.593-.007.41.41 0 00.15.186c.179.089.367.175.566.257.201.083.382.037.424-.205l.16.086a.03.03 0 00.013.004c.01 0 .022.003.035.008a.516.516 0 00.264.035c.024-.003.044.01.064-.002.027-.015.047-.022.062-.02.006 0 .011 0 .016-.003a.828.828 0 00.198-.135.785.785 0 00.21-.612c.266-.306.319-.745.166-1.115a3.85 3.85 0 00-.08-.184.025.025 0 01-.001-.018.024.024 0 01.01-.014l.327-.191a1.437 1.437 0 00.375-.573c.071-.206.112-.324.123-.352a1.33 1.33 0 01.524-.666c.106-.07.271-.148.362-.19.133-.063.289-.18.413-.262a.173.173 0 00.034-.029l.383-.43c.077-.086.163-.101.283-.097.188.007.336.01.444.005a2.5 2.5 0 001.256-.382c.126-.078.242-.151.348-.22.14-.09.33-.073.486-.073.658 0 1.255-.315 1.648-.84zm-5.175 2.46c.018-.035.024-.059.015-.07a5.6 5.6 0 00-.038-.057.03.03 0 00-.052.008l-.05.133a.018.018 0 00-.002.007l-.005.128a.046.046 0 00.015.036l.003.002a.02.02 0 00.034-.008c.02-.059.047-.119.08-.18zM9.587 8.88a2.905 2.905 0 00.38.103c.297.04.592.094.884.166a.78.78 0 00.13.016.864.864 0 00.213.143l.127.038c.206.066.4.114.584.146.285.048.536.046.803-.02a.44.44 0 00.09-.032.033.033 0 00.022-.006c.004-.005.008-.007.01-.006.003.001.005.003.006.005a.014.014 0 01.003.007v.007a.443.443 0 01-.157.093 1.61 1.61 0 01-.886.02.015.015 0 00-.019.01l-.103.367a.023.023 0 000 .01c0 .002 0 .005.002.008a.023.023 0 00.014.01c.204.055.415.08.634.076a2.941 2.941 0 00.49-.075c.07-.019.15-.05.244-.097a.295.295 0 00.177.106c.311.058.709-.13.956-.32.251-.194.467-.415.706-.64-.013.1-.013.192-.003.273.003.026-.01.041-.002.063a.158.158 0 01.007.044c.009.24-.02.467-.087.681-.09.294-.216.635-.376 1.023-.045.108-.105.205-.158.306a.066.066 0 00-.006.02c-.009.044-.04.077-.057.128v.003l.002.003.003.002.004-.001c.004-.002.009-.014.015-.035a.103.103 0 01.02-.04c.037-.04.052-.106.086-.155a3.034 3.034 0 00.419-.785 15.835 15.835 0 00.218-.693l.032-.053a.08.08 0 01.015-.018.353.353 0 00.112-.227c0-.007 0-.014-.002-.02a.395.395 0 01-.022-.13c0-.155-.004-.32-.014-.495a.123.123 0 01.03-.088l.163-.184a.04.04 0 01.004-.003l.251-.2a.15.15 0 01.03-.018.512.512 0 00.14-.101c.01-.01.015-.02.013-.03a.012.012 0 00-.02-.006l-.051.05a1.457 1.457 0 00-.464.377.48.48 0 01-.069.065h-.007a.014.014 0 01-.009-.012 1.136 1.136 0 00-.214-.59.736.736 0 00-.099-.104 3.355 3.355 0 00-.13-.11l-.227-.12a.012.012 0 00-.005-.002.135.135 0 01-.069-.025 3.711 3.711 0 00-.277-.09 7.545 7.545 0 00-1.504-.186 13.551 13.551 0 00-.554 0c-.025 0-.05-.009-.069.002a.018.018 0 01-.006.001l-.578.046-.005.002a.206.206 0 01-.052.014 6.7 6.7 0 00-.734.162c-.167.046-.317.1-.451.163-.23.106-.375.176-.435.207-.25.136-.518.308-.801.519a.02.02 0 00-.008.018.019.019 0 00.012.014l.14.052h.003c.025-.004.05.02.074.03.15.054.304.093.462.118zm-.432 2.308c.002.006.005.01.006.01a.006.006 0 00.006 0 .006.006 0 00.003-.005.076.076 0 00-.008-.012h-.006a.005.005 0 00-.002.003v.004zm.074.085a.068.068 0 00-.015-.022l-.002-.002h-.003l-.004.002a.006.006 0 00.001.008l.017.018.002.001h.003l.001-.003v-.002zm.028.03c0-.002-.003-.005-.006-.008a.006.006 0 00-.008 0 .005.005 0 000 .008.019.019 0 00.01.005h.001l.002-.001v-.004zm.04.063l.001.002.002.001.001.001h.001L9.3 11.37l-.002-.002-.001-.001h-.002zm4.608.838l-.025.016-.002.002v.003l.003.002h.003a.052.052 0 00.026-.018v-.004l-.003-.001h-.002zm-.33.298l.012-.018v-.004a.005.005 0 00-.003-.002h-.003a.005.005 0 00-.003.001.041.041 0 00-.01.02v.003l.002.002h.003l.002-.002zm-.014.04c-.004.002-.006.005-.006.01l.002.001h.002l.005-.008v-.003h-.004zm-3.789.14c-.002 0-.006.002-.01.006a.005.005 0 00-.001.006l.002.002h.003a.03.03 0 00.01-.002.006.006 0 00.002-.003.006.006 0 00-.002-.007.005.005 0 00-.004-.001z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M6.934 5.238a1.536 1.536 0 00.137.627.012.012 0 01-.014.01c-.2-.05-.365-.087-.495-.11a1.78 1.78 0 00-1.467.355c-.169.132-.326.32-.487.53l-.06-.06a.013.013 0 00-.015-.002.723.723 0 01-.064.079c-.006.008-.012.011-.016.01a.014.014 0 01-.01-.007.013.013 0 010-.012c.075-.131.094-.285.138-.407.095-.262.302-.459.536-.625a.54.54 0 01.16-.078c.233-.07.488-.065.743-.06.091 0 .178.004.26.008a.131.131 0 00.049-.006l.356-.118a.903.903 0 00.22-.124h.006l.006.004a.011.011 0 00.006.002c.006 0 .01-.006.01-.016z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M19.69 5.294a.791.791 0 01-.037.373.08.08 0 00.013.075c.176.224.287.499.333.824a.505.505 0 01-.186.32c-.168.134-.279.023-.33-.141a.07.07 0 01-.004-.024c.004-.179-.005-.297.013-.445l.048-.458c.02-.188-.109-.373-.263-.467a.011.011 0 01-.005-.012.01.01 0 01.003-.005.01.01 0 01.007-.003l.409-.037zM19.03 5.52c0-.002.001-.004.003-.005a.007.007 0 01.01.006c.021.155.013.305-.023.45-.1.398-.495.518-.862.488a.01.01 0 01-.005-.002.01.01 0 01-.003-.004.01.01 0 01-.001-.004v-.005a.867.867 0 01.304-.348c.15-.11.24-.177.271-.204.077-.065.159-.149.245-.252a.31.31 0 00.06-.12zM7.772 5.74l.165.22a.218.218 0 00.112.118.006.006 0 010 .006.034.034 0 00-.004.02c0 .006.006.011.015.014.09.025.197.095.305.144a.12.12 0 01.025.016c.13.108.21.169.238.184a3.642 3.642 0 00.383.153c.007.001.021.012.044.034a.024.024 0 00.006.004l.157.08a.239.239 0 00-.098.008 1.45 1.45 0 00-.401-.185.184.184 0 01-.053-.024c-.124-.084-.271-.208-.42-.287l-.202-.107a.106.106 0 01-.027-.02 1.76 1.76 0 01-.272-.372.01.01 0 01.012-.01l.015.003z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M16.018 6.572c.149.071.328.138.537.2.13.04.265.101.404.186.363.223.584.575.607 1.004.015.282-.096.53-.405.567a3.353 3.353 0 01-.219.011c-.248.008-.48.056-.634.27-.116.16-.14.342-.148.553-.025.62-.066 1.742-.124 3.366-.007.199-.03.308-.13.457-.176.262-.5.248-.763.153a7.472 7.472 0 01-.414-.16 1.29 1.29 0 00-.338-.113c-.27-.023-.543.099-.67.346-.012 0-.02-.004-.026-.008-.207-.192-.264-.427-.17-.703l.004-.005a.01.01 0 01.006-.002.011.011 0 01.01.005.44.44 0 00.388.208 1.66 1.66 0 00.3-.049.569.569 0 01.236.026c.263.066.42.107.471.124a.086.086 0 00.023.003.16.16 0 01.057.017c.02.01.06.015.122.016.27.008.428-.123.472-.393l.012-.07a.04.04 0 00.002-.029c-.012-.035.006-.08.008-.12a5.78 5.78 0 00.005-.22c0-.009.001-.018.005-.028a.025.025 0 00-.002-.022.018.018 0 010-.02.044.044 0 000-.05.017.017 0 01.002-.02c.01-.012.012-.027.004-.046a.023.023 0 010-.017.582.582 0 00.012-.131c.007-.248.017-.516.031-.806.017-.336.028-.604.034-.805.004-.094.013-.415.028-.962.004-.153.035-.391.03-.563a7.292 7.292 0 00-.043-.594 1.019 1.019 0 00-.052-.242c-.06-.16-.144-.263-.25-.411a1.586 1.586 0 00-.154-.168 39.063 39.063 0 01-.306-.308c-.102-.103-.23-.2-.386-.292a.062.062 0 00-.02-.005.022.022 0 01-.017-.012c-.01-.019-.028-.03-.054-.032a.09.09 0 01-.057-.03.115.115 0 01-.008-.01.042.042 0 00-.014-.013 6.925 6.925 0 00-.352-.183 1.625 1.625 0 00-.294-.104.319.319 0 01-.068-.032.033.033 0 01-.014-.015c-.05-.102-.125-.225-.238-.26a5.708 5.708 0 01-.171-.061.01.01 0 01-.001-.006.01.01 0 01.01-.007c.098.008.209.014.296.056a.045.045 0 01.016.014l.143.18a.143.143 0 00.046.038l.186.1.005.003a.76.76 0 01.19.09c.022.015.05.015.075.028.04.02.08.024.121.01a.042.042 0 01.03.003c.142.068.226.112.251.132.087.066.149.11.187.133l.284.168c.178.103.26.285.44.444a.054.054 0 01.013.02l.118.298.003.005.154.203a.665.665 0 01.092.204c.017.056.02.14.007.252-.011.106-.023.203-.033.29a.013.013 0 00.017.014.013.013 0 00.008-.005.522.522 0 01.11-.128c.087-.072.162-.152.233-.225a.798.798 0 00.222-.674c-.004-.03-.019-.041-.015-.064 0-.007 0-.014-.002-.021a1.644 1.644 0 00-.191-.454 1.52 1.52 0 00-.169-.275.771.771 0 00-.081-.08.54.54 0 01-.08-.087.016.016 0 010-.02.17.17 0 01.046-.037zm-.183 2.357a.004.004 0 00-.002-.003h-.003s-.002 0-.003.002l-.002.003c0 .002 0 .005.003.008l.002.002h.003l.002-.001.001-.003V8.93zM10.031 5.99l.44.05c.002 0 .004 0 .006.002a.015.015 0 01.005.006v.007a1.729 1.729 0 01-1.265.679l-.156-.081a.024.024 0 01-.006-.004c-.022-.022-.037-.033-.044-.034a3.639 3.639 0 01-.383-.154 2.358 2.358 0 01-.238-.183.12.12 0 00-.025-.016c-.108-.05-.214-.12-.305-.144-.01-.003-.014-.008-.015-.014 0-.007.001-.014.005-.02a.006.006 0 000-.007l-.002-.001a.218.218 0 01-.111-.117c.124.082.23.141.316.179a6.204 6.204 0 00.376.136l.055.003a4.032 4.032 0 00.341.067c.32.023.61-.05.871-.222a.5.5 0 00.135-.132z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M8.177 7.145a.873.873 0 01-.113.096.414.414 0 00-.062.05.697.697 0 01-.058.057.677.677 0 00-.082.089c-.072.09-.131.169-.179.236-.033.047-.08.091-.13.145a.57.57 0 01-.112.094 1.525 1.525 0 01-.308.153.119.119 0 01-.058.009.02.02 0 00-.017.004.201.201 0 00-.004.003.054.054 0 01-.023.01l-.204.025a.071.071 0 01-.024 0 .597.597 0 00-.082-.01.609.609 0 01-.093-.012 1.386 1.386 0 01-.466-.183.017.017 0 00-.022.005l-.165.23a.017.017 0 01-.027 0c-.236-.305-.521-.517-.924-.502-.366.014-.646.182-.84.506-.019.033-.035.073-.055.107a.036.036 0 01-.02.016 2.242 2.242 0 00-.597.314c-.08.058-.156.125-.227.199-.154-.755.038-1.548.597-2.073a.713.713 0 01.176-.125.01.01 0 01.009.014.555.555 0 00-.012.26c.032.16.185.238.337.226.144-.012.294-.132.385-.243.135-.164.227-.273.276-.326.35-.378.965-.585 1.445-.366.16.073.296.193.407.357a.66.66 0 01.105.471c-.043.286-.35.46-.554.183a.007.007 0 00-.008-.003.008.008 0 00-.006.007c0 .069.017.13.052.183a.49.49 0 00.541.22c.158-.032.288-.131.422-.233a.97.97 0 01.72-.193z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M3.605 9a.808.808 0 00-.004.44c.013.049.031.105.055.169.021.057.078.157.172.3.015.022.028.057.04.064.033.023.038.047.059.085a.026.026 0 00.006.008l.218.187a.013.013 0 01.003.005.013.013 0 01-.004.016h-.015a1.061 1.061 0 01-.215-.173 2.5 2.5 0 01-.634-1.315c.07-.075.146-.141.226-.2.183-.134.383-.239.598-.313a.035.035 0 00.019-.016c.02-.034.036-.075.055-.107.194-.324.474-.493.84-.506.403-.015.688.197.924.503a.017.017 0 00.021.004.017.017 0 00.006-.005l.165-.23a.017.017 0 01.022-.005c.141.088.297.15.466.183.033.006.064.01.093.012a.597.597 0 01.082.009.071.071 0 00.024 0l.204-.025a.055.055 0 00.023-.009l.004-.003a.021.021 0 01.017-.005c.014.003.034 0 .058-.009.102-.036.204-.086.308-.152a.569.569 0 00.112-.094c.05-.054.097-.098.13-.145a5.79 5.79 0 01.179-.237.677.677 0 01.082-.088.698.698 0 00.058-.057.413.413 0 01.062-.05.873.873 0 00.113-.096c.1-.002.195.007.284.026a90.404 90.404 0 01.387.087.007.007 0 010 .008.915.915 0 00-.507.346c-.095.13-.173.345-.247.475-.216.377-.577.614-1.008.633-.297.013-.55-.046-.78-.224a2.955 2.955 0 01-.234-.198c-.101-.097-.18-.142-.3-.228-.44-.315-1.072-.275-1.438.136a.493.493 0 00.042.725c.032.029.07.06.114.093a.064.064 0 01.025.063.753.753 0 01-.152.332c-.103.13-.303.096-.418-.004a.927.927 0 01-.309-.583.008.008 0 00-.012.005L3.604 9zM9.942 7.533c-.033.061-.06.121-.08.18a.021.021 0 01-.015.014.02.02 0 01-.02-.006l-.002-.002a.046.046 0 01-.015-.036l.005-.129.001-.006.05-.133a.03.03 0 01.053-.008l.038.056c.009.012.003.036-.015.07zM14.897 9.017a.81.81 0 00-.117-.495c-.306-.542-.934-.647-1.501-.696-.293-.026-.813-.07-1.003.188-.034.045-.051.108-.07.161a.022.022 0 01-.018.015 4.21 4.21 0 00-1.03.283l-.58.24a2.21 2.21 0 01-.991.168 2.499 2.499 0 01-.462-.118c-.025-.01-.05-.035-.074-.03h-.004l-.139-.052a.018.018 0 01-.012-.015.019.019 0 01.008-.018c.283-.21.55-.382.802-.518.059-.032.203-.1.434-.208.134-.062.284-.116.451-.162a6.7 6.7 0 01.735-.162.204.204 0 00.05-.014.02.02 0 01.006-.002l.578-.046c.002 0 .004 0 .006-.002.02-.01.044-.001.069-.002.198-.003.383-.003.554.001a7.547 7.547 0 011.505.187 3.745 3.745 0 01.277.09.135.135 0 00.068.024l.005.001.227.122a.74.74 0 01.23.214 1.136 1.136 0 01.216.595.014.014 0 00.014.006.479.479 0 00.069-.065c.056-.07.113-.13.17-.18a2.868 2.868 0 01.293-.197l.05-.05a.013.013 0 01.013-.004l.005.004a.012.012 0 01.003.006c.002.01-.002.02-.013.03a.51.51 0 01-.14.1.15.15 0 00-.03.02l-.251.2a.03.03 0 00-.004.002l-.163.184a.123.123 0 00-.03.088c.01.175.014.34.014.494a.4.4 0 00.021.13.046.046 0 01.003.021.354.354 0 01-.112.226.08.08 0 00-.015.019l-.032.053a3.028 3.028 0 01-.636 1.478c-.035.048-.05.114-.086.154a.103.103 0 00-.021.04c-.006.022-.011.034-.015.036h-.004l-.003-.001-.002-.003v-.004c.017-.05.048-.083.057-.128a.07.07 0 01.006-.02c.053-.1.113-.198.158-.305.16-.389.286-.73.376-1.023.067-.214.096-.441.087-.681a.151.151 0 00-.007-.044c-.008-.022.005-.038.002-.063a1.1 1.1 0 01.003-.272z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M14.897 9.017c-.239.224-.455.445-.706.639-.247.19-.645.378-.956.32a.295.295 0 01-.177-.107 1.013 1.013 0 01-.036-.37.04.04 0 00-.028-.041l-.157-.046c.066-.147.1-.274.104-.38.01-.244-.157-.413-.382-.479-.36-.105-.787-.027-1.113.157-.133.074-.207.178-.322.31a.018.018 0 00-.003.021l.027.05-.167.075a.78.78 0 01-.13-.017 8.323 8.323 0 00-.884-.165 2.904 2.904 0 01-.358-.093c.005-.011.008-.014.008-.01.332.016.652-.04.961-.167l.58-.24a4.21 4.21 0 011.03-.283.022.022 0 00.018-.015c.019-.054.036-.117.07-.162.19-.258.71-.213 1.003-.188.567.05 1.195.155 1.501.697a.81.81 0 01.117.494z\\\" fill=\\\"#081A2B\\\"></path><path d=\\\"M12.837 9.412a1.53 1.53 0 00-.72-.397 1.582 1.582 0 00-.97.076l-.026-.05a.017.017 0 01-.002-.01c0-.004.002-.008.005-.01.115-.133.189-.237.322-.312.326-.183.753-.26 1.113-.156.225.066.391.235.382.48a1.072 1.072 0 01-.104.379zM5.37 8.521a.917.917 0 00-.046.283.482.482 0 00-.2.108c-.133.12-.184.297-.185.475-.001.09 0 .15.002.182a.252.252 0 00-.134.107l-.076.124a2.57 2.57 0 01.017-.565c.05-.37.225-.665.622-.714z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M5.324 8.804c0-.096.015-.19.046-.283.177-.016.318.032.423.141.225.237.28.51.328.834l.003.02a.02.02 0 01-.032.007c-.277-.268-.302-.747-.768-.719z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M9.617 8.88c0-.003-.003 0-.008.01-.01 0-.018-.004-.022-.01a.041.041 0 01.03 0zM15.835 8.929a.013.013 0 01.001.008l-.001.003-.002.001h-.003l-.002-.002-.003-.008.002-.003.003-.002h.004l.002.003z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M12.838 9.412l.156.046a.04.04 0 01.028.041c-.012.116 0 .24.037.37a1.325 1.325 0 01-.245.098 2.936 2.936 0 01-.49.075 2.284 2.284 0 01-.642-.08.023.023 0 01-.009-.015v-.009l.105-.366a.016.016 0 01.018-.011c.297.076.592.07.885-.02a.443.443 0 00.158-.093.015.015 0 000-.008.014.014 0 00-.009-.011c-.002 0-.006 0-.01.005-.015-.004-.023-.002-.022.007a.442.442 0 01-.09.033 1.903 1.903 0 01-.803.019 4.297 4.297 0 01-.584-.146 3.239 3.239 0 00-.127-.038.862.862 0 01-.213-.143l.167-.075a1.582 1.582 0 011.531.185c.058.043.11.088.159.136z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M3.605 9c.02.042.047.119.085.23.113.342.426.622.798.655a.068.068 0 01.062.067v.091a.033.033 0 01-.013.026 2.18 2.18 0 01-.346.222c-.016.009-.035.003-.056-.017.008.002.013.002.015 0a.012.012 0 00.004-.004.012.012 0 00.001-.006v-.006a.015.015 0 00-.004-.005l-.218-.187a.025.025 0 01-.006-.008c-.021-.037-.026-.062-.06-.084-.01-.008-.024-.042-.04-.065a1.871 1.871 0 01-.171-.3 1.951 1.951 0 01-.055-.168A.808.808 0 013.605 9zM6.852 10.057a.86.86 0 00.408.115c.029 0 .056-.007.082-.022a.013.013 0 00.005-.018 1.368 1.368 0 00-.064-.118c-.16-.148-.325-.185-.534-.228a.374.374 0 01-.131-.065l-.108-.147a1.599 1.599 0 01-.135-.499.01.01 0 01.01-.006.01.01 0 01.005.002l.351.202a.018.018 0 00.01.003c.226-.023.399-.028.519-.016a.637.637 0 01.544.46c.052.19.007.458-.154.593-.296.249-.67.053-.808-.256zM8.842 9.503c-.003.03.012.053.044.07a.018.018 0 01.008.008.019.019 0 01.001.012l-.005.017a.029.029 0 00.004.023c.058.094.034.233.185.24a.08.08 0 01.035.01c.122.067.198.116.227.147l.21.213c.05.052.119.088.206.11.01.011.023.02.038.026a.083.083 0 01-.015.044.028.028 0 00-.004.02c.019.12.067.222.144.307.037.04.06.065.068.076a1.289 1.289 0 00.095.114h-.002v.001l-.003.001h-.003c-.091-.082-.154-.147-.209-.19a.248.248 0 01-.07-.12.012.012 0 00-.006-.007.015.015 0 00-.006-.002H9.78l-.078.027a.1.1 0 01.036-.047.042.042 0 00.016-.027c.02-.129-.073-.184-.167-.245a.093.093 0 01-.021-.018 10.447 10.447 0 00-.183-.197.5.5 0 00-.198-.142c-.106-.033-.14-.036-.213-.105-.04-.038-.069-.107-.1-.174-.05-.106-.065-.195-.165-.272a2.94 2.94 0 00-.255-.165.034.034 0 01-.014-.017.033.033 0 010-.021l.002-.01a.014.014 0 01.022-.007l.38.3zM12.82 9.434a.033.033 0 01-.022.007c0-.01.006-.012.022-.007z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M9.757 10.354a.43.43 0 01-.207-.11l-.209-.214c-.03-.031-.105-.08-.227-.147a.08.08 0 00-.035-.01c-.15-.007-.127-.146-.185-.24a.03.03 0 01-.004-.023l.005-.016a.019.019 0 000-.012.018.018 0 00-.009-.01c-.032-.016-.047-.04-.044-.07.08.06.157.123.232.187.037.032.08.065.131.1.056.038.1.071.132.098a.853.853 0 00.05.037 1.35 1.35 0 01.248.252l.122.178zM4.941 9.57l.03.474c-.025-.01-.04 0-.047.029-.006-.003-.01-.001-.013.005-.003.006-.002.014.003.023a.448.448 0 01-.002.13c.003.104.012.194.03.269a20.494 20.494 0 00.117.708c.01.061.038.153.083.273.036.094.078.18.126.257.13.207.283.385.456.533.04.035.09.05.126.089.004.005.009.009.015.012.234.133.494.183.779.151a.705.705 0 00.274-.099.382.382 0 00.085-.066.016.016 0 01.016-.004.016.016 0 01.011.012l.038.339a1.28 1.28 0 01-1.191-.166 1.876 1.876 0 01-.484-.476c-.153-.22-.27-.45-.353-.69a4.436 4.436 0 01-.14-.516 13.62 13.62 0 01-.13-.69 3.439 3.439 0 01-.039-.368c.028-.043.053-.085.076-.123a.252.252 0 01.134-.107zM6.852 10.057a1.45 1.45 0 01-.256-.294.657.657 0 01-.086-.19l.108.148a.374.374 0 00.131.065c.209.043.374.08.534.228.004.004.026.043.064.119a.013.013 0 01-.005.017.155.155 0 01-.082.022.86.86 0 01-.408-.115z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M4.972 10.055c.041.009.081.014.119.028.29.109.498.307.622.594.029.066.076.21.14.428a2.043 2.043 0 00-.592.007.012.012 0 00-.003.016c.047.076.117.199.211.366a1.857 1.857 0 00.21.275v.004a.007.007 0 01-.003.003.007.007 0 01-.004.001l-.013-.001a.024.024 0 01-.015-.006l-.14-.131-.002-.002a1.703 1.703 0 01-.229-.392c-.147-.346-.203-.669-.277-1.07-.006-.03-.026-.077-.024-.12z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M4.924 10.073a.073.073 0 01-.01.028c-.005-.01-.006-.017-.003-.023.003-.006.007-.008.013-.005z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M8.016 10.704a.785.785 0 01-.21.612.827.827 0 01-.198.135.027.027 0 01-.016.003c-.015-.002-.035.005-.063.02-.02.011-.039-.001-.063.002a.516.516 0 01-.264-.035.104.104 0 00-.035-.008.03.03 0 01-.013-.004l-.16-.087c-.071-.144-.146-.29-.225-.439a1.188 1.188 0 01-.092-.275 7.976 7.976 0 01-.069-.327l.004-.002h.004c.002 0 .003.001.004.003.182.383.567.72 1.022.61a.83.83 0 00.374-.208zM12.784 14.197a.827.827 0 00-.136.003c-.174.03-.258.135-.25.316a.126.126 0 00.008.096c.036.074.102.096.19.121a2.002 2.002 0 01-.257.512c-.15.214-.26.367-.335.457-.014.018-.021.029-.02.034l-.002.006a.01.01 0 01-.006.005c-.008.004-.013.008-.014.014a.01.01 0 000 .005.01.01 0 00.002.004.012.012 0 00.004.003 4.833 4.833 0 01.8-.135c.002.001.003.002.003.004v.005a5.868 5.868 0 01-.124.038.068.068 0 00-.029.014c-.02.02-.045.007-.07.016a3.586 3.586 0 01-.305.072.362.362 0 00-.104.017.665.665 0 01-.158.002.618.618 0 00-.092.009.028.028 0 00-.008.007 2.028 2.028 0 00-.053.085.736.736 0 00-.083.625c.127.403.607.657.998.72.235.039.461.037.677-.005.34-.065.579-.247.718-.545.114-.245.053-.48.03-.735.454.296.698.902.374 1.393-.305.462-.869.574-1.382.554a4.382 4.382 0 01-.995-.145c-.217-.06-.464-.137-.739-.233-.113-.04-.365-.146-.757-.32a9.03 9.03 0 01-1.426-.8.406.406 0 01-.08-.084 1.707 1.707 0 00-.228-.441.4.4 0 01-.062-.204l.053-.372a.443.443 0 01.17.072l.085.06c.233.145.477.29.731.434.065.036.136.08.212.128.114.073.185.116.213.129a.161.161 0 01.033.028.032.032 0 00.022.008c.003 0 .006.001.008.003l.241.172a.044.044 0 00.058-.007.044.044 0 00.01-.02 1.822 1.822 0 00.032-.422l.117-.413a.027.027 0 000-.01.025.025 0 00-.011-.018.024.024 0 00-.01-.004c-.17-.023-.243-.107-.236-.275.005-.102.008-.16.01-.174a.347.347 0 01.11-.179c.076-.075.18-.155.242-.247a1.45 1.45 0 00.188-.382c.05-.162.052-.383.083-.534a.203.203 0 01.014-.043l.114-.249a1 1 0 00.072-.248.085.085 0 00-.005-.045 2.078 2.078 0 00-.545-.76 2.523 2.523 0 00-.367-.289c-.166-.097-.337-.09-.51.02a.052.052 0 00-.024.042c-.001.026-.01.058-.028.096a.009.009 0 01-.004.004h-.005a.01.01 0 01-.005-.002.01.01 0 01-.003-.005l-.018-.193a.068.068 0 00-.004-.019c-.04-.1-.007-.179.06-.248a.144.144 0 00.018-.024l.04-.069a.035.035 0 00.027-.016c.005-.008.006-.018.002-.03a.23.23 0 00-.105-.128.61.61 0 01-.166-.316c-.016-.082-.002-.188-.01-.261a.636.636 0 00-.08-.231l.078-.026a.013.013 0 01.01 0l.003.003a.012.012 0 01.002.004c.02.06.043.1.071.121.055.043.118.108.209.19h.005l.001-.002h.002l.001.001c0 .003-.032-.035-.096-.115a2.282 2.282 0 00-.068-.076.583.583 0 01-.144-.307.027.027 0 01.004-.02.083.083 0 00.015-.044l.094.073a4.053 4.053 0 01.33.465c.074.121.113.267.038.394a.027.027 0 000 .027c.012.021.04.041.052.064.016.03.048.075.095.134.048.059.078.096.092.11.063.067.127.124.193.172.113.082.296.148.404.21.16.093.3.226.417.399.01.015.03.029.032.042 0 .008.003.015.007.021.07.11.122.184.153.225.018.022.032.075.064.09a.017.017 0 01.01.015c0 .006.003.012.007.018.286.358.595.64.992 1.003a.028.028 0 01.006.01.028.028 0 01.002.01l.002.336zm-1.437-1.533a1.32 1.32 0 00-.084-.168.407.407 0 01-.063-.269v-.007a.014.014 0 00-.005-.006.013.013 0 00-.014 0 .084.084 0 01-.096-.008 8.905 8.905 0 00-.438-.307c-.049-.031-.097-.074-.154-.115a.027.027 0 01-.005-.005l-.095-.122a.007.007 0 00-.004-.002h-.005a.007.007 0 00-.002.005v.004a.526.526 0 00.09.136 1.3 1.3 0 00.29.238c.116.07.192.13.252.237.033.058.114.075.16.121.01.011.018.024.024.037a.987.987 0 00.143.24h.004a.006.006 0 00.003-.005v-.004zm-.688 4.437l.187-.061a.01.01 0 01.006 0 .01.01 0 01.005.003.01.01 0 01.003.005.01.01 0 01-.002.006c-.043.08.04.095.042.147a.843.843 0 00.058.115.01.01 0 00.013-.003.01.01 0 00.002-.006c-.006-.238-.073-.408-.195-.651a.598.598 0 00-.042-.064c-.035-.05-.038-.103-.007-.16a.012.012 0 00-.012-.018.012.012 0 00-.007.004c-.034.039-.04.09-.02.151l.134.313c.016.036.023.086-.01.107a2.862 2.862 0 00-.16.107v.003l.002.002h.003zm1.116.496a.217.217 0 00-.032-.087.43.43 0 01-.002-.396 5.65 5.65 0 01.137-.255c.002-.004.003-.009.002-.014a.02.02 0 00-.007-.012.015.015 0 00-.005-.003h-.006l-.006.001a2.74 2.74 0 00-.193.28c-.066.127-.06.266.017.416.017.034.043.06.078.08a.012.012 0 00.012 0 .012.012 0 00.005-.01z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M4.833 11.884a2.219 2.219 0 00-.192-.409l-.2-.31a5.166 5.166 0 00-.212-.303c.104-.12.222-.22.354-.302a.02.02 0 01.02 0 .02.02 0 01.01.016 2.798 2.798 0 00.186.829.74.74 0 01.034.48z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M4.229 10.862c.075.1.146.2.212.303l.2.31c.077.128.14.264.192.41-.116.172-.247.24-.393.202-.128-.033-.23-.124-.306-.273-.153-.301-.095-.68.095-.952z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M9.163 11.184l.007.01a.006.006 0 01-.003.005l-.003.001h-.003a.033.033 0 01-.007-.013v-.002l.001-.002.001-.001h.006v.002zM9.223 11.278l-.017-.018a.006.006 0 01-.002-.004l.001-.004a.006.006 0 01.004-.002l.005.001c.003.003.009.01.015.023a.004.004 0 01-.001.004h-.005zM9.252 11.308a.018.018 0 01-.01-.005.005.005 0 01.001-.008.006.006 0 01.004-.001l.004.001c.004.004.005.007.006.009v.002l-.001.001-.002.001h-.002zM9.3 11.37h.002v.001H9.3l-.002-.002-.002-.002H9.3l.002.002zM10.035 11.632a.463.463 0 00-.077-.175.23.23 0 01.105.129c.004.012.003.022-.002.03a.035.035 0 01-.026.016zM11.337 12.67a.983.983 0 01-.139-.237.128.128 0 00-.025-.037c-.045-.046-.126-.063-.159-.12a.625.625 0 00-.251-.239 1.299 1.299 0 01-.29-.238.526.526 0 01-.091-.14l.002-.003a.006.006 0 01.005-.001c.001 0 .003 0 .004.002l.095.122a.028.028 0 00.005.005c.057.04.105.083.154.115.131.086.277.188.438.307.03.023.062.025.096.007a.015.015 0 01.007-.001c.002 0 .005 0 .006.002a.014.014 0 01.005.006.014.014 0 01.002.007.408.408 0 00.062.268 1.284 1.284 0 01.085.173.006.006 0 01-.003.004.006.006 0 01-.004 0 .007.007 0 01-.004-.001z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M13.91 12.21a.054.054 0 01-.026.018h-.003a.005.005 0 01-.002-.002v-.003l.001-.002.025-.016h.004l.001.003v.002z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M4.745 12.402c-.007.047.012.085.056.111.047.03.096.058.145.088a.059.059 0 01.02.02c.015.027.046.032.068.053.057.056.275.285.137.342-.27.113-.547.211-.83.296a1.758 1.758 0 01-.152-.968l.003-.003a.008.008 0 01.004 0 2 2 0 00.55.062z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M5.41 12.852c.07.112.123.226.161.341a.86.86 0 01.036.21c.005.08.013.162.023.243a.589.589 0 00-.177-.084c-.025-.044-.177-.073-.225-.081a.417.417 0 00-.443.181l-.084.1a.023.023 0 01-.017.008c-.003 0-.006 0-.01-.002a1.767 1.767 0 01-.334-.456c.284-.085.56-.183.831-.295.138-.058-.08-.286-.137-.342-.022-.022-.053-.027-.068-.054a.058.058 0 00-.02-.02l-.145-.088c-.044-.026-.063-.063-.056-.11a.49.49 0 01.252.055.94.94 0 01.196.17c.074.079.146.153.217.224z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M13.568 12.5a.04.04 0 01.01-.02s.001-.002.003-.002h.003l.002.003v.004l-.01.018-.003.002h-.003l-.002-.003V12.5z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M9.775 12.695a.027.027 0 01-.009.003h-.003a.005.005 0 01-.002-.003.005.005 0 01.001-.007c.004-.003.008-.005.01-.004h.004l.002.004v.004a.006.006 0 01-.003.003z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M5.63 13.646a3.955 3.955 0 01-.023-.244.86.86 0 00-.036-.21 1.63 1.63 0 00-.16-.34c.303.121.512.328.626.62a1.86 1.86 0 01.13.601.006.006 0 01-.004.003H6.16a.006.006 0 01-.003-.002c-.149-.173-.305-.284-.526-.428zM5.453 13.562a1.399 1.399 0 00-.668.1.417.417 0 01.443-.181c.049.008.2.037.225.081z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M8.927 15.291c-.008-.015-.019-.023-.033-.021a.052.052 0 00-.03.014.055.055 0 00-.016.03 4.911 4.911 0 00-.047.37.144.144 0 00.014.076l.258.517a5.316 5.316 0 01-.907-.806 3.746 3.746 0 01-.727-1.22c.096.04.178.101.245.181a.113.113 0 00.02.018 12.074 12.074 0 001.156.779.024.024 0 00.02-.008.927.927 0 01.487-.816c.138-.112.24-.192.304-.24a.293.293 0 00.094-.12.034.034 0 00.002-.014l-.015-.238a.03.03 0 01.008-.022l.133-.144a.015.015 0 01.012-.005.015.015 0 01.011.005.018.018 0 01.006.013.019.019 0 01-.006.014l-.127.121a.022.022 0 00-.007.018l.004.1a.01.01 0 01-.001.004c-.007.01-.006.024.001.04.006.012.006.022 0 .03s-.005.019.002.033c.02.04-.041.13-.062.15-.097.089-.193.16-.265.25a2.608 2.608 0 01-.208.232l-.137.3a.097.097 0 01-.015.023.82.82 0 00-.174.336z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M10.927 19.471c0 .026.007.05.021.073.168.28.335.595.482.849l.221.38-1.008.219a.01.01 0 00-.004.002.013.013 0 00-.003.004.012.012 0 00-.002.004v.005c.103.27.178.48.227.63a.097.097 0 01.005.046.018.018 0 01-.02.015.568.568 0 01-.114-.092 5.34 5.34 0 01-.148-.163.038.038 0 00-.018-.015.194.194 0 01-.086-.074c-.027-.041-.078-.124-.134-.172a2.534 2.534 0 01-.354-.374 5.564 5.564 0 00-.194-.246c-.072-.088-.13-.204-.199-.29a.195.195 0 00-.04-.039.868.868 0 01-.345-.408c-.04-.09-.107-.13-.19-.176a.098.098 0 01-.022-.018c-.075-.08-.107-.133-.187-.254a.125.125 0 00-.026-.028.918.918 0 01-.215-.258c-.036-.063-.08-.126-.126-.193a.116.116 0 00-.024-.026c-.07-.054-.199-.143-.278-.22-.178-.175-.274-.398-.398-.66a1.242 1.242 0 01-.091-.295l-.102-.423a.019.019 0 00-.018-.014H7.48a.06.06 0 01-.049-.027 6.486 6.486 0 01-.138-.223c-.04-.066-.084-.109-.131-.17a.172.172 0 00-.016-.017.374.374 0 01-.086-.105 1.149 1.149 0 00-.049-.098.064.064 0 01-.007-.02l-.05-.238a.103.103 0 00-.056-.072l-.308-.149a9.015 9.015 0 01-.107-.884c.154.19.403.21.572.38a.73.73 0 01.125.187c.06.144.122.287.185.43.004.01.01.02.02.034v-.02a1.092 1.092 0 00-.21-.516.466.466 0 00-.2-.246 15.664 15.664 0 00-.35-.19.06.06 0 01-.016-.012.359.359 0 00-.122-.086c-.002.004-.004.003-.009-.003a.021.021 0 01-.004-.01 3.443 3.443 0 01-.026-.5c.001-.257.069-.49.204-.697a.67.67 0 01.48-.313.021.021 0 01.024.018c0 .005.053.22.158.647.118.478.335.952.616 1.382.184.282.38.55.589.805l2.395 2.897a.063.063 0 01.013.027zm-3.625-4.085c.002-.002.003-.004.002-.006v-.002h-.002c-.002 0-.004.002-.005.006v.002l.002.001h.003zM5.888 14.29a.765.765 0 01-.515.137c-.046-.004-.13-.002-.17-.036a.64.64 0 01-.204-.377.258.258 0 01.212-.14c.24-.018.54.236.677.415z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M14.703 14.202c.003.142-.056.228-.177.255a.419.419 0 01-.194-.014c-.13-.034-.27-.104-.393-.135a1.005 1.005 0 00-.572.027c-.204.07-.41.14-.583-.028a.058.058 0 00-.038-.016c-.157-.004-.273.07-.348.225-.008-.181.076-.286.25-.316a.828.828 0 01.136-.003.366.366 0 00.212.032c.174-.032.355-.096.524-.162.2-.08.405-.104.615-.058.11.024.233.063.36.113.067.027.137.054.208.08z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M4.999 14.014a.64.64 0 00.204.377c.04.033.124.032.17.036.188.016.36-.03.515-.138a1.87 1.87 0 01.305.482c0 .002 0 .003-.002.003l-.003.002h-.003c-.299-.107-.57-.06-.87.03-.068.02-.1.005-.15-.037-.23-.186-.35-.492-.166-.755z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M14.508 15.046a.408.408 0 01-.246.03c-.288-.064-.56-.13-.849-.133-.174-.002-.303.022-.389.07-.164.094-.237.272-.21.47l.014.096a.034.034 0 01-.01.03l-.02.017-.002.002a.004.004 0 00.002.005h.022c.006 0 .012.003.017.006a.33.33 0 00.099.05.034.034 0 00.02 0 .12.12 0 00.055-.037c.214-.019.427.001.638.06.19.053.363.138.519.255.023.255.084.49-.03.735-.14.298-.378.48-.718.545a1.929 1.929 0 01-.677.005c-.39-.063-.871-.317-.998-.72a.735.735 0 01.084-.625c.03-.051.047-.08.052-.085a.03.03 0 01.02-.011.645.645 0 01.08-.005.662.662 0 00.158-.002.361.361 0 01.104-.017c.006 0 .011 0 .017-.002.158-.035.254-.058.289-.07.024-.009.05.004.07-.016a.068.068 0 01.028-.014 5.503 5.503 0 00.124-.038.006.006 0 000-.005.006.006 0 00-.002-.004h-.005a4.033 4.033 0 00-.335.075c-.11.03-.234.052-.376.068a.566.566 0 01-.085-.008.011.011 0 01-.004-.003.012.012 0 01-.002-.004v-.005c.001-.006.006-.01.014-.014a.012.012 0 00.006-.005.011.011 0 00.001-.007c0-.004.007-.015.021-.033.074-.09.186-.243.335-.457.11-.157.195-.328.257-.512a.524.524 0 01.168-.116.682.682 0 01.2-.047c.164-.017.292-.032.385-.046a.88.88 0 01.255.001c.239.035.46.103.663.203.14.07.224.165.241.318z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M14.508 15.045c.03.302-.187.337-.417.29-.316-.066-.684-.169-.936.092-.032.033-.08.108-.144.225a.12.12 0 01-.055.036.036.036 0 01-.02 0 .328.328 0 01-.099-.049.027.027 0 00-.016-.006h-.023l-.002-.002v-.003s0-.002.002-.002l.019-.018a.034.034 0 00.01-.013.034.034 0 000-.016c0-.012-.005-.043-.012-.096-.028-.198.045-.376.21-.47.085-.049.214-.072.388-.07.29.003.56.069.848.134a.408.408 0 00.247-.032zM5.726 15.589l.05.104.02.04c.083.162.14.335.17.519-.383-.218-.714-.642-.651-1.105 0-.002 0-.004.002-.005a.009.009 0 01.01-.002l.004.004c.085.173.217.322.395.445z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M7.175 15.752l-.12-.114c-.17-.17-.417-.191-.572-.381l.004-.039a.36.36 0 01.122.086c.004.005.01.009.015.012.118.062.235.125.352.19.086.048.152.13.199.246zM8.927 15.291c.004.015.003.023-.001.024l-.053.372a.4.4 0 00.062.204c.106.152.182.299.228.441a.17.17 0 01-.09-.055l-.258-.517a.144.144 0 01-.014-.077 4.9 4.9 0 01.047-.368.055.055 0 01.016-.03.051.051 0 01.03-.015c.014-.001.025.006.033.021zM7.302 15.386l-.002.002H7.3l-.002-.002v-.002c.001-.004.003-.006.005-.006h.001l.001.002c0 .002 0 .004-.002.006zM5.966 16.252a1.766 1.766 0 00-.17-.52c.004-.019-.003-.032-.02-.04l-.05-.104c.184-.034.373-.056.569-.066.004 0 .007 0 .01.002a.016.016 0 01.006.01c.07.262.094.527.07.795a.016.016 0 01-.016.015.806.806 0 01-.399-.092z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M11.651 20.773c.198.315.378.575.54.781.18.23.38.45.598.655.25.236.524.441.82.615.16.093.381.212.666.354.03.015.1.033.209.055-.276.12-.553.22-.832.298a5.697 5.697 0 01-1.031.193l-.348-.233a.035.035 0 01-.01-.009.223.223 0 00-.078-.052.035.035 0 01-.017-.017l-.005-.007a.03.03 0 00-.005-.007l-.115-.1a.094.094 0 01-.016-.018.827.827 0 00-.134-.17 3.473 3.473 0 01-.367-.345 4.207 4.207 0 01-.238-.327 13.75 13.75 0 01-.266-.486.179.179 0 00-.06-.067l-.314-.204a.033.033 0 01-.012-.015.287.287 0 00-.072-.086.098.098 0 01-.014-.015 1.76 1.76 0 00-.216-.252.023.023 0 00-.012-.013.083.083 0 00-.037-.009c-.003 0-.007 0-.01-.002a.016.016 0 01-.006-.008c-.003-.012-.011-.017-.023-.015a.025.025 0 01-.017-.004.46.46 0 00-.145-.058.133.133 0 01-.057-.024.257.257 0 01-.046-.044 1.073 1.073 0 00-.204-.293.208.208 0 01-.032-.042 3.141 3.141 0 01-.05-.098.678.678 0 00-.15-.186c-.108-.099-.225-.229-.292-.294a.48.48 0 01-.16-.328c-.006-.07-.089-.079-.137-.105a.095.095 0 01-.027-.021 5.708 5.708 0 00-.272-.291c-.1-.099-.168-.242-.267-.326a.919.919 0 00-.092-.073.075.075 0 01-.021-.019.182.182 0 00-.069-.058.046.046 0 01-.019-.016.132.132 0 00-.027-.032c-.073-.047-.087-.08-.129-.137a.01.01 0 00-.005-.004.01.01 0 00-.007 0 .01.01 0 00-.005.005.579.579 0 00.025.134c.137.375.285.858.436 1.284.063.178.109.305.139.384l.072.198c.015.045.032.099.05.162a8.036 8.036 0 00.072.234c.15.48.329.948.538 1.406.04.085.124.24.255.464.007.013.039.06.096.145.033.048.06.1.078.155-.867-.297-1.705-.836-2.237-1.593-.146-.208-.191-.401-.22-.685-.052-.499-.093-.841-.123-1.027l-.48-2.913a15.477 15.477 0 01-.127-1.026l.308.149a.104.104 0 01.056.072l.05.239a.064.064 0 00.007.02c.016.027.032.06.05.097a.374.374 0 00.085.105.17.17 0 01.016.017c.047.061.091.104.13.17.039.065.085.14.14.223a.059.059 0 00.048.027h.057a.019.019 0 01.018.014l.102.423c.022.115.053.214.091.295.124.262.22.486.398.66.08.077.207.166.278.22.01.008.017.016.024.026.046.068.09.13.126.193.059.103.13.189.215.258.01.008.019.018.026.028.08.12.112.175.187.254a.098.098 0 00.023.018c.082.046.15.086.188.176a.868.868 0 00.346.408c.015.011.029.024.04.04.068.085.127.201.2.289.08.097.144.179.193.246.1.136.257.293.354.375.056.047.107.13.134.17.024.037.053.061.087.075a.038.038 0 01.017.015c.004.006.054.061.149.164a.568.568 0 00.114.091.018.018 0 00.015-.006.02.02 0 00.004-.009.097.097 0 00-.005-.045 14.392 14.392 0 00-.227-.636l.002-.004a.01.01 0 01.003-.004.01.01 0 01.005-.002l1.007-.22z\\\" fill=\\\"#C2D1D3\\\"></path><path d=\\\"M7.384 16.288a.06.06 0 01.001-.02v.02z\\\" fill=\\\"#081A2B\\\"></path><path d=\\\"M10.655 17.093c.006-.006.059-.04.159-.104.033-.021.026-.071.01-.107a23.345 23.345 0 01-.134-.313c-.02-.062-.014-.112.02-.151a.012.012 0 01.007-.004c.003 0 .006 0 .009.002a.012.012 0 01.004.016c-.032.057-.03.11.006.16a.616.616 0 01.042.064c.122.243.189.413.195.65a.01.01 0 01-.008.01h-.007a.832.832 0 01-.058-.115c-.002-.053-.085-.067-.042-.147a.01.01 0 00-.006-.015.01.01 0 00-.006 0l-.187.061h-.003s-.002 0-.002-.002v-.005zM11.775 17.597l-.001.006a.011.011 0 01-.01.005l-.006-.001a.189.189 0 01-.078-.08c-.077-.15-.083-.29-.016-.416a2.705 2.705 0 01.192-.28.015.015 0 01.006-.002h.006l.005.004a.021.021 0 01.007.012c.001.005 0 .01-.002.014a5.65 5.65 0 00-.137.255.43.43 0 00.002.396c.022.042.033.07.032.087z\\\" fill=\\\"#798B98\\\"></path><path d=\\\"M12.62 23.724a5.976 5.976 0 01-2.843-.34.662.662 0 00-.078-.154 4.738 4.738 0 01-.096-.145 6.677 6.677 0 01-.255-.464 11.827 11.827 0 01-.61-1.64 2.973 2.973 0 00-.05-.162c-.03-.087-.055-.153-.072-.198-.03-.079-.076-.207-.14-.384-.15-.426-.298-.909-.436-1.284a.579.579 0 01-.024-.134.01.01 0 01.005-.004.01.01 0 01.007 0 .01.01 0 01.005.003c.042.057.056.09.129.137a.133.133 0 01.027.032.046.046 0 00.02.016c.024.01.047.03.068.058a.075.075 0 00.021.02c.016.009.047.033.092.072.099.084.166.227.267.326.071.069.162.166.272.29a.095.095 0 00.026.022c.05.026.132.035.138.105a.48.48 0 00.16.328c.067.065.184.195.292.293a.678.678 0 01.15.187l.05.098c.009.015.02.029.031.041.087.09.155.187.205.294.003.005.018.02.046.044.013.01.032.019.057.024a.458.458 0 01.145.058.025.025 0 00.017.004c.012-.002.02.003.023.015a.016.016 0 00.006.008.016.016 0 00.01.002c.01 0 .021.003.036.009a.023.023 0 01.013.013c.003.01.014.021.034.037.026.02.086.092.181.215l.014.015c.036.032.06.06.073.086.002.006.007.011.012.015l.313.204c.026.017.047.04.061.067.1.19.188.352.266.486.029.05.108.159.238.327.044.057.167.172.367.346a.823.823 0 01.134.169c.004.007.01.013.016.018l.115.1a.032.032 0 01.005.006l.005.008c.003.008.01.014.017.017a.224.224 0 01.078.052.035.035 0 00.01.009l.348.233zm-1.328-.046a.07.07 0 00-.005 0l-.002.003v.002c0 .001 0 .002.002.003h.002c.004 0 .006-.002.007-.004v-.003l-.002-.001h-.002z\\\" fill=\\\"#F9FBFC\\\"></path><path d=\\\"M14.484 23.233a1.067 1.067 0 01-.209-.055 11.96 11.96 0 01-.666-.354 4.512 4.512 0 01-.82-.615 5.988 5.988 0 01-.598-.655 9.283 9.283 0 01-.54-.781 285.15 285.15 0 01-.22-.38c-.148-.254-.315-.57-.483-.849a.137.137 0 01-.02-.072.039.039 0 01.02.013c.388.47.813.95 1.274 1.44.251.265.5.495.745.69.365.291.76.514 1.187.67a3.752 3.752 0 001.647.218.008.008 0 01.004.005v.006a2.344 2.344 0 01-.272.185c-.287.162-.583.317-.888.464-.02.01-.047.021-.081.034a.533.533 0 00-.08.036zM11.296 23.682c0 .003-.003.004-.007.005l-.002-.001-.002-.002v-.003l.002-.002.005-.001h.003l.001.002v.002z\\\" fill=\\\"#798B98\\\"></path></svg>\",\n  \"alibaba\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M24 14.014c-2.8 1.512-5.62 2.896-8.759 3.524-.7.139-1.476.139-2.187.043-.678-.085-1.017-.682-.776-1.31.23-.585.536-1.181.93-1.671.852-1.065 1.814-2.034 2.678-3.088a15.75 15.75 0 001.422-2.054c.306-.511.164-1.129-.372-1.384-.897-.437-1.859-.745-2.81-1.075-.11-.043-.274.074-.492.149.273.244.47.425.743.67-2.821.48-5.49 1.16-8.08 2.098-.012.053-.033.095-.023.117.383.585.208 1.032-.35 1.394a2.365 2.365 0 00-.568.522c1.706.5 3.226.213 4.68-.735-.087-.127-.175-.244-.262-.372.546.096.874.394.918.862.011.107-.054.213-.087.32-.077-.086-.175-.17-.24-.267-.045-.064-.056-.138-.088-.245-1.728 1.15-3.587 1.438-5.632.842 0 .404-.022.745.011 1.075.022.287-.098.415-.36.564-.591.362-1.204.735-1.696 1.214-.59.585-.371 1.299.427 1.597.907.34 1.859.35 2.81.234 1.126-.139 2.23-.32 3.456-.49-1.433.67-2.844 1.14-4.33 1.33-1.04.14-2.078.214-3.106-.084-1.476-.415-2.133-1.501-1.75-2.96.361-1.363 1.236-2.449 2.176-3.45 3.139-3.332 7.108-5.024 11.7-5.365 1.072-.074 2.155.064 3.16.511 1.411.639 2.002 1.99 1.313 3.354-.448.905-1.072 1.735-1.695 2.555-.612.809-1.301 1.554-1.946 2.331-.186.234-.361.48-.503.745-.274.5-.088.83.492.778 1.213-.118 2.45-.213 3.62-.511 1.716-.437 3.389-1.054 5.084-1.597.175-.043.339-.107.492-.17z\\\" fill=\\\"#FF6003\\\" fill-rule=\\\"evenodd\\\"></path></svg>\",\n  \"anthropic\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M13.827 3.52h3.603L24 20h-3.603l-6.57-16.48zm-7.258 0h3.767L16.906 20h-3.674l-1.343-3.461H5.017l-1.344 3.46H0L6.57 3.522zm4.132 9.959L8.453 7.687 6.205 13.48H10.7z\\\"></path></svg>\",\n  \"arcee\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M13.236 2.377L2.751 20.493H0L11.863 0l1.373 2.377zm3.554 6.156l-9.606 11.96H4.13L15.511 6.32l1.279 2.212zm6.908 11.96H14.05l8.406-2.151 1.242 2.15zm-3.42-5.922l-7.843 5.92H8.482l10.597-7.997 1.2 2.077z\\\" fill=\\\"#008C8C\\\"></path></svg>\",\n  \"baidu\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M8.859 11.735c1.017-1.71 4.059-3.083 6.202.286 1.579 2.284 4.284 4.397 4.284 4.397s2.027 1.601.73 4.684c-1.24 2.956-5.64 1.607-6.005 1.49l-.024-.009s-1.746-.568-3.776-.112c-2.026.458-3.773.286-3.773.286l-.045-.001c-.328-.01-2.38-.187-3.001-2.968-.675-3.028 2.365-4.687 2.592-4.968.226-.288 1.802-1.37 2.816-3.085zm.986 1.738v2.032h-1.64s-1.64.138-2.213 2.014c-.2 1.252.177 1.99.242 2.148.067.157.596 1.073 1.927 1.342h3.078v-7.514l-1.394-.022zm3.588 2.191l-1.44.024v3.956s.064.985 1.44 1.344h3.541v-5.3h-1.528v3.979h-1.46s-.466-.068-.553-.447v-3.556zM9.82 16.715v3.06H8.58s-.863-.045-1.126-1.049c-.136-.445.02-.959.088-1.16.063-.203.353-.671.951-.85H9.82zm9.525-9.036c2.086 0 2.646 2.06 2.646 2.742 0 .688.284 3.597-2.309 3.655-2.595.057-2.704-1.77-2.704-3.08 0-1.374.277-3.317 2.367-3.317zM4.24 6.08c1.523-.135 2.645 1.55 2.762 2.513.07.625.393 3.486-1.975 4-2.364.515-3.244-2.249-2.984-3.544 0 0 .28-2.797 2.197-2.969zm8.847-1.483c.14-1.31 1.69-3.316 2.931-3.028 1.236.285 2.367 1.944 2.137 3.37-.224 1.428-1.345 3.313-3.095 3.082-1.748-.226-2.143-1.823-1.973-3.424zM9.425 1c1.307 0 2.364 1.519 2.364 3.398 0 1.879-1.057 3.4-2.364 3.4s-2.367-1.521-2.367-3.4C7.058 2.518 8.118 1 9.425 1z\\\" fill=\\\"#2932E1\\\" fill-rule=\\\"nonzero\\\"></path></svg>\",\n  \"bedrock\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><defs><linearGradient id=\\\"lobe-icons-bedrock-_R_0_\\\" x1=\\\"80%\\\" x2=\\\"20%\\\" y1=\\\"20%\\\" y2=\\\"80%\\\"><stop offset=\\\"0%\\\" stop-color=\\\"#6350FB\\\"></stop><stop offset=\\\"50%\\\" stop-color=\\\"#3D8FFF\\\"></stop><stop offset=\\\"100%\\\" stop-color=\\\"#9AD8F8\\\"></stop></linearGradient></defs><path d=\\\"M13.05 15.513h3.08c.214 0 .389.177.389.394v1.82a1.704 1.704 0 011.296 1.661c0 .943-.755 1.708-1.685 1.708-.931 0-1.686-.765-1.686-1.708 0-.807.554-1.484 1.297-1.662v-1.425h-2.69v4.663a.395.395 0 01-.188.338l-2.69 1.641a.385.385 0 01-.405-.002l-4.926-3.086a.395.395 0 01-.185-.336V16.3L2.196 14.87A.395.395 0 012 14.555L2 14.528V9.406c0-.14.073-.27.192-.34l2.465-1.462V4.448c0-.129.062-.249.165-.322l.021-.014L9.77 1.058a.385.385 0 01.407 0l2.69 1.675a.395.395 0 01.185.336V7.6h3.856V5.683a1.704 1.704 0 01-1.296-1.662c0-.943.755-1.708 1.685-1.708.931 0 1.685.765 1.685 1.708 0 .807-.553 1.484-1.296 1.662v2.311a.391.391 0 01-.389.394h-4.245v1.806h6.624a1.69 1.69 0 011.64-1.313c.93 0 1.685.764 1.685 1.707 0 .943-.754 1.708-1.685 1.708a1.69 1.69 0 01-1.64-1.314H13.05v1.937h4.953l.915 1.18a1.66 1.66 0 01.84-.227c.931 0 1.685.764 1.685 1.707 0 .943-.754 1.708-1.685 1.708-.93 0-1.685-.765-1.685-1.708 0-.346.102-.668.276-.937l-.724-.935H13.05v1.806zM9.973 1.856L7.93 3.122V6.09h-.778V3.604L5.435 4.669v2.945l2.11 1.36L9.712 7.61V5.334h.778V7.83c0 .136-.07.263-.184.335L7.963 9.638v2.081l1.422 1.009-.446.646-1.406-.998-1.53 1.005-.423-.66 1.605-1.055v-1.99L5.038 8.29l-2.26 1.34v1.676l1.972-1.189.398.677-2.37 1.429V14.3l2.166 1.258 2.27-1.368.397.677-2.176 1.311V19.3l1.876 1.175 2.365-1.426.398.678-2.017 1.216 1.918 1.201 2.298-1.403v-5.78l-4.758 2.893-.4-.675 5.158-3.136V3.289L9.972 1.856zM16.13 18.47a.913.913 0 00-.908.92c0 .507.406.918.908.918a.913.913 0 00.907-.919.913.913 0 00-.907-.92zm3.63-3.81a.913.913 0 00-.908.92c0 .508.406.92.907.92a.913.913 0 00.908-.92.913.913 0 00-.908-.92zm1.555-4.99a.913.913 0 00-.908.92c0 .507.407.918.908.918a.913.913 0 00.907-.919.913.913 0 00-.907-.92zM17.296 3.1a.913.913 0 00-.907.92c0 .508.406.92.907.92a.913.913 0 00.908-.92.913.913 0 00-.908-.92z\\\" fill=\\\"url(#lobe-icons-bedrock-_R_0_)\\\" fill-rule=\\\"nonzero\\\"></path></svg>\",\n  \"bfl\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M17.113 10.248H14.56l-2.553-3.616-7.963 11.27h2.558l5.405-7.654h2.552l-5.404 7.653h2.565l5.392-7.653L24 20 19.97 20v-2.091l-2.857-4.044-2.842 4.037V20H0L12.008 3l5.105 7.249z\\\"></path></svg>\",\n  \"bytedance\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M14.944 18.587l-1.704-.445V10.01l1.824-.462c1-.254 1.84-.461 1.88-.453.032 0 .056 2.235.056 4.972v4.973l-.176-.008c-.104 0-.952-.207-1.88-.446z\\\" fill=\\\"#00C8D2\\\" fill-rule=\\\"nonzero\\\"></path><path d=\\\"M7 16.542c0-2.736.024-4.98.064-4.98.032-.008.872.2 1.88.454l1.816.461-.016 4.05-.024 4.049-1.632.422c-.896.23-1.736.445-1.856.469L7 21.523v-4.98z\\\" fill=\\\"#3C8CFF\\\" fill-rule=\\\"nonzero\\\"></path><path d=\\\"M19.24 12.477c0-9.03.008-9.515.144-9.475.072.024.784.207 1.576.406.792.207 1.576.405 1.744.445l.296.08-.016 8.56-.024 8.568-1.624.414c-.888.23-1.728.437-1.856.47l-.24.055v-9.523z\\\" fill=\\\"#78E6DC\\\" fill-rule=\\\"nonzero\\\"></path><path d=\\\"M1 12.509c0-4.678.024-8.505.064-8.505.032 0 .872.207 1.872.454l1.824.461v7.582c0 4.16-.016 7.574-.032 7.574-.024 0-.872.215-1.88.47L1 21.013v-8.505z\\\" fill=\\\"#325AB4\\\"></path></svg>\",\n  \"claude\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z\\\" fill=\\\"#D97757\\\" fill-rule=\\\"nonzero\\\"></path></svg>\",\n  \"cohere\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path clip-rule=\\\"evenodd\\\" d=\\\"M8.128 14.099c.592 0 1.77-.033 3.398-.703 1.897-.781 5.672-2.2 8.395-3.656 1.905-1.018 2.74-2.366 2.74-4.18A4.56 4.56 0 0018.1 1H7.549A6.55 6.55 0 001 7.55c0 3.617 2.745 6.549 7.128 6.549z\\\" fill=\\\"#39594D\\\" fill-rule=\\\"evenodd\\\"></path><path clip-rule=\\\"evenodd\\\" d=\\\"M9.912 18.61a4.387 4.387 0 012.705-4.052l3.323-1.38c3.361-1.394 7.06 1.076 7.06 4.715a5.104 5.104 0 01-5.105 5.104l-3.597-.001a4.386 4.386 0 01-4.386-4.387z\\\" fill=\\\"#D18EE2\\\" fill-rule=\\\"evenodd\\\"></path><path d=\\\"M4.776 14.962A3.775 3.775 0 001 18.738v.489a3.776 3.776 0 007.551 0v-.49a3.775 3.775 0 00-3.775-3.775z\\\" fill=\\\"#FF7759\\\"></path></svg>\",\n  \"deepseek\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z\\\" fill=\\\"#4D6BFE\\\"></path></svg>\",\n  \"fishaudio\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M23.556 12.189c.244 0 .444.126.444.28v.951c0 .154-.2.28-.444.28s-.444-.126-.444-.28v-.952c0-.153.2-.279.444-.279zm-1.764.372c.244 0 .444.126.444.28v2.095c0 .153-.2.279-.444.279-.245 0-.444-.126-.444-.28V12.84c0-.153.2-.28.444-.28zm-1.765.434c.244 0 .444.125.444.279v2.355c0 .154-.2.28-.444.28s-.444-.126-.444-.28v-2.355c0-.154.2-.28.444-.28zm-1.764.359c.244 0 .444.125.444.279v2.33c0 .153-.2.279-.444.279s-.444-.126-.444-.28v-2.33c0-.153.2-.278.444-.278zm-1.765.316c.245 0 .444.126.444.28v2.017c0 .154-.2.28-.444.28s-.444-.126-.444-.28V13.95c0-.154.2-.28.444-.28zm-1.755 1.287c.244 0 .444.125.444.28v.64c0 .153-.2.278-.444.278s-.444-.125-.444-.279v-.64c0-.154.2-.28.444-.28z\\\" opacity=\\\".35\\\"></path><path d=\\\"M23.556 9.63c.244 0 .444.125.444.279v1.575c0 .154-.2.28-.444.28s-.444-.126-.444-.28V9.909c0-.154.2-.28.444-.28zm-1.764-1.058c.244 0 .444.125.444.28v2.81c0 .153-.2.278-.444.278-.245 0-.444-.125-.444-.279v-2.81c0-.154.2-.28.444-.28zm-1.765-.398c.244 0 .444.126.444.28v3.667c0 .153-.2.28-.444.28s-.444-.127-.444-.28V8.453c0-.153.2-.28.444-.28zM18.263 8c.244 0 .444.126.444.28v4.29c0 .154-.2.28-.444.28s-.444-.126-.444-.28V8.28c0-.154.2-.28.444-.28zm-1.765.109c.245 0 .444.126.444.28v4.355c0 .154-.2.28-.444.28s-.444-.126-.444-.28V8.388c0-.153.2-.28.444-.28zm-1.755.273c.244 0 .444.125.444.28v5.434c0 .153-.2.28-.444.28s-.444-.126-.444-.28V8.66c0-.154.2-.28.444-.28zm-1.801.463c.244 0 .444.125.444.279v6.162c0 .154-.2.28-.444.28s-.444-.126-.444-.28V9.124c0-.154.2-.28.444-.28zm-1.764.784c.244 0 .444.126.444.28v5.928c0 .154-.2.28-.444.28-.245 0-.444-.126-.444-.28V9.909c0-.154.2-.28.444-.28zm-1.765 1.022c.245 0 .444.126.444.28v5.161c0 .154-.2.28-.444.28s-.444-.126-.444-.28V10.93c0-.154.2-.28.444-.28zm-1.764.706c.244 0 .444.126.444.28v5.084c0 .153-.2.279-.444.279s-.444-.126-.444-.28v-5.083c0-.154.2-.28.444-.28zm-1.756.585c.245 0 .444.126.444.28v2.705c0 .154-.2.28-.444.28s-.444-.126-.444-.28v-2.706c0-.153.2-.279.444-.279zM4.076 9.304c.244 0 .444.126.444.28v3.771c0 .154-.2.28-.444.28s-.444-.126-.444-.28V9.584c0-.154.2-.28.444-.28zm-1.814.247c.244 0 .443.126.443.28v1.16c0 .153-.2.279-.443.279-.245 0-.444-.126-.444-.28V9.83c0-.153.2-.279.444-.279zM.444 9.395c.244 0 .444.126.444.28v.523c0 .153-.2.279-.444.279S0 10.351 0 10.197v-.522c0-.154.2-.28.444-.28zm5.45-.442c.244 0 .443.126.443.28v.392c0 .154-.2.28-.444.28s-.444-.126-.444-.28v-.393c0-.154.2-.28.444-.28z\\\"></path></svg>\",\n  \"gemini\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z\\\" fill=\\\"#3186FF\\\"></path><path d=\\\"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z\\\" fill=\\\"url(#lobe-icons-gemini-0-_R_0_)\\\"></path><path d=\\\"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z\\\" fill=\\\"url(#lobe-icons-gemini-1-_R_0_)\\\"></path><path d=\\\"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z\\\" fill=\\\"url(#lobe-icons-gemini-2-_R_0_)\\\"></path><defs><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-gemini-0-_R_0_\\\" x1=\\\"7\\\" x2=\\\"11\\\" y1=\\\"15.5\\\" y2=\\\"12\\\"><stop stop-color=\\\"#08B962\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"#08B962\\\" stop-opacity=\\\"0\\\"></stop></linearGradient><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-gemini-1-_R_0_\\\" x1=\\\"8\\\" x2=\\\"11.5\\\" y1=\\\"5.5\\\" y2=\\\"11\\\"><stop stop-color=\\\"#F94543\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"#F94543\\\" stop-opacity=\\\"0\\\"></stop></linearGradient><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-gemini-2-_R_0_\\\" x1=\\\"3.5\\\" x2=\\\"17.5\\\" y1=\\\"13.5\\\" y2=\\\"12\\\"><stop stop-color=\\\"#FABC12\\\"></stop><stop offset=\\\".46\\\" stop-color=\\\"#FABC12\\\" stop-opacity=\\\"0\\\"></stop></linearGradient></defs></svg>\",\n  \"gemma\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><defs><linearGradient id=\\\"lobe-icons-gemma-_R_0_\\\" x1=\\\"24.419%\\\" x2=\\\"75.194%\\\" y1=\\\"75.581%\\\" y2=\\\"25.194%\\\"><stop offset=\\\"0%\\\" stop-color=\\\"#446EFF\\\"></stop><stop offset=\\\"36.661%\\\" stop-color=\\\"#2E96FF\\\"></stop><stop offset=\\\"83.221%\\\" stop-color=\\\"#B1C5FF\\\"></stop></linearGradient></defs><path d=\\\"M12.34 5.953a8.233 8.233 0 01-.247-1.125V3.72a8.25 8.25 0 015.562 2.232H12.34zm-.69 0c.113-.373.199-.755.257-1.145V3.72a8.25 8.25 0 00-5.562 2.232h5.304zm-5.433.187h5.373a7.98 7.98 0 01-.267.696 8.41 8.41 0 01-1.76 2.65L6.216 6.14zm-.264-.187H2.977v.187h2.915a8.436 8.436 0 00-2.357 5.767H0v.186h3.535a8.436 8.436 0 002.357 5.767H2.977v.186h2.976v2.977h.187v-2.915a8.436 8.436 0 005.767 2.357V24h.186v-3.535a8.436 8.436 0 005.767-2.357v2.915h.186v-2.977h2.977v-.186h-2.915a8.436 8.436 0 002.357-5.767H24v-.186h-3.535a8.436 8.436 0 00-2.357-5.767h2.915v-.187h-2.977V2.977h-.186v2.915a8.436 8.436 0 00-5.767-2.357V0h-.186v3.535A8.436 8.436 0 006.14 5.892V2.977h-.187v2.976zm6.14 14.326a8.25 8.25 0 005.562-2.233H12.34c-.108.367-.19.743-.247 1.126v1.107zm-.186-1.087a8.015 8.015 0 00-.258-1.146H6.345a8.25 8.25 0 005.562 2.233v-1.087zm-8.186-7.285h1.107a8.23 8.23 0 001.125-.247V6.345a8.25 8.25 0 00-2.232 5.562zm1.087.186H3.72a8.25 8.25 0 002.232 5.562v-5.304a8.012 8.012 0 00-1.145-.258zm15.47-.186a8.25 8.25 0 00-2.232-5.562v5.315c.367.108.743.19 1.126.247h1.107zm-1.086.186c-.39.058-.772.144-1.146.258v5.304a8.25 8.25 0 002.233-5.562h-1.087zm-1.332 5.69V12.41a7.97 7.97 0 00-.696.267 8.409 8.409 0 00-2.65 1.76l3.346 3.346zm0-6.18v-5.45l-.012-.013h-5.451c.076.235.162.468.26.696a8.698 8.698 0 001.819 2.688 8.698 8.698 0 002.688 1.82c.228.097.46.183.696.259zM6.14 17.848V12.41c.235.078.468.167.696.267a8.403 8.403 0 012.688 1.799 8.404 8.404 0 011.799 2.688c.1.228.19.46.267.696H6.152l-.012-.012zm0-6.245V6.326l3.29 3.29a8.716 8.716 0 01-2.594 1.728 8.14 8.14 0 01-.696.259zm6.257 6.257h5.277l-3.29-3.29a8.716 8.716 0 00-1.728 2.594 8.135 8.135 0 00-.259.696zm-2.347-7.81a9.435 9.435 0 01-2.88 1.96 9.14 9.14 0 012.88 1.94 9.14 9.14 0 011.94 2.88 9.435 9.435 0 011.96-2.88 9.14 9.14 0 012.88-1.94 9.435 9.435 0 01-2.88-1.96 9.434 9.434 0 01-1.96-2.88 9.14 9.14 0 01-1.94 2.88z\\\" fill=\\\"url(#lobe-icons-gemma-_R_0_)\\\" fill-rule=\\\"evenodd\\\"></path></svg>\",\n  \"google\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M23 12.245c0-.905-.075-1.565-.236-2.25h-10.54v4.083h6.186c-.124 1.014-.797 2.542-2.294 3.569l-.021.136 3.332 2.53.23.022C21.779 18.417 23 15.593 23 12.245z\\\" fill=\\\"#4285F4\\\"></path><path d=\\\"M12.225 23c3.03 0 5.574-.978 7.433-2.665l-3.542-2.688c-.948.648-2.22 1.1-3.891 1.1a6.745 6.745 0 01-6.386-4.572l-.132.011-3.465 2.628-.045.124C4.043 20.531 7.835 23 12.225 23z\\\" fill=\\\"#34A853\\\"></path><path d=\\\"M5.84 14.175A6.65 6.65 0 015.463 12c0-.758.138-1.491.361-2.175l-.006-.147-3.508-2.67-.115.054A10.831 10.831 0 001 12c0 1.772.436 3.447 1.197 4.938l3.642-2.763z\\\" fill=\\\"#FBBC05\\\"></path><path d=\\\"M12.225 5.253c2.108 0 3.529.892 4.34 1.638l3.167-3.031C17.787 2.088 15.255 1 12.225 1 7.834 1 4.043 3.469 2.197 7.062l3.63 2.763a6.77 6.77 0 016.398-4.572z\\\" fill=\\\"#EB4335\\\"></path></svg>\",\n  \"grok\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815\\\"></path></svg>\",\n  \"ibm\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path clip-rule=\\\"evenodd\\\" d=\\\"M24 16.333V17h-3.158v-.667H24zm-7.579 0V17h-3.158v-.667h3.158zm2.464 0L18.63 17l-.25-.667h.504zm-7.075 0a2.528 2.528 0 01-1.717.667h-5.04v-.667h6.757zm-7.389 0V17H0v-.667h4.421zm12-1.333v.667h-3.158V15h3.158zm2.958 0l-.246.667h-1L17.885 15h1.494zm-6.937 0c-.057.237-.148.46-.265.667H5.053V15h7.39zm-8.02 0v.667H0V15h4.421zM24 15v.667h-3.158V15H24zm-1.263-1.333v.666h-1.895v-.666h1.895zm-6.316 0v.666h-1.895v-.666h1.895zm3.453 0l-.248.666h-1.989l-.25-.666h2.487zm-7.52 0c.056.212.088.435.088.666h-2.337v-.666h2.249zm-4.143 0v.666H6.316v-.666H8.21zm-5.053 0v.666H1.263v-.666h1.895zm19.579-1.334V13h-1.895v-.667h1.895zm-6.316 0V13h-1.895v-.667h1.895zm3.948 0l-.247.667h-2.987l-.245-.667h3.48zm-8.792 0c.218.188.405.414.55.667H6.315v-.667h5.26zm-8.42 0V13H1.264v-.667h1.895zM18.456 11l.177.539.176-.539h3.929v.667h-1.895v-.613l-.215.613H16.63l-.209-.613v.613h-1.895V11h3.929zM3.158 11v.667H1.263V11h1.895zm8.968 0a2.555 2.555 0 01-.55.667h-5.26V11h5.81zm10.61-1.333v.666h-3.709l.224-.666h3.486zm-4.722 0l.224.666h-3.712v-.666h3.488zm-5.572 0c0 .23-.032.454-.088.666h-2.249v-.666h2.337zm-4.231 0v.666H6.316v-.666H8.21zm-5.053 0v.666H1.263v-.666h1.895zm14.419-1.334l.22.667h-4.534v-.667h4.314zm6.423 0V9h-4.536l.229-.667H24zm-11.823 0c.117.206.208.43.265.667h-7.39v-.667h7.125zm-7.756 0V9H0v-.667h4.421zM17.133 7l.224.667h-4.094V7h3.87zM24 7v.667h-4.089L20.13 7H24zM10.093 7c.662 0 1.264.253 1.717.667H5.053V7h5.04zM4.42 7v.667H0V7h4.421z\\\"></path></svg>\",\n  \"inception\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M14.767 1H7.884L1 7.883v6.884h6.884V7.883h6.883V1zM9.234 23h6.882L23 16.116V9.233h-6.884v6.883H9.234V23z\\\"></path></svg>\",\n  \"kimi\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M21.846 0a1.923 1.923 0 110 3.846H20.15a.226.226 0 01-.227-.226V1.923C19.923.861 20.784 0 21.846 0z\\\" fill=\\\"#1783FF\\\"></path><path d=\\\"M11.065 11.199l7.257-7.2c.137-.136.06-.41-.116-.41H14.3a.164.164 0 00-.117.051l-7.82 7.756c-.122.12-.302.013-.302-.179V3.82c0-.127-.083-.23-.185-.23H3.186c-.103 0-.186.103-.186.23V19.77c0 .128.083.23.186.23h2.69c.103 0 .186-.102.186-.23v-3.25c0-.069.025-.135.069-.178l2.424-2.406a.158.158 0 01.205-.023l6.484 4.772a7.677 7.677 0 003.453 1.283c.108.012.2-.095.2-.23v-3.06c0-.117-.07-.212-.164-.227a5.028 5.028 0 01-2.027-.807l-5.613-4.064c-.117-.078-.132-.279-.028-.381z\\\" fill=\\\"#fff\\\"></path></svg>\",\n  \"kling\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M5.412 13.775A23.193 23.193 0 017.41 9.32c3.17-5.492 7.795-8.757 10.33-7.294C12.038-1.266 4.598.944 1.122 6.964A13.378 13.378 0 00.085 9.22c-.259.739.092 1.534.77 1.926l4.557 2.63z\\\" fill=\\\"url(#lobe-icons-kling-0-_R_0_)\\\"></path><path d=\\\"M18.588 10.164a23.188 23.188 0 01-1.999 4.455c-3.17 5.492-7.795 8.758-10.33 7.294 5.703 3.293 13.143 1.082 16.619-4.938a13.392 13.392 0 001.037-2.255c.259-.738-.092-1.534-.77-1.925l-4.557-2.63z\\\" fill=\\\"url(#lobe-icons-kling-1-_R_0_)\\\"></path><path d=\\\"M16.59 14.62c3.17-5.492 3.686-11.13 1.15-12.594C15.207.563 10.582 3.83 7.41 9.32c2.074-3.59 5.809-5.315 8.344-3.852 2.534 1.464 2.908 5.56.835 9.151z\\\" fill=\\\"url(#lobe-icons-kling-2-_R_0_)\\\"></path><path d=\\\"M7.41 9.32c-3.17 5.492-3.686 11.13-1.15 12.593 2.534 1.464 7.159-1.802 10.33-7.294-2.074 3.591-5.809 5.316-8.344 3.852-2.534-1.463-2.908-5.56-.835-9.15z\\\" fill=\\\"url(#lobe-icons-kling-3-_R_0_)\\\"></path><defs><radialGradient cx=\\\"0\\\" cy=\\\"0\\\" gradientTransform=\\\"matrix(7.47772 -12.51022 17.14368 10.24728 5.173 13.637)\\\" gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-kling-0-_R_0_\\\" r=\\\"1\\\"><stop offset=\\\".095\\\" stop-color=\\\"#FFF959\\\"></stop><stop offset=\\\".326\\\" stop-color=\\\"#0DF35E\\\"></stop><stop offset=\\\".64\\\" stop-color=\\\"#0BF2F9\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"#04A6F0\\\"></stop></radialGradient><radialGradient cx=\\\"0\\\" cy=\\\"0\\\" gradientTransform=\\\"rotate(120.868 6.491 10.491) scale(14.5747 19.9728)\\\" gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-kling-1-_R_0_\\\" r=\\\"1\\\"><stop offset=\\\".095\\\" stop-color=\\\"#FFF959\\\"></stop><stop offset=\\\".326\\\" stop-color=\\\"#0DF35E\\\"></stop><stop offset=\\\".64\\\" stop-color=\\\"#0BF2F9\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"#04A6F0\\\"></stop></radialGradient><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-kling-2-_R_0_\\\" x1=\\\"15.578\\\" x2=\\\"18.062\\\" y1=\\\"1.798\\\" y2=\\\"9.861\\\"><stop stop-color=\\\"#003EFF\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"#0BFFE7\\\"></stop></linearGradient><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-kling-3-_R_0_\\\" x1=\\\"8.422\\\" x2=\\\"5.938\\\" y1=\\\"22.142\\\" y2=\\\"14.079\\\"><stop stop-color=\\\"#003EFF\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"#0BFFE7\\\"></stop></linearGradient></defs></svg>\",\n  \"kwaipilot\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M11.765.03C5.327.03.108 5.25.108 11.686c0 3.514 1.556 6.665 4.015 8.804L9.89 8.665h6.451L9.31 23.083c.807.173 1.63.26 2.455.26 6.438 0 11.657-5.22 11.657-11.658S18.202.028 11.765.028V.03z\\\" fill=\\\"url(#lobe-icons-kwaipilot-0-_R_0_)\\\"></path><path d=\\\"M4.123 20.489l6.362-13.046c.017-.036.035-.073.055-.11l.086-.18h.005a6.697 6.697 0 015.913-3.551c2.784 0 5.171 1.7 6.184 4.116-1.622-4.485-5.92-7.69-10.963-7.69C5.327.028.108 5.247.108 11.685c0 3.514 1.556 6.666 4.015 8.804z\\\" fill=\\\"url(#lobe-icons-kwaipilot-1-_R_0_)\\\"></path><defs><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-kwaipilot-0-_R_0_\\\" x1=\\\"13.469\\\" x2=\\\"12.557\\\" y1=\\\"4.823\\\" y2=\\\"21.302\\\"><stop offset=\\\".313\\\" stop-color=\\\"#9EC0E0\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"#fff\\\"></stop></linearGradient><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-kwaipilot-1-_R_0_\\\" x1=\\\"13.739\\\" x2=\\\"5.647\\\" y1=\\\"4.229\\\" y2=\\\"17.386\\\"><stop stop-color=\\\"#fff\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"#BCD5EC\\\"></stop></linearGradient></defs></svg>\",\n  \"liquid\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M12.028 8.546l-.008.005 3.03 5.25a3.94 3.94 0 01.643 2.162c0 .754-.212 1.46-.58 2.062l6.173-1.991L11.63 0 9.304 3.872l2.724 4.674zM6.837 24l4.85-4.053h-.013c-2.219 0-4.017-1.784-4.017-3.984 0-.794.235-1.534.64-2.156l2.865-4.976-2.381-4.087L2 16.034 6.83 24h.007zM13.737 19.382h-.001L8.222 24h8.182l4.148-6.769-6.815 2.151z\\\"></path></svg>\",\n  \"meta\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M6.897 4h-.024l-.031 2.615h.022c1.715 0 3.046 1.357 5.94 6.246l.175.297.012.02 1.62-2.438-.012-.019a48.763 48.763 0 00-1.098-1.716 28.01 28.01 0 00-1.175-1.629C10.413 4.932 8.812 4 6.896 4z\\\" fill=\\\"url(#lobe-icons-meta-0-_R_0_)\\\"></path><path d=\\\"M6.873 4C4.95 4.01 3.247 5.258 2.02 7.17a4.352 4.352 0 00-.01.017l2.254 1.231.011-.017c.718-1.083 1.61-1.774 2.568-1.785h.021L6.896 4h-.023z\\\" fill=\\\"url(#lobe-icons-meta-1-_R_0_)\\\"></path><path d=\\\"M2.019 7.17l-.011.017C1.2 8.447.598 9.995.274 11.664l-.005.022 2.534.6.004-.022c.27-1.467.786-2.828 1.456-3.845l.011-.017L2.02 7.17z\\\" fill=\\\"url(#lobe-icons-meta-2-_R_0_)\\\"></path><path d=\\\"M2.807 12.264l-2.533-.6-.005.022c-.177.918-.267 1.851-.269 2.786v.023l2.598.233v-.023a12.591 12.591 0 01.21-2.44z\\\" fill=\\\"url(#lobe-icons-meta-3-_R_0_)\\\"></path><path d=\\\"M2.677 15.537a5.462 5.462 0 01-.079-.813v-.022L0 14.468v.024a8.89 8.89 0 00.146 1.652l2.535-.585a4.106 4.106 0 01-.004-.022z\\\" fill=\\\"url(#lobe-icons-meta-4-_R_0_)\\\"></path><path d=\\\"M3.27 16.89c-.284-.31-.484-.756-.589-1.328l-.004-.021-2.535.585.004.021c.192 1.01.568 1.85 1.106 2.487l.014.017 2.018-1.745a2.106 2.106 0 01-.015-.016z\\\" fill=\\\"url(#lobe-icons-meta-5-_R_0_)\\\"></path><path d=\\\"M10.78 9.654c-1.528 2.35-2.454 3.825-2.454 3.825-2.035 3.2-2.739 3.917-3.871 3.917a1.545 1.545 0 01-1.186-.508l-2.017 1.744.014.017C2.01 19.518 3.058 20 4.356 20c1.963 0 3.374-.928 5.884-5.33l1.766-3.13a41.283 41.283 0 00-1.227-1.886z\\\" fill=\\\"#0082FB\\\"></path><path d=\\\"M13.502 5.946l-.016.016c-.4.43-.786.908-1.16 1.416.378.483.768 1.024 1.175 1.63.48-.743.928-1.345 1.367-1.807l.016-.016-1.382-1.24z\\\" fill=\\\"url(#lobe-icons-meta-6-_R_0_)\\\"></path><path d=\\\"M20.918 5.713C19.853 4.633 18.583 4 17.225 4c-1.432 0-2.637.787-3.723 1.944l-.016.016 1.382 1.24.016-.017c.715-.747 1.408-1.12 2.176-1.12.826 0 1.6.39 2.27 1.075l.015.016 1.589-1.425-.016-.016z\\\" fill=\\\"#0082FB\\\"></path><path d=\\\"M23.998 14.125c-.06-3.467-1.27-6.566-3.064-8.396l-.016-.016-1.588 1.424.015.016c1.35 1.392 2.277 3.98 2.361 6.971v.023h2.292v-.022z\\\" fill=\\\"url(#lobe-icons-meta-7-_R_0_)\\\"></path><path d=\\\"M23.998 14.15v-.023h-2.292v.022c.004.14.006.282.006.424 0 .815-.121 1.474-.368 1.95l-.011.022 1.708 1.782.013-.02c.62-.96.946-2.293.946-3.91 0-.083 0-.165-.002-.247z\\\" fill=\\\"url(#lobe-icons-meta-8-_R_0_)\\\"></path><path d=\\\"M21.344 16.52l-.011.02c-.214.402-.519.67-.917.787l.778 2.462a3.493 3.493 0 00.438-.182 3.558 3.558 0 001.366-1.218l.044-.065.012-.02-1.71-1.784z\\\" fill=\\\"url(#lobe-icons-meta-9-_R_0_)\\\"></path><path d=\\\"M19.92 17.393c-.262 0-.492-.039-.718-.14l-.798 2.522c.449.153.927.222 1.46.222.492 0 .943-.073 1.352-.215l-.78-2.462c-.167.05-.341.075-.517.073z\\\" fill=\\\"url(#lobe-icons-meta-10-_R_0_)\\\"></path><path d=\\\"M18.323 16.534l-.014-.017-1.836 1.914.016.017c.637.682 1.246 1.105 1.937 1.337l.797-2.52c-.291-.125-.573-.353-.9-.731z\\\" fill=\\\"url(#lobe-icons-meta-11-_R_0_)\\\"></path><path d=\\\"M18.309 16.515c-.55-.642-1.232-1.712-2.303-3.44l-1.396-2.336-.011-.02-1.62 2.438.012.02.989 1.668c.959 1.61 1.74 2.774 2.493 3.585l.016.016 1.834-1.914a2.353 2.353 0 01-.014-.017z\\\" fill=\\\"url(#lobe-icons-meta-12-_R_0_)\\\"></path><defs><linearGradient id=\\\"lobe-icons-meta-0-_R_0_\\\" x1=\\\"75.897%\\\" x2=\\\"26.312%\\\" y1=\\\"89.199%\\\" y2=\\\"12.194%\\\"><stop offset=\\\".06%\\\" stop-color=\\\"#0867DF\\\"></stop><stop offset=\\\"45.39%\\\" stop-color=\\\"#0668E1\\\"></stop><stop offset=\\\"85.91%\\\" stop-color=\\\"#0064E0\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-1-_R_0_\\\" x1=\\\"21.67%\\\" x2=\\\"97.068%\\\" y1=\\\"75.874%\\\" y2=\\\"23.985%\\\"><stop offset=\\\"13.23%\\\" stop-color=\\\"#0064DF\\\"></stop><stop offset=\\\"99.88%\\\" stop-color=\\\"#0064E0\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-2-_R_0_\\\" x1=\\\"38.263%\\\" x2=\\\"60.895%\\\" y1=\\\"89.127%\\\" y2=\\\"16.131%\\\"><stop offset=\\\"1.47%\\\" stop-color=\\\"#0072EC\\\"></stop><stop offset=\\\"68.81%\\\" stop-color=\\\"#0064DF\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-3-_R_0_\\\" x1=\\\"47.032%\\\" x2=\\\"52.15%\\\" y1=\\\"90.19%\\\" y2=\\\"15.745%\\\"><stop offset=\\\"7.31%\\\" stop-color=\\\"#007CF6\\\"></stop><stop offset=\\\"99.43%\\\" stop-color=\\\"#0072EC\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-4-_R_0_\\\" x1=\\\"52.155%\\\" x2=\\\"47.591%\\\" y1=\\\"58.301%\\\" y2=\\\"37.004%\\\"><stop offset=\\\"7.31%\\\" stop-color=\\\"#007FF9\\\"></stop><stop offset=\\\"100%\\\" stop-color=\\\"#007CF6\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-5-_R_0_\\\" x1=\\\"37.689%\\\" x2=\\\"61.961%\\\" y1=\\\"12.502%\\\" y2=\\\"63.624%\\\"><stop offset=\\\"7.31%\\\" stop-color=\\\"#007FF9\\\"></stop><stop offset=\\\"100%\\\" stop-color=\\\"#0082FB\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-6-_R_0_\\\" x1=\\\"34.808%\\\" x2=\\\"62.313%\\\" y1=\\\"68.859%\\\" y2=\\\"23.174%\\\"><stop offset=\\\"27.99%\\\" stop-color=\\\"#007FF8\\\"></stop><stop offset=\\\"91.41%\\\" stop-color=\\\"#0082FB\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-7-_R_0_\\\" x1=\\\"43.762%\\\" x2=\\\"57.602%\\\" y1=\\\"6.235%\\\" y2=\\\"98.514%\\\"><stop offset=\\\"0%\\\" stop-color=\\\"#0082FB\\\"></stop><stop offset=\\\"99.95%\\\" stop-color=\\\"#0081FA\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-8-_R_0_\\\" x1=\\\"60.055%\\\" x2=\\\"39.88%\\\" y1=\\\"4.661%\\\" y2=\\\"69.077%\\\"><stop offset=\\\"6.19%\\\" stop-color=\\\"#0081FA\\\"></stop><stop offset=\\\"100%\\\" stop-color=\\\"#0080F9\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-9-_R_0_\\\" x1=\\\"30.282%\\\" x2=\\\"61.081%\\\" y1=\\\"59.32%\\\" y2=\\\"33.244%\\\"><stop offset=\\\"0%\\\" stop-color=\\\"#027AF3\\\"></stop><stop offset=\\\"100%\\\" stop-color=\\\"#0080F9\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-10-_R_0_\\\" x1=\\\"20.433%\\\" x2=\\\"82.112%\\\" y1=\\\"50.001%\\\" y2=\\\"50.001%\\\"><stop offset=\\\"0%\\\" stop-color=\\\"#0377EF\\\"></stop><stop offset=\\\"99.94%\\\" stop-color=\\\"#0279F1\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-11-_R_0_\\\" x1=\\\"40.303%\\\" x2=\\\"72.394%\\\" y1=\\\"35.298%\\\" y2=\\\"57.811%\\\"><stop offset=\\\".19%\\\" stop-color=\\\"#0471E9\\\"></stop><stop offset=\\\"100%\\\" stop-color=\\\"#0377EF\\\"></stop></linearGradient><linearGradient id=\\\"lobe-icons-meta-12-_R_0_\\\" x1=\\\"32.254%\\\" x2=\\\"68.003%\\\" y1=\\\"19.719%\\\" y2=\\\"84.908%\\\"><stop offset=\\\"27.65%\\\" stop-color=\\\"#0867DF\\\"></stop><stop offset=\\\"100%\\\" stop-color=\\\"#0471E9\\\"></stop></linearGradient></defs></svg>\",\n  \"microsoft\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M11.49 2H2v9.492h9.492V2h-.002z\\\" fill=\\\"#F25022\\\"></path><path d=\\\"M22 2h-9.492v9.492H22V2z\\\" fill=\\\"#7FBA00\\\"></path><path d=\\\"M11.49 12.508H2V22h9.492v-9.492h-.002z\\\" fill=\\\"#00A4EF\\\"></path><path d=\\\"M22 12.508h-9.492V22H22v-9.492z\\\" fill=\\\"#FFB900\\\"></path></svg>\",\n  \"minimax\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><defs><linearGradient id=\\\"lobe-icons-minimax-_R_0_\\\" x1=\\\"0%\\\" x2=\\\"100.182%\\\" y1=\\\"50.057%\\\" y2=\\\"50.057%\\\"><stop offset=\\\"0%\\\" stop-color=\\\"#E2167E\\\"></stop><stop offset=\\\"100%\\\" stop-color=\\\"#FE603C\\\"></stop></linearGradient></defs><path d=\\\"M16.278 2c1.156 0 2.093.927 2.093 2.07v12.501a.74.74 0 00.744.709.74.74 0 00.743-.709V9.099a2.06 2.06 0 012.071-2.049A2.06 2.06 0 0124 9.1v6.561a.649.649 0 01-.652.645.649.649 0 01-.653-.645V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v7.472a2.037 2.037 0 01-2.048 2.026 2.037 2.037 0 01-2.048-2.026v-12.5a.785.785 0 00-.788-.753.785.785 0 00-.789.752l-.001 15.904A2.037 2.037 0 0113.441 22a2.037 2.037 0 01-2.048-2.026V18.04c0-.356.292-.645.652-.645.36 0 .652.289.652.645v1.934c0 .263.142.506.372.638.23.131.514.131.744 0a.734.734 0 00.372-.638V4.07c0-1.143.937-2.07 2.093-2.07zm-5.674 0c1.156 0 2.093.927 2.093 2.07v11.523a.648.648 0 01-.652.645.648.648 0 01-.652-.645V4.07a.785.785 0 00-.789-.78.785.785 0 00-.789.78v14.013a2.06 2.06 0 01-2.07 2.048 2.06 2.06 0 01-2.071-2.048V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v3.8a2.06 2.06 0 01-2.071 2.049A2.06 2.06 0 010 12.9v-1.378c0-.357.292-.646.652-.646.36 0 .653.29.653.646V12.9c0 .418.343.757.766.757s.766-.339.766-.757V9.099a2.06 2.06 0 012.07-2.048 2.06 2.06 0 012.071 2.048v8.984c0 .419.343.758.767.758.423 0 .766-.339.766-.758V4.07c0-1.143.937-2.07 2.093-2.07z\\\" fill=\\\"url(#lobe-icons-minimax-_R_0_)\\\" fill-rule=\\\"nonzero\\\"></path></svg>\",\n  \"mistral\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M3.428 3.4h3.429v3.428H3.428V3.4zm13.714 0h3.43v3.428h-3.43V3.4z\\\" fill=\\\"gold\\\"></path><path d=\\\"M3.428 6.828h6.857v3.429H3.429V6.828zm10.286 0h6.857v3.429h-6.857V6.828z\\\" fill=\\\"#FFAF00\\\"></path><path d=\\\"M3.428 10.258h17.144v3.428H3.428v-3.428z\\\" fill=\\\"#FF8205\\\"></path><path d=\\\"M3.428 13.686h3.429v3.428H3.428v-3.428zm6.858 0h3.429v3.428h-3.429v-3.428zm6.856 0h3.43v3.428h-3.43v-3.428z\\\" fill=\\\"#FA500F\\\"></path><path d=\\\"M0 17.114h10.286v3.429H0v-3.429zm13.714 0H24v3.429H13.714v-3.429z\\\" fill=\\\"#E10500\\\"></path></svg>\",\n  \"moonshot\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M1.052 16.916l9.539 2.552a21.007 21.007 0 00.06 2.033l5.956 1.593a11.997 11.997 0 01-5.586.865l-.18-.016-.044-.004-.084-.009-.094-.01a11.605 11.605 0 01-.157-.02l-.107-.014-.11-.016a11.962 11.962 0 01-.32-.051l-.042-.008-.075-.013-.107-.02-.07-.015-.093-.019-.075-.016-.095-.02-.097-.023-.094-.022-.068-.017-.088-.022-.09-.024-.095-.025-.082-.023-.109-.03-.062-.02-.084-.025-.093-.028-.105-.034-.058-.019-.08-.026-.09-.031-.066-.024a6.293 6.293 0 01-.044-.015l-.068-.025-.101-.037-.057-.022-.08-.03-.087-.035-.088-.035-.079-.032-.095-.04-.063-.028-.063-.027a5.655 5.655 0 01-.041-.018l-.066-.03-.103-.047-.052-.024-.096-.046-.062-.03-.084-.04-.086-.044-.093-.047-.052-.027-.103-.055-.057-.03-.058-.032a6.49 6.49 0 01-.046-.026l-.094-.053-.06-.034-.051-.03-.072-.041-.082-.05-.093-.056-.052-.032-.084-.053-.061-.039-.079-.05-.07-.047-.053-.035a7.785 7.785 0 01-.054-.036l-.044-.03-.044-.03a6.066 6.066 0 01-.04-.028l-.057-.04-.076-.054-.069-.05-.074-.054-.056-.042-.076-.057-.076-.059-.086-.067-.045-.035-.064-.052-.074-.06-.089-.073-.046-.039-.046-.039a7.516 7.516 0 01-.043-.037l-.045-.04-.061-.053-.07-.062-.068-.06-.062-.058-.067-.062-.053-.05-.088-.084a13.28 13.28 0 01-.099-.097l-.029-.028-.041-.042-.069-.07-.05-.051-.05-.053a6.457 6.457 0 01-.168-.179l-.08-.088-.062-.07-.071-.08-.042-.049-.053-.062-.058-.068-.046-.056a7.175 7.175 0 01-.027-.033l-.045-.055-.066-.082-.041-.052-.05-.064-.02-.025a11.99 11.99 0 01-1.44-2.402zm-1.02-5.794l11.353 3.037a20.468 20.468 0 00-.469 2.011l10.817 2.894a12.076 12.076 0 01-1.845 2.005L.657 15.923l-.016-.046-.035-.104a11.965 11.965 0 01-.05-.153l-.007-.023a11.896 11.896 0 01-.207-.741l-.03-.126-.018-.08-.021-.097-.018-.081-.018-.09-.017-.084-.018-.094c-.026-.141-.05-.283-.071-.426l-.017-.118-.011-.083-.013-.102a12.01 12.01 0 01-.019-.161l-.005-.047a12.12 12.12 0 01-.034-2.145zm1.593-5.15l11.948 3.196c-.368.605-.705 1.231-1.01 1.875l11.295 3.022c-.142.82-.368 1.612-.668 2.365l-11.55-3.09L.124 10.26l.015-.1.008-.049.01-.067.015-.087.018-.098c.026-.148.056-.295.088-.442l.028-.124.02-.085.024-.097c.022-.09.045-.18.07-.268l.028-.102.023-.083.03-.1.025-.082.03-.096.026-.082.031-.095a11.896 11.896 0 011.01-2.232zm4.442-4.4L17.352 4.59a20.77 20.77 0 00-1.688 1.721l7.823 2.093c.267.852.442 1.744.513 2.665L2.106 5.213l.045-.065.027-.04.04-.055.046-.065.055-.076.054-.072.064-.086.05-.065.057-.073.055-.07.06-.074.055-.069.065-.077.054-.066.066-.077.053-.06.072-.082.053-.06.067-.074.054-.058.073-.078.058-.06.063-.067.168-.17.1-.098.059-.056.076-.071a12.084 12.084 0 012.272-1.677zM12.017 0h.097l.082.001.069.001.054.002.068.002.046.001.076.003.047.002.06.003.054.002.087.005.105.007.144.011.088.007.044.004.077.008.082.008.047.005.102.012.05.006.108.014.081.01.042.006.065.01.207.032.07.012.065.011.14.026.092.018.11.022.046.01.075.016.041.01L14.7.3l.042.01.065.015.049.012.071.017.096.024.112.03.113.03.113.032.05.015.07.02.078.024.073.023.05.016.05.016.076.025.099.033.102.036.048.017.064.023.093.034.11.041.116.045.1.04.047.02.06.024.041.018.063.026.04.018.057.025.11.048.1.046.074.035.075.036.06.028.092.046.091.045.102.052.053.028.049.026.046.024.06.033.041.022.052.029.088.05.106.06.087.051.057.034.053.032.096.059.088.055.098.062.036.024.064.041.084.056.04.027.062.042.062.043.023.017c.054.037.108.075.161.114l.083.06.065.048.056.043.086.065.082.064.04.03.05.041.086.069.079.065.085.071c.712.6 1.353 1.283 1.909 2.031L7.222.994l.062-.027.065-.028.081-.034.086-.035c.113-.045.227-.09.341-.131l.096-.035.093-.033.084-.03.096-.031c.087-.03.176-.058.264-.085l.091-.027.086-.025.102-.03.085-.023.1-.026L9.04.37l.09-.023.091-.022.095-.022.09-.02.098-.021.091-.02.095-.018.092-.018.1-.018.091-.016.098-.017.092-.014.097-.015.092-.013.102-.013.091-.012.105-.012.09-.01.105-.01c.093-.01.186-.018.28-.024l.106-.008.09-.005.11-.006.093-.004.1-.004.097-.002.099-.002.197-.002z\\\"></path></svg>\",\n  \"morph\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M7.941 2c.23 0 .452.073.638.21.186.136.325.328.397.55l.593 1.814c.073.221.212.413.397.55.186.136.409.21.638.21h2.791c.23 0 .452-.074.638-.21a1.11 1.11 0 00.397-.55l.594-1.815a1.11 1.11 0 01.397-.55c.185-.136.408-.209.637-.209h1.7c.23 0 .453.073.639.21.185.136.324.328.397.55l.652 1.994c.118.361.41.635.77.728l2.957.752c.236.06.446.199.596.394.15.195.23.436.231.684v9.376c0 .248-.081.488-.231.684a1.09 1.09 0 01-.595.394l-2.957.752a1.086 1.086 0 00-.477.263 1.114 1.114 0 00-.293.465l-.653 1.994a1.11 1.11 0 01-.396.55c-.186.136-.41.21-.638.21h-1.702c-.229 0-.452-.073-.637-.21a1.11 1.11 0 01-.397-.55l-.364-1.11a1.131 1.131 0 01.15-1.002 1.074 1.074 0 01.885-.462h2.85c.29 0 .567-.116.772-.325.204-.208.32-.49.32-.785V6.444c0-.294-.116-.577-.32-.785a1.08 1.08 0 00-.771-.326h-3.273c-.29 0-.567.117-.772.326-.204.208-.32.49-.32.785v7.778c0 .295-.114.578-.319.786a1.08 1.08 0 01-.771.325h-2.182a1.08 1.08 0 01-.771-.325 1.122 1.122 0 01-.32-.786V6.444c0-.294-.115-.577-.32-.785a1.081 1.081 0 00-.77-.326H5.454c-.29 0-.567.117-.772.326-.204.208-.32.49-.32.785v11.112c0 .294.116.577.32.785.205.209.482.326.772.326h2.85a1.075 1.075 0 01.885.461 1.122 1.122 0 01.15 1.001l-.364 1.112a1.11 1.11 0 01-.397.55c-.185.136-.408.209-.637.209H6.24c-.229 0-.452-.073-.638-.21a1.11 1.11 0 01-.397-.55l-.652-1.994a1.114 1.114 0 00-.294-.465 1.086 1.086 0 00-.477-.263l-2.956-.752a1.09 1.09 0 01-.595-.394A1.124 1.124 0 010 16.688V7.312c0-.248.081-.489.231-.684.15-.195.36-.334.595-.394l2.957-.753c.178-.045.342-.136.477-.263.134-.127.235-.287.293-.464l.653-1.995a1.11 1.11 0 01.397-.55C5.788 2.075 6.01 2 6.24 2h1.701z\\\" fill=\\\"#99D52A\\\"></path></svg>\",\n  \"nousresearch\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M5.938 12.835c.127-.039.285.02.373.143.028.038.036.092.046.14.003.014-.02.033-.04.05-.124-.098-.24-.194-.354-.291-.011-.01-.016-.027-.025-.042zM8.396 9.412c.195-.032.39-.06.588-.05a.54.54 0 01.148.026c.202.071.402.147.601.224.028.01.05.036.075.055l-.013.027a9.203 9.203 0 01-.26-.089c-.115-.038-.213-.077-.315-.098-.25-.05-.25-.046-.292-.014l.574.144c.275.139.55.276.823.417.042.022.09.057.107.098.026.06.063.076.117.072.066-.006.132-.017.213-.027l-.04.086c.051.08.142.02.216.064-.074.13-.247.09-.334.199l.061.074-.12.087c0 .106-.038.168-.306.243l.026.085-.196.042.07.124h-.25l-.007.137c-.081-.01-.161-.018-.244-.027l-.053.123c-.027-.008-.052-.011-.073-.023-.067-.038-.128-.056-.195.006-.019.017-.063.014-.093.008-.026-.006-.05-.029-.07-.042-.11.095-.11.095-.208.003-.057.046-.12.074-.186.011-.063.027-.123-.02-.178-.014-.07.007-.097-.035-.133-.07l-.13.033c-.013-.236-.194-.19-.34-.203.005-.072.05-.092.095-.094a.474.474 0 01.159.022c.164.05.32.12.496.138.203.021.405.029.601-.015.265-.059.52-.149.707-.365.049-.056.083-.127.117-.195.019-.038.02-.084-.02-.116a1.397 1.397 0 00-.382-.217c.024.12-.031.182-.115.221 0 .014-.004.025 0 .03.08.115.084.16-.007.267a1.39 1.39 0 01-.218.211.477.477 0 01-.641-.05 1.36 1.36 0 01-.133-.152c-.078-.107-.076-.108-.033-.236-.165-.08-.128-.226-.104-.364.008-.05.028-.096.049-.163-.04.014-.067.017-.087.032a.897.897 0 00-.316.357c-.007.016-.01.034-.02.047-.012.015-.034.038-.045.035-.02-.006-.037-.027-.05-.045-.008-.012-.007-.032-.012-.057h-.126l.053-.172a14.82 14.82 0 00-.039-.049l.11-.284c-.06.026-.091.044-.124.051-.03.007-.064 0-.095 0 0-.031-.01-.07.004-.092.149-.22.305-.428.593-.476z\\\"></path><path d=\\\"M8.06 10.788c-.003-.038-.004-.075.037-.062.016.006.034.048.028.067-.01.04-.038.032-.064-.005z\\\"></path><path clip-rule=\\\"evenodd\\\" d=\\\"M11.981.009c.226-.012.453-.011.679 0 .247.01.495.024.74.062.401.064.798.157 1.19.273.463.138.92.299 1.356.511a7.31 7.31 0 012.948 2.642c.292.469.536.963.739 1.479.219.556.446 1.11.623 1.683.204.654.329 1.326.458 1.997.097.504.182 1.01.29 1.511.156.722.329 1.44.494 2.16.186.812.4 1.615.63 2.415.102.355.193.713.282 1.072.11.436.202.876.254 1.323.031.278.066.557.073.837a7.56 7.56 0 01-.017.88c-.037.413-.1.818-.226 1.212a5.017 5.017 0 01-.915 1.649l-.13.156.018.023c.043-.023.088-.041.127-.068.2-.138.373-.307.531-.49.4-.46.721-.973.975-1.529a3.59 3.59 0 00.325-1.72c-.024-.424-.097-.834-.3-1.213-.013-.027-.015-.06-.03-.121.05.035.082.048.101.072.107.13.22.258.315.398.33.494.46 1.052.486 1.64a3.75 3.75 0 01-.47 1.97c-.36.655-.887 1.14-1.526 1.506-.193.111-.394.21-.595.308-.157.078-.248.211-.318.365a.522.522 0 00-.033.406.359.359 0 01.013.139c-.005.077-.077.155-.14.162-.054.006-.125-.043-.15-.116a1.206 1.206 0 01-.06-.233c-.04-.314-.155-.6-.308-.87a3.906 3.906 0 00-.73-.91 2.129 2.129 0 00-.897-.524 4.093 4.093 0 00-.692-.131c-.075-.008-.15-.04-.22.01.18.06.363.11.538.18.434.173.82.43 1.18.728.308.255.58.543.794.884.098.155.186.315.227.496.027.123.042.25.067.375.013.062-.002.109-.053.144-.047.033-.122.034-.163-.01a.455.455 0 01-.08-.14c-.03-.073-.038-.159-.078-.225a7.314 7.314 0 00-1.423-1.664c-.16-.137-.329-.26-.537-.323-.376-.114-.753-.203-1.15-.154-.213.025-.427.032-.64.053a1.6 1.6 0 00-.736.278 5.14 5.14 0 00-.834.72c-.329.342-.642.699-.955 1.055-.136.155-.264.319-.314.531a5.227 5.227 0 00-.012.051.096.096 0 01-.09.076h-.31c-.046 0-.082-.048-.072-.094.023-.108.045-.216.07-.324.075-.325.19-.635.368-.917.024-.039.04-.088.104-.08l.01.049.027.077c.28-.435.571-.834.996-1.135.283-.204.584-.378.89-.55a.196.196 0 00-.098-.002c-.162.043-.325.084-.485.134-.402.124-.764.33-1.11.566-.147.1-.298.193-.414.333a7.314 7.314 0 00-1.07 1.767.845.845 0 00-.04.12.075.075 0 01-.072.056h-.494c-.04 0-.062-.051-.036-.082.123-.14.246-.282.377-.415.275-.281.58-.532.777-.884.027-.048.063-.09.095-.135.238-.333.54-.607.818-.902.082-.086.175-.16.26-.24.029-.027.053-.057.079-.085l-.018-.025-.135.041c-.034.017-.07.031-.102.05-.248.144-.494.292-.743.433-.408.23-.825.439-1.209.711-.281.2-.591.358-.889.533-.02.012-.044.015-.08.028-.015-.135.143-.201.108-.336-.033.014-.064.02-.085.038-.111.096-.227.19-.328.296-.148.157-.284.325-.425.488-.125.143-.25.286-.373.431A.153.153 0 019.89 24H8.762a.316.316 0 00.016-.042c.028-.09.085-.172.083-.28-.091-.018-.162.001-.212.077a4.45 4.45 0 00-.136.215c-.01.016-.024.03-.042.03h-.093c-.019 0-.029-.022-.017-.037.071-.088.14-.178.209-.268.001-.002-.006-.012-.012-.024-.014.004-.03.006-.045.013-.176.09-.352.181-.527.274a.363.363 0 01-.168.042H5.202c-.026 0-.039-.036-.019-.053.21-.178.402-.374.558-.605.335-.496.538-1.047.667-1.629.004-.02-.003-.043-.006-.091-.037.048-.059.072-.076.1a1.943 1.943 0 01-.334.415c-.28.258-.59.448-.983.464-.297.012-.588 0-.865-.127-.46-.21-.722-.57-.794-1.072-.025-.17-.017-.171-.182-.219A3.513 3.513 0 011.97 20.6a2.286 2.286 0 01-.808-1.13 3.569 3.569 0 01-.16-1.245c.002-.034.016-.067.024-.1.032.023.046.043.05.066.033.153.059.308.096.46.086.355.257.664.516.92.258.256.571.419.91.532.358.118.717.138 1.07-.016a1.89 1.89 0 00.621-.452c.328-.348.533-.76.648-1.223.009-.034.005-.071.007-.11-.015.006-.026.006-.03.011-.031.05-.064.1-.093.152-.284.502-.679.887-1.196 1.135-.351.17-.718.255-1.11.159a1.607 1.607 0 01-.971-.64 2.006 2.006 0 01-.368-.924 2.903 2.903 0 01.02-.886c.05-.439.466-1.17.742-1.271-.02.063-.035.112-.053.16-.043.116-.097.227-.13.345a1.901 1.901 0 00-.05.82c.033.212.09.416.204.6.147.236.346.407.62.465.11.023.225.014.338.018a.576.576 0 00.386-.131c.164-.128.282-.292.366-.481.168-.375.24-.777.309-1.179.05-.296.093-.594.133-.893.039-.281.071-.563.104-.845.026-.232.048-.464.074-.696.024-.228.052-.455.076-.683.024-.227.047-.455.069-.683.013-.14.022-.28.034-.42l.037-.417c.022-.25.041-.5.065-.748.008-.082-.02-.132-.09-.177a2.46 2.46 0 01-.492-.418c-.1-.109-.188-.228-.282-.342-.035-.042-.056-.097-.116-.118a2.084 2.084 0 00.275.597c.06.092.131.176.196.265.063.086.182.115.234.226-.028.003-.046.01-.06.006a4.74 4.74 0 01-.22-.057 2.71 2.71 0 01-1.287-.819c-.435-.487-.656-1.076-.71-1.723a5.206 5.206 0 01.014-1.06c.072-.602.22-1.186.45-1.745.155-.376.338-.741.526-1.102.205-.393.466-.75.765-1.076.512-.559 1.104-1.024 1.726-1.448.717-.49 1.478-.898 2.277-1.233C8.244.828 8.767.632 9.31.494c.655-.166 1.31-.33 1.982-.415.229-.03.458-.058.688-.07zm-1.847 22.82c-.07.06-.147.111-.207.18-.238.27-.464.549-.668.869l-.044.108a.177.177 0 00.093-.057c.174-.19.351-.378.519-.574.104-.122.195-.255.288-.386.024-.034.03-.08.046-.12l-.027-.02zm1.65-3.695a5.51 5.51 0 00-.653.593l-.37.386a.963.963 0 01-.377.25 1.372 1.372 0 01-.467.09c-.044 0-.087.006-.151.012.028.058.043.097.064.131.15.242.301.482.45.724.136.22.276.438.399.666.068.125.105.267.156.404.077.027.14-.018.202-.048.29-.135.579-.274.867-.412.213-.101.437-.186.636-.31.347-.215.68-.455 1.018-.685.015-.01.026-.028.042-.046-.023-.019-.038-.037-.056-.044-.287-.111-.527-.3-.77-.482a5.319 5.319 0 01-.506-.42 1.757 1.757 0 01-.41-.653c-.019-.049-.045-.095-.075-.156zm-5.847.264c-.06.096-.097.194-.132.293a3.38 3.38 0 01-.555 1.01c-.2.25-.455.412-.762.493-.23.06-.464.076-.7.07-.048-.002-.097.002-.158.005.016.04.021.066.035.085.1.145.23.246.4.295.157.046.316.034.498.023.181-.037.343-.115.485-.234.238-.199.402-.454.536-.732.175-.363.264-.751.342-1.144.01-.053.008-.11.011-.164zm14.945-4.586c.008.029.016.057.027.107.024.155.051.31.072.464.03.219.067.437.078.657.017.344.027.689-.014 1.033-.037.315-.063.633-.116.946a6.153 6.153 0 01-.46 1.518c-.008.018-.01.039-.02.082.047-.03.077-.042.098-.064.085-.083.17-.167.248-.255.271-.305.458-.66.596-1.043.18-.498.228-1.011.145-1.531-.103-.65-.33-1.263-.597-1.881a9.055 9.055 0 00-.024-.055l-.033.022zM5.797 8.29a.26.26 0 00.018.153c.124.251.25.501.379.75.025.049.066.09.03.163-.284.06-.578.119-.88.255.059.038.097.06.132.087.042.032.112.058.09.12-.01.033-.075.048-.117.072.017.01.043.021.067.036.166.102.33.207.447.368.138.192.229.404.188.644-.079.469-.306.85-.69 1.132-.054.04-.106.083-.161.122a.243.243 0 00-.103.245.77.77 0 00.055.195c.083.196.22.35.375.492.083.076.159.164.222.257a.37.37 0 01.025.377c-.023.05-.05.099-.076.148-.03.06-.028.111.022.162.041.042.08.089.112.138.038.058.078.079.147.05a.486.486 0 01.333-.006c.16.046.302.126.444.21.13.077.264.149.4.219.067.035.14.05.219.026.071-.022.124.01.145.076.02.064-.003.108-.074.139-.07.03-.137.063-.209.088-.1.035-.201.073-.314.077-.013-.107.11-.088.127-.159-.206-.126-.643-.145-.801-.034.063.112.035.21-.096.313-.13-.1-.025-.202.002-.3a.209.209 0 00-.249.17c-.015.101.067.216.178.224.108.007.218-.005.326-.012.06-.005.12-.027.199 0-.103.123-.248.127-.357.19.002.05.07.086.019.131-.053.048-.095-.001-.132-.03-.08-.063-.16-.126-.231-.197a.474.474 0 01-.157-.311.52.52 0 00-.043-.172c-.032-.074-.032-.137.033-.19-.018-.03-.028-.053-.045-.072a1.222 1.222 0 01-.196-.369c-.053-.137-.046-.264.048-.381.024-.03.05-.06.064-.095a.664.664 0 00.047-.168c.017-.165-.064-.287-.182-.387-.186-.156-.36-.322-.46-.551-.005-.011-.024-.017-.037-.026-.011.017-.024.027-.025.038-.019.185-.045.37-.052.557-.014.377.058.743.162 1.104.118.41.289.798.488 1.173.267.502.537 1.002.812 1.5.055.098.13.189.208.27.198.202.452.272.724.273.202 0 .404-.006.605-.026.295-.03.59-.073.884-.113.183-.025.365-.057.548-.08.21-.026.38.073.522.21.16.156.305.327.447.5.22.265.397.56.554.867.05.098.07.1.147.03.13-.121.26-.242.394-.36.067-.059.088-.12.067-.213a3.535 3.535 0 01-.085-.796c.002-.157.006-.314.018-.471.015-.224.03-.45.06-.672a59.114 59.114 0 01.362-2.298c.087-.493.182-.984.268-1.477.06-.347.118-.694.162-1.043.034-.273.055-.55.063-.825.011-.332.003-.665.002-.998 0-.077.004-.155-.01-.23-.028-.142-.01-.155-.162-.19a5.826 5.826 0 00-.607-.107c-.146-.018-.207-.053-.221-.19-.006-.049-.025-.098-.041-.146-.009-.025-.024-.048-.046-.09l-.025.264c-.009.096-.029.116-.127.115-.055 0-.11-.008-.164-.008-.476 0-.952-.008-1.426.032-.095.008-.173-.015-.226-.103-.04-.066-.088-.126-.134-.186-.063-.084-.086-.093-.182-.06-.195.068-.388.138-.582.21a2.71 2.71 0 00-.675.394.986.986 0 01-.323.168c-.033.01-.07.008-.127.013.02-.066.024-.114.047-.15.064-.105.135-.205.205-.306.023-.033.049-.063.073-.095l-.015-.023-.201.037c-.146.04-.296.07-.437.122-.148.053-.266.023-.386-.072a3.623 3.623 0 01-.733-.786l-.093-.132zm8.592 8.963l-.147.09c-.22.134-.44.266-.659.402-.093.058-.184.12-.27.188-.085.07-.124.161-.072.272.047.1.093.2.147.294.047.08.124.138.213.147.11.01.228.012.336-.012.217-.05.372-.205.528-.357a.291.291 0 00.087-.308c-.046-.18-.079-.365-.118-.547-.011-.052-.027-.103-.045-.169zm-.257-2.409c-.12.291-.205.597-.325.91-.151.433-.294.87-.435 1.323.036-.01.054-.01.067-.018.261-.16.522-.324.785-.484.054-.033.071-.078.065-.138-.012-.13-.024-.262-.034-.393l-.068-.886c-.008-.103-.02-.206-.029-.31-.009 0-.017-.002-.026-.004zm3.081-8.13l.099.285c.08.231.159.463.24.714l.58 1.952c.187.63.372 1.262.558 1.893.114.382.235.762.343 1.146.072.257.126.519.186.799.044.206.087.413.127.64.034.106.023.226.077.325l.025-.006-.068-.362c-.038-.206-.077-.412-.113-.638-.015-.07-.029-.141-.046-.211-.095-.396-.177-.796-.29-1.187-.196-.685-.413-1.364-.618-2.046-.165-.549-.322-1.1-.488-1.648-.069-.227-.15-.45-.226-.695l-.117-.336c-.037-.107-.075-.216-.115-.322-.04-.106-.084-.21-.127-.314a7.558 7.558 0 01-.027.01zM6.225 14.304c-.063-.001-.115.014-.134.083a.35.35 0 00.41.012 4.533 4.533 0 00-.276-.095zM5.23 11.98c-.026-.027-.057-.048-.075.002-.012.032-.007.07-.01.113.082-.037.082-.037.085-.115zm.062-1.189a.135.135 0 00-.088.056.197.197 0 00-.025.11c.005.152.01.306.026.457a.751.751 0 00.066.218c.061.136.157.167.288.101.055-.027.06-.054.025-.11a4.52 4.52 0 01-.129-.211c-.015-.068-.066-.131-.033-.207.04-.09-.076-.116-.074-.19V10.874c-.003-.038-.006-.087-.056-.083zm-.017-.968a.867.867 0 00-.467.127c-.076.045-.084.07-.05.158.034.087.07.173.115.254.064.117.09.125.21.077a.657.657 0 01.336-.053c.202.022.357.136.504.264l.092.077c.007-.006.014-.013.022-.018-.019-.105-.035-.226-.149-.264-.157-.053-.324-.075-.508-.117l-.24-.005c.24-.169.452-.044.687.009-.063-.115-.153-.147-.23-.193-.082-.05-.17-.092-.25-.144-.06-.037-.12-.08-.072-.172zm10.233.325c-.23-.01-.427.08-.608.211-.034.026-.06.065-.105.117.087.026.15.046.232.065.044-.015.088-.03.13-.046.306-.114.61-.115.904.031.126.063.237.04.366-.005-.02-.031-.03-.054-.045-.071a.986.986 0 00-.448-.273c-.14-.044-.284-.024-.426-.03zM7.99 6.483a.308.308 0 00.002.133c.08.321.156.643.242.962.104.387.27.75.456 1.103.02.037.061.08.098.087a.404.404 0 00.253-.051l-.472-.84c-.23-.448-.405-.92-.579-1.394zM10.397.497c-.2-.008-.405.004-.603.034-.236.035-.47.087-.7.152-.287.08-.569.18-.852.273-.04.013-.074.038-.11.058.028.014.05.018.07.014.287-.068.58-.085.873-.09.134-.002.269.009.402.025.19.024.382.048.57.09.456.104.874.3 1.265.556.464.306.888.66 1.257 1.078.205.232.395.475.56.739.17.274.315.561.449.856.273.601.456 1.232.6 1.876.04.173.07.348.1.524.017.104.065.167.17.19.122.028.2.105.22.251-.003.102-.06.174-.129.24a1.065 1.065 0 00-.268.358.164.164 0 00.083-.039c.08-.086.162-.172.235-.265a.56.56 0 00.13-.333c.009-.05.022-.1.024-.15.007-.124-.017-.15-.143-.168-.025-.004-.049-.014-.073-.015-.082-.007-.125-.063-.137-.131-.033-.198-.004-.355.247-.408.086-.018.174-.03.26-.042.158-.023.315-.053.473-.067.14-.012.19.033.226.167.008.029.018.057.021.087.019.179-.008.225-.141.288-.027.013-.055.024-.078.042a.148.148 0 00-.051.067c-.039.144.073.382.206.445l.673.32c.023.011.05.015.075.023l.018-.026c-.015-.008-.032-.013-.044-.024a2.27 2.27 0 00-.544-.32 4.898 4.898 0 00-.173-.075.203.203 0 01-.126-.191c-.003-.085.045-.154.128-.187l.059-.025c.099-.044.118-.076.112-.187a.384.384 0 00-.008-.063c-.067-.294-.123-.59-.205-.88a9.478 9.478 0 00-.826-2.036 7.465 7.465 0 00-1.39-1.805 4.536 4.536 0 00-1.177-.824 3.656 3.656 0 00-1.016-.328 6.155 6.155 0 00-.712-.074zm6.719 5.955c.01.014.018.028.038.034l-.022-.044-.016.01zM4.103 3.917a.062.062 0 01-.03.012.455.455 0 01-.04.039c-.01.01-.02.02-.045.04l-.363.354c-.088.085-.17.178-.266.253-.284.22-.425.53-.544.855a.132.132 0 00-.007.071c.013.055.033.108.052.168l.074.026c-.017.056-.03.105-.047.152-.058.164-.118.327-.175.491-.005.015.008.036.019.077.08-.175.158-.33.225-.489.228-.544.484-1.074.819-1.561.09-.133.182-.266.283-.401.004-.006.007-.013.022-.03.001-.016.003-.032.015-.04l.008-.017zm12.976 2.408a.023.023 0 01.009.019.073.073 0 00-.006.01.188.188 0 00.007.02l.018.022c.002-.007.007-.016.005-.021-.003-.01-.012-.018-.02-.038a1.331 1.331 0 01-.013-.012zM4.199 4.48c-.003.004-.008.008-.027.014-.005.013-.011.025-.031.047a2.085 2.085 0 01-.124.167c-.048.07-.116.055-.181.041-.134-.028-.228.016-.287.143-.089.187-.187.37-.273.56-.049.108-.11.216-.118.36.081.003.154.007.228.008h.228a2.563 2.563 0 01-.079.264c-.01.052-.022.103-.033.155l.02.004c.018-.046.037-.092.067-.153.066-.142.13-.285.2-.426.02-.04.034-.1.116-.092 0 .043.004.084 0 .124-.005.045-.017.09-.028.143.141.043.086.174.115.269.102-.022.104-.195.248-.144v.205l.017.002.439-1.059c-.13 0-.246-.02-.358.033-.024.011-.058-.001-.108-.004.075-.15.139-.278.211-.417a.128.128 0 01.025-.036c0-.015-.001-.03.008-.038l.006-.02c-.005.006-.01.011-.028.017-.004.012-.009.024-.026.045a.085.085 0 01-.032.033c-.123.157-.09.164-.258.106-.079-.027-.078-.028-.047-.144.028-.046.056-.093.098-.15 0-.016-.001-.032.007-.042L4.2 4.48zm2.073-.67c-.003.006-.007.011-.027.016-.094.125-.194.246-.28.377-.155.238-.301.481-.451.723-.14.224-.345.368-.575.481-.017.008-.04.006-.079.011.012-.059.016-.109.033-.153a6.076 6.076 0 01.229-.518l-.007-.02a.138.138 0 01-.035.025c-.028.05-.055.1-.093.164-.26.424-.443.817-.442.95.024.004.048.011.073.013.177.013.188.007.26-.165.03-.07.077-.12.147-.15l.175-.07c.044-.018.085-.057.146-.032.003.05-.01.11.014.145.042.062.044.125.047.193.002.049.017.098.026.147.029-.034.039-.065.05-.097.142-.39.277-.782.428-1.17.1-.256.22-.504.33-.756.013-.03.013-.067.03-.092V3.81zm3.987-.34c0 .045.01.084.021.123.042.16.094.318.124.48.024.133.023.27.028.406 0 .033-.019.067-.032.11-.094-.058-.047-.158-.106-.215h-.125c-.015.072-.01.152-.046.2-.066.085-.155.154-.236.227-.043.038-.078.018-.103-.025l-.046-.087c-.065.035-.117.069-.172.093-.116.051-.235.095-.35.147-.085.038-.09.053-.07.147.014.075.034.148.047.223.013.072.05.109.123.124.233.05.462.115.657.265.058-.102.058-.102.168-.151.03-.014.06-.03.092-.042.08-.03.115-.017.15.06.023.048.041.098.066.158.06-.14-.042-.267.017-.416.157.18.24.39.375.567a.235.235 0 00.022-.098c.002-.124 0-.247.002-.371 0-.034.013-.067.02-.1l.032-.003c.11.155.13.354.226.52a3.036 3.036 0 00-.01-.392c-.004-.045 0-.074.05-.088.08.036.116.14.215.158-.03-.275-.423-1.137-.798-1.635-.114-.127-.2-.28-.34-.386zm-2.667.696c-.019.034-.03.05-.037.067-.061.185-.125.37-.18.556-.031.105-.087.169-.195.19-.09.019-.178.052-.268.073-.038.009-.089.015-.118-.003-.024-.016-.025-.069-.036-.106-.064.076-.082.087-.17.047-.133-.062-.262-.135-.393-.201-.048-.025-.093-.063-.17-.03-.043.12-.091.25-.137.382-.099.28-.087.242.095.453.046.048.102.03.154.023.054-.009.106-.03.16-.036.13-.013.26-.08.367-.015.204-.064.387-.122.571-.178.05-.015.089.005.114.054.022.042.034.093.082.121.038-.056-.013-.128.063-.178l.14.241-.042-1.46zm.278.358c-.096-.01-.107.01-.11.108-.002.038-.003.078.002.115.03.2.099.386.174.57.002.006.012.01.022.015l.078-.05c.052.036.081.088.153.088.205-.002.41.014.616.012.099-.001.158.042.205.12.018.03.024.077.088.066l-.08-.394c-.05-.195-.085-.395-.172-.589-.057.057-.114.068-.18.046a.72.72 0 00-.135-.028c-.22-.028-.44-.059-.66-.08zm10.254-1.727c.089.163.155.316.139.491-.016.168.026.342-.044.516-.047-.033-.088-.082-.112-.075-.117.035-.164-.057-.227-.115a4.772 4.772 0 01-.286-.29l-.104-.113a4.856 4.856 0 01-.023.019c.035.046.07.093.11.156.04.064.084.127.122.193.034.058.065.118.031.205-.082-.01-.164-.019-.246-.032-.06-.01-.101 0-.124.07-.031.098-.037.096-.15.09.02.042.036.08.057.116.041.074.03.138-.03.196-.06.06-.118.122-.178.181a.175.175 0 01-.185.046c-.222-.061-.447-.113-.67-.174-.032-.009-.063-.04-.086-.068-.03-.04-.052-.087-.08-.13-.044-.07-.09-.138-.136-.207a.18.18 0 00-.014.105c.012.127.03.253.035.38.005.1-.024.12-.121.104-.104-.017-.206-.04-.31-.058-.064-.012-.131-.028-.202.03l.081.208c.09 0 .166-.01.237.002a.819.819 0 01.458.251c.078.083.154.168.241.26l.018-.005c-.004-.006-.008-.013-.01-.04.014-.056-.062-.118.018-.178.031.03.064.057.088.09.058.078.111.159.169.257l.089.141.024-.013a2093.819 2093.819 0 01-.427-.934c.055.007.083.007.108.016.193.07.385.142.577.216.074.028.147.06.219.094.062.028.112.018.157-.033.05-.056.102-.112.154-.167.05-.051.095-.046.132.014.016.025.026.053.04.08.071.138.143.277.217.433l.159.308.025-.011c-.044-.106-.07-.218-.138-.334-.057-.182-.168-.346-.206-.545.136.034.362.326.567.732l.057.074.018-.011a1.563 1.563 0 01-.052-.127c-.046-.145-.097-.29-.136-.436-.022-.083-.036-.173.022-.26l.109.058-.026-.207.027-.016c.022.02.05.036.065.06.073.108.143.22.215.33.01.016.029.029.043.043-.036-.217-.2-.38-.229-.626l.155.112c.014-.166.012-.319.042-.465.032-.158-.023-.297-.063-.445.024.004.036.006.055.025.092.124.183.249.277.371.02.027.05.047.069.087l.04.063.019-.015a.293.293 0 01-.053-.082 27.922 27.922 0 01-.332-.49c-.221-.311-.363-.467-.485-.521zm-6.57.327c-.003.161.092.275.069.415l-.368.087c.09.139.032.237-.052.331-.05.057-.092.122-.143.178-.037.04-.046.078-.018.126l.16.275c.029.048.072.066.128.064.076-.003.152 0 .228-.001.116-.003.216.022.275.137.006.014.02.024.044.052.004-.059-.003-.098.01-.13.016-.04.04-.099.072-.108.084-.023.173-.024.26-.03.013-.001.027.018.04.029l.071.065c.019-.11-.082-.198-.024-.31l.126.04c-.026-.123-.07-.245-.071-.366 0-.123.051-.243.115-.36.107.062.16.156.234.253.183.265.36.533.494.834.165-.078.27.068.407.088-.003-.106-.133-.441-.197-.492a.142.142 0 00-.102-.028c-.06.011-.119.039-.191.063-.025-.039-.056-.078-.077-.122a3.936 3.936 0 00-.473-.783c-.076-.094-.16-.182-.228-.26l-.391.285c-.049.035-.094.03-.132-.017l-.169-.207c-.025-.03-.053-.059-.097-.108z\\\"></path></svg>\",\n  \"nova\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><g mask=\\\"url(#lobe-icons-nova-0-_R_0_)\\\"><mask height=\\\"32\\\" id=\\\"lobe-icons-nova-0-_R_0_\\\" maskUnits=\\\"userSpaceOnUse\\\" style=\\\"mask-type:luminance\\\" width=\\\"32\\\" x=\\\"0\\\" y=\\\"0\\\"><path d=\\\"M31.8 0H0v32h31.8z\\\" fill=\\\"#fff\\\"></path></mask><mask height=\\\"32\\\" id=\\\"lobe-icons-nova-1-_R_0_\\\" maskUnits=\\\"userSpaceOnUse\\\" style=\\\"mask-type:alpha\\\" width=\\\"32\\\" x=\\\"0\\\" y=\\\"0\\\"><path d=\\\"m17.865 23.28 1.533 1.543c.07.07.092.175.055.267l-2.398 6.118A1.24 1.24 0 0 1 15.9 32c-.51 0-.969-.315-1.155-.793l-3.451-8.804-5.582 5.617a.246.246 0 0 1-.35 0l-1.407-1.415a.25.25 0 0 1 0-.352l6.89-6.932a1.3 1.3 0 0 1 .834-.398 1.25 1.25 0 0 1 1.232.79l2.992 7.63 1.557-3.977a.248.248 0 0 1 .408-.085zm8.224-19.3-5.583 5.617-3.45-8.805a1.24 1.24 0 0 0-1.43-.762c-.414.092-.744.407-.899.805l-2.38 6.072a.25.25 0 0 0 .055.267l1.533 1.543c.127.127.34.082.407-.085L15.9 4.655l2.991 7.629a1.24 1.24 0 0 0 2.035.425l6.922-6.965a.25.25 0 0 0 0-.352L26.44 3.977a.246.246 0 0 0-.35 0zM8.578 17.566l-3.953-1.567 7.582-3.01c.49-.195.815-.685.785-1.24a1.3 1.3 0 0 0-.395-.84l-6.886-6.93a.246.246 0 0 0-.35 0L3.954 5.395a.25.25 0 0 0 0 .353l5.583 5.617-8.75 3.472a1.25 1.25 0 0 0 0 2.325l6.079 2.412a.24.24 0 0 0 .266-.055l1.533-1.542a.25.25 0 0 0-.085-.41zm22.434-2.73-6.08-2.412a.24.24 0 0 0-.265.055l-1.533 1.542a.25.25 0 0 0 .084.41L27.172 16l-7.583 3.01a1.255 1.255 0 0 0-.785 1.24c.018.317.172.614.395.84l6.89 6.931a.246.246 0 0 0 .35 0l1.406-1.415a.25.25 0 0 0 0-.352l-5.582-5.617 8.75-3.472a1.25 1.25 0 0 0 0-2.325z\\\" fill=\\\"#fff\\\"></path></mask><g mask=\\\"url(#lobe-icons-nova-1-_R_0_)\\\"><path d=\\\"M-2.915 34.125h37.448V-2.109H-2.915z\\\" fill=\\\"url(#lobe-icons-nova-2-_R_0_)\\\"></path></g></g><defs><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-nova-2-_R_0_\\\" x1=\\\"33.663\\\" x2=\\\"-2.086\\\" y1=\\\"33.633\\\" y2=\\\"-1.901\\\"><stop stop-color=\\\"#ff6200\\\"></stop><stop offset=\\\".399\\\" stop-color=\\\"#e433ff\\\"></stop><stop offset=\\\".96\\\" stop-color=\\\"#6842ff\\\"></stop></linearGradient></defs></svg>\",\n  \"nvidia\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M10.212 8.976V7.62c.127-.01.256-.017.388-.021 3.596-.117 5.957 3.184 5.957 3.184s-2.548 3.647-5.282 3.647a3.227 3.227 0 01-1.063-.175v-4.109c1.4.174 1.681.812 2.523 2.258l1.873-1.627a4.905 4.905 0 00-3.67-1.846 6.594 6.594 0 00-.729.044m0-4.476v2.025c.13-.01.259-.019.388-.024 5.002-.174 8.261 4.226 8.261 4.226s-3.743 4.69-7.643 4.69c-.338 0-.675-.031-1.007-.092v1.25c.278.038.558.057.838.057 3.629 0 6.253-1.91 8.794-4.169.421.347 2.146 1.193 2.501 1.564-2.416 2.083-8.048 3.763-11.24 3.763-.308 0-.603-.02-.894-.048V19.5H24v-15H10.21zm0 9.756v1.068c-3.356-.616-4.287-4.21-4.287-4.21a7.173 7.173 0 014.287-2.138v1.172h-.005a3.182 3.182 0 00-2.502 1.178s.615 2.276 2.507 2.931m-5.961-3.3c1.436-1.935 3.604-3.148 5.961-3.336V6.523C5.81 6.887 2 10.723 2 10.723s2.158 6.427 8.21 7.015v-1.166C5.77 16 4.25 10.958 4.25 10.958h-.002z\\\" fill=\\\"#74B71B\\\" fill-rule=\\\"nonzero\\\"></path></svg>\",\n  \"openai\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z\\\"></path></svg>\",\n  \"openrouter\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M18.654 3.87a5.087 5.087 0 110 10.174L23.7 19.09c.64.641.187 1.737-.72 1.737H8.48a8.479 8.479 0 010-16.958h10.175zM8.479 7.26a5.087 5.087 0 100 10.176 5.087 5.087 0 000-10.175z\\\" fill=\\\"#C8FF00\\\"></path></svg>\",\n  \"perplexity\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M19.785 0v7.272H22.5V17.62h-2.935V24l-7.037-6.194v6.145h-1.091v-6.152L4.392 24v-6.465H1.5V7.188h2.884V0l7.053 6.494V.19h1.09v6.49L19.786 0zm-7.257 9.044v7.319l5.946 5.234V14.44l-5.946-5.397zm-1.099-.08l-5.946 5.398v7.235l5.946-5.234V8.965zm8.136 7.58h1.844V8.349H13.46l6.105 5.54v2.655zm-8.982-8.28H2.59v8.195h1.8v-2.576l6.192-5.62zM5.475 2.476v4.71h5.115l-5.115-4.71zm13.219 0l-5.115 4.71h5.115v-4.71z\\\" fill=\\\"#22B8CD\\\" fill-rule=\\\"nonzero\\\"></path></svg>\",\n  \"poolside\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><g clip-path=\\\"url(#lobe-icons-poolside-0-_R_0_)\\\"><mask height=\\\"24\\\" id=\\\"lobe-icons-poolside-4-_R_0_\\\" maskUnits=\\\"userSpaceOnUse\\\" style=\\\"mask-type:alpha\\\" width=\\\"24\\\" x=\\\"0\\\" y=\\\"0\\\"><path d=\\\"M24 0H0v24h24V0z\\\" fill=\\\"url(#lobe-icons-poolside-1-_R_0_)\\\"></path><path d=\\\"M24 0H0v24h24V0z\\\" fill=\\\"url(#lobe-icons-poolside-2-_R_0_)\\\"></path><path d=\\\"M24 0H0v24h24V0z\\\" fill=\\\"url(#lobe-icons-poolside-3-_R_0_)\\\"></path></mask><g mask=\\\"url(#lobe-icons-poolside-4-_R_0_)\\\"><path d=\\\"M6.742 22.786a11.93 11.93 0 01-5.232-4.963 11.98 11.98 0 01-1.463-6.886.975.975 0 011.943.173c-.178 2.005.246 4 1.226 5.769a9.968 9.968 0 003.526 3.685l4.586-9.405c-1.795-.598-3.29-.338-3.425-.312l-.058.012a.972.972 0 01-1.054-.576c-.24-.448-.96-1.544-1.834-1.97-.873-.426-2.218-.289-2.651-.195a.977.977 0 01-1.087-1.38C4.117.792 11.315-1.686 17.262 1.215c5.946 2.9 8.422 10.093 5.529 16.038l-.01.02c-2.903 5.94-10.095 8.414-16.039 5.514zm6.338-10.773l-4.586 9.405c4.629 1.73 9.896-.192 12.304-4.558-.338-.524-.932-1.275-1.62-1.61-.888-.434-2.19-.292-2.637-.198a.989.989 0 01-.616-.055.984.984 0 01-.49-.473c-.028-.058-.739-1.438-2.355-2.51zM5.81 6.56c.747.365 1.356.944 1.81 1.49 1.406-2.15 3.314-3.774 4.787-4.82a20.81 20.81 0 011.66-1.067A10.078 10.078 0 003.882 6.077c.617.042 1.297.174 1.929.482zm12.671-2.243c.09.624.152 1.294.182 1.965.083 1.801-.021 4.296-.844 6.722.686.018 1.484.14 2.214.495.652.318 1.198.8 1.628 1.28a10.082 10.082 0 00-3.18-10.462zm-5.394 5.46a9.522 9.522 0 012.984 2.287c1.075-3.493.606-7.402.215-8.85-1.381.584-4.75 2.62-6.84 5.618a9.515 9.515 0 013.64.944z\\\" fill=\\\"#4137FF\\\"></path></g></g><defs><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-poolside-1-_R_0_\\\" x1=\\\"6.75\\\" x2=\\\"5.625\\\" y1=\\\"20.55\\\" y2=\\\"20.55\\\"><stop></stop><stop offset=\\\"1\\\" stop-opacity=\\\"0\\\"></stop></linearGradient><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-poolside-2-_R_0_\\\" x1=\\\"6.825\\\" x2=\\\"7.2\\\" y1=\\\"11.85\\\" y2=\\\"11.137\\\"><stop stop-opacity=\\\"0\\\"></stop><stop offset=\\\"1\\\"></stop></linearGradient><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-poolside-3-_R_0_\\\" x1=\\\".975\\\" x2=\\\".975\\\" y1=\\\"20.512\\\" y2=\\\"10.912\\\"><stop></stop><stop offset=\\\".105\\\" stop-opacity=\\\".9\\\"></stop><stop offset=\\\".904\\\" stop-opacity=\\\".04\\\"></stop><stop offset=\\\"1\\\" stop-opacity=\\\"0\\\"></stop></linearGradient><clipPath id=\\\"lobe-icons-poolside-0-_R_0_\\\"><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"#fff\\\"></path></clipPath></defs></svg>\",\n  \"qwen\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z\\\" fill=\\\"url(#lobe-icons-qwen-_R_0_)\\\" fill-rule=\\\"nonzero\\\"></path><defs><linearGradient id=\\\"lobe-icons-qwen-_R_0_\\\" x1=\\\"0%\\\" x2=\\\"100%\\\" y1=\\\"0%\\\" y2=\\\"0%\\\"><stop offset=\\\"0%\\\" stop-color=\\\"#6336E7\\\" stop-opacity=\\\".84\\\"></stop><stop offset=\\\"100%\\\" stop-color=\\\"#6F69F7\\\" stop-opacity=\\\".84\\\"></stop></linearGradient></defs></svg>\",\n  \"recraft\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M19.667 8.275c0-4.57-4.15-8.275-9.27-8.275-1.774 0-3.213 3.705-3.213 8.275 0 1.143.09 2.233.253 3.224H4.29L1 23h9.4v-6.447c5.117 0 9.266-3.707 9.266-8.275l.001-.002zm-9.27-6.76c.93 0 1.682 3.028 1.682 6.76 0 3.733-.752 6.76-1.681 6.76-.93 0-1.681-3.027-1.681-6.76 0-3.732.752-6.76 1.68-6.76z\\\"></path><path d=\\\"M19.848 16.552h-9.44L14.028 23h9.438l-3.618-6.448z\\\"></path></svg>\",\n  \"relace\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M23 23H1V1h22v22zM2.962 15.232c1.969.3 5.028.42 7.78-.171.904-.195 1.743-.46 2.49-.803-1.395-3.4-1.675-5.766-1.264-7.378.466-1.823 1.799-2.59 2.998-2.602h.01c.688 0 2.117.177 3.081 1.35 1.003 1.22 1.216 3.152.26 5.991-.504 1.493-1.437 2.616-2.594 3.456 1.323 2.993 2.11 4.498 2.588 5.284.223.367.372.564.467.679h2.26V2.962H2.962v12.27zm11.05.827c-.912.413-1.887.711-2.857.92-2.91.626-6.059.527-8.193.234v3.825h13.471c-.527-.92-1.287-2.424-2.421-4.98zm.97-9.82c-.323.005-.87.181-1.112 1.127-.25.975-.161 2.776 1.055 5.84.705-.598 1.233-1.329 1.531-2.213.868-2.576.455-3.67.086-4.119-.406-.494-1.09-.633-1.56-.634z\\\"></path></svg>\",\n  \"stepfun\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M22.012 0h1.032v.927H24v.968h-.956V3.78h-1.032V1.896h-1.878v-.97h1.878V0zM2.6 12.371V1.87h.969v10.502h-.97zm10.423.66h10.95v.918h-6.208v9.579h-4.742V13.03zM5.629 3.333v12.356H0v4.51h10.386V8L20.859 8l-.003-4.668-15.227.001z\\\" fill=\\\"url(#lobe-icons-stepfun-_R_0_)\\\" fill-rule=\\\"evenodd\\\"></path><defs><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-stepfun-_R_0_\\\" x1=\\\"1.646\\\" x2=\\\"18.342\\\" y1=\\\"1.916\\\" y2=\\\"22.091\\\"><stop stop-color=\\\"#01A9FF\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"#0160FF\\\"></stop></linearGradient></defs></svg>\",\n  \"tencent\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M9.976 1L24 9.8l-10.587.015L10.723 23H5.489L8.18 9.8H3.244L1 5.4h8.077L9.976 1z\\\" fill=\\\"#0052D9\\\" fill-rule=\\\"evenodd\\\"></path></svg>\",\n  \"upstage\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M19.763 0l-.373 1.297h2.594L22.354 0h-2.591zM16.192 2.27l-.376 1.298h5.52l.37-1.298h-5.514zM12.897 4.54l-.376 1.298h8.166l.37-1.298h-8.16zM2.85 6.81l-.377 1.298h17.565l.37-1.297H2.848zM3.884 9.081l-.376 1.297H19.39l.37-1.297H3.882zM4.088 24l.376-1.297H1.866L1.5 24h2.588zM7.662 21.73l.376-1.297H2.515L2.15 21.73h5.513zM10.957 19.459l.376-1.297h-8.17l-.366 1.297h8.16zM21.005 17.189l.376-1.297H3.812l-.366 1.297h17.559zM19.967 14.919l.376-1.297H4.461l-.366 1.297h15.872zM18.786 12.649l.376-1.297H4.26l-.366 1.297h14.893z\\\" fill=\\\"url(#lobe-icons-upsate-_R_0_)\\\"></path><defs><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-upsate-_R_0_\\\" x1=\\\"11.927\\\" x2=\\\"11.927\\\" y2=\\\"24\\\"><stop offset=\\\"0\\\" stop-color=\\\"#AEBCFE\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"#805DFA\\\"></stop></linearGradient></defs></svg>\",\n  \"vercel\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M12 0l12 20.785H0L12 0z\\\"></path></svg>\",\n  \"voyage\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M5.407 0v.066a.974.974 0 00-.048.245c-.011.11-.016.208-.016.295 0 .339.043.715.128 1.13.097.405.274.912.531 1.524l7.125 16.366L20.011 3.39c.161-.404.333-.846.515-1.327.182-.48.273-.966.273-1.458a1.406 1.406 0 00-.096-.54V0H24v.066c-.204.207-.45.578-.74 1.114-.29.535-.606 1.195-.949 1.982L13.095 24h-1.287L3.075 3.965c-.204-.47-.418-.923-.644-1.36-.214-.437-.418-.83-.61-1.18-.194-.36-.365-.66-.515-.9A5.666 5.666 0 001 .064V0h4.407z\\\" fill=\\\"#012E33\\\"></path></svg>\",\n  \"xai\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M6.469 8.776L16.512 23h-4.464L2.005 8.776H6.47zm-.004 7.9l2.233 3.164L6.467 23H2l4.465-6.324zM22 2.582V23h-3.659V7.764L22 2.582zM22 1l-9.952 14.095-2.233-3.163L17.533 1H22z\\\"></path></svg>\",\n  \"xiaomimimo\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M.958 15.936a.459.459 0 01.459.44v2.729a.46.46 0 01-.918 0v-2.729a.459.459 0 01.459-.44zm4.814-2.035a.46.46 0 01.553.45v4.754a.458.458 0 11-.918 0V15.48L3.74 17.202a.462.462 0 01-.655.016.462.462 0 01-.065-.082L.628 14.67a.459.459 0 01.658-.637l2.124 2.187 2.127-2.188a.46.46 0 01.235-.13zm2.068.004a.46.46 0 01.458.445v4.755a.46.46 0 01-.458.458.459.459 0 01-.458-.458V14.35a.459.459 0 01.458-.445zm1.973 2.014a.46.46 0 01.46.457v2.729a.46.46 0 01-.784.324.46.46 0 01-.134-.324v-2.729a.46.46 0 01.458-.458zm.002-2.045a.458.458 0 01.328.157l2.127 2.19 2.125-2.19a.459.459 0 01.784.318v4.756a.46.46 0 01-.455.458.46.46 0 01-.458-.458V15.48l-1.667 1.723a.46.46 0 01-.65.008l-.005-.005c0-.002-.002-.002-.004-.003l-2.455-2.534a.46.46 0 01-.008-.667.461.461 0 01.338-.128zm6.797 1.206a.46.46 0 01.53.651A1.966 1.966 0 0019.81 18.4a.462.462 0 01.623.18.46.46 0 01-.181.624 2.863 2.863 0 01-1.38.353l-.142-.004a2.88 2.88 0 01-2.393-4.263.461.461 0 01.274-.21zm.864-.931a2.884 2.884 0 013.915 3.914.46.46 0 01-.402.24l-.057-.004a.458.458 0 01-.164-.055.46.46 0 01-.182-.622 1.967 1.967 0 00-2.669-2.67.459.459 0 11-.441-.803zM9.59 6.368c1.481 0 1.696 1.202 1.696 1.654v2.648h-.917v-.432c-.26.346-.792.535-1.36.535-.133 0-1.289-.03-1.384-1.136-.082-.932.675-1.61 2.053-1.61h.691c0-.563-.367-.886-.983-.886-.44.013-.864.174-1.2.458l-.36-.664c.484-.379 1.012-.567 1.764-.567zm4.427.1c1.263 0 2.082.97 2.083 2.15 0 1.181-.824 2.154-2.083 2.154-1.26 0-2.084-.972-2.084-2.152 0-1.18.82-2.153 2.084-2.153zm6.801.015c.68 0 1.202.465 1.197 1.548v2.642H21.1V8.29c0-.312-.002-.98-.63-.98s-.628.667-.628.838v2.524h-.89V8.148c0-.17-.001-.838-.63-.838-.628 0-.628.668-.628.98v2.383h-.917v-4.03h.917V7a1.22 1.22 0 01.947-.516c.398 0 .76.193.982.686a1.321 1.321 0 011.195-.686zm-18.093.872l1.457-1.772H5.32L3.311 8.07l2.14 2.602H4.24L2.725 8.796 1.21 10.672H0L2.138 8.07.13 5.583h1.138l1.458 1.772zm4.149 3.317h-.916V6.644h.916v4.028zm16.99 0h-.916V6.644h.916v4.028zM9.925 8.71c-1.055 0-1.359.412-1.326.742.032.329.324.537.757.537a1.013 1.013 0 001.014-.968l.002-.31h-.447zM14.018 7.3c-.663 0-1.184.487-1.184 1.32 0 .832.52 1.32 1.184 1.32.662 0 1.182-.49 1.182-1.32 0-.832-.52-1.32-1.182-1.32zM6.417 5.001a.568.568 0 01.587.582.588.588 0 01-1.175 0A.57.57 0 016.417 5zm16.991 0a.57.57 0 01.592.582.588.588 0 01-1.174 0 .57.57 0 01.357-.542.572.572 0 01.225-.04z\\\"></path></svg>\",\n  \"zai\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M12.105 2L9.927 4.953H.653L2.83 2h9.276zM23.254 19.048L21.078 22h-9.242l2.174-2.952h9.244zM24 2L9.264 22H0L14.736 2H24z\\\"></path></svg>\"\n};\n\n/** Reviewed monochrome brand marks that inherit the text color. */\n// oxfmt-ignore\nexport const monochromeBrandIcons: Readonly<Record<string, string>> = {\n  \"aionlabs\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M8.303.964c.038.016.064.01.076-.016a.487.487 0 00.048-.034L8.76.66a2.845 2.845 0 011.5-.575c.078-.007.148-.007.211 0 .12.01.19.016.21.016.01 0 .02 0 .029.004a.416.416 0 00.148.021c.016 0 .031.002.046.006a.303.303 0 00.15.015c.34-.085.613-.133.82-.144.191-.01.42.012.688.067.454.092.864.288 1.23.588.048.04.13.114.249.223.007.006.015.01.024.011.037.006.07.001.099-.015a1.06 1.06 0 01.716-.12l.367.022c.235.023.446.083.632.18.096.048.223.128.383.238a.05.05 0 00.025.009c.047.003.091-.035.125-.03.033.004.068-.02.106-.024a3.47 3.47 0 01.815 0c.135.015.264.047.386.097.306.127.583.296.83.507.3.255.57.55.765.9.133.239.22.455.263.65.021.1.046.224.073.372.002.01.005.018.009.028.07.172.167.335.23.508.04.113.07.208.087.286.024.108.047.239.069.394.006.051.018.108.034.17a.142.142 0 00.046.073c.273.233.49.514.617.841.037.095.06.207.068.337.013.199.02.41-.042.598-.046.143-.076.23-.089.26a.085.085 0 00-.005.047c.016.105.023.18.02.225-.013.152-.021.265-.026.34a1.14 1.14 0 01-.121.43c-.247.5-.7.773-1.25.844a.236.236 0 00-.09.038c-.018.01-.02.034-.007.07a.062.062 0 01.003.023 2.592 2.592 0 01-.068.463c-.068.3-.205.55-.41.748a1.68 1.68 0 01-.742.41c-.036.01-.116.022-.24.034a.033.033 0 00-.027.022c-.01.033 0 .097-.017.15-.023.069-.006.17-.026.239-.02.065-.015.134-.024.215-.006.044-.023.163-.053.357a12.686 12.686 0 01-1.535 4.4c-.105.184-.23.366-.363.564a.07.07 0 00-.01.052c.089.486.185.956.32 1.416.08.272.182.523.383.715.057.054.155.121.296.203.63.367 1.277.656 1.985.963a.019.019 0 01.007.005.02.02 0 01.004.008.02.02 0 010 .009 2.052 2.052 0 01-.135.176c-.757.875-1.549 1.639-2.448 2.277a7.977 7.977 0 01-2.65 1.23.417.417 0 01-.087.017c-.01 0-.019.002-.027.008-.04.027-.092.01-.138.037a.063.063 0 01-.033.008.275.275 0 00-.12.02.081.081 0 01-.028.007c-.14.004-.259.029-.387.031-.327.007-.686.034-1.02.025a8.142 8.142 0 01-.646-.037 5.625 5.625 0 01-.613-.13 6.23 6.23 0 01-1.764-.73 4.407 4.407 0 01-1.199-1.098 1.296 1.296 0 01-.276-.625.734.734 0 00-.029-.163.679.679 0 00-.022-.192.17.17 0 01-.006-.045.648.648 0 00-.008-.127c-.025-.112-.02-.18-.037-.31a22.16 22.16 0 00-.173-1.086.667.667 0 01-.012-.104c-.002-.053-.027-.086-.026-.14a.28.28 0 00-.023-.129.051.051 0 01-.005-.027.358.358 0 00-.016-.134c-.023-.06-.008-.123-.036-.198a.1.1 0 01-.006-.036.33.33 0 00-.012-.115c-.026-.069-.008-.136-.04-.208a.063.063 0 01-.004-.027.357.357 0 00-.015-.124c-.023-.064-.006-.12-.03-.18-.021-.052-.004-.119-.028-.17-.025-.055-.008-.125-.032-.187-.019-.047-.003-.093-.023-.148-.02-.06-.008-.13-.032-.184-.016-.036-.01-.079-.019-.125l-.05-.267a.98.98 0 00-.061-.24.022.022 0 00-.02-.014.278.278 0 01-.07-.019 2.243 2.243 0 01-.69-.397 1.597 1.597 0 01-.48-.695 2.39 2.39 0 01-.104-.4c-.03-.17-.147-.303-.217-.43a1.498 1.498 0 01-.142-.384c-.01-.041-.004-.115-.028-.147a.017.017 0 01.004-.024c.018-.013.024-.044.016-.092-.006-.037-.024-.055-.053-.054a.03.03 0 01-.013-.002.03.03 0 01-.01-.008c-.26-.308-.456-.554-.545-.897a2.623 2.623 0 01-.086-.483 4.554 4.554 0 00-.021-.279.02.02 0 01-.005-.014.497.497 0 00.046-.183.323.323 0 00-.056-.251.123.123 0 01-.023-.052l-.078-.394a.114.114 0 01-.002-.037c.017-.149.028-.237.034-.264.045-.212.126-.406.244-.583a.025.025 0 00.004-.018.026.026 0 00-.01-.015 2.888 2.888 0 01-.927-1.357A2.66 2.66 0 013 8.36c.001-.148.008-.28.02-.397a2.276 2.276 0 01.656-1.395c.166-.168.356-.318.572-.452.037-.022.053-.053.05-.092a.417.417 0 00-.024-.103.077.077 0 01-.005-.028 20.28 20.28 0 01.004-1.105c.006-.126.038-.28.096-.462.175-.556.438-1.015.79-1.379.215-.222.449-.4.7-.535.162-.087.314-.142.396-.252.173-.233.373-.45.6-.65.312-.274.68-.447 1.103-.519.104-.017.229-.01.345-.027zm.106.32l-.24-.047a1.42 1.42 0 00-.59.115c-.674.296-1.225.917-1.414 1.616-.045.17-.053.305-.075.51a.087.087 0 01-.035.06c-.113.084-.26.186-.363.302a2.227 2.227 0 00-.355.53 1.45 1.45 0 00-.133.55.745.745 0 00-.009.282l.016.24a.016.016 0 01-.015.017.264.264 0 00-.131.046c-.305.204-.512.52-.631.862-.042.12-.118.326-.078.436a.042.042 0 00.043.027.043.043 0 00.018-.005.557.557 0 00.194-.177c.237-.315.489-.593.86-.758a1.79 1.79 0 011.076-.127 7.415 7.415 0 01.518.114.012.012 0 00.007-.016 1.69 1.69 0 01-.134-.5.827.827 0 010-.142l.015-.128a1.89 1.89 0 00.61 1.269c.254.231.557.338.898.375.237.026.46.028.671.006a.32.32 0 01.128-.009 1.735 1.735 0 001.225-.678v-.006a.013.013 0 00-.005-.006.012.012 0 00-.006-.002l-.434-.048a4.718 4.718 0 00-.369-.141c-.138-.046-.271-.05-.41-.068-.453-.058-.831-.371-.914-.841-.028-.318.026-.623.244-.865.065-.072.143-.148.233-.227a.088.088 0 00.03-.096.056.056 0 01-.001-.026l.067-.312.174-.325a.014.014 0 00-.014-.02 1.24 1.24 0 00-.877.605c-.186.309-.264.69-.152 1.03a.004.004 0 01-.002.005h-.003l-.002-.002c-.222-.418-.247-.911.03-1.309.253-.36.775-.712 1.247-.67a.03.03 0 00.024-.01l.203-.214a2.28 2.28 0 01.443-.352c.112-.068.259-.128.379-.194a.016.016 0 00.001-.027.784.784 0 00-.267-.118 2.217 2.217 0 00-.79-.046c-.45.054-.943.304-1.302.596a.012.012 0 01-.013.002.013.013 0 01-.008-.01c0-.01.001-.018.005-.024.16-.231.342-.419.546-.562.507-.357 1.193-.4 1.768-.204.128.061.25.133.367.215a.219.219 0 00.073.037.52.52 0 00.287-.064.36.36 0 00.187-.269.23.23 0 00-.004-.128.065.065 0 00-.016-.023c-.057-.05-.085-.106-.085-.168 0-.12.075-.2.199-.177a.478.478 0 01.168.076.605.605 0 01.11.435l.004.004a.011.011 0 00.011.002c.214-.088.363-.079.641-.091a.019.019 0 01.014.005.019.019 0 01.005.013v.21a.011.011 0 01-.01.011c-.24.026-.398.053-.475.08-.558.201-.93.583-1.113 1.144-.105.38-.085.752.06 1.113.126.301.32.55.578.745.442.332 1.015.404 1.552.291.111-.023.209-.07.3-.11a.004.004 0 00.002-.003.005.005 0 000-.006l-.004-.001a1.237 1.237 0 01-.87-.314 1.726 1.726 0 01-.213-.235.79.79 0 00.546.172c.226-.01.468-.102.6-.297a.024.024 0 00.003-.02.025.025 0 00-.005-.009.025.025 0 00-.008-.006c-.497-.249-.698-.726-.654-1.268a.134.134 0 01.032-.054.014.014 0 01.023.009l.003.038a.537.537 0 00.053.19c.147.316.371.546.67.686.47.221 1.122.188 1.551-.114a.712.712 0 00.258-.32.417.417 0 00-.043-.41c-.122-.153-.27-.194-.44-.123-.117.048-.187.133-.296.164-.55.159-1.123-.414-.907-.96a.503.503 0 01.346-.266l.1.004a1.048 1.048 0 00-.146.241c-.103.23-.046.492.174.62.12.058.235.06.342.004.095-.05.145-.141.213-.22a.394.394 0 01.273-.14c.486-.046.884.347 1.062.77.061.201.09.398.084.591l-.037.278-.024.106c-.08.118-.138.254-.177.406-.07.28.045.482.245.662a.008.008 0 00.01 0 .008.008 0 00.003-.008.977.977 0 01.01-.526l.11-.242c.147-.198.335-.327.563-.387a1.613 1.613 0 01.412-.047.012.012 0 00.004-.003.013.013 0 00.003-.005V3.87c-.049-.26-.03-.483.054-.669.264-.578.864-.658 1.409-.47.262.091.474.247.699.383a.011.011 0 00.012 0 .011.011 0 00.004-.005.454.454 0 00-.048-.163 2.018 2.018 0 00-1.123-1.113 2.008 2.008 0 00-.558-.102.306.306 0 01.276-.158.01.01 0 00.006-.002.01.01 0 00.003-.006.01.01 0 00-.007-.01 2.14 2.14 0 01-.19-.064 1.71 1.71 0 00-1.061-.062.033.033 0 00-.02.05l.087.152a.044.044 0 00.048.021c.057-.012.135-.02.235-.025a.694.694 0 01.415.108 1.79 1.79 0 00-1.339.788.201.201 0 01-.02-.04c-.015-.034-.041-.05-.054-.08-.022-.052.029-.156.058-.2.107-.16.245-.297.412-.41a.021.021 0 00.008-.027.74.74 0 00-.18-.248 1.394 1.394 0 00-.693-.434c-.512-.143-1.04-.067-1.457.256a9.16 9.16 0 00-.268.221c-.046.04-.093.053-.14.04a.798.798 0 00-.52.017c-.307.12-.544.371-.593.71-.004.03-.002.07-.006.104a.026.026 0 01-.02.022 1.331 1.331 0 00-.347.153c-.308.174-.442.441-.403.8.01.083.036.169.079.259l-.052.216c-.064-.083-.137-.169-.18-.255a.988.988 0 01-.035-.814c.08-.214.284-.44.534-.39a.167.167 0 01.119.08.026.026 0 00.025.012.025.025 0 00.02-.019c.01-.036.02-.082.026-.138.074-.558.534-1.062 1.136-1.077.039 0 .077-.012.11-.034l.284-.182a.012.012 0 00.005-.008v-.005a2.488 2.488 0 00-1.269-.735 2.637 2.637 0 00-1.47.116.132.132 0 01-.08.003A2.257 2.257 0 009.123.71a2.2 2.2 0 00-.24.165c-.157.138-.316.274-.474.41zm.965 2.196a1.215 1.215 0 00-.388.183.453.453 0 00-.112.11.057.057 0 00-.01.025c-.061.389-.04.825.21 1.152.455.6 1.252.715 1.936.475.121-.042.246-.124.356-.174a.012.012 0 00.005-.004.011.011 0 00.001-.007.011.011 0 00-.008-.01 1.759 1.759 0 01-.896-.665 1.446 1.446 0 01-.25-.516c-.094-.44-.04-.879.164-1.317.084-.166.184-.323.302-.47a.248.248 0 00.033-.051.01.01 0 000-.006.01.01 0 00-.006-.01 1.398 1.398 0 00-.517.167c-.42.238-.757.638-.82 1.118zm-4.8 2.044c.088-.12.184-.224.285-.31a.128.128 0 00.045-.087l.03-.347c.083-.455.288-.84.613-1.152a1.54 1.54 0 01.302-.211.032.032 0 00.016-.03 1.823 1.823 0 01.121-.713.015.015 0 00-.003-.016.015.015 0 00-.016-.003.59.59 0 00-.076.037 2.595 2.595 0 00-.825.75 3.317 3.317 0 00-.53 1.224 2.961 2.961 0 00-.036.947.005.005 0 00.009 0l.064-.089zm13.143-.942c-.136.069-.282.106-.438.11-.306.01-.548-.09-.7-.357a.018.018 0 00-.027-.005l-.085.071c-.322.25-.288.603-.04.893.168.198.38.326.634.384.448.101.9.014 1.242-.295.233-.21.37-.47.41-.782.01-.071.02-.158.028-.26a.077.077 0 01.063-.069.263.263 0 01.11.012c.435.119.668.58.77.984.003.016 0 .024-.01.025-.121.005-.25.017-.386.035a.016.016 0 00-.013.013l.001.01a.016.016 0 00.007.006c.143.076.274.283.258.445-.016.163-.034.329-.053.5-.015.139-.01.249-.009.422 0 .01.002.02.006.03.04.114.082.196.217.19.01 0 .018-.003.027-.007.166-.069.242-.24.286-.403.08-.282.069-.554-.035-.816a1.831 1.831 0 00-.112-.21 1.95 1.95 0 01-.108-.211 1.833 1.833 0 00-.02-.744c-.16-.667-.796-1.429-1.555-1.175a.81.81 0 00-.56.84c.013.111.06.243.092.364zm-2.6.49a2.111 2.111 0 01-.429.433c-.291.217-.615.349-.97.394-.157.02-.335.01-.48.014a.618.618 0 00-.315.11c-.162.104-.35.23-.53.316-.347.166-.71.25-1.09.25a8.8 8.8 0 01-.405-.007.302.302 0 00-.252.105 38.7 38.7 0 01-.397.443l-.322.215-.319.16c-.223.114-.4.269-.53.466-.119.18-.17.362-.26.626a1.477 1.477 0 01-.374.58l-.337.198a.017.017 0 00-.007.02c.012.033.032.078.058.136.11.24.135.491.077.756a.989.989 0 01-.217.414.846.846 0 01-.428.221c-.456.069-.788-.255-.978-.629l-.002-.002h-.003l-.002.002-.001.003.067.316c.028.131.095.297.17.435.054.096.104.19.15.283-.013.121-.063.2-.15.238-.1.043-.238-.005-.338-.048a15.309 15.309 0 01-.44-.2.372.372 0 01-.205-.209c-.058-.165-.107-.359-.173-.494a1.045 1.045 0 00-.588-.533.36.36 0 00-.121-.024c-.008-.013-.01-.017-.004-.012l-.03-.485c-.024-.32.024-.64.37-.756.48-.057.528.515.79.722a.013.013 0 00.015 0 .012.012 0 00.006-.012c-.044-.306-.09-.588-.296-.818a.518.518 0 00-.465-.176c-.416.047-.58.386-.622.762-.021.193-.024.371-.009.535.023.356.12.796.163 1.006.047.233.11.455.188.665.07.19.212.426.299.554.13.194.301.362.51.504.366.246.76.297 1.186.153.058.431.147.86.266 1.29.026.092.057.177.093.253.186.518.478.98.876 1.384.255.26.515.48.78.664.007.012.033.03.077.05a.6.6 0 00.106.094c.484.329 1.004.613 1.56.852l.239.103c.197.087.36.15.485.191.295.094.462.146.502.158.39.113.79.172 1.2.175.312.004.598-.049.869-.184.207-.105.424-.32.505-.553.162-.468-.062-.95-.47-1.214a1.54 1.54 0 00-.665-.287 1.85 1.85 0 00-.492-.029c.07-.11.115-.178.135-.204.133-.175.385-.209.584-.177.167.028.309.053.426.077.223.045.397-.064.352-.313a.362.362 0 00-.179-.272 2.06 2.06 0 00-.65-.223.944.944 0 00-.268-.02c-.22.028-.395.05-.524.063a.519.519 0 00-.287.152.412.412 0 01-.145-.06.216.216 0 01-.063-.107c.05-.172.161-.264.336-.275a.097.097 0 01.07.026c.162.152.362.091.557.024a.99.99 0 01.715.01c.087.034.298.125.42.112.142-.016.214-.1.215-.251a.062.062 0 00-.03-.054 4.639 4.639 0 01-.144-.1.14.14 0 01-.033-.036 3.76 3.76 0 01-.135-.218c-.085-.147-.238-.192-.397-.23a.506.506 0 01-.246-.154c.1-.196.272-.313.515-.349a.596.596 0 01.32.037c.269.11.46.186.575.227.312.11.649.115.818-.213a.6.6 0 00.086-.284c.02-.508.05-1.347.092-2.517l.039-1.008c.01-.273.084-.515.323-.668.19-.11.433-.097.645-.112.428-.03.485-.436.408-.77-.064-.356-.321-.667-.634-.838a2.432 2.432 0 00-.531-.207 3.244 3.244 0 01-.357-.148 2 2 0 01-.355-.263v-.004l.004-.002h.004l.202.091c.137.056.28.076.428.06.309-.032.485-.33.288-.6-.13-.18-.364-.324-.53-.439a2.118 2.118 0 01-.405-.376 1.616 1.616 0 01-.288-.516.004.004 0 00-.005 0l-.001.002a1.46 1.46 0 01-.241.55zm3.914.445c-.011.02-.018.064-.031.082-.183.239-.33.338-.595.532a.794.794 0 00-.257.319.01.01 0 00.009.01c.105.008.212.002.322-.018.501-.093.61-.479.567-.921l-.002-.005a.008.008 0 00-.009-.002.008.008 0 00-.004.003zM3.266 7.891c-.048.295-.042.593.018.893.09.507.311 1.007.687 1.366.048.046.106.09.175.13.014.014.028.018.042.011.107-.05.223-.125.35-.223a.031.031 0 00.012-.025v-.09a.071.071 0 00-.066-.07.834.834 0 01-.453-.177 1.05 1.05 0 01-.356-.521 6.047 6.047 0 00-.07-.203l.017-.145a.007.007 0 01.015 0c.036.23.177.527.395.634a.29.29 0 00.309-.025.779.779 0 00.173-.35.079.079 0 00-.032-.081c-.355-.24-.385-.6-.078-.88.358-.325.868-.352 1.273-.125.034.019.087.053.157.104.05.036.102.072.155.107.075.074.17.158.285.25.2.163.408.24.67.25.411.017.748-.127 1.01-.432.127-.147.187-.294.292-.512a.919.919 0 01.611-.511.007.007 0 00-.004-.01l-.318-.069a1.755 1.755 0 00-.358-.045 1.02 1.02 0 00-.534.081c-.196.09-.357.28-.555.334-.267.073-.471-.005-.611-.233a.34.34 0 01-.034-.158l.009-.007c.213.276.51.121.558-.178a.66.66 0 00-.106-.473c-.213-.316-.518-.463-.916-.441-.397.022-.773.248-1.022.548-.192.232-.402.547-.709.458-.226-.066-.235-.278-.19-.477a.01.01 0 00-.015-.01c-.09.056-.165.115-.224.176a2.093 2.093 0 00-.562 1.129zm3.221 1.627a.99.99 0 00.174.337c.054.068.115.132.181.193.08.157.178.264.293.321.26.13.554.024.658-.251.078-.237.047-.444-.092-.62a.626.626 0 00-.435-.239 2.97 2.97 0 00-.527.017l-.35-.21a.01.01 0 00-.011 0 .01.01 0 00-.005.011c.016.16.054.307.114.44zM4.23 10.86a1.16 1.16 0 00-.08.132c-.074.158-.109.323-.102.495.01.26.196.672.528.6a.343.343 0 00.249-.202.3.3 0 00.042-.15 1.418 1.418 0 00-.093-.4 2.793 2.793 0 01-.16-.754.036.036 0 00-.008-.019.017.017 0 00-.01-.006c-.004-.001-.008 0-.012.002a1.674 1.674 0 00-.354.302zm.109 2.45a1.921 1.921 0 00.337.464c.002.001.003.002.005.001a.013.013 0 00.01-.004l.08-.096a1.21 1.21 0 01.622-.114c.03.003.06.005.091.004l.15.082c.084.057.17.115.257.176a2.12 2.12 0 01.272.259h.003a.005.005 0 00.002-.002v-.003a1.983 1.983 0 00-.133-.625 1.117 1.117 0 00-.635-.61 33.41 33.41 0 00-.275-.285.482.482 0 00-.413-.152.752.752 0 01-.516-.07.01.01 0 00-.008.004 1.79 1.79 0 00.151.971zm2.137 1.902c.006.025.008.037.006.037.023.307.058.602.106.887.045.443.092.81.14 1.1l.419 2.536c.092.552.126.872.185 1.457.022.214.095.407.218.578.203.283.438.53.705.744.459.367.97.646 1.534.838.444.168.906.28 1.385.339.476.054.963.053 1.461-.004.395-.038.794-.12 1.196-.245.119-.038.304-.104.554-.2a.891.891 0 00.114-.06.588.588 0 00.128-.046c.311-.15.613-.308.905-.473a2.43 2.43 0 00.276-.185v-.007a.012.012 0 00-.005-.005.011.011 0 00-.007-.002c-.716.065-1.372-.067-2.035-.383-.574-.273-1.088-.718-1.552-1.21a26.147 26.147 0 01-1.289-1.46l-2.286-2.761a9.577 9.577 0 01-.753-1.023 4.608 4.608 0 01-.577-1.342l-.147-.61a.018.018 0 00-.019-.014c-.45.038-.68.566-.688.958a3.17 3.17 0 00.026.556zm-1.47-1.214a.506.506 0 00-.027.551.638.638 0 00.231.251.105.105 0 00.088.011c.302-.095.58-.148.887-.034h.004a.008.008 0 00.004-.002.007.007 0 00.001-.008 1.908 1.908 0 00-.302-.475 1.227 1.227 0 00-.432-.357.533.533 0 00-.21-.065c-.098-.003-.18.04-.244.128zm.96 2.255a.76.76 0 00.244.08l.14.016a.033.033 0 00.031-.018 2.273 2.273 0 00-.07-.799.02.02 0 00-.007-.01.019.019 0 00-.012-.004c-.179.008-.356.033-.533.074-.009-.01-.023-.016-.043-.018a1.019 1.019 0 01-.384-.434.012.012 0 00-.017.009c-.069.454.279.892.652 1.104z\\\"></path><path d=\\\"M7.126 3.698a2.128 2.128 0 00-.016 1.07l-.091-.023c-.31-.215-.696-.139-.966.09a.02.02 0 01-.018.005.978.978 0 00-.294-.023c.15-.23.352-.383.604-.457.083-.024.187-.044.31-.058a.023.023 0 00.018-.015c.091-.24.242-.436.453-.59zM14.187 8.01c.415.181.695.507.724.97a.035.035 0 01-.009.025l-.018.021c-.241.232-.463.462-.735.66-.23.165-.56.315-.849.297a.335.335 0 01-.24-.112.968.968 0 01-.038-.37.043.043 0 00-.038-.047.448.448 0 01-.148-.045c.06-.134.094-.251.102-.352.029-.327-.238-.5-.53-.538a1.515 1.515 0 00-.7.074c-.1.03-.193.073-.279.126a.756.756 0 00-.164.14 9.013 9.013 0 00-.144.164.02.02 0 00-.004.012c0 .005.002.01.005.013.015.016.022.031.021.046l-.178.074-.172-.031a6.66 6.66 0 00-.755-.142 3.515 3.515 0 01-.465-.116c.215.01.404 0 .565-.033a2.67 2.67 0 00.502-.156c.564-.236.991-.43 1.538-.496a.041.041 0 00.035-.032c.047-.211.19-.285.397-.327.138-.029.313-.035.526-.02.378.028.715.066 1.05.196z\\\"></path></svg>\",\n  \"alibaba\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M24 14.014c-2.8 1.512-5.62 2.896-8.759 3.524-.7.139-1.476.139-2.187.043-.678-.085-1.017-.682-.776-1.31.23-.585.536-1.181.93-1.671.852-1.065 1.814-2.034 2.678-3.088a15.75 15.75 0 001.422-2.054c.306-.511.164-1.129-.372-1.384-.897-.437-1.859-.745-2.81-1.075-.11-.043-.274.074-.492.149.273.244.47.425.743.67-2.821.48-5.49 1.16-8.08 2.098-.012.053-.033.095-.023.117.383.585.208 1.032-.35 1.394a2.365 2.365 0 00-.568.522c1.706.5 3.226.213 4.68-.735-.087-.127-.175-.244-.262-.372.546.096.874.394.918.862.011.107-.054.213-.087.32-.077-.086-.175-.17-.24-.267-.045-.064-.056-.138-.088-.245-1.728 1.15-3.587 1.438-5.632.842 0 .404-.022.745.011 1.075.022.287-.098.415-.36.564-.591.362-1.204.735-1.696 1.214-.59.585-.371 1.299.427 1.597.907.34 1.859.35 2.81.234 1.126-.139 2.23-.32 3.456-.49-1.433.67-2.844 1.14-4.33 1.33-1.04.14-2.078.214-3.106-.084-1.476-.415-2.133-1.501-1.75-2.96.361-1.363 1.236-2.449 2.176-3.45 3.139-3.332 7.108-5.024 11.7-5.365 1.072-.074 2.155.064 3.16.511 1.411.639 2.002 1.99 1.313 3.354-.448.905-1.072 1.735-1.695 2.555-.612.809-1.301 1.554-1.946 2.331-.186.234-.361.48-.503.745-.274.5-.088.83.492.778 1.213-.118 2.45-.213 3.62-.511 1.716-.437 3.389-1.054 5.084-1.597.175-.043.339-.107.492-.17z\\\"></path></svg>\",\n  \"anthropic\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M13.827 3.52h3.603L24 20h-3.603l-6.57-16.48zm-7.258 0h3.767L16.906 20h-3.674l-1.343-3.461H5.017l-1.344 3.46H0L6.57 3.522zm4.132 9.959L8.453 7.687 6.205 13.48H10.7z\\\"></path></svg>\",\n  \"arcee\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M13.236 2.377L2.751 20.493H0L11.863 0l1.373 2.377zm3.554 6.156l-9.606 11.96H4.13L15.511 6.32l1.279 2.212zm6.908 11.96H14.05l8.406-2.151 1.242 2.15zm-3.42-5.922l-7.843 5.92H8.482l10.597-7.997 1.2 2.077z\\\"></path></svg>\",\n  \"baidu\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M8.859 11.735c1.017-1.71 4.059-3.083 6.202.286 1.579 2.284 4.284 4.397 4.284 4.397s2.027 1.601.73 4.684c-1.24 2.956-5.64 1.607-6.005 1.49l-.024-.009s-1.746-.568-3.776-.112c-2.026.458-3.773.286-3.773.286l-.045-.001c-.328-.01-2.38-.187-3.001-2.968-.675-3.028 2.365-4.687 2.592-4.968.226-.288 1.802-1.37 2.816-3.085zm.986 1.738v2.032h-1.64s-1.64.138-2.213 2.014c-.2 1.252.177 1.99.242 2.148.067.157.596 1.073 1.927 1.342h3.078v-7.514l-1.394-.022zm3.588 2.191l-1.44.024v3.956s.064.985 1.44 1.344h3.541v-5.3h-1.528v3.979h-1.46s-.466-.068-.553-.447v-3.556zM9.82 16.715v3.06H8.58s-.863-.045-1.126-1.049c-.136-.445.02-.959.088-1.16.063-.203.353-.671.951-.85H9.82zm9.525-9.036c2.086 0 2.646 2.06 2.646 2.742 0 .688.284 3.597-2.309 3.655-2.595.057-2.704-1.77-2.704-3.08 0-1.374.277-3.317 2.367-3.317zM4.24 6.08c1.523-.135 2.645 1.55 2.762 2.513.07.625.393 3.486-1.975 4-2.364.515-3.244-2.249-2.984-3.544 0 0 .28-2.797 2.197-2.969zm8.847-1.483c.14-1.31 1.69-3.316 2.931-3.028 1.236.285 2.367 1.944 2.137 3.37-.224 1.428-1.345 3.313-3.095 3.082-1.748-.226-2.143-1.823-1.973-3.424zM9.425 1c1.307 0 2.364 1.519 2.364 3.398 0 1.879-1.057 3.4-2.364 3.4s-2.367-1.521-2.367-3.4C7.058 2.518 8.118 1 9.425 1z\\\"></path></svg>\",\n  \"bedrock\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M13.05 15.513h3.08c.214 0 .389.177.389.394v1.82a1.704 1.704 0 011.296 1.661c0 .943-.755 1.708-1.685 1.708-.931 0-1.686-.765-1.686-1.708 0-.807.554-1.484 1.297-1.662v-1.425h-2.69v4.663a.395.395 0 01-.188.338l-2.69 1.641a.385.385 0 01-.405-.002l-4.926-3.086a.395.395 0 01-.185-.336V16.3L2.196 14.87A.395.395 0 012 14.555L2 14.528V9.406c0-.14.073-.27.192-.34l2.465-1.462V4.448c0-.129.062-.249.165-.322l.021-.014L9.77 1.058a.385.385 0 01.407 0l2.69 1.675a.395.395 0 01.185.336V7.6h3.856V5.683a1.704 1.704 0 01-1.296-1.662c0-.943.755-1.708 1.685-1.708.931 0 1.685.765 1.685 1.708 0 .807-.553 1.484-1.296 1.662v2.311a.391.391 0 01-.389.394h-4.245v1.806h6.624a1.69 1.69 0 011.64-1.313c.93 0 1.685.764 1.685 1.707 0 .943-.754 1.708-1.685 1.708a1.69 1.69 0 01-1.64-1.314H13.05v1.937h4.953l.915 1.18a1.66 1.66 0 01.84-.227c.931 0 1.685.764 1.685 1.707 0 .943-.754 1.708-1.685 1.708-.93 0-1.685-.765-1.685-1.708 0-.346.102-.668.276-.937l-.724-.935H13.05v1.806zM9.973 1.856L7.93 3.122V6.09h-.778V3.604L5.435 4.669v2.945l2.11 1.36L9.712 7.61V5.334h.778V7.83c0 .136-.07.263-.184.335L7.963 9.638v2.081l1.422 1.009-.446.646-1.406-.998-1.53 1.005-.423-.66 1.605-1.055v-1.99L5.038 8.29l-2.26 1.34v1.676l1.972-1.189.398.677-2.37 1.429V14.3l2.166 1.258 2.27-1.368.397.677-2.176 1.311V19.3l1.876 1.175 2.365-1.426.398.678-2.017 1.216 1.918 1.201 2.298-1.403v-5.78l-4.758 2.893-.4-.675 5.158-3.136V3.289L9.972 1.856zM16.13 18.47a.913.913 0 00-.908.92c0 .507.406.918.908.918a.913.913 0 00.907-.919.913.913 0 00-.907-.92zm3.63-3.81a.913.913 0 00-.908.92c0 .508.406.92.907.92a.913.913 0 00.908-.92.913.913 0 00-.908-.92zm1.555-4.99a.913.913 0 00-.908.92c0 .507.407.918.908.918a.913.913 0 00.907-.919.913.913 0 00-.907-.92zM17.296 3.1a.913.913 0 00-.907.92c0 .508.406.92.907.92a.913.913 0 00.908-.92.913.913 0 00-.908-.92z\\\"></path></svg>\",\n  \"bfl\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M17.113 10.248H14.56l-2.553-3.616-7.963 11.27h2.558l5.405-7.654h2.552l-5.404 7.653h2.565l5.392-7.653L24 20 19.97 20v-2.091l-2.857-4.044-2.842 4.037V20H0L12.008 3l5.105 7.249z\\\"></path></svg>\",\n  \"bytedance\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M14.944 18.587l-1.704-.445V10.01l1.824-.462c1-.254 1.84-.461 1.88-.453.032 0 .056 2.235.056 4.972v4.973l-.176-.008c-.104 0-.952-.207-1.88-.446z\\\"></path><path d=\\\"M7 16.542c0-2.736.024-4.98.064-4.98.032-.008.872.2 1.88.454l1.816.461-.016 4.05-.024 4.049-1.632.422c-.896.23-1.736.445-1.856.469L7 21.523v-4.98z\\\"></path><path d=\\\"M19.24 12.477c0-9.03.008-9.515.144-9.475.072.024.784.207 1.576.406.792.207 1.576.405 1.744.445l.296.08-.016 8.56-.024 8.568-1.624.414c-.888.23-1.728.437-1.856.47l-.24.055v-9.523z\\\"></path><path d=\\\"M1 12.509c0-4.678.024-8.505.064-8.505.032 0 .872.207 1.872.454l1.824.461v7.582c0 4.16-.016 7.574-.032 7.574-.024 0-.872.215-1.88.47L1 21.013v-8.505z\\\"></path></svg>\",\n  \"claude\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z\\\"></path></svg>\",\n  \"cohere\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path clip-rule=\\\"evenodd\\\" d=\\\"M8.128 14.099c.592 0 1.77-.033 3.398-.703 1.897-.781 5.672-2.2 8.395-3.656 1.905-1.018 2.74-2.366 2.74-4.18A4.56 4.56 0 0018.1 1H7.549A6.55 6.55 0 001 7.55c0 3.617 2.745 6.549 7.128 6.549z\\\"></path><path clip-rule=\\\"evenodd\\\" d=\\\"M9.912 18.61a4.387 4.387 0 012.705-4.052l3.323-1.38c3.361-1.394 7.06 1.076 7.06 4.715a5.104 5.104 0 01-5.105 5.104l-3.597-.001a4.386 4.386 0 01-4.386-4.387z\\\"></path><path d=\\\"M4.776 14.962A3.775 3.775 0 001 18.738v.489a3.776 3.776 0 007.551 0v-.49a3.775 3.775 0 00-3.775-3.775z\\\"></path></svg>\",\n  \"deepseek\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z\\\"></path></svg>\",\n  \"fishaudio\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M23.556 12.189c.244 0 .444.126.444.28v.951c0 .154-.2.28-.444.28s-.444-.126-.444-.28v-.952c0-.153.2-.279.444-.279zm-1.764.372c.244 0 .444.126.444.28v2.095c0 .153-.2.279-.444.279-.245 0-.444-.126-.444-.28V12.84c0-.153.2-.28.444-.28zm-1.765.434c.244 0 .444.125.444.279v2.355c0 .154-.2.28-.444.28s-.444-.126-.444-.28v-2.355c0-.154.2-.28.444-.28zm-1.764.359c.244 0 .444.125.444.279v2.33c0 .153-.2.279-.444.279s-.444-.126-.444-.28v-2.33c0-.153.2-.278.444-.278zm-1.765.316c.245 0 .444.126.444.28v2.017c0 .154-.2.28-.444.28s-.444-.126-.444-.28V13.95c0-.154.2-.28.444-.28zm-1.755 1.287c.244 0 .444.125.444.28v.64c0 .153-.2.278-.444.278s-.444-.125-.444-.279v-.64c0-.154.2-.28.444-.28z\\\" opacity=\\\".35\\\"></path><path d=\\\"M23.556 9.63c.244 0 .444.125.444.279v1.575c0 .154-.2.28-.444.28s-.444-.126-.444-.28V9.909c0-.154.2-.28.444-.28zm-1.764-1.058c.244 0 .444.125.444.28v2.81c0 .153-.2.278-.444.278-.245 0-.444-.125-.444-.279v-2.81c0-.154.2-.28.444-.28zm-1.765-.398c.244 0 .444.126.444.28v3.667c0 .153-.2.28-.444.28s-.444-.127-.444-.28V8.453c0-.153.2-.28.444-.28zM18.263 8c.244 0 .444.126.444.28v4.29c0 .154-.2.28-.444.28s-.444-.126-.444-.28V8.28c0-.154.2-.28.444-.28zm-1.765.109c.245 0 .444.126.444.28v4.355c0 .154-.2.28-.444.28s-.444-.126-.444-.28V8.388c0-.153.2-.28.444-.28zm-1.755.273c.244 0 .444.125.444.28v5.434c0 .153-.2.28-.444.28s-.444-.126-.444-.28V8.66c0-.154.2-.28.444-.28zm-1.801.463c.244 0 .444.125.444.279v6.162c0 .154-.2.28-.444.28s-.444-.126-.444-.28V9.124c0-.154.2-.28.444-.28zm-1.764.784c.244 0 .444.126.444.28v5.928c0 .154-.2.28-.444.28-.245 0-.444-.126-.444-.28V9.909c0-.154.2-.28.444-.28zm-1.765 1.022c.245 0 .444.126.444.28v5.161c0 .154-.2.28-.444.28s-.444-.126-.444-.28V10.93c0-.154.2-.28.444-.28zm-1.764.706c.244 0 .444.126.444.28v5.084c0 .153-.2.279-.444.279s-.444-.126-.444-.28v-5.083c0-.154.2-.28.444-.28zm-1.756.585c.245 0 .444.126.444.28v2.705c0 .154-.2.28-.444.28s-.444-.126-.444-.28v-2.706c0-.153.2-.279.444-.279zM4.076 9.304c.244 0 .444.126.444.28v3.771c0 .154-.2.28-.444.28s-.444-.126-.444-.28V9.584c0-.154.2-.28.444-.28zm-1.814.247c.244 0 .443.126.443.28v1.16c0 .153-.2.279-.443.279-.245 0-.444-.126-.444-.28V9.83c0-.153.2-.279.444-.279zM.444 9.395c.244 0 .444.126.444.28v.523c0 .153-.2.279-.444.279S0 10.351 0 10.197v-.522c0-.154.2-.28.444-.28zm5.45-.442c.244 0 .443.126.443.28v.392c0 .154-.2.28-.444.28s-.444-.126-.444-.28v-.393c0-.154.2-.28.444-.28z\\\"></path></svg>\",\n  \"gemini\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z\\\"></path></svg>\",\n  \"gemma\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M12.34 5.953a8.233 8.233 0 01-.247-1.125V3.72a8.25 8.25 0 015.562 2.232H12.34zm-.69 0c.113-.373.199-.755.257-1.145V3.72a8.25 8.25 0 00-5.562 2.232h5.304zm-5.433.187h5.373a7.98 7.98 0 01-.267.696 8.41 8.41 0 01-1.76 2.65L6.216 6.14zm-.264-.187H2.977v.187h2.915a8.436 8.436 0 00-2.357 5.767H0v.186h3.535a8.436 8.436 0 002.357 5.767H2.977v.186h2.976v2.977h.187v-2.915a8.436 8.436 0 005.767 2.357V24h.186v-3.535a8.436 8.436 0 005.767-2.357v2.915h.186v-2.977h2.977v-.186h-2.915a8.436 8.436 0 002.357-5.767H24v-.186h-3.535a8.436 8.436 0 00-2.357-5.767h2.915v-.187h-2.977V2.977h-.186v2.915a8.436 8.436 0 00-5.767-2.357V0h-.186v3.535A8.436 8.436 0 006.14 5.892V2.977h-.187v2.976zm6.14 14.326a8.25 8.25 0 005.562-2.233H12.34c-.108.367-.19.743-.247 1.126v1.107zm-.186-1.087a8.015 8.015 0 00-.258-1.146H6.345a8.25 8.25 0 005.562 2.233v-1.087zm-8.186-7.285h1.107a8.23 8.23 0 001.125-.247V6.345a8.25 8.25 0 00-2.232 5.562zm1.087.186H3.72a8.25 8.25 0 002.232 5.562v-5.304a8.012 8.012 0 00-1.145-.258zm15.47-.186a8.25 8.25 0 00-2.232-5.562v5.315c.367.108.743.19 1.126.247h1.107zm-1.086.186c-.39.058-.772.144-1.146.258v5.304a8.25 8.25 0 002.233-5.562h-1.087zm-1.332 5.69V12.41a7.97 7.97 0 00-.696.267 8.409 8.409 0 00-2.65 1.76l3.346 3.346zm0-6.18v-5.45l-.012-.013h-5.451c.076.235.162.468.26.696a8.698 8.698 0 001.819 2.688 8.698 8.698 0 002.688 1.82c.228.097.46.183.696.259zM6.14 17.848V12.41c.235.078.468.167.696.267a8.403 8.403 0 012.688 1.799 8.404 8.404 0 011.799 2.688c.1.228.19.46.267.696H6.152l-.012-.012zm0-6.245V6.326l3.29 3.29a8.716 8.716 0 01-2.594 1.728 8.14 8.14 0 01-.696.259zm6.257 6.257h5.277l-3.29-3.29a8.716 8.716 0 00-1.728 2.594 8.135 8.135 0 00-.259.696zm-2.347-7.81a9.435 9.435 0 01-2.88 1.96 9.14 9.14 0 012.88 1.94 9.14 9.14 0 011.94 2.88 9.435 9.435 0 011.96-2.88 9.14 9.14 0 012.88-1.94 9.435 9.435 0 01-2.88-1.96 9.434 9.434 0 01-1.96-2.88 9.14 9.14 0 01-1.94 2.88z\\\"></path></svg>\",\n  \"google\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M23 12.245c0-.905-.075-1.565-.236-2.25h-10.54v4.083h6.186c-.124 1.014-.797 2.542-2.294 3.569l-.021.136 3.332 2.53.23.022C21.779 18.417 23 15.593 23 12.245z\\\"></path><path d=\\\"M12.225 23c3.03 0 5.574-.978 7.433-2.665l-3.542-2.688c-.948.648-2.22 1.1-3.891 1.1a6.745 6.745 0 01-6.386-4.572l-.132.011-3.465 2.628-.045.124C4.043 20.531 7.835 23 12.225 23z\\\"></path><path d=\\\"M5.84 14.175A6.65 6.65 0 015.463 12c0-.758.138-1.491.361-2.175l-.006-.147-3.508-2.67-.115.054A10.831 10.831 0 001 12c0 1.772.436 3.447 1.197 4.938l3.642-2.763z\\\"></path><path d=\\\"M12.225 5.253c2.108 0 3.529.892 4.34 1.638l3.167-3.031C17.787 2.088 15.255 1 12.225 1 7.834 1 4.043 3.469 2.197 7.062l3.63 2.763a6.77 6.77 0 016.398-4.572z\\\"></path></svg>\",\n  \"grok\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815\\\"></path></svg>\",\n  \"ibm\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path clip-rule=\\\"evenodd\\\" d=\\\"M24 16.333V17h-3.158v-.667H24zm-7.579 0V17h-3.158v-.667h3.158zm2.464 0L18.63 17l-.25-.667h.504zm-7.075 0a2.528 2.528 0 01-1.717.667h-5.04v-.667h6.757zm-7.389 0V17H0v-.667h4.421zm12-1.333v.667h-3.158V15h3.158zm2.958 0l-.246.667h-1L17.885 15h1.494zm-6.937 0c-.057.237-.148.46-.265.667H5.053V15h7.39zm-8.02 0v.667H0V15h4.421zM24 15v.667h-3.158V15H24zm-1.263-1.333v.666h-1.895v-.666h1.895zm-6.316 0v.666h-1.895v-.666h1.895zm3.453 0l-.248.666h-1.989l-.25-.666h2.487zm-7.52 0c.056.212.088.435.088.666h-2.337v-.666h2.249zm-4.143 0v.666H6.316v-.666H8.21zm-5.053 0v.666H1.263v-.666h1.895zm19.579-1.334V13h-1.895v-.667h1.895zm-6.316 0V13h-1.895v-.667h1.895zm3.948 0l-.247.667h-2.987l-.245-.667h3.48zm-8.792 0c.218.188.405.414.55.667H6.315v-.667h5.26zm-8.42 0V13H1.264v-.667h1.895zM18.456 11l.177.539.176-.539h3.929v.667h-1.895v-.613l-.215.613H16.63l-.209-.613v.613h-1.895V11h3.929zM3.158 11v.667H1.263V11h1.895zm8.968 0a2.555 2.555 0 01-.55.667h-5.26V11h5.81zm10.61-1.333v.666h-3.709l.224-.666h3.486zm-4.722 0l.224.666h-3.712v-.666h3.488zm-5.572 0c0 .23-.032.454-.088.666h-2.249v-.666h2.337zm-4.231 0v.666H6.316v-.666H8.21zm-5.053 0v.666H1.263v-.666h1.895zm14.419-1.334l.22.667h-4.534v-.667h4.314zm6.423 0V9h-4.536l.229-.667H24zm-11.823 0c.117.206.208.43.265.667h-7.39v-.667h7.125zm-7.756 0V9H0v-.667h4.421zM17.133 7l.224.667h-4.094V7h3.87zM24 7v.667h-4.089L20.13 7H24zM10.093 7c.662 0 1.264.253 1.717.667H5.053V7h5.04zM4.42 7v.667H0V7h4.421z\\\"></path></svg>\",\n  \"inception\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M14.767 1H7.884L1 7.883v6.884h6.884V7.883h6.883V1zM9.234 23h6.882L23 16.116V9.233h-6.884v6.883H9.234V23z\\\"></path></svg>\",\n  \"kimi\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M21.846 0a1.923 1.923 0 110 3.846H20.15a.226.226 0 01-.227-.226V1.923C19.923.861 20.784 0 21.846 0z\\\"></path><path d=\\\"M11.065 11.199l7.257-7.2c.137-.136.06-.41-.116-.41H14.3a.164.164 0 00-.117.051l-7.82 7.756c-.122.12-.302.013-.302-.179V3.82c0-.127-.083-.23-.185-.23H3.186c-.103 0-.186.103-.186.23V19.77c0 .128.083.23.186.23h2.69c.103 0 .186-.102.186-.23v-3.25c0-.069.025-.135.069-.178l2.424-2.406a.158.158 0 01.205-.023l6.484 4.772a7.677 7.677 0 003.453 1.283c.108.012.2-.095.2-.23v-3.06c0-.117-.07-.212-.164-.227a5.028 5.028 0 01-2.027-.807l-5.613-4.064c-.117-.078-.132-.279-.028-.381z\\\"></path></svg>\",\n  \"kling\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path clip-rule=\\\"evenodd\\\" d=\\\"M5.493 21.234c-1.112-1.451-1.109-4.263-.081-7.459l-4.557-2.63a1.683 1.683 0 01-.85-1.304 1.505 1.505 0 01.08-.622 13.18 13.18 0 011.037-2.255c3.476-6.02 10.916-8.23 16.619-4.938.46.266.82.67 1.081 1.184.785 1.545.685 4.096-.234 6.954l4.557 2.631c.339.196.596.492.736.832a1.53 1.53 0 01.034 1.093 13.146 13.146 0 01-1.037 2.255c-3.476 6.02-10.916 8.23-16.619 4.938a2.6 2.6 0 01-.766-.68zm11.096-6.615c-2.073 3.591-5.808 5.316-8.343 3.852-1.267-.731-1.994-2.122-2.145-3.778-.095-1.035.036-2.173.4-3.32.217-.684.517-1.37.902-2.039l.008-.014c2.073-3.59 5.808-5.315 8.343-3.852.633.366 1.13.895 1.49 1.54.986 1.772.922 4.415-.285 6.914-.111.23-.232.457-.362.683l-.008.014z\\\"></path></svg>\",\n  \"kwaipilot\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path clip-rule=\\\"evenodd\\\" d=\\\"M11.765.03C5.327.03.108 5.25.108 11.686c0 3.514 1.556 6.665 4.015 8.804L9.89 8.665h6.451L9.31 23.083c.807.173 1.63.26 2.455.26 6.438 0 11.657-5.22 11.657-11.658S18.202.028 11.765.028V.03z\\\"></path></svg>\",\n  \"liquid\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M12.028 8.546l-.008.005 3.03 5.25a3.94 3.94 0 01.643 2.162c0 .754-.212 1.46-.58 2.062l6.173-1.991L11.63 0 9.304 3.872l2.724 4.674zM6.837 24l4.85-4.053h-.013c-2.219 0-4.017-1.784-4.017-3.984 0-.794.235-1.534.64-2.156l2.865-4.976-2.381-4.087L2 16.034 6.83 24h.007zM13.737 19.382h-.001L8.222 24h8.182l4.148-6.769-6.815 2.151z\\\"></path></svg>\",\n  \"meta\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M6.897 4c1.915 0 3.516.932 5.43 3.376l.282-.373c.19-.246.383-.484.58-.71l.313-.35C14.588 4.788 15.792 4 17.225 4c1.273 0 2.469.557 3.491 1.516l.218.213c1.73 1.765 2.917 4.71 3.053 8.026l.011.392.002.25c0 1.501-.28 2.759-.818 3.7l-.14.23-.108.153c-.301.42-.664.758-1.086 1.009l-.265.142-.087.04a3.493 3.493 0 01-.302.118 4.117 4.117 0 01-1.33.208c-.524 0-.996-.067-1.438-.215-.614-.204-1.163-.56-1.726-1.116l-.227-.235c-.753-.812-1.534-1.976-2.493-3.586l-1.43-2.41-.544-.895-1.766 3.13-.343.592C7.597 19.156 6.227 20 4.356 20c-1.21 0-2.205-.42-2.936-1.182l-.168-.184c-.484-.573-.837-1.311-1.043-2.189l-.067-.32a8.69 8.69 0 01-.136-1.288L0 14.468c.002-.745.06-1.49.174-2.23l.1-.573c.298-1.53.828-2.958 1.536-4.157l.209-.34c1.177-1.83 2.789-3.053 4.615-3.16L6.897 4zm-.033 2.615l-.201.01c-.83.083-1.606.673-2.252 1.577l-.138.199-.01.018c-.67 1.017-1.185 2.378-1.456 3.845l-.004.022a12.591 12.591 0 00-.207 2.254l.002.188c.004.18.017.36.04.54l.043.291c.092.503.257.908.486 1.208l.117.137c.303.323.698.492 1.17.492 1.1 0 1.796-.676 3.696-3.641l2.175-3.4.454-.701-.139-.198C9.11 7.3 8.084 6.616 6.864 6.616zm10.196-.552l-.176.007c-.635.048-1.223.359-1.82.933l-.196.198c-.439.462-.887 1.064-1.367 1.807l.266.398c.18.274.362.56.55.858l.293.475 1.396 2.335.695 1.114c.583.926 1.03 1.6 1.408 2.082l.213.262c.282.326.529.54.777.673l.102.05c.227.1.457.138.718.138.176.002.35-.023.518-.073.338-.104.61-.32.813-.637l.095-.163.077-.162c.194-.459.29-1.06.29-1.785l-.006-.449c-.08-2.871-.938-5.372-2.2-6.798l-.176-.189c-.67-.683-1.444-1.074-2.27-1.074z\\\"></path></svg>\",\n  \"microsoft\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M11.49 2H2v9.492h9.492V2h-.002z\\\"></path><path d=\\\"M22 2h-9.492v9.492H22V2z\\\"></path><path d=\\\"M11.49 12.508H2V22h9.492v-9.492h-.002z\\\"></path><path d=\\\"M22 12.508h-9.492V22H22v-9.492z\\\"></path></svg>\",\n  \"minimax\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M16.278 2c1.156 0 2.093.927 2.093 2.07v12.501a.74.74 0 00.744.709.74.74 0 00.743-.709V9.099a2.06 2.06 0 012.071-2.049A2.06 2.06 0 0124 9.1v6.561a.649.649 0 01-.652.645.649.649 0 01-.653-.645V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v7.472a2.037 2.037 0 01-2.048 2.026 2.037 2.037 0 01-2.048-2.026v-12.5a.785.785 0 00-.788-.753.785.785 0 00-.789.752l-.001 15.904A2.037 2.037 0 0113.441 22a2.037 2.037 0 01-2.048-2.026V18.04c0-.356.292-.645.652-.645.36 0 .652.289.652.645v1.934c0 .263.142.506.372.638.23.131.514.131.744 0a.734.734 0 00.372-.638V4.07c0-1.143.937-2.07 2.093-2.07zm-5.674 0c1.156 0 2.093.927 2.093 2.07v11.523a.648.648 0 01-.652.645.648.648 0 01-.652-.645V4.07a.785.785 0 00-.789-.78.785.785 0 00-.789.78v14.013a2.06 2.06 0 01-2.07 2.048 2.06 2.06 0 01-2.071-2.048V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v3.8a2.06 2.06 0 01-2.071 2.049A2.06 2.06 0 010 12.9v-1.378c0-.357.292-.646.652-.646.36 0 .653.29.653.646V12.9c0 .418.343.757.766.757s.766-.339.766-.757V9.099a2.06 2.06 0 012.07-2.048 2.06 2.06 0 012.071 2.048v8.984c0 .419.343.758.767.758.423 0 .766-.339.766-.758V4.07c0-1.143.937-2.07 2.093-2.07z\\\"></path></svg>\",\n  \"mistral\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path clip-rule=\\\"evenodd\\\" d=\\\"M3.428 3.4h3.429v3.428h3.429v3.429h-.002 3.431V6.828h3.427V3.4h3.43v13.714H24v3.429H13.714v-3.428h-3.428v-3.429h-3.43v3.428h3.43v3.429H0v-3.429h3.428V3.4zm10.286 13.715h3.428v-3.429h-3.427v3.429z\\\"></path></svg>\",\n  \"moonshot\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M1.052 16.916l9.539 2.552a21.007 21.007 0 00.06 2.033l5.956 1.593a11.997 11.997 0 01-5.586.865l-.18-.016-.044-.004-.084-.009-.094-.01a11.605 11.605 0 01-.157-.02l-.107-.014-.11-.016a11.962 11.962 0 01-.32-.051l-.042-.008-.075-.013-.107-.02-.07-.015-.093-.019-.075-.016-.095-.02-.097-.023-.094-.022-.068-.017-.088-.022-.09-.024-.095-.025-.082-.023-.109-.03-.062-.02-.084-.025-.093-.028-.105-.034-.058-.019-.08-.026-.09-.031-.066-.024a6.293 6.293 0 01-.044-.015l-.068-.025-.101-.037-.057-.022-.08-.03-.087-.035-.088-.035-.079-.032-.095-.04-.063-.028-.063-.027a5.655 5.655 0 01-.041-.018l-.066-.03-.103-.047-.052-.024-.096-.046-.062-.03-.084-.04-.086-.044-.093-.047-.052-.027-.103-.055-.057-.03-.058-.032a6.49 6.49 0 01-.046-.026l-.094-.053-.06-.034-.051-.03-.072-.041-.082-.05-.093-.056-.052-.032-.084-.053-.061-.039-.079-.05-.07-.047-.053-.035a7.785 7.785 0 01-.054-.036l-.044-.03-.044-.03a6.066 6.066 0 01-.04-.028l-.057-.04-.076-.054-.069-.05-.074-.054-.056-.042-.076-.057-.076-.059-.086-.067-.045-.035-.064-.052-.074-.06-.089-.073-.046-.039-.046-.039a7.516 7.516 0 01-.043-.037l-.045-.04-.061-.053-.07-.062-.068-.06-.062-.058-.067-.062-.053-.05-.088-.084a13.28 13.28 0 01-.099-.097l-.029-.028-.041-.042-.069-.07-.05-.051-.05-.053a6.457 6.457 0 01-.168-.179l-.08-.088-.062-.07-.071-.08-.042-.049-.053-.062-.058-.068-.046-.056a7.175 7.175 0 01-.027-.033l-.045-.055-.066-.082-.041-.052-.05-.064-.02-.025a11.99 11.99 0 01-1.44-2.402zm-1.02-5.794l11.353 3.037a20.468 20.468 0 00-.469 2.011l10.817 2.894a12.076 12.076 0 01-1.845 2.005L.657 15.923l-.016-.046-.035-.104a11.965 11.965 0 01-.05-.153l-.007-.023a11.896 11.896 0 01-.207-.741l-.03-.126-.018-.08-.021-.097-.018-.081-.018-.09-.017-.084-.018-.094c-.026-.141-.05-.283-.071-.426l-.017-.118-.011-.083-.013-.102a12.01 12.01 0 01-.019-.161l-.005-.047a12.12 12.12 0 01-.034-2.145zm1.593-5.15l11.948 3.196c-.368.605-.705 1.231-1.01 1.875l11.295 3.022c-.142.82-.368 1.612-.668 2.365l-11.55-3.09L.124 10.26l.015-.1.008-.049.01-.067.015-.087.018-.098c.026-.148.056-.295.088-.442l.028-.124.02-.085.024-.097c.022-.09.045-.18.07-.268l.028-.102.023-.083.03-.1.025-.082.03-.096.026-.082.031-.095a11.896 11.896 0 011.01-2.232zm4.442-4.4L17.352 4.59a20.77 20.77 0 00-1.688 1.721l7.823 2.093c.267.852.442 1.744.513 2.665L2.106 5.213l.045-.065.027-.04.04-.055.046-.065.055-.076.054-.072.064-.086.05-.065.057-.073.055-.07.06-.074.055-.069.065-.077.054-.066.066-.077.053-.06.072-.082.053-.06.067-.074.054-.058.073-.078.058-.06.063-.067.168-.17.1-.098.059-.056.076-.071a12.084 12.084 0 012.272-1.677zM12.017 0h.097l.082.001.069.001.054.002.068.002.046.001.076.003.047.002.06.003.054.002.087.005.105.007.144.011.088.007.044.004.077.008.082.008.047.005.102.012.05.006.108.014.081.01.042.006.065.01.207.032.07.012.065.011.14.026.092.018.11.022.046.01.075.016.041.01L14.7.3l.042.01.065.015.049.012.071.017.096.024.112.03.113.03.113.032.05.015.07.02.078.024.073.023.05.016.05.016.076.025.099.033.102.036.048.017.064.023.093.034.11.041.116.045.1.04.047.02.06.024.041.018.063.026.04.018.057.025.11.048.1.046.074.035.075.036.06.028.092.046.091.045.102.052.053.028.049.026.046.024.06.033.041.022.052.029.088.05.106.06.087.051.057.034.053.032.096.059.088.055.098.062.036.024.064.041.084.056.04.027.062.042.062.043.023.017c.054.037.108.075.161.114l.083.06.065.048.056.043.086.065.082.064.04.03.05.041.086.069.079.065.085.071c.712.6 1.353 1.283 1.909 2.031L7.222.994l.062-.027.065-.028.081-.034.086-.035c.113-.045.227-.09.341-.131l.096-.035.093-.033.084-.03.096-.031c.087-.03.176-.058.264-.085l.091-.027.086-.025.102-.03.085-.023.1-.026L9.04.37l.09-.023.091-.022.095-.022.09-.02.098-.021.091-.02.095-.018.092-.018.1-.018.091-.016.098-.017.092-.014.097-.015.092-.013.102-.013.091-.012.105-.012.09-.01.105-.01c.093-.01.186-.018.28-.024l.106-.008.09-.005.11-.006.093-.004.1-.004.097-.002.099-.002.197-.002z\\\"></path></svg>\",\n  \"morph\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M7.941 2c.23 0 .452.073.638.21.186.136.325.328.397.55l.593 1.814c.073.221.212.413.397.55.186.136.409.21.638.21h2.791c.23 0 .452-.074.638-.21a1.11 1.11 0 00.397-.55l.594-1.815a1.11 1.11 0 01.397-.55c.185-.136.408-.209.637-.209h1.7c.23 0 .453.073.639.21.185.136.324.328.397.55l.652 1.994c.118.361.41.635.77.728l2.957.752c.236.06.446.199.596.394.15.195.23.436.231.684v9.376c0 .248-.081.488-.231.684a1.09 1.09 0 01-.595.394l-2.957.752a1.086 1.086 0 00-.477.263 1.114 1.114 0 00-.293.465l-.653 1.994a1.11 1.11 0 01-.396.55c-.186.136-.41.21-.638.21h-1.702c-.229 0-.452-.073-.637-.21a1.11 1.11 0 01-.397-.55l-.364-1.11a1.131 1.131 0 01.15-1.002 1.074 1.074 0 01.885-.462h2.85c.29 0 .567-.116.772-.325.204-.208.32-.49.32-.785V6.444c0-.294-.116-.577-.32-.785a1.08 1.08 0 00-.771-.326h-3.273c-.29 0-.567.117-.772.326-.204.208-.32.49-.32.785v7.778c0 .295-.114.578-.319.786a1.08 1.08 0 01-.771.325h-2.182a1.08 1.08 0 01-.771-.325 1.122 1.122 0 01-.32-.786V6.444c0-.294-.115-.577-.32-.785a1.081 1.081 0 00-.77-.326H5.454c-.29 0-.567.117-.772.326-.204.208-.32.49-.32.785v11.112c0 .294.116.577.32.785.205.209.482.326.772.326h2.85a1.075 1.075 0 01.885.461 1.122 1.122 0 01.15 1.001l-.364 1.112a1.11 1.11 0 01-.397.55c-.185.136-.408.209-.637.209H6.24c-.229 0-.452-.073-.638-.21a1.11 1.11 0 01-.397-.55l-.652-1.994a1.114 1.114 0 00-.294-.465 1.086 1.086 0 00-.477-.263l-2.956-.752a1.09 1.09 0 01-.595-.394A1.124 1.124 0 010 16.688V7.312c0-.248.081-.489.231-.684.15-.195.36-.334.595-.394l2.957-.753c.178-.045.342-.136.477-.263.134-.127.235-.287.293-.464l.653-1.995a1.11 1.11 0 01.397-.55C5.788 2.075 6.01 2 6.24 2h1.701z\\\"></path></svg>\",\n  \"nousresearch\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M5.938 12.835c.127-.039.285.02.373.143.028.038.036.092.046.14.003.014-.02.033-.04.05-.124-.098-.24-.194-.354-.291-.011-.01-.016-.027-.025-.042zM8.396 9.412c.195-.032.39-.06.588-.05a.54.54 0 01.148.026c.202.071.402.147.601.224.028.01.05.036.075.055l-.013.027a9.203 9.203 0 01-.26-.089c-.115-.038-.213-.077-.315-.098-.25-.05-.25-.046-.292-.014l.574.144c.275.139.55.276.823.417.042.022.09.057.107.098.026.06.063.076.117.072.066-.006.132-.017.213-.027l-.04.086c.051.08.142.02.216.064-.074.13-.247.09-.334.199l.061.074-.12.087c0 .106-.038.168-.306.243l.026.085-.196.042.07.124h-.25l-.007.137c-.081-.01-.161-.018-.244-.027l-.053.123c-.027-.008-.052-.011-.073-.023-.067-.038-.128-.056-.195.006-.019.017-.063.014-.093.008-.026-.006-.05-.029-.07-.042-.11.095-.11.095-.208.003-.057.046-.12.074-.186.011-.063.027-.123-.02-.178-.014-.07.007-.097-.035-.133-.07l-.13.033c-.013-.236-.194-.19-.34-.203.005-.072.05-.092.095-.094a.474.474 0 01.159.022c.164.05.32.12.496.138.203.021.405.029.601-.015.265-.059.52-.149.707-.365.049-.056.083-.127.117-.195.019-.038.02-.084-.02-.116a1.397 1.397 0 00-.382-.217c.024.12-.031.182-.115.221 0 .014-.004.025 0 .03.08.115.084.16-.007.267a1.39 1.39 0 01-.218.211.477.477 0 01-.641-.05 1.36 1.36 0 01-.133-.152c-.078-.107-.076-.108-.033-.236-.165-.08-.128-.226-.104-.364.008-.05.028-.096.049-.163-.04.014-.067.017-.087.032a.897.897 0 00-.316.357c-.007.016-.01.034-.02.047-.012.015-.034.038-.045.035-.02-.006-.037-.027-.05-.045-.008-.012-.007-.032-.012-.057h-.126l.053-.172a14.82 14.82 0 00-.039-.049l.11-.284c-.06.026-.091.044-.124.051-.03.007-.064 0-.095 0 0-.031-.01-.07.004-.092.149-.22.305-.428.593-.476z\\\"></path><path d=\\\"M8.06 10.788c-.003-.038-.004-.075.037-.062.016.006.034.048.028.067-.01.04-.038.032-.064-.005z\\\"></path><path clip-rule=\\\"evenodd\\\" d=\\\"M11.981.009c.226-.012.453-.011.679 0 .247.01.495.024.74.062.401.064.798.157 1.19.273.463.138.92.299 1.356.511a7.31 7.31 0 012.948 2.642c.292.469.536.963.739 1.479.219.556.446 1.11.623 1.683.204.654.329 1.326.458 1.997.097.504.182 1.01.29 1.511.156.722.329 1.44.494 2.16.186.812.4 1.615.63 2.415.102.355.193.713.282 1.072.11.436.202.876.254 1.323.031.278.066.557.073.837a7.56 7.56 0 01-.017.88c-.037.413-.1.818-.226 1.212a5.017 5.017 0 01-.915 1.649l-.13.156.018.023c.043-.023.088-.041.127-.068.2-.138.373-.307.531-.49.4-.46.721-.973.975-1.529a3.59 3.59 0 00.325-1.72c-.024-.424-.097-.834-.3-1.213-.013-.027-.015-.06-.03-.121.05.035.082.048.101.072.107.13.22.258.315.398.33.494.46 1.052.486 1.64a3.75 3.75 0 01-.47 1.97c-.36.655-.887 1.14-1.526 1.506-.193.111-.394.21-.595.308-.157.078-.248.211-.318.365a.522.522 0 00-.033.406.359.359 0 01.013.139c-.005.077-.077.155-.14.162-.054.006-.125-.043-.15-.116a1.206 1.206 0 01-.06-.233c-.04-.314-.155-.6-.308-.87a3.906 3.906 0 00-.73-.91 2.129 2.129 0 00-.897-.524 4.093 4.093 0 00-.692-.131c-.075-.008-.15-.04-.22.01.18.06.363.11.538.18.434.173.82.43 1.18.728.308.255.58.543.794.884.098.155.186.315.227.496.027.123.042.25.067.375.013.062-.002.109-.053.144-.047.033-.122.034-.163-.01a.455.455 0 01-.08-.14c-.03-.073-.038-.159-.078-.225a7.314 7.314 0 00-1.423-1.664c-.16-.137-.329-.26-.537-.323-.376-.114-.753-.203-1.15-.154-.213.025-.427.032-.64.053a1.6 1.6 0 00-.736.278 5.14 5.14 0 00-.834.72c-.329.342-.642.699-.955 1.055-.136.155-.264.319-.314.531a5.227 5.227 0 00-.012.051.096.096 0 01-.09.076h-.31c-.046 0-.082-.048-.072-.094.023-.108.045-.216.07-.324.075-.325.19-.635.368-.917.024-.039.04-.088.104-.08l.01.049.027.077c.28-.435.571-.834.996-1.135.283-.204.584-.378.89-.55a.196.196 0 00-.098-.002c-.162.043-.325.084-.485.134-.402.124-.764.33-1.11.566-.147.1-.298.193-.414.333a7.314 7.314 0 00-1.07 1.767.845.845 0 00-.04.12.075.075 0 01-.072.056h-.494c-.04 0-.062-.051-.036-.082.123-.14.246-.282.377-.415.275-.281.58-.532.777-.884.027-.048.063-.09.095-.135.238-.333.54-.607.818-.902.082-.086.175-.16.26-.24.029-.027.053-.057.079-.085l-.018-.025-.135.041c-.034.017-.07.031-.102.05-.248.144-.494.292-.743.433-.408.23-.825.439-1.209.711-.281.2-.591.358-.889.533-.02.012-.044.015-.08.028-.015-.135.143-.201.108-.336-.033.014-.064.02-.085.038-.111.096-.227.19-.328.296-.148.157-.284.325-.425.488-.125.143-.25.286-.373.431A.153.153 0 019.89 24H8.762a.316.316 0 00.016-.042c.028-.09.085-.172.083-.28-.091-.018-.162.001-.212.077a4.45 4.45 0 00-.136.215c-.01.016-.024.03-.042.03h-.093c-.019 0-.029-.022-.017-.037.071-.088.14-.178.209-.268.001-.002-.006-.012-.012-.024-.014.004-.03.006-.045.013-.176.09-.352.181-.527.274a.363.363 0 01-.168.042H5.202c-.026 0-.039-.036-.019-.053.21-.178.402-.374.558-.605.335-.496.538-1.047.667-1.629.004-.02-.003-.043-.006-.091-.037.048-.059.072-.076.1a1.943 1.943 0 01-.334.415c-.28.258-.59.448-.983.464-.297.012-.588 0-.865-.127-.46-.21-.722-.57-.794-1.072-.025-.17-.017-.171-.182-.219A3.513 3.513 0 011.97 20.6a2.286 2.286 0 01-.808-1.13 3.569 3.569 0 01-.16-1.245c.002-.034.016-.067.024-.1.032.023.046.043.05.066.033.153.059.308.096.46.086.355.257.664.516.92.258.256.571.419.91.532.358.118.717.138 1.07-.016a1.89 1.89 0 00.621-.452c.328-.348.533-.76.648-1.223.009-.034.005-.071.007-.11-.015.006-.026.006-.03.011-.031.05-.064.1-.093.152-.284.502-.679.887-1.196 1.135-.351.17-.718.255-1.11.159a1.607 1.607 0 01-.971-.64 2.006 2.006 0 01-.368-.924 2.903 2.903 0 01.02-.886c.05-.439.466-1.17.742-1.271-.02.063-.035.112-.053.16-.043.116-.097.227-.13.345a1.901 1.901 0 00-.05.82c.033.212.09.416.204.6.147.236.346.407.62.465.11.023.225.014.338.018a.576.576 0 00.386-.131c.164-.128.282-.292.366-.481.168-.375.24-.777.309-1.179.05-.296.093-.594.133-.893.039-.281.071-.563.104-.845.026-.232.048-.464.074-.696.024-.228.052-.455.076-.683.024-.227.047-.455.069-.683.013-.14.022-.28.034-.42l.037-.417c.022-.25.041-.5.065-.748.008-.082-.02-.132-.09-.177a2.46 2.46 0 01-.492-.418c-.1-.109-.188-.228-.282-.342-.035-.042-.056-.097-.116-.118a2.084 2.084 0 00.275.597c.06.092.131.176.196.265.063.086.182.115.234.226-.028.003-.046.01-.06.006a4.74 4.74 0 01-.22-.057 2.71 2.71 0 01-1.287-.819c-.435-.487-.656-1.076-.71-1.723a5.206 5.206 0 01.014-1.06c.072-.602.22-1.186.45-1.745.155-.376.338-.741.526-1.102.205-.393.466-.75.765-1.076.512-.559 1.104-1.024 1.726-1.448.717-.49 1.478-.898 2.277-1.233C8.244.828 8.767.632 9.31.494c.655-.166 1.31-.33 1.982-.415.229-.03.458-.058.688-.07zm-1.847 22.82c-.07.06-.147.111-.207.18-.238.27-.464.549-.668.869l-.044.108a.177.177 0 00.093-.057c.174-.19.351-.378.519-.574.104-.122.195-.255.288-.386.024-.034.03-.08.046-.12l-.027-.02zm1.65-3.695a5.51 5.51 0 00-.653.593l-.37.386a.963.963 0 01-.377.25 1.372 1.372 0 01-.467.09c-.044 0-.087.006-.151.012.028.058.043.097.064.131.15.242.301.482.45.724.136.22.276.438.399.666.068.125.105.267.156.404.077.027.14-.018.202-.048.29-.135.579-.274.867-.412.213-.101.437-.186.636-.31.347-.215.68-.455 1.018-.685.015-.01.026-.028.042-.046-.023-.019-.038-.037-.056-.044-.287-.111-.527-.3-.77-.482a5.319 5.319 0 01-.506-.42 1.757 1.757 0 01-.41-.653c-.019-.049-.045-.095-.075-.156zm-5.847.264c-.06.096-.097.194-.132.293a3.38 3.38 0 01-.555 1.01c-.2.25-.455.412-.762.493-.23.06-.464.076-.7.07-.048-.002-.097.002-.158.005.016.04.021.066.035.085.1.145.23.246.4.295.157.046.316.034.498.023.181-.037.343-.115.485-.234.238-.199.402-.454.536-.732.175-.363.264-.751.342-1.144.01-.053.008-.11.011-.164zm14.945-4.586c.008.029.016.057.027.107.024.155.051.31.072.464.03.219.067.437.078.657.017.344.027.689-.014 1.033-.037.315-.063.633-.116.946a6.153 6.153 0 01-.46 1.518c-.008.018-.01.039-.02.082.047-.03.077-.042.098-.064.085-.083.17-.167.248-.255.271-.305.458-.66.596-1.043.18-.498.228-1.011.145-1.531-.103-.65-.33-1.263-.597-1.881a9.055 9.055 0 00-.024-.055l-.033.022zM5.797 8.29a.26.26 0 00.018.153c.124.251.25.501.379.75.025.049.066.09.03.163-.284.06-.578.119-.88.255.059.038.097.06.132.087.042.032.112.058.09.12-.01.033-.075.048-.117.072.017.01.043.021.067.036.166.102.33.207.447.368.138.192.229.404.188.644-.079.469-.306.85-.69 1.132-.054.04-.106.083-.161.122a.243.243 0 00-.103.245.77.77 0 00.055.195c.083.196.22.35.375.492.083.076.159.164.222.257a.37.37 0 01.025.377c-.023.05-.05.099-.076.148-.03.06-.028.111.022.162.041.042.08.089.112.138.038.058.078.079.147.05a.486.486 0 01.333-.006c.16.046.302.126.444.21.13.077.264.149.4.219.067.035.14.05.219.026.071-.022.124.01.145.076.02.064-.003.108-.074.139-.07.03-.137.063-.209.088-.1.035-.201.073-.314.077-.013-.107.11-.088.127-.159-.206-.126-.643-.145-.801-.034.063.112.035.21-.096.313-.13-.1-.025-.202.002-.3a.209.209 0 00-.249.17c-.015.101.067.216.178.224.108.007.218-.005.326-.012.06-.005.12-.027.199 0-.103.123-.248.127-.357.19.002.05.07.086.019.131-.053.048-.095-.001-.132-.03-.08-.063-.16-.126-.231-.197a.474.474 0 01-.157-.311.52.52 0 00-.043-.172c-.032-.074-.032-.137.033-.19-.018-.03-.028-.053-.045-.072a1.222 1.222 0 01-.196-.369c-.053-.137-.046-.264.048-.381.024-.03.05-.06.064-.095a.664.664 0 00.047-.168c.017-.165-.064-.287-.182-.387-.186-.156-.36-.322-.46-.551-.005-.011-.024-.017-.037-.026-.011.017-.024.027-.025.038-.019.185-.045.37-.052.557-.014.377.058.743.162 1.104.118.41.289.798.488 1.173.267.502.537 1.002.812 1.5.055.098.13.189.208.27.198.202.452.272.724.273.202 0 .404-.006.605-.026.295-.03.59-.073.884-.113.183-.025.365-.057.548-.08.21-.026.38.073.522.21.16.156.305.327.447.5.22.265.397.56.554.867.05.098.07.1.147.03.13-.121.26-.242.394-.36.067-.059.088-.12.067-.213a3.535 3.535 0 01-.085-.796c.002-.157.006-.314.018-.471.015-.224.03-.45.06-.672a59.114 59.114 0 01.362-2.298c.087-.493.182-.984.268-1.477.06-.347.118-.694.162-1.043.034-.273.055-.55.063-.825.011-.332.003-.665.002-.998 0-.077.004-.155-.01-.23-.028-.142-.01-.155-.162-.19a5.826 5.826 0 00-.607-.107c-.146-.018-.207-.053-.221-.19-.006-.049-.025-.098-.041-.146-.009-.025-.024-.048-.046-.09l-.025.264c-.009.096-.029.116-.127.115-.055 0-.11-.008-.164-.008-.476 0-.952-.008-1.426.032-.095.008-.173-.015-.226-.103-.04-.066-.088-.126-.134-.186-.063-.084-.086-.093-.182-.06-.195.068-.388.138-.582.21a2.71 2.71 0 00-.675.394.986.986 0 01-.323.168c-.033.01-.07.008-.127.013.02-.066.024-.114.047-.15.064-.105.135-.205.205-.306.023-.033.049-.063.073-.095l-.015-.023-.201.037c-.146.04-.296.07-.437.122-.148.053-.266.023-.386-.072a3.623 3.623 0 01-.733-.786l-.093-.132zm8.592 8.963l-.147.09c-.22.134-.44.266-.659.402-.093.058-.184.12-.27.188-.085.07-.124.161-.072.272.047.1.093.2.147.294.047.08.124.138.213.147.11.01.228.012.336-.012.217-.05.372-.205.528-.357a.291.291 0 00.087-.308c-.046-.18-.079-.365-.118-.547-.011-.052-.027-.103-.045-.169zm-.257-2.409c-.12.291-.205.597-.325.91-.151.433-.294.87-.435 1.323.036-.01.054-.01.067-.018.261-.16.522-.324.785-.484.054-.033.071-.078.065-.138-.012-.13-.024-.262-.034-.393l-.068-.886c-.008-.103-.02-.206-.029-.31-.009 0-.017-.002-.026-.004zm3.081-8.13l.099.285c.08.231.159.463.24.714l.58 1.952c.187.63.372 1.262.558 1.893.114.382.235.762.343 1.146.072.257.126.519.186.799.044.206.087.413.127.64.034.106.023.226.077.325l.025-.006-.068-.362c-.038-.206-.077-.412-.113-.638-.015-.07-.029-.141-.046-.211-.095-.396-.177-.796-.29-1.187-.196-.685-.413-1.364-.618-2.046-.165-.549-.322-1.1-.488-1.648-.069-.227-.15-.45-.226-.695l-.117-.336c-.037-.107-.075-.216-.115-.322-.04-.106-.084-.21-.127-.314a7.558 7.558 0 01-.027.01zM6.225 14.304c-.063-.001-.115.014-.134.083a.35.35 0 00.41.012 4.533 4.533 0 00-.276-.095zM5.23 11.98c-.026-.027-.057-.048-.075.002-.012.032-.007.07-.01.113.082-.037.082-.037.085-.115zm.062-1.189a.135.135 0 00-.088.056.197.197 0 00-.025.11c.005.152.01.306.026.457a.751.751 0 00.066.218c.061.136.157.167.288.101.055-.027.06-.054.025-.11a4.52 4.52 0 01-.129-.211c-.015-.068-.066-.131-.033-.207.04-.09-.076-.116-.074-.19V10.874c-.003-.038-.006-.087-.056-.083zm-.017-.968a.867.867 0 00-.467.127c-.076.045-.084.07-.05.158.034.087.07.173.115.254.064.117.09.125.21.077a.657.657 0 01.336-.053c.202.022.357.136.504.264l.092.077c.007-.006.014-.013.022-.018-.019-.105-.035-.226-.149-.264-.157-.053-.324-.075-.508-.117l-.24-.005c.24-.169.452-.044.687.009-.063-.115-.153-.147-.23-.193-.082-.05-.17-.092-.25-.144-.06-.037-.12-.08-.072-.172zm10.233.325c-.23-.01-.427.08-.608.211-.034.026-.06.065-.105.117.087.026.15.046.232.065.044-.015.088-.03.13-.046.306-.114.61-.115.904.031.126.063.237.04.366-.005-.02-.031-.03-.054-.045-.071a.986.986 0 00-.448-.273c-.14-.044-.284-.024-.426-.03zM7.99 6.483a.308.308 0 00.002.133c.08.321.156.643.242.962.104.387.27.75.456 1.103.02.037.061.08.098.087a.404.404 0 00.253-.051l-.472-.84c-.23-.448-.405-.92-.579-1.394zM10.397.497c-.2-.008-.405.004-.603.034-.236.035-.47.087-.7.152-.287.08-.569.18-.852.273-.04.013-.074.038-.11.058.028.014.05.018.07.014.287-.068.58-.085.873-.09.134-.002.269.009.402.025.19.024.382.048.57.09.456.104.874.3 1.265.556.464.306.888.66 1.257 1.078.205.232.395.475.56.739.17.274.315.561.449.856.273.601.456 1.232.6 1.876.04.173.07.348.1.524.017.104.065.167.17.19.122.028.2.105.22.251-.003.102-.06.174-.129.24a1.065 1.065 0 00-.268.358.164.164 0 00.083-.039c.08-.086.162-.172.235-.265a.56.56 0 00.13-.333c.009-.05.022-.1.024-.15.007-.124-.017-.15-.143-.168-.025-.004-.049-.014-.073-.015-.082-.007-.125-.063-.137-.131-.033-.198-.004-.355.247-.408.086-.018.174-.03.26-.042.158-.023.315-.053.473-.067.14-.012.19.033.226.167.008.029.018.057.021.087.019.179-.008.225-.141.288-.027.013-.055.024-.078.042a.148.148 0 00-.051.067c-.039.144.073.382.206.445l.673.32c.023.011.05.015.075.023l.018-.026c-.015-.008-.032-.013-.044-.024a2.27 2.27 0 00-.544-.32 4.898 4.898 0 00-.173-.075.203.203 0 01-.126-.191c-.003-.085.045-.154.128-.187l.059-.025c.099-.044.118-.076.112-.187a.384.384 0 00-.008-.063c-.067-.294-.123-.59-.205-.88a9.478 9.478 0 00-.826-2.036 7.465 7.465 0 00-1.39-1.805 4.536 4.536 0 00-1.177-.824 3.656 3.656 0 00-1.016-.328 6.155 6.155 0 00-.712-.074zm6.719 5.955c.01.014.018.028.038.034l-.022-.044-.016.01zM4.103 3.917a.062.062 0 01-.03.012.455.455 0 01-.04.039c-.01.01-.02.02-.045.04l-.363.354c-.088.085-.17.178-.266.253-.284.22-.425.53-.544.855a.132.132 0 00-.007.071c.013.055.033.108.052.168l.074.026c-.017.056-.03.105-.047.152-.058.164-.118.327-.175.491-.005.015.008.036.019.077.08-.175.158-.33.225-.489.228-.544.484-1.074.819-1.561.09-.133.182-.266.283-.401.004-.006.007-.013.022-.03.001-.016.003-.032.015-.04l.008-.017zm12.976 2.408a.023.023 0 01.009.019.073.073 0 00-.006.01.188.188 0 00.007.02l.018.022c.002-.007.007-.016.005-.021-.003-.01-.012-.018-.02-.038a1.331 1.331 0 01-.013-.012zM4.199 4.48c-.003.004-.008.008-.027.014-.005.013-.011.025-.031.047a2.085 2.085 0 01-.124.167c-.048.07-.116.055-.181.041-.134-.028-.228.016-.287.143-.089.187-.187.37-.273.56-.049.108-.11.216-.118.36.081.003.154.007.228.008h.228a2.563 2.563 0 01-.079.264c-.01.052-.022.103-.033.155l.02.004c.018-.046.037-.092.067-.153.066-.142.13-.285.2-.426.02-.04.034-.1.116-.092 0 .043.004.084 0 .124-.005.045-.017.09-.028.143.141.043.086.174.115.269.102-.022.104-.195.248-.144v.205l.017.002.439-1.059c-.13 0-.246-.02-.358.033-.024.011-.058-.001-.108-.004.075-.15.139-.278.211-.417a.128.128 0 01.025-.036c0-.015-.001-.03.008-.038l.006-.02c-.005.006-.01.011-.028.017-.004.012-.009.024-.026.045a.085.085 0 01-.032.033c-.123.157-.09.164-.258.106-.079-.027-.078-.028-.047-.144.028-.046.056-.093.098-.15 0-.016-.001-.032.007-.042L4.2 4.48zm2.073-.67c-.003.006-.007.011-.027.016-.094.125-.194.246-.28.377-.155.238-.301.481-.451.723-.14.224-.345.368-.575.481-.017.008-.04.006-.079.011.012-.059.016-.109.033-.153a6.076 6.076 0 01.229-.518l-.007-.02a.138.138 0 01-.035.025c-.028.05-.055.1-.093.164-.26.424-.443.817-.442.95.024.004.048.011.073.013.177.013.188.007.26-.165.03-.07.077-.12.147-.15l.175-.07c.044-.018.085-.057.146-.032.003.05-.01.11.014.145.042.062.044.125.047.193.002.049.017.098.026.147.029-.034.039-.065.05-.097.142-.39.277-.782.428-1.17.1-.256.22-.504.33-.756.013-.03.013-.067.03-.092V3.81zm3.987-.34c0 .045.01.084.021.123.042.16.094.318.124.48.024.133.023.27.028.406 0 .033-.019.067-.032.11-.094-.058-.047-.158-.106-.215h-.125c-.015.072-.01.152-.046.2-.066.085-.155.154-.236.227-.043.038-.078.018-.103-.025l-.046-.087c-.065.035-.117.069-.172.093-.116.051-.235.095-.35.147-.085.038-.09.053-.07.147.014.075.034.148.047.223.013.072.05.109.123.124.233.05.462.115.657.265.058-.102.058-.102.168-.151.03-.014.06-.03.092-.042.08-.03.115-.017.15.06.023.048.041.098.066.158.06-.14-.042-.267.017-.416.157.18.24.39.375.567a.235.235 0 00.022-.098c.002-.124 0-.247.002-.371 0-.034.013-.067.02-.1l.032-.003c.11.155.13.354.226.52a3.036 3.036 0 00-.01-.392c-.004-.045 0-.074.05-.088.08.036.116.14.215.158-.03-.275-.423-1.137-.798-1.635-.114-.127-.2-.28-.34-.386zm-2.667.696c-.019.034-.03.05-.037.067-.061.185-.125.37-.18.556-.031.105-.087.169-.195.19-.09.019-.178.052-.268.073-.038.009-.089.015-.118-.003-.024-.016-.025-.069-.036-.106-.064.076-.082.087-.17.047-.133-.062-.262-.135-.393-.201-.048-.025-.093-.063-.17-.03-.043.12-.091.25-.137.382-.099.28-.087.242.095.453.046.048.102.03.154.023.054-.009.106-.03.16-.036.13-.013.26-.08.367-.015.204-.064.387-.122.571-.178.05-.015.089.005.114.054.022.042.034.093.082.121.038-.056-.013-.128.063-.178l.14.241-.042-1.46zm.278.358c-.096-.01-.107.01-.11.108-.002.038-.003.078.002.115.03.2.099.386.174.57.002.006.012.01.022.015l.078-.05c.052.036.081.088.153.088.205-.002.41.014.616.012.099-.001.158.042.205.12.018.03.024.077.088.066l-.08-.394c-.05-.195-.085-.395-.172-.589-.057.057-.114.068-.18.046a.72.72 0 00-.135-.028c-.22-.028-.44-.059-.66-.08zm10.254-1.727c.089.163.155.316.139.491-.016.168.026.342-.044.516-.047-.033-.088-.082-.112-.075-.117.035-.164-.057-.227-.115a4.772 4.772 0 01-.286-.29l-.104-.113a4.856 4.856 0 01-.023.019c.035.046.07.093.11.156.04.064.084.127.122.193.034.058.065.118.031.205-.082-.01-.164-.019-.246-.032-.06-.01-.101 0-.124.07-.031.098-.037.096-.15.09.02.042.036.08.057.116.041.074.03.138-.03.196-.06.06-.118.122-.178.181a.175.175 0 01-.185.046c-.222-.061-.447-.113-.67-.174-.032-.009-.063-.04-.086-.068-.03-.04-.052-.087-.08-.13-.044-.07-.09-.138-.136-.207a.18.18 0 00-.014.105c.012.127.03.253.035.38.005.1-.024.12-.121.104-.104-.017-.206-.04-.31-.058-.064-.012-.131-.028-.202.03l.081.208c.09 0 .166-.01.237.002a.819.819 0 01.458.251c.078.083.154.168.241.26l.018-.005c-.004-.006-.008-.013-.01-.04.014-.056-.062-.118.018-.178.031.03.064.057.088.09.058.078.111.159.169.257l.089.141.024-.013a2093.819 2093.819 0 01-.427-.934c.055.007.083.007.108.016.193.07.385.142.577.216.074.028.147.06.219.094.062.028.112.018.157-.033.05-.056.102-.112.154-.167.05-.051.095-.046.132.014.016.025.026.053.04.08.071.138.143.277.217.433l.159.308.025-.011c-.044-.106-.07-.218-.138-.334-.057-.182-.168-.346-.206-.545.136.034.362.326.567.732l.057.074.018-.011a1.563 1.563 0 01-.052-.127c-.046-.145-.097-.29-.136-.436-.022-.083-.036-.173.022-.26l.109.058-.026-.207.027-.016c.022.02.05.036.065.06.073.108.143.22.215.33.01.016.029.029.043.043-.036-.217-.2-.38-.229-.626l.155.112c.014-.166.012-.319.042-.465.032-.158-.023-.297-.063-.445.024.004.036.006.055.025.092.124.183.249.277.371.02.027.05.047.069.087l.04.063.019-.015a.293.293 0 01-.053-.082 27.922 27.922 0 01-.332-.49c-.221-.311-.363-.467-.485-.521zm-6.57.327c-.003.161.092.275.069.415l-.368.087c.09.139.032.237-.052.331-.05.057-.092.122-.143.178-.037.04-.046.078-.018.126l.16.275c.029.048.072.066.128.064.076-.003.152 0 .228-.001.116-.003.216.022.275.137.006.014.02.024.044.052.004-.059-.003-.098.01-.13.016-.04.04-.099.072-.108.084-.023.173-.024.26-.03.013-.001.027.018.04.029l.071.065c.019-.11-.082-.198-.024-.31l.126.04c-.026-.123-.07-.245-.071-.366 0-.123.051-.243.115-.36.107.062.16.156.234.253.183.265.36.533.494.834.165-.078.27.068.407.088-.003-.106-.133-.441-.197-.492a.142.142 0 00-.102-.028c-.06.011-.119.039-.191.063-.025-.039-.056-.078-.077-.122a3.936 3.936 0 00-.473-.783c-.076-.094-.16-.182-.228-.26l-.391.285c-.049.035-.094.03-.132-.017l-.169-.207c-.025-.03-.053-.059-.097-.108z\\\"></path></svg>\",\n  \"nova\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"m17.865 23.28 1.533 1.543c.07.07.092.175.055.267l-2.398 6.118A1.24 1.24 0 0 1 15.9 32c-.51 0-.969-.315-1.155-.793l-3.451-8.804-5.582 5.617a.246.246 0 0 1-.35 0l-1.407-1.415a.25.25 0 0 1 0-.352l6.89-6.932a1.3 1.3 0 0 1 .834-.398 1.25 1.25 0 0 1 1.232.79l2.992 7.63 1.557-3.977a.248.248 0 0 1 .408-.085zm8.224-19.3-5.583 5.617-3.45-8.805a1.24 1.24 0 0 0-1.43-.762c-.414.092-.744.407-.899.805l-2.38 6.072a.25.25 0 0 0 .055.267l1.533 1.543c.127.127.34.082.407-.085L15.9 4.655l2.991 7.629a1.24 1.24 0 0 0 2.035.425l6.922-6.965a.25.25 0 0 0 0-.352L26.44 3.977a.246.246 0 0 0-.35 0zM8.578 17.566l-3.953-1.567 7.582-3.01c.49-.195.815-.685.785-1.24a1.3 1.3 0 0 0-.395-.84l-6.886-6.93a.246.246 0 0 0-.35 0L3.954 5.395a.25.25 0 0 0 0 .353l5.583 5.617-8.75 3.472a1.25 1.25 0 0 0 0 2.325l6.079 2.412a.24.24 0 0 0 .266-.055l1.533-1.542a.25.25 0 0 0-.085-.41zm22.434-2.73-6.08-2.412a.24.24 0 0 0-.265.055l-1.533 1.542a.25.25 0 0 0 .084.41L27.172 16l-7.583 3.01a1.255 1.255 0 0 0-.785 1.24c.018.317.172.614.395.84l6.89 6.931a.246.246 0 0 0 .35 0l1.406-1.415a.25.25 0 0 0 0-.352l-5.582-5.617 8.75-3.472a1.25 1.25 0 0 0 0-2.325z\\\" fill=\\\"currentColor\\\"></path></svg>\",\n  \"nvidia\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M10.212 8.976V7.62c.127-.01.256-.017.388-.021 3.596-.117 5.957 3.184 5.957 3.184s-2.548 3.647-5.282 3.647a3.227 3.227 0 01-1.063-.175v-4.109c1.4.174 1.681.812 2.523 2.258l1.873-1.627a4.905 4.905 0 00-3.67-1.846 6.594 6.594 0 00-.729.044m0-4.476v2.025c.13-.01.259-.019.388-.024 5.002-.174 8.261 4.226 8.261 4.226s-3.743 4.69-7.643 4.69c-.338 0-.675-.031-1.007-.092v1.25c.278.038.558.057.838.057 3.629 0 6.253-1.91 8.794-4.169.421.347 2.146 1.193 2.501 1.564-2.416 2.083-8.048 3.763-11.24 3.763-.308 0-.603-.02-.894-.048V19.5H24v-15H10.21zm0 9.756v1.068c-3.356-.616-4.287-4.21-4.287-4.21a7.173 7.173 0 014.287-2.138v1.172h-.005a3.182 3.182 0 00-2.502 1.178s.615 2.276 2.507 2.931m-5.961-3.3c1.436-1.935 3.604-3.148 5.961-3.336V6.523C5.81 6.887 2 10.723 2 10.723s2.158 6.427 8.21 7.015v-1.166C5.77 16 4.25 10.958 4.25 10.958h-.002z\\\"></path></svg>\",\n  \"openai\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z\\\"></path></svg>\",\n  \"openrouter\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M18.654 3.87a5.087 5.087 0 110 10.174L23.7 19.09c.64.641.187 1.737-.72 1.737H8.48a8.479 8.479 0 010-16.958h10.175zM8.479 7.26a5.087 5.087 0 100 10.176 5.087 5.087 0 000-10.175z\\\"></path></svg>\",\n  \"perplexity\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M19.785 0v7.272H22.5V17.62h-2.935V24l-7.037-6.194v6.145h-1.091v-6.152L4.392 24v-6.465H1.5V7.188h2.884V0l7.053 6.494V.19h1.09v6.49L19.786 0zm-7.257 9.044v7.319l5.946 5.234V14.44l-5.946-5.397zm-1.099-.08l-5.946 5.398v7.235l5.946-5.234V8.965zm8.136 7.58h1.844V8.349H13.46l6.105 5.54v2.655zm-8.982-8.28H2.59v8.195h1.8v-2.576l6.192-5.62zM5.475 2.476v4.71h5.115l-5.115-4.71zm13.219 0l-5.115 4.71h5.115v-4.71z\\\"></path></svg>\",\n  \"poolside\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><g clip-path=\\\"url(#lobe-icons-poolside-0-_R_0_)\\\"><mask height=\\\"24\\\" id=\\\"lobe-icons-poolside-4-_R_0_\\\" maskUnits=\\\"userSpaceOnUse\\\" style=\\\"mask-type:alpha\\\" width=\\\"24\\\" x=\\\"0\\\" y=\\\"0\\\"><path d=\\\"M24 0H0v24h24V0z\\\" fill=\\\"url(#lobe-icons-poolside-1-_R_0_)\\\"></path><path d=\\\"M24 0H0v24h24V0z\\\" fill=\\\"url(#lobe-icons-poolside-2-_R_0_)\\\"></path><path d=\\\"M24 0H0v24h24V0z\\\" fill=\\\"url(#lobe-icons-poolside-3-_R_0_)\\\"></path></mask><g mask=\\\"url(#lobe-icons-poolside-4-_R_0_)\\\"><path d=\\\"M6.742 22.786a11.93 11.93 0 01-5.232-4.963 11.98 11.98 0 01-1.463-6.886.975.975 0 011.943.173c-.178 2.005.246 4 1.226 5.769a9.968 9.968 0 003.526 3.685l4.586-9.405c-1.795-.598-3.29-.338-3.425-.312l-.058.012a.972.972 0 01-1.054-.576c-.24-.448-.96-1.544-1.834-1.97-.873-.426-2.218-.289-2.651-.195a.977.977 0 01-1.087-1.38C4.117.792 11.315-1.686 17.262 1.215c5.946 2.9 8.422 10.093 5.529 16.038l-.01.02c-2.903 5.94-10.095 8.414-16.039 5.514zm6.338-10.773l-4.586 9.405c4.629 1.73 9.896-.192 12.304-4.558-.338-.524-.932-1.275-1.62-1.61-.888-.434-2.19-.292-2.637-.198a.989.989 0 01-.616-.055.984.984 0 01-.49-.473c-.028-.058-.739-1.438-2.355-2.51zM5.81 6.56c.747.365 1.356.944 1.81 1.49 1.406-2.15 3.314-3.774 4.787-4.82a20.81 20.81 0 011.66-1.067A10.078 10.078 0 003.882 6.077c.617.042 1.297.174 1.929.482zm12.671-2.243c.09.624.152 1.294.182 1.965.083 1.801-.021 4.296-.844 6.722.686.018 1.484.14 2.214.495.652.318 1.198.8 1.628 1.28a10.082 10.082 0 00-3.18-10.462zm-5.394 5.46a9.522 9.522 0 012.984 2.287c1.075-3.493.606-7.402.215-8.85-1.381.584-4.75 2.62-6.84 5.618a9.515 9.515 0 013.64.944z\\\"></path></g></g><defs><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-poolside-1-_R_0_\\\" x1=\\\"6.75\\\" x2=\\\"5.625\\\" y1=\\\"20.55\\\" y2=\\\"20.55\\\"><stop stop-color=\\\"currentColor\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"currentColor\\\" stop-opacity=\\\"0\\\"></stop></linearGradient><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-poolside-2-_R_0_\\\" x1=\\\"6.825\\\" x2=\\\"7.2\\\" y1=\\\"11.85\\\" y2=\\\"11.137\\\"><stop stop-color=\\\"currentColor\\\" stop-opacity=\\\"0\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"currentColor\\\"></stop></linearGradient><linearGradient gradientUnits=\\\"userSpaceOnUse\\\" id=\\\"lobe-icons-poolside-3-_R_0_\\\" x1=\\\".975\\\" x2=\\\".975\\\" y1=\\\"20.512\\\" y2=\\\"10.912\\\"><stop stop-color=\\\"currentColor\\\"></stop><stop offset=\\\".105\\\" stop-color=\\\"currentColor\\\" stop-opacity=\\\".9\\\"></stop><stop offset=\\\".904\\\" stop-color=\\\"currentColor\\\" stop-opacity=\\\".04\\\"></stop><stop offset=\\\"1\\\" stop-color=\\\"currentColor\\\" stop-opacity=\\\"0\\\"></stop></linearGradient><clipPath id=\\\"lobe-icons-poolside-0-_R_0_\\\"><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"currentColor\\\"></path></clipPath></defs></svg>\",\n  \"qwen\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z\\\"></path></svg>\",\n  \"recraft\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M19.667 8.275c0-4.57-4.15-8.275-9.27-8.275-1.774 0-3.213 3.705-3.213 8.275 0 1.143.09 2.233.253 3.224H4.29L1 23h9.4v-6.447c5.117 0 9.266-3.707 9.266-8.275l.001-.002zm-9.27-6.76c.93 0 1.682 3.028 1.682 6.76 0 3.733-.752 6.76-1.681 6.76-.93 0-1.681-3.027-1.681-6.76 0-3.732.752-6.76 1.68-6.76z\\\"></path><path d=\\\"M19.848 16.552h-9.44L14.028 23h9.438l-3.618-6.448z\\\"></path></svg>\",\n  \"relace\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M23 23H1V1h22v22zM2.962 15.232c1.969.3 5.028.42 7.78-.171.904-.195 1.743-.46 2.49-.803-1.395-3.4-1.675-5.766-1.264-7.378.466-1.823 1.799-2.59 2.998-2.602h.01c.688 0 2.117.177 3.081 1.35 1.003 1.22 1.216 3.152.26 5.991-.504 1.493-1.437 2.616-2.594 3.456 1.323 2.993 2.11 4.498 2.588 5.284.223.367.372.564.467.679h2.26V2.962H2.962v12.27zm11.05.827c-.912.413-1.887.711-2.857.92-2.91.626-6.059.527-8.193.234v3.825h13.471c-.527-.92-1.287-2.424-2.421-4.98zm.97-9.82c-.323.005-.87.181-1.112 1.127-.25.975-.161 2.776 1.055 5.84.705-.598 1.233-1.329 1.531-2.213.868-2.576.455-3.67.086-4.119-.406-.494-1.09-.633-1.56-.634z\\\"></path></svg>\",\n  \"stepfun\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M12 0C5.372 0 0 5.372 0 12s5.372 12 12 12 12-5.372 12-12S18.628 0 12 0zM8.762 19.614H4.376v-4.386h4.386v4.386zm5.423 0H9.798v-4.386h4.387v4.386zm0-5.42H9.798V9.81h4.387v4.386zm0-5.418H9.798V4.39h4.387v4.386zm5.422-.004h-4.386V4.386h4.386v4.386z\\\"></path></svg>\",\n  \"tencent\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M9.976 1L24 9.8l-10.587.015L10.723 23H5.489L8.18 9.8H3.244L1 5.4h8.077L9.976 1z\\\"></path></svg>\",\n  \"upstage\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M19.763 0l-.373 1.297h2.594L22.354 0h-2.591z\\\"></path><path d=\\\"M16.192 2.27l-.376 1.298h5.52l.37-1.298h-5.514z\\\"></path><path d=\\\"M12.897 4.54l-.377 1.298h8.167l.37-1.297h-8.16z\\\"></path><path d=\\\"M2.85 6.81l-.377 1.298h17.565l.37-1.297H2.85z\\\"></path><path d=\\\"M3.884 9.081l-.376 1.297H19.39l.37-1.297H3.883z\\\"></path><path d=\\\"M4.088 24l.376-1.297H1.866L1.5 24h2.588z\\\"></path><path d=\\\"M7.662 21.73l.376-1.298H2.515L2.15 21.73h5.513z\\\"></path><path d=\\\"M10.957 19.46l.377-1.298h-8.17l-.367 1.297h8.16z\\\"></path><path d=\\\"M21.005 17.19l.376-1.298H3.812l-.366 1.297h17.559z\\\"></path><path d=\\\"M19.967 14.919l.376-1.297H4.461l-.366 1.297h15.872z\\\"></path><path d=\\\"M18.787 12.649l.376-1.298H4.26l-.366 1.298h14.893z\\\"></path></svg>\",\n  \"vercel\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M12 0l12 20.785H0L12 0z\\\"></path></svg>\",\n  \"voyage\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M5.407 0v.066a.974.974 0 00-.048.245c-.011.11-.016.208-.016.295 0 .339.043.715.128 1.13.097.405.274.912.531 1.524l7.125 16.366L20.011 3.39c.161-.404.333-.846.515-1.327.182-.48.273-.966.273-1.458a1.406 1.406 0 00-.096-.54V0H24v.066c-.204.207-.45.578-.74 1.114-.29.535-.606 1.195-.949 1.982L13.095 24h-1.287L3.075 3.965c-.204-.47-.418-.923-.644-1.36-.214-.437-.418-.83-.61-1.18-.194-.36-.365-.66-.515-.9A5.666 5.666 0 001 .064V0h4.407z\\\"></path></svg>\",\n  \"xai\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M6.469 8.776L16.512 23h-4.464L2.005 8.776H6.47zm-.004 7.9l2.233 3.164L6.467 23H2l4.465-6.324zM22 2.582V23h-3.659V7.764L22 2.582zM22 1l-9.952 14.095-2.233-3.163L17.533 1H22z\\\"></path></svg>\",\n  \"xiaomimimo\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M.958 15.936a.459.459 0 01.459.44v2.729a.46.46 0 01-.918 0v-2.729a.459.459 0 01.459-.44zm4.814-2.035a.46.46 0 01.553.45v4.754a.458.458 0 11-.918 0V15.48L3.74 17.202a.462.462 0 01-.655.016.462.462 0 01-.065-.082L.628 14.67a.459.459 0 01.658-.637l2.124 2.187 2.127-2.188a.46.46 0 01.235-.13zm2.068.004a.46.46 0 01.458.445v4.755a.46.46 0 01-.458.458.459.459 0 01-.458-.458V14.35a.459.459 0 01.458-.445zm1.973 2.014a.46.46 0 01.46.457v2.729a.46.46 0 01-.784.324.46.46 0 01-.134-.324v-2.729a.46.46 0 01.458-.458zm.002-2.045a.458.458 0 01.328.157l2.127 2.19 2.125-2.19a.459.459 0 01.784.318v4.756a.46.46 0 01-.455.458.46.46 0 01-.458-.458V15.48l-1.667 1.723a.46.46 0 01-.65.008l-.005-.005c0-.002-.002-.002-.004-.003l-2.455-2.534a.46.46 0 01-.008-.667.461.461 0 01.338-.128zm6.797 1.206a.46.46 0 01.53.651A1.966 1.966 0 0019.81 18.4a.462.462 0 01.623.18.46.46 0 01-.181.624 2.863 2.863 0 01-1.38.353l-.142-.004a2.88 2.88 0 01-2.393-4.263.461.461 0 01.274-.21zm.864-.931a2.884 2.884 0 013.915 3.914.46.46 0 01-.402.24l-.057-.004a.458.458 0 01-.164-.055.46.46 0 01-.182-.622 1.967 1.967 0 00-2.669-2.67.459.459 0 11-.441-.803zM9.59 6.368c1.481 0 1.696 1.202 1.696 1.654v2.648h-.917v-.432c-.26.346-.792.535-1.36.535-.133 0-1.289-.03-1.384-1.136-.082-.932.675-1.61 2.053-1.61h.691c0-.563-.367-.886-.983-.886-.44.013-.864.174-1.2.458l-.36-.664c.484-.379 1.012-.567 1.764-.567zm4.427.1c1.263 0 2.082.97 2.083 2.15 0 1.181-.824 2.154-2.083 2.154-1.26 0-2.084-.972-2.084-2.152 0-1.18.82-2.153 2.084-2.153zm6.801.015c.68 0 1.202.465 1.197 1.548v2.642H21.1V8.29c0-.312-.002-.98-.63-.98s-.628.667-.628.838v2.524h-.89V8.148c0-.17-.001-.838-.63-.838-.628 0-.628.668-.628.98v2.383h-.917v-4.03h.917V7a1.22 1.22 0 01.947-.516c.398 0 .76.193.982.686a1.321 1.321 0 011.195-.686zm-18.093.872l1.457-1.772H5.32L3.311 8.07l2.14 2.602H4.24L2.725 8.796 1.21 10.672H0L2.138 8.07.13 5.583h1.138l1.458 1.772zm4.149 3.317h-.916V6.644h.916v4.028zm16.99 0h-.916V6.644h.916v4.028zM9.925 8.71c-1.055 0-1.359.412-1.326.742.032.329.324.537.757.537a1.013 1.013 0 001.014-.968l.002-.31h-.447zM14.018 7.3c-.663 0-1.184.487-1.184 1.32 0 .832.52 1.32 1.184 1.32.662 0 1.182-.49 1.182-1.32 0-.832-.52-1.32-1.182-1.32zM6.417 5.001a.568.568 0 01.587.582.588.588 0 01-1.175 0A.57.57 0 016.417 5zm16.991 0a.57.57 0 01.592.582.588.588 0 01-1.174 0 .57.57 0 01.357-.542.572.572 0 01.225-.04z\\\"></path></svg>\",\n  \"zai\": \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M12.105 2L9.927 4.953H.653L2.83 2h9.276zM23.254 19.048L21.078 22h-9.242l2.174-2.952h9.244zM24 2L9.264 22H0L14.736 2H24z\\\"></path></svg>\"\n};\n"},{"path":"source/packages/elements/src/grouping.ts","content":"import type { ModelDescriptor, ModelRecommendation } from \"../../core/src/index.ts\";\n\n/** Optional model-list grouping for gateway catalogs. */\nexport type ModelGrouping = \"none\" | \"author\" | ((model: ModelDescriptor) => string | undefined);\n\nexport function modelGroup(model: ModelDescriptor, grouping: ModelGrouping): string | undefined {\n  if (typeof grouping === \"function\") {\n    return grouping(model);\n  }\n  if (grouping === \"none\") {\n    return undefined;\n  }\n  const author = model.author ?? model.id.split(\"/\")[0];\n  return author === undefined || author === model.id ? \"Other\" : displayAuthor(author);\n}\n\nfunction displayAuthor(value: string): string {\n  const names: Readonly<Record<string, string>> = {\n    anthropic: \"Anthropic\",\n    google: \"Google\",\n    openai: \"OpenAI\",\n  };\n  return names[value.toLocaleLowerCase()] ?? titleCase(value);\n}\n\nfunction titleCase(value: string): string {\n  return value.replaceAll(\"-\", \" \").replace(/\\b\\w/g, (character) => character.toLocaleUpperCase());\n}\n\n/** Recommended models lead the list once, followed by the remaining model groups. */\nexport function modelGroups(\n  models: readonly ModelDescriptor[],\n  grouping: ModelGrouping,\n  recommendations: readonly ModelRecommendation[],\n): Map<string, ModelDescriptor[]> {\n  const recommendedKeys = new Set(recommendations.map((item) => item.model));\n  const recommended = models.filter(\n    (model) => recommendedKeys.has(model.key) || recommendedKeys.has(model.id),\n  );\n  const groups = new Map<string, ModelDescriptor[]>();\n  if (recommended.length > 0) groups.set(\"Recommended\", recommended);\n  const selected = new Set(recommended);\n  for (const model of models) {\n    if (selected.has(model)) continue;\n    const group =\n      grouping === \"none\"\n        ? recommended.length > 0\n          ? \"All models\"\n          : \"\"\n        : (modelGroup(model, grouping) ?? \"Other\");\n    const values = groups.get(group) ?? [];\n    values.push(model);\n    groups.set(group, values);\n  }\n  return groups;\n}\n"},{"path":"source/packages/elements/src/icons.ts","content":"import type { ModelDescriptor } from \"../../core/src/index.ts\";\nimport { brandIcons, monochromeBrandIcons } from \"./generated/brandIcons.ts\";\n\n/** Which identity a model control uses for its optional brand mark. */\nexport type ModelIconMode = \"model-maker\" | \"monochrome\" | \"none\";\n\n/** Return a reviewed brand mark for a model maker or serving gateway. */\nexport function modelIcon(model: ModelDescriptor, mode: ModelIconMode): string {\n  if (mode === \"none\") {\n    return \"\";\n  }\n  const slug = modelMakerSlug(model);\n  return slug === undefined\n    ? \"\"\n    : ((mode === \"monochrome\" ? monochromeBrandIcons : brandIcons)[slug] ?? \"\");\n}\n\n/** Return a reviewed provider mark, using its brand colors when available. */\nexport function providerIcon(provider: string, mode: ModelIconMode = \"model-maker\"): string {\n  if (mode === \"none\") return \"\";\n  const slug = providerSlug(provider);\n  return slug === undefined\n    ? \"\"\n    : ((mode === \"monochrome\" ? monochromeBrandIcons : brandIcons)[slug] ?? \"\");\n}\n\nfunction modelMakerSlug(model: ModelDescriptor): string | undefined {\n  const identity = normalize(`${model.name} ${model.id}`);\n  const families: readonly (readonly [string, string])[] = [\n    [\"claude\", \"claude\"],\n    [\"qwen\", \"qwen\"],\n    [\"gemini\", \"gemini\"],\n    [\"gemma\", \"gemma\"],\n    [\"deepseek\", \"deepseek\"],\n    [\"kimi\", \"kimi\"],\n    [\"grok\", \"grok\"],\n    [\"nova\", \"nova\"],\n  ];\n  const family = families.find(([needle]) => identity.includes(needle));\n  return family?.[1] ?? providerSlug(model.author ?? model.provider);\n}\n\nfunction providerSlug(provider: string): string | undefined {\n  const normalized = normalize(provider);\n  const aliases: Readonly<Record<string, string>> = {\n    aionlabs: \"aionlabs\",\n    alibaba: \"alibaba\",\n    amazon: \"bedrock\",\n    anthropic: \"claude\",\n    anthraciteorg: \"\",\n    arceeai: \"arcee\",\n    baidu: \"baidu\",\n    bfl: \"bfl\",\n    bytedance: \"bytedance\",\n    bytendanceseed: \"bytedance\",\n    cognitivecomputations: \"\",\n    cohere: \"cohere\",\n    deepseek: \"deepseek\",\n    fishaudio: \"fishaudio\",\n    google: \"google\",\n    ibmgranite: \"ibm\",\n    inception: \"inception\",\n    klingai: \"kling\",\n    kwaipilot: \"kwaipilot\",\n    liquid: \"liquid\",\n    meta: \"meta\",\n    metallama: \"meta\",\n    microsoft: \"microsoft\",\n    minimax: \"minimax\",\n    mistral: \"mistral\",\n    mistralai: \"mistral\",\n    moonshotai: \"moonshot\",\n    morph: \"morph\",\n    nousresearch: \"nousresearch\",\n    nvidia: \"nvidia\",\n    openai: \"openai\",\n    openrouter: \"openrouter\",\n    perplexity: \"perplexity\",\n    poolside: \"poolside\",\n    qwen: \"qwen\",\n    recraft: \"recraft\",\n    relace: \"relace\",\n    spacexai: \"xai\",\n    stepfun: \"stepfun\",\n    tencent: \"tencent\",\n    upstage: \"upstage\",\n    vercel: \"vercel\",\n    voyage: \"voyage\",\n    xai: \"xai\",\n    xiaomi: \"xiaomimimo\",\n    zai: \"zai\",\n  };\n  const slug = aliases[normalized] ?? normalized;\n  return slug !== \"\" && brandIcons[slug] !== undefined ? slug : undefined;\n}\n\nfunction normalize(value: string): string {\n  return value.toLocaleLowerCase().replaceAll(/[^a-z0-9]/g, \"\");\n}\n\n/** Shared disclosure chevron used by model controls and their hosts. */\nexport const chevronIcon: string =\n  '<svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m6 8 4 4 4-4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>';\n"},{"path":"source/packages/elements/src/index.ts","content":"export {\n  MODEL_CLEAR_EVENT,\n  MODEL_CHANGE_EVENT,\n  OPTIONS_CHANGE_EVENT,\n  SELECTION_CHANGE_EVENT,\n  emitModelClear,\n  emitModelChange,\n  emitSelectionChange,\n} from \"./events.ts\";\nexport { ModelsOptionsElement } from \"./options.ts\";\nexport type { OptionsLayout, VisibleOptionGroup } from \"./options.ts\";\nexport type { ModelGrouping } from \"./grouping.ts\";\nexport { chevronIcon, modelIcon, providerIcon } from \"./icons.ts\";\nexport type { ModelIconMode } from \"./icons.ts\";\nexport { ModelsComposerElement } from \"./composer.ts\";\nexport { ModelsPickerElement } from \"./picker.ts\";\nexport { ModelsPriceElement } from \"./price.ts\";\nexport { ModelsSelectElement } from \"./select.ts\";\nexport type { SelectDensity } from \"./select.ts\";\n\nimport { ModelsOptionsElement } from \"./options.ts\";\nimport { ModelsComposerElement } from \"./composer.ts\";\nimport { ModelsPickerElement } from \"./picker.ts\";\nimport { ModelsPriceElement } from \"./price.ts\";\nimport { ModelsSelectElement } from \"./select.ts\";\n\n/** Explicitly register the Models custom elements without import side effects. */\nexport function defineModelsElements(registry: CustomElementRegistry = customElements): void {\n  defineIfMissing(registry, \"models-select\", ModelsSelectElement);\n  defineIfMissing(registry, \"models-options\", ModelsOptionsElement);\n  defineIfMissing(registry, \"models-price\", ModelsPriceElement);\n  defineIfMissing(registry, \"models-picker\", ModelsPickerElement);\n  defineIfMissing(registry, \"models-composer\", ModelsComposerElement);\n}\n\nfunction defineIfMissing(\n  registry: CustomElementRegistry,\n  name: string,\n  constructor: CustomElementConstructor,\n): void {\n  if (registry.get(name) === undefined) {\n    registry.define(name, constructor);\n  }\n}\n\ndeclare global {\n  /** Native tag names resolve to their Models element types in TypeScript. */\n  interface HTMLElementTagNameMap {\n    \"models-select\": ModelsSelectElement;\n    \"models-options\": ModelsOptionsElement;\n    \"models-composer\": ModelsComposerElement;\n    \"models-picker\": ModelsPickerElement;\n    \"models-price\": ModelsPriceElement;\n  }\n}\n"},{"path":"source/packages/elements/src/options.ts","content":"import {\n  validateConstraints,\n  validateOptions,\n  type ModelDescriptor,\n  type OptionDefinition,\n  type OptionValues,\n} from \"../../core/src/index.ts\";\nimport { ModelsHTMLElement } from \"./base.ts\";\nimport { OPTIONS_CHANGE_EVENT } from \"./events.ts\";\nimport { chevronIcon } from \"./icons.ts\";\nimport { elementStyles } from \"./styles.ts\";\n\n/** Option groups that a host can choose to show. */\nexport type VisibleOptionGroup = OptionDefinition[\"group\"];\n\n/** Layout of generated model options. */\nexport type OptionsLayout = \"inline\" | \"stacked\";\n\n/** Framework-neutral controls generated from a model's option schema. */\nexport class ModelsOptionsElement extends ModelsHTMLElement {\n  #model: ModelDescriptor | undefined;\n  #values: Readonly<Record<string, unknown>> = {};\n  #groups: readonly VisibleOptionGroup[] = [\n    \"reasoning\",\n    \"speed\",\n    \"routing\",\n    \"caching\",\n    \"beta\",\n    \"generation\",\n  ];\n  #excludedKeys: readonly string[] = [];\n  #layout: OptionsLayout = \"stacked\";\n  readonly #root: ShadowRoot;\n\n  constructor() {\n    super();\n    this.#root = this.attachShadow({ mode: \"open\" });\n  }\n\n  /** The model whose options should be displayed. */\n  get model(): ModelDescriptor | undefined {\n    return this.#model;\n  }\n\n  set model(value: ModelDescriptor | undefined) {\n    this.#model = value;\n    this.render();\n  }\n\n  /** Current option values. */\n  get value(): Readonly<Record<string, unknown>> {\n    return this.#values;\n  }\n\n  set value(value: Readonly<Record<string, unknown>>) {\n    this.#values = value;\n    this.render();\n  }\n\n  /** Groups included by this instance. */\n  get groups(): readonly VisibleOptionGroup[] {\n    return this.#groups;\n  }\n\n  set groups(value: readonly VisibleOptionGroup[]) {\n    this.#groups = value;\n    this.render();\n  }\n\n  /** Option keys omitted by this instance. Useful when quick controls render them elsewhere. */\n  get excludedKeys(): readonly string[] {\n    return this.#excludedKeys;\n  }\n\n  set excludedKeys(value: readonly string[]) {\n    this.#excludedKeys = value;\n    this.render();\n  }\n\n  /** Layout of the generated controls. Inline mode fits a chat composer. */\n  get layout(): OptionsLayout {\n    return this.#layout;\n  }\n\n  set layout(value: OptionsLayout) {\n    this.#layout = value;\n    this.render();\n  }\n\n  connectedCallback(): void {\n    this.render();\n  }\n\n  private render(): void {\n    const model = this.#model;\n    const options =\n      model?.options.filter(\n        (option) =>\n          option.support.status === \"supported\" &&\n          this.#groups.includes(option.group) &&\n          !this.#excludedKeys.includes(option.key) &&\n          isOptionVisible(option, model.options, this.#values),\n      ) ?? [];\n    if (this.#layout === \"inline\" && options.length === 0) {\n      this.hidden = true;\n      this.#root.innerHTML = \"\";\n      return;\n    }\n    this.hidden = false;\n    this.#root.innerHTML = `\n      <style>\n        ${elementStyles}\n        .options { display: grid; gap: 10px; }\n        .options.inline { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }\n        .inline .field { display: flex; align-items: center; gap: 8px; min-height: var(--models-control-height, 36px); border: 1px solid var(--models-border, #b8b8b2); border-radius: var(--models-radius, 7px); background: var(--models-surface, #fff); }\n        .inline .field > .label { padding-left: 9px; color: var(--models-muted, #646464); font-size: var(--models-font-size, 13px); font-weight: 400; white-space: nowrap; }\n        .inline .control { height: calc(var(--models-control-height, 36px) - 2px); min-height: 0; width: auto; max-width: 170px; border: 0; padding: 0 30px 0 0; background: transparent; font-size: var(--models-font-size, 13px); font-weight: 500; }\n        select.control { appearance: none; padding-right: 30px; }\n        .select-caret { position: absolute; right: 9px; width: 16px; height: 16px; color: var(--models-muted, #646464); pointer-events: none; }\n        .select-caret svg { display: block; width: 100%; height: 100%; }\n        .option-shell { position: relative; display: flex; align-items: center; }\n        .inline .check { min-height: var(--models-control-height, 36px); border: 1px solid var(--models-border, #b8b8b2); border-radius: var(--models-radius, 7px); padding: 4px 8px 4px 9px; font-size: var(--models-font-size, 13px); }\n        .inline .check strong { font-weight: 500; }\n        .inline .check input { order: 2; margin: 0 0 0 4px; accent-color: var(--models-focus, #2563eb); }\n        .empty { margin: 0; }\n        .check { display: flex; align-items: center; gap: 8px; min-height: var(--models-control-height, 36px); }\n        .help { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n        .requirements { border-top: 1px solid var(--models-border, #d6d6d6); padding-top: 12px; }\n        .requirements summary { display: flex; align-items: center; gap: 6px; list-style: none; cursor: pointer; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); font-weight: 500; }\n        .requirements summary::-webkit-details-marker { display: none; }\n        .requirements summary svg { width: 16px; height: 16px; }\n        .requirements[open] summary svg { transform: rotate(180deg); }\n        .requirements ul { margin: 8px 0 0; padding-left: 18px; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); }\n        .issues { margin: 0; padding: 10px 12px 10px 28px; border: 1px solid var(--models-warning-border, #e6c66a); border-radius: 6px; background: var(--models-warning-surface, #fff9e8); color: var(--models-warning-text, #684f00); font-size: var(--models-font-small, 12px); }\n      </style>\n      <div class=\"options ${this.#layout}\" part=\"options\">\n        ${options.length === 0 ? '<p class=\"empty muted\">No selectable details for this view.</p>' : options.map((option) => renderOption(option, this.#values[option.key], this.#layout)).join(\"\")}\n        ${renderIssues(model, this.#values)}\n        ${this.#layout === \"stacked\" ? renderRequirements(model) : \"\"}\n      </div>\n    `;\n    for (const control of this.#root.querySelectorAll<HTMLInputElement | HTMLSelectElement>(\n      \"[data-option]\",\n    )) {\n      control.addEventListener(\"change\", () => this.onChange(control));\n    }\n  }\n\n  private onChange(control: HTMLInputElement | HTMLSelectElement): void {\n    const key = control.dataset.option;\n    const model = this.#model;\n    if (key === undefined || model === undefined) {\n      return;\n    }\n    const definition = model.options.find((option) => option.key === key);\n    if (definition === undefined) {\n      return;\n    }\n    const next = { ...this.#values };\n    const value = readControlValue(control, definition);\n    if (value === undefined || value === \"\") {\n      delete next[key];\n    } else {\n      next[key] = value;\n    }\n    this.#values = next;\n    this.dispatchEvent(\n      new CustomEvent(OPTIONS_CHANGE_EVENT, {\n        detail: next as OptionValues<typeof model.options>,\n        bubbles: true,\n        composed: true,\n      }),\n    );\n    this.render();\n    this.#root.querySelector<HTMLElement>(`[data-option=\"${CSS.escape(key)}\"]`)?.focus();\n  }\n}\n\nfunction renderIssues(\n  model: ModelDescriptor | undefined,\n  values: Readonly<Record<string, unknown>>,\n): string {\n  if (model === undefined) {\n    return \"\";\n  }\n  const optionResult = validateOptions(model.options, values);\n  const issues = [\n    ...(optionResult.ok ? [] : optionResult.issues),\n    ...validateConstraints(model, values),\n  ];\n  return issues.length === 0\n    ? \"\"\n    : `<ul class=\"issues\" role=\"alert\">${issues.map((issue) => `<li>${escapeHtml(issue.message)}</li>`).join(\"\")}</ul>`;\n}\n\nfunction renderOption(option: OptionDefinition, value: unknown, layout: OptionsLayout): string {\n  const id = `models-option-${safeId(option.key)}`;\n  if (option.kind === \"boolean\") {\n    const input = `<input data-option=\"${escapeHtml(option.key)}\" type=\"checkbox\" ${value === true ? \"checked\" : \"\"}>`;\n    const text = `<span><strong>${escapeHtml(option.label)}</strong><span class=\"help\">${escapeHtml(option.description)}</span></span>`;\n    return `<label class=\"check\" part=\"option\" title=\"${escapeHtml(option.description)}\">${layout === \"inline\" ? `${text}${input}` : `${input}${text}`}</label>`;\n  }\n  const control =\n    option.kind === \"enum\"\n      ? `<select id=\"${id}\" class=\"control\" data-option=\"${escapeHtml(option.key)}\"><option value=\"\">Provider default</option>${option.values.map((candidate) => `<option value=\"${escapeHtml(candidate)}\" ${candidate === value ? \"selected\" : \"\"}>${escapeHtml(candidate)}</option>`).join(\"\")}</select>`\n      : option.kind === \"string-list\"\n        ? `<input id=\"${id}\" class=\"control\" data-option=\"${escapeHtml(option.key)}\" value=\"${escapeHtml(Array.isArray(value) ? value.join(\", \") : \"\")}\"${layout === \"inline\" ? \"\" : ` placeholder=\"${escapeHtml(option.label)}\"`}>`\n        : `<input id=\"${id}\" class=\"control\" data-option=\"${escapeHtml(option.key)}\" type=\"number\" ${option.min === undefined ? \"\" : `min=\"${option.min}\"`} ${option.max === undefined ? \"\" : `max=\"${option.max}\"`} ${option.step === undefined ? \"\" : `step=\"${option.step}\"`} value=\"${typeof value === \"number\" ? value : \"\"}\"${layout === \"inline\" ? \"\" : ` placeholder=\"${escapeHtml(option.label)}\"`}>`;\n  return `<label class=\"field\" part=\"option\" for=\"${id}\" title=\"${escapeHtml(option.description)}\"><span class=\"label\">${escapeHtml(option.label)}</span><span class=\"option-shell\">${control}${option.kind === \"enum\" ? `<span class=\"select-caret\">${chevronIcon}</span>` : \"\"}</span><span class=\"help\">${escapeHtml(option.description)}</span></label>`;\n}\n\nfunction isOptionVisible(\n  option: OptionDefinition,\n  options: readonly OptionDefinition[],\n  values: Readonly<Record<string, unknown>>,\n): boolean {\n  if (\n    option.visibleWhen !== undefined &&\n    values[option.visibleWhen.key] !== option.visibleWhen.equals\n  ) {\n    return false;\n  }\n  if (!option.key.endsWith(\"maxTokens\")) {\n    return true;\n  }\n  const toggle = options.find(\n    (candidate) =>\n      candidate.group === option.group &&\n      candidate.kind === \"boolean\" &&\n      candidate.key.endsWith(\"enabled\"),\n  );\n  return toggle === undefined || values[toggle.key] === true;\n}\n\nfunction renderRequirements(model: ModelDescriptor | undefined): string {\n  if (model === undefined || model.requirements.length === 0) {\n    return \"\";\n  }\n  return `<details class=\"requirements\" part=\"requirements\"><summary>Integration notes · ${model.requirements.length}${chevronIcon}</summary><ul>${model.requirements.map((requirement) => `<li><strong>${escapeHtml(requirement.title)}:</strong> ${escapeHtml(requirement.description)}</li>`).join(\"\")}</ul></details>`;\n}\n\nfunction readControlValue(\n  control: HTMLInputElement | HTMLSelectElement,\n  definition: OptionDefinition,\n): unknown {\n  if (definition.kind === \"boolean\" && control instanceof HTMLInputElement) {\n    return control.checked;\n  }\n  if ((definition.kind === \"number\" || definition.kind === \"integer\") && control.value !== \"\") {\n    return Number(control.value);\n  }\n  if (definition.kind === \"string-list\") {\n    return control.value\n      .split(\",\")\n      .map((value) => value.trim())\n      .filter(Boolean);\n  }\n  return control.value;\n}\n\nfunction safeId(value: string): string {\n  return value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n}\n\nfunction escapeHtml(value: string): string {\n  return value.replace(\n    /[&<>\"']/g,\n    (character) =>\n      ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" })[character] ??\n      character,\n  );\n}\n"},{"path":"source/packages/elements/src/picker.ts","content":"import {\n  recommendedSelection,\n  validateConstraints,\n  validateOptions,\n  type ModelCatalog,\n  type ModelDescriptor,\n  type ModelRecommendation,\n  type ModelSelection,\n  type OptionValues,\n} from \"../../core/src/index.ts\";\nimport { ModelsHTMLElement } from \"./base.ts\";\nimport { emitSelectionChange, OPTIONS_CHANGE_EVENT } from \"./events.ts\";\nimport { modelGroups, type ModelGrouping } from \"./grouping.ts\";\nimport { modelIcon, type ModelIconMode } from \"./icons.ts\";\nimport type { OptionsLayout, VisibleOptionGroup } from \"./options.ts\";\nimport { ModelsOptionsElement } from \"./options.ts\";\nimport { ModelsPriceElement } from \"./price.ts\";\nimport { elementStyles } from \"./styles.ts\";\n\n/** A searchable, composed model picker with optional detail groups and pricing. */\nexport class ModelsPickerElement extends ModelsHTMLElement {\n  #catalogs: readonly ModelCatalog[] = [];\n  #selected: ModelDescriptor | undefined;\n  #options: OptionValues<ModelDescriptor[\"options\"]> = {};\n  #groups: readonly VisibleOptionGroup[] = [\n    \"reasoning\",\n    \"speed\",\n    \"routing\",\n    \"caching\",\n    \"beta\",\n    \"generation\",\n  ];\n  #query = \"\";\n  #groupBy: ModelGrouping = \"none\";\n  #optionsLayout: OptionsLayout = \"stacked\";\n  #iconMode: ModelIconMode = \"none\";\n  #recommendations: readonly ModelRecommendation[] = [];\n  readonly #root: ShadowRoot;\n\n  constructor() {\n    super();\n    this.#root = this.attachShadow({ mode: \"open\" });\n  }\n\n  /** Catalogs available to the picker. */\n  get catalogs(): readonly ModelCatalog[] {\n    return this.#catalogs;\n  }\n\n  set catalogs(value: readonly ModelCatalog[]) {\n    this.#catalogs = value;\n    const models = value.flatMap((catalog) => catalog.models);\n    if (\n      this.#selected === undefined ||\n      !models.some((model) => model.key === this.#selected?.key)\n    ) {\n      this.#selected = models[0];\n      this.#options = {};\n      this.#query = \"\";\n    }\n    this.render();\n  }\n\n  /** Option groups visible in the detail panel. Use an empty list for model-only mode. */\n  get groups(): readonly VisibleOptionGroup[] {\n    return this.#groups;\n  }\n\n  set groups(value: readonly VisibleOptionGroup[]) {\n    this.#groups = value;\n    this.render();\n  }\n\n  /** How the model list is grouped. Author grouping is useful for gateways. */\n  get groupBy(): ModelGrouping {\n    return this.#groupBy;\n  }\n\n  set groupBy(value: ModelGrouping) {\n    this.#groupBy = value;\n    this.render();\n  }\n\n  /** Layout used for the selected model's option controls. */\n  get optionsLayout(): OptionsLayout {\n    return this.#optionsLayout;\n  }\n\n  set optionsLayout(value: OptionsLayout) {\n    this.#optionsLayout = value;\n    this.render();\n  }\n\n  /** Which optional brand identity is shown in model rows. */\n  get iconMode(): ModelIconMode {\n    return this.#iconMode;\n  }\n\n  set iconMode(value: ModelIconMode) {\n    this.#iconMode = value;\n    this.render();\n  }\n\n  /** App-owned recommendation labels shown beside matching models. */\n  get recommendations(): readonly ModelRecommendation[] {\n    return this.#recommendations;\n  }\n\n  set recommendations(value: readonly ModelRecommendation[]) {\n    this.#recommendations = value;\n    this.render();\n  }\n\n  /** The current complete selection. */\n  get value(): ModelSelection | undefined {\n    return this.#selected === undefined\n      ? undefined\n      : { model: this.#selected, options: this.#options };\n  }\n\n  set value(value: ModelSelection | undefined) {\n    this.#selected = value?.model;\n    this.#options = value?.options ?? {};\n    this.render();\n  }\n\n  connectedCallback(): void {\n    this.render();\n  }\n\n  private render(): void {\n    const models = this.#catalogs.flatMap((catalog) => catalog.models);\n    const selected = this.#selected;\n    this.#root.innerHTML = `\n      <style>\n        ${elementStyles}\n        .picker { display: grid; grid-template-columns: minmax(230px, .8fr) minmax(280px, 1.2fr); border: 1px solid var(--models-border, #d6d6d6); border-radius: var(--models-panel-radius, 9px); overflow: hidden; background: var(--models-surface, #fff); }\n        .models { min-width: 0; border-right: 1px solid var(--models-border, #d6d6d6); }\n        .search { padding: 7px; border-bottom: 1px solid var(--models-border, #d6d6d6); }\n        .search .label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n        .list { max-height: var(--models-list-height, 390px); overflow: auto; padding: 5px; }\n        .group { padding: 10px 8px 4px; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); font-weight: 500; letter-spacing: .08em; text-transform: uppercase; }\n        .model { width: 100%; border: 0; border-radius: 6px; background: transparent; padding: 6px 8px; text-align: left; cursor: pointer; }\n        .model:hover { background: var(--models-hover, #f5f5f5); }\n        .model[aria-selected=\"true\"] { background: var(--models-selected, #eef4ff); }\n        .model-name { display: flex; align-items: center; gap: 8px; min-width: 0; overflow: hidden; font-weight: 500; white-space: nowrap; }\n        .model-icon { flex: 0 0 16px; width: 16px; height: 16px; color: var(--models-muted, #646464); }\n        .model-icon svg { display: block; width: 100%; height: 100%; }\n        .model-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n        .model-qualifier { overflow: hidden; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }\n        .model-recommendation { color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); font-weight: 500; }\n        .no-results { margin: 16px 8px; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); text-align: center; }\n        .detail { display: grid; align-content: start; gap: 14px; padding: 16px; min-width: 0; }\n        .detail h3 { overflow: hidden; margin: 0; font-size: var(--models-font-size, 13px); text-overflow: ellipsis; white-space: nowrap; }\n        .detail-head { display: flex; align-items: start; justify-content: space-between; gap: 12px; }\n        .detail-name { display: grid; gap: 2px; min-width: 0; overflow: hidden; }\n        .detail-name .muted { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n        .facts { position: relative; }\n        .facts summary { list-style: none; cursor: help; color: var(--models-muted, #646464); }\n        .facts summary::-webkit-details-marker { display: none; }\n        .facts p { position: absolute; right: 0; z-index: 2; width: min(260px, 70vw); margin: 8px 0 0; border: 1px solid var(--models-border, #d6d6d6); border-radius: 6px; padding: 9px; background: var(--models-surface, #fff); box-shadow: 0 8px 24px #0001; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); }\n        @media (max-width: 640px) { .picker { grid-template-columns: 1fr; } .models { border-right: 0; border-bottom: 1px solid var(--models-border, #d6d6d6); } .list { max-height: 260px; } }\n      </style>\n      <div class=\"picker\" part=\"picker\">\n        <section class=\"models\" part=\"models\">\n          <div class=\"search\"><label class=\"field\"><span class=\"label\">Find a model</span><input class=\"control\" type=\"search\" value=\"${escapeHtml(this.#query)}\" placeholder=\"Search models\" aria-controls=\"models-list\"></label></div>\n          <div class=\"list\" id=\"models-list\" role=\"listbox\" aria-label=\"Models\">${renderModels(models, selected?.key, this.#groupBy, this.#iconMode, this.#recommendations)}<p class=\"no-results\" role=\"status\" hidden>No matching models</p></div>\n        </section>\n        <section class=\"detail\" part=\"detail\">\n          ${selected === undefined ? '<p class=\"muted\">No models are available.</p>' : renderDetailHead(selected)}\n          ${selected === undefined ? \"\" : \"<models-price></models-price><models-options></models-options>\"}\n        </section>\n      </div>\n    `;\n    const list = this.#root.querySelector<HTMLElement>(\"[role=listbox]\");\n    const input = this.#root.querySelector<HTMLInputElement>(\"input[type=search]\");\n    input?.addEventListener(\"input\", () => {\n      this.#query = input.value;\n      this.filter(this.#query);\n    });\n    input?.addEventListener(\"keydown\", (event) => {\n      if (event.key === \"ArrowDown\") {\n        event.preventDefault();\n        this.visibleButtons()[0]?.focus();\n      }\n    });\n    list?.addEventListener(\"keydown\", (event) => this.onListKeydown(event));\n    for (const button of this.#root.querySelectorAll<HTMLButtonElement>(\"button[data-key]\")) {\n      button.addEventListener(\"click\", () => {\n        const model = models.find((candidate) => candidate.key === button.dataset.key);\n        if (model !== undefined) {\n          this.#options = recommendedSelection(model, this.#recommendations).options;\n          this.#selected = model;\n          this.render();\n          this.#root\n            .querySelector<HTMLButtonElement>(`button[data-key=\"${CSS.escape(model.key)}\"]`)\n            ?.focus();\n          this.emit();\n        }\n      });\n    }\n    const price = this.#root.querySelector(\"models-price\");\n    if (price instanceof ModelsPriceElement) {\n      price.model = selected;\n    }\n    const options = this.#root.querySelector(\"models-options\");\n    if (options instanceof ModelsOptionsElement) {\n      options.model = selected;\n      options.groups = this.#groups;\n      options.layout = this.#optionsLayout;\n      options.value = this.#options;\n      options.addEventListener(OPTIONS_CHANGE_EVENT, (event) => {\n        this.#options = (event as CustomEvent<OptionValues<ModelDescriptor[\"options\"]>>).detail;\n        this.emit();\n      });\n    }\n    this.filter(this.#query);\n  }\n\n  private filter(query: string): void {\n    const words = query.toLocaleLowerCase().trim().split(/\\s+/).filter(Boolean);\n    for (const button of this.#root.querySelectorAll<HTMLButtonElement>(\"button[data-key]\")) {\n      const haystack = button.dataset.search ?? \"\";\n      button.hidden = !words.every((word) => haystack.includes(word));\n    }\n    for (const group of this.#root.querySelectorAll<HTMLElement>(\"[data-model-group]\")) {\n      group.hidden = ![...group.querySelectorAll<HTMLButtonElement>(\"button[data-key]\")].some(\n        (button) => !button.hidden,\n      );\n    }\n    const hasMatches = this.visibleButtons().length > 0;\n    const noResults = this.#root.querySelector<HTMLElement>(\".no-results\");\n    if (noResults !== null) {\n      noResults.hidden = hasMatches;\n    }\n    const detail = this.#root.querySelector<HTMLElement>(\".detail\");\n    if (detail !== null) {\n      detail.hidden = !hasMatches;\n    }\n  }\n\n  private onListKeydown(event: KeyboardEvent): void {\n    if (event.key === \"Escape\") {\n      this.#root.querySelector<HTMLInputElement>(\"input[type=search]\")?.focus();\n      return;\n    }\n    if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) {\n      return;\n    }\n    event.preventDefault();\n    const buttons = this.visibleButtons();\n    const current = buttons.indexOf(this.#root.activeElement as HTMLButtonElement);\n    const index =\n      event.key === \"Home\"\n        ? 0\n        : event.key === \"End\"\n          ? buttons.length - 1\n          : event.key === \"ArrowDown\"\n            ? Math.min(current + 1, buttons.length - 1)\n            : Math.max(current - 1, 0);\n    buttons[index]?.focus();\n  }\n\n  private visibleButtons(): HTMLButtonElement[] {\n    return [...this.#root.querySelectorAll<HTMLButtonElement>(\"button[data-key]\")].filter(\n      (button) => !button.hidden,\n    );\n  }\n\n  private emit(): void {\n    const value = this.value;\n    if (value === undefined) {\n      return;\n    }\n    const optionResult = validateOptions(value.model.options, value.options);\n    if (!optionResult.ok || validateConstraints(value.model, value.options).length > 0) {\n      return;\n    }\n    emitSelectionChange(this, value);\n  }\n}\n\nfunction renderModel(\n  model: ModelDescriptor,\n  selected: boolean,\n  isDuplicate: boolean,\n  iconMode: ModelIconMode,\n  recommendations: readonly ModelRecommendation[],\n): string {\n  const badges = [\n    model.capabilities.reasoning.status === \"supported\" ? \"reasoning\" : \"\",\n    model.capabilities.tools.status === \"supported\" ? \"tools\" : \"\",\n    model.contextWindow === undefined\n      ? \"\"\n      : `${Math.round(model.contextWindow.value / 1000)}K context`,\n  ].filter(Boolean);\n  const search =\n    `${model.name} ${model.provider} ${model.id} ${badges.join(\" \")}`.toLocaleLowerCase();\n  const icon = modelIcon(model, iconMode);\n  const recommendationLabels = recommendations\n    .filter((candidate) => candidate.model === model.key || candidate.model === model.id)\n    .map((candidate) => candidate.label)\n    .join(\" · \");\n  return `<button class=\"model\" part=\"model${selected ? \" selected-model\" : \"\"}\" role=\"option\" aria-selected=\"${selected}\" tabindex=\"${selected ? \"0\" : \"-1\"}\" title=\"${escapeHtml(`${model.name} · ${model.id}`)}\" data-key=\"${escapeHtml(model.key)}\" data-search=\"${escapeHtml(`${search} ${recommendationLabels}`)}\"><span class=\"model-name\">${icon === \"\" ? \"\" : `<span class=\"model-icon\">${icon}</span>`}<span class=\"model-label\">${escapeHtml(model.name)}${recommendationLabels === \"\" ? \"\" : ` <span class=\"model-recommendation\">${escapeHtml(recommendationLabels)}</span>`}${isDuplicate ? ` <span class=\"model-qualifier\">· ${escapeHtml(model.id)}</span>` : \"\"}</span></span></button>`;\n}\n\nfunction renderModels(\n  models: readonly ModelDescriptor[],\n  selectedKey: string | undefined,\n  grouping: ModelGrouping,\n  iconMode: ModelIconMode,\n  recommendations: readonly ModelRecommendation[],\n): string {\n  const nameCounts = new Map<string, number>();\n  for (const model of models) {\n    nameCounts.set(model.name, (nameCounts.get(model.name) ?? 0) + 1);\n  }\n  const render = (model: ModelDescriptor): string =>\n    renderModel(\n      model,\n      selectedKey === model.key,\n      (nameCounts.get(model.name) ?? 0) > 1,\n      iconMode,\n      recommendations,\n    );\n  const groups = modelGroups(models, grouping, recommendations);\n  return [...groups]\n    .map(\n      ([group, values]) =>\n        `<div data-model-group role=\"group\" aria-label=\"${escapeHtml(group)}\">${group === \"\" ? \"\" : `<div class=\"group\" role=\"presentation\">${escapeHtml(group)}</div>`}${values.map(render).join(\"\")}</div>`,\n    )\n    .join(\"\");\n}\n\nfunction renderDetailHead(model: ModelDescriptor): string {\n  const source = model.sources[0];\n  const evidence =\n    source === undefined\n      ? \"No source is listed.\"\n      : `${source.kind} · ${source.retrievedAt.slice(0, 10)} · ${source.scope ?? \"provider\"}`;\n  return `<header class=\"detail-head\" part=\"detail-heading\"><span class=\"detail-name\"><h3 title=\"${escapeHtml(model.name)}\">${escapeHtml(model.name)}</h3><span class=\"muted\" title=\"${escapeHtml(model.id)}\">${escapeHtml(model.id)}</span></span><details class=\"facts\"><summary aria-label=\"Model evidence\" title=\"Model evidence\">ⓘ</summary><p>${escapeHtml(evidence)}</p></details></header>`;\n}\n\nfunction escapeHtml(value: string): string {\n  return value.replace(\n    /[&<>\"']/g,\n    (character) =>\n      ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" })[character] ??\n      character,\n  );\n}\n"},{"path":"source/packages/elements/src/price.ts","content":"import { formatUsd, pricePerMillion, type ModelDescriptor } from \"../../core/src/index.ts\";\nimport { ModelsHTMLElement } from \"./base.ts\";\nimport { elementStyles } from \"./styles.ts\";\n\n/** An optional compact price summary for a selected model. */\nexport class ModelsPriceElement extends ModelsHTMLElement {\n  #model: ModelDescriptor | undefined;\n  readonly #root: ShadowRoot;\n\n  constructor() {\n    super();\n    this.#root = this.attachShadow({ mode: \"open\" });\n  }\n\n  /** The model whose base token prices should be shown. */\n  get model(): ModelDescriptor | undefined {\n    return this.#model;\n  }\n\n  set model(value: ModelDescriptor | undefined) {\n    this.#model = value;\n    this.render();\n  }\n\n  connectedCallback(): void {\n    this.render();\n  }\n\n  private render(): void {\n    const model = this.#model;\n    const input = model === undefined ? undefined : pricePerMillion(model.prices, \"input-token\");\n    const output = model === undefined ? undefined : pricePerMillion(model.prices, \"output-token\");\n    const cache =\n      model === undefined ? undefined : pricePerMillion(model.prices, \"cache-read-token\");\n    const items = [\n      [\"Input\", input],\n      [\"Output\", output],\n      [\"Cached\", cache],\n    ] as const;\n    const listed = items.flatMap(([label, value]) =>\n      value === undefined ? [] : [{ label, value }],\n    );\n    this.#root.innerHTML = `\n      <style>\n        ${elementStyles}\n        dl { display: flex; flex-wrap: wrap; gap: 7px 14px; margin: 0; }\n        div { display: flex; gap: 4px; min-width: 0; }\n        dt { color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); }\n        dd { margin: 0; font-size: var(--models-font-small, 12px); font-weight: 500; }\n        p { margin: 0; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); }\n      </style>\n      ${listed.length === 0 ? '<p part=\"prices\">No public token price</p>' : `<dl part=\"prices\">${listed.map(({ label, value }) => priceItem(label, value)).join(\"\")}</dl>`}\n    `;\n  }\n}\n\nfunction priceItem(label: string, value: string): string {\n  return `<div part=\"price\"><dt>${label}</dt><dd>${formatUsd(value)} / 1M</dd></div>`;\n}\n"},{"path":"source/packages/elements/src/select.ts","content":"import {\n  recommendedSelection,\n  type ModelCatalog,\n  type ModelDescriptor,\n  type ModelRecommendation,\n} from \"../../core/src/index.ts\";\nimport { ModelsHTMLElement } from \"./base.ts\";\nimport { emitModelChange, emitModelClear, emitSelectionChange } from \"./events.ts\";\nimport { modelGroup, type ModelGrouping } from \"./grouping.ts\";\nimport { chevronIcon, modelIcon, type ModelIconMode } from \"./icons.ts\";\nimport { elementStyles } from \"./styles.ts\";\n\n/** Visual density of the model control. */\nexport type SelectDensity = \"compact\" | \"default\";\n\nlet nextListId = 0;\n\n/** A compact, accessible, searchable model combobox. */\nexport class ModelsSelectElement extends ModelsHTMLElement {\n  #catalogs: readonly ModelCatalog[] = [];\n  #value = \"\";\n  #groupBy: ModelGrouping = \"none\";\n  #density: SelectDensity = \"default\";\n  #iconMode: ModelIconMode = \"none\";\n  #recommendations: readonly ModelRecommendation[] = [];\n  #isOpen = false;\n  #ignoreNextFocus = false;\n  #query = \"\";\n  #activeKey: string | undefined;\n  readonly #listId = `models-select-list-${nextListId++}`;\n  readonly #root: ShadowRoot;\n  readonly #onDocumentPointerDown = (event: Event): void => {\n    if (this.#isOpen && !event.composedPath().includes(this)) {\n      this.#isOpen = false;\n      this.#query = \"\";\n      this.#activeKey = undefined;\n      this.render();\n    }\n  };\n  readonly #onWindowResize = (): void => this.placeList();\n  readonly #onFocusOut = (event: Event): void => {\n    if (!(event instanceof FocusEvent)) {\n      return;\n    }\n    const next = event.relatedTarget;\n    if (next instanceof Node && this.#root.contains(next)) {\n      return;\n    }\n    this.#isOpen = false;\n    this.#query = \"\";\n    this.#activeKey = undefined;\n    this.render();\n  };\n\n  constructor() {\n    super();\n    this.#root = this.attachShadow({ mode: \"open\" });\n    this.#root.addEventListener(\"focusout\", this.#onFocusOut);\n  }\n\n  /** Catalogs shown by the search. Pass rich values through this property. */\n  get catalogs(): readonly ModelCatalog[] {\n    return this.#catalogs;\n  }\n\n  set catalogs(value: readonly ModelCatalog[]) {\n    this.#catalogs = value;\n    if (!value.some((catalog) => catalog.models.some((model) => model.key === this.#value))) {\n      this.#value = \"\";\n    }\n    this.#query = \"\";\n    this.#activeKey = undefined;\n    this.render();\n  }\n\n  /** The selected provider-qualified model key. */\n  get value(): string {\n    return this.#value;\n  }\n\n  set value(value: string) {\n    this.#value = value;\n    this.#query = \"\";\n    this.#activeKey = undefined;\n    this.render();\n  }\n\n  /** Optional grouping used inside the open model list. */\n  get groupBy(): ModelGrouping {\n    return this.#groupBy;\n  }\n\n  set groupBy(value: ModelGrouping) {\n    this.#groupBy = value;\n    this.render();\n  }\n\n  /** Visual density of the model control. Compact mode fits a chat composer. */\n  get density(): SelectDensity {\n    return this.#density;\n  }\n\n  set density(value: SelectDensity) {\n    this.#density = value;\n    this.render();\n  }\n\n  /** Whether model-maker marks are shown beside models. */\n  get iconMode(): ModelIconMode {\n    return this.#iconMode;\n  }\n\n  set iconMode(value: ModelIconMode) {\n    this.#iconMode = value;\n    this.render();\n  }\n\n  /** Application-owned labels shown above the ordinary model groups. */\n  get recommendations(): readonly ModelRecommendation[] {\n    return this.#recommendations;\n  }\n\n  set recommendations(value: readonly ModelRecommendation[]) {\n    this.#recommendations = value;\n    this.render();\n  }\n\n  connectedCallback(): void {\n    document.addEventListener(\"pointerdown\", this.#onDocumentPointerDown);\n    window.addEventListener(\"resize\", this.#onWindowResize);\n    this.render();\n  }\n\n  disconnectedCallback(): void {\n    document.removeEventListener(\"pointerdown\", this.#onDocumentPointerDown);\n    window.removeEventListener(\"resize\", this.#onWindowResize);\n  }\n\n  private render(): void {\n    const models = languageModels(this.#catalogs);\n    const suggestions = modelSuggestions(models, this.#listId, this.#recommendations);\n    const selected = models.find((model) => model.key === this.#value);\n    const selectedSuggestion = suggestions.find(\n      (suggestion) => suggestion.model.key === this.#value,\n    );\n    const displayValue = this.#isOpen ? this.#query : (selectedSuggestion?.value ?? \"\");\n    const icon = selected === undefined || this.#isOpen ? \"\" : modelIcon(selected, this.#iconMode);\n    // Replacing the focused input can emit focusout before its replacement receives focus.\n    this.#root.removeEventListener(\"focusout\", this.#onFocusOut);\n    this.#root.innerHTML = `\n      <style>${elementStyles}</style>\n      <style>\n        :host { position: relative; display: ${this.#density === \"compact\" ? \"inline-block\" : \"block\"}; width: ${this.#density === \"compact\" ? \"min(260px, 100%)\" : \"auto\"}; }\n        .field { width: 100%; }\n        .search-shell { position: relative; display: flex; align-items: center; width: 100%; min-width: 0; }\n        .search-icon { position: absolute; left: 9px; z-index: 1; width: 16px; height: 16px; color: var(--models-muted, #646464); pointer-events: none; }\n        .search-icon svg { display: block; width: 100%; height: 100%; }\n        .search-shell.has-icon .control { padding-left: 31px; }\n        .control { padding-right: 30px; }\n        .control::-webkit-search-cancel-button { display: none; appearance: none; }\n        .caret { position: absolute; right: 9px; display: grid; place-items: center; width: 16px; height: 16px; color: var(--models-muted, #646464); pointer-events: none; transition: transform 120ms ease; }\n        .caret.open { transform: rotate(180deg); }\n        .caret svg { display: block; width: 100%; height: 100%; }\n        .compact .label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n        .compact .control { min-height: var(--models-control-height, 36px); width: 100%; padding-top: 3px; padding-bottom: 3px; border-radius: 7px; font-size: var(--models-font-size, 13px); font-weight: 500; }\n        .list { position: absolute; top: calc(100% + 6px); left: 0; z-index: 20; width: min(340px, calc(100vw - 32px)); max-height: min(360px, var(--models-list-space, 60vh)); overflow: auto; border: 1px solid var(--models-border, #d6d6d6); border-radius: 9px; padding: 5px; background: var(--models-surface, #fff); box-shadow: 0 14px 36px #0003; }\n        .list.above { top: auto; bottom: calc(100% + 6px); }\n        .group { padding: 9px 8px 4px; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); font-weight: 500; letter-spacing: .08em; text-transform: uppercase; }\n        .option { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 8px; width: 100%; min-height: var(--models-control-height, 36px); border: 0; border-radius: 6px; padding: 5px 8px; background: transparent; font-size: var(--models-font-size, 13px); text-align: left; cursor: pointer; }\n        .option.no-icon { grid-template-columns: minmax(0, 1fr) auto; }\n        .option:hover, .option.active { background: var(--models-hover, #f5f5f5); }\n        .option[aria-selected=\"true\"] { background: var(--models-selected, #eef4ff); }\n        .option-icon { width: 16px; height: 16px; color: var(--models-muted, #646464); }\n        .option-icon svg { display: block; width: 100%; height: 100%; }\n        .option-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n        .option-meta { margin-left: 5px; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); font-weight: 500; }\n        .check { color: var(--models-muted, #646464); }\n        .empty { margin: 18px 10px; color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); text-align: center; }\n      </style>\n      <label class=\"field ${this.#density === \"compact\" ? \"compact\" : \"\"}\" part=\"field\">\n        <span class=\"label\" part=\"label\">${escapeHtml(this.getAttribute(\"label\") ?? \"Model\")}</span>\n        <span class=\"search-shell ${icon === \"\" ? \"\" : \"has-icon\"}\">\n          ${icon === \"\" ? \"\" : `<span class=\"search-icon\" aria-hidden=\"true\">${icon}</span>`}\n          <input class=\"control\" part=\"input\" type=\"search\" role=\"combobox\" aria-autocomplete=\"list\" aria-controls=\"${this.#listId}\" aria-expanded=\"${this.#isOpen}\"${this.#activeKey === undefined ? \"\" : ` aria-activedescendant=\"${escapeHtml(suggestions.find((suggestion) => suggestion.model.key === this.#activeKey)?.optionId ?? \"\")}\"`} autocomplete=\"off\" placeholder=\"Search models\" value=\"${escapeHtml(displayValue)}\"${selected === undefined || this.#isOpen ? \"\" : ` title=\"${escapeHtml(selected.name)}\"`} />\n          <span class=\"caret ${this.#isOpen ? \"open\" : \"\"}\" aria-hidden=\"true\">${chevronIcon}</span>\n        </span>\n      </label>\n      ${this.#isOpen ? `<div class=\"list\" id=\"${this.#listId}\" role=\"listbox\" aria-label=\"Models\">${renderSuggestions(suggestions, this.#value, this.#activeKey, this.#groupBy, this.#iconMode)}</div>` : \"\"}\n    `;\n    this.#root.addEventListener(\"focusout\", this.#onFocusOut);\n    this.bindEvents(suggestions);\n    this.placeList();\n  }\n\n  private bindEvents(suggestions: readonly ModelSuggestion[]): void {\n    const input = this.#root.querySelector<HTMLInputElement>(\"input\");\n    if (input === null) {\n      return;\n    }\n    input.addEventListener(\"focus\", () => {\n      if (this.#ignoreNextFocus) {\n        this.#ignoreNextFocus = false;\n        return;\n      }\n      this.open();\n    });\n    input.addEventListener(\"click\", () => this.open());\n    input.addEventListener(\"input\", () => {\n      this.#query = input.value;\n      this.#activeKey = undefined;\n      if (!this.#isOpen) {\n        this.#isOpen = true;\n        this.render();\n        const nextInput = this.#root.querySelector<HTMLInputElement>(\"input\");\n        nextInput?.focus();\n        nextInput?.setSelectionRange(nextInput.value.length, nextInput.value.length);\n        return;\n      }\n      this.filter(input.value);\n    });\n    input.addEventListener(\"keydown\", (event) => this.onInputKeydown(event, suggestions));\n    for (const option of this.#root.querySelectorAll<HTMLButtonElement>(\"button[data-key]\")) {\n      option.addEventListener(\"pointerdown\", (event) => event.preventDefault());\n      option.addEventListener(\"click\", () => {\n        const suggestion = suggestions.find(\n          (candidate) => candidate.model.key === option.dataset.key,\n        );\n        if (suggestion !== undefined) {\n          this.select(suggestion);\n        }\n      });\n    }\n    this.filter(this.#query);\n  }\n\n  private open(): void {\n    if (this.#isOpen) {\n      return;\n    }\n    this.#isOpen = true;\n    this.#query = \"\";\n    this.#activeKey = this.#value || undefined;\n    this.render();\n    this.#root.querySelector<HTMLInputElement>(\"input\")?.focus();\n    this.#root\n      .querySelector<HTMLElement>(`[data-key=\"${CSS.escape(this.#value)}\"]`)\n      ?.scrollIntoView({ block: \"center\" });\n  }\n\n  private select(suggestion: ModelSuggestion): void {\n    const selection = recommendedSelection(suggestion.model, this.#recommendations);\n    const hasChanged = this.#value !== suggestion.model.key;\n    this.#value = suggestion.model.key;\n    this.#isOpen = false;\n    this.#query = \"\";\n    this.#activeKey = undefined;\n    this.render();\n    if (hasChanged) {\n      emitModelChange(this, suggestion.model);\n    }\n    emitSelectionChange(this, selection);\n    this.focusClosedInput();\n  }\n\n  private clear(): void {\n    if (this.#value === \"\") {\n      return;\n    }\n    this.#value = \"\";\n    emitModelClear(this);\n  }\n\n  private filter(query: string): void {\n    const words = query.toLocaleLowerCase().trim().split(/\\s+/).filter(Boolean);\n    for (const option of this.#root.querySelectorAll<HTMLButtonElement>(\"button[data-key]\")) {\n      option.hidden = !words.every((word) => (option.dataset.search ?? \"\").includes(word));\n    }\n    for (const group of this.#root.querySelectorAll<HTMLElement>(\"[data-model-group]\")) {\n      group.hidden = ![...group.querySelectorAll<HTMLButtonElement>(\"button[data-key]\")].some(\n        (option) => !option.hidden,\n      );\n    }\n    const empty = this.#root.querySelector<HTMLElement>(\".empty\");\n    if (empty !== null) {\n      empty.hidden = this.visibleOptions().length > 0;\n    }\n  }\n\n  private onInputKeydown(event: KeyboardEvent, suggestions: readonly ModelSuggestion[]): void {\n    if (event.key === \"Escape\") {\n      event.preventDefault();\n      this.#isOpen = false;\n      this.#query = \"\";\n      this.#activeKey = undefined;\n      this.render();\n      this.focusClosedInput();\n      return;\n    }\n    if (!this.#isOpen && [\"ArrowDown\", \"ArrowUp\", \"Enter\"].includes(event.key)) {\n      event.preventDefault();\n      this.open();\n      return;\n    }\n    if (event.key === \"Enter\") {\n      event.preventDefault();\n      const input = event.currentTarget;\n      const match = suggestions.find(\n        (suggestion) =>\n          suggestion.model.key === this.#activeKey ||\n          (input instanceof HTMLInputElement && suggestion.value === input.value),\n      );\n      if (match !== undefined) {\n        this.select(match);\n      }\n      return;\n    }\n    if (\n      event.key === \"Backspace\" &&\n      event.currentTarget instanceof HTMLInputElement &&\n      event.currentTarget.value === \"\"\n    ) {\n      this.clear();\n      return;\n    }\n    if (event.key !== \"ArrowDown\" && event.key !== \"ArrowUp\") {\n      return;\n    }\n    event.preventDefault();\n    const options = this.visibleOptions();\n    if (options.length === 0) {\n      return;\n    }\n    const current = options.findIndex((option) => option.dataset.key === this.#activeKey);\n    const next =\n      event.key === \"ArrowDown\"\n        ? current < options.length - 1\n          ? current + 1\n          : 0\n        : current > 0\n          ? current - 1\n          : options.length - 1;\n    this.#activeKey = options[next]?.dataset.key;\n    const input = this.#root.querySelector<HTMLInputElement>(\"input\");\n    const active = options[next];\n    if (input !== null && active !== undefined) {\n      input.setAttribute(\"aria-activedescendant\", active.id);\n    }\n    for (const option of options) {\n      option.classList.toggle(\"active\", option.dataset.key === this.#activeKey);\n    }\n    options[next]?.scrollIntoView({ block: \"nearest\" });\n  }\n\n  private visibleOptions(): HTMLButtonElement[] {\n    return [...this.#root.querySelectorAll<HTMLButtonElement>(\"button[data-key]\")].filter(\n      (option) => !option.hidden,\n    );\n  }\n\n  private focusClosedInput(): void {\n    this.#ignoreNextFocus = true;\n    this.#root.querySelector<HTMLInputElement>(\"input\")?.focus();\n  }\n\n  private placeList(): void {\n    const list = this.#root.querySelector<HTMLElement>(\".list\");\n    const input = this.#root.querySelector<HTMLInputElement>(\"input\");\n    if (list === null || input === null || !this.isConnected) {\n      return;\n    }\n    const bounds = input.getBoundingClientRect();\n    const margin = 16;\n    const width = Math.min(340, window.innerWidth - margin * 2);\n    const maximumLeft = window.innerWidth - margin - width;\n    const viewportLeft = Math.min(Math.max(bounds.left, margin), maximumLeft);\n    list.style.left = `${viewportLeft - bounds.left}px`;\n    const spaceAbove = bounds.top - margin - 6;\n    const spaceBelow = window.innerHeight - bounds.bottom - margin - 6;\n    const isAbove = spaceBelow < 220 && spaceAbove > spaceBelow;\n    list.classList.toggle(\"above\", isAbove);\n    list.style.setProperty(\n      \"--models-list-space\",\n      `${Math.max(120, isAbove ? spaceAbove : spaceBelow)}px`,\n    );\n  }\n}\n\ninterface ModelSuggestion {\n  readonly model: ModelDescriptor;\n  readonly optionId: string;\n  readonly recommendationLabels: readonly string[];\n  readonly value: string;\n  readonly qualifier: string | undefined;\n}\n\nfunction languageModels(catalogs: readonly ModelCatalog[]): readonly ModelDescriptor[] {\n  return catalogs.flatMap((catalog) => catalog.models).filter((model) => model.kind === \"language\");\n}\n\nfunction modelSuggestions(\n  models: readonly ModelDescriptor[],\n  listId: string,\n  recommendations: readonly ModelRecommendation[],\n): readonly ModelSuggestion[] {\n  const nameCounts = new Map<string, number>();\n  for (const model of models) {\n    nameCounts.set(model.name, (nameCounts.get(model.name) ?? 0) + 1);\n  }\n  const baseValues = models.map((model) =>\n    nameCounts.get(model.name) === 1 ? model.name : `${model.name} · ${model.id}`,\n  );\n  const baseCounts = new Map<string, number>();\n  for (const value of baseValues) {\n    baseCounts.set(value, (baseCounts.get(value) ?? 0) + 1);\n  }\n  const usedValues = new Map<string, number>();\n  return models.map((model, index) => {\n    const baseValue = baseValues[index] ?? model.name;\n    const qualified = baseCounts.get(baseValue) === 1 ? baseValue : `${baseValue} · ${model.key}`;\n    const seen = usedValues.get(qualified) ?? 0;\n    usedValues.set(qualified, seen + 1);\n    const value = seen === 0 ? qualified : `${qualified} · ${seen + 1}`;\n    return {\n      model,\n      optionId: `${listId}-option-${index}`,\n      recommendationLabels: recommendations\n        .filter((recommendation) => [model.key, model.id].includes(recommendation.model))\n        .map((recommendation) => recommendation.label),\n      value,\n      qualifier: value === model.name ? undefined : value.slice(model.name.length + 3),\n    };\n  });\n}\n\nfunction renderSuggestions(\n  suggestions: readonly ModelSuggestion[],\n  selectedKey: string,\n  activeKey: string | undefined,\n  grouping: ModelGrouping,\n  iconMode: ModelIconMode,\n): string {\n  const empty = '<p class=\"empty\" role=\"status\" hidden>No matching models</p>';\n  const recommended = suggestions.filter(\n    (suggestion) => suggestion.recommendationLabels.length > 0,\n  );\n  const ordinary = suggestions.filter((suggestion) => suggestion.recommendationLabels.length === 0);\n  const recommendationGroup =\n    recommended.length === 0\n      ? \"\"\n      : `<div data-model-group><div class=\"group\">Recommended</div>${recommended.map((suggestion) => renderSuggestion(suggestion, selectedKey, activeKey, iconMode)).join(\"\")}</div>`;\n  if (grouping === \"none\") {\n    const ordinaryGroup =\n      ordinary.length === 0\n        ? \"\"\n        : `<div data-model-group>${recommended.length === 0 ? \"\" : '<div class=\"group\">All models</div>'}${ordinary.map((suggestion) => renderSuggestion(suggestion, selectedKey, activeKey, iconMode)).join(\"\")}</div>`;\n    return `${recommendationGroup}${ordinaryGroup}${empty}`;\n  }\n  const groups = new Map<string, ModelSuggestion[]>();\n  for (const suggestion of ordinary) {\n    const group = modelGroup(suggestion.model, grouping) ?? \"Other\";\n    const values = groups.get(group) ?? [];\n    values.push(suggestion);\n    groups.set(group, values);\n  }\n  return `${recommendationGroup}${[...groups]\n    .map(\n      ([group, values]) =>\n        `<div data-model-group><div class=\"group\">${escapeHtml(group)}</div>${values.map((suggestion) => renderSuggestion(suggestion, selectedKey, activeKey, iconMode)).join(\"\")}</div>`,\n    )\n    .join(\"\")}${empty}`;\n}\n\nfunction renderSuggestion(\n  suggestion: ModelSuggestion,\n  selectedKey: string,\n  activeKey: string | undefined,\n  iconMode: ModelIconMode,\n): string {\n  const icon = modelIcon(suggestion.model, iconMode);\n  const isSelected = suggestion.model.key === selectedKey;\n  const metadata = [suggestion.qualifier, ...suggestion.recommendationLabels].filter(\n    (value): value is string => value !== undefined,\n  );\n  return `<button class=\"option ${icon === \"\" ? \"no-icon\" : \"\"} ${suggestion.model.key === activeKey ? \"active\" : \"\"}\" id=\"${escapeHtml(suggestion.optionId)}\" type=\"button\" role=\"option\" aria-selected=\"${isSelected}\" title=\"${escapeHtml(suggestion.value)}\" data-key=\"${escapeHtml(suggestion.model.key)}\" data-search=\"${escapeHtml(`${suggestion.model.name} ${suggestion.model.id} ${suggestion.model.author ?? \"\"} ${suggestion.recommendationLabels.join(\" \")}`.toLocaleLowerCase())}\">${icon === \"\" ? \"\" : `<span class=\"option-icon\" aria-hidden=\"true\">${icon}</span>`}<span class=\"option-label\">${escapeHtml(suggestion.model.name)}${metadata.length === 0 ? \"\" : `<span class=\"option-meta\">· ${escapeHtml(metadata.join(\" · \"))}</span>`}</span><span class=\"check\" aria-hidden=\"true\">${isSelected ? \"✓\" : \"\"}</span></button>`;\n}\n\nfunction escapeHtml(value: string): string {\n  return value.replace(\n    /[&<>\"']/g,\n    (character) =>\n      ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" })[character] ??\n      character,\n  );\n}\n"},{"path":"source/packages/elements/src/styles.ts","content":"export const elementStyles = String.raw`\n  :host {\n    color: inherit;\n    font: var(--models-font, 13px/1.5 ui-sans-serif, system-ui, sans-serif);\n  }\n  * { box-sizing: border-box; }\n  [hidden] { display: none !important; }\n  button, input, select { font: inherit; color: inherit; }\n  button:focus-visible, input:focus-visible, select:focus-visible {\n    outline: 1.5px solid var(--models-focus, #2563eb);\n    outline-offset: 2px;\n  }\n  .field { display: grid; gap: 5px; }\n  .label { color: var(--models-muted, #646464); font-size: var(--models-font-small, 12px); font-weight: 500; }\n  .control {\n    width: 100%; min-height: var(--models-control-height, 36px); border: 1px solid var(--models-border, #d6d6d6);\n    border-radius: var(--models-radius, 7px); background: var(--models-surface, #fff);\n    padding: 7px 9px;\n  }\n  .muted { color: var(--models-muted, #646464); }\n`;\n"},{"path":"source/packages/providers/src/anthropic.ts","content":"import {\n  capability,\n  liveApiSource,\n  mapModelOptions,\n  type MappedModelOptions,\n  type ModelCatalog,\n  type ModelDescriptor,\n  type ProviderAdapter,\n} from \"../../core/src/index.ts\";\nimport { z } from \"zod\";\nimport { baseModel, mergeCapabilities } from \"./model.ts\";\nimport { anthropicConstraints, anthropicOptions } from \"./options.ts\";\nimport { fetchProviderJson, ProviderDiscoveryError, requireApiKey } from \"./shared.ts\";\n\nconst DEFAULT_ENDPOINT = \"https://api.anthropic.com/v1/models\";\nconst responseSchema = z.object({\n  data: z.array(\n    z\n      .object({\n        id: z.string(),\n        display_name: z.string().optional(),\n        created_at: z.string().optional(),\n        max_input_tokens: z.number().nullable().optional(),\n        max_tokens: z.number().nullable().optional(),\n        capabilities: z.record(z.string(), z.unknown()).nullable().optional(),\n      })\n      .passthrough(),\n  ),\n  has_more: z.boolean().optional(),\n  last_id: z.string().nullable().optional(),\n});\n\n/** Discover Anthropic models and explicit capability fields with pagination. */\nexport const anthropicAdapter: ProviderAdapter<\"anthropic\"> = {\n  id: \"anthropic\",\n  name: \"Anthropic\",\n  catalogEndpoint: DEFAULT_ENDPOINT,\n  requiresAuthentication: true,\n  async discover(context = {}) {\n    const apiKey = requireApiKey(context, \"Anthropic\");\n    const endpoint = context.baseUrl ?? DEFAULT_ENDPOINT;\n    const pages: Array<z.infer<typeof responseSchema>[\"data\"][number]> = [];\n    const seenAfterIds = new Set<string>();\n    let afterId: string | undefined;\n    let fetchedAt = new Date().toISOString();\n    do {\n      const response = await fetchProviderJson(withAfterId(endpoint, afterId), context, {\n        \"anthropic-version\": \"2023-06-01\",\n        \"x-api-key\": apiKey,\n      });\n      fetchedAt = response.fetchedAt;\n      const parsed = responseSchema.parse(response.value);\n      pages.push(...parsed.data);\n      if (parsed.has_more === true && parsed.last_id === null) {\n        throw new ProviderDiscoveryError(\"Anthropic reported another model page without a cursor.\");\n      }\n      afterId = parsed.has_more === true ? (parsed.last_id ?? undefined) : undefined;\n      if (afterId !== undefined && seenAfterIds.has(afterId)) {\n        throw new ProviderDiscoveryError(\"Anthropic returned a repeated model-list cursor.\");\n      }\n      if (afterId !== undefined) {\n        seenAfterIds.add(afterId);\n      }\n    } while (afterId !== undefined);\n    const source = { ...liveApiSource(endpoint, fetchedAt), scope: \"account\" as const };\n    const models = pages.map((raw): ModelDescriptor<\"anthropic\"> => {\n      const model = baseModel({\n        provider: \"anthropic\",\n        id: raw.id,\n        name: raw.display_name ?? raw.id,\n        source,\n        raw,\n        options: anthropicOptions(raw.id, raw.capabilities ?? undefined),\n      });\n      const capabilities = raw.capabilities ?? {};\n      return {\n        ...model,\n        ...(raw.created_at === undefined ? {} : { releasedAt: raw.created_at }),\n        ...(typeof raw.max_input_tokens !== \"number\"\n          ? {}\n          : {\n              contextWindow: {\n                value: raw.max_input_tokens,\n                confidence: \"provider-confirmed\" as const,\n                sources: [source],\n              },\n            }),\n        ...(typeof raw.max_tokens !== \"number\"\n          ? {}\n          : {\n              maxOutputTokens: {\n                value: raw.max_tokens,\n                confidence: \"provider-confirmed\" as const,\n                sources: [source],\n              },\n            }),\n        capabilities: mergeCapabilities(model.capabilities, {\n          reasoning: capability(capabilityStatus(capabilities, [\"thinking\", \"effort\"]), [source]),\n          promptCaching: capability(capabilityStatus(capabilities, [\"prompt_caching\"]), [source]),\n          tools: capability(capabilityStatus(capabilities, [\"tools\", \"tool_use\"]), [source]),\n        }),\n        interfaces: [\"anthropic-messages\"],\n        constraints: anthropicConstraints(raw.id),\n        requirements: [\n          {\n            id: \"anthropic-cache-breakpoints\",\n            kind: \"content-annotation\",\n            title: \"Cache breakpoints belong to prompt content\",\n            description:\n              \"Selecting a cache lifetime is not enough. The application must mark stable prompt blocks.\",\n            support: capability(\"supported\", model.sources),\n            sources: model.sources,\n          },\n          ...(/claude-opus-(?:5|4-8)(?:$|-)/.test(raw.id)\n            ? [\n                {\n                  id: \"anthropic-fast-beta\",\n                  kind: \"beta-contract\" as const,\n                  title: \"Fast mode requires provider access\",\n                  description:\n                    \"The fast selection only works for accounts and requests enrolled in Anthropic fast mode.\",\n                  support: capability(\"supported\", model.sources),\n                  sources: model.sources,\n                },\n              ]\n            : []),\n        ],\n      };\n    });\n    return {\n      schemaVersion: 1,\n      provider: \"anthropic\",\n      fetchedAt,\n      source,\n      models,\n    } satisfies ModelCatalog<\"anthropic\">;\n  },\n  mapOptions(model, values) {\n    const generic = mapModelOptions(model, values);\n    const anthropic = {\n      ...(generic.providerOptions.anthropic as Record<string, unknown> | undefined),\n    };\n    const mode = values[\"reasoning.mode\"];\n    if (mode === \"adaptive\") {\n      anthropic.thinking = { type: \"adaptive\" };\n    } else if (mode === \"disabled\") {\n      anthropic.thinking = { type: \"disabled\" };\n    } else if (mode === \"enabled\") {\n      anthropic.thinking = {\n        type: \"enabled\",\n        ...(typeof values[\"reasoning.budgetTokens\"] === \"number\"\n          ? { budgetTokens: values[\"reasoning.budgetTokens\"] }\n          : {}),\n      };\n    }\n    if (typeof values[\"caching.ttl\"] === \"string\") {\n      anthropic.cacheControl = { type: \"ephemeral\", ttl: values[\"caching.ttl\"] };\n    }\n    if (values[\"speed.mode\"] === \"fast\") {\n      const betaFeatures = Array.isArray(anthropic.anthropicBeta)\n        ? anthropic.anthropicBeta.filter((value): value is string => typeof value === \"string\")\n        : [];\n      anthropic.anthropicBeta = [...new Set([...betaFeatures, \"fast-mode-2026-02-01\"])];\n    }\n    return {\n      ...generic,\n      providerOptions: { ...generic.providerOptions, anthropic },\n    } satisfies MappedModelOptions;\n  },\n};\n\nfunction withAfterId(endpoint: string, afterId?: string): string {\n  const url = new URL(endpoint);\n  if (afterId !== undefined) {\n    url.searchParams.set(\"after_id\", afterId);\n  }\n  return url.toString();\n}\n\nfunction capabilityStatus(\n  capabilities: Record<string, unknown>,\n  names: readonly string[],\n): \"supported\" | \"unknown\" {\n  for (const name of names) {\n    const value = capabilities[name];\n    if (value === true) {\n      return \"supported\";\n    }\n    if (\n      typeof value === \"object\" &&\n      value !== null &&\n      (value as { supported?: unknown }).supported === true\n    ) {\n      return \"supported\";\n    }\n  }\n  return \"unknown\";\n}\n"},{"path":"source/packages/providers/src/generated/modelIds.ts","content":"// Generated by pnpm catalog:refresh. Do not edit by hand.\n\n/** Model IDs in the reviewed vercel snapshot. */\nexport const knownVercelModelIds = [\n  \"alibaba/qwen-3-14b\",\n  \"alibaba/qwen-3-235b\",\n  \"alibaba/qwen-3-30b\",\n  \"alibaba/qwen-3-32b\",\n  \"alibaba/qwen-3.6-max-preview\",\n  \"alibaba/qwen3-235b-a22b-thinking\",\n  \"alibaba/qwen3-coder\",\n  \"alibaba/qwen3-coder-30b-a3b\",\n  \"alibaba/qwen3-coder-next\",\n  \"alibaba/qwen3-coder-plus\",\n  \"alibaba/qwen3-embedding-0.6b\",\n  \"alibaba/qwen3-embedding-4b\",\n  \"alibaba/qwen3-embedding-8b\",\n  \"alibaba/qwen3-max\",\n  \"alibaba/qwen3-max-preview\",\n  \"alibaba/qwen3-max-thinking\",\n  \"alibaba/qwen3-next-80b-a3b-instruct\",\n  \"alibaba/qwen3-next-80b-a3b-thinking\",\n  \"alibaba/qwen3-vl-235b-a22b-instruct\",\n  \"alibaba/qwen3-vl-instruct\",\n  \"alibaba/qwen3-vl-thinking\",\n  \"alibaba/qwen3.5-flash\",\n  \"alibaba/qwen3.5-plus\",\n  \"alibaba/qwen3.6-27b\",\n  \"alibaba/qwen3.6-plus\",\n  \"alibaba/qwen3.7-flash\",\n  \"alibaba/qwen3.7-max\",\n  \"alibaba/qwen3.7-plus\",\n  \"alibaba/qwen3.8-2.4t-a95b\",\n  \"alibaba/qwen3.8-27b\",\n  \"alibaba/qwen3.8-flash\",\n  \"alibaba/qwen3.8-flash-next\",\n  \"alibaba/qwen3.8-max\",\n  \"alibaba/wan-v2.5-t2v-preview\",\n  \"alibaba/wan-v2.6-i2v\",\n  \"alibaba/wan-v2.6-i2v-flash\",\n  \"alibaba/wan-v2.6-r2v\",\n  \"alibaba/wan-v2.6-r2v-flash\",\n  \"alibaba/wan-v2.6-t2v\",\n  \"alibaba/wan-v2.7-r2v\",\n  \"alibaba/wan-v2.7-t2v\",\n  \"alibaba/wan-v3.0-video\",\n  \"alibaba/wan-v3.0-video-prime\",\n  \"amazon/nova-2-lite\",\n  \"amazon/nova-lite\",\n  \"amazon/nova-micro\",\n  \"amazon/nova-pro\",\n  \"amazon/titan-embed-text-v2\",\n  \"anthropic/claude-3-haiku\",\n  \"anthropic/claude-fable-5\",\n  \"anthropic/claude-haiku-4.5\",\n  \"anthropic/claude-opus-4\",\n  \"anthropic/claude-opus-4.5\",\n  \"anthropic/claude-opus-4.6\",\n  \"anthropic/claude-opus-4.7\",\n  \"anthropic/claude-opus-4.8\",\n  \"anthropic/claude-opus-4.8-fast\",\n  \"anthropic/claude-opus-5\",\n  \"anthropic/claude-opus-5-fast\",\n  \"anthropic/claude-sonnet-4\",\n  \"anthropic/claude-sonnet-4.5\",\n  \"anthropic/claude-sonnet-4.6\",\n  \"anthropic/claude-sonnet-5\",\n  \"arcee-ai/trinity-large-thinking\",\n  \"bfl/flux-2-flex\",\n  \"bfl/flux-2-klein-4b\",\n  \"bfl/flux-2-klein-9b\",\n  \"bfl/flux-2-max\",\n  \"bfl/flux-2-pro\",\n  \"bfl/flux-3-video\",\n  \"bfl/flux-kontext-max\",\n  \"bfl/flux-kontext-pro\",\n  \"bfl/flux-pro-1.0-fill\",\n  \"bfl/flux-pro-1.1\",\n  \"bfl/flux-pro-1.1-ultra\",\n  \"bytedance/seed-1.6\",\n  \"bytedance/seed-1.8\",\n  \"bytedance/seedance-2.0\",\n  \"bytedance/seedance-2.0-fast\",\n  \"bytedance/seedance-2.0-mini\",\n  \"bytedance/seedance-2.5\",\n  \"bytedance/seedance-v1.0-pro\",\n  \"bytedance/seedance-v1.0-pro-fast\",\n  \"bytedance/seedance-v1.5-pro\",\n  \"bytedance/seedream-4.0\",\n  \"bytedance/seedream-4.5\",\n  \"bytedance/seedream-5.0-lite\",\n  \"bytedance/seedream-5.0-pro\",\n  \"cohere/command-a\",\n  \"cohere/embed-v4.0\",\n  \"cohere/rerank-v3.5\",\n  \"cohere/rerank-v4-fast\",\n  \"cohere/rerank-v4-pro\",\n  \"deepseek/deepseek-r1\",\n  \"deepseek/deepseek-v3\",\n  \"deepseek/deepseek-v3.1\",\n  \"deepseek/deepseek-v3.1-terminus\",\n  \"deepseek/deepseek-v3.2\",\n  \"deepseek/deepseek-v3.2-thinking\",\n  \"deepseek/deepseek-v4-flash\",\n  \"deepseek/deepseek-v4-flash-0731\",\n  \"deepseek/deepseek-v4-flash-vision-exp\",\n  \"deepseek/deepseek-v4-pro\",\n  \"deepseek/deepseek-v4-pro-0813\",\n  \"fish-audio/s1\",\n  \"fish-audio/s1-free\",\n  \"fish-audio/s2-pro\",\n  \"fish-audio/s2-pro-free\",\n  \"fish-audio/s2.1-pro\",\n  \"fish-audio/s2.1-pro-free\",\n  \"fish-audio/transcribe-1\",\n  \"fish-audio/transcribe-1-free\",\n  \"google/gemini-2.5-flash\",\n  \"google/gemini-2.5-flash-image\",\n  \"google/gemini-2.5-flash-lite\",\n  \"google/gemini-2.5-pro\",\n  \"google/gemini-3-flash\",\n  \"google/gemini-3-pro-image\",\n  \"google/gemini-3.1-flash-image\",\n  \"google/gemini-3.1-flash-image-preview\",\n  \"google/gemini-3.1-flash-lite\",\n  \"google/gemini-3.1-flash-lite-image\",\n  \"google/gemini-3.1-pro-preview\",\n  \"google/gemini-3.5-flash\",\n  \"google/gemini-3.5-flash-lite\",\n  \"google/gemini-3.5-transcribe\",\n  \"google/gemini-3.5-transcribe-live\",\n  \"google/gemini-3.6-flash\",\n  \"google/gemini-3.7-flash\",\n  \"google/gemini-embedding-001\",\n  \"google/gemini-embedding-2\",\n  \"google/gemini-omni-flash-preview\",\n  \"google/gemma-4-26b-a4b-it\",\n  \"google/gemma-4-31b-it\",\n  \"google/text-embedding-005\",\n  \"google/text-multilingual-embedding-002\",\n  \"google/veo-3.0-fast-generate-001\",\n  \"google/veo-3.0-generate-001\",\n  \"google/veo-3.1-fast-generate-001\",\n  \"google/veo-3.1-generate-001\",\n  \"google/veo-3.1-lite-generate-001\",\n  \"inception/mercury-2\",\n  \"inception/mercury-coder-small\",\n  \"inclusionai/ling-3.0-flash\",\n  \"inclusionai/ling-3.0-flash-fin\",\n  \"inclusionai/ling-3.0-flash-fin-free\",\n  \"interfaze/interfaze-beta\",\n  \"klingai/kling-v2.5-turbo-i2v\",\n  \"klingai/kling-v2.5-turbo-t2v\",\n  \"klingai/kling-v2.6-i2v\",\n  \"klingai/kling-v2.6-motion-control\",\n  \"klingai/kling-v2.6-t2v\",\n  \"klingai/kling-v3.0-i2v\",\n  \"klingai/kling-v3.0-motion-control\",\n  \"klingai/kling-v3.0-t2v\",\n  \"kwaipilot/kat-coder-air-v2.5\",\n  \"kwaipilot/kat-coder-pro-v1\",\n  \"kwaipilot/kat-coder-pro-v2\",\n  \"kwaipilot/kat-coder-pro-v2.5\",\n  \"meta/llama-3.1-70b\",\n  \"meta/llama-3.1-8b\",\n  \"meta/llama-3.3-70b\",\n  \"meta/llama-4-maverick\",\n  \"meta/llama-4-scout\",\n  \"meta/muse-glimmer-30b\",\n  \"meta/muse-image-1.0\",\n  \"meta/muse-spark-1.1\",\n  \"meta/muse-spark-1.2\",\n  \"meta/muse-spark-1.2-contributor\",\n  \"minimax/minimax-h3\",\n  \"minimax/minimax-h3-max\",\n  \"minimax/minimax-m2\",\n  \"minimax/minimax-m2.1\",\n  \"minimax/minimax-m2.1-lightning\",\n  \"minimax/minimax-m2.5\",\n  \"minimax/minimax-m2.5-highspeed\",\n  \"minimax/minimax-m2.7\",\n  \"minimax/minimax-m2.7-free\",\n  \"minimax/minimax-m2.7-highspeed\",\n  \"minimax/minimax-m3\",\n  \"minimax/minimax-m3-free\",\n  \"mistral/codestral\",\n  \"mistral/codestral-embed\",\n  \"mistral/devstral-2\",\n  \"mistral/devstral-small-2\",\n  \"mistral/ministral-14b\",\n  \"mistral/ministral-3b\",\n  \"mistral/ministral-8b\",\n  \"mistral/mistral-embed\",\n  \"mistral/mistral-large-3\",\n  \"mistral/mistral-medium\",\n  \"mistral/mistral-medium-3.5\",\n  \"mistral/mistral-nemo\",\n  \"mistral/mistral-small\",\n  \"mistral/pixtral-12b\",\n  \"moonshotai/kimi-k2\",\n  \"moonshotai/kimi-k2-thinking\",\n  \"moonshotai/kimi-k2.5\",\n  \"moonshotai/kimi-k2.6\",\n  \"moonshotai/kimi-k2.7-code\",\n  \"moonshotai/kimi-k2.7-code-highspeed\",\n  \"moonshotai/kimi-k3\",\n  \"moonshotai/kimi-k3-fast\",\n  \"morph/morph-v3-fast\",\n  \"morph/morph-v3-large\",\n  \"nvidia/nemotron-3-nano-30b-a3b\",\n  \"nvidia/nemotron-3-super-120b-a12b\",\n  \"nvidia/nemotron-3-ultra-550b-a55b\",\n  \"nvidia/nemotron-3.5-lightning\",\n  \"nvidia/nemotron-nano-12b-v2-vl\",\n  \"nvidia/nemotron-nano-9b-v2\",\n  \"openai/gpt-3.5-turbo\",\n  \"openai/gpt-4-turbo\",\n  \"openai/gpt-4.1\",\n  \"openai/gpt-4.1-fast\",\n  \"openai/gpt-4.1-mini\",\n  \"openai/gpt-4.1-mini-fast\",\n  \"openai/gpt-4.1-nano\",\n  \"openai/gpt-4.1-nano-fast\",\n  \"openai/gpt-4o\",\n  \"openai/gpt-4o-fast\",\n  \"openai/gpt-4o-mini\",\n  \"openai/gpt-4o-mini-fast\",\n  \"openai/gpt-4o-mini-transcribe\",\n  \"openai/gpt-4o-transcribe\",\n  \"openai/gpt-5\",\n  \"openai/gpt-5-codex\",\n  \"openai/gpt-5-fast\",\n  \"openai/gpt-5-mini\",\n  \"openai/gpt-5-mini-fast\",\n  \"openai/gpt-5-nano\",\n  \"openai/gpt-5-pro\",\n  \"openai/gpt-5.1-codex\",\n  \"openai/gpt-5.1-codex-max\",\n  \"openai/gpt-5.1-codex-mini\",\n  \"openai/gpt-5.1-thinking\",\n  \"openai/gpt-5.1-thinking-fast\",\n  \"openai/gpt-5.2\",\n  \"openai/gpt-5.2-codex\",\n  \"openai/gpt-5.2-fast\",\n  \"openai/gpt-5.2-pro\",\n  \"openai/gpt-5.3-codex\",\n  \"openai/gpt-5.3-codex-fast\",\n  \"openai/gpt-5.4\",\n  \"openai/gpt-5.4-fast\",\n  \"openai/gpt-5.4-mini\",\n  \"openai/gpt-5.4-mini-fast\",\n  \"openai/gpt-5.4-nano\",\n  \"openai/gpt-5.4-pro\",\n  \"openai/gpt-5.5\",\n  \"openai/gpt-5.5-fast\",\n  \"openai/gpt-5.5-pro\",\n  \"openai/gpt-5.6-luna\",\n  \"openai/gpt-5.6-luna-fast\",\n  \"openai/gpt-5.6-sol\",\n  \"openai/gpt-5.6-sol-fast\",\n  \"openai/gpt-5.6-terra\",\n  \"openai/gpt-5.6-terra-fast\",\n  \"openai/gpt-image-1\",\n  \"openai/gpt-image-1-mini\",\n  \"openai/gpt-image-1.5\",\n  \"openai/gpt-image-2\",\n  \"openai/gpt-oss-120b\",\n  \"openai/gpt-oss-20b\",\n  \"openai/gpt-oss-safeguard-120b\",\n  \"openai/gpt-oss-safeguard-20b\",\n  \"openai/gpt-realtime-1.5\",\n  \"openai/gpt-realtime-2\",\n  \"openai/gpt-realtime-2.1\",\n  \"openai/gpt-realtime-mini\",\n  \"openai/gpt-realtime-whisper\",\n  \"openai/o1\",\n  \"openai/o3\",\n  \"openai/o3-fast\",\n  \"openai/o3-mini\",\n  \"openai/o3-pro\",\n  \"openai/o4-mini\",\n  \"openai/o4-mini-fast\",\n  \"openai/text-embedding-3-large\",\n  \"openai/text-embedding-3-small\",\n  \"openai/text-embedding-ada-002\",\n  \"openai/tts-1\",\n  \"openai/tts-1-hd\",\n  \"openai/whisper-1\",\n  \"perplexity/pplx-embed-v1-0.6b\",\n  \"perplexity/pplx-embed-v1-4b\",\n  \"perplexity/sonar\",\n  \"perplexity/sonar-pro\",\n  \"perplexity/sonar-reasoning-pro\",\n  \"poolside/laguna-s-2.1\",\n  \"poolside/laguna-s-2.1-free\",\n  \"prodia/flux-fast-schnell\",\n  \"quiverai/arrow-1.1\",\n  \"recraft/recraft-v2\",\n  \"recraft/recraft-v3\",\n  \"recraft/recraft-v4\",\n  \"recraft/recraft-v4-pro\",\n  \"recraft/recraft-v4.1\",\n  \"recraft/recraft-v4.1-pro\",\n  \"recraft/recraft-v4.1-utility\",\n  \"recraft/recraft-v4.1-utility-pro\",\n  \"sakana/fugu-ultra\",\n  \"sakana/namazu\",\n  \"spacexai/grok-4.1-fast-non-reasoning\",\n  \"spacexai/grok-4.1-fast-reasoning\",\n  \"spacexai/grok-4.20-multi-agent\",\n  \"spacexai/grok-4.20-multi-agent-beta\",\n  \"spacexai/grok-4.20-non-reasoning\",\n  \"spacexai/grok-4.20-non-reasoning-beta\",\n  \"spacexai/grok-4.20-reasoning\",\n  \"spacexai/grok-4.20-reasoning-beta\",\n  \"spacexai/grok-4.3\",\n  \"spacexai/grok-4.5\",\n  \"spacexai/grok-4.6\",\n  \"spacexai/grok-build-0.1\",\n  \"spacexai/grok-imagine-image\",\n  \"spacexai/grok-imagine-image-2.0\",\n  \"spacexai/grok-imagine-video\",\n  \"spacexai/grok-imagine-video-1.5\",\n  \"spacexai/grok-imagine-video-1.5-preview\",\n  \"spacexai/grok-stt\",\n  \"spacexai/grok-tts\",\n  \"spacexai/grok-voice-think-fast-1.0\",\n  \"spacexai/grok-voice-think-fast-2.0\",\n  \"stepfun/step-3.5-flash\",\n  \"stepfun/step-3.7-flash\",\n  \"tencent/hy-mt2-lite\",\n  \"tencent/hy-mt2-plus\",\n  \"tencent/hy-mt2-pro\",\n  \"tencent/hy3\",\n  \"tencent/hy4-preview\",\n  \"thinkingmachines/inkling\",\n  \"thinkingmachines/inkling-small\",\n  \"voyage/rerank-2.5\",\n  \"voyage/rerank-2.5-lite\",\n  \"voyage/voyage-3-large\",\n  \"voyage/voyage-3.5\",\n  \"voyage/voyage-3.5-lite\",\n  \"voyage/voyage-4\",\n  \"voyage/voyage-4-large\",\n  \"voyage/voyage-4-lite\",\n  \"voyage/voyage-code-2\",\n  \"voyage/voyage-code-3\",\n  \"voyage/voyage-finance-2\",\n  \"voyage/voyage-law-2\",\n  \"xiaomi/mimo-v2.5\",\n  \"xiaomi/mimo-v2.5-pro\",\n  \"xiaomi/mimo-v2.5-pro-ultraspeed\",\n  \"zai/glm-4.5\",\n  \"zai/glm-4.5-air\",\n  \"zai/glm-4.5v\",\n  \"zai/glm-4.6\",\n  \"zai/glm-4.7\",\n  \"zai/glm-4.7-flash\",\n  \"zai/glm-4.7-flashx\",\n  \"zai/glm-5\",\n  \"zai/glm-5-turbo\",\n  \"zai/glm-5.1\",\n  \"zai/glm-5.2\",\n  \"zai/glm-5.2-fast\",\n  \"zai/glm-5.3\",\n  \"zai/glm-5.3-flash\",\n  \"zai/glm-5v-turbo\"\n] as const;\n\n/** A model ID known when this package was generated. */\nexport type KnownVercelModelId = (typeof knownVercelModelIds)[number];\n\n/** Model IDs in the reviewed openrouter snapshot. */\nexport const knownOpenRouterModelIds = [\n  \"aion-labs/aion-2.0\",\n  \"aion-labs/aion-3.0\",\n  \"aion-labs/aion-3.0-mini\",\n  \"aion-labs/aion-rp-llama-3.1-8b\",\n  \"alibaba/happyhorse-1.0\",\n  \"alibaba/happyhorse-1.1\",\n  \"alibaba/wan-2.6\",\n  \"alibaba/wan-2.7\",\n  \"alibaba/wan-3.0\",\n  \"alibaba/wan-3.0-prime\",\n  \"amazon/nova-2-lite-v1\",\n  \"amazon/nova-lite-v1\",\n  \"amazon/nova-micro-v1\",\n  \"amazon/nova-premier-v1\",\n  \"amazon/nova-pro-v1\",\n  \"anthracite-org/magnum-v4-72b\",\n  \"anthropic/claude-3-haiku\",\n  \"anthropic/claude-fable-5\",\n  \"anthropic/claude-fable-5:batch\",\n  \"anthropic/claude-haiku-4.5\",\n  \"anthropic/claude-haiku-4.5:batch\",\n  \"anthropic/claude-opus-4\",\n  \"anthropic/claude-opus-4.1\",\n  \"anthropic/claude-opus-4.1:batch\",\n  \"anthropic/claude-opus-4.5\",\n  \"anthropic/claude-opus-4.5:batch\",\n  \"anthropic/claude-opus-4.6\",\n  \"anthropic/claude-opus-4.6:batch\",\n  \"anthropic/claude-opus-4.7\",\n  \"anthropic/claude-opus-4.7-fast\",\n  \"anthropic/claude-opus-4.7:batch\",\n  \"anthropic/claude-opus-4.8\",\n  \"anthropic/claude-opus-4.8-fast\",\n  \"anthropic/claude-opus-4.8:batch\",\n  \"anthropic/claude-opus-5\",\n  \"anthropic/claude-opus-5-fast\",\n  \"anthropic/claude-opus-5:batch\",\n  \"anthropic/claude-sonnet-4\",\n  \"anthropic/claude-sonnet-4.5\",\n  \"anthropic/claude-sonnet-4.5:batch\",\n  \"anthropic/claude-sonnet-4.6\",\n  \"anthropic/claude-sonnet-4.6:batch\",\n  \"anthropic/claude-sonnet-5\",\n  \"anthropic/claude-sonnet-5:batch\",\n  \"arcee-ai/trinity-large-thinking\",\n  \"baai/bge-base-en-v1.5\",\n  \"baai/bge-large-en-v1.5\",\n  \"baai/bge-m3\",\n  \"baidu/ernie-4.5-vl-424b-a47b\",\n  \"black-forest-labs/flux-3-video\",\n  \"black-forest-labs/flux-video-upscale\",\n  \"black-forest-labs/flux.2-flex\",\n  \"black-forest-labs/flux.2-klein-4b\",\n  \"black-forest-labs/flux.2-max\",\n  \"black-forest-labs/flux.2-pro\",\n  \"bytedance-seed/seed-1.6\",\n  \"bytedance-seed/seed-1.6-flash\",\n  \"bytedance-seed/seed-2-1-turbo\",\n  \"bytedance-seed/seed-2.0-code\",\n  \"bytedance-seed/seed-2.0-lite\",\n  \"bytedance-seed/seed-2.0-mini\",\n  \"bytedance-seed/seedream-4.5\",\n  \"bytedance-seed/seedream-5-0-lite\",\n  \"bytedance-seed/seedream-5-0-pro\",\n  \"bytedance/seedance-1-5-pro\",\n  \"bytedance/seedance-2.0\",\n  \"bytedance/seedance-2.0-fast\",\n  \"bytedance/seedance-2.0-mini\",\n  \"bytedance/seedance-2.5\",\n  \"bytedance/ui-tars-1.5-7b\",\n  \"canopylabs/orpheus-3b-0.1-ft\",\n  \"cognitivecomputations/dolphin-mistral-24b-venice-edition\",\n  \"cohere/command-a\",\n  \"cohere/command-r-08-2024\",\n  \"cohere/command-r-plus-08-2024\",\n  \"cohere/command-r7b-12-2024\",\n  \"cohere/north-mini-code:free\",\n  \"cohere/rerank-4-fast\",\n  \"cohere/rerank-4-pro\",\n  \"cohere/rerank-v3.5\",\n  \"deepgram/aura-2\",\n  \"deepgram/flux-tts:free\",\n  \"deepgram/nova-3\",\n  \"deepseek/deepseek-chat\",\n  \"deepseek/deepseek-chat-v3-0324\",\n  \"deepseek/deepseek-chat-v3.1\",\n  \"deepseek/deepseek-r1\",\n  \"deepseek/deepseek-r1-0528\",\n  \"deepseek/deepseek-r1-distill-llama-70b\",\n  \"deepseek/deepseek-v3.1-terminus\",\n  \"deepseek/deepseek-v3.2\",\n  \"deepseek/deepseek-v3.2-exp\",\n  \"deepseek/deepseek-v4-flash\",\n  \"deepseek/deepseek-v4-flash-0731\",\n  \"deepseek/deepseek-v4-flash-0731:batch\",\n  \"deepseek/deepseek-v4-flash-vision-exp\",\n  \"deepseek/deepseek-v4-pro\",\n  \"deepseek/deepseek-v4-pro-0813\",\n  \"deepseek/deepseek-v4-pro-0813:batch\",\n  \"dots-studio/dots-3-note-preview:free\",\n  \"fish-audio/s1\",\n  \"fish-audio/s2-pro\",\n  \"fish-audio/s2.1-pro\",\n  \"fish-audio/s2.1-pro-free:free\",\n  \"fish-audio/transcribe-1\",\n  \"google/chirp-3\",\n  \"google/gemini-2.5-flash\",\n  \"google/gemini-2.5-flash-image\",\n  \"google/gemini-2.5-flash-lite\",\n  \"google/gemini-2.5-flash-lite:batch\",\n  \"google/gemini-2.5-flash:batch\",\n  \"google/gemini-2.5-pro\",\n  \"google/gemini-2.5-pro-preview\",\n  \"google/gemini-2.5-pro-preview-05-06\",\n  \"google/gemini-2.5-pro:batch\",\n  \"google/gemini-3-flash-preview\",\n  \"google/gemini-3-flash-preview:batch\",\n  \"google/gemini-3-pro-image\",\n  \"google/gemini-3-pro-image-preview\",\n  \"google/gemini-3.1-flash-image\",\n  \"google/gemini-3.1-flash-image-preview\",\n  \"google/gemini-3.1-flash-lite\",\n  \"google/gemini-3.1-flash-lite-image\",\n  \"google/gemini-3.1-flash-lite-preview\",\n  \"google/gemini-3.1-flash-lite:batch\",\n  \"google/gemini-3.1-flash-tts-preview\",\n  \"google/gemini-3.1-pro-preview\",\n  \"google/gemini-3.1-pro-preview-customtools\",\n  \"google/gemini-3.1-pro-preview:batch\",\n  \"google/gemini-3.5-flash\",\n  \"google/gemini-3.5-flash-lite\",\n  \"google/gemini-3.5-flash-lite:batch\",\n  \"google/gemini-3.5-flash:batch\",\n  \"google/gemini-3.6-flash\",\n  \"google/gemini-3.6-flash:batch\",\n  \"google/gemini-3.7-flash\",\n  \"google/gemini-3.7-flash:batch\",\n  \"google/gemini-embedding-001\",\n  \"google/gemini-embedding-2\",\n  \"google/gemini-embedding-2-preview\",\n  \"google/gemini-embedding-2:batch\",\n  \"google/gemma-2-27b-it\",\n  \"google/gemma-3-12b-it\",\n  \"google/gemma-3-27b-it\",\n  \"google/gemma-3-4b-it\",\n  \"google/gemma-4-26b-a4b-it\",\n  \"google/gemma-4-26b-a4b-it:free\",\n  \"google/gemma-4-31b-it\",\n  \"google/gemma-4-31b-it:batch\",\n  \"google/gemma-4-31b-it:free\",\n  \"google/lyria-3-clip-preview\",\n  \"google/lyria-3-pro-preview\",\n  \"google/veo-3.1\",\n  \"google/veo-3.1-fast\",\n  \"google/veo-3.1-lite\",\n  \"gryphe/mythomax-l2-13b\",\n  \"hexgrad/kokoro-82m\",\n  \"heygen/avatar-iv\",\n  \"ibm-granite/granite-4.0-h-micro\",\n  \"ibm-granite/granite-4.1-8b\",\n  \"ibm-granite/granite-4.2-8b\",\n  \"inception/mercury-2\",\n  \"inclusionai/ling-3.0-flash\",\n  \"inclusionai/ling-3.0-flash-fin:free\",\n  \"intfloat/e5-base-v2\",\n  \"intfloat/e5-large-v2\",\n  \"intfloat/multilingual-e5-large\",\n  \"krea/krea-2-large\",\n  \"krea/krea-2-medium\",\n  \"krea/krea-2-medium-turbo\",\n  \"kwaipilot/kat-coder-pro-v2\",\n  \"kwaipilot/kat-coder-pro-v2.5\",\n  \"kwaivgi/kling-v3.0-pro\",\n  \"kwaivgi/kling-v3.0-std\",\n  \"kwaivgi/kling-video-o1\",\n  \"liquid/lfm-2.5-2.6b:free\",\n  \"liquid/lfm-2.5-embedding-350m:free\",\n  \"mancer/weaver\",\n  \"meituan/longcat-2.0\",\n  \"meta-llama/llama-3.1-70b-instruct\",\n  \"meta-llama/llama-3.1-8b-instruct\",\n  \"meta-llama/llama-3.2-1b-instruct\",\n  \"meta-llama/llama-3.2-3b-instruct\",\n  \"meta-llama/llama-3.3-70b-instruct\",\n  \"meta-llama/llama-4-maverick\",\n  \"meta-llama/llama-4-scout\",\n  \"meta-llama/llama-guard-4-12b\",\n  \"meta/muse-glimmer-30b\",\n  \"meta/muse-glimmer-30b:batch\",\n  \"meta/muse-image\",\n  \"meta/muse-spark-1.1\",\n  \"meta/muse-spark-1.2\",\n  \"meta/muse-spark-1.2-contributor\",\n  \"microsoft/mai-image-2.5\",\n  \"microsoft/mai-image-2.5-pro\",\n  \"microsoft/mai-transcribe-1.5\",\n  \"microsoft/mai-voice-2\",\n  \"microsoft/mai-voice-2-flash\",\n  \"microsoft/phi-4\",\n  \"microsoft/wizardlm-2-8x22b\",\n  \"minimax/hailuo-2.3\",\n  \"minimax/hailuo-3\",\n  \"minimax/minimax-01\",\n  \"minimax/minimax-m1\",\n  \"minimax/minimax-m2\",\n  \"minimax/minimax-m2-her\",\n  \"minimax/minimax-m2.1\",\n  \"minimax/minimax-m2.5\",\n  \"minimax/minimax-m2.7\",\n  \"minimax/minimax-m2.7:free\",\n  \"minimax/minimax-m3\",\n  \"minimax/minimax-m3:batch\",\n  \"minimax/minimax-m3:free\",\n  \"minimax/speech-2.8-hd\",\n  \"minimax/speech-2.8-turbo\",\n  \"mistralai/codestral-2508\",\n  \"mistralai/codestral-embed-2505\",\n  \"mistralai/devstral-2512\",\n  \"mistralai/ministral-14b-2512\",\n  \"mistralai/ministral-3b-2512\",\n  \"mistralai/ministral-8b-2512\",\n  \"mistralai/mistral-embed-2312\",\n  \"mistralai/mistral-large\",\n  \"mistralai/mistral-large-2407\",\n  \"mistralai/mistral-large-2512\",\n  \"mistralai/mistral-medium-3\",\n  \"mistralai/mistral-medium-3-5\",\n  \"mistralai/mistral-medium-3-5:batch\",\n  \"mistralai/mistral-medium-3.1\",\n  \"mistralai/mistral-nemo\",\n  \"mistralai/mistral-saba\",\n  \"mistralai/mistral-small-24b-instruct-2501\",\n  \"mistralai/mistral-small-2603\",\n  \"mistralai/mistral-small-3.1-24b-instruct\",\n  \"mistralai/mistral-small-3.2-24b-instruct\",\n  \"mistralai/mixtral-8x22b-instruct\",\n  \"mistralai/voxtral-mini-3b-2507\",\n  \"mistralai/voxtral-mini-transcribe\",\n  \"mistralai/voxtral-mini-tts-2603\",\n  \"mistralai/voxtral-small-24b-2507\",\n  \"mistralai/voxtral-small-24b-2507-stt\",\n  \"moonshotai/kimi-k2\",\n  \"moonshotai/kimi-k2-0905\",\n  \"moonshotai/kimi-k2-thinking\",\n  \"moonshotai/kimi-k2.5\",\n  \"moonshotai/kimi-k2.6\",\n  \"moonshotai/kimi-k2.7-code\",\n  \"moonshotai/kimi-k3\",\n  \"moonshotai/kimi-k3:batch\",\n  \"morph/morph-v3-fast\",\n  \"morph/morph-v3-large\",\n  \"nex-agi/nex-n2-mini\",\n  \"nex-agi/nex-n2-pro\",\n  \"nousresearch/hermes-3-llama-3.1-405b\",\n  \"nousresearch/hermes-3-llama-3.1-70b\",\n  \"nousresearch/hermes-4-405b\",\n  \"nousresearch/hermes-4-70b\",\n  \"nvidia/llama-nemotron-embed-vl-1b-v2:free\",\n  \"nvidia/llama-nemotron-rerank-vl-1b-v2:free\",\n  \"nvidia/nemotron-3-embed-1b:free\",\n  \"nvidia/nemotron-3-nano-30b-a3b\",\n  \"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free\",\n  \"nvidia/nemotron-3-super-120b-a12b\",\n  \"nvidia/nemotron-3-super-120b-a12b:free\",\n  \"nvidia/nemotron-3-ultra-550b-a55b\",\n  \"nvidia/nemotron-3-ultra-550b-a55b:batch\",\n  \"nvidia/nemotron-3-ultra-550b-a55b:free\",\n  \"nvidia/nemotron-3.5-asr-streaming-multilingual-0.6b\",\n  \"nvidia/nemotron-3.5-content-safety:free\",\n  \"nvidia/nemotron-3.5-lightning\",\n  \"nvidia/nemotron-3.5-lightning:free\",\n  \"nvidia/parakeet-tdt-0.6b-v3\",\n  \"openai/gpt-3.5-turbo\",\n  \"openai/gpt-3.5-turbo-0613\",\n  \"openai/gpt-3.5-turbo-16k\",\n  \"openai/gpt-3.5-turbo-instruct\",\n  \"openai/gpt-3.5-turbo:batch\",\n  \"openai/gpt-4\",\n  \"openai/gpt-4-turbo\",\n  \"openai/gpt-4-turbo-preview\",\n  \"openai/gpt-4-turbo:batch\",\n  \"openai/gpt-4.1\",\n  \"openai/gpt-4.1-mini\",\n  \"openai/gpt-4.1-mini:batch\",\n  \"openai/gpt-4.1-nano\",\n  \"openai/gpt-4.1-nano:batch\",\n  \"openai/gpt-4.1:batch\",\n  \"openai/gpt-4o\",\n  \"openai/gpt-4o-2024-05-13\",\n  \"openai/gpt-4o-2024-08-06\",\n  \"openai/gpt-4o-2024-11-20\",\n  \"openai/gpt-4o-mini\",\n  \"openai/gpt-4o-mini-2024-07-18\",\n  \"openai/gpt-4o-mini-transcribe\",\n  \"openai/gpt-4o-mini:batch\",\n  \"openai/gpt-4o-transcribe\",\n  \"openai/gpt-4o:batch\",\n  \"openai/gpt-5\",\n  \"openai/gpt-5-image\",\n  \"openai/gpt-5-image-mini\",\n  \"openai/gpt-5-mini\",\n  \"openai/gpt-5-mini:batch\",\n  \"openai/gpt-5-nano\",\n  \"openai/gpt-5-nano:batch\",\n  \"openai/gpt-5-pro\",\n  \"openai/gpt-5-pro:batch\",\n  \"openai/gpt-5.1\",\n  \"openai/gpt-5.1-codex\",\n  \"openai/gpt-5.1-codex-max\",\n  \"openai/gpt-5.1-codex-mini\",\n  \"openai/gpt-5.1:batch\",\n  \"openai/gpt-5.2\",\n  \"openai/gpt-5.2-chat\",\n  \"openai/gpt-5.2-codex\",\n  \"openai/gpt-5.2-pro\",\n  \"openai/gpt-5.2-pro:batch\",\n  \"openai/gpt-5.2:batch\",\n  \"openai/gpt-5.3-codex\",\n  \"openai/gpt-5.4\",\n  \"openai/gpt-5.4-image-2\",\n  \"openai/gpt-5.4-mini\",\n  \"openai/gpt-5.4-mini:batch\",\n  \"openai/gpt-5.4-nano\",\n  \"openai/gpt-5.4-nano:batch\",\n  \"openai/gpt-5.4-pro\",\n  \"openai/gpt-5.4-pro:batch\",\n  \"openai/gpt-5.4:batch\",\n  \"openai/gpt-5.5\",\n  \"openai/gpt-5.5-pro\",\n  \"openai/gpt-5.5-pro:batch\",\n  \"openai/gpt-5.5:batch\",\n  \"openai/gpt-5.6-luna\",\n  \"openai/gpt-5.6-luna-pro\",\n  \"openai/gpt-5.6-luna-pro:batch\",\n  \"openai/gpt-5.6-luna:batch\",\n  \"openai/gpt-5.6-sol\",\n  \"openai/gpt-5.6-sol-pro\",\n  \"openai/gpt-5.6-sol-pro:batch\",\n  \"openai/gpt-5.6-sol:batch\",\n  \"openai/gpt-5.6-terra\",\n  \"openai/gpt-5.6-terra-pro\",\n  \"openai/gpt-5.6-terra-pro:batch\",\n  \"openai/gpt-5.6-terra:batch\",\n  \"openai/gpt-5:batch\",\n  \"openai/gpt-audio\",\n  \"openai/gpt-audio-mini\",\n  \"openai/gpt-chat-latest\",\n  \"openai/gpt-image-1\",\n  \"openai/gpt-image-1-mini\",\n  \"openai/gpt-image-2\",\n  \"openai/gpt-oss-120b\",\n  \"openai/gpt-oss-120b:batch\",\n  \"openai/gpt-oss-20b\",\n  \"openai/gpt-oss-20b:batch\",\n  \"openai/gpt-oss-safeguard-20b\",\n  \"openai/gpt-transcribe\",\n  \"openai/o1\",\n  \"openai/o1-pro\",\n  \"openai/o3\",\n  \"openai/o3-mini\",\n  \"openai/o3-mini-high\",\n  \"openai/o3-mini:batch\",\n  \"openai/o3-pro\",\n  \"openai/o3:batch\",\n  \"openai/o4-mini\",\n  \"openai/o4-mini-high\",\n  \"openai/o4-mini:batch\",\n  \"openai/sora-2-pro\",\n  \"openai/text-embedding-3-large\",\n  \"openai/text-embedding-3-large:batch\",\n  \"openai/text-embedding-3-small\",\n  \"openai/text-embedding-3-small:batch\",\n  \"openai/text-embedding-ada-002\",\n  \"openai/text-embedding-ada-002:batch\",\n  \"openai/whisper-1\",\n  \"openai/whisper-large-v3\",\n  \"openai/whisper-large-v3-turbo\",\n  \"openrouter/auto\",\n  \"openrouter/auto-beta\",\n  \"openrouter/bodybuilder\",\n  \"openrouter/free\",\n  \"openrouter/fusion\",\n  \"openrouter/pareto-code\",\n  \"perceptron/perceptron-mk1\",\n  \"perplexity/pplx-embed-v1-0.6b\",\n  \"perplexity/pplx-embed-v1-4b\",\n  \"perplexity/sonar\",\n  \"perplexity/sonar-deep-research\",\n  \"perplexity/sonar-pro\",\n  \"perplexity/sonar-pro-search\",\n  \"perplexity/sonar-reasoning-pro\",\n  \"poolside/laguna-s-2.1\",\n  \"poolside/laguna-s-2.1:free\",\n  \"poolside/laguna-xs-2.1\",\n  \"poolside/laguna-xs-2.1:free\",\n  \"qwen/qwen-2.5-72b-instruct\",\n  \"qwen/qwen-2.5-7b-instruct\",\n  \"qwen/qwen-2.5-coder-32b-instruct\",\n  \"qwen/qwen-audio-3.0-tts-flash\",\n  \"qwen/qwen-audio-3.0-tts-plus\",\n  \"qwen/qwen-image-3\",\n  \"qwen/qwen-image-3-pro\",\n  \"qwen/qwen-plus\",\n  \"qwen/qwen-plus-2025-07-28\",\n  \"qwen/qwen2.5-vl-72b-instruct\",\n  \"qwen/qwen3-14b\",\n  \"qwen/qwen3-235b-a22b\",\n  \"qwen/qwen3-235b-a22b-2507\",\n  \"qwen/qwen3-235b-a22b-thinking-2507\",\n  \"qwen/qwen3-30b-a3b\",\n  \"qwen/qwen3-30b-a3b-instruct-2507\",\n  \"qwen/qwen3-30b-a3b-thinking-2507\",\n  \"qwen/qwen3-32b\",\n  \"qwen/qwen3-8b\",\n  \"qwen/qwen3-asr-0.6b\",\n  \"qwen/qwen3-asr-1.7b\",\n  \"qwen/qwen3-asr-flash-2026-02-10\",\n  \"qwen/qwen3-coder\",\n  \"qwen/qwen3-coder-30b-a3b-instruct\",\n  \"qwen/qwen3-coder-flash\",\n  \"qwen/qwen3-coder-next\",\n  \"qwen/qwen3-coder-plus\",\n  \"qwen/qwen3-embedding-4b\",\n  \"qwen/qwen3-embedding-8b\",\n  \"qwen/qwen3-max\",\n  \"qwen/qwen3-max-thinking\",\n  \"qwen/qwen3-next-80b-a3b-instruct\",\n  \"qwen/qwen3-next-80b-a3b-thinking\",\n  \"qwen/qwen3-reranker-8b\",\n  \"qwen/qwen3-vl-235b-a22b-instruct\",\n  \"qwen/qwen3-vl-235b-a22b-thinking\",\n  \"qwen/qwen3-vl-30b-a3b-instruct\",\n  \"qwen/qwen3-vl-30b-a3b-thinking\",\n  \"qwen/qwen3-vl-32b-instruct\",\n  \"qwen/qwen3-vl-8b-instruct\",\n  \"qwen/qwen3-vl-8b-thinking\",\n  \"qwen/qwen3.5-122b-a10b\",\n  \"qwen/qwen3.5-27b\",\n  \"qwen/qwen3.5-35b-a3b\",\n  \"qwen/qwen3.5-397b-a17b\",\n  \"qwen/qwen3.5-9b\",\n  \"qwen/qwen3.5-9b:batch\",\n  \"qwen/qwen3.5-flash-02-23\",\n  \"qwen/qwen3.5-plus-02-15\",\n  \"qwen/qwen3.5-plus-20260420\",\n  \"qwen/qwen3.6-27b\",\n  \"qwen/qwen3.6-35b-a3b\",\n  \"qwen/qwen3.6-flash\",\n  \"qwen/qwen3.6-max-preview\",\n  \"qwen/qwen3.6-plus\",\n  \"qwen/qwen3.7-flash\",\n  \"qwen/qwen3.7-max\",\n  \"qwen/qwen3.7-plus\",\n  \"qwen/qwen3.8-2.4t-a95b\",\n  \"qwen/qwen3.8-2.4t-a95b:batch\",\n  \"qwen/qwen3.8-27b\",\n  \"qwen/qwen3.8-flash\",\n  \"qwen/qwen3.8-max\",\n  \"recraft/recraft-v3\",\n  \"recraft/recraft-v4\",\n  \"recraft/recraft-v4-pro\",\n  \"recraft/recraft-v4-pro-vector\",\n  \"recraft/recraft-v4-styles\",\n  \"recraft/recraft-v4-styles-pro\",\n  \"recraft/recraft-v4-styles-pro-vector\",\n  \"recraft/recraft-v4-styles-vector\",\n  \"recraft/recraft-v4-vector\",\n  \"recraft/recraft-v4.1\",\n  \"recraft/recraft-v4.1-pro\",\n  \"recraft/recraft-v4.1-pro-vector\",\n  \"recraft/recraft-v4.1-utility\",\n  \"recraft/recraft-v4.1-utility-pro\",\n  \"recraft/recraft-v4.1-vector\",\n  \"rekaai/reka-edge\",\n  \"rekaai/reka-flash-3\",\n  \"relace/relace-apply-3\",\n  \"relace/relace-search\",\n  \"runway/aleph-2\",\n  \"runway/gen-4.5\",\n  \"sakana/fugu-ultra\",\n  \"sakana/sakana-namazu\",\n  \"sao10k/l3-lunaris-8b\",\n  \"sao10k/l3.1-euryale-70b\",\n  \"sao10k/l3.3-euryale-70b\",\n  \"sentence-transformers/all-minilm-l12-v2\",\n  \"sentence-transformers/all-minilm-l6-v2\",\n  \"sentence-transformers/all-mpnet-base-v2\",\n  \"sentence-transformers/multi-qa-mpnet-base-dot-v1\",\n  \"sentence-transformers/paraphrase-minilm-l6-v2\",\n  \"sesame/csm-1b\",\n  \"sourceful/riverflow-v2-fast\",\n  \"sourceful/riverflow-v2-pro\",\n  \"sourceful/riverflow-v2.5-fast\",\n  \"sourceful/riverflow-v2.5-pro\",\n  \"stepfun/step-3.5-flash\",\n  \"stepfun/step-3.7-flash\",\n  \"tencent/hunyuan-a13b-instruct\",\n  \"tencent/hy-mt2-1.8b\",\n  \"tencent/hy-mt2-30b-a3b\",\n  \"tencent/hy-mt2-7b\",\n  \"tencent/hy3\",\n  \"tencent/hy3-preview\",\n  \"tencent/hy4-preview\",\n  \"thedrummer/cydonia-24b-v4.1\",\n  \"thedrummer/skyfall-36b-v2\",\n  \"thedrummer/unslopnemo-12b\",\n  \"thenlper/gte-base\",\n  \"thenlper/gte-large\",\n  \"thinkingmachines/inkling\",\n  \"thinkingmachines/inkling-small\",\n  \"thinkingmachines/inkling-small:batch\",\n  \"thinkingmachines/inkling-small:free\",\n  \"thinkingmachines/inkling:batch\",\n  \"thinkingmachines/inkling:free\",\n  \"undi95/remm-slerp-l2-13b\",\n  \"upstage/solar-pro-3\",\n  \"upstage/solar-pro4\",\n  \"voyageai/rerank-2.5\",\n  \"voyageai/rerank-2.5-lite\",\n  \"voyageai/voyage-4\",\n  \"voyageai/voyage-4-large\",\n  \"voyageai/voyage-4-lite\",\n  \"voyageai/voyage-code-4\",\n  \"voyageai/voyage-multimodal-3.5\",\n  \"writer/palmyra-x5\",\n  \"x-ai/grok-4.20\",\n  \"x-ai/grok-4.20-multi-agent\",\n  \"x-ai/grok-4.3\",\n  \"x-ai/grok-4.5\",\n  \"x-ai/grok-4.6\",\n  \"x-ai/grok-build-0.1\",\n  \"x-ai/grok-imagine-image-2.0\",\n  \"x-ai/grok-imagine-image-quality\",\n  \"x-ai/grok-imagine-video\",\n  \"x-ai/grok-imagine-video-1.5\",\n  \"x-ai/grok-stt-1.0\",\n  \"x-ai/grok-voice-tts-1.0\",\n  \"xiaomi/mimo-v2.5\",\n  \"xiaomi/mimo-v2.5-pro\",\n  \"z-ai/glm-4.5\",\n  \"z-ai/glm-4.5-air\",\n  \"z-ai/glm-4.5v\",\n  \"z-ai/glm-4.6\",\n  \"z-ai/glm-4.6v\",\n  \"z-ai/glm-4.7\",\n  \"z-ai/glm-4.7-flash\",\n  \"z-ai/glm-5\",\n  \"z-ai/glm-5-turbo\",\n  \"z-ai/glm-5.1\",\n  \"z-ai/glm-5.2\",\n  \"z-ai/glm-5.2:free\",\n  \"z-ai/glm-5.3\",\n  \"z-ai/glm-5.3-flash\",\n  \"z-ai/glm-5.3-flash:batch\",\n  \"z-ai/glm-5v-turbo\",\n  \"~anthropic/claude-fable-latest\",\n  \"~anthropic/claude-haiku-latest\",\n  \"~anthropic/claude-opus-latest\",\n  \"~anthropic/claude-sonnet-latest\",\n  \"~deepseek/deepseek-v4-flash-latest\",\n  \"~google/gemini-flash-latest\",\n  \"~google/gemini-pro-latest\",\n  \"~moonshotai/kimi-latest\",\n  \"~openai/gpt-latest\",\n  \"~openai/gpt-mini-latest\",\n  \"~x-ai/grok-latest\",\n  \"~z-ai/glm-latest\"\n] as const;\n\n/** A model ID known when this package was generated. */\nexport type KnownOpenRouterModelId = (typeof knownOpenRouterModelIds)[number];\n\n/** A gateway model ID known when this package was generated. */\nexport type KnownGatewayModelId = KnownVercelModelId | KnownOpenRouterModelId;\n\n/** Exact selectable option values in the reviewed gateway snapshots. */\nexport interface KnownGatewayOptionValuesByKey {\n  readonly \"openrouter:~anthropic/claude-fable-latest\": Readonly<{ readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:~anthropic/claude-haiku-latest\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:~anthropic/claude-opus-latest\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:~anthropic/claude-sonnet-latest\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:~deepseek/deepseek-v4-flash-latest\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:~google/gemini-flash-latest\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:~google/gemini-pro-latest\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:~moonshotai/kimi-latest\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:~openai/gpt-latest\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:~openai/gpt-mini-latest\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:~x-ai/grok-latest\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:~z-ai/glm-latest\": Readonly<{ readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:aion-labs/aion-2.0\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:aion-labs/aion-3.0\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:aion-labs/aion-3.0-mini\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:aion-labs/aion-rp-llama-3.1-8b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:alibaba/happyhorse-1.0\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:alibaba/happyhorse-1.1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:alibaba/wan-2.6\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:alibaba/wan-2.7\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:alibaba/wan-3.0\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:alibaba/wan-3.0-prime\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:amazon/nova-2-lite-v1\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:amazon/nova-lite-v1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:amazon/nova-micro-v1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:amazon/nova-premier-v1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:amazon/nova-pro-v1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:anthracite-org/magnum-v4-72b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:anthropic/claude-3-haiku\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:anthropic/claude-fable-5\": Readonly<{ readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-fable-5:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-haiku-4.5\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-haiku-4.5:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.1\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.1:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.5\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.5:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.6\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.maxTokens\"?: number; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.6:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.maxTokens\"?: number; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.7\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.7-fast\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.7:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.8\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.8-fast\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-4.8:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-5\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-5-fast\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-opus-5:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-sonnet-4\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-sonnet-4.5\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-sonnet-4.5:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-sonnet-4.6\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-sonnet-4.6:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-sonnet-5\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:anthropic/claude-sonnet-5:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:arcee-ai/trinity-large-thinking\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:baai/bge-base-en-v1.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:baai/bge-large-en-v1.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:baai/bge-m3\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:baidu/ernie-4.5-vl-424b-a47b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:black-forest-labs/flux-3-video\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:black-forest-labs/flux-video-upscale\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:black-forest-labs/flux.2-flex\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:black-forest-labs/flux.2-klein-4b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:black-forest-labs/flux.2-max\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:black-forest-labs/flux.2-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:bytedance-seed/seed-1.6\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:bytedance-seed/seed-1.6-flash\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:bytedance-seed/seed-2-1-turbo\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:bytedance-seed/seed-2.0-code\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:bytedance-seed/seed-2.0-lite\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:bytedance-seed/seed-2.0-mini\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:bytedance-seed/seedream-4.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:bytedance-seed/seedream-5-0-lite\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:bytedance-seed/seedream-5-0-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:bytedance/seedance-1-5-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:bytedance/seedance-2.0\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:bytedance/seedance-2.0-fast\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:bytedance/seedance-2.0-mini\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:bytedance/seedance-2.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:bytedance/ui-tars-1.5-7b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:canopylabs/orpheus-3b-0.1-ft\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:cognitivecomputations/dolphin-mistral-24b-venice-edition\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:cohere/command-a\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:cohere/command-r-08-2024\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:cohere/command-r-plus-08-2024\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:cohere/command-r7b-12-2024\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:cohere/north-mini-code:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:cohere/rerank-4-fast\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:cohere/rerank-4-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:cohere/rerank-v3.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:deepgram/aura-2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:deepgram/flux-tts:free\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:deepgram/nova-3\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:deepseek/deepseek-chat\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:deepseek/deepseek-chat-v3-0324\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:deepseek/deepseek-chat-v3.1\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-r1\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-r1-0528\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-r1-distill-llama-70b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-v3.1-terminus\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-v3.2\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-v3.2-exp\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-v4-flash\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-v4-flash-0731\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-v4-flash-0731:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-v4-flash-vision-exp\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-v4-pro\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-v4-pro-0813\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:deepseek/deepseek-v4-pro-0813:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:dots-studio/dots-3-note-preview:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:fish-audio/s1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:fish-audio/s2-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:fish-audio/s2.1-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:fish-audio/s2.1-pro-free:free\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:fish-audio/transcribe-1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/chirp-3\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/gemini-2.5-flash\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-2.5-flash-image\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/gemini-2.5-flash-lite\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-2.5-flash-lite:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-2.5-flash:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-2.5-pro\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-2.5-pro-preview\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-2.5-pro-preview-05-06\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-2.5-pro:batch\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3-flash-preview\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3-flash-preview:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3-pro-image\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3-pro-image-preview\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.1-flash-image\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.1-flash-image-preview\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.1-flash-lite\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.1-flash-lite-image\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.1-flash-lite-preview\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.1-flash-lite:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.1-flash-tts-preview\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/gemini-3.1-pro-preview\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.1-pro-preview-customtools\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.1-pro-preview:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.5-flash\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.5-flash-lite\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.5-flash-lite:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.5-flash:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.6-flash\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.6-flash:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.7-flash\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-3.7-flash:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemini-embedding-001\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/gemini-embedding-2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/gemini-embedding-2-preview\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/gemini-embedding-2:batch\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/gemma-2-27b-it\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/gemma-3-12b-it\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/gemma-3-27b-it\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/gemma-3-4b-it\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/gemma-4-26b-a4b-it\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemma-4-26b-a4b-it:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemma-4-31b-it\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemma-4-31b-it:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/gemma-4-31b-it:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:google/lyria-3-clip-preview\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/lyria-3-pro-preview\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/veo-3.1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/veo-3.1-fast\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:google/veo-3.1-lite\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:gryphe/mythomax-l2-13b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:hexgrad/kokoro-82m\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:heygen/avatar-iv\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:ibm-granite/granite-4.0-h-micro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:ibm-granite/granite-4.1-8b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:ibm-granite/granite-4.2-8b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:inception/mercury-2\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:inclusionai/ling-3.0-flash\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:inclusionai/ling-3.0-flash-fin:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:intfloat/e5-base-v2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:intfloat/e5-large-v2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:intfloat/multilingual-e5-large\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:krea/krea-2-large\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:krea/krea-2-medium\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:krea/krea-2-medium-turbo\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:kwaipilot/kat-coder-pro-v2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:kwaipilot/kat-coder-pro-v2.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:kwaivgi/kling-v3.0-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:kwaivgi/kling-v3.0-std\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:kwaivgi/kling-video-o1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:liquid/lfm-2.5-2.6b:free\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:liquid/lfm-2.5-embedding-350m:free\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mancer/weaver\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:meituan/longcat-2.0\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:meta-llama/llama-3.1-70b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:meta-llama/llama-3.1-8b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:meta-llama/llama-3.2-1b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:meta-llama/llama-3.2-3b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:meta-llama/llama-3.3-70b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:meta-llama/llama-4-maverick\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:meta-llama/llama-4-scout\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:meta-llama/llama-guard-4-12b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:meta/muse-glimmer-30b\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:meta/muse-glimmer-30b:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:meta/muse-image\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:meta/muse-spark-1.1\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:meta/muse-spark-1.2\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:meta/muse-spark-1.2-contributor\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:microsoft/mai-image-2.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:microsoft/mai-image-2.5-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:microsoft/mai-transcribe-1.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:microsoft/mai-voice-2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:microsoft/mai-voice-2-flash\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:microsoft/phi-4\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:microsoft/wizardlm-2-8x22b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:minimax/hailuo-2.3\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:minimax/hailuo-3\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:minimax/minimax-01\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:minimax/minimax-m1\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:minimax/minimax-m2\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:minimax/minimax-m2-her\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:minimax/minimax-m2.1\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:minimax/minimax-m2.5\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:minimax/minimax-m2.7\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:minimax/minimax-m2.7:free\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:minimax/minimax-m3\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:minimax/minimax-m3:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:minimax/minimax-m3:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:minimax/speech-2.8-hd\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:minimax/speech-2.8-turbo\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/codestral-2508\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/codestral-embed-2505\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/devstral-2512\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/ministral-14b-2512\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/ministral-3b-2512\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/ministral-8b-2512\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mistral-embed-2312\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mistral-large\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mistral-large-2407\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mistral-large-2512\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mistral-medium-3\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mistral-medium-3-5\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:mistralai/mistral-medium-3-5:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:mistralai/mistral-medium-3.1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mistral-nemo\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mistral-saba\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mistral-small-24b-instruct-2501\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mistral-small-2603\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:mistralai/mistral-small-3.1-24b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mistral-small-3.2-24b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/mixtral-8x22b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/voxtral-mini-3b-2507\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/voxtral-mini-transcribe\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/voxtral-mini-tts-2603\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/voxtral-small-24b-2507\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:mistralai/voxtral-small-24b-2507-stt\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:moonshotai/kimi-k2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:moonshotai/kimi-k2-0905\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:moonshotai/kimi-k2-thinking\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:moonshotai/kimi-k2.5\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:moonshotai/kimi-k2.6\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:moonshotai/kimi-k2.7-code\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:moonshotai/kimi-k3\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:moonshotai/kimi-k3:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:morph/morph-v3-fast\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:morph/morph-v3-large\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:nex-agi/nex-n2-mini\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nex-agi/nex-n2-pro\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nousresearch/hermes-3-llama-3.1-405b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:nousresearch/hermes-3-llama-3.1-70b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:nousresearch/hermes-4-405b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nousresearch/hermes-4-70b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nvidia/llama-nemotron-embed-vl-1b-v2:free\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:nvidia/llama-nemotron-rerank-vl-1b-v2:free\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:nvidia/nemotron-3-embed-1b:free\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:nvidia/nemotron-3-nano-30b-a3b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nvidia/nemotron-3-super-120b-a12b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"medium\" | \"low\"; readonly \"reasoning.maxTokens\"?: number; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nvidia/nemotron-3-super-120b-a12b:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"medium\" | \"low\"; readonly \"reasoning.maxTokens\"?: number; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nvidia/nemotron-3-ultra-550b-a55b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\"; readonly \"reasoning.maxTokens\"?: number; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nvidia/nemotron-3-ultra-550b-a55b:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\"; readonly \"reasoning.maxTokens\"?: number; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nvidia/nemotron-3-ultra-550b-a55b:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\"; readonly \"reasoning.maxTokens\"?: number; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nvidia/nemotron-3.5-asr-streaming-multilingual-0.6b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:nvidia/nemotron-3.5-content-safety:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nvidia/nemotron-3.5-lightning\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nvidia/nemotron-3.5-lightning:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:nvidia/parakeet-tdt-0.6b-v3\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-3.5-turbo\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-3.5-turbo-0613\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-3.5-turbo-16k\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-3.5-turbo-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-3.5-turbo:batch\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4-turbo\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4-turbo-preview\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4-turbo:batch\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4.1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4.1-mini\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4.1-mini:batch\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4.1-nano\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4.1-nano:batch\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4.1:batch\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4o\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4o-2024-05-13\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4o-2024-08-06\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4o-2024-11-20\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4o-mini\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4o-mini-2024-07-18\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4o-mini-transcribe\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4o-mini:batch\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4o-transcribe\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-4o:batch\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-5\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5-image\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5-image-mini\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5-mini\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5-mini:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5-nano\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5-nano:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5-pro\": Readonly<{ readonly \"reasoning.effort\"?: \"high\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5-pro:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"high\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.1\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.1-codex\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.1-codex-max\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.1-codex-mini\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.1:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.2\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.2-chat\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-5.2-codex\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.2-pro\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.2-pro:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.2:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.3-codex\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.4\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.4-image-2\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.4-mini\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.4-mini:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.4-nano\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.4-nano:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.4-pro\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.4-pro:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.4:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.5\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.5-pro\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.5-pro:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.5:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-luna\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-luna-pro\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-luna-pro:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-luna:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-sol\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-sol-pro\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-sol-pro:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-sol:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-terra\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-terra-pro\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-terra-pro:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-5.6-terra:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-audio\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-audio-mini\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-chat-latest\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-image-1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-image-1-mini\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-image-2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/gpt-oss-120b\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-oss-120b:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-oss-20b\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-oss-20b:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-oss-safeguard-20b\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/gpt-transcribe\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/o1\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/o1-pro\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/o3\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/o3-mini\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/o3-mini-high\": Readonly<{ readonly \"reasoning.effort\"?: \"high\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/o3-mini:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/o3-pro\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/o3:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/o4-mini\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/o4-mini-high\": Readonly<{ readonly \"reasoning.effort\"?: \"high\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/o4-mini:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:openai/sora-2-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/text-embedding-3-large\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/text-embedding-3-large:batch\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/text-embedding-3-small\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/text-embedding-3-small:batch\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/text-embedding-ada-002\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/text-embedding-ada-002:batch\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/whisper-1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/whisper-large-v3\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openai/whisper-large-v3-turbo\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openrouter/auto\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openrouter/auto-beta\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openrouter/bodybuilder\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openrouter/free\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openrouter/fusion\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:openrouter/pareto-code\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:perceptron/perceptron-mk1\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:perplexity/pplx-embed-v1-0.6b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:perplexity/pplx-embed-v1-4b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:perplexity/sonar\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:perplexity/sonar-deep-research\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:perplexity/sonar-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:perplexity/sonar-pro-search\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:perplexity/sonar-reasoning-pro\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:poolside/laguna-s-2.1\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:poolside/laguna-s-2.1:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:poolside/laguna-xs-2.1\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:poolside/laguna-xs-2.1:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen-2.5-72b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen-2.5-7b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen-2.5-coder-32b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen-audio-3.0-tts-flash\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen-audio-3.0-tts-plus\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen-image-3\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen-image-3-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen-plus\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen-plus-2025-07-28\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen2.5-vl-72b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-14b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-235b-a22b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-235b-a22b-2507\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-235b-a22b-thinking-2507\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-30b-a3b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-30b-a3b-instruct-2507\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-30b-a3b-thinking-2507\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-32b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-8b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-asr-0.6b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-asr-1.7b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-asr-flash-2026-02-10\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-coder\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-coder-30b-a3b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-coder-flash\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-coder-next\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-coder-plus\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-embedding-4b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-embedding-8b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-max\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-max-thinking\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-next-80b-a3b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-next-80b-a3b-thinking\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-reranker-8b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-vl-235b-a22b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-vl-235b-a22b-thinking\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-vl-30b-a3b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-vl-30b-a3b-thinking\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3-vl-32b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-vl-8b-instruct\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:qwen/qwen3-vl-8b-thinking\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.5-122b-a10b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.5-27b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.5-35b-a3b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.5-397b-a17b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.5-9b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.5-9b:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.5-flash-02-23\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.5-plus-02-15\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.5-plus-20260420\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.6-27b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.6-35b-a3b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.6-flash\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.6-max-preview\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.6-plus\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.7-flash\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.7-max\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.7-plus\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.8-2.4t-a95b\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.8-2.4t-a95b:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.8-27b\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.8-flash\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:qwen/qwen3.8-max\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"minimal\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:recraft/recraft-v3\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4-pro-vector\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4-styles\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4-styles-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4-styles-pro-vector\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4-styles-vector\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4-vector\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4.1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4.1-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4.1-pro-vector\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4.1-utility\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4.1-utility-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:recraft/recraft-v4.1-vector\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:rekaai/reka-edge\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:rekaai/reka-flash-3\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:relace/relace-apply-3\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:relace/relace-search\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:runway/aleph-2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:runway/gen-4.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sakana/fugu-ultra\": Readonly<{ readonly \"reasoning.effort\"?: \"max\" | \"xhigh\" | \"high\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:sakana/sakana-namazu\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:sao10k/l3-lunaris-8b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sao10k/l3.1-euryale-70b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sao10k/l3.3-euryale-70b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sentence-transformers/all-minilm-l12-v2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sentence-transformers/all-minilm-l6-v2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sentence-transformers/all-mpnet-base-v2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sentence-transformers/multi-qa-mpnet-base-dot-v1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sentence-transformers/paraphrase-minilm-l6-v2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sesame/csm-1b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sourceful/riverflow-v2-fast\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sourceful/riverflow-v2-pro\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:sourceful/riverflow-v2.5-fast\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:sourceful/riverflow-v2.5-pro\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:stepfun/step-3.5-flash\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:stepfun/step-3.7-flash\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:tencent/hunyuan-a13b-instruct\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:tencent/hy-mt2-1.8b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:tencent/hy-mt2-30b-a3b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:tencent/hy-mt2-7b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:tencent/hy3\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:tencent/hy3-preview\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:tencent/hy4-preview\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:thedrummer/cydonia-24b-v4.1\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:thedrummer/skyfall-36b-v2\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:thedrummer/unslopnemo-12b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:thenlper/gte-base\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:thenlper/gte-large\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:thinkingmachines/inkling\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"medium\" | \"low\" | \"minimal\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:thinkingmachines/inkling-small\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"medium\" | \"low\" | \"minimal\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:thinkingmachines/inkling-small:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"medium\" | \"low\" | \"minimal\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:thinkingmachines/inkling-small:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"medium\" | \"low\" | \"minimal\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:thinkingmachines/inkling:batch\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"medium\" | \"low\" | \"minimal\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:thinkingmachines/inkling:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"medium\" | \"low\" | \"minimal\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:undi95/remm-slerp-l2-13b\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:upstage/solar-pro-3\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:upstage/solar-pro4\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:voyageai/rerank-2.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:voyageai/rerank-2.5-lite\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:voyageai/voyage-4\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:voyageai/voyage-4-large\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:voyageai/voyage-4-lite\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:voyageai/voyage-code-4\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:voyageai/voyage-multimodal-3.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:writer/palmyra-x5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:x-ai/grok-4.20\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:x-ai/grok-4.20-multi-agent\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:x-ai/grok-4.3\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\" | \"none\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:x-ai/grok-4.5\": Readonly<{ readonly \"reasoning.effort\"?: \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:x-ai/grok-4.6\": Readonly<{ readonly \"reasoning.effort\"?: \"xhigh\" | \"high\" | \"medium\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:x-ai/grok-build-0.1\": Readonly<{ readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:x-ai/grok-imagine-image-2.0\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:x-ai/grok-imagine-image-quality\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:x-ai/grok-imagine-video\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:x-ai/grok-imagine-video-1.5\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:x-ai/grok-stt-1.0\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:x-ai/grok-voice-tts-1.0\": Readonly<{ readonly [key: string]: never }>;\n  readonly \"openrouter:xiaomi/mimo-v2.5\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:xiaomi/mimo-v2.5-pro\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-4.5\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-4.5-air\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-4.5v\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-4.6\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-4.6v\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-4.7\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-4.7-flash\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-5\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-5-turbo\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-5.1\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-5.2\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-5.2:free\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"xhigh\" | \"high\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-5.3\": Readonly<{ readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-5.3-flash\": Readonly<{ readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-5.3-flash:batch\": Readonly<{ readonly \"reasoning.effort\"?: \"max\" | \"high\" | \"low\"; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"openrouter:z-ai/glm-5v-turbo\": Readonly<{ readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.exclude\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen-3-14b\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen-3-235b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen-3-30b\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen-3-32b\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen-3.6-max-preview\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen3-235b-a22b-thinking\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen3-coder\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-coder-30b-a3b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-coder-next\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-coder-plus\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-embedding-0.6b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-embedding-4b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-embedding-8b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-max\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-max-preview\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-max-thinking\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen3-next-80b-a3b-instruct\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-next-80b-a3b-thinking\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen3-vl-235b-a22b-instruct\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-vl-instruct\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3-vl-thinking\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen3.5-flash\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen3.5-plus\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen3.6-27b\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen3.6-plus\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen3.7-flash\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3.7-max\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen3.7-plus\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:alibaba/qwen3.8-2.4t-a95b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3.8-27b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3.8-flash\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3.8-flash-next\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/qwen3.8-max\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/wan-v2.5-t2v-preview\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/wan-v2.6-i2v\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/wan-v2.6-i2v-flash\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/wan-v2.6-r2v\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/wan-v2.6-r2v-flash\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/wan-v2.6-t2v\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/wan-v2.7-r2v\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/wan-v2.7-t2v\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/wan-v3.0-video\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:alibaba/wan-v3.0-video-prime\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:amazon/nova-2-lite\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:amazon/nova-lite\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:amazon/nova-micro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:amazon/nova-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:amazon/titan-embed-text-v2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:anthropic/claude-3-haiku\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:anthropic/claude-fable-5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"reasoning.mode\"?: \"adaptive\"; readonly \"caching.ttl\"?: \"5m\" | \"1h\"; readonly \"beta.features\"?: readonly string[] }>;\n  readonly \"vercel:anthropic/claude-haiku-4.5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:anthropic/claude-opus-4\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:anthropic/claude-opus-4.5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:anthropic/claude-opus-4.6\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:anthropic/claude-opus-4.7\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\" }>;\n  readonly \"vercel:anthropic/claude-opus-4.8\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\" }>;\n  readonly \"vercel:anthropic/claude-opus-4.8-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\" }>;\n  readonly \"vercel:anthropic/claude-opus-5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"; readonly \"reasoning.mode\"?: \"adaptive\" | \"disabled\"; readonly \"caching.ttl\"?: \"5m\" | \"1h\"; readonly \"beta.features\"?: readonly string[]; readonly \"speed.mode\"?: \"standard\" | \"fast\" }>;\n  readonly \"vercel:anthropic/claude-opus-5-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"; readonly \"reasoning.mode\"?: \"adaptive\" | \"disabled\"; readonly \"caching.ttl\"?: \"5m\" | \"1h\"; readonly \"beta.features\"?: readonly string[]; readonly \"speed.mode\"?: \"standard\" | \"fast\" }>;\n  readonly \"vercel:anthropic/claude-sonnet-4\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:anthropic/claude-sonnet-4.5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:anthropic/claude-sonnet-4.6\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:anthropic/claude-sonnet-5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"reasoning.mode\"?: \"adaptive\" | \"disabled\"; readonly \"caching.ttl\"?: \"5m\" | \"1h\"; readonly \"beta.features\"?: readonly string[] }>;\n  readonly \"vercel:arcee-ai/trinity-large-thinking\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bfl/flux-2-flex\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bfl/flux-2-klein-4b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bfl/flux-2-klein-9b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bfl/flux-2-max\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bfl/flux-2-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bfl/flux-3-video\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bfl/flux-kontext-max\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bfl/flux-kontext-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bfl/flux-pro-1.0-fill\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bfl/flux-pro-1.1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bfl/flux-pro-1.1-ultra\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bytedance/seed-1.6\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:bytedance/seed-1.8\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:bytedance/seedance-2.0\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bytedance/seedance-2.0-fast\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bytedance/seedance-2.0-mini\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bytedance/seedance-2.5\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bytedance/seedance-v1.0-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bytedance/seedance-v1.0-pro-fast\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bytedance/seedance-v1.5-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bytedance/seedream-4.0\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bytedance/seedream-4.5\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bytedance/seedream-5.0-lite\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:bytedance/seedream-5.0-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:cohere/command-a\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:cohere/embed-v4.0\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:cohere/rerank-v3.5\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:cohere/rerank-v4-fast\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:cohere/rerank-v4-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:deepseek/deepseek-r1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:deepseek/deepseek-v3\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:deepseek/deepseek-v3.1\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:deepseek/deepseek-v3.1-terminus\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:deepseek/deepseek-v3.2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:deepseek/deepseek-v3.2-thinking\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:deepseek/deepseek-v4-flash\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"xhigh\" }>;\n  readonly \"vercel:deepseek/deepseek-v4-flash-0731\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:deepseek/deepseek-v4-flash-vision-exp\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:deepseek/deepseek-v4-pro\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"xhigh\" }>;\n  readonly \"vercel:deepseek/deepseek-v4-pro-0813\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:fish-audio/s1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:fish-audio/s1-free\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:fish-audio/s2-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:fish-audio/s2-pro-free\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:fish-audio/s2.1-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:fish-audio/s2.1-pro-free\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:fish-audio/transcribe-1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:fish-audio/transcribe-1-free\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/gemini-2.5-flash\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.budgetTokens\"?: number; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:google/gemini-2.5-flash-image\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.budgetTokens\"?: number }>;\n  readonly \"vercel:google/gemini-2.5-flash-lite\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.budgetTokens\"?: number; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:google/gemini-2.5-pro\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.budgetTokens\"?: number; readonly \"reasoning.maxTokens\"?: number }>;\n  readonly \"vercel:google/gemini-3-flash\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.level\"?: \"minimal\" | \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"standard\" | \"flex\" | \"priority\"; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:google/gemini-3-pro-image\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.level\"?: \"low\" | \"high\"; readonly \"service.tier\"?: \"standard\" | \"flex\" | \"priority\" }>;\n  readonly \"vercel:google/gemini-3.1-flash-image\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"minimal\" | \"high\" }>;\n  readonly \"vercel:google/gemini-3.1-flash-image-preview\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"minimal\" | \"high\" }>;\n  readonly \"vercel:google/gemini-3.1-flash-lite\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.level\"?: \"minimal\" | \"low\" | \"medium\" | \"high\"; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:google/gemini-3.1-flash-lite-image\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.level\"?: \"minimal\" | \"high\" }>;\n  readonly \"vercel:google/gemini-3.1-pro-preview\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.level\"?: \"low\" | \"medium\" | \"high\"; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:google/gemini-3.5-flash\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.level\"?: \"minimal\" | \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"standard\" | \"flex\" | \"priority\"; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:google/gemini-3.5-flash-lite\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.level\"?: \"minimal\" | \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"standard\" | \"flex\" | \"priority\" }>;\n  readonly \"vercel:google/gemini-3.5-transcribe\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"service.tier\"?: \"standard\" | \"flex\" | \"priority\" }>;\n  readonly \"vercel:google/gemini-3.5-transcribe-live\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"service.tier\"?: \"standard\" | \"flex\" | \"priority\" }>;\n  readonly \"vercel:google/gemini-3.6-flash\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.level\"?: \"minimal\" | \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"standard\" | \"flex\" | \"priority\" }>;\n  readonly \"vercel:google/gemini-3.7-flash\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.level\"?: \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"standard\" | \"flex\" | \"priority\"; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:google/gemini-embedding-001\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/gemini-embedding-2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/gemini-omni-flash-preview\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/gemma-4-26b-a4b-it\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/gemma-4-31b-it\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/text-embedding-005\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/text-multilingual-embedding-002\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/veo-3.0-fast-generate-001\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/veo-3.0-generate-001\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/veo-3.1-fast-generate-001\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/veo-3.1-generate-001\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:google/veo-3.1-lite-generate-001\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:inception/mercury-2\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:inception/mercury-coder-small\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:inclusionai/ling-3.0-flash\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:inclusionai/ling-3.0-flash-fin\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:inclusionai/ling-3.0-flash-fin-free\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:interfaze/interfaze-beta\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:klingai/kling-v2.5-turbo-i2v\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:klingai/kling-v2.5-turbo-t2v\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:klingai/kling-v2.6-i2v\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:klingai/kling-v2.6-motion-control\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:klingai/kling-v2.6-t2v\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:klingai/kling-v3.0-i2v\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:klingai/kling-v3.0-motion-control\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:klingai/kling-v3.0-t2v\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:kwaipilot/kat-coder-air-v2.5\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:kwaipilot/kat-coder-pro-v1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:kwaipilot/kat-coder-pro-v2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:kwaipilot/kat-coder-pro-v2.5\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:meta/llama-3.1-70b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:meta/llama-3.1-8b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:meta/llama-3.3-70b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:meta/llama-4-maverick\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:meta/llama-4-scout\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:meta/muse-glimmer-30b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:meta/muse-image-1.0\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:meta/muse-spark-1.1\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" }>;\n  readonly \"vercel:meta/muse-spark-1.2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:meta/muse-spark-1.2-contributor\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-h3\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-h3-max\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-m2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-m2.1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-m2.1-lightning\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-m2.5\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-m2.5-highspeed\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-m2.7\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-m2.7-free\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-m2.7-highspeed\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-m3\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:minimax/minimax-m3-free\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/codestral\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/codestral-embed\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/devstral-2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/devstral-small-2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/ministral-14b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/ministral-3b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/ministral-8b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/mistral-embed\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/mistral-large-3\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/mistral-medium\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/mistral-medium-3.5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"high\" }>;\n  readonly \"vercel:mistral/mistral-nemo\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/mistral-small\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:mistral/pixtral-12b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:moonshotai/kimi-k2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:moonshotai/kimi-k2-thinking\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:moonshotai/kimi-k2.5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:moonshotai/kimi-k2.6\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:moonshotai/kimi-k2.7-code\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:moonshotai/kimi-k2.7-code-highspeed\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:moonshotai/kimi-k3\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:moonshotai/kimi-k3-fast\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:morph/morph-v3-fast\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:morph/morph-v3-large\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:nvidia/nemotron-3-nano-30b-a3b\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:nvidia/nemotron-3-super-120b-a12b\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:nvidia/nemotron-3-ultra-550b-a55b\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:nvidia/nemotron-3.5-lightning\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:nvidia/nemotron-nano-12b-v2-vl\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:nvidia/nemotron-nano-9b-v2\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:openai/gpt-3.5-turbo\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4-turbo\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4.1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4.1-fast\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4.1-mini\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4.1-mini-fast\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4.1-nano\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4.1-nano-fast\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4o\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4o-fast\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4o-mini\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4o-mini-fast\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4o-mini-transcribe\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-4o-transcribe\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5-codex\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5-mini\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5-mini-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5-nano\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5-pro\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.1-codex\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.1-codex-max\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.1-codex-mini\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.1-thinking\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.1-thinking-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.2\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.2-codex\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.2-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.2-pro\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.3-codex\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.3-codex-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.4\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.4-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.4-mini\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.4-mini-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.4-nano\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.4-pro\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.5-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.5-pro\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"medium\" | \"high\" | \"xhigh\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.6-luna\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.6-luna-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.6-sol\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.6-sol-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.6-terra\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-5.6-terra-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/gpt-image-1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-image-1-mini\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-image-1.5\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-image-2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-oss-120b\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:openai/gpt-oss-20b\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:openai/gpt-oss-safeguard-120b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-oss-safeguard-20b\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:openai/gpt-realtime-1.5\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-realtime-2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-realtime-2.1\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" }>;\n  readonly \"vercel:openai/gpt-realtime-mini\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/gpt-realtime-whisper\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/o1\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/o3\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/o3-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/o3-mini\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/o3-pro\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/o4-mini\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/o4-mini-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\"; readonly \"service.tier\"?: \"auto\" | \"default\" | \"flex\" | \"fast\" | \"priority\" }>;\n  readonly \"vercel:openai/text-embedding-3-large\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/text-embedding-3-small\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/text-embedding-ada-002\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/tts-1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/tts-1-hd\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:openai/whisper-1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:perplexity/pplx-embed-v1-0.6b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:perplexity/pplx-embed-v1-4b\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:perplexity/sonar\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:perplexity/sonar-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:perplexity/sonar-reasoning-pro\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"minimal\" | \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:poolside/laguna-s-2.1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:poolside/laguna-s-2.1-free\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:prodia/flux-fast-schnell\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:quiverai/arrow-1.1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:recraft/recraft-v2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:recraft/recraft-v3\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:recraft/recraft-v4\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:recraft/recraft-v4-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:recraft/recraft-v4.1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:recraft/recraft-v4.1-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:recraft/recraft-v4.1-utility\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:recraft/recraft-v4.1-utility-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:sakana/fugu-ultra\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:sakana/namazu\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-4.1-fast-non-reasoning\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-4.1-fast-reasoning\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-4.20-multi-agent\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\" }>;\n  readonly \"vercel:spacexai/grok-4.20-multi-agent-beta\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" | \"xhigh\" }>;\n  readonly \"vercel:spacexai/grok-4.20-non-reasoning\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-4.20-non-reasoning-beta\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-4.20-reasoning\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-4.20-reasoning-beta\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-4.3\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:spacexai/grok-4.5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:spacexai/grok-4.6\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-build-0.1\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-imagine-image\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-imagine-image-2.0\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-imagine-video\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-imagine-video-1.5\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-imagine-video-1.5-preview\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-stt\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-tts\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-voice-think-fast-1.0\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:spacexai/grok-voice-think-fast-2.0\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:stepfun/step-3.5-flash\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:stepfun/step-3.7-flash\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"low\" | \"medium\" | \"high\" }>;\n  readonly \"vercel:tencent/hy-mt2-lite\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:tencent/hy-mt2-plus\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:tencent/hy-mt2-pro\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:tencent/hy3\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:tencent/hy4-preview\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:thinkingmachines/inkling\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.effort\"?: \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" }>;\n  readonly \"vercel:thinkingmachines/inkling-small\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/rerank-2.5\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/rerank-2.5-lite\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/voyage-3-large\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/voyage-3.5\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/voyage-3.5-lite\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/voyage-4\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/voyage-4-large\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/voyage-4-lite\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/voyage-code-2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/voyage-code-3\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/voyage-finance-2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:voyage/voyage-law-2\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:xiaomi/mimo-v2.5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:xiaomi/mimo-v2.5-pro\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:xiaomi/mimo-v2.5-pro-ultraspeed\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:zai/glm-4.5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:zai/glm-4.5-air\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:zai/glm-4.5v\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:zai/glm-4.6\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:zai/glm-4.7\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:zai/glm-4.7-flash\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:zai/glm-4.7-flashx\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:zai/glm-5\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:zai/glm-5-turbo\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:zai/glm-5.1\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n  readonly \"vercel:zai/glm-5.2\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"xhigh\" }>;\n  readonly \"vercel:zai/glm-5.2-fast\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean; readonly \"reasoning.effort\"?: \"high\" | \"xhigh\" }>;\n  readonly \"vercel:zai/glm-5.3\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:zai/glm-5.3-flash\": Readonly<{ readonly \"caching.auto\"?: boolean }>;\n  readonly \"vercel:zai/glm-5v-turbo\": Readonly<{ readonly \"caching.auto\"?: boolean; readonly \"reasoning.enabled\"?: boolean }>;\n}\n\n/** A provider-qualified gateway model key known when this package was generated. */\nexport type KnownGatewayModelKey = keyof KnownGatewayOptionValuesByKey;\n\n/** Exact option values for one reviewed gateway model. */\nexport type KnownGatewayOptionValues<TKey extends KnownGatewayModelKey> = KnownGatewayOptionValuesByKey[TKey];\n"},{"path":"source/packages/providers/src/google.ts","content":"import {\n  capability,\n  liveApiSource,\n  mapModelOptions,\n  type ModelCatalog,\n  type ModelDescriptor,\n  type ProviderAdapter,\n} from \"../../core/src/index.ts\";\nimport { z } from \"zod\";\nimport { baseModel, mergeCapabilities } from \"./model.ts\";\nimport { googleOptions } from \"./options.ts\";\nimport { fetchProviderJson, ProviderDiscoveryError, requireApiKey } from \"./shared.ts\";\n\nconst DEFAULT_ENDPOINT = \"https://generativelanguage.googleapis.com/v1beta/models\";\nconst responseSchema = z.object({\n  models: z.array(\n    z\n      .object({\n        name: z.string(),\n        baseModelId: z.string().optional(),\n        displayName: z.string().optional(),\n        description: z.string().optional(),\n        inputTokenLimit: z.number().optional(),\n        outputTokenLimit: z.number().optional(),\n        supportedGenerationMethods: z.array(z.string()).optional(),\n        supportedActions: z.array(z.string()).optional(),\n        thinking: z.boolean().optional(),\n      })\n      .passthrough(),\n  ),\n  nextPageToken: z.string().optional(),\n});\n\n/** Discover Google AI models, limits, methods, and general thinking support. */\nexport const googleAdapter: ProviderAdapter<\"google\"> = {\n  id: \"google\",\n  name: \"Google AI\",\n  catalogEndpoint: DEFAULT_ENDPOINT,\n  requiresAuthentication: true,\n  async discover(context = {}) {\n    const apiKey = requireApiKey(context, \"Google AI\");\n    const endpoint = context.baseUrl ?? DEFAULT_ENDPOINT;\n    const pages: Array<z.infer<typeof responseSchema>[\"models\"][number]> = [];\n    const seenPageTokens = new Set<string>();\n    let pageToken: string | undefined;\n    let fetchedAt = new Date().toISOString();\n    do {\n      const response = await fetchProviderJson(withGooglePageToken(endpoint, pageToken), context, {\n        \"x-goog-api-key\": apiKey,\n      });\n      fetchedAt = response.fetchedAt;\n      const parsed = responseSchema.parse(response.value);\n      pages.push(...parsed.models);\n      pageToken = parsed.nextPageToken;\n      if (pageToken !== undefined && seenPageTokens.has(pageToken)) {\n        throw new ProviderDiscoveryError(\"Google AI returned a repeated model-list page token.\");\n      }\n      if (pageToken !== undefined) {\n        seenPageTokens.add(pageToken);\n      }\n    } while (pageToken !== undefined);\n    const source = { ...liveApiSource(endpoint, fetchedAt), scope: \"account\" as const };\n    const models = pages.map((raw): ModelDescriptor<\"google\"> => {\n      const id = raw.baseModelId ?? raw.name.replace(/^models\\//, \"\");\n      const actions = raw.supportedActions ?? raw.supportedGenerationMethods ?? [];\n      const kind = googleModelKind(actions);\n      const model = baseModel({\n        provider: \"google\",\n        id,\n        name: raw.displayName ?? id,\n        source,\n        raw,\n        kind,\n        options: googleOptions(id),\n      });\n      return {\n        ...model,\n        ...(raw.description === undefined ? {} : { description: raw.description }),\n        ...(raw.inputTokenLimit === undefined\n          ? {}\n          : {\n              contextWindow: {\n                value: raw.inputTokenLimit,\n                confidence: \"provider-confirmed\" as const,\n                sources: [source],\n              },\n            }),\n        ...(raw.outputTokenLimit === undefined\n          ? {}\n          : {\n              maxOutputTokens: {\n                value: raw.outputTokenLimit,\n                confidence: \"provider-confirmed\" as const,\n                sources: [source],\n              },\n            }),\n        capabilities: mergeCapabilities(model.capabilities, {\n          reasoning: capability(raw.thinking === true ? \"supported\" : \"unknown\", [source]),\n          tools: capability(\"unknown\", [source]),\n        }),\n        interfaces: actions.includes(\"generateContent\") ? [\"google-generate-content\"] : [],\n        requirements: [\n          {\n            id: \"google-server-discovery\",\n            kind: \"server-only\",\n            title: \"Direct discovery stays on the server\",\n            description:\n              \"The Google model endpoint requires a credential that must not enter browser components.\",\n            support: capability(\"supported\", [source]),\n            sources: [source],\n          },\n        ],\n      };\n    });\n    return {\n      schemaVersion: 1,\n      provider: \"google\",\n      fetchedAt,\n      source,\n      models,\n    } satisfies ModelCatalog<\"google\">;\n  },\n  mapOptions(model, values) {\n    return mapModelOptions(model, values);\n  },\n};\n\nfunction withGooglePageToken(endpoint: string, pageToken?: string): string {\n  const url = new URL(endpoint);\n  if (pageToken !== undefined) {\n    url.searchParams.set(\"pageToken\", pageToken);\n  }\n  return url.toString();\n}\n\nfunction googleModelKind(actions: readonly string[]): ModelDescriptor[\"kind\"] {\n  if (actions.includes(\"embedContent\") || actions.includes(\"batchEmbedContents\")) {\n    return \"embedding\";\n  }\n  return actions.includes(\"generateContent\") ? \"language\" : \"system\";\n}\n"},{"path":"source/packages/providers/src/index.ts","content":"export { anthropicAdapter } from \"./anthropic.ts\";\nexport { googleAdapter } from \"./google.ts\";\nexport { knownOpenRouterModelIds, knownVercelModelIds } from \"./generated/modelIds.ts\";\nexport type {\n  KnownGatewayModelId,\n  KnownGatewayModelKey,\n  KnownGatewayOptionValues,\n  KnownGatewayOptionValuesByKey,\n  KnownOpenRouterModelId,\n  KnownVercelModelId,\n} from \"./generated/modelIds.ts\";\nexport { openAiAdapter } from \"./openai.ts\";\nexport { openRouterAdapter } from \"./openrouter.ts\";\nexport { selectKnownGatewayModel } from \"./known.ts\";\nexport type { KnownGatewayModel, KnownGatewaySelection } from \"./known.ts\";\nexport {\n  anthropicConstraints,\n  anthropicOptions,\n  googleOptions,\n  openAiOptions,\n  openRouterOptions,\n  optionSources,\n  vercelGatewayOptions,\n} from \"./options.ts\";\nexport { ProviderDiscoveryError } from \"./shared.ts\";\nexport { vercelGatewayAdapter } from \"./vercel.ts\";\n\nimport type { ProviderAdapter } from \"../../core/src/index.ts\";\nimport { anthropicAdapter } from \"./anthropic.ts\";\nimport { googleAdapter } from \"./google.ts\";\nimport { openAiAdapter } from \"./openai.ts\";\nimport { openRouterAdapter } from \"./openrouter.ts\";\nimport { vercelGatewayAdapter } from \"./vercel.ts\";\n\n/** All first-party provider adapters in stable display order. */\nexport const providerAdapters: readonly ProviderAdapter[] = [\n  vercelGatewayAdapter,\n  openRouterAdapter,\n  openAiAdapter,\n  anthropicAdapter,\n  googleAdapter,\n];\n"},{"path":"source/packages/providers/src/known.ts","content":"import { selectModel, type ModelCatalog, type ModelDescriptor } from \"../../core/src/index.ts\";\nimport type { KnownGatewayModelKey, KnownGatewayOptionValues } from \"./generated/modelIds.ts\";\n\n/** A reviewed gateway model narrowed to its provider-qualified key. */\nexport type KnownGatewayModel<TKey extends KnownGatewayModelKey> = ModelDescriptor<\n  TKey extends `${infer TProvider}:${string}` ? TProvider : never\n> & {\n  readonly key: TKey;\n  readonly id: TKey extends `${string}:${infer TId}` ? TId : never;\n};\n\n/** A compile-time exact selection from a reviewed gateway snapshot. */\nexport interface KnownGatewaySelection<TKey extends KnownGatewayModelKey> {\n  readonly model: KnownGatewayModel<TKey>;\n  readonly options: KnownGatewayOptionValues<TKey>;\n}\n\n/** Select a reviewed gateway model with its exact generated option type. */\nexport function selectKnownGatewayModel<TKey extends KnownGatewayModelKey>(\n  catalogs: readonly ModelCatalog[],\n  key: TKey,\n  options: KnownGatewayOptionValues<NoInfer<TKey>>,\n): KnownGatewaySelection<TKey> {\n  const model = catalogs.flatMap((catalog) => catalog.models).find((item) => item.key === key);\n  if (model === undefined) {\n    throw new RangeError(`The reviewed model ${key} is not present in these catalogs.`);\n  }\n  return selectModel(model, options) as unknown as KnownGatewaySelection<TKey>;\n}\n"},{"path":"source/packages/providers/src/model.ts","content":"import {\n  capability,\n  unknownCapabilities,\n  type CapabilitySupport,\n  type ModelCapabilities,\n  type ModelDescriptor,\n  type Modality,\n  type OptionDefinition,\n  type ProviderId,\n  type SourceReference,\n} from \"../../core/src/index.ts\";\n\n/** Build a model descriptor with conservative unknown defaults. */\nexport function baseModel<TProvider extends ProviderId>(input: {\n  readonly provider: TProvider;\n  readonly id: string;\n  readonly name: string;\n  readonly kind?: ModelDescriptor[\"kind\"];\n  readonly source: SourceReference;\n  readonly raw: unknown;\n  readonly options?: readonly OptionDefinition[];\n}): ModelDescriptor<TProvider> {\n  return {\n    key: `${input.provider}:${input.id}`,\n    provider: input.provider,\n    id: input.id,\n    name: input.name,\n    kind: input.kind ?? \"language\",\n    lifecycle: \"unknown\",\n    capabilities: unknownCapabilities(),\n    interfaces: [],\n    prices: [],\n    routes: [],\n    options: input.options ?? [],\n    requirements: [],\n    sources: [input.source],\n    raw: input.raw,\n  };\n}\n\n/** Convert declared media lists to evidence-backed capability maps. */\nexport function modalityCapabilities(\n  modalities: readonly string[],\n  source: SourceReference,\n): Readonly<Partial<Record<Modality, CapabilitySupport>>> {\n  const result: Partial<Record<Modality, CapabilitySupport>> = {};\n  for (const modality of modalities) {\n    if (isModality(modality)) {\n      result[modality] = capability(\"supported\", [source]);\n    }\n  }\n  return result;\n}\n\n/** Merge partial capability facts while preserving unknown fields. */\nexport function mergeCapabilities(\n  base: ModelCapabilities,\n  patch: Partial<ModelCapabilities>,\n): ModelCapabilities {\n  return {\n    input: patch.input ?? base.input,\n    output: patch.output ?? base.output,\n    reasoning: patch.reasoning ?? base.reasoning,\n    tools: patch.tools ?? base.tools,\n    structuredOutput: patch.structuredOutput ?? base.structuredOutput,\n    promptCaching: patch.promptCaching ?? base.promptCaching,\n  };\n}\n\nfunction isModality(value: string): value is Modality {\n  return [\"audio\", \"file\", \"image\", \"text\", \"video\"].includes(value);\n}\n"},{"path":"source/packages/providers/src/openai.ts","content":"import {\n  liveApiSource,\n  mapModelOptions,\n  type ModelCatalog,\n  type ModelDescriptor,\n  type ProviderAdapter,\n} from \"../../core/src/index.ts\";\nimport { z } from \"zod\";\nimport { baseModel } from \"./model.ts\";\nimport { openAiOptions } from \"./options.ts\";\nimport { fetchProviderJson, requireApiKey } from \"./shared.ts\";\n\nconst DEFAULT_ENDPOINT = \"https://api.openai.com/v1/models\";\nconst responseSchema = z.object({\n  data: z.array(\n    z\n      .object({\n        id: z.string(),\n        created: z.number().optional(),\n        owned_by: z.string().optional(),\n        shutdown_date: z.string().nullable().optional(),\n      })\n      .passthrough(),\n  ),\n});\n\n/** Discover OpenAI model identity, then add dated official option overlays. */\nexport const openAiAdapter: ProviderAdapter<\"openai\"> = {\n  id: \"openai\",\n  name: \"OpenAI\",\n  catalogEndpoint: DEFAULT_ENDPOINT,\n  requiresAuthentication: true,\n  async discover(context = {}) {\n    const apiKey = requireApiKey(context, \"OpenAI\");\n    const endpoint = context.baseUrl ?? DEFAULT_ENDPOINT;\n    const response = await fetchProviderJson(endpoint, context, {\n      Authorization: `Bearer ${apiKey}`,\n    });\n    const parsed = responseSchema.parse(response.value);\n    const source = { ...liveApiSource(endpoint, response.fetchedAt), scope: \"account\" as const };\n    const models = parsed.data.map((raw): ModelDescriptor<\"openai\"> => {\n      const kind = openAiModelKind(raw.id);\n      return {\n        ...baseModel({\n          provider: \"openai\",\n          id: raw.id,\n          name: raw.id,\n          source,\n          raw,\n          options: openAiOptions(raw.id),\n          kind,\n        }),\n        ...(raw.owned_by === undefined ? {} : { author: raw.owned_by }),\n        ...(raw.created === undefined\n          ? {}\n          : { releasedAt: new Date(raw.created * 1000).toISOString() }),\n        lifecycle:\n          raw.shutdown_date === undefined || raw.shutdown_date === null ? \"unknown\" : \"deprecated\",\n        interfaces: kind === \"language\" ? [\"openai-chat-completions\", \"openai-responses\"] : [],\n      };\n    });\n    return {\n      schemaVersion: 1,\n      provider: \"openai\",\n      fetchedAt: response.fetchedAt,\n      source,\n      models,\n    } satisfies ModelCatalog<\"openai\">;\n  },\n  mapOptions(model, values) {\n    return mapModelOptions(model, values);\n  },\n};\n\nfunction openAiModelKind(modelId: string): ModelDescriptor[\"kind\"] {\n  if (/^(?:text-embedding|embedding)/.test(modelId)) return \"embedding\";\n  if (/^(?:dall-e|gpt-image)/.test(modelId)) return \"image\";\n  if (/(?:transcribe|transcription|whisper|tts|audio)/.test(modelId)) return \"audio\";\n  if (/(?:realtime|moderation|search)(?:-|$)/.test(modelId)) return \"system\";\n  if (/^(?:gpt-|o[134](?:-|$)|chatgpt)/.test(modelId)) return \"language\";\n  return \"system\";\n}\n"},{"path":"source/packages/providers/src/openrouter.ts","content":"import {\n  capability,\n  liveApiSource,\n  mapModelOptions,\n  type ModelCatalog,\n  type ModelDescriptor,\n  type PriceRate,\n  type ProviderAdapter,\n} from \"../../core/src/index.ts\";\nimport { z } from \"zod\";\nimport { baseModel, mergeCapabilities, modalityCapabilities } from \"./model.ts\";\nimport { openRouterOptions } from \"./options.ts\";\nimport { fetchProviderJson } from \"./shared.ts\";\n\nconst DEFAULT_ENDPOINT = \"https://openrouter.ai/api/v1/models\";\n\nconst responseSchema = z.object({\n  data: z.array(\n    z\n      .object({\n        id: z.string(),\n        name: z.string().optional(),\n        description: z.string().optional(),\n        created: z.number().optional(),\n        context_length: z.number().optional(),\n        architecture: z\n          .object({\n            input_modalities: z.array(z.string()).optional(),\n            output_modalities: z.array(z.string()).optional(),\n          })\n          .passthrough()\n          .optional(),\n        pricing: z.record(z.string(), z.unknown()).optional(),\n        supported_parameters: z.array(z.string()).optional(),\n        reasoning: z\n          .object({\n            mandatory: z.boolean().optional(),\n            default_enabled: z.boolean().optional(),\n            supported_efforts: z.array(z.string()).nullable().optional(),\n            default_effort: z.string().nullable().optional(),\n            supports_max_tokens: z.boolean().optional(),\n          })\n          .passthrough()\n          .nullable()\n          .optional(),\n        top_provider: z.record(z.string(), z.unknown()).optional(),\n      })\n      .passthrough(),\n  ),\n});\n\n/** Discover the public OpenRouter catalog and its advertised parameter support. */\nexport const openRouterAdapter: ProviderAdapter<\"openrouter\"> = {\n  id: \"openrouter\",\n  name: \"OpenRouter\",\n  catalogEndpoint: withAllOutputModalities(DEFAULT_ENDPOINT),\n  requiresAuthentication: false,\n  async discover(context = {}) {\n    const endpoint = withAllOutputModalities(context.baseUrl ?? DEFAULT_ENDPOINT);\n    const response = await fetchProviderJson(endpoint, context);\n    const parsed = responseSchema.parse(response.value);\n    const source = { ...liveApiSource(endpoint, response.fetchedAt), scope: \"endpoint\" as const };\n    const models = parsed.data.map((raw): ModelDescriptor<\"openrouter\"> => {\n      const supported = raw.supported_parameters ?? [];\n      const model = baseModel({\n        provider: \"openrouter\",\n        id: raw.id,\n        name: raw.name ?? raw.id,\n        source,\n        raw,\n        kind: openRouterKind(raw.architecture?.output_modalities ?? []),\n        options: openRouterOptions(\n          raw.reasoning === undefined || raw.reasoning === null\n            ? undefined\n            : {\n                ...(raw.reasoning.mandatory === undefined\n                  ? {}\n                  : { mandatory: raw.reasoning.mandatory }),\n                ...(raw.reasoning.default_enabled === undefined\n                  ? {}\n                  : { defaultEnabled: raw.reasoning.default_enabled }),\n                ...(raw.reasoning.supported_efforts === undefined ||\n                raw.reasoning.supported_efforts === null\n                  ? {}\n                  : { supportedEfforts: raw.reasoning.supported_efforts }),\n                ...(raw.reasoning.default_effort === undefined ||\n                raw.reasoning.default_effort === null\n                  ? {}\n                  : { defaultEffort: raw.reasoning.default_effort }),\n                ...(raw.reasoning.supports_max_tokens === undefined\n                  ? {}\n                  : { supportsMaxTokens: raw.reasoning.supports_max_tokens }),\n              },\n        ),\n      });\n      const supports = (name: string) => supported.includes(name);\n      return {\n        ...model,\n        author: raw.id.split(\"/\")[0] ?? \"openrouter\",\n        ...(raw.description === undefined ? {} : { description: raw.description }),\n        ...(raw.created === undefined\n          ? {}\n          : { releasedAt: new Date(raw.created * 1000).toISOString() }),\n        ...(raw.context_length === undefined\n          ? {}\n          : {\n              contextWindow: {\n                value: raw.context_length,\n                confidence: \"provider-confirmed\" as const,\n                sources: [source],\n              },\n            }),\n        capabilities: mergeCapabilities(model.capabilities, {\n          input: modalityCapabilities(raw.architecture?.input_modalities ?? [], source),\n          output: modalityCapabilities(raw.architecture?.output_modalities ?? [], source),\n          reasoning: capability(raw.reasoning === undefined ? \"unknown\" : \"supported\", [source]),\n          tools: capability(supports(\"tools\") ? \"supported\" : \"unknown\", [source]),\n          structuredOutput: capability(\n            supports(\"structured_outputs\") || supports(\"response_format\") ? \"supported\" : \"unknown\",\n            [source],\n          ),\n          promptCaching: capability(\n            raw.pricing?.input_cache_read === undefined ? \"unknown\" : \"supported\",\n            [source],\n          ),\n        }),\n        interfaces: model.kind === \"language\" ? [\"openai-chat-completions\"] : [],\n        prices: openRouterPrices(raw.pricing, source),\n        routes: [],\n      };\n    });\n    return {\n      schemaVersion: 1,\n      provider: \"openrouter\",\n      fetchedAt: response.fetchedAt,\n      source,\n      models,\n    } satisfies ModelCatalog<\"openrouter\">;\n  },\n  mapOptions(model, values) {\n    return mapModelOptions(model, values);\n  },\n};\n\nfunction openRouterKind(outputModalities: readonly string[]): ModelDescriptor[\"kind\"] {\n  if (outputModalities.includes(\"text\")) {\n    return \"language\";\n  }\n  for (const kind of [\"image\", \"audio\", \"video\"] as const) {\n    if (outputModalities.includes(kind)) {\n      return kind;\n    }\n  }\n  if (outputModalities.includes(\"embeddings\")) {\n    return \"embedding\";\n  }\n  return \"system\";\n}\n\nfunction withAllOutputModalities(endpoint: string): string {\n  const url = new URL(endpoint);\n  url.searchParams.set(\"output_modalities\", \"all\");\n  return url.toString();\n}\n\nfunction openRouterPrices(\n  pricing: Record<string, unknown> | undefined,\n  source: ReturnType<typeof liveApiSource>,\n): readonly PriceRate[] {\n  if (pricing === undefined) {\n    return [];\n  }\n  const fields: ReadonlyArray<readonly [string, PriceRate[\"unit\"]]> = [\n    [\"prompt\", \"input-token\"],\n    [\"completion\", \"output-token\"],\n    [\"input_cache_read\", \"cache-read-token\"],\n    [\"input_cache_write\", \"cache-write-token\"],\n    [\"image\", \"image\"],\n    [\"request\", \"request\"],\n  ];\n  return fields.flatMap(([field, unit]) => {\n    const usd = pricing[field];\n    return typeof usd !== \"string\" || !/^\\d+(?:\\.\\d+)?$/.test(usd)\n      ? []\n      : [{ unit, usd, per: 1, evidence: [source] }];\n  });\n}\n"},{"path":"source/packages/providers/src/options.ts","content":"import {\n  capability,\n  defineOptions,\n  type OptionDefinition,\n  type SelectionConstraint,\n  type SourceReference,\n} from \"../../core/src/index.ts\";\nimport { docsSource } from \"./shared.ts\";\n\nconst OPENAI_RESPONSES = docsSource(\n  \"https://developers.openai.com/api/reference/resources/responses/methods/create\",\n  \"provider\",\n);\nconst ANTHROPIC_EFFORT = docsSource(\n  \"https://platform.claude.com/docs/en/build-with-claude/effort\",\n  \"provider\",\n);\nconst ANTHROPIC_THINKING = docsSource(\n  \"https://platform.claude.com/docs/en/build-with-claude/extended-thinking\",\n  \"provider\",\n);\nconst ANTHROPIC_FAST = docsSource(\n  \"https://platform.claude.com/docs/en/build-with-claude/fast-mode\",\n  \"model\",\n);\nconst ANTHROPIC_CACHE = docsSource(\n  \"https://platform.claude.com/docs/en/build-with-claude/prompt-caching\",\n  \"provider\",\n);\nconst ANTHROPIC_BETA = docsSource(\n  \"https://platform.claude.com/docs/en/api/beta-headers\",\n  \"provider\",\n);\nconst GOOGLE_THINKING = docsSource(\n  \"https://ai.google.dev/gemini-api/docs/generate-content/thinking?hl=en\",\n  \"model\",\n);\nconst GOOGLE_TIERS = docsSource(\n  \"https://ai.google.dev/gemini-api/docs/optimization?hl=en\",\n  \"provider\",\n);\nconst OPENROUTER_REASONING = docsSource(\n  \"https://openrouter.ai/docs/guides/best-practices/reasoning-tokens\",\n  \"endpoint\",\n);\nconst VERCEL_OPTIONS = docsSource(\n  \"https://vercel.com/docs/ai-gateway/models-and-providers/provider-options\",\n  \"endpoint\",\n);\n\n/** Current documented OpenAI request controls for recognized reasoning families. */\nexport function openAiOptions(modelId: string): readonly OptionDefinition[] {\n  if (!/^(?:gpt-5|o[134])/.test(modelId)) {\n    return [];\n  }\n  const efforts = modelId.startsWith(\"gpt-5.6\")\n    ? ([\"none\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"] as const)\n    : ([\"none\", \"low\", \"medium\", \"high\", \"xhigh\"] as const);\n  return defineOptions([\n    {\n      key: \"reasoning.effort\",\n      kind: \"enum\",\n      label: \"Reasoning effort\",\n      description: \"Controls how much work the model performs before answering.\",\n      group: \"reasoning\",\n      support: capability(\"supported\", [OPENAI_RESPONSES]),\n      values: efforts,\n      target: { kind: \"provider-option\", namespace: \"openai\", path: [\"reasoningEffort\"] },\n    },\n    {\n      key: \"service.tier\",\n      kind: \"enum\",\n      label: \"Service tier\",\n      description: \"Chooses standard, lower-cost flex, or faster processing when available.\",\n      group: \"routing\",\n      support: capability(\n        \"supported\",\n        [OPENAI_RESPONSES],\n        \"Account and model entitlement can narrow these values.\",\n      ),\n      values: [\"auto\", \"default\", \"flex\", \"fast\", \"priority\"] as const,\n      target: { kind: \"provider-option\", namespace: \"openai\", path: [\"serviceTier\"] },\n    },\n  ] as const);\n}\n\n/** Current Anthropic controls, narrowed by live model capabilities when provided. */\nexport function anthropicOptions(\n  modelId: string,\n  capabilities?: Record<string, unknown>,\n): readonly OptionDefinition[] {\n  const isDocumentedFamily = /claude-(?:fable|haiku|mythos|opus|sonnet)-(?:4-[5-9]|5)/.test(\n    modelId,\n  );\n  if (!isDocumentedFamily && capabilities === undefined) {\n    return [];\n  }\n  const effortValues =\n    capabilities === undefined\n      ? documentedAnthropicEffort(modelId)\n      : supportedCapabilityKeys(capabilities[\"effort\"] ?? capabilities[\"reasoning_effort\"], [\n          \"low\",\n          \"medium\",\n          \"high\",\n          \"xhigh\",\n          \"max\",\n        ]);\n  const thinkingModes =\n    capabilities === undefined\n      ? documentedAnthropicThinking(modelId)\n      : supportedCapabilityKeys(asRecord(capabilities[\"thinking\"])?.[\"types\"], [\n          \"adaptive\",\n          \"enabled\",\n        ]).filter((mode) => documentedAnthropicThinking(modelId).includes(mode));\n  const canDisable = !/(?:fable-5|mythos-5|mythos-preview)/.test(modelId);\n  const options: OptionDefinition[] = [];\n  if (effortValues.length > 0) {\n    options.push({\n      key: \"reasoning.effort\",\n      kind: \"enum\",\n      label: \"Effort\",\n      description: \"Controls total response work, including thinking and tool calls.\",\n      group: \"reasoning\",\n      support: capability(\"supported\", [ANTHROPIC_EFFORT]),\n      values: effortValues,\n      target: { kind: \"provider-option\", namespace: \"anthropic\", path: [\"effort\"] },\n    });\n  }\n  if (thinkingModes.length > 0) {\n    options.push({\n      key: \"reasoning.mode\",\n      kind: \"enum\",\n      label: \"Thinking\",\n      description: \"Uses only the thinking modes supported by this model.\",\n      group: \"reasoning\",\n      support: capability(\"supported\", [ANTHROPIC_THINKING]),\n      values: [...thinkingModes, ...(canDisable ? [\"disabled\"] : [])],\n    });\n  }\n  if (thinkingModes.includes(\"enabled\")) {\n    options.push({\n      key: \"reasoning.budgetTokens\",\n      kind: \"integer\",\n      label: \"Thinking budget\",\n      description: \"Maximum thinking tokens for manual extended thinking.\",\n      group: \"reasoning\",\n      support: capability(\"supported\", [ANTHROPIC_THINKING]),\n      min: 1024,\n      step: 1024,\n      visibleWhen: { key: \"reasoning.mode\", equals: \"enabled\" },\n    });\n  }\n  if (isDocumentedFamily || capabilities !== undefined) {\n    options.push({\n      key: \"caching.ttl\",\n      kind: \"enum\",\n      label: \"Cache lifetime\",\n      description: \"Marks content for Anthropic's ephemeral prompt cache.\",\n      group: \"caching\",\n      support: capability(\"supported\", [ANTHROPIC_CACHE]),\n      values: [\"5m\", \"1h\"],\n      target: { kind: \"provider-option\", namespace: \"anthropic\", path: [\"cacheControl\", \"ttl\"] },\n    });\n    options.push({\n      key: \"beta.features\",\n      kind: \"string-list\",\n      label: \"Beta features\",\n      description: \"Advanced opt-ins that can change request or response contracts.\",\n      group: \"beta\",\n      support: capability(\"supported\", [ANTHROPIC_BETA]),\n      suggestions: isAnthropicFastModel(modelId) ? [\"fast-mode-2026-02-01\"] : [],\n      target: { kind: \"provider-option\", namespace: \"anthropic\", path: [\"anthropicBeta\"] },\n    });\n  }\n  if (isAnthropicFastModel(modelId)) {\n    options.push({\n      key: \"speed.mode\",\n      kind: \"enum\",\n      label: \"Speed\",\n      description: \"Requests Anthropic fast mode when the account has access.\",\n      group: \"speed\",\n      support: capability(\n        \"supported\",\n        [ANTHROPIC_FAST],\n        \"Requires account access and a beta contract.\",\n      ),\n      values: [\"standard\", \"fast\"],\n      target: { kind: \"provider-option\", namespace: \"anthropic\", path: [\"speed\"] },\n    });\n  }\n  return options;\n}\n\nfunction documentedAnthropicEffort(modelId: string): readonly string[] {\n  const values = [\"low\", \"medium\", \"high\"];\n  if (/(?:fable-5|mythos-(?:5|preview)|opus-(?:5|4-[678])|sonnet-(?:5|4-6))/.test(modelId)) {\n    values.push(\"max\");\n  }\n  if (/(?:fable-5|mythos-5|opus-(?:5|4-[78])|sonnet-5)/.test(modelId)) {\n    values.splice(3, 0, \"xhigh\");\n  }\n  return values;\n}\n\nfunction documentedAnthropicThinking(modelId: string): readonly string[] {\n  return /(?:fable-5|mythos|opus-(?:5|4-[678])|sonnet-(?:5|4-6))/.test(modelId)\n    ? [\"adaptive\"]\n    : [\"enabled\"];\n}\n\nfunction isAnthropicFastModel(modelId: string): boolean {\n  return /claude-opus-(?:5|4-8)(?:$|-)/.test(modelId);\n}\n\nfunction supportedCapabilityKeys(value: unknown, keys: readonly string[]): readonly string[] {\n  const record = asRecord(value);\n  return record === undefined\n    ? []\n    : keys.filter((key) => asRecord(record[key])?.[\"supported\"] === true);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : undefined;\n}\n\n/** Cross-field rules for Anthropic thinking controls. */\nexport function anthropicConstraints(modelId: string): readonly SelectionConstraint[] {\n  if (\n    !/claude-(?:fable|haiku|opus|sonnet)-(?:4-[5-9]|5)/.test(modelId) ||\n    /(?:sonnet-4-6|opus-4-[678]|opus-5|sonnet-5|fable-5|mythos)/.test(modelId)\n  ) {\n    return [];\n  }\n  return [\n    {\n      kind: \"requires\",\n      when: { key: \"reasoning.mode\", equals: \"enabled\" },\n      key: \"reasoning.budgetTokens\",\n      message: \"Manual thinking requires a token budget.\",\n    },\n  ];\n}\n\n/** Current documented Google reasoning and service-tier controls. */\nexport function googleOptions(modelId: string): readonly OptionDefinition[] {\n  const options: OptionDefinition[] = [];\n  const levels = googleThinkingLevels(modelId);\n  if (levels.length > 0) {\n    options.push({\n      key: \"reasoning.level\",\n      kind: \"enum\",\n      label: \"Thinking level\",\n      description: \"Balances latency and reasoning depth for Gemini 3 models.\",\n      group: \"reasoning\",\n      support: capability(\"supported\", [GOOGLE_THINKING]),\n      values: levels,\n      target: {\n        kind: \"provider-option\",\n        namespace: \"google\",\n        path: [\"thinkingConfig\", \"thinkingLevel\"],\n      },\n    });\n  } else {\n    const range = googleThinkingBudgetRange(modelId);\n    if (range !== undefined) {\n      options.push({\n        key: \"reasoning.budgetTokens\",\n        kind: \"integer\",\n        label: \"Thinking budget\",\n        description: \"Guides the number of thinking tokens for Gemini 2.5 models.\",\n        group: \"reasoning\",\n        support: capability(\"supported\", [GOOGLE_THINKING]),\n        min: range.min,\n        max: range.max,\n        step: 1,\n        target: {\n          kind: \"provider-option\",\n          namespace: \"google\",\n          path: [\"thinkingConfig\", \"thinkingBudget\"],\n        },\n      });\n    }\n  }\n  if (/^gemini-(?:3\\.[5-7]|3-)/.test(modelId)) {\n    options.push({\n      key: \"service.tier\",\n      kind: \"enum\",\n      label: \"Service tier\",\n      description: \"Chooses standard, lower-cost flex, or priority inference.\",\n      group: \"routing\",\n      support: capability(\n        \"supported\",\n        [GOOGLE_TIERS],\n        \"Availability depends on API surface and account.\",\n      ),\n      values: [\"standard\", \"flex\", \"priority\"],\n      target: { kind: \"provider-option\", namespace: \"google\", path: [\"serviceTier\"] },\n    });\n  }\n  return options;\n}\n\nfunction googleThinkingLevels(modelId: string): readonly string[] {\n  if (modelId.startsWith(\"gemini-3.7-flash\")) return [\"low\", \"medium\", \"high\"];\n  if (/^gemini-3\\.(?:6|5)-flash(?!-lite)/.test(modelId)) {\n    return [\"minimal\", \"low\", \"medium\", \"high\"];\n  }\n  if (modelId.startsWith(\"gemini-3.1-pro\")) return [\"low\", \"medium\", \"high\"];\n  if (/^gemini-3\\.(?:5|1)-flash-lite(?!-image)/.test(modelId)) {\n    return [\"minimal\", \"low\", \"medium\", \"high\"];\n  }\n  if (modelId.startsWith(\"gemini-3.1-flash-lite-image\")) return [\"minimal\", \"high\"];\n  if (modelId.startsWith(\"gemini-3-flash\")) return [\"minimal\", \"low\", \"medium\", \"high\"];\n  if (modelId.startsWith(\"gemini-3-pro\")) return [\"low\", \"high\"];\n  return [];\n}\n\nfunction googleThinkingBudgetRange(\n  modelId: string,\n): { readonly min: number; readonly max: number } | undefined {\n  if (modelId.startsWith(\"gemini-2.5-pro\")) return { min: 128, max: 32_768 };\n  if (modelId.startsWith(\"gemini-2.5-flash-lite\")) return { min: 512, max: 24_576 };\n  if (modelId.startsWith(\"gemini-2.5-flash\")) return { min: 0, max: 24_576 };\n  return undefined;\n}\n\n/** Live reasoning metadata returned by OpenRouter's model catalog. */\nexport interface OpenRouterReasoningMetadata {\n  readonly mandatory?: boolean;\n  readonly defaultEnabled?: boolean;\n  readonly supportedEfforts?: readonly string[];\n  readonly defaultEffort?: string;\n  readonly supportsMaxTokens?: boolean;\n}\n\n/** OpenRouter controls derived from the exact live reasoning metadata. */\nexport function openRouterOptions(\n  reasoning: OpenRouterReasoningMetadata | undefined,\n): readonly OptionDefinition[] {\n  if (reasoning === undefined) {\n    return [];\n  }\n  const options: OptionDefinition[] = [];\n  if (reasoning.mandatory !== true) {\n    options.push({\n      key: \"reasoning.enabled\",\n      kind: \"boolean\",\n      label: \"Reasoning\",\n      description: \"Enables reasoning with the model's default settings.\",\n      group: \"reasoning\",\n      support: capability(\"supported\", [OPENROUTER_REASONING]),\n      ...(reasoning.defaultEnabled === undefined ? {} : { defaultValue: reasoning.defaultEnabled }),\n      target: { kind: \"request-option\", path: [\"reasoning\", \"enabled\"] },\n    });\n  }\n  const efforts = (reasoning.supportedEfforts ?? []).filter(\n    (effort) => reasoning.mandatory !== true || effort !== \"none\",\n  );\n  if (efforts.length > 0) {\n    options.push({\n      key: \"reasoning.effort\",\n      kind: \"enum\",\n      label: \"Reasoning effort\",\n      description: \"Uses only the effort levels advertised for this model.\",\n      group: \"reasoning\",\n      support: capability(\"supported\", [OPENROUTER_REASONING]),\n      values: efforts,\n      ...(reasoning.defaultEffort === undefined || !efforts.includes(reasoning.defaultEffort)\n        ? {}\n        : { defaultValue: reasoning.defaultEffort }),\n      target: { kind: \"request-option\", path: [\"reasoning\", \"effort\"] },\n    });\n  }\n  if (reasoning.supportsMaxTokens === true) {\n    options.push({\n      key: \"reasoning.maxTokens\",\n      kind: \"integer\",\n      label: \"Reasoning token budget\",\n      description: \"Sets the maximum reasoning tokens when this model supports a direct budget.\",\n      group: \"reasoning\",\n      support: capability(\"supported\", [OPENROUTER_REASONING]),\n      min: 1,\n      step: 1,\n      target: { kind: \"request-option\", path: [\"reasoning\", \"max_tokens\"] },\n    });\n  }\n  options.push({\n    key: \"reasoning.exclude\",\n    kind: \"boolean\",\n    label: \"Hide reasoning output\",\n    description: \"Keeps reasoning active but excludes its trace from the response.\",\n    group: \"reasoning\",\n    support: capability(\"supported\", [OPENROUTER_REASONING]),\n    target: { kind: \"request-option\", path: [\"reasoning\", \"exclude\"] },\n  });\n  return options;\n}\n\n/** Vercel Gateway controls that are independent of the upstream model provider. */\nexport function vercelGatewayOptions(): readonly OptionDefinition[] {\n  return defineOptions([\n    {\n      key: \"caching.auto\",\n      kind: \"boolean\",\n      label: \"Automatic caching\",\n      description: \"Lets AI Gateway apply provider-appropriate cache markers.\",\n      group: \"caching\",\n      support: capability(\"supported\", [VERCEL_OPTIONS]),\n    },\n  ] as const);\n}\n\n/** Sources used by generated option overlays. */\nexport function optionSources(): readonly SourceReference[] {\n  return [\n    OPENAI_RESPONSES,\n    ANTHROPIC_EFFORT,\n    ANTHROPIC_THINKING,\n    ANTHROPIC_FAST,\n    ANTHROPIC_CACHE,\n    ANTHROPIC_BETA,\n    GOOGLE_THINKING,\n    GOOGLE_TIERS,\n    OPENROUTER_REASONING,\n    VERCEL_OPTIONS,\n  ];\n}\n"},{"path":"source/packages/providers/src/shared.ts","content":"import type { DiscoveryContext, SourceReference } from \"../../core/src/index.ts\";\n\n/** A safe provider discovery failure with the response status when available. */\nexport class ProviderDiscoveryError extends Error {\n  readonly status?: number;\n\n  constructor(message: string, status?: number, options?: ErrorOptions) {\n    super(message, options);\n    this.name = \"ProviderDiscoveryError\";\n    if (status !== undefined) {\n      this.status = status;\n    }\n  }\n}\n\n/** Fetch and parse one provider response without exposing credentials in errors. */\nexport async function fetchProviderJson(\n  url: string,\n  context: DiscoveryContext,\n  headers: Readonly<Record<string, string>> = {},\n): Promise<{ readonly value: unknown; readonly fetchedAt: string }> {\n  const fetchImplementation = context.fetch ?? globalThis.fetch;\n  let response: Response;\n  try {\n    response = await fetchImplementation(url, {\n      headers,\n      ...(context.signal === undefined ? {} : { signal: context.signal }),\n    });\n  } catch {\n    throw new ProviderDiscoveryError(\"The provider catalog could not be reached.\");\n  }\n\n  if (!response.ok) {\n    throw new ProviderDiscoveryError(\n      `The provider catalog returned HTTP ${response.status}.`,\n      response.status,\n    );\n  }\n\n  try {\n    return { value: await response.json(), fetchedAt: new Date().toISOString() };\n  } catch {\n    throw new ProviderDiscoveryError(\n      \"The provider catalog returned invalid JSON.\",\n      response.status,\n    );\n  }\n}\n\n/** Require a server-side provider credential for authenticated discovery. */\nexport function requireApiKey(context: DiscoveryContext, providerName: string): string {\n  if (context.apiKey === undefined || context.apiKey.length === 0) {\n    throw new ProviderDiscoveryError(\n      `${providerName} model discovery requires a server-side API key.`,\n    );\n  }\n  return context.apiKey;\n}\n\n/** Create a dated official-document source. */\nexport function docsSource(\n  url: string,\n  scope: SourceReference[\"scope\"] = \"provider\",\n): SourceReference {\n  return {\n    kind: \"provider-docs\",\n    url,\n    retrievedAt: \"2026-08-31T00:00:00.000Z\",\n    scope,\n  };\n}\n"},{"path":"source/packages/providers/src/vercel.ts","content":"import {\n  capability,\n  liveApiSource,\n  mapModelOptions,\n  type MappedModelOptions,\n  type ModelCatalog,\n  type ModelDescriptor,\n  type OptionDefinition,\n  type PriceRate,\n  type ProviderAdapter,\n} from \"../../core/src/index.ts\";\nimport { z } from \"zod\";\nimport { baseModel, mergeCapabilities, modalityCapabilities } from \"./model.ts\";\nimport {\n  anthropicConstraints,\n  anthropicOptions,\n  googleOptions,\n  openAiOptions,\n  vercelGatewayOptions,\n} from \"./options.ts\";\nimport { fetchProviderJson } from \"./shared.ts\";\n\nconst DEFAULT_ENDPOINT = \"https://ai-gateway.vercel.sh/v1/models\";\n\nconst responseSchema = z.object({\n  data: z.array(\n    z\n      .object({\n        id: z.string(),\n        name: z.string().optional(),\n        description: z.string().optional(),\n        created: z.number().optional(),\n        released: z.number().optional(),\n        owned_by: z.string().optional(),\n        context_window: z.number().optional(),\n        max_tokens: z.number().optional(),\n        type: z.string().optional(),\n        tags: z.array(z.string()).optional(),\n        supported_parameters: z.array(z.string()).optional(),\n        modalities: z\n          .object({\n            input: z.array(z.string()).optional(),\n            output: z.array(z.string()).optional(),\n          })\n          .passthrough()\n          .optional(),\n        reasoning_options: z\n          .array(\n            z\n              .object({\n                type: z.string(),\n                values: z.array(z.string()).optional(),\n                min: z.number().optional(),\n                max: z.number().optional(),\n              })\n              .passthrough(),\n          )\n          .optional(),\n        pricing: z.record(z.string(), z.unknown()).optional(),\n        endpoints: z\n          .array(\n            z\n              .object({\n                name: z.string(),\n                provider_name: z.string().optional(),\n                pricing: z.record(z.string(), z.unknown()).optional(),\n                status: z.number().optional(),\n              })\n              .passthrough(),\n          )\n          .optional(),\n      })\n      .passthrough(),\n  ),\n});\n\n/** Discover Vercel AI Gateway's public catalog with capabilities and prices. */\nexport const vercelGatewayAdapter: ProviderAdapter<\"vercel\"> = {\n  id: \"vercel\",\n  name: \"Vercel AI Gateway\",\n  catalogEndpoint: DEFAULT_ENDPOINT,\n  requiresAuthentication: false,\n  async discover(context = {}) {\n    const endpoint = context.baseUrl ?? DEFAULT_ENDPOINT;\n    const response = await fetchProviderJson(endpoint, context);\n    const parsed = responseSchema.parse(response.value);\n    const source = { ...liveApiSource(endpoint, response.fetchedAt), scope: \"endpoint\" as const };\n    const models = parsed.data.map((raw): ModelDescriptor<\"vercel\"> => {\n      const tags = raw.tags ?? [];\n      const [upstream = \"\", ...modelParts] = raw.id.split(\"/\");\n      const upstreamId = modelParts.join(\"/\");\n      const liveReasoningOptions = vercelReasoningOptions(raw.reasoning_options, source);\n      const options = mergeOptions(\n        [\n          ...vercelGatewayOptions(),\n          ...upstreamOptions(upstream, upstreamId).filter(\n            (option) => ![\"speed.mode\", \"service.tier\"].includes(option.key),\n          ),\n          ...vercelSpeedOptions(raw, source),\n        ],\n        liveReasoningOptions,\n      );\n      const model = baseModel({\n        provider: \"vercel\",\n        id: raw.id,\n        name: raw.name ?? raw.id,\n        kind: modelKind(raw.type),\n        source,\n        raw,\n        options,\n      });\n      const prices = vercelPrices(raw.pricing, source);\n      const supported = raw.supported_parameters ?? [];\n      const supports = (name: string) => supported.includes(name);\n      return {\n        ...model,\n        ...(raw.description === undefined ? {} : { description: raw.description }),\n        ...(raw.owned_by === undefined ? {} : { author: raw.owned_by }),\n        ...(raw.released === undefined\n          ? {}\n          : { releasedAt: new Date(raw.released * 1000).toISOString() }),\n        ...(raw.context_window === undefined\n          ? {}\n          : {\n              contextWindow: {\n                value: raw.context_window,\n                confidence: \"provider-confirmed\" as const,\n                sources: [source],\n              },\n            }),\n        ...(raw.max_tokens === undefined\n          ? {}\n          : {\n              maxOutputTokens: {\n                value: raw.max_tokens,\n                confidence: \"provider-confirmed\" as const,\n                sources: [source],\n              },\n            }),\n        capabilities: mergeCapabilities(model.capabilities, {\n          input: modalityCapabilities(raw.modalities?.input ?? [], source),\n          output: modalityCapabilities(raw.modalities?.output ?? [], source),\n          reasoning: capability(\n            liveReasoningOptions.length > 0 || supports(\"reasoning\") ? \"supported\" : \"unknown\",\n            [source],\n          ),\n          tools: capability(\n            supports(\"tools\") || tags.includes(\"tool-use\") ? \"supported\" : \"unknown\",\n            [source],\n          ),\n          structuredOutput: capability(\n            supports(\"structured_outputs\") || tags.includes(\"structured-output\")\n              ? \"supported\"\n              : \"unknown\",\n            [source],\n          ),\n          promptCaching: capability(\n            raw.pricing?.input_cache_read === undefined ? \"unknown\" : \"supported\",\n            [source],\n          ),\n        }),\n        interfaces:\n          model.kind === \"language\" ? [\"openai-chat-completions\", \"openai-responses\"] : [],\n        prices,\n        routes: (raw.endpoints ?? []).map((route) => ({\n          id: route.name,\n          ...(route.provider_name === undefined ? {} : { provider: route.provider_name }),\n          prices: vercelPrices(route.pricing, source),\n          sources: [source],\n          raw: route,\n        })),\n        ...(upstreamConstraints(upstream, upstreamId).length === 0\n          ? {}\n          : { constraints: upstreamConstraints(upstream, upstreamId) }),\n      };\n    });\n    return {\n      schemaVersion: 1,\n      provider: \"vercel\",\n      fetchedAt: response.fetchedAt,\n      source,\n      models,\n    } satisfies ModelCatalog<\"vercel\">;\n  },\n  mapOptions(model, values) {\n    const mapped = mapModelOptions(model, values);\n    const autoCaching = values[\"caching.auto\"];\n    const gateway = { ...(mapped.providerOptions.gateway as Record<string, unknown> | undefined) };\n    const speed = values[\"speed.mode\"];\n    if (speed === \"standard\" || speed === \"flex\" || speed === \"priority\") {\n      delete gateway.speed;\n      if (speed !== \"standard\") gateway.serviceTier = speed;\n    }\n    const normalized = { ...mapped.providerOptions, gateway };\n    const upstream = model.id.split(\"/\")[0];\n    const providerOptions =\n      upstream === \"anthropic\" ? mapAnthropicOptions(normalized, values) : normalized;\n    return {\n      ...mapped,\n      providerOptions:\n        autoCaching === true\n          ? mergeNested(providerOptions, { gateway: { caching: \"auto\" } })\n          : providerOptions,\n      warnings:\n        upstream === \"anthropic\"\n          ? mapped.warnings.filter(\n              (warning) =>\n                ![\"reasoning.mode\", \"reasoning.budgetTokens\"].some((key) =>\n                  warning.startsWith(`${key} `),\n                ),\n            )\n          : mapped.warnings,\n    } satisfies MappedModelOptions;\n  },\n};\n\nfunction vercelSpeedOptions(\n  raw: {\n    type?: string | undefined;\n    tags?: string[] | undefined;\n    pricing?: Record<string, unknown> | undefined;\n  },\n  source: ReturnType<typeof liveApiSource>,\n): readonly OptionDefinition[] {\n  if (raw.type !== \"language\") return [];\n  const tiers = raw.pricing?.service_tiers;\n  const values = [\"standard\"];\n  if (typeof tiers === \"object\" && tiers !== null && !Array.isArray(tiers)) {\n    for (const tier of [\"flex\", \"priority\"]) {\n      if (Object.hasOwn(tiers, tier)) values.push(tier);\n    }\n  }\n  if (raw.tags?.includes(\"fast\")) values.push(\"fast\");\n  if (values.length === 1) return [];\n  return [\n    {\n      key: \"speed.mode\",\n      kind: \"enum\",\n      label: \"Speed\",\n      group: \"speed\",\n      description:\n        \"Flex trades latency for lower cost; priority and fast cost more. Requested tiers depend on provider capacity.\",\n      support: capability(\"supported\", [source]),\n      values,\n      defaultValue: \"standard\",\n      target: { kind: \"provider-option\", namespace: \"gateway\", path: [\"speed\"] },\n    },\n  ];\n}\n\nfunction mergeOptions(\n  documented: readonly OptionDefinition[],\n  live: readonly OptionDefinition[],\n): readonly OptionDefinition[] {\n  const normalizedLive = live.filter(\n    (option) =>\n      option.key !== \"reasoning.enabled\" ||\n      !documented.some((candidate) => candidate.key === \"reasoning.mode\"),\n  );\n  const liveByKey = new Map(normalizedLive.map((option) => [option.key, option]));\n  return [\n    ...documented.map((option) => liveByKey.get(option.key) ?? option),\n    ...normalizedLive.filter(\n      (option) => !documented.some((candidate) => candidate.key === option.key),\n    ),\n  ];\n}\n\nfunction mapAnthropicOptions(\n  providerOptions: Readonly<Record<string, unknown>>,\n  values: Readonly<Record<string, unknown>>,\n): Readonly<Record<string, unknown>> {\n  const anthropic = {\n    ...(providerOptions.anthropic as Record<string, unknown> | undefined),\n  };\n  const mode = values[\"reasoning.mode\"];\n  if (mode === \"adaptive\" || mode === \"disabled\") {\n    anthropic.thinking = { type: mode };\n  } else if (mode === \"enabled\") {\n    anthropic.thinking = {\n      type: \"enabled\",\n      ...(typeof values[\"reasoning.budgetTokens\"] === \"number\"\n        ? { budgetTokens: values[\"reasoning.budgetTokens\"] }\n        : {}),\n    };\n  }\n  if (typeof values[\"caching.ttl\"] === \"string\") {\n    anthropic.cacheControl = { type: \"ephemeral\", ttl: values[\"caching.ttl\"] };\n  }\n  return { ...providerOptions, anthropic };\n}\n\nfunction upstreamOptions(provider: string, modelId: string): readonly OptionDefinition[] {\n  switch (provider) {\n    case \"anthropic\":\n      return anthropicOptions(modelId);\n    case \"google\":\n      return googleOptions(modelId);\n    case \"openai\":\n      return openAiOptions(modelId);\n    default:\n      return [];\n  }\n}\n\nfunction upstreamConstraints(\n  provider: string,\n  modelId: string,\n): NonNullable<ModelDescriptor[\"constraints\"]> {\n  return provider === \"anthropic\" ? anthropicConstraints(modelId) : [];\n}\n\nfunction vercelReasoningOptions(\n  values:\n    | readonly {\n        readonly type: string;\n        readonly values?: readonly string[] | undefined;\n        readonly min?: number | undefined;\n        readonly max?: number | undefined;\n      }[]\n    | undefined,\n  source: ReturnType<typeof liveApiSource>,\n): readonly OptionDefinition[] {\n  const options: OptionDefinition[] = [];\n  for (const value of values ?? []) {\n    if (value.type === \"toggle\") {\n      options.push({\n        key: \"reasoning.enabled\",\n        kind: \"boolean\",\n        label: \"Reasoning\",\n        description: \"Enables or disables reasoning for this model.\",\n        group: \"reasoning\",\n        support: capability(\"supported\", [source]),\n        target: { kind: \"request-option\", path: [\"reasoning\", \"enabled\"] },\n      });\n    } else if (value.type === \"effort\" && (value.values?.length ?? 0) > 0) {\n      options.push({\n        key: \"reasoning.effort\",\n        kind: \"enum\",\n        label: \"Reasoning effort\",\n        description: \"Uses only the effort levels advertised by AI Gateway.\",\n        group: \"reasoning\",\n        support: capability(\"supported\", [source]),\n        values: value.values ?? [],\n        target: { kind: \"request-option\", path: [\"reasoning\", \"effort\"] },\n      });\n    } else if (value.type === \"budget_tokens\") {\n      options.push({\n        key: \"reasoning.maxTokens\",\n        kind: \"integer\",\n        label: \"Reasoning token budget\",\n        description: \"Sets the reasoning token budget within the advertised limits.\",\n        group: \"reasoning\",\n        support: capability(\"supported\", [source]),\n        ...(value.min === undefined ? {} : { min: value.min }),\n        ...(value.max === undefined ? {} : { max: value.max }),\n        step: 1,\n        target: { kind: \"request-option\", path: [\"reasoning\", \"max_tokens\"] },\n      });\n    }\n  }\n  return options;\n}\n\nfunction modelKind(type: string | undefined): ModelDescriptor[\"kind\"] {\n  switch (type) {\n    case \"audio\":\n    case \"embedding\":\n    case \"image\":\n    case \"language\":\n    case \"video\":\n      return type;\n    default:\n      return \"system\";\n  }\n}\n\nfunction vercelPrices(\n  pricing: Record<string, unknown> | undefined,\n  source: ReturnType<typeof liveApiSource>,\n): readonly PriceRate[] {\n  if (pricing === undefined) {\n    return [];\n  }\n  const fields: ReadonlyArray<readonly [string, PriceRate[\"unit\"], number]> = [\n    [\"input\", \"input-token\", 1],\n    [\"output\", \"output-token\", 1],\n    [\"input_cache_read\", \"cache-read-token\", 1],\n    [\"input_cache_write\", \"cache-write-token\", 1],\n    [\"image\", \"image\", 1],\n    [\"web_search\", \"request\", 1_000],\n  ];\n  return fields.flatMap(([field, unit, per]) => {\n    const usd = pricing[field];\n    return typeof usd !== \"string\" || !/^\\d+(?:\\.\\d+)?$/.test(usd)\n      ? []\n      : [{ unit, usd, per, evidence: [source] }];\n  });\n}\n\nfunction mergeNested(\n  left: Readonly<Record<string, unknown>>,\n  right: Readonly<Record<string, unknown>>,\n): Readonly<Record<string, unknown>> {\n  const output: Record<string, unknown> = { ...left };\n  for (const [key, value] of Object.entries(right)) {\n    const existing = output[key];\n    output[key] =\n      typeof existing === \"object\" &&\n      existing !== null &&\n      !Array.isArray(existing) &&\n      typeof value === \"object\" &&\n      value !== null &&\n      !Array.isArray(value)\n        ? mergeNested(existing as Record<string, unknown>, value as Record<string, unknown>)\n        : value;\n  }\n  return output;\n}\n"}]}