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/README.md +52 -40
- package/dist/chunk-SUKZ6UR3.js +71415 -0
- package/dist/chunk-SUKZ6UR3.js.map +1 -0
- package/dist/cli.js +38 -19
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +82 -39
- package/dist/index.js +23 -4
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/chunk-LZV7KTSS.js +0 -2499
- package/dist/chunk-LZV7KTSS.js.map +0 -1
- package/registry/.gitkeep +0 -0
- package/registry/catalog.json +0 -4108
- package/registry/categories.json +0 -27
- package/registry/registry.json +0 -56128
package/dist/cli.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
+
deriveCategory,
|
|
3
4
|
generate,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} from "./chunk-
|
|
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 --
|
|
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
|
-
--
|
|
49
|
-
--
|
|
50
|
-
--
|
|
51
|
-
--
|
|
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
|
-
-
|
|
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
|
-
|
|
110
|
-
|
|
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:
|
|
113
|
-
steps:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
161
|
+
deriveCategory(m),
|
|
145
162
|
m.providers.map((p) => p.provider).join(", ")
|
|
146
163
|
]);
|
|
147
|
-
printTable(["Name", "
|
|
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 =
|
|
185
|
+
const model = resolveModel(name);
|
|
169
186
|
console.log(`Name: ${model.canonical_name}`);
|
|
170
|
-
console.log(`
|
|
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?:
|
|
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:
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
|
114
|
-
*
|
|
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
|
-
*
|
|
120
|
-
*
|
|
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
|
|
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
|
|
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
|
-
|
|
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-
|
|
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.
|
|
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
|
}
|