Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Add an openai-compatible provider type and registerProvider() for custom providers

已关闭
#238 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

@Pratham2511 已经在做这个了。

开始于 2026年10月21日。

  • #289 来自 @Pratham2511 —— 已合并

评估

难度
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 内容生成。

描述

core enhancement hacktoberfest help wanted

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

  1. A built-in openai-compatible type:
    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 openai type. Give OpenAIProvider's constructor (packages/core/src/providers/openai.ts, line 42) a small options argument rather than copying the class. name is 'openai-compatible', and headers becomes the SDK's defaultHeaders.
    • maxTokensParam defaults 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 send tools, and log one warning if the server config has tools.
    • Throw a clear error at setup when baseURL or model is missing.
  2. registerProvider(type, factory) in a new packages/core/src/providers/registry.ts, exported from @chatcops/core:
    registerProvider('my-llm', async (config) => new MyProvider(config));
    
    • createProvider looks 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.
    • apiKey becomes 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 and request())
  • packages/core/tests/providers/provider-config.test.ts, openai.test.ts
  • website/src/content/docs/core/providers.mdx (a separate issue updates the docs page once this lands)

Acceptance criteria

  • openai-compatible works without an API key, sends max_tokens, sends the extra headers, and leaves out tools when supportsTools is false (tests with a fake client or a fake fetch)
  • A missing baseURL or model gives a clear setup error
  • registerProvider works 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:coverage and pnpm lint pass

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

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

codercops/chatcops 的其他 Issue

查看 codercops/chatcops 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。