feat(providers): chutes imageToText (dots.ocr seed)

This commit is contained in:
Xiangzhe
2026-08-13 17:51:57 -03:00
parent 91de8b3f82
commit 4c3a0db121
2 changed files with 11 additions and 0 deletions

View File

@@ -932,6 +932,10 @@ export const APIKEY_PROVIDERS_GATEWAYS = {
"No free tier as of 2026 — Chutes moved to pay-as-you-go (free Early Access ended 2026-03).",
authHint: "Bearer API key for the Chutes OpenAI-compatible gateway.",
passthroughModels: true,
// dots.ocr (rednote-hilab/dots.ocr) is served via Chutes discovery — no static
// model entry needed (passthroughModels). Declare imageToText alongside llm
// (declaring serviceKinds means "llm" must be explicit too, see #10275).
serviceKinds: ["llm", "imageToText"],
},
// Factory AI ("Factory Droids") subscription gateway — the same backend the
// local `droid` CLI shells into, exposed here as an OpenAI-compatible HTTP

View File

@@ -1,6 +1,7 @@
import { test } from "node:test";
import assert from "node:assert/strict";
import { resolveProviderServiceKinds } from "../../open-sse/config/mediaServiceKinds.ts";
import { AI_PROVIDERS } from "../../src/shared/constants/providers.ts";
test("OCR-registry providers derive imageToText without manual declaration", () => {
assert.ok(resolveProviderServiceKinds("mistral", undefined).includes("imageToText"));
@@ -12,3 +13,9 @@ test("OCR-registry providers derive imageToText without manual declaration", ()
test("non-OCR providers do not gain imageToText implicitly", () => {
assert.ok(!resolveProviderServiceKinds("groq", undefined).includes("imageToText"));
});
test("chutes declares llm + imageToText (dots.ocr seed, served via passthrough discovery)", () => {
const kinds = resolveProviderServiceKinds("chutes", AI_PROVIDERS.chutes.serviceKinds);
assert.ok(kinds.includes("imageToText"));
assert.ok(kinds.includes("llm"));
});