74 lines
2.9 KiB
Python
74 lines
2.9 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
from dataclasses import dataclass
|
|
|
|
from band_aider.ai_client.llm_logging import (
|
|
initialize_llm_logging,
|
|
log_markdown_document,
|
|
reset_llm_logging_for_tests,
|
|
)
|
|
from band_aider.context.band_aider_facts import BandAiderFacts
|
|
from band_aider.context.contex_bag import ContextBag
|
|
from band_aider.context.context_factory import ContextFactory
|
|
from band_aider.context.resume_state import configure_resume_settings, reset_resume_state_for_tests
|
|
from band_aider.judgement.code_parser import CodeParser
|
|
from band_aider.judgement.file_parser import FileParser
|
|
from band_aider.judgement.prompt_formatter import MarkdownPromptFormatterBuilder
|
|
from tests.support.completion_clients import StaticOpenAICompatibleClient
|
|
from tests.support.memory_repo_exec import MemoryRepoExec
|
|
|
|
|
|
@dataclass
|
|
class TinyContext(ContextBag):
|
|
marker: str = ""
|
|
|
|
|
|
def test_context_checkpoint_round_trip_and_pruning_use_repo_exec() -> None:
|
|
adapter = MemoryRepoExec()
|
|
reset_resume_state_for_tests()
|
|
configure_resume_settings(checkpoint_dir=Path("/testbed/.band-aider-chkpts"), keep=1, repo_exec=adapter)
|
|
first = TinyContext(goal="goal", classes=[], marker="one").persist()
|
|
second_context = TinyContext(goal="goal", classes=[], marker="two")
|
|
second = second_context.persist()
|
|
|
|
assert not adapter.exists(first)
|
|
assert adapter.exists(second)
|
|
restored = ContextFactory().latest_payload_for(TinyContext)
|
|
assert restored is not None
|
|
assert restored["marker"] == "two"
|
|
|
|
|
|
def test_facts_use_the_supplied_repo_exec() -> None:
|
|
adapter = MemoryRepoExec()
|
|
checkpoint_dir = Path("/testbed/.band-aider-chkpts")
|
|
reset_resume_state_for_tests()
|
|
configure_resume_settings(checkpoint_dir=checkpoint_dir, repo_exec=adapter)
|
|
facts = BandAiderFacts()
|
|
facts.record_llm_call(tokens_spent=7, wait_seconds=0, wall_time=1)
|
|
facts.persist(checkpoint_dir, repo_exec=adapter)
|
|
restored_facts = BandAiderFacts()
|
|
restored_facts.restore(checkpoint_dir, repo_exec=adapter)
|
|
assert restored_facts.total_tokens_spent == 7
|
|
|
|
|
|
def test_file_parser_and_project_log_use_repo_exec() -> None:
|
|
adapter = MemoryRepoExec()
|
|
source_path = Path("/testbed/src/example.py")
|
|
adapter.write_text(source_path, "VALUE = 1\n")
|
|
|
|
parser = FileParser(
|
|
StaticOpenAICompatibleClient('{"location":"","summary":"ok","relevance":[],"relevant_symbols":{}}'),
|
|
MarkdownPromptFormatterBuilder(),
|
|
repo_exec=adapter,
|
|
)
|
|
assert parser.parse_file(str(source_path), "inspect").summary == "ok"
|
|
reset_llm_logging_for_tests()
|
|
try:
|
|
initialize_llm_logging(Path("/testbed"), adapter)
|
|
log_markdown_document("boundary", "project evidence")
|
|
log_files = adapter.list_files(Path("/testbed/.band-aider-logs"), patterns=["*.md"], recursive=True)
|
|
assert len(log_files) == 1
|
|
assert "project evidence" in adapter.read_text(log_files[0])
|
|
finally:
|
|
reset_llm_logging_for_tests()
|