summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components/session/session-context-breakdown.test.ts
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-12 09:49:14 -0600
committerGitHub <[email protected]>2026-02-12 09:49:14 -0600
commitff4414bb152acfddb5c0eb073c38bedc1df4ae14 (patch)
tree78381c67d21ef6f089647f6b19e7aa2976840dbc /packages/app/src/components/session/session-context-breakdown.test.ts
parent56ad2db02055955f926fda0e4a89055b22ead6f9 (diff)
downloadopencode-ff4414bb152acfddb5c0eb073c38bedc1df4ae14.tar.gz
opencode-ff4414bb152acfddb5c0eb073c38bedc1df4ae14.zip
chore: refactor packages/app files (#13236)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Frank <[email protected]>
Diffstat (limited to 'packages/app/src/components/session/session-context-breakdown.test.ts')
-rw-r--r--packages/app/src/components/session/session-context-breakdown.test.ts61
1 files changed, 61 insertions, 0 deletions
diff --git a/packages/app/src/components/session/session-context-breakdown.test.ts b/packages/app/src/components/session/session-context-breakdown.test.ts
new file mode 100644
index 000000000..f38aecb55
--- /dev/null
+++ b/packages/app/src/components/session/session-context-breakdown.test.ts
@@ -0,0 +1,61 @@
+import { describe, expect, test } from "bun:test"
+import type { Message, Part } from "@opencode-ai/sdk/v2/client"
+import { estimateSessionContextBreakdown } from "./session-context-breakdown"
+
+const user = (id: string) => {
+ return {
+ id,
+ role: "user",
+ time: { created: 1 },
+ } as unknown as Message
+}
+
+const assistant = (id: string) => {
+ return {
+ id,
+ role: "assistant",
+ time: { created: 1 },
+ } as unknown as Message
+}
+
+describe("estimateSessionContextBreakdown", () => {
+ test("estimates tokens and keeps remaining tokens as other", () => {
+ const messages = [user("u1"), assistant("a1")]
+ const parts = {
+ u1: [{ type: "text", text: "hello world" }] as unknown as Part[],
+ a1: [{ type: "text", text: "assistant response" }] as unknown as Part[],
+ }
+
+ const output = estimateSessionContextBreakdown({
+ messages,
+ parts,
+ input: 20,
+ systemPrompt: "system prompt",
+ })
+
+ const map = Object.fromEntries(output.map((segment) => [segment.key, segment.tokens]))
+ expect(map.system).toBe(4)
+ expect(map.user).toBe(3)
+ expect(map.assistant).toBe(5)
+ expect(map.other).toBe(8)
+ })
+
+ test("scales segments when estimates exceed input", () => {
+ const messages = [user("u1"), assistant("a1")]
+ const parts = {
+ u1: [{ type: "text", text: "x".repeat(400) }] as unknown as Part[],
+ a1: [{ type: "text", text: "y".repeat(400) }] as unknown as Part[],
+ }
+
+ const output = estimateSessionContextBreakdown({
+ messages,
+ parts,
+ input: 10,
+ systemPrompt: "z".repeat(200),
+ })
+
+ const total = output.reduce((sum, segment) => sum + segment.tokens, 0)
+ expect(total).toBeLessThanOrEqual(10)
+ expect(output.every((segment) => segment.width <= 100)).toBeTrue()
+ })
+})