ai-model-verifier 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -33,7 +33,9 @@ import { anthropicConfig } from "ai-model-verifier/providers/anthropic";
33
33
  `coding-tool` refusals (Kiro/Amazon Q wearing a Claude badge), scam pages,
34
34
  CJK language leaks from a substituted Chinese model, response-mixing proxies,
35
35
  foreign vendor identity, Claude tier substitution (opus billed, sonnet served),
36
- and envelope-level model substitution.
36
+ envelope-level model substitution, and (opt-in, `checkThinkingFloor`) a
37
+ model that cannot switch thinking off answering with no reasoning tokens, the
38
+ signature of a flash tier sold as Gemini 2.5 Pro.
37
39
 
38
40
  ## License
39
41
 
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Thinking-floor check for models that cannot switch reasoning off.
3
+ *
4
+ * Gemini 2.5 Pro has a thinking budget floor (128 tokens): even "Reply with
5
+ * only the word ok." produces hidden thought tokens, reported as
6
+ * `completion_tokens_details.reasoning_tokens` on an OpenAI-shaped hop, folded
7
+ * into `completion_tokens` when the relay strips the breakdown, or as
8
+ * `usageMetadata.thoughtsTokenCount` on the native endpoint. Measured across 66
9
+ * historical probes of genuine 2.5 Pro: the lowest completion count for that
10
+ * prompt was 12, the native thoughts count 99 to 158.
11
+ *
12
+ * A flash-class backend sold under the pro name answers the same prompt with
13
+ * `completion_tokens: 1` (a6 merchant 3623, 2026-09-09), and it still echoes
14
+ * `model: gemini-2.5-pro`, so the envelope substitution check never fires.
15
+ * The token count is the only free evidence left.
16
+ *
17
+ * Not applied to flash tiers: those may legitimately run with thinking off.
18
+ */
19
+ import type { TransportFn } from "../transport";
20
+ export type ThinkingFloorOptions = {
21
+ /**
22
+ * Model id prefixes that must always think. Compared after lowercasing and
23
+ * mapping `.`/`_` to `-`, provider prefix stripped.
24
+ */
25
+ models?: readonly string[];
26
+ /** Below this many completion tokens with no reasoning count, the reply did not think. */
27
+ minCompletionTokens?: number;
28
+ };
29
+ export declare const DEFAULT_ALWAYS_THINKS: readonly string[];
30
+ export declare const DEFAULT_MIN_COMPLETION_TOKENS = 10;
31
+ export type ThinkingFloorState =
32
+ /** Reasoning tokens reported, or the completion count is above the floor. */
33
+ "thought"
34
+ /** A model that cannot skip thinking answered with no reasoning at all. */
35
+ | "no-thinking"
36
+ /** No usage in the reply: nothing to judge. */
37
+ | "unmeasured"
38
+ /** Model is not one that must always think. */
39
+ | "skipped";
40
+ export type ThinkingFloorResult = {
41
+ state: ThinkingFloorState;
42
+ completionTokens: number | null;
43
+ reasoningTokens: number | null;
44
+ reason?: string;
45
+ };
46
+ export declare function mustAlwaysThink(model: string, options?: ThinkingFloorOptions): boolean;
47
+ /** Completion and reasoning counts from an OpenAI `usage` or a Gemini `usageMetadata`. */
48
+ export declare function readThinkingUsage(data: unknown): {
49
+ completion: number | null;
50
+ reasoning: number | null;
51
+ } | null;
52
+ /** Judge one reply to the short probe. Pure: pass any response body already collected. */
53
+ export declare function checkThinkingFloor(model: string, data: unknown, options?: ThinkingFloorOptions): ThinkingFloorResult;
54
+ /** One extra generation: the short prompt through the endpoint, then `checkThinkingFloor`. */
55
+ export declare function probeThinkingFloor(opts: {
56
+ transport: TransportFn;
57
+ baseUrl: string;
58
+ apiKey: string;
59
+ model: string;
60
+ /** Wire shape of the endpoint. */
61
+ provider: "openai" | "gemini";
62
+ timeoutMs: number;
63
+ options?: ThinkingFloorOptions;
64
+ }): Promise<ThinkingFloorResult>;
65
+ //# sourceMappingURL=thinking-floor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking-floor.d.ts","sourceRoot":"","sources":["../../src/detectors/thinking-floor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,0FAA0F;IAC1F,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAAuB,CAAC;AAC3E,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAMhD,MAAM,MAAM,kBAAkB;AAC5B,6EAA6E;AAC3E,SAAS;AACX,2EAA2E;GACzE,aAAa;AACf,+CAA+C;GAC7C,YAAY;AACd,+CAA+C;GAC7C,SAAS,CAAC;AAEd,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAKF,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAKT;AAYD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,GACZ;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAWhE;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,oBAAoB,GAC7B,mBAAmB,CA8CrB;AAED,8FAA8F;AAC9F,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0C/B"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Thinking-floor check for models that cannot switch reasoning off.
3
+ *
4
+ * Gemini 2.5 Pro has a thinking budget floor (128 tokens): even "Reply with
5
+ * only the word ok." produces hidden thought tokens, reported as
6
+ * `completion_tokens_details.reasoning_tokens` on an OpenAI-shaped hop, folded
7
+ * into `completion_tokens` when the relay strips the breakdown, or as
8
+ * `usageMetadata.thoughtsTokenCount` on the native endpoint. Measured across 66
9
+ * historical probes of genuine 2.5 Pro: the lowest completion count for that
10
+ * prompt was 12, the native thoughts count 99 to 158.
11
+ *
12
+ * A flash-class backend sold under the pro name answers the same prompt with
13
+ * `completion_tokens: 1` (a6 merchant 3623, 2026-09-09), and it still echoes
14
+ * `model: gemini-2.5-pro`, so the envelope substitution check never fires.
15
+ * The token count is the only free evidence left.
16
+ *
17
+ * Not applied to flash tiers: those may legitimately run with thinking off.
18
+ */
19
+ export const DEFAULT_ALWAYS_THINKS = ["gemini-2-5-pro"];
20
+ export const DEFAULT_MIN_COMPLETION_TOKENS = 10;
21
+ const PROBE_PROMPT = "Reply with only the word ok.";
22
+ /** Room for the thoughts plus the word; too small truncates thinking and reads as a fake. */
23
+ const MAX_TOKENS = 2048;
24
+ const normalize = (model) => model.toLowerCase().replace(/[._]/g, "-").split("/").pop() ?? "";
25
+ export function mustAlwaysThink(model, options) {
26
+ const m = normalize(model);
27
+ return (options?.models ?? DEFAULT_ALWAYS_THINKS).some((p) => m.startsWith(normalize(p)));
28
+ }
29
+ const num = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
30
+ /** Completion and reasoning counts from an OpenAI `usage` or a Gemini `usageMetadata`. */
31
+ export function readThinkingUsage(data) {
32
+ if (!data || typeof data !== "object")
33
+ return null;
34
+ const d = data;
35
+ const u = (d.usage ?? d.usageMetadata);
36
+ if (!u || typeof u !== "object")
37
+ return null;
38
+ const details = u.completion_tokens_details;
39
+ const reasoning = num(details && typeof details === "object" ? details.reasoning_tokens : null) ??
40
+ num(u.thoughtsTokenCount);
41
+ const completion = num(u.completion_tokens) ?? num(u.candidatesTokenCount);
42
+ return { completion, reasoning };
43
+ }
44
+ /** Judge one reply to the short probe. Pure: pass any response body already collected. */
45
+ export function checkThinkingFloor(model, data, options) {
46
+ if (!mustAlwaysThink(model, options))
47
+ return { state: "skipped", completionTokens: null, reasoningTokens: null };
48
+ const usage = readThinkingUsage(data);
49
+ if (!usage)
50
+ return {
51
+ state: "unmeasured",
52
+ completionTokens: null,
53
+ reasoningTokens: null,
54
+ reason: "no usage in reply",
55
+ };
56
+ const floor = options?.minCompletionTokens ?? DEFAULT_MIN_COMPLETION_TOKENS;
57
+ if (usage.reasoning !== null && usage.reasoning > 0)
58
+ return {
59
+ state: "thought",
60
+ completionTokens: usage.completion,
61
+ reasoningTokens: usage.reasoning,
62
+ };
63
+ if (usage.completion === null)
64
+ return {
65
+ state: "unmeasured",
66
+ completionTokens: null,
67
+ reasoningTokens: usage.reasoning,
68
+ reason: "no completion count in usage",
69
+ };
70
+ // An empty reply carries no evidence: nothing was generated, so nothing was
71
+ // skipped. Truncation and refusals land here, not in "no-thinking".
72
+ if (usage.completion === 0)
73
+ return {
74
+ state: "unmeasured",
75
+ completionTokens: 0,
76
+ reasoningTokens: usage.reasoning,
77
+ reason: "empty reply",
78
+ };
79
+ if (usage.completion < floor)
80
+ return {
81
+ state: "no-thinking",
82
+ completionTokens: usage.completion,
83
+ reasoningTokens: usage.reasoning,
84
+ reason: `completion_tokens ${usage.completion} below floor ${floor} with no reasoning tokens`,
85
+ };
86
+ return {
87
+ state: "thought",
88
+ completionTokens: usage.completion,
89
+ reasoningTokens: usage.reasoning,
90
+ };
91
+ }
92
+ /** One extra generation: the short prompt through the endpoint, then `checkThinkingFloor`. */
93
+ export async function probeThinkingFloor(opts) {
94
+ if (!mustAlwaysThink(opts.model, opts.options))
95
+ return { state: "skipped", completionTokens: null, reasoningTokens: null };
96
+ const base = opts.baseUrl.replace(/\/+$/, "");
97
+ const req = opts.provider === "gemini"
98
+ ? {
99
+ url: `${base}/v1beta/models/${opts.model}:generateContent`,
100
+ headers: {
101
+ "content-type": "application/json",
102
+ "x-goog-api-key": opts.apiKey,
103
+ },
104
+ reqBody: {
105
+ contents: [{ role: "user", parts: [{ text: PROBE_PROMPT }] }],
106
+ generationConfig: { maxOutputTokens: MAX_TOKENS },
107
+ },
108
+ }
109
+ : {
110
+ url: `${base}/v1/chat/completions`,
111
+ headers: {
112
+ "content-type": "application/json",
113
+ authorization: `Bearer ${opts.apiKey}`,
114
+ },
115
+ reqBody: {
116
+ model: opts.model,
117
+ max_tokens: MAX_TOKENS,
118
+ messages: [{ role: "user", content: PROBE_PROMPT }],
119
+ },
120
+ };
121
+ const res = await opts.transport({
122
+ mode: "direct",
123
+ ...req,
124
+ timeoutMs: opts.timeoutMs,
125
+ });
126
+ if (res.status !== 200 || !res.data)
127
+ return {
128
+ state: "unmeasured",
129
+ completionTokens: null,
130
+ reasoningTokens: null,
131
+ reason: res.error ?? `http ${res.status ?? "none"}`,
132
+ };
133
+ return checkThinkingFloor(opts.model, res.data, opts.options);
134
+ }
135
+ //# sourceMappingURL=thinking-floor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking-floor.js","sourceRoot":"","sources":["../../src/detectors/thinking-floor.ts"],"names":[],"mappings":"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"}
package/dist/runner.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type ThinkingFloorOptions } from "./detectors/thinking-floor";
1
2
  import { type TransportFn } from "./transport";
2
3
  import type { TransportMode, VerifyProvider, VerifyResult } from "./types";
3
4
  export declare function runVerification(opts: {
@@ -18,5 +19,12 @@ export declare function runVerification(opts: {
18
19
  * tokenizer band that doubles as a tier check). Opt-in: three extra requests.
19
20
  */
20
21
  checkTokenTruth?: boolean;
22
+ /**
23
+ * For models that cannot switch thinking off (Gemini 2.5 Pro by default),
24
+ * reject a reply with no reasoning tokens: a cheaper tier under the pro
25
+ * name. Opt-in: one extra short generation. Pass options to change the
26
+ * model list or the floor.
27
+ */
28
+ checkThinkingFloor?: boolean | ThinkingFloorOptions;
21
29
  }): Promise<VerifyResult>;
22
30
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAcA,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAEV,aAAa,EACb,cAAc,EACd,YAAY,EACb,MAAM,SAAS,CAAC;AAwOjB,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,OAAO,CAAC,YAAY,CAAC,CAwHxB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,4BAA4B,CAAC;AAWpC,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAEV,aAAa,EACb,cAAc,EACd,YAAY,EACb,MAAM,SAAS,CAAC;AAwOjB,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;CACrD,GAAG,OAAO,CAAC,YAAY,CAAC,CAoJxB"}
package/dist/runner.js CHANGED
@@ -2,6 +2,7 @@ import { checkThinkingSignature } from "./detectors/thinking-signature";
2
2
  import { checkTokenTruth } from "./detectors/token-truth";
3
3
  import { readResponseMetadata } from "./detectors/response-metadata";
4
4
  import { sampleThroughput } from "./detectors/throughput";
5
+ import { probeThinkingFloor, } from "./detectors/thinking-floor";
5
6
  import { sleep } from "./internal/utils";
6
7
  import { echoesNonce, makeNonce } from "./nonce";
7
8
  import { runHandshake } from "./handshake";
@@ -240,6 +241,20 @@ export async function runVerification(opts) {
240
241
  timeoutMs,
241
242
  })
242
243
  : undefined;
244
+ const thinkingFloor = opts.checkThinkingFloor &&
245
+ (resolvedProvider === "openai" || resolvedProvider === "gemini")
246
+ ? await probeThinkingFloor({
247
+ transport,
248
+ baseUrl: normalizeProbeBaseUrl(opts.baseUrl),
249
+ apiKey: opts.apiKey,
250
+ model: opts.model,
251
+ provider: resolvedProvider,
252
+ timeoutMs,
253
+ options: typeof opts.checkThinkingFloor === "object"
254
+ ? opts.checkThinkingFloor
255
+ : undefined,
256
+ })
257
+ : undefined;
243
258
  // Free metadata: derived from probe responses we already paid for.
244
259
  const richest = results.reduce((best, r) => (r.usage?.completion ?? 0) > (best?.usage?.completion ?? 0) ? r : best, null);
245
260
  const responseMetadata = richest?.envelope;
@@ -252,12 +267,21 @@ export async function runVerification(opts) {
252
267
  })
253
268
  : null;
254
269
  const detectedModel = results.find((r) => r.detectedModel)?.detectedModel ?? null;
255
- const verdict = aggregateVerdict({
270
+ const aggregated = aggregateVerdict({
256
271
  model: opts.model,
257
272
  cfg,
258
273
  results,
259
274
  detectedModel,
260
275
  });
276
+ // The floor is hard evidence the probes cannot see: the reply echoed the
277
+ // right name and read fine, it just never thought.
278
+ const verdict = thinkingFloor?.state === "no-thinking"
279
+ ? {
280
+ ...aggregated,
281
+ verdict: "suspicious",
282
+ reasons: [`no-thinking: ${thinkingFloor.reason}`],
283
+ }
284
+ : aggregated;
261
285
  const corsBlocked = hs.mode === "direct" && results.some((r) => r.corsBlocked);
262
286
  return {
263
287
  provider: opts.provider,
@@ -290,6 +314,7 @@ export async function runVerification(opts) {
290
314
  resolvedProvider,
291
315
  ...(signature ? { signature } : {}),
292
316
  ...(tokenTruth ? { tokenTruth } : {}),
317
+ ...(thinkingFloor ? { thinkingFloor } : {}),
293
318
  ...(responseMetadata ? { responseMetadata } : {}),
294
319
  ...(throughput ? { throughput } : {}),
295
320
  connectivityError: null,
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { SignatureResult } from "./detectors/thinking-signature";
2
2
  import type { TokenTruthResult } from "./detectors/token-truth";
3
+ import type { ThinkingFloorResult } from "./detectors/thinking-floor";
3
4
  import type { ResponseMetadata } from "./detectors/response-metadata";
4
5
  import type { ThroughputSample } from "./detectors/throughput";
5
6
  export type VerifyProvider = "anthropic" | "openai" | "gemini";
@@ -46,6 +47,8 @@ export type VerifyResult = {
46
47
  signature?: SignatureResult;
47
48
  /** Present only when the token-accounting check was requested. */
48
49
  tokenTruth?: TokenTruthResult;
50
+ /** Present only when the thinking-floor check was requested. */
51
+ thinkingFloor?: ThinkingFloorResult;
49
52
  /** Envelope observations, free: read from responses already collected. */
50
53
  responseMetadata?: ResponseMetadata;
51
54
  /** Output rate, when a probe generated enough tokens to measure one. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,YAAY,CAAC;AAEpE,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AAE9E,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,MAAM,GACN,SAAS,GACT,YAAY,GACZ,UAAU,GACV,OAAO,GACP,IAAI,CAAC;AAET,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,cAAc,CAAC;IACjC,yEAAyE;IACzE,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,kEAAkE;IAClE,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,wEAAwE;IACxE,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,iBAAiB,EACb,oBAAoB,GACpB,aAAa,GACb,aAAa,GACb,gBAAgB,GAChB,eAAe,GACf,WAAW,GACX,IAAI,CAAC;CACV,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,YAAY,CAAC;AAEpE,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AAE9E,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,MAAM,GACN,SAAS,GACT,YAAY,GACZ,UAAU,GACV,OAAO,GACP,IAAI,CAAC;AAET,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,cAAc,CAAC;IACjC,yEAAyE;IACzE,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,kEAAkE;IAClE,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,gEAAgE;IAChE,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,wEAAwE;IACxE,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,iBAAiB,EACb,oBAAoB,GACpB,aAAa,GACb,aAAa,GACb,gBAAgB,GAChB,eAAe,GACf,WAAW,GACX,IAAI,CAAC;CACV,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-model-verifier",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Verify an AI API endpoint really serves the model it claims: model substitution, Claude thinking signatures, token-billing accuracy, response-envelope and throughput evidence.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",