ModelRequest
KIT · interface · Type contract
A normalized /chat/completions request, produced by snapshotRequest.
Optional undefined fields have already been dropped and stream is already defaulted, so rules always observe the same shape regardless of whether the caller used generate or the injected fetch.
Import
ts
import type { ModelRequest } from '@jangts/agent-core/mock';js
/** @typedef {import('@jangts/agent-core/mock').ModelRequest} ModelRequest */Other public entry points:@jangts/agent-core/mock.
Definition
ts
interface ModelRequestField structure
| Field | Type | Required | Description |
|---|---|---|---|
model | string | Required | Read-only. Model identifier; required, non-empty, and compared verbatim by Rule.model. |
messages | readonly Readonly<{ [key: string]: unknown; role: string; content?: unknown; tool_calls?: unknown; tool_call_id?: string; }>[] | Required | Read-only. Non-empty conversation; the last user message supplies the default prompt. |
stream | boolean | Required | Read-only. Whether the codec should emit SSE; defaulted to false during normalization. |
tools | readonly unknown[] | undefined | Optional | Read-only. Tool schemas declared by the client; only the array shape is validated. |
stream_options | Readonly<{ include_usage?: boolean; }> | undefined | Optional | Read-only. include_usage: true appends a terminal usage-only chunk to the stream. |
Index structure
| Field | Type | Required | Description |
|---|---|---|---|
[key: string] | unknown | Required | Read-only. Index entry. |
Examples
- MockGPT: response descriptions and scenario generators: Fixed results serve strict regression, input-dependent generators explore wiring, and explicit response descriptions cover failure and streaming scenarios.
Encode a validated model result
Extension · Node.js
The adapter handles request validation, pre-first-byte delay, and lifecycle; the encoder does not execute rules or modify MockGPT call records.
ts
import { encodeModelResponse } from '@jangts/agent-core/mock';
const controller = new AbortController();
const response = encodeModelResponse(
{ model: 'demo', messages: [{ role: 'user', content: '状态' }], stream: false },
{ content: '服务在线。' }, 'mock-1', 1700000000, controller.signal,
(error, cancelled) => console.log({ error, cancelled }),
);
console.log(await response.json());js
import { encodeModelResponse } from '@jangts/agent-core/mock';
const controller = new AbortController();
const response = encodeModelResponse({ model: 'demo', messages: [{ role: 'user', content: '状态' }], stream: false }, { content: '服务在线。' }, 'mock-1', 1700000000, controller.signal, (error, cancelled) => console.log({ error, cancelled }));
console.log(await response.json());Generate an inspectable summary from the input
Beginner · Node.js
ts
import { MockGPT, generators } from '@jangts/agent-core/mock';
const mock = new MockGPT({ rules: [{ generator: generators.summary({ maxChars: 120, count: 2 }) }] });
console.log(await mock.generate({ model: 'demo', messages: [{ role: 'user', content: '服务刚完成维护。健康检查通过。用户可以查询状态。' }] }));
console.log(mock.records);js
import { MockGPT, generators } from '@jangts/agent-core/mock';
const mock = new MockGPT({ rules: [{ generator: generators.summary({ maxChars: 120, count: 2 }) }] });
console.log(await mock.generate({ model: 'demo', messages: [{ role: 'user', content: '服务刚完成维护。健康检查通过。用户可以查询状态。' }] }));
console.log(mock.records);