Which model, and what it can do
Signal knows what each model it was measured on can do, and tells you before any request is made. This file asks no model and needs no key.
pnpm add @niscorp/signal zodA client, described
describe says which model a client will call and what that model can do. It makes no request, so it needs no key.
import { SignalError, createSignal, modelRegistry } from '@niscorp/signal';
const signal = createSignal('groq');
const { model, modelKnown, capabilities } = signal.describe();
console.log(model, '· measured:', modelKnown, '· JSON Schema:', capabilities.nativeJsonSchema);Another model
model gives a client for another model on the same provider. What it can do is read from that model’s own row.
const larger = signal.model('openai/gpt-oss-120b').describe();
console.log(larger.model, '· measured:', larger.modelKnown, '· JSON Schema:', larger.capabilities.nativeJsonSchema);The measured rows
modelRegistry is the table those answers come from: a row for each model on each provider it was measured on, with the day. A model on two providers has two rows.
A model with no row still runs. It is taken not to follow a JSON Schema sent with the request.
console.log(Object.keys(modelRegistry).length, 'rows');
const unknown = signal.model('someone/new-model').describe();
console.log(unknown.model, '· measured:', unknown.modelKnown, '· JSON Schema:', unknown.capabilities.nativeJsonSchema);A reasoning effort the model does not take
How hard a model reasons is the provider’s scale, and it differs from model to model. One that a measured model does not take is refused when the client is made. For a model with no row it is sent unchecked.
try {
createSignal('groq', { options: { reasoningEffort: 'minimal' } });
} catch (error) {
if (!(error instanceof SignalError)) throw error;
console.log(error.message);
}An endpoint of your own
Any endpoint that speaks the OpenAI protocol is a provider: give its address, a key, a model, and what it can do. What you say it can do decides how a schema is sent to it, and whether tools are refused.
const local = createSignal({
baseUrl: 'http://localhost:11434/v1',
apiKey: 'none',
model: 'llama3.2',
capabilities: { nativeTools: true, nativeJsonMode: true },
});
console.log(local.describe().model, '· tools:', local.describe().capabilities.nativeTools);Run it.
No request was made. The first two lines are two models on Groq: only one of them was measured to follow a JSON Schema sent with the request, so the other one is sent the schema in JSON mode, with the schema in a message.
npx tsx models.mtsqwen/qwen3.8-27b · measured: true · JSON Schema: false openai/gpt-oss-120b · measured: true · JSON Schema: true 14 rows someone/new-model · measured: false · JSON Schema: false reasoningEffort "minimal" is not accepted by groq qwen/qwen3.8-27b (accepts: none, default, low, medium, high; measured 2026-09-24) llama3.2 · tools: true