Files
markitect-main/tests/integration/llm/test_claude_code_live.py
tegwick fecc2fd4fa feat(llm): add LLM integration module with OpenRouter and Claude Code adapters
Implements markitect/llm/ package with concrete LLMAdapter implementations:
- OpenRouterAdapter: HTTP via urllib with retry/backoff on 429/5xx
- ClaudeCodeAdapter: subprocess-based Claude CLI with stdin piping
- Factory pattern: create_adapter("openrouter") or create_adapter("claude-code")
- API key resolution chain: constructor > env var > project-root key file
- 42 unit tests, 2 integration tests (gated on API key / CLI availability)

Also adds the infospace-with-history example with Wealth of Nations VSM
analysis pipeline, templates, schemas, source chapters, and processed
output for chapters 1-2. process_chapters.py now supports --provider
and --model flags for automatic LLM-driven processing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 01:17:58 +01:00

29 lines
799 B
Python

"""Live integration test for ClaudeCodeAdapter.
Skipped unless the ``claude`` CLI is available on PATH.
"""
import shutil
import pytest
from markitect.llm.claude_code import ClaudeCodeAdapter
from markitect.prompts.execution.models import RunConfig, LLMResponse
pytestmark = pytest.mark.skipif(
shutil.which("claude") is None,
reason="claude CLI not found on PATH",
)
class TestClaudeCodeLive:
def test_simple_completion(self):
adapter = ClaudeCodeAdapter()
config = RunConfig(timeout_seconds=60, max_tokens=50)
resp = adapter.execute_prompt("Reply with exactly: PONG", config)
assert isinstance(resp, LLMResponse)
assert len(resp.content.strip()) > 0
assert resp.metadata["provider"] == "claude-code"