Files
rea/tests/acceptance/modelArtifactCli.test.ts
T

1307 lines
44 KiB
TypeScript

import { createHash } from "node:crypto";
import { readFile, writeFile, unlink } from "node:fs/promises";
import { join } from "node:path";
import { expect, it } from "vitest";
import { toolContract } from "../../src/contracts/toolContracts.js";
import {
modelArtifactSchema,
type ModelArtifact,
} from "../../src/domain/model/modelArtifact.js";
import {
modelArtifactSummaryViewResultSchema,
analysisViewResultSchema,
} from "../../src/domain/analysisView/analysisView.js";
import { createEvidence, parseEvidence } from "../../src/domain/evidence.js";
import { readEvidenceBundle } from "../../src/application/EvidenceBundleFiles.js";
import { connectLocalToolsMcp } from "../fixtures/localToolsMcp.js";
import { parseMcpToolError } from "../fixtures/mcpToolError.js";
import {
ggufFixture,
ggufKLayouts,
ggufShiftedTypeLayouts,
safetensorsFixture,
} from "../fixtures/model/model.js";
import { createTestTempDirectory } from "../fixtures/temporaryDirectory.js";
import { cliTest } from "../support/cli/cliFixture.js";
cliTest(
"preserves lowercase hyphenated GGUF architecture metadata from the published writer",
async ({ cli }) => {
const root = await createTestTempDirectory(
"rea-model-hyphen-architecture-",
);
const base = ggufFixture();
for (const architecture of ["gpt-oss", "wavtokenizer-dec"] as const) {
const path = join(root, `${architecture}.gguf`);
const bytes = ggufFixture({
tensors: [],
metadata: [
{
key: "general.architecture",
type: 8,
value: base.text(architecture),
},
{
key: `${architecture}.context_length`,
type: 4,
value: base.u32(4096),
},
],
}).bytes;
await writeFile(path, bytes);
const response = await cli.run({
arguments: [
"inspect-model-artifact",
path,
"--detail",
"complete",
"--json",
],
});
expect(response.exitCode, response.stderr).toBe(0);
const report = modelArtifactSchema.parse(
toolContract("inspect_model_artifact").outputSchema.parse(response.json)
.normalized_result,
);
expect(report.metadata.map(({ key, value }) => ({ key, value }))).toEqual(
[
{ key: "general.architecture", value: architecture },
{ key: `${architecture}.context_length`, value: 4096 },
],
);
expect(report.artifact.sha256).toBeNull();
}
},
);
cliTest(
"preserves unresolved Q8_1 layout through CLI, MCP summaries and retained tensor/type pages",
async ({ cli }) => {
const root = await createTestTempDirectory("rea-model-q8-layout-");
const { call } = await connectLocalToolsMcp();
for (const blockBytes of [36, 40]) {
const path = join(root, `blocks-${String(blockBytes)}.gguf`);
const base = ggufFixture();
// Released layouts share GGUF v3/type 9/quantization version 2.
// Trailing alignment space is not a storage-layout declaration.
const fixture = ggufFixture({
metadata: [
{ key: "general.quantization_version", type: 4, value: base.u32(2) },
],
tensors: [
{ name: "control", type: 0, shape: [4n], offset: 0n, bytes: 16 },
{
name: "weight",
type: 9,
shape: [320n],
offset: 32n,
bytes: 10 * blockBytes,
},
],
});
const bytes = Buffer.concat([fixture.bytes, Buffer.alloc(16)]);
await writeFile(path, bytes);
const cliResult = await cli.run({
arguments: [
"inspect-model-artifact",
path,
"--detail",
"complete",
"--hash",
"full",
"--json",
],
});
expect(cliResult.exitCode, cliResult.stderr).toBe(0);
const report = modelArtifactSchema.parse(
parseEvidence(cliResult.json).normalized_result,
);
const sha256 = createHash("sha256").update(bytes).digest("hex");
expect(report.artifact).toMatchObject({ path, sha256 });
expect(report.tensors[0]).toMatchObject({
byte_length: 16,
storage_validation: "consistent",
});
const weight = {
index: 1,
name: "weight",
type: "Q8_1",
type_id: 9,
shape: ["320"],
file_offset: fixture.dataOffset + 32,
byte_length: null,
byte_length_state: "unknown",
storage_validation: "unknown",
};
expect(report.tensors[1]).toMatchObject(weight);
expect(report.totals).toMatchObject({
parameter_count: "324",
tensor_bytes: null,
by_type: [
{ type: "F32", bytes: 16 },
{ type: "Q8_1", bytes: null },
],
});
const coverage = { storage_sizes: "partial", tensor_ranges: "partial" };
expect(report.coverage).toMatchObject(coverage);
const limitation = expect.stringContaining(
"Q8_1 has released 40-byte and 36-byte layouts",
);
expect(report.limitations).toContainEqual(limitation);
const response = await call("inspect_model_artifact", {
path,
hash: "full",
});
expect(response.isError, JSON.stringify(response)).not.toBe(true);
const summary = modelArtifactSummaryViewResultSchema.parse(
parseEvidence(response.structuredContent).normalized_result,
);
expect(summary.summary).toMatchObject({
artifact: { path, sha256 },
totals: { parameter_count: "324", tensor_bytes: null },
coverage,
});
expect(summary.summary.limitations).toContainEqual(limitation);
expect(Buffer.compare(await readFile(path), bytes)).toBe(0);
await unlink(path);
const source = {
kind: "retained-evidence",
evidence_id: summary.parent_evidence_id,
};
const tensorResponse = await call("inspect_analysis_view", {
source,
view: {
kind: "model-artifact",
collection: "tensors",
types: ["Q8_1"],
storage_validation: ["unknown"],
fields: Object.keys(weight).filter((field) => field !== "index"),
},
});
expect(tensorResponse.isError, JSON.stringify(tensorResponse)).not.toBe(
true,
);
const tensorView = analysisViewResultSchema.parse(
parseEvidence(tensorResponse.structuredContent).normalized_result,
);
if (tensorView.kind !== "model-artifact")
throw new Error("Incorrect tensor view");
expect(tensorView.items).toEqual([weight]);
expect(tensorView.source).toMatchObject({ path, sha256 });
expect(tensorView.source_coverage).toMatchObject(coverage);
expect(tensorView.limitations).toContainEqual(limitation);
const typeResponse = await call("inspect_analysis_view", {
source,
view: {
kind: "model-artifact",
collection: "types",
types: ["Q8_1"],
fields: ["type", "parameter_count", "bytes"],
},
});
expect(typeResponse.isError, JSON.stringify(typeResponse)).not.toBe(true);
const typeView = analysisViewResultSchema.parse(
parseEvidence(typeResponse.structuredContent).normalized_result,
);
if (typeView.kind !== "model-artifact")
throw new Error("Incorrect type view");
expect(typeView.items).toEqual([
{ index: 1, type: "Q8_1", parameter_count: "320", bytes: null },
]);
expect(typeView.source_coverage).toMatchObject(coverage);
}
},
);
const assertRetainedLayoutViews = async (
call: Awaited<ReturnType<typeof connectLocalToolsMcp>>["call"],
parentEvidenceId: string,
report: ModelArtifact,
sha256: string,
): Promise<void> => {
const { path } = report.artifact;
const { header, tensor_ranges, storage_sizes } = report.coverage;
const coverage = { header, tensor_ranges, storage_sizes };
const source = {
kind: "retained-evidence",
evidence_id: parentEvidenceId,
};
const types = ["Q2_K", "AMBIGUOUS_16", "AMBIGUOUS_24", "AMBIGUOUS_25"];
const tensorResponse = await call("inspect_analysis_view", {
source,
view: {
kind: "model-artifact",
collection: "tensors",
types,
storage_validation: ["unknown"],
fields: [
"type",
"type_id",
"shape",
"file_offset",
"byte_length",
"storage_validation",
],
},
});
expect(tensorResponse.isError, JSON.stringify(tensorResponse)).not.toBe(true);
const tensorView = analysisViewResultSchema.parse(
parseEvidence(tensorResponse.structuredContent).normalized_result,
);
if (tensorView.kind !== "model-artifact")
throw new Error("Incorrect tensor view");
expect(tensorView.items).toEqual(
report.tensors
.filter((tensor) => types.includes(tensor.type))
.map(
({
index,
type,
type_id,
shape,
file_offset,
byte_length,
storage_validation,
}) => ({
index,
type,
type_id,
shape,
file_offset,
byte_length,
storage_validation,
}),
),
);
expect(tensorView.source).toMatchObject({ path, sha256 });
expect(tensorView.source_coverage).toMatchObject(coverage);
const typeResponse = await call("inspect_analysis_view", {
source,
view: {
kind: "model-artifact",
collection: "types",
types,
fields: ["type", "bytes"],
},
});
expect(typeResponse.isError, JSON.stringify(typeResponse)).not.toBe(true);
const typeView = analysisViewResultSchema.parse(
parseEvidence(typeResponse.structuredContent).normalized_result,
);
if (typeView.kind !== "model-artifact")
throw new Error("Incorrect type view");
expect(typeView.items).toEqual(
report.totals.by_type.flatMap((row, index) =>
types.includes(row.type) ? [{ index, type: row.type, bytes: null }] : [],
),
);
expect(typeView.source_coverage).toMatchObject(coverage);
};
cliTest(
"preserves released K and shifted integer/IQ uncertainty through CLI and retained MCP views",
async ({ cli }) => {
const root = await createTestTempDirectory("rea-model-historical-layouts-");
const { call } = await connectLocalToolsMcp();
for (const layout of ["legacy", "modern"] as const) {
const path = join(root, `${layout}.gguf`);
const base = ggufFixture();
// Authored bodies follow released source sizes; historical producers are
// not executed. Both files carry the same version and global file type.
const declarations = [
{ name: "control", type: 0, shape: [4n], bytes: 16, label: "F32" },
{
name: "stable-integer",
type: 26,
shape: [3n],
bytes: 12,
label: "I32",
},
...ggufKLayouts.flatMap(({ id, name, bytes64, bytes256 }) =>
(layout === "legacy" ? [64, 256] : [256]).map((elements) => ({
name: `${name}-${String(elements)}`,
type: id,
shape: [BigInt(elements)],
bytes: layout === "legacy" ? (elements / 64) * bytes64 : bytes256,
label: name,
})),
),
...ggufShiftedTypeLayouts.map(
({ id, integerBytes, modernBytes256 }) => ({
name: `shifted-${String(id)}`,
type: id,
shape: [256n],
bytes: layout === "legacy" ? 256 * integerBytes : modernBytes256,
label: `AMBIGUOUS_${String(id)}`,
}),
),
];
let nextOffset = 0n;
const tensors = declarations.map((declaration) => {
const tensor = { ...declaration, offset: nextOffset };
nextOffset += BigInt(Math.ceil(declaration.bytes / 32) * 32);
return tensor;
});
const fixture = ggufFixture({
metadata: [
{ key: "general.quantization_version", type: 4, value: base.u32(2) },
{ key: "general.file_type", type: 4, value: base.u32(15) },
],
tensors,
});
await writeFile(path, fixture.bytes);
const response = await cli.run({
arguments: [
"inspect-model-artifact",
path,
"--detail",
"complete",
"--json",
],
});
expect(response.exitCode, response.stderr).toBe(0);
const report = modelArtifactSchema.parse(
parseEvidence(response.json).normalized_result,
);
expect(report.tensors.slice(0, 2)).toMatchObject([
{ type: "F32", byte_length: 16, storage_validation: "consistent" },
{
type: "I32",
type_id: 26,
byte_length: 12,
storage_validation: "consistent",
},
]);
const unresolved = tensors.slice(2).map((tensor, index) => ({
index: index + 2,
type: tensor.label,
type_id: tensor.type,
shape: tensor.shape.map(String),
file_offset: fixture.dataOffset + Number(tensor.offset),
byte_length: null,
storage_validation: "unknown",
}));
expect(report.tensors.slice(2)).toMatchObject(unresolved);
const coverage = {
header: "complete",
tensor_ranges: "partial",
storage_sizes: "partial",
};
expect(report.coverage).toMatchObject(coverage);
expect(report.totals.tensor_bytes).toBeNull();
for (const { id, modernName } of ggufShiftedTypeLayouts) {
expect(report.limitations).toContainEqual(
expect.stringMatching(
new RegExp(`type ID ${String(id)} has released .*${modernName}`),
),
);
}
const mcpResponse = await call("inspect_model_artifact", {
path,
hash: "full",
});
expect(mcpResponse.isError, JSON.stringify(mcpResponse)).not.toBe(true);
const summary = modelArtifactSummaryViewResultSchema.parse(
parseEvidence(mcpResponse.structuredContent).normalized_result,
);
const sha256 = createHash("sha256").update(fixture.bytes).digest("hex");
expect(summary.summary).toMatchObject({
artifact: { path, sha256 },
totals: { tensor_bytes: null },
coverage,
});
for (const limitation of report.limitations.filter(
(reason) =>
reason.includes("have released") || reason.includes("has released"),
))
expect(summary.summary.limitations).toContain(limitation);
expect(Buffer.compare(await readFile(path), fixture.bytes)).toBe(0);
await unlink(path);
await assertRetainedLayoutViews(
call,
summary.parent_evidence_id,
report,
sha256,
);
}
},
);
cliTest(
"preserves exact large safetensors dimensions while bounding actual offsets",
async ({ cli }) => {
const root = await createTestTempDirectory("rea-model-shape-precision-");
const path = join(root, "empty.safetensors");
const fixture = safetensorsFixture(
'{"a":{"dtype":"F32","shape":[0,9007199254740992],"data_offsets":[0,0]},"b":{"dtype":"F32","shape":[18446744073709551615,0],"data_offsets":[0,0]}}',
Buffer.alloc(0),
);
await writeFile(path, fixture.bytes);
const result = await cli.run({
arguments: [
"inspect-model-artifact",
path,
"--detail",
"complete",
"--hash",
"full",
"--json",
],
});
expect(result.exitCode, result.stderr).toBe(0);
const report = modelArtifactSchema.parse(
toolContract("inspect_model_artifact").outputSchema.parse(result.json)
.normalized_result,
);
expect(
report.tensors.map(
({ shape, parameter_count, byte_length, storage_validation }) => ({
shape,
parameter_count,
byte_length,
storage_validation,
}),
),
).toEqual([
{
shape: ["0", "9007199254740992"],
parameter_count: "0",
byte_length: 0,
storage_validation: "consistent",
},
{
shape: ["18446744073709551615", "0"],
parameter_count: "0",
byte_length: 0,
storage_validation: "consistent",
},
]);
expect(report.totals).toMatchObject({
parameter_count: "0",
tensor_bytes: 0,
});
expect(report.artifact.sha256).toBe(
createHash("sha256").update(fixture.bytes).digest("hex"),
);
const { call } = await connectLocalToolsMcp();
const response = await call("inspect_model_artifact", {
path,
detail: "complete",
hash: "full",
});
expect(response.isError, JSON.stringify(response)).not.toBe(true);
expect(parseEvidence(response.structuredContent).normalized_result).toEqual(
report,
);
await writeFile(
path,
safetensorsFixture(
'{"x":{"dtype":"F32","shape":[0],"data_offsets":[9007199254740992,9007199254740992]}}',
Buffer.alloc(0),
).bytes,
);
const offsetFailure = parseMcpToolError(
await call("inspect_model_artifact", { path }),
);
expect(offsetFailure.error).toMatchObject({
code: "resource_constraint",
details: {
reported_limits: { maximum_exact_offset: Number.MAX_SAFE_INTEGER },
},
});
},
);
it.each(["named", "default", "inventory-only", "absent"] as const)(
"reports actual chat-template presence in summaries and page context (%s)",
async (kind) => {
const root = await createTestTempDirectory("rea-model-templates-");
const path = join(root, "model.gguf");
const { text, u32, u64 } = ggufFixture();
const names = {
key: "tokenizer.chat_templates",
type: 9,
value: Buffer.concat([u32(8), u64(1n), text("tool_use")]),
};
const template = {
key:
kind === "default"
? "tokenizer.chat_template"
: "tokenizer.chat_template.tool_use",
type: 8,
value: text("{{ messages }}"),
};
const metadata =
kind === "named"
? [names, template]
: kind === "default"
? [template]
: kind === "inventory-only"
? [names]
: [];
await writeFile(path, ggufFixture({ metadata }).bytes);
const { call } = await connectLocalToolsMcp();
const response = await call("inspect_model_artifact", { path });
expect(response.isError, JSON.stringify(response)).not.toBe(true);
const summary = modelArtifactSummaryViewResultSchema.parse(
parseEvidence(response.structuredContent).normalized_result,
);
const present = kind === "named" || kind === "default";
expect(summary.summary.chat_template_present).toBe(present);
const pageResponse = await call("inspect_analysis_view", {
source: {
kind: "retained-evidence",
evidence_id: summary.parent_evidence_id,
},
view: {
kind: "model-artifact",
collection: "metadata",
fields: ["key", "value"],
},
});
expect(pageResponse.isError, JSON.stringify(pageResponse)).not.toBe(true);
const page = analysisViewResultSchema.parse(
parseEvidence(pageResponse.structuredContent).normalized_result,
);
if (page.kind !== "model-artifact") throw new Error("Incorrect model view");
expect(page.model.chat_template_present).toBe(present);
expect(
page.items.map((row) => ("key" in row ? row.key : undefined)),
).toEqual(metadata.map((row) => row.key));
},
);
it("keeps generated headline keys and imported compound metadata out of compact summaries", async () => {
const root = await createTestTempDirectory("rea-model-headlines-");
const path = join(root, "model");
const architecture = "a".repeat(12000);
const { text, u32 } = ggufFixture();
await writeFile(
path,
ggufFixture({
tensors: [],
metadata: [
{ key: "general.architecture", type: 8, value: text(architecture) },
{ key: `${architecture}.context_length`, type: 4, value: u32(2048) },
],
}).bytes,
);
const { call } = await connectLocalToolsMcp();
const compact = await call("inspect_model_artifact", { path });
expect(compact.isError, JSON.stringify(compact)).not.toBe(true);
const summary = modelArtifactSummaryViewResultSchema.parse(
parseEvidence(compact.structuredContent).normalized_result,
);
expect(summary.summary.headlines).toEqual([]);
const full = parseEvidence(
(await call("inspect_model_artifact", { path, detail: "complete" }))
.structuredContent,
);
const report = modelArtifactSchema.parse(full.normalized_result);
expect(report.metadata.map(({ key, value }) => ({ key, value }))).toEqual([
{ key: "general.architecture", value: architecture },
{ key: `${architecture}.context_length`, value: 2048 },
]);
report.metadata[0]!.value = { future: architecture };
const imported = createEvidence(undefined, full.provider, {
operation: "inspect_model_artifact",
parameters: full.parameters,
result: report,
});
const page = await call("inspect_analysis_view", {
source: { kind: "inline", evidence: imported },
view: { kind: "summary" },
});
expect(page.isError, JSON.stringify(page)).not.toBe(true);
const importedSummary = modelArtifactSummaryViewResultSchema.parse(
parseEvidence(page.structuredContent).normalized_result,
);
expect(importedSummary.summary.headlines).toEqual([]);
});
it("rejects noncanonical imported model indexes and duplicate identities through public MCP", async () => {
const root = await createTestTempDirectory("rea-model-import-");
const path = join(root, "model");
await writeFile(path, ggufFixture().bytes);
const { call } = await connectLocalToolsMcp();
const response = await call("inspect_model_artifact", {
path,
detail: "complete",
});
const complete = parseEvidence(response.structuredContent);
const report = modelArtifactSchema.parse(complete.normalized_result);
const corruptions: ((value: ModelArtifact) => void)[] = [
(value) => {
value.tensors[0]!.index = 7;
},
(value) => {
value.metadata[0]!.index = 7;
},
(value) => {
value.tensors[1]!.name = value.tensors[0]!.name;
},
(value) => {
value.metadata[1]!.key = value.metadata[0]!.key;
},
(value) => {
value.totals.by_type[1]!.type = value.totals.by_type[0]!.type;
},
];
for (const corrupt of corruptions) {
const result = structuredClone(report);
corrupt(result);
const evidence = createEvidence(undefined, complete.provider, {
operation: "inspect_model_artifact",
parameters: complete.parameters,
result,
});
const failure = parseMcpToolError(
await call("inspect_analysis_view", {
source: { kind: "inline", evidence },
view: {
kind: "model-artifact",
collection: "tensors",
names: ["weight"],
},
}),
);
expect(failure.error).toMatchObject({ code: "invalid_request" });
}
await assertHistoricalModelPages(call, complete.evidence_id, report);
});
it("bounds compact model warnings and omits unselected long labels while retaining complete Evidence", async () => {
const root = await createTestTempDirectory("rea-model-long-labels-");
const path = join(root, "model");
const name = "tensor".repeat(4000);
const type = "FUTURE".repeat(4000);
const key = "metadata".repeat(3000);
await writeFile(
path,
safetensorsFixture(
JSON.stringify({
__metadata__: { [key]: "kept" },
[name]: { dtype: type, shape: [0], data_offsets: [0, 0] },
}),
Buffer.alloc(0),
).bytes,
);
const { call } = await connectLocalToolsMcp();
const response = await call("inspect_model_artifact", { path });
expect(response.isError, JSON.stringify(response)).not.toBe(true);
expect(JSON.stringify(response).length).toBeLessThan(16_000);
const summary = modelArtifactSummaryViewResultSchema.parse(
parseEvidence(response.structuredContent).normalized_result,
);
expect(summary.summary.coverage.storage_sizes).toBe("partial");
expect(summary.summary.limitations.join(" ")).toContain(
summary.parent_evidence_id,
);
const source = {
kind: "retained-evidence",
evidence_id: summary.parent_evidence_id,
};
for (const collection of ["tensors", "metadata", "types"] as const) {
const page = await call("inspect_analysis_view", {
source,
view: { kind: "model-artifact", collection, fields: [], limit: 1 },
});
expect(page.isError, JSON.stringify(page)).not.toBe(true);
expect(JSON.stringify(page).length).toBeLessThan(16_000);
const view = analysisViewResultSchema.parse(
parseEvidence(page.structuredContent).normalized_result,
);
if (view.kind !== "model-artifact") throw new Error("Incorrect view");
expect(view.items).toEqual([{ index: 0 }]);
expect(view.source_coverage.storage_sizes).toBe("partial");
expect(view.limitations.join(" ")).toContain(summary.parent_evidence_id);
}
const full = await call("inspect_model_artifact", {
path,
detail: "complete",
});
expect(full.isError, JSON.stringify(full)).not.toBe(true);
const report = modelArtifactSchema.parse(
parseEvidence(full.structuredContent).normalized_result,
);
expect(report.tensors[0]).toMatchObject({ name, type });
expect(report.metadata[0]).toMatchObject({ key, value: "kept" });
expect(report.limitations.join(" ")).toContain(type);
});
const assertHistoricalModelPages = async (
call: Awaited<ReturnType<typeof connectLocalToolsMcp>>["call"],
parentEvidenceId: string,
report: ModelArtifact,
): Promise<void> => {
const pages = [];
for (let offset = 0; offset < report.tensors.length; offset++) {
const page = await call("inspect_analysis_view", {
source: {
kind: "retained-evidence",
evidence_id: parentEvidenceId,
},
view: {
kind: "model-artifact",
collection: "tensors",
offset,
limit: 1,
fields: ["name", "type", "shape", "file_offset"],
},
});
expect(page.isError, JSON.stringify(page)).not.toBe(true);
const selected = analysisViewResultSchema.parse(
parseEvidence(page.structuredContent).normalized_result,
);
if (selected.kind !== "model-artifact") throw new Error("Incorrect view");
expect(selected.source.header_sha256).toBe(report.artifact.header_sha256);
expect(selected.source.sha256).toBeNull();
pages.push(...selected.items);
}
expect(pages).toEqual(
report.tensors.map(({ index, name, type, shape, file_offset }) => ({
index,
name,
type,
shape,
file_offset,
})),
);
const selected = await call("inspect_analysis_view", {
source: {
kind: "retained-evidence",
evidence_id: parentEvidenceId,
},
view: {
kind: "model-artifact",
collection: "tensors",
names: ["weight", "absent"],
indices: [0, 1],
fields: [],
},
});
const selectedView = analysisViewResultSchema.parse(
parseEvidence(selected.structuredContent).normalized_result,
);
if (selectedView.kind !== "model-artifact") throw new Error("Incorrect view");
expect(selectedView.items).toEqual(
report.tensors
.filter((row) => row.name === "weight")
.map(({ index }) => ({ index })),
);
const empty = await call("inspect_analysis_view", {
source: {
kind: "retained-evidence",
evidence_id: parentEvidenceId,
},
view: {
kind: "model-artifact",
collection: "metadata",
keys: [],
offset: 100,
},
});
expect(empty.isError, JSON.stringify(empty)).not.toBe(true);
const emptyView = analysisViewResultSchema.parse(
parseEvidence(empty.structuredContent).normalized_result,
);
expect(emptyView.coverage).toMatchObject({ total: 0, exhausted: true });
const unverified = await call("inspect_analysis_view", {
source: {
kind: "retained-evidence",
evidence_id: parentEvidenceId,
},
view: {
kind: "model-artifact",
collection: "tensors",
storage_validation: ["unknown"],
fields: ["name", "storage_validation", "byte_length"],
},
});
expect(unverified.isError, JSON.stringify(unverified)).not.toBe(true);
const unverifiedView = analysisViewResultSchema.parse(
parseEvidence(unverified.structuredContent).normalized_result,
);
if (unverifiedView.kind !== "model-artifact")
throw new Error("Incorrect storage selection");
expect(unverifiedView.items).toEqual(
report.tensors
.filter((row) => row.storage_validation === "unknown")
.map(({ index, name, storage_validation, byte_length }) => ({
index,
name,
storage_validation,
byte_length,
})),
);
const histogram = await call("inspect_analysis_view", {
source: {
kind: "retained-evidence",
evidence_id: parentEvidenceId,
},
view: {
kind: "model-artifact",
collection: "types",
types: ["F32"],
fields: ["type", "tensors", "parameter_count", "bytes"],
},
});
expect(histogram.isError, JSON.stringify(histogram)).not.toBe(true);
const histogramView = analysisViewResultSchema.parse(
parseEvidence(histogram.structuredContent).normalized_result,
);
if (histogramView.kind !== "model-artifact")
throw new Error("Incorrect histogram view");
expect(histogramView.items).toEqual(
report.totals.by_type.flatMap((row, index) =>
row.type === "F32" ? [{ index, ...row }] : [],
),
);
};
cliTest(
"shares scoped model facts through real CLI/MCP and pages retained metadata after source removal",
async ({ cli }) => {
const root = await createTestTempDirectory("rea-model-cli-");
const { call } = await connectLocalToolsMcp();
for (const [format, fixture] of [
["gguf", ggufFixture()],
["safetensors", safetensorsFixture()],
[
"safetensors",
safetensorsFixture(
'{"future":{"dtype":"FUTURE4","shape":[2],"data_offsets":[0,4]}}',
Buffer.alloc(4),
),
],
] as const) {
const path = join(root, `${format}.arbitrary`);
await writeFile(path, fixture.bytes);
const result = await cli.run({
arguments: [
"inspect-model-artifact",
path,
"--detail",
"complete",
"--json",
],
});
expect(result.exitCode, result.stderr).toBe(0);
const evidence = toolContract(
"inspect_model_artifact",
).outputSchema.parse(result.json);
const report = modelArtifactSchema.parse(evidence.normalized_result);
expect(report.format).toBe(format);
expect(report.artifact.sha256).toBeNull();
expect(evidence.subject).toBeNull();
const complete = await call("inspect_model_artifact", {
path,
detail: "complete",
});
expect(complete.isError, JSON.stringify(complete)).not.toBe(true);
expect(
parseEvidence(complete.structuredContent).normalized_result,
).toEqual(report);
const hashed = await call("inspect_model_artifact", {
path,
detail: "complete",
hash: "full",
});
expect(hashed.isError, JSON.stringify(hashed)).not.toBe(true);
expect(
parseEvidence(hashed.structuredContent).subject?.digest.sha256,
).toBe(createHash("sha256").update(fixture.bytes).digest("hex"));
const summary = await call("inspect_model_artifact", { path });
expect(summary.isError, JSON.stringify(summary)).not.toBe(true);
const retained = modelArtifactSummaryViewResultSchema.parse(
parseEvidence(summary.structuredContent).normalized_result,
);
expect(retained.summary.counts.tensors).toBe(report.tensors.length);
const direct = await call("inspect_model_artifact", {
path,
view: {
collection: "tensors",
names: ["weight"],
fields: ["name", "type", "shape", "file_offset"],
},
});
expect(direct.isError, JSON.stringify(direct)).not.toBe(true);
const directView = analysisViewResultSchema.parse(
parseEvidence(direct.structuredContent).normalized_result,
);
if (directView.kind !== "model-artifact")
throw new Error("Incorrect direct selection");
expect(directView.model.counts.tensors).toBe(report.tensors.length);
expect(directView.items).toEqual(
report.tensors
.filter((row) => row.name === "weight")
.map(({ index, name, type, shape, file_offset }) => ({
index,
name,
type,
shape,
file_offset,
})),
);
expect(directView.parent_evidence_id).toBe(
parseEvidence(complete.structuredContent).evidence_id,
);
await unlink(path);
await assertHistoricalModelPages(
call,
retained.parent_evidence_id,
report,
);
}
},
);
cliTest(
"preserves optional safetensors fields and aligns empty GGUF data in CLI and MCP",
async ({ cli }) => {
const root = await createTestTempDirectory("rea-model-boundary-compat-");
const { call } = await connectLocalToolsMcp();
const safetensors = safetensorsFixture(
'{"__metadata__":null,"weight":{"dtype":"F32","shape":[1],"data_offsets":[0,4],"note":{"source":"local","flags":[null,false,-1,1.25]}}}',
Buffer.alloc(4),
);
const emptyGgufHeader = ggufFixture({ tensors: [], metadata: [] });
const alignedOffset = Math.ceil(emptyGgufHeader.header.length / 32) * 32;
const emptyGguf = Buffer.concat([
emptyGgufHeader.header,
Buffer.alloc(alignedOffset - emptyGgufHeader.header.length),
]);
for (const [name, bytes] of [
["optional.safetensors", safetensors.bytes],
["empty.gguf", emptyGguf],
] as const) {
const path = join(root, name);
await writeFile(path, bytes);
const result = await cli.run({
arguments: [
"inspect-model-artifact",
path,
"--detail",
"complete",
"--json",
],
});
expect(result.exitCode, result.stderr).toBe(0);
const report = modelArtifactSchema.parse(
toolContract("inspect_model_artifact").outputSchema.parse(result.json)
.normalized_result,
);
if (name.endsWith("safetensors")) {
expect(report.metadata).toEqual([]);
expect(report.tensors[0]?.name).toBe("weight");
expect(report.artifact.header_sha256).toBe(
createHash("sha256").update(safetensors.header).digest("hex"),
);
} else {
expect(report.tensors).toEqual([]);
expect(report.tensor_data_offset).toBe(alignedOffset);
expect(report.artifact.header_length).toBe(
emptyGgufHeader.header.length,
);
expect(report.artifact.header_sha256).toBe(
createHash("sha256").update(emptyGgufHeader.header).digest("hex"),
);
}
const response = await call("inspect_model_artifact", {
path,
detail: "complete",
});
expect(response.isError, JSON.stringify(response)).not.toBe(true);
expect(
parseEvidence(response.structuredContent).normalized_result,
).toEqual(report);
}
const mapPath = join(root, "same-key-map.safetensors");
await writeFile(
mapPath,
safetensorsFixture(
'{"__metadata__":{"json_number":"1.25"}}',
Buffer.alloc(0),
).bytes,
);
const mapCli = await cli.run({
arguments: [
"inspect-model-artifact",
mapPath,
"--detail",
"complete",
"--json",
],
});
expect(mapCli.exitCode, mapCli.stderr).toBe(0);
const mapReport = modelArtifactSchema.parse(
toolContract("inspect_model_artifact").outputSchema.parse(mapCli.json)
.normalized_result,
);
expect(
mapReport.metadata.map(({ key, value }) => ({ key, value })),
).toEqual([{ key: "json_number", value: "1.25" }]);
const mapMcp = await call("inspect_model_artifact", {
path: mapPath,
detail: "complete",
});
expect(mapMcp.isError, JSON.stringify(mapMcp)).not.toBe(true);
expect(parseEvidence(mapMcp.structuredContent).normalized_result).toEqual(
mapReport,
);
for (const [name, numeric] of [
["decimal", "1.25"],
["negative", "-1"],
["overflow", "18446744073709551616"],
] as const) {
const malformedPath = join(root, `${name}-metadata.safetensors`);
await writeFile(
malformedPath,
safetensorsFixture(`{"__metadata__":${numeric}}`, Buffer.alloc(0))
.bytes,
);
const malformedCli = await cli.run({
arguments: ["inspect-model-artifact", malformedPath, "--json"],
});
expect(malformedCli.exitCode).toBe(1);
expect(malformedCli.json).toMatchObject({
code: "target_unavailable",
category: "unsupported_target",
details: { constraint: "file_format_rejected" },
});
const malformedMcp = parseMcpToolError(
await call("inspect_model_artifact", { path: malformedPath }),
);
expect(malformedMcp.error).toMatchObject({
code: "target_unavailable",
category: "unsupported_target",
details: { constraint: "file_format_rejected" },
});
}
},
);
cliTest(
"inspects unpadded zero-tensor vocab GGUF through CLI and MCP",
async ({ cli }) => {
const root = await createTestTempDirectory("rea-model-vocab-only-");
const { call } = await connectLocalToolsMcp();
const base = ggufFixture();
const vocab = ggufFixture({
tensors: [],
metadata: [
{ key: "general.type", type: 8, value: base.text("vocab") },
{
key: "tokenizer.ggml.model",
type: 8,
value: base.text("gpt2"),
},
],
});
expect(vocab.header.length).toBe(105);
expect(vocab.bytes.length).toBe(128);
const padded = Buffer.concat([
vocab.header,
Buffer.alloc(vocab.bytes.length - vocab.header.length),
]);
const files = [
["vocab-unpadded.gguf", vocab.header, vocab.header.length],
["vocab-padded.gguf", padded, vocab.bytes.length],
] as const;
for (const [name, bytes, expectedOffset] of files) {
const path = join(root, name);
await writeFile(path, bytes);
const cliResult = await cli.run({
arguments: [
"inspect-model-artifact",
path,
"--detail",
"complete",
"--hash",
"full",
"--json",
],
});
expect(cliResult.exitCode, cliResult.stderr).toBe(0);
const report = modelArtifactSchema.parse(
toolContract("inspect_model_artifact").outputSchema.parse(
cliResult.json,
).normalized_result,
);
expect(report.metadata.map(({ key, value }) => ({ key, value }))).toEqual(
[
{ key: "general.type", value: "vocab" },
{ key: "tokenizer.ggml.model", value: "gpt2" },
],
);
expect(report.tensors).toEqual([]);
expect(report.tensor_data_offset).toBe(expectedOffset);
expect(report.artifact.header_length).toBe(vocab.header.length);
expect(report.artifact.header_sha256).toBe(
createHash("sha256").update(vocab.header).digest("hex"),
);
expect(report.artifact.sha256).toBe(
createHash("sha256").update(bytes).digest("hex"),
);
const mcpResult = await call("inspect_model_artifact", {
path,
detail: "complete",
hash: "full",
});
expect(mcpResult.isError, JSON.stringify(mcpResult)).not.toBe(true);
expect(
parseEvidence(mcpResult.structuredContent).normalized_result,
).toEqual(report);
}
const malformed = [
["partial-padding.gguf", Buffer.concat([vocab.header, Buffer.alloc(1)])],
[
"truncated-tensor.gguf",
ggufFixture({
metadata: [],
tensors: [
{ name: "weight", type: 0, shape: [4n], offset: 0n, bytes: 16 },
],
}).header,
],
] as const;
for (const [name, bytes] of malformed) {
const path = join(root, name);
await writeFile(path, bytes);
const cliResult = await cli.run({
arguments: ["inspect-model-artifact", path, "--json"],
});
expect(cliResult.exitCode).toBe(1);
expect(cliResult.json).toMatchObject({
code: "target_unavailable",
category: "unsupported_target",
details: { constraint: "file_format_rejected" },
});
const mcpResult = parseMcpToolError(
await call("inspect_model_artifact", { path }),
);
expect(mcpResult.error).toMatchObject({
code: "target_unavailable",
category: "unsupported_target",
details: { constraint: "file_format_rejected" },
});
}
},
);
cliTest(
"exports complete model Evidence for portable paging and returns typed malformed errors",
async ({ cli }) => {
const root = await createTestTempDirectory("rea-model-export-");
const path = join(root, "model");
const output = join(root, "evidence.json");
await writeFile(path, ggufFixture().bytes);
const result = await cli.run({
arguments: [
"inspect-model-artifact",
path,
"--detail",
"summary",
"--view",
JSON.stringify({
collection: "metadata",
keys: ["tokenizer.chat_template"],
fields: ["key", "value"],
}),
"--evidence_output",
output,
"--json",
],
});
expect(result.exitCode, result.stderr).toBe(0);
const receipt = result.json as { summary: unknown };
const delivered = analysisViewResultSchema.parse(
parseEvidence(receipt.summary).normalized_result,
);
if (delivered.kind !== "model-artifact")
throw new Error("Missing CLI direct selection");
expect(delivered.items).toEqual([
{ index: 5, key: "tokenizer.chat_template", value: "{{ messages }}" },
]);
const exported = await readEvidenceBundle(output);
if (!exported.ok) throw exported.error;
const complete = exported.value.records.find(
(evidence) => evidence.operation === "inspect_model_artifact",
);
if (complete === undefined)
throw new Error("Missing complete exported model Evidence");
const recordPath = join(root, "model-record.json");
await writeFile(recordPath, JSON.stringify(complete));
const { call } = await connectLocalToolsMcp();
await unlink(path);
const page = await call("inspect_analysis_view", {
source: { kind: "evidence-file", path: recordPath },
view: {
kind: "model-artifact",
collection: "metadata",
keys: ["tokenizer.chat_template", "custom.exact"],
fields: ["key", "type", "value", "source_offset", "source_length"],
},
});
expect(page.isError, JSON.stringify(page)).not.toBe(true);
const selected = analysisViewResultSchema.parse(
parseEvidence(page.structuredContent).normalized_result,
);
if (selected.kind !== "model-artifact") throw new Error("Incorrect view");
expect(selected.items.map((row) => ("key" in row ? row.key : ""))).toEqual([
"custom.exact",
"tokenizer.chat_template",
]);
await writeFile(
path,
safetensorsFixture(
'{"x":{"dtype":"F32","shape":[3],"data_offsets":[4,16]}}',
).bytes,
);
const malformed = parseMcpToolError(
await call("inspect_model_artifact", { path }),
);
expect(malformed.error).toMatchObject({
code: "target_unavailable",
category: "unsupported_target",
details: { constraint: "file_format_rejected" },
});
},
);
cliTest(
"rejects malformed model view JSON before opening the selected path",
async ({ cli }) => {
const root = await createTestTempDirectory("rea-model-view-json-");
const missing = join(root, "not-created.gguf");
const result = await cli.run({
arguments: ["inspect-model-artifact", missing, "--view", "{", "--json"],
});
expect(result.exitCode).toBe(1);
expect(result.json).toMatchObject({
code: "invalid_request",
details: {
operation: "inspect_model_artifact",
issues: [
{
path: ["view"],
reason: "invalid_format",
message: "view must be a JSON model page selection",
},
],
},
});
expect(JSON.stringify(result.json)).not.toContain("ENOENT");
},
);