getaiapi 0.4.12 → 1.0.0-alpha.1

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.
package/dist/cli.js CHANGED
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ deriveCategory,
3
4
  generate,
4
- getModel,
5
- listModels
6
- } from "./chunk-LZV7KTSS.js";
5
+ listModels,
6
+ resolveModel
7
+ } from "./chunk-SUKZ6UR3.js";
7
8
 
8
9
  // src/cli.ts
9
10
  import { parseArgs } from "util";
@@ -23,7 +24,7 @@ Options:
23
24
 
24
25
  Examples:
25
26
  getaiapi generate --model flux-schnell --prompt "a cat"
26
- getaiapi list --category text-to-image --provider fal-ai
27
+ getaiapi list --input text --output image --provider fal-ai
27
28
  getaiapi list --query flux
28
29
  getaiapi info flux-schnell
29
30
  `.trim();
@@ -33,6 +34,7 @@ Usage: getaiapi generate --model <name> --prompt <text> [options]
33
34
  Options:
34
35
  --model, -m Model name (required)
35
36
  --prompt, -p Text prompt (required)
37
+ --provider Preferred provider (e.g. fal-ai, replicate)
36
38
  --seed Seed for reproducibility
37
39
  --count, -n Number of outputs
38
40
  --size Output size (e.g. "1024x1024")
@@ -45,17 +47,18 @@ var LIST_HELP = `
45
47
  Usage: getaiapi list [options]
46
48
 
47
49
  Options:
48
- --category, -c Filter by category (e.g. text-to-image)
49
- --provider, -p Filter by provider (e.g. fal-ai)
50
- --query, -q Search by name or alias
51
- --help, -h Show this help
50
+ --input, -i Filter by input modality (text, image, audio, video)
51
+ --output, -o Filter by output modality (image, video, audio, text, 3d, segmentation)
52
+ --provider, -p Filter by provider (e.g. fal-ai)
53
+ --query, -q Search by name or alias
54
+ --help, -h Show this help
52
55
  `.trim();
53
56
  var INFO_HELP = `
54
57
  Usage: getaiapi info <model-name>
55
58
 
56
59
  Shows detailed information about a model including:
57
60
  - Canonical name
58
- - Category
61
+ - Modality (inputs/outputs)
59
62
  - Aliases
60
63
  - Available providers
61
64
  `.trim();
@@ -79,6 +82,7 @@ async function cmdGenerate(args) {
79
82
  options: {
80
83
  model: { type: "string", short: "m" },
81
84
  prompt: { type: "string", short: "p" },
85
+ provider: { type: "string" },
82
86
  seed: { type: "string" },
83
87
  count: { type: "string", short: "n" },
84
88
  size: { type: "string" },
@@ -103,14 +107,25 @@ async function cmdGenerate(args) {
103
107
  console.log(GENERATE_HELP);
104
108
  process.exit(1);
105
109
  }
110
+ function parseNum(name, value) {
111
+ if (!value) return void 0;
112
+ const n = Number(value);
113
+ if (Number.isNaN(n)) {
114
+ console.error(`Error: --${name} must be a number, got "${value}"
115
+ `);
116
+ process.exit(1);
117
+ }
118
+ return n;
119
+ }
106
120
  const result = await generate({
107
121
  model: values.model,
108
122
  prompt: values.prompt,
109
- seed: values.seed ? Number(values.seed) : void 0,
110
- count: values.count ? Number(values.count) : void 0,
123
+ provider: values.provider,
124
+ seed: parseNum("seed", values.seed),
125
+ count: parseNum("count", values.count),
111
126
  size: values.size ?? void 0,
112
- guidance: values.guidance ? Number(values.guidance) : void 0,
113
- steps: values.steps ? Number(values.steps) : void 0,
127
+ guidance: parseNum("guidance", values.guidance),
128
+ steps: parseNum("steps", values.steps),
114
129
  format: values.format
115
130
  });
116
131
  console.log(JSON.stringify(result, null, 2));
@@ -119,7 +134,8 @@ function cmdList(args) {
119
134
  const { values } = parseArgs({
120
135
  args,
121
136
  options: {
122
- category: { type: "string", short: "c" },
137
+ input: { type: "string", short: "i" },
138
+ output: { type: "string", short: "o" },
123
139
  provider: { type: "string", short: "p" },
124
140
  query: { type: "string", short: "q" },
125
141
  help: { type: "boolean", short: "h" }
@@ -131,7 +147,8 @@ function cmdList(args) {
131
147
  return;
132
148
  }
133
149
  const models = listModels({
134
- category: values.category,
150
+ input: values.input,
151
+ output: values.output,
135
152
  provider: values.provider,
136
153
  query: values.query ?? void 0
137
154
  });
@@ -141,10 +158,10 @@ function cmdList(args) {
141
158
  }
142
159
  const rows = models.map((m) => [
143
160
  m.canonical_name,
144
- m.category,
161
+ deriveCategory(m),
145
162
  m.providers.map((p) => p.provider).join(", ")
146
163
  ]);
147
- printTable(["Name", "Category", "Providers"], rows);
164
+ printTable(["Name", "Modality", "Providers"], rows);
148
165
  }
149
166
  function cmdInfo(args) {
150
167
  const { values, positionals } = parseArgs({
@@ -165,9 +182,11 @@ function cmdInfo(args) {
165
182
  console.log(INFO_HELP);
166
183
  process.exit(1);
167
184
  }
168
- const model = getModel(name);
185
+ const model = resolveModel(name);
169
186
  console.log(`Name: ${model.canonical_name}`);
170
- console.log(`Category: ${model.category}`);
187
+ console.log(`Modality: ${deriveCategory(model)}`);
188
+ console.log(`Inputs: ${model.modality.inputs.join(", ")}`);
189
+ console.log(`Outputs: ${model.modality.outputs.join(", ")}`);
171
190
  console.log(`Aliases: ${model.aliases.length > 0 ? model.aliases.join(", ") : "(none)"}`);
172
191
  console.log(`Providers: ${model.providers.map((p) => p.provider).join(", ")}`);
173
192
  console.log();
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { parseArgs } from \"node:util\";\nimport { generate, listModels, getModel } from \"./index.js\";\n\nconst HELP = `\ngetaiapi - Unified AI API Gateway CLI\n\nUsage:\n getaiapi <command> [options]\n\nCommands:\n generate Generate content using an AI model\n list List available models\n info Show details for a specific model\n\nOptions:\n --help, -h Show this help message\n\nExamples:\n getaiapi generate --model flux-schnell --prompt \"a cat\"\n getaiapi list --category text-to-image --provider fal-ai\n getaiapi list --query flux\n getaiapi info flux-schnell\n`.trim();\n\nconst GENERATE_HELP = `\nUsage: getaiapi generate --model <name> --prompt <text> [options]\n\nOptions:\n --model, -m Model name (required)\n --prompt, -p Text prompt (required)\n --seed Seed for reproducibility\n --count, -n Number of outputs\n --size Output size (e.g. \"1024x1024\")\n --guidance Guidance scale\n --steps Number of inference steps\n --format Output format (png, jpeg, webp, mp4, etc.)\n --help, -h Show this help\n`.trim();\n\nconst LIST_HELP = `\nUsage: getaiapi list [options]\n\nOptions:\n --category, -c Filter by category (e.g. text-to-image)\n --provider, -p Filter by provider (e.g. fal-ai)\n --query, -q Search by name or alias\n --help, -h Show this help\n`.trim();\n\nconst INFO_HELP = `\nUsage: getaiapi info <model-name>\n\nShows detailed information about a model including:\n - Canonical name\n - Category\n - Aliases\n - Available providers\n`.trim();\n\nfunction padRight(str: string, len: number): string {\n return str.length >= len ? str : str + \" \".repeat(len - str.length);\n}\n\nfunction printTable(\n headers: string[],\n rows: string[][],\n): void {\n const widths = headers.map((h, i) =>\n Math.max(h.length, ...rows.map((r) => (r[i] ?? \"\").length)),\n );\n const sep = widths.map((w) => \"-\".repeat(w)).join(\" \");\n console.log(headers.map((h, i) => padRight(h, widths[i])).join(\" \"));\n console.log(sep);\n for (const row of rows) {\n console.log(row.map((cell, i) => padRight(cell ?? \"\", widths[i])).join(\" \"));\n }\n}\n\nasync function cmdGenerate(args: string[]): Promise<void> {\n const { values } = parseArgs({\n args,\n options: {\n model: { type: \"string\", short: \"m\" },\n prompt: { type: \"string\", short: \"p\" },\n seed: { type: \"string\" },\n count: { type: \"string\", short: \"n\" },\n size: { type: \"string\" },\n guidance: { type: \"string\" },\n steps: { type: \"string\" },\n format: { type: \"string\" },\n help: { type: \"boolean\", short: \"h\" },\n },\n strict: true,\n });\n\n if (values.help) {\n console.log(GENERATE_HELP);\n return;\n }\n\n if (!values.model) {\n console.error(\"Error: --model is required\\n\");\n console.log(GENERATE_HELP);\n process.exit(1);\n }\n\n if (!values.prompt) {\n console.error(\"Error: --prompt is required\\n\");\n console.log(GENERATE_HELP);\n process.exit(1);\n }\n\n const result = await generate({\n model: values.model,\n prompt: values.prompt,\n seed: values.seed ? Number(values.seed) : undefined,\n count: values.count ? Number(values.count) : undefined,\n size: values.size ?? undefined,\n guidance: values.guidance ? Number(values.guidance) : undefined,\n steps: values.steps ? Number(values.steps) : undefined,\n format: values.format as GenerateRequest[\"format\"],\n });\n\n console.log(JSON.stringify(result, null, 2));\n}\n\nfunction cmdList(args: string[]): void {\n const { values } = parseArgs({\n args,\n options: {\n category: { type: \"string\", short: \"c\" },\n provider: { type: \"string\", short: \"p\" },\n query: { type: \"string\", short: \"q\" },\n help: { type: \"boolean\", short: \"h\" },\n },\n strict: true,\n });\n\n if (values.help) {\n console.log(LIST_HELP);\n return;\n }\n\n const models = listModels({\n category: values.category as ListModelsFilters[\"category\"],\n provider: values.provider as ListModelsFilters[\"provider\"],\n query: values.query ?? undefined,\n });\n\n if (models.length === 0) {\n console.log(\"No models found matching the given filters.\");\n return;\n }\n\n const rows = models.map((m) => [\n m.canonical_name,\n m.category,\n m.providers.map((p) => p.provider).join(\", \"),\n ]);\n\n printTable([\"Name\", \"Category\", \"Providers\"], rows);\n}\n\nfunction cmdInfo(args: string[]): void {\n const { values, positionals } = parseArgs({\n args,\n options: {\n help: { type: \"boolean\", short: \"h\" },\n },\n allowPositionals: true,\n strict: true,\n });\n\n if (values.help) {\n console.log(INFO_HELP);\n return;\n }\n\n const name = positionals[0];\n if (!name) {\n console.error(\"Error: model name is required\\n\");\n console.log(INFO_HELP);\n process.exit(1);\n }\n\n const model = getModel(name);\n\n console.log(`Name: ${model.canonical_name}`);\n console.log(`Category: ${model.category}`);\n console.log(`Aliases: ${model.aliases.length > 0 ? model.aliases.join(\", \") : \"(none)\"}`);\n console.log(`Providers: ${model.providers.map((p) => p.provider).join(\", \")}`);\n console.log();\n console.log(\"Provider details:\");\n for (const p of model.providers) {\n console.log(` ${p.provider}`);\n console.log(` Skill: ${p.skill_id}`);\n console.log(` Endpoint: ${p.endpoint}`);\n console.log(` Auth env: ${p.auth_env}`);\n }\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n\n if (args.length === 0 || args[0] === \"--help\" || args[0] === \"-h\") {\n console.log(HELP);\n return;\n }\n\n const command = args[0];\n const rest = args.slice(1);\n\n switch (command) {\n case \"generate\":\n await cmdGenerate(rest);\n break;\n case \"list\":\n cmdList(rest);\n break;\n case \"info\":\n cmdInfo(rest);\n break;\n default:\n console.error(`Unknown command: ${command}\\n`);\n console.log(HELP);\n process.exit(1);\n }\n}\n\n// Import types used in the file\nimport type { GenerateRequest } from \"./types.js\";\nimport type { ListModelsFilters } from \"./discovery.js\";\n\nmain().catch((err: Error) => {\n console.error(`Error: ${err.message}`);\n process.exit(1);\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { parseArgs } from 'node:util'\nimport { generate } from './gateway.js'\nimport { listModels, deriveCategory } from './discovery.js'\nimport { resolveModel } from './registry.js'\nimport type { GenerateRequest, ListModelsFilters, InputType, OutputType, ProviderName } from './types.js'\n\nconst HELP = `\ngetaiapi - Unified AI API Gateway CLI\n\nUsage:\n getaiapi <command> [options]\n\nCommands:\n generate Generate content using an AI model\n list List available models\n info Show details for a specific model\n\nOptions:\n --help, -h Show this help message\n\nExamples:\n getaiapi generate --model flux-schnell --prompt \"a cat\"\n getaiapi list --input text --output image --provider fal-ai\n getaiapi list --query flux\n getaiapi info flux-schnell\n`.trim()\n\nconst GENERATE_HELP = `\nUsage: getaiapi generate --model <name> --prompt <text> [options]\n\nOptions:\n --model, -m Model name (required)\n --prompt, -p Text prompt (required)\n --provider Preferred provider (e.g. fal-ai, replicate)\n --seed Seed for reproducibility\n --count, -n Number of outputs\n --size Output size (e.g. \"1024x1024\")\n --guidance Guidance scale\n --steps Number of inference steps\n --format Output format (png, jpeg, webp, mp4, etc.)\n --help, -h Show this help\n`.trim()\n\nconst LIST_HELP = `\nUsage: getaiapi list [options]\n\nOptions:\n --input, -i Filter by input modality (text, image, audio, video)\n --output, -o Filter by output modality (image, video, audio, text, 3d, segmentation)\n --provider, -p Filter by provider (e.g. fal-ai)\n --query, -q Search by name or alias\n --help, -h Show this help\n`.trim()\n\nconst INFO_HELP = `\nUsage: getaiapi info <model-name>\n\nShows detailed information about a model including:\n - Canonical name\n - Modality (inputs/outputs)\n - Aliases\n - Available providers\n`.trim()\n\nfunction padRight(str: string, len: number): string {\n return str.length >= len ? str : str + ' '.repeat(len - str.length)\n}\n\nfunction printTable(\n headers: string[],\n rows: string[][],\n): void {\n const widths = headers.map((h, i) =>\n Math.max(h.length, ...rows.map((r) => (r[i] ?? '').length)),\n )\n const sep = widths.map((w) => '-'.repeat(w)).join(' ')\n console.log(headers.map((h, i) => padRight(h, widths[i])).join(' '))\n console.log(sep)\n for (const row of rows) {\n console.log(row.map((cell, i) => padRight(cell ?? '', widths[i])).join(' '))\n }\n}\n\nasync function cmdGenerate(args: string[]): Promise<void> {\n const { values } = parseArgs({\n args,\n options: {\n model: { type: 'string', short: 'm' },\n prompt: { type: 'string', short: 'p' },\n provider: { type: 'string' },\n seed: { type: 'string' },\n count: { type: 'string', short: 'n' },\n size: { type: 'string' },\n guidance: { type: 'string' },\n steps: { type: 'string' },\n format: { type: 'string' },\n help: { type: 'boolean', short: 'h' },\n },\n strict: true,\n })\n\n if (values.help) {\n console.log(GENERATE_HELP)\n return\n }\n\n if (!values.model) {\n console.error('Error: --model is required\\n')\n console.log(GENERATE_HELP)\n process.exit(1)\n }\n\n if (!values.prompt) {\n console.error('Error: --prompt is required\\n')\n console.log(GENERATE_HELP)\n process.exit(1)\n }\n\n function parseNum(name: string, value: string | undefined): number | undefined {\n if (!value) return undefined\n const n = Number(value)\n if (Number.isNaN(n)) {\n console.error(`Error: --${name} must be a number, got \"${value}\"\\n`)\n process.exit(1)\n }\n return n\n }\n\n const result = await generate({\n model: values.model,\n prompt: values.prompt,\n provider: values.provider as ProviderName | undefined,\n seed: parseNum('seed', values.seed),\n count: parseNum('count', values.count),\n size: values.size ?? undefined,\n guidance: parseNum('guidance', values.guidance),\n steps: parseNum('steps', values.steps),\n format: values.format as GenerateRequest['format'],\n })\n\n console.log(JSON.stringify(result, null, 2))\n}\n\nfunction cmdList(args: string[]): void {\n const { values } = parseArgs({\n args,\n options: {\n input: { type: 'string', short: 'i' },\n output: { type: 'string', short: 'o' },\n provider: { type: 'string', short: 'p' },\n query: { type: 'string', short: 'q' },\n help: { type: 'boolean', short: 'h' },\n },\n strict: true,\n })\n\n if (values.help) {\n console.log(LIST_HELP)\n return\n }\n\n const models = listModels({\n input: values.input as InputType | undefined,\n output: values.output as OutputType | undefined,\n provider: values.provider as ProviderName | undefined,\n query: values.query ?? undefined,\n })\n\n if (models.length === 0) {\n console.log('No models found matching the given filters.')\n return\n }\n\n const rows = models.map((m) => [\n m.canonical_name,\n deriveCategory(m),\n m.providers.map((p) => p.provider).join(', '),\n ])\n\n printTable(['Name', 'Modality', 'Providers'], rows)\n}\n\nfunction cmdInfo(args: string[]): void {\n const { values, positionals } = parseArgs({\n args,\n options: {\n help: { type: 'boolean', short: 'h' },\n },\n allowPositionals: true,\n strict: true,\n })\n\n if (values.help) {\n console.log(INFO_HELP)\n return\n }\n\n const name = positionals[0]\n if (!name) {\n console.error('Error: model name is required\\n')\n console.log(INFO_HELP)\n process.exit(1)\n }\n\n const model = resolveModel(name)\n\n console.log(`Name: ${model.canonical_name}`)\n console.log(`Modality: ${deriveCategory(model)}`)\n console.log(`Inputs: ${model.modality.inputs.join(', ')}`)\n console.log(`Outputs: ${model.modality.outputs.join(', ')}`)\n console.log(`Aliases: ${model.aliases.length > 0 ? model.aliases.join(', ') : '(none)'}`)\n console.log(`Providers: ${model.providers.map((p) => p.provider).join(', ')}`)\n console.log()\n console.log('Provider details:')\n for (const p of model.providers) {\n console.log(` ${p.provider}`)\n console.log(` Skill: ${p.skill_id}`)\n console.log(` Endpoint: ${p.endpoint}`)\n console.log(` Auth env: ${p.auth_env}`)\n }\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2)\n\n if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n console.log(HELP)\n return\n }\n\n const command = args[0]\n const rest = args.slice(1)\n\n switch (command) {\n case 'generate':\n await cmdGenerate(rest)\n break\n case 'list':\n cmdList(rest)\n break\n case 'info':\n cmdInfo(rest)\n break\n default:\n console.error(`Unknown command: ${command}\\n`)\n console.log(HELP)\n process.exit(1)\n }\n}\n\nmain().catch((err: Error) => {\n console.error(`Error: ${err.message}`)\n process.exit(1)\n})\n"],"mappings":"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","names":[]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,31 @@
1
+ type OutputType = 'image' | 'video' | 'audio' | 'text' | '3d' | 'segmentation';
2
+ type InputType = 'text' | 'image' | 'audio' | 'video';
3
+ type ProviderName = 'fal-ai' | 'replicate' | 'wavespeed' | 'openrouter';
4
+ interface ModelEntry {
5
+ canonical_name: string;
6
+ aliases: string[];
7
+ modality: {
8
+ inputs: InputType[];
9
+ outputs: OutputType[];
10
+ };
11
+ providers: ProviderBinding[];
12
+ }
13
+ interface ProviderBinding {
14
+ provider: ProviderName;
15
+ skill_id: string;
16
+ endpoint: string;
17
+ auth_env: string;
18
+ param_map: Record<string, string | string[]>;
19
+ output_map: OutputMapping;
20
+ }
21
+ interface OutputMapping {
22
+ type: OutputType;
23
+ extract_path: string;
24
+ content_type?: string;
25
+ }
1
26
  interface GenerateRequest {
2
27
  model: string;
28
+ provider?: ProviderName;
3
29
  prompt?: string;
4
30
  image?: string | File;
5
31
  images?: (string | File)[];
@@ -15,17 +41,16 @@ interface GenerateRequest {
15
41
  guidance?: number;
16
42
  steps?: number;
17
43
  strength?: number;
18
- format?: "png" | "jpeg" | "webp" | "mp4" | "mp3" | "wav" | "obj" | "glb";
44
+ format?: 'png' | 'jpeg' | 'webp' | 'mp4' | 'mp3' | 'wav' | 'obj' | 'glb';
19
45
  quality?: number;
20
46
  safety?: boolean;
21
47
  options?: Record<string, unknown>;
22
48
  }
23
- type OutputType = "image" | "video" | "audio" | "text" | "3d" | "segmentation";
24
49
  interface GenerateResponse {
25
50
  id: string;
26
51
  model: string;
27
52
  provider: string;
28
- status: "completed" | "failed";
53
+ status: 'completed' | 'failed';
29
54
  outputs: OutputItem[];
30
55
  metadata: {
31
56
  seed?: number;
@@ -44,31 +69,23 @@ interface OutputItem {
44
69
  content_type: string;
45
70
  size_bytes?: number;
46
71
  }
47
- type ModelCategory = "text-to-image" | "image-to-image" | "text-to-video" | "image-to-video" | "text-to-audio" | "audio-to-text" | "image-to-3d" | "text-to-3d" | "upscale-image" | "upscale-video" | "remove-background" | "segmentation" | "image-edit" | "video-to-audio" | "video-to-video" | "moderation" | "training" | "text-generation" | "doc-to-text" | "image-to-text" | "video-to-text";
48
- type ProviderName = "fal-ai" | "replicate" | "wavespeed" | "openrouter";
49
- type InputType = "text" | "image" | "audio" | "video";
50
- interface ModelEntry {
51
- canonical_name: string;
52
- aliases: string[];
53
- category: ModelCategory;
54
- modality: {
55
- inputs: InputType[];
56
- outputs: OutputType[];
57
- };
58
- providers: ProviderBinding[];
72
+ interface ListModelsFilters {
73
+ input?: InputType;
74
+ output?: OutputType;
75
+ provider?: ProviderName;
76
+ query?: string;
59
77
  }
60
- interface ProviderBinding {
61
- provider: ProviderName;
62
- skill_id: string;
63
- endpoint: string;
64
- auth_env: string;
65
- param_map: Record<string, string>;
66
- output_map: OutputMapping;
78
+ interface ProviderResponse {
79
+ id: string;
80
+ status: 'completed' | 'failed' | 'processing' | 'pending';
81
+ output?: unknown;
82
+ error?: string;
67
83
  }
68
- interface OutputMapping {
69
- type: OutputType;
70
- extract_path: string;
71
- content_type?: string;
84
+ interface ProviderAdapter {
85
+ name: ProviderName;
86
+ submit(endpoint: string, params: Record<string, unknown>, auth: string): Promise<ProviderResponse>;
87
+ poll(taskId: string, auth: string, endpoint?: string): Promise<ProviderResponse>;
88
+ parseOutput(raw: unknown, outputMapping: OutputMapping): OutputItem[];
72
89
  }
73
90
  interface ConfigureOptions {
74
91
  keys?: Partial<Record<ProviderName, string>>;
@@ -103,23 +120,49 @@ declare function configure(options: ConfigureOptions): void;
103
120
 
104
121
  declare function configureAuth(keys: Partial<Record<ProviderName, string>>): void;
105
122
 
106
- interface ListModelsFilters {
107
- category?: ModelCategory;
108
- provider?: ProviderName;
109
- query?: string;
110
- accessible?: boolean;
111
- }
112
123
  /**
113
- * Lists all models in the registry.
114
- * Set `accessible: true` to filter to only models the caller has API keys for.
115
- * Optionally filters by category, provider, or text query.
124
+ * Lists models filtered by modality, provider, or text query.
125
+ * Category is derived, not stored filter by input/output modality instead.
116
126
  */
117
127
  declare function listModels(filters?: ListModelsFilters): ModelEntry[];
118
128
  /**
119
- * Resolves a model by name (canonical name, alias, or fuzzy match).
120
- * Throws ModelNotFoundError if no match is found.
129
+ * Derives a display category label from modality.
130
+ * e.g., inputs=["text"], outputs=["image"] "text-to-image"
131
+ * e.g., inputs=["image","text"], outputs=["video"] → "image,text-to-video"
132
+ */
133
+ declare function deriveCategory(model: ModelEntry): string;
134
+
135
+ /**
136
+ * Returns the registry data.
137
+ * JSON is bundled at build time — no filesystem access needed.
138
+ * Works in Node.js, edge runtimes, serverless, and browsers.
139
+ */
140
+ declare function loadRegistry(): ModelEntry[];
141
+ /**
142
+ * Resolves a user's model name query to a matching ModelEntry.
143
+ *
144
+ * Resolution order:
145
+ * 1. Exact canonical match
146
+ * 2. Exact alias match
147
+ * 3. Normalized canonical match
148
+ * 4. Normalized alias match
149
+ * 5. No match -> throw with suggestions
150
+ */
151
+ declare function resolveModel(query: string, availableProviders?: ProviderName[]): ModelEntry;
152
+ /**
153
+ * Clears the registry cache. Useful for testing.
154
+ */
155
+ declare function clearRegistryCache(): void;
156
+
157
+ /**
158
+ * Maps a universal GenerateRequest to provider-specific params
159
+ * using the binding's own param_map. No template lookup needed.
160
+ */
161
+ declare function mapInput(request: GenerateRequest, binding: ProviderBinding): Record<string, unknown>;
162
+ /**
163
+ * Maps raw provider response to OutputItem[] using the output mapping.
121
164
  */
122
- declare function getModel(name: string): ModelEntry;
165
+ declare function mapOutput(raw: unknown, outputMapping: OutputMapping): OutputItem[];
123
166
 
124
167
  declare function configureStorage(config?: StorageConfig): void;
125
168
  declare function uploadAsset(input: Buffer | Blob | File | ArrayBuffer, options?: UploadOptions): Promise<UploadResult>;
@@ -177,4 +220,4 @@ declare class StorageError extends GetAIApiError {
177
220
  constructor(operation: StorageOperation, message: string, statusCode?: number);
178
221
  }
179
222
 
180
- export { AuthError, type ConfigureOptions, type GenerateRequest, type GenerateResponse, GetAIApiError, type ListModelsFilters, type ModelCategory, type ModelEntry, ModelNotFoundError, NoProviderError, type OutputItem, type OutputType, type ProviderBinding, ProviderError, type ProviderName, RateLimitError, type StorageConfig, StorageError, TimeoutError, type UploadOptions, type UploadResult, ValidationError, configure, configureAuth, configureStorage, deleteAsset, generate, getModel, listModels, presignAsset, uploadAsset };
223
+ export { AuthError, type ConfigureOptions, type GenerateRequest, type GenerateResponse, GetAIApiError, type InputType, type ListModelsFilters, type ModelEntry, ModelNotFoundError, NoProviderError, type OutputItem, type OutputMapping, type OutputType, type ProviderAdapter, type ProviderBinding, ProviderError, type ProviderName, type ProviderResponse, RateLimitError, type StorageConfig, StorageError, TimeoutError, type UploadOptions, type UploadResult, ValidationError, clearRegistryCache, configure, configureAuth, configureStorage, deleteAsset, deriveCategory, generate, listModels, loadRegistry, mapInput, mapOutput, presignAsset, resolveModel, uploadAsset };
package/dist/index.js CHANGED
@@ -8,16 +8,30 @@ import {
8
8
  StorageError,
9
9
  TimeoutError,
10
10
  ValidationError,
11
- configure,
11
+ clearRegistryCache,
12
12
  configureAuth,
13
13
  configureStorage,
14
14
  deleteAsset,
15
+ deriveCategory,
15
16
  generate,
16
- getModel,
17
17
  listModels,
18
+ loadRegistry,
19
+ mapInput,
20
+ mapOutput,
18
21
  presignAsset,
22
+ resolveModel,
19
23
  uploadAsset
20
- } from "./chunk-LZV7KTSS.js";
24
+ } from "./chunk-SUKZ6UR3.js";
25
+
26
+ // src/configure.ts
27
+ function configure(options) {
28
+ if (options.keys) {
29
+ configureAuth(options.keys);
30
+ }
31
+ if (options.storage) {
32
+ configureStorage(options.storage);
33
+ }
34
+ }
21
35
  export {
22
36
  AuthError,
23
37
  GetAIApiError,
@@ -28,14 +42,19 @@ export {
28
42
  StorageError,
29
43
  TimeoutError,
30
44
  ValidationError,
45
+ clearRegistryCache,
31
46
  configure,
32
47
  configureAuth,
33
48
  configureStorage,
34
49
  deleteAsset,
50
+ deriveCategory,
35
51
  generate,
36
- getModel,
37
52
  listModels,
53
+ loadRegistry,
54
+ mapInput,
55
+ mapOutput,
38
56
  presignAsset,
57
+ resolveModel,
39
58
  uploadAsset
40
59
  };
41
60
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../src/configure.ts"],"sourcesContent":["import type { ConfigureOptions } from \"./types.js\";\nimport { configureAuth } from \"./auth.js\";\nimport { configureStorage } from \"./storage.js\";\n\nexport function configure(options: ConfigureOptions): void {\n if (options.keys) {\n configureAuth(options.keys);\n }\n if (options.storage) {\n configureStorage(options.storage);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,SAAS,UAAU,SAAiC;AACzD,MAAI,QAAQ,MAAM;AAChB,kBAAc,QAAQ,IAAI;AAAA,EAC5B;AACA,MAAI,QAAQ,SAAS;AACnB,qBAAiB,QAAQ,OAAO;AAAA,EAClC;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "getaiapi",
3
- "version": "0.4.12",
3
+ "version": "1.0.0-alpha.1",
4
4
  "type": "module",
5
5
  "description": "Unified AI API Gateway - one function to call any AI model",
6
6
  "main": "./dist/index.js",
@@ -17,7 +17,6 @@
17
17
  },
18
18
  "files": [
19
19
  "dist",
20
- "registry",
21
20
  "README.md",
22
21
  "LICENSE"
23
22
  ],
@@ -51,6 +50,8 @@
51
50
  "build": "tsup",
52
51
  "prepublishOnly": "npm run build",
53
52
  "test": "vitest run",
53
+ "catalog": "tsx scripts/catalog.ts",
54
+ "generate-registry": "tsx scripts/generate-registry.ts",
54
55
  "generate-models": "node scripts/generate-models-md.js",
55
56
  "validate-registry": "node scripts/validate-registry.js"
56
57
  },
@@ -61,7 +62,6 @@
61
62
  "tsup": "^8.4.0",
62
63
  "tsx": "^4.19.0",
63
64
  "typescript": "^5.7.0",
64
- "vitest": "^3.0.0",
65
- "wavespeed": "^0.2.3"
65
+ "vitest": "^3.0.0"
66
66
  }
67
67
  }