conductor(checkpoint): Final checkpoint for RAG Support track - Phase 4 complete
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
import pytest
|
||||
import time
|
||||
import sys
|
||||
import os
|
||||
import json
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "src")))
|
||||
|
||||
from src import api_hook_client
|
||||
|
||||
@pytest.mark.integration
|
||||
def test_phase4_final_verify(live_gui):
|
||||
client = api_hook_client.ApiHookClient()
|
||||
assert client.wait_for_server(timeout=15), "Hook server did not start"
|
||||
|
||||
# 1. Setup mock project data
|
||||
workspace_dir = Path("tests/artifacts/live_gui_workspace")
|
||||
workspace_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Create dummy files
|
||||
(workspace_dir / "final_test_1.txt").write_text("Manual Slop RAG is great.")
|
||||
(workspace_dir / "final_test_2.py").write_text("def test_func():\n return 'Manual Slop RAG result'")
|
||||
|
||||
try:
|
||||
# 2. Configure project through Hook API
|
||||
client.set_value('files', ['final_test_1.txt', 'final_test_2.py'])
|
||||
client.set_value('rag_enabled', True)
|
||||
client.set_value('rag_source', 'chroma')
|
||||
client.set_value('rag_emb_provider', 'local')
|
||||
client.set_value('auto_add_history', True)
|
||||
client.set_value('current_provider', 'gemini_cli')
|
||||
client.set_value('gcli_path', os.path.abspath(os.path.join(os.path.dirname(__file__), "mock_gcli.bat")))
|
||||
|
||||
# 3. Trigger Initial Indexing
|
||||
print("[VERIFY] Triggering indexing...")
|
||||
client.click('btn_rebuild_rag_index')
|
||||
|
||||
# Wait for ready
|
||||
success = False
|
||||
for _ in range(50):
|
||||
status = client.get_value('rag_status')
|
||||
if status == 'ready':
|
||||
success = True
|
||||
break
|
||||
time.sleep(0.5)
|
||||
assert success, f"Indexing failed. Status: {status}"
|
||||
|
||||
# 4. Verify Retrieval and Visualization
|
||||
print("[VERIFY] Triggering retrieval turn...")
|
||||
client.set_value('ai_input', "What makes RAG great?")
|
||||
client.click('btn_gen_send')
|
||||
|
||||
# Wait for completion
|
||||
success = False
|
||||
for _ in range(50):
|
||||
state = client.get_gui_state()
|
||||
if state.get('ai_status') == 'done':
|
||||
success = True
|
||||
break
|
||||
time.sleep(0.5)
|
||||
assert success, "AI request timed out"
|
||||
|
||||
# 5. Verify discussion history has the context
|
||||
session = client.get_session()
|
||||
entries = session.get('session', {}).get('entries', [])
|
||||
|
||||
found_rag = False
|
||||
for entry in entries:
|
||||
if entry.get('role') == 'User' and '## Retrieved Context' in entry.get('content', ''):
|
||||
found_rag = True
|
||||
print(f"[VERIFY] Found RAG context: {entry.get('content')[:100]}...")
|
||||
assert "Manual Slop RAG is great" in entry.get('content')
|
||||
break
|
||||
assert found_rag, "RAG context not found in history"
|
||||
|
||||
# 6. Verify Incremental Indexing (no changes)
|
||||
print("[VERIFY] Verifying incrementality...")
|
||||
start = time.time()
|
||||
client.click('btn_rebuild_rag_index')
|
||||
for _ in range(50):
|
||||
if client.get_value('rag_status') == 'ready': break
|
||||
time.sleep(0.1)
|
||||
duration = time.time() - start
|
||||
print(f"[VERIFY] Incremental indexing took {duration:.2f}s")
|
||||
assert duration < 1.0, "Incremental indexing too slow (expected < 1s for 2 files)"
|
||||
|
||||
print("[VERIFY] Phase 4 final verification COMPLETED successfully.")
|
||||
|
||||
except Exception as e:
|
||||
print(f"[VERIFY] ERROR in final verification: {e}")
|
||||
raise
|
||||
Reference in New Issue
Block a user