forked from cleveragents/cleveragents-core
711e867112
Implemented SkeletonCompressorService for ACMS context inheritance, producing compressed context representations for propagation from parent plans to child plans. Key design decisions and implementation details: - SkeletonMetadata (frozen Pydantic model): records ratio, original_tokens, compressed_tokens, and source_decision_ids for full auditability of each compression pass. Persisted on Plan.skeleton_metadata. - SkeletonCompressorService: stateless service accepting a list of ContextFragment objects and a skeleton_ratio in [0.0, 1.0]. Fragments are sorted by relevance descending with a stable secondary sort on fragment_id to guarantee deterministic output. Token budget is original_tokens*(1-ratio); fragments are greedily selected until budget is exhausted. - Ratio semantics: 0.0 = no compression (pass-through), 1.0 = maximum compression (single top fragment only), None = default 0.3. - Integration: Plan model gains optional skeleton_metadata field exposed in as_cli_dict() under the 'skeleton' key. Service registered in DI container as skeleton_compressor_service (Singleton, stateless). - Tests: 22 BDD scenarios (features/skeleton_compressor.feature) covering ratio validation, stable ordering, metadata correctness, edge cases, and plan model integration. 6 Robot Framework smoke tests. ASV benchmark suites at 10/100/1000 fragment scales. - Documentation: docs/reference/skeleton_compressor.md with ratio table, algorithm description, metadata schema, and multi-decision plan example. ISSUES CLOSED: #194
50 lines
2.3 KiB
Plaintext
50 lines
2.3 KiB
Plaintext
*** Settings ***
|
|
Documentation Smoke tests for skeleton compressor service
|
|
Resource ${CURDIR}/common.resource
|
|
Suite Setup Setup Test Environment
|
|
Suite Teardown Cleanup Test Environment
|
|
|
|
*** Variables ***
|
|
${HELPER} ${CURDIR}/helper_skeleton_compressor.py
|
|
|
|
*** Test Cases ***
|
|
Compress Fragments At Ratio 0.5
|
|
[Documentation] Compress sample fragments at 50% ratio and verify output
|
|
${result}= Run Process ${PYTHON} ${HELPER} compress 0.5 cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} skeleton-compress-ok
|
|
|
|
Compress Fragments At Ratio 0.0
|
|
[Documentation] No compression — all fragments should survive
|
|
${result}= Run Process ${PYTHON} ${HELPER} compress 0.0 cwd=${WORKSPACE}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} skeleton-compress-ok
|
|
Should Contain ${result.stdout} fragment_count=3
|
|
|
|
Compress Fragments At Ratio 1.0
|
|
[Documentation] Maximum compression — only top fragment should survive
|
|
${result}= Run Process ${PYTHON} ${HELPER} compress 1.0 cwd=${WORKSPACE}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} skeleton-compress-ok
|
|
Should Contain ${result.stdout} fragment_count=1
|
|
|
|
Validate Ratio Bounds
|
|
[Documentation] Out-of-range ratios must raise ValueError
|
|
${result}= Run Process ${PYTHON} ${HELPER} validate-ratio-bounds cwd=${WORKSPACE}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} skeleton-ratio-bounds-ok
|
|
|
|
Verify Metadata Fields
|
|
[Documentation] Metadata should record ratio, tokens, and decision IDs
|
|
${result}= Run Process ${PYTHON} ${HELPER} metadata-fields cwd=${WORKSPACE}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} skeleton-metadata-ok
|
|
|
|
Verify Stable Fragment Ordering
|
|
[Documentation] Fragments with equal relevance must be ordered deterministically
|
|
${result}= Run Process ${PYTHON} ${HELPER} stable-ordering cwd=${WORKSPACE}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} skeleton-stable-ordering-ok
|