refactor(core): simplify prompt cache diagnostics
This commit is contained in:
parent
e48306e7e1
commit
34ed5bb399
2 changed files with 8 additions and 26 deletions
|
|
@ -1,7 +1,7 @@
|
|||
export * as PromptCacheDiagnostics from "./prompt-cache-diagnostics"
|
||||
|
||||
import { createHash } from "node:crypto"
|
||||
import type { LLMRequest } from "@opencode-ai/ai"
|
||||
import { Hash } from "@opencode-ai/util/hash"
|
||||
|
||||
interface Entry {
|
||||
readonly label: string
|
||||
|
|
@ -26,7 +26,7 @@ export type Comparison =
|
|||
readonly label: string
|
||||
}
|
||||
|
||||
const hash = (value: unknown) => createHash("sha256").update(JSON.stringify(value)).digest("hex").slice(0, 16)
|
||||
const hash = (value: unknown) => Hash.sha256(JSON.stringify(value)).slice(0, 16)
|
||||
|
||||
export function snapshot(request: LLMRequest): Snapshot {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ const request = LLM.request({
|
|||
prompt: "First",
|
||||
tools: [tool],
|
||||
})
|
||||
const compare = (current: LLMRequest) =>
|
||||
PromptCacheDiagnostics.compare(PromptCacheDiagnostics.snapshot(request), PromptCacheDiagnostics.snapshot(current))
|
||||
|
||||
describe("PromptCacheDiagnostics", () => {
|
||||
test("distinguishes initial and stable requests", () => {
|
||||
|
|
@ -26,33 +28,18 @@ describe("PromptCacheDiagnostics", () => {
|
|||
|
||||
test("recognizes append-only history", () => {
|
||||
const current = LLMRequest.update(request, { messages: [...request.messages, Message.assistant("Second")] })
|
||||
expect(
|
||||
PromptCacheDiagnostics.compare(
|
||||
PromptCacheDiagnostics.snapshot(request),
|
||||
PromptCacheDiagnostics.snapshot(current),
|
||||
),
|
||||
).toEqual({ status: "append-only", previousMessages: 1, currentMessages: 2 })
|
||||
expect(compare(current)).toEqual({ status: "append-only", previousMessages: 1, currentMessages: 2 })
|
||||
})
|
||||
|
||||
test("detects cache-sensitive setting changes", () => {
|
||||
const current = LLMRequest.update(request, { generation: GenerationOptions.make({ temperature: 0.5 }) })
|
||||
expect(
|
||||
PromptCacheDiagnostics.compare(
|
||||
PromptCacheDiagnostics.snapshot(request),
|
||||
PromptCacheDiagnostics.snapshot(current),
|
||||
),
|
||||
).toEqual({ status: "changed", component: "settings", index: 0, label: "model settings" })
|
||||
expect(compare(current)).toEqual({ status: "changed", component: "settings", index: 0, label: "model settings" })
|
||||
})
|
||||
|
||||
test("finds the first changed prefix component", () => {
|
||||
const changedTool = ToolDefinition.make({ ...tool, description: "Read one file" })
|
||||
const current = LLMRequest.update(request, { tools: [changedTool] })
|
||||
expect(
|
||||
PromptCacheDiagnostics.compare(
|
||||
PromptCacheDiagnostics.snapshot(request),
|
||||
PromptCacheDiagnostics.snapshot(current),
|
||||
),
|
||||
).toMatchObject({ status: "changed", component: "tools", index: 0, label: "read" })
|
||||
expect(compare(current)).toEqual({ status: "changed", component: "tools", index: 0, label: "read" })
|
||||
})
|
||||
|
||||
test("treats appended tools as a prefix change", () => {
|
||||
|
|
@ -62,11 +49,6 @@ describe("PromptCacheDiagnostics", () => {
|
|||
inputSchema: { type: "object", properties: {} },
|
||||
})
|
||||
const current = LLMRequest.update(request, { tools: [...request.tools, write] })
|
||||
expect(
|
||||
PromptCacheDiagnostics.compare(
|
||||
PromptCacheDiagnostics.snapshot(request),
|
||||
PromptCacheDiagnostics.snapshot(current),
|
||||
),
|
||||
).toMatchObject({ status: "changed", component: "tools", index: 1, label: "write" })
|
||||
expect(compare(current)).toEqual({ status: "changed", component: "tools", index: 1, label: "write" })
|
||||
})
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue