@agentproto/model-catalog 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +37 -0
  3. package/dist/access/index.d.ts +30 -0
  4. package/dist/access/index.mjs +4 -0
  5. package/dist/access/index.mjs.map +1 -0
  6. package/dist/audio/index.d.ts +84 -0
  7. package/dist/audio/index.mjs +3 -0
  8. package/dist/audio/index.mjs.map +1 -0
  9. package/dist/audio-BzVF_wke.d.ts +92 -0
  10. package/dist/base-BNHcMifc.d.ts +109 -0
  11. package/dist/byok/index.d.ts +33 -0
  12. package/dist/byok/index.mjs +3 -0
  13. package/dist/byok/index.mjs.map +1 -0
  14. package/dist/catalog-aQHd559b.d.ts +594 -0
  15. package/dist/chunk-2LWYZOWB.mjs +643 -0
  16. package/dist/chunk-2LWYZOWB.mjs.map +1 -0
  17. package/dist/chunk-CINXNTU3.mjs +134 -0
  18. package/dist/chunk-CINXNTU3.mjs.map +1 -0
  19. package/dist/chunk-F7OEHYUI.mjs +187 -0
  20. package/dist/chunk-F7OEHYUI.mjs.map +1 -0
  21. package/dist/chunk-GH7PB5FB.mjs +183 -0
  22. package/dist/chunk-GH7PB5FB.mjs.map +1 -0
  23. package/dist/chunk-H6JUTF3U.mjs +33 -0
  24. package/dist/chunk-H6JUTF3U.mjs.map +1 -0
  25. package/dist/chunk-HEDDSOZF.mjs +47 -0
  26. package/dist/chunk-HEDDSOZF.mjs.map +1 -0
  27. package/dist/chunk-HRRG2RZO.mjs +116 -0
  28. package/dist/chunk-HRRG2RZO.mjs.map +1 -0
  29. package/dist/chunk-IJZ4XPO2.mjs +606 -0
  30. package/dist/chunk-IJZ4XPO2.mjs.map +1 -0
  31. package/dist/chunk-IORIAFK2.mjs +227 -0
  32. package/dist/chunk-IORIAFK2.mjs.map +1 -0
  33. package/dist/chunk-OHAMH3ZE.mjs +2629 -0
  34. package/dist/chunk-OHAMH3ZE.mjs.map +1 -0
  35. package/dist/chunk-QHELXPSL.mjs +85 -0
  36. package/dist/chunk-QHELXPSL.mjs.map +1 -0
  37. package/dist/chunk-SGJR6ZQH.mjs +1230 -0
  38. package/dist/chunk-SGJR6ZQH.mjs.map +1 -0
  39. package/dist/chunk-WRUWNKDB.mjs +521 -0
  40. package/dist/chunk-WRUWNKDB.mjs.map +1 -0
  41. package/dist/chunk-WTHHXXIK.mjs +366 -0
  42. package/dist/chunk-WTHHXXIK.mjs.map +1 -0
  43. package/dist/chunk-XFDXTFV3.mjs +28 -0
  44. package/dist/chunk-XFDXTFV3.mjs.map +1 -0
  45. package/dist/cost/index.d.ts +114 -0
  46. package/dist/cost/index.mjs +13 -0
  47. package/dist/cost/index.mjs.map +1 -0
  48. package/dist/curation/index.d.ts +98 -0
  49. package/dist/curation/index.mjs +13 -0
  50. package/dist/curation/index.mjs.map +1 -0
  51. package/dist/evaluate-DisH3H7u.d.ts +84 -0
  52. package/dist/image/index.d.ts +79 -0
  53. package/dist/image/index.mjs +3 -0
  54. package/dist/image/index.mjs.map +1 -0
  55. package/dist/index-BICjPG8H.d.ts +132 -0
  56. package/dist/index-D8nL3fPZ.d.ts +171 -0
  57. package/dist/index.d.ts +94 -0
  58. package/dist/index.mjs +33 -0
  59. package/dist/index.mjs.map +1 -0
  60. package/dist/llm/index.d.ts +48 -0
  61. package/dist/llm/index.mjs +4 -0
  62. package/dist/llm/index.mjs.map +1 -0
  63. package/dist/overlay/index.d.ts +67 -0
  64. package/dist/overlay/index.mjs +3 -0
  65. package/dist/overlay/index.mjs.map +1 -0
  66. package/dist/picker/index.d.ts +11 -0
  67. package/dist/picker/index.mjs +26 -0
  68. package/dist/picker/index.mjs.map +1 -0
  69. package/dist/pricing/index.d.ts +106 -0
  70. package/dist/pricing/index.mjs +3 -0
  71. package/dist/pricing/index.mjs.map +1 -0
  72. package/dist/providers/index.d.ts +78 -0
  73. package/dist/providers/index.mjs +237 -0
  74. package/dist/providers/index.mjs.map +1 -0
  75. package/dist/schema/index.d.ts +627 -0
  76. package/dist/schema/index.mjs +4 -0
  77. package/dist/schema/index.mjs.map +1 -0
  78. package/dist/schema/voice.d.ts +66 -0
  79. package/dist/schema/voice.mjs +3 -0
  80. package/dist/schema/voice.mjs.map +1 -0
  81. package/dist/video/index.d.ts +78 -0
  82. package/dist/video/index.mjs +3 -0
  83. package/dist/video/index.mjs.map +1 -0
  84. package/dist/voice/index.d.ts +1300 -0
  85. package/dist/voice/index.mjs +4 -0
  86. package/dist/voice/index.mjs.map +1 -0
  87. package/package.json +137 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/image/catalog.ts"],"names":[],"mappings":"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","file":"chunk-2LWYZOWB.mjs","sourcesContent":["/**\n * Image Model Catalog — single source of truth for all image models.\n *\n * Migrated from `packages/integration/image/src/models/catalog.ts`. The\n * original location now re-exports from here so every existing consumer\n * (replicate-serializers, prompt blocks, an app UI) keeps working.\n *\n * Adding a model = 1 entry here + 1 serializer in\n * `packages/integration/image/src/providers/replicate/replicate-serializers.ts`.\n * Consumers import derived arrays (`AGENT_GENERATIVE_MODEL_IDS`, etc.)\n * instead of hardcoding model names.\n */\n\nexport interface ImageModelDefinition {\n id: string\n name: string\n /** Replicate model ID (e.g. \"google/nano-banana-pro\") */\n providerId: string\n provider: string\n capabilities: {\n generate: boolean\n edit: boolean\n upscale?: boolean\n }\n referenceImages: {\n supported: boolean\n /** Replicate input field name for reference images */\n fieldName: \"image_input\" | \"input_images\" | \"input_image\" | \"none\"\n maxCount: number\n /** true for models that accept a single URI string (not array) */\n singular: boolean\n }\n aspectRatio: {\n supported: string[]\n default: string\n }\n /** Response shape: \"string\" = single URI, \"array\" = array of URIs */\n output: \"string\" | \"array\"\n pricing: {\n /** @deprecated Use billingUnit + baseCost instead */\n costPerImage: number\n /** @deprecated Derived from baseCost */\n costTier: \"low\" | \"medium\" | \"high\"\n /** Always \"per_image\" for image models */\n billingUnit: \"per_image\"\n /** Our production cost in USD per image */\n baseCost: number\n /**\n * @deprecated Credits are derived at call time via\n * `computeCenticredits({ baseCostUsd, category: \"image\" })`. Field kept\n * optional for back-compat with existing entries; new entries\n * should omit it. Use `overrideCreditCost` for strategic opt-outs.\n */\n creditCost?: number\n /**\n * Bypass the markup formula and charge exactly this many credits\n * per image. Use sparingly — most pricing should flow through the\n * category markup so a global tune is one config change.\n */\n overrideCreditCost?: number\n }\n description: string\n /** When false, model exists but isn't exposed in agent prompts/zod enums */\n agentVisible: boolean\n /** Trigger word that must be included in the prompt to activate the fine-tune (e.g. \"TOK\") */\n triggerWord?: string\n}\n\nexport const IMAGE_MODEL_CATALOG: Record<string, ImageModelDefinition> = {\n // ─── Active agent-visible models ─────────────────────────────────────────\n\n \"nano-banana-pro\": {\n id: \"nano-banana-pro\",\n name: \"Nano Banana Pro\",\n providerId: \"google/nano-banana-pro\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: true },\n referenceImages: {\n supported: true,\n fieldName: \"image_input\",\n maxCount: 14,\n singular: false,\n },\n aspectRatio: {\n supported: [\n \"1:1\",\n \"9:16\",\n \"16:9\",\n \"2:3\",\n \"3:2\",\n \"3:4\",\n \"4:3\",\n \"4:5\",\n \"5:4\",\n \"21:9\",\n ],\n default: \"match_input_image\",\n },\n output: \"string\",\n pricing: {\n costPerImage: 0.15,\n costTier: \"high\",\n billingUnit: \"per_image\",\n baseCost: 0.15,\n creditCost: 10,\n },\n description: \"Best quality, excellent text rendering (Gemini Pro)\",\n agentVisible: true,\n },\n\n \"nano-banana-2\": {\n id: \"nano-banana-2\",\n name: \"Nano Banana 2\",\n providerId: \"google/nano-banana-2\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: true },\n referenceImages: {\n supported: true,\n fieldName: \"image_input\",\n maxCount: 4,\n singular: false,\n },\n aspectRatio: {\n supported: [\n \"1:1\",\n \"9:16\",\n \"16:9\",\n \"2:3\",\n \"3:2\",\n \"3:4\",\n \"4:3\",\n \"4:5\",\n \"5:4\",\n ],\n default: \"match_input_image\",\n },\n output: \"string\",\n pricing: {\n costPerImage: 0.06,\n costTier: \"medium\",\n billingUnit: \"per_image\",\n baseCost: 0.06,\n creditCost: 5,\n },\n description:\n \"Higher quality, supports up to 4K resolution (Gemini 2.5 Pro)\",\n agentVisible: true,\n },\n\n \"nano-banana\": {\n id: \"nano-banana\",\n name: \"Nano Banana\",\n providerId: \"google/nano-banana\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: true },\n referenceImages: {\n supported: true,\n fieldName: \"image_input\",\n maxCount: 4,\n singular: false,\n },\n aspectRatio: {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\"],\n default: \"match_input_image\",\n },\n output: \"string\",\n pricing: {\n costPerImage: 0.04,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.04,\n creditCost: 5,\n },\n description: \"Fast generation (Gemini Flash), good for bulk\",\n agentVisible: true,\n },\n\n \"flux-2-dev\": {\n id: \"flux-2-dev\",\n name: \"Flux 2 Dev\",\n providerId: \"black-forest-labs/flux-2-dev\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: true },\n referenceImages: {\n supported: true,\n fieldName: \"input_images\",\n maxCount: 5,\n singular: false,\n },\n aspectRatio: {\n supported: [\n \"1:1\",\n \"9:16\",\n \"16:9\",\n \"2:3\",\n \"3:2\",\n \"3:4\",\n \"4:3\",\n \"4:5\",\n \"5:4\",\n ],\n default: \"1:1\",\n },\n output: \"string\",\n pricing: {\n costPerImage: 0.03,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.03,\n creditCost: 3,\n },\n description: \"General purpose, fast, good quality\",\n agentVisible: true,\n },\n\n \"flux-kontext-pro\": {\n id: \"flux-kontext-pro\",\n name: \"Flux Kontext Pro\",\n providerId: \"black-forest-labs/flux-kontext-pro\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: true },\n referenceImages: {\n supported: true,\n fieldName: \"input_image\",\n maxCount: 1,\n singular: true,\n },\n aspectRatio: {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n },\n output: \"string\",\n pricing: {\n costPerImage: 0.04,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.04,\n creditCost: 5,\n },\n description: \"Character consistency with reference images (edit mode)\",\n agentVisible: true,\n },\n\n \"flux-kontext-max\": {\n id: \"flux-kontext-max\",\n name: \"Flux Kontext Max\",\n providerId: \"black-forest-labs/flux-kontext-max\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: true },\n referenceImages: {\n supported: true,\n fieldName: \"input_image\",\n maxCount: 1,\n singular: true,\n },\n aspectRatio: {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n },\n output: \"string\",\n pricing: {\n costPerImage: 0.08,\n costTier: \"medium\",\n billingUnit: \"per_image\",\n baseCost: 0.08,\n creditCost: 8,\n },\n description: \"Higher quality kontext editing\",\n agentVisible: true,\n },\n\n \"seedream-4\": {\n id: \"seedream-4\",\n name: \"SeedReam 4\",\n providerId: \"bytedance/seedream-4\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: true },\n referenceImages: {\n supported: true,\n fieldName: \"image_input\",\n maxCount: 10,\n singular: false,\n },\n aspectRatio: {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n },\n output: \"string\",\n pricing: {\n costPerImage: 0.03,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.03,\n creditCost: 3,\n },\n description: \"Photorealistic, good for landscapes\",\n agentVisible: true,\n },\n\n recraft: {\n id: \"recraft\",\n name: \"Recraft V3\",\n providerId: \"recraft-ai/recraft-v3\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: { supported: [\"1:1\"], default: \"1:1\" },\n output: \"string\",\n pricing: {\n costPerImage: 0.04,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.04,\n creditCost: 5,\n },\n description: \"Stylized illustrations and designs\",\n agentVisible: true,\n },\n\n minimax: {\n id: \"minimax\",\n name: \"MiniMax Image\",\n providerId: \"minimax/image-01\",\n provider: \"minimax\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n },\n output: \"array\",\n pricing: {\n costPerImage: 0.02,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.02,\n creditCost: 2,\n },\n description: \"Very fast, cheaper\",\n agentVisible: true,\n },\n\n \"avatar-001\": {\n id: \"avatar-001\",\n name: \"Avatar Model 001\",\n providerId: \"agentiknet/avatar-model-001\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: true },\n referenceImages: {\n supported: true,\n fieldName: \"image_input\",\n maxCount: 1,\n singular: true,\n },\n aspectRatio: {\n supported: [\n \"1:1\",\n \"16:9\",\n \"21:9\",\n \"3:2\",\n \"2:3\",\n \"4:5\",\n \"5:4\",\n \"3:4\",\n \"4:3\",\n \"9:16\",\n \"9:21\",\n ],\n default: \"1:1\",\n },\n output: \"array\",\n pricing: {\n costPerImage: 0.03,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.03,\n creditCost: 3,\n },\n description: \"Fine-tuned avatar model (trigger word: TOK)\",\n agentVisible: true,\n triggerWord: \"TOK\",\n },\n\n \"flux-1.1-pro-ultra\": {\n id: \"flux-1.1-pro-ultra\",\n name: \"Flux 1.1 Pro Ultra\",\n providerId: \"black-forest-labs/flux-1.1-pro-ultra\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"21:9\", \"9:21\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n },\n output: \"string\",\n pricing: {\n costPerImage: 0.06,\n costTier: \"medium\",\n billingUnit: \"per_image\",\n baseCost: 0.06,\n creditCost: 8,\n },\n description: \"Highest-fidelity Flux (4MP, photorealistic)\",\n agentVisible: true,\n },\n\n \"gpt-image-1\": {\n id: \"gpt-image-1\",\n name: \"OpenAI GPT Image 1\",\n providerId: \"openai/gpt-image-1\",\n provider: \"openai\",\n capabilities: { generate: true, edit: true },\n referenceImages: {\n supported: true,\n fieldName: \"input_image\",\n maxCount: 1,\n singular: true,\n },\n aspectRatio: {\n supported: [\"1:1\", \"2:3\", \"3:2\"],\n default: \"1:1\",\n },\n output: \"string\",\n pricing: {\n costPerImage: 0.04,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.04,\n creditCost: 5,\n },\n description: \"OpenAI native image gen (text-aware, edit-capable)\",\n agentVisible: true,\n },\n\n // ─── Google Imagen (native Gemini API, provider=\"google\") ────────────────\n // Source: https://ai.google.dev/gemini-api/docs/pricing (fetched 2026-05-29)\n // — Imagen 4: Fast $0.02/image, Standard $0.04/image, Ultra $0.06/image.\n // Native Gemini API (not replicate-hosted); text-to-image, no reference input.\n \"imagen-4-fast\": {\n id: \"imagen-4-fast\",\n name: \"Imagen 4 Fast\",\n providerId: \"imagen-4.0-fast-generate-001\",\n provider: \"google\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n },\n output: \"array\",\n pricing: {\n costPerImage: 0.02,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.02,\n },\n description: \"Google Imagen 4 fast tier — cheapest, lower latency\",\n agentVisible: true,\n },\n\n \"imagen-4\": {\n id: \"imagen-4\",\n name: \"Imagen 4\",\n providerId: \"imagen-4.0-generate-001\",\n provider: \"google\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n },\n output: \"array\",\n pricing: {\n costPerImage: 0.04,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.04,\n },\n description: \"Google Imagen 4 standard — photorealistic text-to-image\",\n agentVisible: true,\n },\n\n \"imagen-4-ultra\": {\n id: \"imagen-4-ultra\",\n name: \"Imagen 4 Ultra\",\n providerId: \"imagen-4.0-ultra-generate-001\",\n provider: \"google\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n },\n output: \"array\",\n pricing: {\n costPerImage: 0.06,\n costTier: \"medium\",\n billingUnit: \"per_image\",\n baseCost: 0.06,\n },\n description: \"Google Imagen 4 ultra — highest fidelity tier\",\n agentVisible: true,\n },\n\n \"ideogram-v3\": {\n id: \"ideogram-v3\",\n name: \"Ideogram v3\",\n providerId: \"ideogram-ai/ideogram-v3-turbo\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\"],\n default: \"1:1\",\n },\n output: \"string\",\n pricing: {\n costPerImage: 0.03,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.03,\n creditCost: 4,\n },\n description: \"Excellent text rendering, posters & infographics\",\n agentVisible: true,\n },\n\n // ─── Legacy / less-used — still functional but not exposed to agents ──────\n\n flux: {\n id: \"flux\",\n name: \"Flux 1.1 Pro\",\n providerId: \"black-forest-labs/flux-1.1-pro\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: { supported: [\"1:1\", \"9:16\", \"16:9\"], default: \"1:1\" },\n output: \"string\",\n pricing: {\n costPerImage: 0.04,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.04,\n creditCost: 5,\n },\n description: \"Legacy Flux model\",\n agentVisible: false,\n },\n\n sdxl: {\n id: \"sdxl\",\n name: \"SDXL\",\n providerId:\n \"stability-ai/sdxl:39ed52f2a78e934b3ba6e2a89f5b1c712de7dfea535525255b1aa35c5565e08b\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: { supported: [\"1:1\"], default: \"1:1\" },\n output: \"array\",\n pricing: {\n costPerImage: 0.01,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.01,\n creditCost: 1,\n },\n description: \"Stable Diffusion XL\",\n agentVisible: false,\n },\n\n sd3: {\n id: \"sd3\",\n name: \"SD3\",\n providerId:\n \"stability-ai/stable-diffusion-3:72c05df2daf615fb5cc07c28b662a2a58feb6a4d0a652e67e5a9959d914a9ed2\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: { supported: [\"1:1\", \"9:16\", \"16:9\"], default: \"1:1\" },\n output: \"array\",\n pricing: {\n costPerImage: 0.03,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.03,\n creditCost: 3,\n },\n description: \"Stable Diffusion 3\",\n agentVisible: false,\n },\n\n sana: {\n id: \"sana\",\n name: \"SANA\",\n providerId: \"nvidia/sana\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: { supported: [\"1:1\"], default: \"1:1\" },\n output: \"array\",\n pricing: {\n costPerImage: 0.02,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.02,\n creditCost: 2,\n },\n description: \"NVIDIA SANA model\",\n agentVisible: false,\n },\n\n sticker: {\n id: \"sticker\",\n name: \"Sticker Maker\",\n providerId:\n \"fofr/sticker-maker:58a7099052ed9928ee6a65559caa790bfa8909841261ef588686660189eb9dc8\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: { supported: [\"1:1\"], default: \"1:1\" },\n output: \"array\",\n pricing: {\n costPerImage: 0.01,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.01,\n creditCost: 1,\n },\n description: \"Sticker generation\",\n agentVisible: false,\n },\n\n selfie: {\n id: \"selfie\",\n name: \"Selfie Generator\",\n providerId:\n \"fofr/pulid-base:65ea75658bf120abbbdacab07e89e78a74a6a1b1f504349f4c4e3b01a655ee7a\",\n provider: \"replicate\",\n capabilities: { generate: true, edit: false },\n referenceImages: {\n supported: false,\n fieldName: \"none\",\n maxCount: 0,\n singular: false,\n },\n aspectRatio: { supported: [\"1:1\"], default: \"1:1\" },\n output: \"array\",\n pricing: {\n costPerImage: 0.02,\n costTier: \"low\",\n billingUnit: \"per_image\",\n baseCost: 0.02,\n creditCost: 2,\n },\n description: \"Face-driven selfie generation\",\n agentVisible: false,\n },\n}\n\n// ─── Derived arrays ────────────────────────────────────────────────────────\n\n/** All model IDs */\nexport const IMAGE_MODEL_IDS = Object.keys(IMAGE_MODEL_CATALOG) as [\n string,\n ...string[],\n]\n\n/** Only models visible to agents (for zod enums + prompts) */\nexport const AGENT_IMAGE_MODEL_IDS = Object.entries(IMAGE_MODEL_CATALOG)\n .filter(([, m]) => m.agentVisible)\n .map(([id]) => id) as [string, ...string[]]\n\n/** Agent-visible models supporting generation */\nexport const AGENT_GENERATIVE_MODEL_IDS = Object.entries(IMAGE_MODEL_CATALOG)\n .filter(([, m]) => m.agentVisible && m.capabilities.generate)\n .map(([id]) => id) as [string, ...string[]]\n\n/** Agent-visible models supporting editing */\nexport const AGENT_EDITABLE_MODEL_IDS = Object.entries(IMAGE_MODEL_CATALOG)\n .filter(([, m]) => m.agentVisible && m.capabilities.edit)\n .map(([id]) => id) as [string, ...string[]]\n\n/** Generate a markdown table of agent-visible image models for prompt blocks */\nexport function generateImageModelTable(): string {\n return Object.values(IMAGE_MODEL_CATALOG)\n .filter(m => m.agentVisible)\n .map(m => {\n const trigger = m.triggerWord\n ? ` ⚠️ Trigger word: \\`${m.triggerWord}\\``\n : \"\"\n return `| \\`${m.id}\\` | ~$${m.pricing.costPerImage} | ${m.description}${trigger} |`\n })\n .join(\"\\n\")\n}\n"]}
@@ -0,0 +1,134 @@
1
+ import { listModels } from './chunk-GH7PB5FB.mjs';
2
+ import { modelHasTag } from './chunk-WTHHXXIK.mjs';
3
+
4
+ /**
5
+ * @agentproto/model-catalog v0.1.0
6
+ * Unified model catalog: LLM, image, video, audio entries + cost dispatcher + picker.
7
+ * Zod-only OSS core; @agstudio/model-catalog layers billing/access/BYOK on top.
8
+ */
9
+
10
+ // src/curation/index.ts
11
+ var PROVIDER_GROUPS = [
12
+ { id: "openai", label: "OpenAI", providers: ["openai", "openai-realtime"] },
13
+ { id: "google", label: "Google", providers: ["google", "gemini-live"] },
14
+ { id: "anthropic", label: "Anthropic", providers: ["anthropic"] },
15
+ { id: "minimax", label: "MiniMax", providers: ["minimax"] },
16
+ { id: "elevenlabs", label: "ElevenLabs", providers: ["elevenlabs"] },
17
+ { id: "replicate", label: "Replicate", providers: ["replicate"] },
18
+ { id: "deepgram", label: "Deepgram", providers: ["deepgram"] },
19
+ { id: "assemblyai", label: "AssemblyAI", providers: ["assemblyai"] }
20
+ ];
21
+ function listProviderGroups() {
22
+ return PROVIDER_GROUPS;
23
+ }
24
+ function getProviderGroup(id) {
25
+ const group = PROVIDER_GROUPS.find((g) => g.id === id);
26
+ if (!group) {
27
+ const known = PROVIDER_GROUPS.map((g) => g.id).join(", ");
28
+ throw new Error(`curation: unknown provider group "${id}". Known: ${known}`);
29
+ }
30
+ return group;
31
+ }
32
+ function groupForProvider(providerTag) {
33
+ return PROVIDER_GROUPS.find((g) => g.providers.includes(providerTag));
34
+ }
35
+ function expandProviders(tokens) {
36
+ const out = /* @__PURE__ */ new Set();
37
+ for (const token of tokens) {
38
+ const group = PROVIDER_GROUPS.find((g) => g.id === token);
39
+ if (group) {
40
+ for (const p of group.providers) out.add(p);
41
+ } else {
42
+ out.add(token);
43
+ }
44
+ }
45
+ return [...out];
46
+ }
47
+ var SURFACE_PROFILES = [
48
+ {
49
+ id: "all",
50
+ description: "Everything the catalog offers \u2014 the permissive default"
51
+ },
52
+ {
53
+ id: "text",
54
+ description: "Text models (LLMs) only",
55
+ kinds: ["llm"]
56
+ },
57
+ {
58
+ id: "images",
59
+ description: "Image models only",
60
+ kinds: ["image"]
61
+ },
62
+ {
63
+ id: "video",
64
+ description: "Video models only",
65
+ kinds: ["video"]
66
+ },
67
+ {
68
+ id: "audio",
69
+ description: "Audio models (TTS / STT / s2s) only",
70
+ kinds: ["audio"]
71
+ },
72
+ {
73
+ id: "voice",
74
+ description: "Every curated voice, any provider",
75
+ kinds: ["voice"]
76
+ },
77
+ {
78
+ id: "voice-s2s",
79
+ description: "Speech-to-speech voice engines (OpenAI Realtime, Gemini Live)",
80
+ kinds: ["voice"],
81
+ capabilities: ["s2s"]
82
+ },
83
+ {
84
+ id: "voice-tts",
85
+ description: "Sequential TTS voices (MiniMax, ElevenLabs)",
86
+ kinds: ["voice"],
87
+ capabilities: ["tts"]
88
+ }
89
+ ];
90
+ function listSurfaceProfiles() {
91
+ return SURFACE_PROFILES;
92
+ }
93
+ function getSurfaceProfile(id) {
94
+ const profile = SURFACE_PROFILES.find((p) => p.id === id);
95
+ if (!profile) {
96
+ const known = SURFACE_PROFILES.map((p) => p.id).join(", ");
97
+ throw new Error(
98
+ `curation: unknown surface profile "${id}". Known: ${known}`
99
+ );
100
+ }
101
+ return profile;
102
+ }
103
+ function modelMatchesProfile(model, profile) {
104
+ if (profile.kinds && profile.kinds.length > 0) {
105
+ if (!profile.kinds.includes(model.kind)) return false;
106
+ }
107
+ if (profile.providers && profile.providers.length > 0) {
108
+ const tags = expandProviders(profile.providers);
109
+ if (!tags.some((tag) => modelHasTag(model, tag))) return false;
110
+ }
111
+ if (profile.capabilities) {
112
+ if (!profile.capabilities.every((cap) => modelHasTag(model, cap)))
113
+ return false;
114
+ }
115
+ if (profile.tags) {
116
+ if (!profile.tags.every((tag) => modelHasTag(model, tag))) return false;
117
+ }
118
+ return true;
119
+ }
120
+ function applyProfile(models, profile) {
121
+ return models.filter((model) => modelMatchesProfile(model, profile));
122
+ }
123
+ function listSurfaced(profile) {
124
+ return applyProfile(listModels(), profile);
125
+ }
126
+ function filterVoicesByProviders(voices, providerTokens) {
127
+ if (providerTokens.length === 0) return voices;
128
+ const tags = new Set(expandProviders(providerTokens));
129
+ return voices.filter((v) => tags.has(v.provider));
130
+ }
131
+
132
+ export { applyProfile, expandProviders, filterVoicesByProviders, getProviderGroup, getSurfaceProfile, groupForProvider, listProviderGroups, listSurfaceProfiles, listSurfaced, modelMatchesProfile };
133
+ //# sourceMappingURL=chunk-CINXNTU3.mjs.map
134
+ //# sourceMappingURL=chunk-CINXNTU3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/curation/index.ts"],"names":[],"mappings":"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","file":"chunk-CINXNTU3.mjs","sourcesContent":["/**\n * Curation — what an app SURFACES from the catalog, distinct from\n * model-access (who MAY use a model: tier/scope policy). Curation is the\n * \"feature/provider catalog\" layer: an app composes views over the one\n * registry (\"all s2s voices from OpenAI OR Google\", \"images only\", …)\n * without touching the underlying data.\n *\n * Two registries, both following the canonical profile-registry shape\n * (`listX()` / `getX(id)` throwing with the known-id list):\n *\n * 1. PROVIDER GROUPS — a company (`openai`) maps to every provider tag\n * it owns across kinds (`openai` for the LLM/audio company tag,\n * `openai-realtime` for its voice engine). This is what reconciles\n * the two provider vocabularies in the registry: audio MODELS are\n * tagged by company, voices by engine. Curating by group spans both.\n *\n * 2. SURFACE PROFILES — named presets (`voice-s2s`, `images`, …) an app\n * selects from. Permissive by default (`all`); apps narrow only when\n * a picker should diverge.\n *\n * Selection precedence (caller's job): per-call arg → per-app/guild\n * config → env → `all` fallback.\n */\n\nimport {\n listModels,\n type CatalogKind,\n type ResolvedModel,\n} from \"../registry/index.js\"\nimport { modelHasTag } from \"../enrichment/index.js\"\nimport type { CatalogVoice } from \"../schema/voice.js\"\n\n// ───────────────────────────────────────────────────────────────────────\n// Provider groups — company → provider tags across kinds\n// ───────────────────────────────────────────────────────────────────────\n\nexport interface ProviderGroup {\n /** Canonical company id, e.g. \"openai\", \"google\". */\n id: string\n /** Display label. */\n label: string\n /**\n * Every provider tag this company owns across kinds. Audio/image/LLM use\n * the company tag (`openai`); the voice engine uses its own (`openai-realtime`).\n */\n providers: readonly string[]\n}\n\nconst PROVIDER_GROUPS: readonly ProviderGroup[] = [\n { id: \"openai\", label: \"OpenAI\", providers: [\"openai\", \"openai-realtime\"] },\n { id: \"google\", label: \"Google\", providers: [\"google\", \"gemini-live\"] },\n { id: \"anthropic\", label: \"Anthropic\", providers: [\"anthropic\"] },\n { id: \"minimax\", label: \"MiniMax\", providers: [\"minimax\"] },\n { id: \"elevenlabs\", label: \"ElevenLabs\", providers: [\"elevenlabs\"] },\n { id: \"replicate\", label: \"Replicate\", providers: [\"replicate\"] },\n { id: \"deepgram\", label: \"Deepgram\", providers: [\"deepgram\"] },\n { id: \"assemblyai\", label: \"AssemblyAI\", providers: [\"assemblyai\"] },\n]\n\nexport function listProviderGroups(): readonly ProviderGroup[] {\n return PROVIDER_GROUPS\n}\n\nexport function getProviderGroup(id: string): ProviderGroup {\n const group = PROVIDER_GROUPS.find(g => g.id === id)\n if (!group) {\n const known = PROVIDER_GROUPS.map(g => g.id).join(\", \")\n throw new Error(`curation: unknown provider group \"${id}\". Known: ${known}`)\n }\n return group\n}\n\n/** The group that owns a raw provider tag, if any. */\nexport function groupForProvider(\n providerTag: string\n): ProviderGroup | undefined {\n return PROVIDER_GROUPS.find(g => g.providers.includes(providerTag))\n}\n\n/**\n * Expand a mixed list of provider-group ids and raw provider tags into the\n * flat set of provider tags to match against. A token that is a known\n * group id expands to its members; anything else passes through as a raw\n * tag (so callers can target an engine directly, e.g. `gemini-live`).\n */\nexport function expandProviders(tokens: readonly string[]): string[] {\n const out = new Set<string>()\n for (const token of tokens) {\n const group = PROVIDER_GROUPS.find(g => g.id === token)\n if (group) {\n for (const p of group.providers) out.add(p)\n } else {\n out.add(token)\n }\n }\n return [...out]\n}\n\n// ───────────────────────────────────────────────────────────────────────\n// Surface profiles — named views an app surfaces\n// ───────────────────────────────────────────────────────────────────────\n\nexport interface SurfaceProfile {\n id: string\n description: string\n /** Restrict to these kinds. Undefined/empty = every kind. */\n kinds?: readonly CatalogKind[]\n /**\n * Restrict to these provider GROUP ids or raw provider tags (OR-set).\n * Expanded via `expandProviders`, so `[\"openai\"]` covers both the\n * `openai` company tag and the `openai-realtime` voice engine.\n */\n providers?: readonly string[]\n /** Require all of these capability tags (AND-set): `s2s`, `tts`, `edit`, … */\n capabilities?: readonly string[]\n /** Require all of these arbitrary tags (AND-set). */\n tags?: readonly string[]\n}\n\nconst SURFACE_PROFILES: readonly SurfaceProfile[] = [\n {\n id: \"all\",\n description: \"Everything the catalog offers — the permissive default\",\n },\n {\n id: \"text\",\n description: \"Text models (LLMs) only\",\n kinds: [\"llm\"],\n },\n {\n id: \"images\",\n description: \"Image models only\",\n kinds: [\"image\"],\n },\n {\n id: \"video\",\n description: \"Video models only\",\n kinds: [\"video\"],\n },\n {\n id: \"audio\",\n description: \"Audio models (TTS / STT / s2s) only\",\n kinds: [\"audio\"],\n },\n {\n id: \"voice\",\n description: \"Every curated voice, any provider\",\n kinds: [\"voice\"],\n },\n {\n id: \"voice-s2s\",\n description:\n \"Speech-to-speech voice engines (OpenAI Realtime, Gemini Live)\",\n kinds: [\"voice\"],\n capabilities: [\"s2s\"],\n },\n {\n id: \"voice-tts\",\n description: \"Sequential TTS voices (MiniMax, ElevenLabs)\",\n kinds: [\"voice\"],\n capabilities: [\"tts\"],\n },\n]\n\nexport function listSurfaceProfiles(): readonly SurfaceProfile[] {\n return SURFACE_PROFILES\n}\n\nexport function getSurfaceProfile(id: string): SurfaceProfile {\n const profile = SURFACE_PROFILES.find(p => p.id === id)\n if (!profile) {\n const known = SURFACE_PROFILES.map(p => p.id).join(\", \")\n throw new Error(\n `curation: unknown surface profile \"${id}\". Known: ${known}`\n )\n }\n return profile\n}\n\n// ───────────────────────────────────────────────────────────────────────\n// Filters\n// ───────────────────────────────────────────────────────────────────────\n\n/**\n * True iff a model passes a surface profile. Provider membership, like\n * capability/tag membership, is checked against the enrichment tag\n * vocabulary (every kind emits its provider as a tag), so this is uniform\n * across kinds and naturally spans the company/engine provider split.\n */\nexport function modelMatchesProfile(\n model: ResolvedModel,\n profile: SurfaceProfile\n): boolean {\n if (profile.kinds && profile.kinds.length > 0) {\n if (!profile.kinds.includes(model.kind)) return false\n }\n if (profile.providers && profile.providers.length > 0) {\n const tags = expandProviders(profile.providers)\n if (!tags.some(tag => modelHasTag(model, tag))) return false\n }\n if (profile.capabilities) {\n if (!profile.capabilities.every(cap => modelHasTag(model, cap)))\n return false\n }\n if (profile.tags) {\n if (!profile.tags.every(tag => modelHasTag(model, tag))) return false\n }\n return true\n}\n\n/** Filter a model list down to what a surface profile exposes. */\nexport function applyProfile(\n models: ResolvedModel[],\n profile: SurfaceProfile\n): ResolvedModel[] {\n return models.filter(model => modelMatchesProfile(model, profile))\n}\n\n/**\n * The catalog as a surface profile exposes it — `applyProfile` over the\n * full registry. The composable entry point for \"show me this view\".\n */\nexport function listSurfaced(profile: SurfaceProfile): ResolvedModel[] {\n return applyProfile(listModels(), profile)\n}\n\n/**\n * Voice-list curation. The merged voice catalog (curated + live\n * ElevenLabs) is `CatalogVoice[]`, not `ResolvedModel[]`, so it gets its\n * own provider filter — same group-expansion semantics. Only the provider\n * facet of a profile applies to a raw voice list (kind is implicitly\n * voice; capability/tag live on the registry projection).\n */\nexport function filterVoicesByProviders(\n voices: CatalogVoice[],\n providerTokens: readonly string[]\n): CatalogVoice[] {\n if (providerTokens.length === 0) return voices\n const tags = new Set(expandProviders(providerTokens))\n return voices.filter(v => tags.has(v.provider))\n}\n"]}
@@ -0,0 +1,187 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * @agentproto/model-catalog v0.1.0
5
+ * Unified model catalog: LLM, image, video, audio entries + cost dispatcher + picker.
6
+ * Zod-only OSS core; @agstudio/model-catalog layers billing/access/BYOK on top.
7
+ */
8
+
9
+ var ModelKindSchema = z.enum(["llm", "image", "video", "audio"]);
10
+ var LifecycleSchema = z.enum(["stable", "preview", "deprecated"]);
11
+ var CatalogPriceTierSchema = z.enum(["low", "mid", "high", "premium"]);
12
+ var NsfwPolicySchema = z.enum(["filtered", "permissive", "strict"]);
13
+ var CatalogProviderSchema = z.enum([
14
+ "anthropic",
15
+ "assemblyai",
16
+ "deepgram",
17
+ "elevenlabs",
18
+ "gemini-live",
19
+ "google",
20
+ "minimax",
21
+ "mistral",
22
+ "moonshot",
23
+ "openai",
24
+ "openai-realtime",
25
+ "openrouter",
26
+ "replicate"
27
+ ]);
28
+ var baseEntryShape = {
29
+ id: z.string().min(1),
30
+ name: z.string().min(1),
31
+ description: z.string().default(""),
32
+ provider: CatalogProviderSchema,
33
+ providerId: z.string().min(1),
34
+ agentVisible: z.boolean().default(false),
35
+ lifecycle: LifecycleSchema.default("stable"),
36
+ tags: z.array(z.string()).default([]),
37
+ catalogPriceTier: CatalogPriceTierSchema.default("mid"),
38
+ nsfwPolicy: NsfwPolicySchema.default("filtered"),
39
+ regions: z.array(z.string()).optional(),
40
+ aliases: z.array(z.string()).optional()
41
+ };
42
+
43
+ // src/schema/llm.ts
44
+ var LlmPricingSchema = z.object({
45
+ inputPer1M: z.number().nonnegative(),
46
+ outputPer1M: z.number().nonnegative(),
47
+ creditInputPer1M: z.number().nonnegative(),
48
+ creditOutputPer1M: z.number().nonnegative(),
49
+ cacheReadMultiplier: z.number().nonnegative().optional(),
50
+ cacheWriteMultiplier: z.number().nonnegative().optional(),
51
+ // Router (how we call the model) vs vendor (who made it). See
52
+ // `LLMPricing` in ../llm/catalog.ts for the contract.
53
+ provider: z.string().optional(),
54
+ vendor: z.string().optional()
55
+ });
56
+ var LLMEntrySchema = z.object({
57
+ ...baseEntryShape,
58
+ kind: z.literal("llm"),
59
+ pricing: LlmPricingSchema,
60
+ contextWindow: z.number().int().positive().optional()
61
+ });
62
+ var ImageCapabilitiesSchema = z.object({
63
+ generate: z.boolean(),
64
+ edit: z.boolean(),
65
+ upscale: z.boolean().optional()
66
+ });
67
+ var ImageReferenceImagesSchema = z.object({
68
+ supported: z.boolean(),
69
+ fieldName: z.enum(["image_input", "input_images", "input_image", "none"]),
70
+ maxCount: z.number().int().nonnegative(),
71
+ singular: z.boolean()
72
+ });
73
+ var ImageAspectRatioSchema = z.object({
74
+ supported: z.array(z.string()).min(1),
75
+ default: z.string()
76
+ });
77
+ var ImagePricingSchema = z.object({
78
+ costPerImage: z.number().nonnegative().optional(),
79
+ costTier: z.enum(["low", "medium", "high"]).optional(),
80
+ billingUnit: z.literal("per_image"),
81
+ baseCost: z.number().nonnegative(),
82
+ /** @deprecated Derived at call time. Kept for back-compat. */
83
+ creditCost: z.number().nonnegative().optional(),
84
+ /**
85
+ * Strategic per-model override. When set, bypasses the formula and
86
+ * the user is charged this many credits per output regardless of
87
+ * provider cost or category markup.
88
+ */
89
+ overrideCreditCost: z.number().nonnegative().optional()
90
+ });
91
+ var ImageEntrySchema = z.object({
92
+ ...baseEntryShape,
93
+ kind: z.literal("image"),
94
+ capabilities: ImageCapabilitiesSchema,
95
+ referenceImages: ImageReferenceImagesSchema,
96
+ aspectRatio: ImageAspectRatioSchema,
97
+ output: z.enum(["string", "array"]),
98
+ pricing: ImagePricingSchema,
99
+ triggerWord: z.string().optional()
100
+ });
101
+ var VideoCapabilitiesSchema = z.object({
102
+ textToVideo: z.boolean(),
103
+ imageToVideo: z.boolean(),
104
+ subjectReference: z.boolean(),
105
+ audio: z.boolean()
106
+ });
107
+ var VideoResolutionSchema = z.enum([
108
+ "480p",
109
+ "540p",
110
+ "720p",
111
+ "1080p",
112
+ "1440p",
113
+ "4k"
114
+ ]);
115
+ var VideoCostMultipliersSchema = z.object({
116
+ resolution: z.record(z.string(), z.number().positive()).optional(),
117
+ duration: z.record(z.string(), z.number().positive()).optional(),
118
+ mode: z.record(z.string(), z.number().positive()).optional()
119
+ });
120
+ var VideoPricingSchema = z.object({
121
+ costPerClip: z.number().nonnegative().optional(),
122
+ costTier: z.enum(["low", "medium", "high"]).optional(),
123
+ billingUnit: z.enum(["per_clip", "per_second"]),
124
+ baseCost: z.number().nonnegative(),
125
+ baseCostUnit: z.string(),
126
+ /** Provider-cost multipliers (resolution / duration / mode). */
127
+ multipliers: VideoCostMultipliersSchema.optional(),
128
+ /** @deprecated Derived at call time. */
129
+ creditCost: z.number().nonnegative().optional(),
130
+ /**
131
+ * @deprecated Use `multipliers` (provider-side) + per-category markup
132
+ * in `pricing-registry`. The credit multipliers used to be a parallel
133
+ * structure; now the formula re-applies `multipliers` to the derived
134
+ * credit count automatically.
135
+ */
136
+ creditMultipliers: VideoCostMultipliersSchema.optional(),
137
+ /** Strategic per-model override — bypasses the formula. */
138
+ overrideCreditCost: z.number().nonnegative().optional()
139
+ });
140
+ var VideoEntrySchema = z.object({
141
+ ...baseEntryShape,
142
+ kind: z.literal("video"),
143
+ capabilities: VideoCapabilitiesSchema,
144
+ maxDuration: z.number().positive(),
145
+ supportedResolutions: z.array(VideoResolutionSchema).min(1),
146
+ supportedAspectRatios: z.array(z.string()).min(1),
147
+ pricing: VideoPricingSchema
148
+ });
149
+ var AudioCapabilitiesSchema = z.object({
150
+ tts: z.boolean().optional(),
151
+ stt: z.boolean().optional(),
152
+ s2s: z.boolean().optional(),
153
+ languages: z.array(z.string()),
154
+ voiceCloning: z.boolean().optional(),
155
+ streaming: z.boolean().optional(),
156
+ timestamps: z.boolean().optional(),
157
+ diarization: z.boolean().optional(),
158
+ languageDetection: z.boolean().optional()
159
+ });
160
+ var AudioPricingSchema = z.object({
161
+ billingUnit: z.enum(["per_character", "per_second"]),
162
+ baseCost: z.number().nonnegative(),
163
+ baseCostUnit: z.string().optional(),
164
+ /** @deprecated Derived at call time from `baseCost × category-markup`. */
165
+ creditCost: z.number().nonnegative().optional(),
166
+ /** Strategic per-model override — bypasses the formula. */
167
+ overrideCreditCost: z.number().nonnegative().optional()
168
+ });
169
+ var AudioEntrySchema = z.object({
170
+ ...baseEntryShape,
171
+ kind: z.literal("audio"),
172
+ capabilities: AudioCapabilitiesSchema,
173
+ pricing: AudioPricingSchema,
174
+ supportedLocales: z.array(z.string()).optional()
175
+ });
176
+
177
+ // src/schema/index.ts
178
+ var ModelEntrySchema = z.discriminatedUnion("kind", [
179
+ LLMEntrySchema,
180
+ ImageEntrySchema,
181
+ VideoEntrySchema,
182
+ AudioEntrySchema
183
+ ]);
184
+
185
+ export { AudioCapabilitiesSchema, AudioEntrySchema, AudioPricingSchema, CatalogPriceTierSchema, CatalogProviderSchema, ImageAspectRatioSchema, ImageCapabilitiesSchema, ImageEntrySchema, ImagePricingSchema, ImageReferenceImagesSchema, LLMEntrySchema, LifecycleSchema, LlmPricingSchema, ModelEntrySchema, ModelKindSchema, NsfwPolicySchema, VideoCapabilitiesSchema, VideoCostMultipliersSchema, VideoEntrySchema, VideoPricingSchema, VideoResolutionSchema, baseEntryShape };
186
+ //# sourceMappingURL=chunk-F7OEHYUI.mjs.map
187
+ //# sourceMappingURL=chunk-F7OEHYUI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schema/base.ts","../src/schema/llm.ts","../src/schema/image.ts","../src/schema/video.ts","../src/schema/audio.ts","../src/schema/index.ts"],"names":["z"],"mappings":"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","file":"chunk-F7OEHYUI.mjs","sourcesContent":["import { z } from \"zod\"\n\n/**\n * Shared schema fragments for every model catalog entry.\n *\n * `baseEntryShape` is spread into per-kind schemas so each kind stays a\n * plain `z.object` — required by `z.discriminatedUnion`.\n *\n * Mirrors the pattern in\n * `packages/agencies/registry-client/src/types.ts` (`basePayloadShape`).\n */\n\nexport const ModelKindSchema = z.enum([\"llm\", \"image\", \"video\", \"audio\"])\nexport type ModelKind = z.infer<typeof ModelKindSchema>\n\nexport const LifecycleSchema = z.enum([\"stable\", \"preview\", \"deprecated\"])\nexport type Lifecycle = z.infer<typeof LifecycleSchema>\n\n/**\n * `catalogPriceTier` — the model's intrinsic cost bucket. Distinct from\n * `subscriptionPlanTier` (the user's billing level) and `modelPreset`\n * (an app's per-conversation UX picker). Always qualify when discussing\n * tiers — bare `priceTier` / `tier` is ambiguous in this codebase.\n */\nexport const CatalogPriceTierSchema = z.enum([\"low\", \"mid\", \"high\", \"premium\"])\nexport type CatalogPriceTier = z.infer<typeof CatalogPriceTierSchema>\n\nexport const NsfwPolicySchema = z.enum([\"filtered\", \"permissive\", \"strict\"])\nexport type NsfwPolicy = z.infer<typeof NsfwPolicySchema>\n\n/**\n * Canonical model-provider registry — the single source of truth for the\n * `provider` field on every catalog entry. Adding a model on a new\n * provider means adding it here first, so a typo or an un-onboarded\n * provider is a validation/build error rather than a silently-broken\n * entry. `CatalogVoiceProviderSchema` is the voice-callable subset.\n */\nexport const CatalogProviderSchema = z.enum([\n \"anthropic\",\n \"assemblyai\",\n \"deepgram\",\n \"elevenlabs\",\n \"gemini-live\",\n \"google\",\n \"minimax\",\n \"mistral\",\n \"moonshot\",\n \"openai\",\n \"openai-realtime\",\n \"openrouter\",\n \"replicate\",\n])\nexport type CatalogProvider = z.infer<typeof CatalogProviderSchema>\n\nexport const baseEntryShape = {\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().default(\"\"),\n provider: CatalogProviderSchema,\n providerId: z.string().min(1),\n agentVisible: z.boolean().default(false),\n lifecycle: LifecycleSchema.default(\"stable\"),\n tags: z.array(z.string()).default([]),\n catalogPriceTier: CatalogPriceTierSchema.default(\"mid\"),\n nsfwPolicy: NsfwPolicySchema.default(\"filtered\"),\n regions: z.array(z.string()).optional(),\n aliases: z.array(z.string()).optional(),\n} as const\n","import { z } from \"zod\"\nimport { baseEntryShape } from \"./base.js\"\n\n/**\n * LLM pricing — token-based. Mirrors the historical `LLMPricing` shape in\n * `packages/core/src/config/llm-pricing.ts` so the existing\n * `calculateLLMCreditCost` formula carries over verbatim.\n */\nexport const LlmPricingSchema = z.object({\n inputPer1M: z.number().nonnegative(),\n outputPer1M: z.number().nonnegative(),\n creditInputPer1M: z.number().nonnegative(),\n creditOutputPer1M: z.number().nonnegative(),\n cacheReadMultiplier: z.number().nonnegative().optional(),\n cacheWriteMultiplier: z.number().nonnegative().optional(),\n // Router (how we call the model) vs vendor (who made it). See\n // `LLMPricing` in ../llm/catalog.ts for the contract.\n provider: z.string().optional(),\n vendor: z.string().optional(),\n})\nexport type LlmPricing = z.infer<typeof LlmPricingSchema>\n\nexport const LLMEntrySchema = z.object({\n ...baseEntryShape,\n kind: z.literal(\"llm\"),\n pricing: LlmPricingSchema,\n contextWindow: z.number().int().positive().optional(),\n})\nexport type LLMEntry = z.infer<typeof LLMEntrySchema>\n","import { z } from \"zod\"\nimport { baseEntryShape } from \"./base.js\"\n\nexport const ImageCapabilitiesSchema = z.object({\n generate: z.boolean(),\n edit: z.boolean(),\n upscale: z.boolean().optional(),\n})\nexport type ImageCapabilities = z.infer<typeof ImageCapabilitiesSchema>\n\nexport const ImageReferenceImagesSchema = z.object({\n supported: z.boolean(),\n fieldName: z.enum([\"image_input\", \"input_images\", \"input_image\", \"none\"]),\n maxCount: z.number().int().nonnegative(),\n singular: z.boolean(),\n})\nexport type ImageReferenceImages = z.infer<typeof ImageReferenceImagesSchema>\n\nexport const ImageAspectRatioSchema = z.object({\n supported: z.array(z.string()).min(1),\n default: z.string(),\n})\nexport type ImageAspectRatio = z.infer<typeof ImageAspectRatioSchema>\n\n/**\n * Pricing inputs for a model entry.\n *\n * Credit math is **derived at call time** by `computeCenticredits()` from\n * `baseCost × category-markup`. The catalog only carries the\n * production-cost input. An entry can opt out of the formula via\n * `overrideCreditCost` (strategic subsidy / partner pricing) — used\n * sparingly so a category-wide tune stays a one-line change in\n * `pricing/index.ts`.\n *\n * `costPerImage` / `costTier` / `creditCost` are deprecated but kept\n * readable so production data + admin UI keep parsing. New entries\n * should not set them.\n */\nexport const ImagePricingSchema = z.object({\n costPerImage: z.number().nonnegative().optional(),\n costTier: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n billingUnit: z.literal(\"per_image\"),\n baseCost: z.number().nonnegative(),\n /** @deprecated Derived at call time. Kept for back-compat. */\n creditCost: z.number().nonnegative().optional(),\n /**\n * Strategic per-model override. When set, bypasses the formula and\n * the user is charged this many credits per output regardless of\n * provider cost or category markup.\n */\n overrideCreditCost: z.number().nonnegative().optional(),\n})\nexport type ImagePricing = z.infer<typeof ImagePricingSchema>\n\nexport const ImageEntrySchema = z.object({\n ...baseEntryShape,\n kind: z.literal(\"image\"),\n capabilities: ImageCapabilitiesSchema,\n referenceImages: ImageReferenceImagesSchema,\n aspectRatio: ImageAspectRatioSchema,\n output: z.enum([\"string\", \"array\"]),\n pricing: ImagePricingSchema,\n triggerWord: z.string().optional(),\n})\nexport type ImageEntry = z.infer<typeof ImageEntrySchema>\n","import { z } from \"zod\"\nimport { baseEntryShape } from \"./base.js\"\n\nexport const VideoCapabilitiesSchema = z.object({\n textToVideo: z.boolean(),\n imageToVideo: z.boolean(),\n subjectReference: z.boolean(),\n audio: z.boolean(),\n})\nexport type VideoCapabilities = z.infer<typeof VideoCapabilitiesSchema>\n\nexport const VideoResolutionSchema = z.enum([\n \"480p\",\n \"540p\",\n \"720p\",\n \"1080p\",\n \"1440p\",\n \"4k\",\n])\nexport type VideoResolution = z.infer<typeof VideoResolutionSchema>\n\n/**\n * Mirrors `CostMultipliers` from `the app integration-core`. Keys are\n * stringified so JSON round-trips cleanly.\n */\nexport const VideoCostMultipliersSchema = z.object({\n resolution: z.record(z.string(), z.number().positive()).optional(),\n duration: z.record(z.string(), z.number().positive()).optional(),\n mode: z.record(z.string(), z.number().positive()).optional(),\n})\nexport type VideoCostMultipliers = z.infer<typeof VideoCostMultipliersSchema>\n\nexport const VideoPricingSchema = z.object({\n costPerClip: z.number().nonnegative().optional(),\n costTier: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n billingUnit: z.enum([\"per_clip\", \"per_second\"]),\n baseCost: z.number().nonnegative(),\n baseCostUnit: z.string(),\n /** Provider-cost multipliers (resolution / duration / mode). */\n multipliers: VideoCostMultipliersSchema.optional(),\n /** @deprecated Derived at call time. */\n creditCost: z.number().nonnegative().optional(),\n /**\n * @deprecated Use `multipliers` (provider-side) + per-category markup\n * in `pricing-registry`. The credit multipliers used to be a parallel\n * structure; now the formula re-applies `multipliers` to the derived\n * credit count automatically.\n */\n creditMultipliers: VideoCostMultipliersSchema.optional(),\n /** Strategic per-model override — bypasses the formula. */\n overrideCreditCost: z.number().nonnegative().optional(),\n})\nexport type VideoPricing = z.infer<typeof VideoPricingSchema>\n\nexport const VideoEntrySchema = z.object({\n ...baseEntryShape,\n kind: z.literal(\"video\"),\n capabilities: VideoCapabilitiesSchema,\n maxDuration: z.number().positive(),\n supportedResolutions: z.array(VideoResolutionSchema).min(1),\n supportedAspectRatios: z.array(z.string()).min(1),\n pricing: VideoPricingSchema,\n})\nexport type VideoEntry = z.infer<typeof VideoEntrySchema>\n","import { z } from \"zod\"\nimport { baseEntryShape } from \"./base.js\"\n\n// Single source of truth for audio model capabilities — mirrors (and is\n// re-used by) the runtime `AudioModelDefinition` in `audio/catalog.ts`.\n// Modality is multi-valued boolean flags (`tts`/`stt`/`s2s`) — a model may\n// do more than one; `s2s` is a speech↔speech engine (distinct from a\n// tts+llm+stt cascade). Transport (`streaming`) is a SEPARATE axis.\nexport const AudioCapabilitiesSchema = z.object({\n tts: z.boolean().optional(),\n stt: z.boolean().optional(),\n s2s: z.boolean().optional(),\n languages: z.array(z.string()),\n voiceCloning: z.boolean().optional(),\n streaming: z.boolean().optional(),\n timestamps: z.boolean().optional(),\n diarization: z.boolean().optional(),\n languageDetection: z.boolean().optional(),\n})\nexport type AudioCapabilities = z.infer<typeof AudioCapabilitiesSchema>\n\nexport const AudioPricingSchema = z.object({\n billingUnit: z.enum([\"per_character\", \"per_second\"]),\n baseCost: z.number().nonnegative(),\n baseCostUnit: z.string().optional(),\n /** @deprecated Derived at call time from `baseCost × category-markup`. */\n creditCost: z.number().nonnegative().optional(),\n /** Strategic per-model override — bypasses the formula. */\n overrideCreditCost: z.number().nonnegative().optional(),\n})\nexport type AudioPricing = z.infer<typeof AudioPricingSchema>\n\n// Voices are NOT per-model metadata — they live in the shared, provider-\n// neutral voice catalog (an app voice-catalog module,\n// `CatalogVoice`), referenced by id. The old per-entry `voice` placeholder\n// (+ its `VoiceMetadataSchema`) was never populated — removed.\nexport const AudioEntrySchema = z.object({\n ...baseEntryShape,\n kind: z.literal(\"audio\"),\n capabilities: AudioCapabilitiesSchema,\n pricing: AudioPricingSchema,\n supportedLocales: z.array(z.string()).optional(),\n})\nexport type AudioEntry = z.infer<typeof AudioEntrySchema>\n","import { z } from \"zod\"\nimport { LLMEntrySchema } from \"./llm.js\"\nimport { ImageEntrySchema } from \"./image.js\"\nimport { VideoEntrySchema } from \"./video.js\"\nimport { AudioEntrySchema } from \"./audio.js\"\n\nexport * from \"./base.js\"\nexport * from \"./llm.js\"\nexport * from \"./image.js\"\nexport * from \"./video.js\"\nexport * from \"./audio.js\"\nexport * from \"./voice.js\"\n\n/** Discriminated union over every kind. */\nexport const ModelEntrySchema = z.discriminatedUnion(\"kind\", [\n LLMEntrySchema,\n ImageEntrySchema,\n VideoEntrySchema,\n AudioEntrySchema,\n])\nexport type ModelEntry = z.infer<typeof ModelEntrySchema>\n"]}