"""
markitect.llm — LLM integration adapters for MarkiTect.

Provides concrete :class:`LLMAdapter` implementations backed by
OpenRouter (HTTP) and Claude Code CLI (subprocess).

Quick start::

    from markitect.llm import create_adapter

    adapter = create_adapter("openrouter", model="anthropic/claude-sonnet-4")
    response = adapter.execute_prompt(prompt, run_config)
"""

from markitect.llm.models import RunConfig, LLMResponse
from markitect.llm.adapter import LLMAdapter, MockLLMAdapter, ErrorLLMAdapter
from markitect.llm.factory import create_adapter
from markitect.llm.openrouter import OpenRouterAdapter
from markitect.llm.claude_code import ClaudeCodeAdapter
from markitect.llm.gemini import GeminiAdapter
from markitect.llm.openai import OpenAIAdapter
from markitect.llm.config import LLMConfig, load_config
from markitect.llm.exceptions import (
    LLMError,
    LLMConfigurationError,
    LLMAPIError,
    LLMRateLimitError,
    LLMTimeoutError,
    LLMSubprocessError,
)
from markitect.llm.embedding_adapter import EmbeddingAdapter
from markitect.llm.embedding_openai import OpenAICompatibleEmbeddingAdapter
from markitect.llm.embedding_cache import EmbeddingCache
from markitect.llm.embedding_factory import create_embedding_adapter
from markitect.llm.similarity import (
    cosine_similarity,
    similarity_matrix,
    find_similar_pairs,
)

__all__ = [
    "RunConfig",
    "LLMResponse",
    "LLMAdapter",
    "MockLLMAdapter",
    "ErrorLLMAdapter",
    "create_adapter",
    "OpenRouterAdapter",
    "ClaudeCodeAdapter",
    "GeminiAdapter",
    "OpenAIAdapter",
    "LLMConfig",
    "load_config",
    "LLMError",
    "LLMConfigurationError",
    "LLMAPIError",
    "LLMRateLimitError",
    "LLMTimeoutError",
    "LLMSubprocessError",
    "EmbeddingAdapter",
    "OpenAICompatibleEmbeddingAdapter",
    "EmbeddingCache",
    "create_embedding_adapter",
    "cosine_similarity",
    "similarity_matrix",
    "find_similar_pairs",
]
