mirror of
https://github.com/openclaw/openclaw.git
synced 2026-10-04 10:10:01 +00:00
chore(qa-lab): upgrade AIMock to 1.43.0 (#162705)
This commit is contained in:
parent
23172d8b8c
commit
d8a110b1a1
4 changed files with 23 additions and 33 deletions
|
|
@ -5,7 +5,7 @@
|
|||
"description": "OpenClaw QA lab plugin with private debugger UI and scenario runner",
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"@copilotkit/aimock": "1.42.1",
|
||||
"@copilotkit/aimock": "1.43.0",
|
||||
"@modelcontextprotocol/sdk": "1.30.0",
|
||||
"@openclaw/crabline": "0.1.27",
|
||||
"@openclaw/fs-safe": "0.22.0",
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
import type { IncomingMessage, ServerResponse } from "node:http";
|
||||
import * as AIMock from "@copilotkit/aimock";
|
||||
import {
|
||||
type Journal,
|
||||
LLMock,
|
||||
type ChatCompletionRequest,
|
||||
type Fixture,
|
||||
getTextContent,
|
||||
isChatCompletionBody,
|
||||
type JournalEntry,
|
||||
type Mountable,
|
||||
} from "@copilotkit/aimock";
|
||||
|
|
@ -31,28 +31,17 @@ type AimockToolFacts = Pick<
|
|||
AimockRequestFacts,
|
||||
"plannedToolName" | "plannedToolCallId" | "toolOutputCallId"
|
||||
>;
|
||||
type AimockChatJournalEntry = Pick<JournalEntry, "response"> & {
|
||||
body: ChatCompletionRequest;
|
||||
};
|
||||
type AimockJournalAdd = (
|
||||
entry: Omit<JournalEntry, "id" | "timestamp">,
|
||||
matchedFixture?: Fixture,
|
||||
) => JournalEntry;
|
||||
type AimockNamespaceWithChatCompletionBodyGuard = typeof AIMock & {
|
||||
isChatCompletionBody?: (body: JournalEntry["body"]) => boolean;
|
||||
};
|
||||
type AimockRequestObservation =
|
||||
| { kind: "retained-body"; tools: AimockToolFacts }
|
||||
| { kind: "retained-body"; body: ChatCompletionRequest; tools: AimockToolFacts }
|
||||
| { kind: "projected"; projection: AimockRequestProjection };
|
||||
|
||||
// SAFETY: AIMock 1.42 declarations omit this 1.43 export; runtime probing keeps the bridge compatible.
|
||||
const upstreamIsChatCompletionBody = (AIMock as AimockNamespaceWithChatCompletionBodyGuard)
|
||||
.isChatCompletionBody;
|
||||
|
||||
function isChatCompletionBody(body: JournalEntry["body"]): body is ChatCompletionRequest {
|
||||
return (
|
||||
upstreamIsChatCompletionBody?.(body) ??
|
||||
(Array.isArray(body?.messages) && typeof body.model === "string")
|
||||
);
|
||||
}
|
||||
|
||||
function requestMessages(body: ChatCompletionRequest | null | undefined) {
|
||||
return Array.isArray(body?.messages) ? body.messages : [];
|
||||
}
|
||||
|
|
@ -115,7 +104,7 @@ function countImageInputs(value: unknown): number {
|
|||
return (imageLikeType ? 1 : 0) + nested;
|
||||
}
|
||||
|
||||
function extractToolFacts(entry: Pick<JournalEntry, "response" | "body">): AimockToolFacts {
|
||||
function extractToolFacts(entry: AimockChatJournalEntry): AimockToolFacts {
|
||||
const response = entry.response.fixture?.response as
|
||||
| {
|
||||
toolCalls?: Array<{ name?: unknown; id?: unknown; callId?: unknown; toolCallId?: unknown }>;
|
||||
|
|
@ -131,7 +120,7 @@ function extractToolFacts(entry: Pick<JournalEntry, "response" | "body">): Aimoc
|
|||
}
|
||||
|
||||
function extractRequestFacts(
|
||||
body: JournalEntry["body"],
|
||||
body: ChatCompletionRequest,
|
||||
tools: AimockToolFacts,
|
||||
): AimockRequestFacts {
|
||||
const model = typeof body?.model === "string" ? body.model : "";
|
||||
|
|
@ -212,21 +201,22 @@ function createDebugMount(): Mountable {
|
|||
// so the debug boundary remains monotonic after retained entries rotate.
|
||||
journal.add = (entry, matchedFixture?: Fixture) => {
|
||||
const recorded = addJournalEntry(entry, matchedFixture);
|
||||
if (!isChatCompletionBody(entry.body)) {
|
||||
const body = entry.body;
|
||||
if (!isChatCompletionBody(body)) {
|
||||
return recorded;
|
||||
}
|
||||
const tools = extractToolFacts(entry);
|
||||
const tools = extractToolFacts({ response: entry.response, body });
|
||||
// Upstream keeps <=64 KiB bodies intact; only discarded bodies need an
|
||||
// extra bounded projection. Weak entry ownership follows eviction/reset.
|
||||
observations.set(
|
||||
recorded,
|
||||
recorded.body === entry.body
|
||||
? { kind: "retained-body", tools }
|
||||
? { kind: "retained-body", body, tools }
|
||||
: {
|
||||
kind: "projected",
|
||||
projection: boundRequestFacts({
|
||||
complete: true,
|
||||
facts: extractRequestFacts(entry.body, tools),
|
||||
facts: extractRequestFacts(body, tools),
|
||||
}),
|
||||
},
|
||||
);
|
||||
|
|
@ -302,7 +292,7 @@ function createDebugMount(): Mountable {
|
|||
const plannedToolCallId = plannedToolCallIds.get(index);
|
||||
let projection: AimockRequestProjection =
|
||||
observation.kind === "retained-body"
|
||||
? { complete: true, facts: extractRequestFacts(entry.body, observation.tools) }
|
||||
? { complete: true, facts: extractRequestFacts(observation.body, observation.tools) }
|
||||
: observation.projection;
|
||||
if (plannedToolCallId) {
|
||||
projection = projection.complete
|
||||
|
|
@ -316,7 +306,7 @@ function createDebugMount(): Mountable {
|
|||
incomplete.push({ cursor, ...projection });
|
||||
continue;
|
||||
}
|
||||
const body = entry.body ?? {};
|
||||
const body = observation.kind === "retained-body" ? observation.body : (entry.body ?? {});
|
||||
snapshots.push({ raw: JSON.stringify(body), body, ...projection.facts });
|
||||
}
|
||||
if (incomplete.length > 0) {
|
||||
|
|
|
|||
|
|
@ -2312,7 +2312,7 @@
|
|||
"@a2ui/lit": "0.11.0",
|
||||
"@a2ui/web_core": "0.11.0",
|
||||
"@babel/types": "8.0.6",
|
||||
"@copilotkit/aimock": "1.42.1",
|
||||
"@copilotkit/aimock": "1.43.0",
|
||||
"@lit-labs/signals": "0.3.0",
|
||||
"@lit/context": "1.1.6",
|
||||
"@lit/task": "1.0.3",
|
||||
|
|
|
|||
14
pnpm-lock.yaml
generated
14
pnpm-lock.yaml
generated
|
|
@ -433,8 +433,8 @@ importers:
|
|||
specifier: 8.0.6
|
||||
version: 8.0.6
|
||||
'@copilotkit/aimock':
|
||||
specifier: 1.42.1
|
||||
version: 1.42.1(vitest@5.0.1)
|
||||
specifier: 1.43.0
|
||||
version: 1.43.0(vitest@5.0.1)
|
||||
'@lit-labs/signals':
|
||||
specifier: 0.3.0
|
||||
version: 0.3.0
|
||||
|
|
@ -1985,8 +1985,8 @@ importers:
|
|||
extensions/qa-lab:
|
||||
dependencies:
|
||||
'@copilotkit/aimock':
|
||||
specifier: 1.42.1
|
||||
version: 1.42.1(vitest@5.0.1)
|
||||
specifier: 1.43.0
|
||||
version: 1.43.0(vitest@5.0.1)
|
||||
'@modelcontextprotocol/sdk':
|
||||
specifier: 1.30.0
|
||||
version: 1.30.0(supports-color@10.2.2)(zod@4.6.5)
|
||||
|
|
@ -3547,8 +3547,8 @@ packages:
|
|||
'@codemirror/view@6.43.13':
|
||||
resolution: {integrity: sha512-sihaFrUzAsYBQsL9J2t69y8nfMQGwcYmggAZsk+kjPbjYZMyuf2hU8tUNTZ+P+isb6XRr8JE22TZlJxBoVdH1A==}
|
||||
|
||||
'@copilotkit/aimock@1.42.1':
|
||||
resolution: {integrity: sha512-Kc3a4sP89kDENdRypKdmlynnmmYsn96ZYHCPCRdbFd2kw0qg1XufzEWIemS0YP5b/f7ssuFm4Kt8KbGwlx2WkA==}
|
||||
'@copilotkit/aimock@1.43.0':
|
||||
resolution: {integrity: sha512-V8D8cjSMtAR4rHaD2ulp3DR/ZguXQjDNOqwKDNvjb/OJL/KR1I0SDf5xpRCd+TYKjhmf9fM8Xpg3QBKPmV9Kmw==}
|
||||
engines: {node: '>=20.15.0'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
|
|
@ -11309,7 +11309,7 @@ snapshots:
|
|||
style-mod: 4.1.4
|
||||
w3c-keyname: 2.2.8
|
||||
|
||||
'@copilotkit/aimock@1.42.1(vitest@5.0.1)':
|
||||
'@copilotkit/aimock@1.43.0(vitest@5.0.1)':
|
||||
optionalDependencies:
|
||||
vitest: 5.0.1(patch_hash=90ba2969491e095cc2e92a4d38256dfcf64f85078ec29e1762b9429a00b35901)(@opentelemetry/api@1.9.1)(@types/node@26.6.2)(@vitest/browser-playwright@5.0.1)(@vitest/coverage-v8@5.0.1)(@vitest/ui@5.0.1)(jsdom@30.1.1(@noble/hashes@2.4.0))(vite@8.3.0(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue