Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Cerrado
#238 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@Pratham2511 ya está trabajando en esto.

Desde el 21/10/2026.

  • #289 de @Pratham2511 — fusionado

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
58/100
Tipo de issue
Nueva funcionalidad
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
typescript

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
TypeScript
Estrellas
13
Forks
7
Merge medio
3 h 33 min
PR fusionados (30 d)
176

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de codercops/chatcops

Todos los issues de codercops/chatcops

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.