Add an openai-compatible provider type and registerProvider() for custom providers
Maintainer antworten meist innerhalb von 1 Tag
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 58/100
- Issue-Typ
- Feature
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- typescript
- Bereich
- backend-api-design
Rechercherichtung
Start with packages/core/src/providers/base.ts and openai.ts, then review types.ts and the provider config and OpenAI tests named in the issue. Add the compatible provider options and custom provider registry while preserving the built-in provider behavior. Done means the listed acceptance tests pass, pnpm test:coverage and pnpm lint pass, and the @chatcops/core minor changeset is included.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Pointing ChatCops at Ollama, LM Studio, vLLM, Groq or OpenRouter works today through type: 'openai' with a baseURL, but it's awkward. You need an API key even when the server doesn't use one, it sends max_completion_tokens, which many of those servers don't know, and there's no way to turn tools off for a model that can't call them. A provider that isn't OpenAI-shaped can't be plugged in at all: createProvider only knows three types (packages/core/src/providers/base.ts, lines 10 to 27).
What to do
- A built-in
openai-compatibletype:provider: { type: 'openai-compatible', baseURL: 'http://localhost:11434/v1', // required model: 'llama3.2', // required, no default apiKey: process.env.GROQ_API_KEY, // optional headers: { 'HTTP-Referer': 'https://acme.com' }, // optional, sent on every request supportsTools: false, // optional, default true }- It runs on the OpenAI SDK, like the
openaitype. GiveOpenAIProvider's constructor (packages/core/src/providers/openai.ts, line 42) a small options argument rather than copying the class.nameis'openai-compatible', andheadersbecomes the SDK'sdefaultHeaders. maxTokensParamdefaults to'max_tokens'for this type.- Without
apiKey, pass a placeholder to the SDK, since it refuses to start with none. - With
supportsTools: false, don't sendtools, and log one warning if the server config has tools. - Throw a clear error at setup when
baseURLormodelis missing.
- It runs on the OpenAI SDK, like the
registerProvider(type, factory)in a newpackages/core/src/providers/registry.ts, exported from@chatcops/core:registerProvider('my-llm', async (config) => new MyProvider(config));createProviderlooks up registered types before the built-in switch.- Registering a built-in name (
claude,openai,gemini,openai-compatible) throws. - Registering the same custom name twice replaces it, so hot reload works.
ProviderConfig.type(packages/core/src/types.ts) widens to the four built-ins plus(string & {}), so editors still suggest the built-ins.apiKeybecomes optional in the type. The three hosted providers throw a clear error at setup when it's missing, which the server already reports nicely since #216.
Where to look
packages/core/src/providers/base.ts(createProvider)packages/core/src/providers/openai.ts(constructor andrequest())packages/core/tests/providers/provider-config.test.ts,openai.test.tswebsite/src/content/docs/core/providers.mdx(a separate issue updates the docs page once this lands)
Acceptance criteria
-
openai-compatibleworks without an API key, sendsmax_tokens, sends the extra headers, and leaves outtoolswhensupportsToolsis false (tests with a fake client or a fakefetch) - A missing
baseURLormodelgives a clear setup error -
registerProviderworks for a custom type, refuses built-in names, and replaces on a second register - An unknown, unregistered type still gives
Unknown provider type: ... - If you have Ollama or LM Studio running locally, say in the PR whether a real request worked (optional, but it helps)
- Changeset for
@chatcops/core(minor) -
pnpm test:coverageandpnpm lintpass
Please get this merged by Nov 3. I rewrite openai.ts after that.
Want to work on this? Comment below and I'll assign it to you. Please take one issue at a time, branch off dev, and open your PR against dev with Closes #<this issue number>. Setup notes (pnpm, build before test) are in CONTRIBUTING.md.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 13
- Forks
- 7
- Ø Merge
- 3 Std. 28 Min.
- Gemergte PRs (30 T.)
- 182
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus codercops/chatcops
-
Type-check the TypeScript samples in the docsEvtl. vergeben @An16og hat das vor 4 Tagen übernommen. Offendocumentation hacktoberfest help wanted testing
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 70/100
codercops/chatcops#201 · 7 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
hacktoberfest
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 35/100
codercops/chatcops#73 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Add built-in translations to the widgetEvtl. vergeben @piyusshhjangid hat das vor 3 Tagen übernommen. Offenhelp wanted widget
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 52/100
codercops/chatcops#55 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in codercops/chatcops
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
pingdotgg/t3code#24900 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
inu-appcenter/UNIDorm-web#411 ·
Maintainer antworten meist innerhalb von 1 Tag
-
🐛 bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
ranxianglei/billion-context#4720 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:arcade game p3-medium ready-for-agent type:bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
fderuiter/deruiter.dev#2840 ·
Maintainer antworten meist innerhalb von 1 Tag