""" adapters/llm/anthropic.py Anthropic Claude adapter — Phase 2 stub. TODO (Phase 2): - Implement complete() using the anthropic SDK (anthropic.Anthropic client). - Implement resolve_model() by reading config/team.yaml capability_map. - Handle streaming responses, rate-limit retries, and token counting. - Support system-prompt injection via context["system_prompt"]. - Map capability → model using the provider's capability_map config. """ from __future__ import annotations from adapters.base.llm import LLMAdapter class AnthropicAdapter(LLMAdapter): """ LLM adapter for Anthropic Claude models. Reads model configuration from config/team.yaml: models.provider: anthropic models.capability_map.reasoning-heavy.anthropic: claude-opus-4-6 models.capability_map.capable.anthropic: claude-sonnet-4-6 models.capability_map.fast-cheap.anthropic: claude-haiku-3-5 """ def __init__(self, config: dict) -> None: # TODO (Phase 2): Accept loaded team.yaml config dict. # Extract API key from environment (ANTHROPIC_API_KEY). # Initialise the anthropic.Anthropic() client. raise NotImplementedError("AnthropicAdapter.__init__ is not yet implemented.") def complete(self, prompt: str, capability: str, context: dict) -> str: # TODO (Phase 2): Call anthropic client messages.create(). # Use resolve_model(capability) to pick the model. # Support context keys: system_prompt, max_tokens, temperature. # Return response text as a plain string. raise NotImplementedError("AnthropicAdapter.complete is not yet implemented.") def resolve_model(self, capability: str) -> str: # TODO (Phase 2): Look up capability in team.yaml capability_map. # Fall back to "capable" tier model if capability is unknown. raise NotImplementedError("AnthropicAdapter.resolve_model is not yet implemented.")