MockGPT
KIT · class · 运行时值
Configurable mock model instance. Create one per test or per mock server.
导入
import { MockGPT } from '@jangts/agent-core/mock';import { MockGPT } from '@jangts/agent-core/mock';其他公开入口:@jangts/agent-core/mock。
定义
class MockGPT构造函数
new MockGPT(options: MockGPTOptions): MockGPTValidate 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.
| 参数 | 类型 | 传递 | 说明 |
|---|---|---|---|
options | MockGPTOptions | 必需 | — |
options 的字段
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
rules | readonly Rule[] | 必需 | Ordered rules; the first rule whose filters all pass wins, so order is significant. |
fallback | Generator | undefined | 可省略 | Generator used when no rule matches; absent makes an unmatched call a MOCK_RULE_NOT_FOUND error. |
selectPrompt | ((request: ModelRequest) => string) | undefined | 可省略 | Overrides prompt extraction; must return a string synchronously; default is the last user text. |
stream | Pick<OutputOptions, "chunkSize" | "intervalMs" | "wireChunkSize"> | undefined | 可省略 | Defaults merged under every generated output; explicit output fields take precedence. |
seed | number | undefined | 可省略 | Seed for the deterministic PRNG (0-0xffffffff); default 1, so identical call sequences repeat. |
clock | (() => number) | undefined | 可省略 | Millisecond timestamp source for date generators and response created; must be finite. |
recordLimit | number | undefined | 可省略 | Ring-buffer size of records; 0 disables recording; max 10 000; default 100. |
maxBodyBytes | number | undefined | 可省略 | Maximum accepted request body in bytes for fetch; default 1 MiB. |
maxOutputChars | number | undefined | 可省略 | Maximum generated content in code points plus serialized tool calls; default 1 000 000. |
返回: MockGPT。
实例属性
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
records | readonly CallRecord[] | 必需 | 只读。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. |
counts | Readonly<Record<string, number>> | 必需 | 只读。Accepted-call count per rule plus the fallback bucket, keyed by rule id. |
activeRequests | number | 必需 | 只读。Number of calls or response streams still in flight. |
成员目录
| 成员 | 用途 |
|---|---|
reset | Clear history, hit counts and the PRNG sequence. |
fetch | 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. |
generate | 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. |
成员详情
reset
实例方法。
Clear history, hit counts and the PRNG sequence.
reset(): voidClear history, hit counts and the PRNG sequence.
无调用参数。
返回: void。
fetch
实例方法。
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.
fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>| 参数 | 类型 | 传递 | 说明 |
|---|---|---|---|
input | RequestInfo | URL | 必需 | — |
init | RequestInit | undefined | 可省略 | — |
返回: Promise<Response>。
等待后的值: Response。
generate
实例方法。
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.
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.
| 参数 | 类型 | 传递 | 说明 |
|---|---|---|---|
input | GenerationInput | 必需 | — |
__1 | GenerationOptions | 可省略 | — |
input 的字段
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
model | string | 必需 | 只读。Model identifier used for Rule.model filtering. |
messages | readonly Readonly<{ [key: string]: unknown; role: string; content?: unknown; tool_calls?: unknown; tool_call_id?: string; }>[] | 必需 | 只读。Conversation whose last user message becomes the prompt. |
__1 的字段
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
signal | AbortSignal | undefined | 可省略 | Cancels the call before or during generation; rejection reason is preserved as-is. |
返回: Promise<Generated>。
等待后的值: Generated。
使用示例
- MockGPT:直接生成与 Provider 注入:直接取得字符串或 JSON;需要检验模型通信时,将同一个实例注入 Provider。
直接生成原生 JSON
入门 · Node.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);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);同一实例注入真实 Core 模型边界
配置 · Node.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);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);