| import { describe, expect, it } from "vitest"; |
| import type { OpenClawConfig } from "../../config/config.js"; |
| import { |
| resolveBlockStreamingChunking, |
| resolveEffectiveBlockStreamingConfig, |
| } from "./block-streaming.js"; |
|
|
| describe("resolveEffectiveBlockStreamingConfig", () => { |
| it("applies ACP-style overrides while preserving chunk/coalescer bounds", () => { |
| const cfg = {} as OpenClawConfig; |
| const baseChunking = resolveBlockStreamingChunking(cfg, "discord"); |
| const resolved = resolveEffectiveBlockStreamingConfig({ |
| cfg, |
| provider: "discord", |
| maxChunkChars: 64, |
| coalesceIdleMs: 25, |
| }); |
|
|
| expect(baseChunking.maxChars).toBeGreaterThanOrEqual(64); |
| expect(resolved.chunking.maxChars).toBe(64); |
| expect(resolved.chunking.minChars).toBeLessThanOrEqual(resolved.chunking.maxChars); |
| expect(resolved.coalescing.maxChars).toBeLessThanOrEqual(resolved.chunking.maxChars); |
| expect(resolved.coalescing.minChars).toBeLessThanOrEqual(resolved.coalescing.maxChars); |
| expect(resolved.coalescing.idleMs).toBe(25); |
| }); |
|
|
| it("reuses caller-provided chunking for shared main/subagent/ACP config resolution", () => { |
| const resolved = resolveEffectiveBlockStreamingConfig({ |
| cfg: undefined, |
| chunking: { |
| minChars: 10, |
| maxChars: 20, |
| breakPreference: "paragraph", |
| }, |
| coalesceIdleMs: 0, |
| }); |
|
|
| expect(resolved.chunking).toEqual({ |
| minChars: 10, |
| maxChars: 20, |
| breakPreference: "paragraph", |
| }); |
| expect(resolved.coalescing.maxChars).toBe(20); |
| expect(resolved.coalescing.idleMs).toBe(0); |
| }); |
|
|
| it("allows ACP maxChunkChars overrides above base defaults up to provider text limits", () => { |
| const cfg = { |
| channels: { |
| discord: { |
| textChunkLimit: 4096, |
| }, |
| }, |
| } as OpenClawConfig; |
|
|
| const baseChunking = resolveBlockStreamingChunking(cfg, "discord"); |
| expect(baseChunking.maxChars).toBeLessThan(1800); |
|
|
| const resolved = resolveEffectiveBlockStreamingConfig({ |
| cfg, |
| provider: "discord", |
| maxChunkChars: 1800, |
| }); |
|
|
| expect(resolved.chunking.maxChars).toBe(1800); |
| expect(resolved.chunking.minChars).toBeLessThanOrEqual(resolved.chunking.maxChars); |
| }); |
| }); |
|
|