Compare commits

...

6 Commits

Author SHA1 Message Date
Diego Rodrigues de Sa e Souza
010e1fb6f9 Merge branch 'release/v3.8.50' into feat/6671-deepai-multimodal-provider 2026-08-05 23:04:03 -03:00
diegosouzapw
ab2bde20b9 fix(api): restore accidentally deleted agent-skills coverage route
Commit a5212536c2 (DeepAI provider feature) deleted
src/app/api/agent-skills/coverage/route.ts by mistake while touching
unrelated files, breaking tests/unit/agentSkills-routes.test.ts
(ERR_MODULE_NOT_FOUND) and the openapi-routes doc-sync gate, which
still documents GET /api/agent-skills/coverage.
2026-08-05 19:57:41 -03:00
Diego Rodrigues de Sa e Souza
e0827d57f1 Merge branch 'release/v3.8.50' into feat/6671-deepai-multimodal-provider 2026-08-05 16:24:30 -03:00
Diego Rodrigues de Sa e Souza
af35e47d69 Merge branch 'release/v3.8.50' into feat/6671-deepai-multimodal-provider 2026-08-05 13:21:44 -03:00
Diego Rodrigues de Sa e Souza
dbd31e91f4 Merge branch 'release/v3.8.50' into feat/6671-deepai-multimodal-provider 2026-08-05 12:00:36 -03:00
diegosouzapw
a5212536c2 feat(providers): add DeepAI as paid API-key image provider (#6671) 2026-08-04 14:43:30 -03:00
7 changed files with 59 additions and 0 deletions

1
_tasks Symbolic link
View File

@@ -0,0 +1 @@
/home/diegosouzapw/dev/proxys/OmniRoute/_tasks

View File

@@ -0,0 +1 @@
- **feat(providers):** add DeepAI as paid API-key image provider ([#6671](https://github.com/diegosouzapw/OmniRoute/issues/6671))

View File

@@ -14,6 +14,7 @@ import { notion_webProvider } from "./registry/notion-web/index.ts";
import { anthropicProvider } from "./registry/anthropic/index.ts";
import { sambanovaProvider } from "./registry/sambanova/index.ts";
import { puterProvider } from "./registry/puter/index.ts";
import { deepaiProvider } from "./registry/deepai/index.ts";
import { upstageProvider } from "./registry/upstage/index.ts";
import { nebiusProvider } from "./registry/nebius/index.ts";
import { fireworksProvider } from "./registry/fireworks/index.ts";
@@ -236,6 +237,7 @@ export const REGISTRY: Record<string, RegistryEntry> = {
sambanova: sambanovaProvider,
puter: puterProvider,
upstage: upstageProvider,
deepai: deepaiProvider,
nebius: nebiusProvider,
fireworks: fireworksProvider,
llamagate: llamagateProvider,

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../shared";
export const deepaiProvider: RegistryEntry = {
id: "deepai",
alias: "deepai",
format: "custom",
baseUrl: "https://api.deepai.org",
authType: "apikey",
authHeader: "api-key",
models: [
{ id: "text2img", name: "Text to Image" },
],
};

View File

@@ -62,6 +62,7 @@ export const IMAGE_ONLY_PROVIDER_IDS = new Set([
"topaz",
"segmind",
"freepik",
"deepai",
]);
export const AGGREGATOR_PROVIDER_IDS = new Set([

View File

@@ -287,4 +287,17 @@ export const APIKEY_PROVIDERS_SPECIALTY = {
authHint: "X-API-Key from agent.tinyfish.ai/api-keys",
serviceKinds: ["webFetch"],
},
deepai: {
id: "deepai",
alias: "deepai",
name: "DeepAI",
icon: "psychology",
color: "#4A90D9",
textIcon: "DA",
website: "https://deepai.org",
authHint:
"Use your DeepAI API key. Get one at deepai.org — requires a Pro subscription ($9.99/mo).",
apiHint:
"DeepAI uses per-endpoint REST calls (e.g. /api/text2img) instead of OpenAI chat/completions. OmniRoute adapts OpenAI image generation requests to DeepAI's /api/{slug} endpoints.",
},
};

View File

@@ -0,0 +1,28 @@
import { describe, it } from "node:test";
import { ok, equal } from "node:assert/strict";
describe("DeepAI provider registration", () => {
it("is listed in IMAGE_ONLY_PROVIDER_IDS", async () => {
const { IMAGE_ONLY_PROVIDER_IDS } = await import("@/shared/constants/providers");
ok(IMAGE_ONLY_PROVIDER_IDS.has("deepai"), "deepai should be in IMAGE_ONLY_PROVIDER_IDS");
});
it("has a catalog entry in specialty-media", async () => {
const { APIKEY_PROVIDERS_SPECIALTY } = await import(
"@/shared/constants/providers/apikey/specialty-media"
);
ok(APIKEY_PROVIDERS_SPECIALTY.deepai, "deepai catalog entry should exist");
equal(APIKEY_PROVIDERS_SPECIALTY.deepai.id, "deepai");
equal(APIKEY_PROVIDERS_SPECIALTY.deepai.icon, "psychology");
});
it("has a registry entry", async () => {
const { deepaiProvider } = await import(
"@/../open-sse/config/providers/registry/deepai/index"
);
ok(deepaiProvider, "deepai registry entry should exist");
equal(deepaiProvider.id, "deepai");
equal(deepaiProvider.authType, "apikey");
ok(deepaiProvider.models?.length >= 1, "should have at least one model");
});
});