Skip to content
中文

MockGPT ​

KIT · class · Runtime value

Configurable mock model instance. Create one per test or per mock server.

Import ​

ts
import { MockGPT } from '@jangts/agent-core/mock';
js
import { MockGPT } from '@jangts/agent-core/mock';

Other public entry points:@jangts/agent-core/mock.

Definition ​

ts
class MockGPT

Constructor ​

ts
new MockGPT(options: MockGPTOptions): MockGPT

Validate options and snapshot every rule.

Each rule's id, prompt, model, predicate and output are validated here, so configuration mistakes surface at construction rather than on the first request.

ParameterTypePassingDescription
optionsMockGPTOptionsRequired—
Fields of options
FieldTypeRequiredDescription
rulesreadonly Rule[]RequiredOrdered rules; the first rule whose filters all pass wins, so order is significant.
fallbackGenerator | undefinedOptionalGenerator used when no rule matches; absent makes an unmatched call a MOCK_RULE_NOT_FOUND error.
selectPrompt((request: ModelRequest) => string) | undefinedOptionalOverrides prompt extraction; must return a string synchronously; default is the last user text.
streamPick<OutputOptions, "chunkSize" | "intervalMs" | "wireChunkSize"> | undefinedOptionalDefaults merged under every generated output; explicit output fields take precedence.
seednumber | undefinedOptionalSeed for the deterministic PRNG (0-0xffffffff); default 1, so identical call sequences repeat.
clock(() => number) | undefinedOptionalMillisecond timestamp source for date generators and response created; must be finite.
recordLimitnumber | undefinedOptionalRing-buffer size of records; 0 disables recording; max 10 000; default 100.
maxBodyBytesnumber | undefinedOptionalMaximum accepted request body in bytes for fetch; default 1 MiB.
maxOutputCharsnumber | undefinedOptionalMaximum generated content in code points plus serialized tool calls; default 1 000 000.

Returns: MockGPT.

Instance properties ​

FieldTypeRequiredDescription
recordsreadonly CallRecord[]RequiredRead-only. Chronological records, oldest first, as detached copies. Rotates the ring buffer back into insertion order before returning, and deep-copies each record so callers cannot mutate runtime state through the result.
countsReadonly<Record<string, number>>RequiredRead-only. Accepted-call count per rule plus the fallback bucket, keyed by rule id.
activeRequestsnumberRequiredRead-only. Number of calls or response streams still in flight.

Member index ​

MemberPurpose
resetClear history, hit counts and the PRNG sequence.
fetchBound callback suitable for injection into an SDK's fetch option. Performs the HTTP side of the contract: route and method checks, byte-limited body reading, request validation, then either a JSON/SSE Response or an OpenAI-shaped error response. Transport faults (responses.reject) are rethrown as MOCK_NETWORK so SDKs observe a network failure rather than an HTTP error.
generateEvaluate rules and return data. No Request, Response, delay or streaming is created. Transport-only options in a generated descriptor (delayMs, intervalMs, interruptAfter) are validated but ignored here, so SDK tests can exercise generators and matching without simulating a network.

Member details ​

reset ​

Instance method.

Clear history, hit counts and the PRNG sequence.

ts
reset(): void

Clear history, hit counts and the PRNG sequence.

No call parameters.

Returns: void.

fetch ​

Instance method.

Bound callback suitable for injection into an SDK's fetch option.

Performs the HTTP side of the contract: route and method checks, byte-limited body reading, request validation, then either a JSON/SSE Response or an OpenAI-shaped error response. Transport faults (responses.reject) are rethrown as MOCK_NETWORK so SDKs observe a network failure rather than an HTTP error.

ts
fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>

MDN Reference

ParameterTypePassingDescription
inputRequestInfo | URLRequired—
initRequestInit | undefinedOptional—

Returns: Promise<Response>.

Awaited value: Response.

generate ​

Instance method.

Evaluate rules and return data. No Request, Response, delay or streaming is created.

Transport-only options in a generated descriptor (delayMs, intervalMs, interruptAfter) are validated but ignored here, so SDK tests can exercise generators and matching without simulating a network.

ts
generate(input: GenerationInput, { signal }?: GenerationOptions): Promise<Generated>

Evaluate rules and return data. No Request, Response, delay or streaming is created.

Transport-only options in a generated descriptor (delayMs, intervalMs, interruptAfter) are validated but ignored here, so SDK tests can exercise generators and matching without simulating a network.

ParameterTypePassingDescription
inputGenerationInputRequired—
__1GenerationOptionsOptional—
Fields of input
FieldTypeRequiredDescription
modelstringRequiredRead-only. Model identifier used for Rule.model filtering.
messagesreadonly Readonly<{ [key: string]: unknown; role: string; content?: unknown; tool_calls?: unknown; tool_call_id?: string; }>[]RequiredRead-only. Conversation whose last user message becomes the prompt.
Fields of __1
FieldTypeRequiredDescription
signalAbortSignal | undefinedOptionalCancels the call before or during generation; rejection reason is preserved as-is.

Returns: Promise<Generated>.

Awaited value: Generated.

Examples ​

Generate native JSON directly ​

Beginner · Node.js

ts
import { MockGPT } from '@jangts/agent-core/mock';
const mock = new MockGPT({ rules: [{ prompt: '服务状态', generator: { online: true, source: 'fixture' } }] });
const value = await mock.generate({ model: 'demo', messages: [{ role: 'user', content: '服务状态' }] });
console.log(value); // { online: true, source: 'fixture' }
console.log(mock.counts, mock.records);
js
import { MockGPT } from '@jangts/agent-core/mock';
const mock = new MockGPT({ rules: [{ prompt: '服务状态', generator: { online: true, source: 'fixture' } }] });
const value = await mock.generate({ model: 'demo', messages: [{ role: 'user', content: '服务状态' }] });
console.log(value); // { online: true, source: 'fixture' }
console.log(mock.counts, mock.records);

Inject the same instance into the real Core model boundary ​

Configuration · Node.js

ts
import { ModelRunner, Support } from '@jangts/agent-core';
import { MockGPT, responses } from '@jangts/agent-core/mock';
const mock = new MockGPT({ rules: [{ prompt: '服务状态', generator: responses.text('服务在线。', { chunkSize: 2, wireChunkSize: 3 }) }] });
const provider = new Support.CompatibleModelProvider({
  config: { baseUrl: 'https://mock.local/v1', apiKey: 'offline-example', model: 'demo' },
  ports: { request: mock.fetch },
});
const result = await new ModelRunner({ provider, maxCalls: 1 }).invoke('服务状态');
console.log(result.value, result.invocation.status);
js
import { ModelRunner, Support } from '@jangts/agent-core';
import { MockGPT, responses } from '@jangts/agent-core/mock';
const mock = new MockGPT({ rules: [{ prompt: '服务状态', generator: responses.text('服务在线。', { chunkSize: 2, wireChunkSize: 3 }) }] });
const provider = new Support.CompatibleModelProvider({
    config: { baseUrl: 'https://mock.local/v1', apiKey: 'offline-example', model: 'demo' },
    ports: { request: mock.fetch },
});
const result = await new ModelRunner({ provider, maxCalls: 1 }).invoke('服务状态');
console.log(result.value, result.invocation.status);

API reference, usage examples and developer guides.