Add an openai-compatible provider type and registerProvider() for custom providers
维护者通常 1 天内回复
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 58/100
- Issue 类型
- 功能
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- typescript
调研方向
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.
由索引模型根据 Issue 内容生成。
描述
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.
- 主要语言
- TypeScript
- 星标
- 13
- 派生
- 7
- 平均合并
- 3 小时 33 分钟
- 30 天内合并 PR
- 176
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
codercops/chatcops 的其他 Issue
-
Add startup checks that catch weak or leaked security settings可能已有人在做 @varun-pahuja 于 2 天前认领。 未关闭enhancement good first issue hacktoberfest server
codercops/chatcops#231 · 3 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
-
Type-check the TypeScript samples in the docs可能已有人在做 @An16og 于 2 天前认领。 未关闭documentation hacktoberfest help wanted testing
难度 4/5 3-5 天 新手友好度 70/100
codercops/chatcops#201 · 7 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
-
hacktoberfest
难度 1/5 1 小时以内 新手友好度 35/100
维护者通常 1 天内回复
-
Add built-in translations to the widget可能已有人在做 @piyusshhjangid 于 1 天前认领。 未关闭help wanted widget
难度 4/5 3-5 天 新手友好度 52/100
codercops/chatcops#55 · 3 条评论 ·
维护者通常 1 天内回复
查看 codercops/chatcops 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 66/100
db-ux-design-system/core-web#8613 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 82/100
维护者通常 1 天内回复
-
bug:new
难度 1/5 1 小时以内 新手友好度 78/100
callstackincubator/simlock#934 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 68/100
gchq/LD-Explorer#286 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复