"""LLM Infrastructure - Model providers and routing.

Architecture:
- OpenRouter is the primary provider (200+ models via single API)
- Ollama is the fallback for local/offline usage
- Routing is capability-based (code, reasoning, vision, etc.)

Usage:
    from stdlib.llm import get_provider, LLMGenerateResult

    # Get a provider and generate
    provider = get_provider()
    result = await provider.generate(
        prompt="Hello",
        model="openai/gpt-4o",
    )

    # Or use capability-based routing
    from stdlib.llm import get_model_for_capability, ModelCapability

    model = get_model_for_capability(ModelCapability.CODE)
    result = await provider.generate(prompt="Write a function", model=model)
"""

from stdlib.llm.providers import (
    LLMEmbedResult,
    # DTOs
    LLMGenerateResult,
    # Protocol
    LLMProvider,
    LLMProviderError,
    close_all_providers,
    # Registry
    get_provider,
    list_available_providers,
)
from stdlib.llm.routing import (
    # Enum
    ModelCapability,
    get_default_model,
    # Functions
    get_model_for_capability,
    get_model_info,
    list_capabilities,
)

__all__ = [
    "LLMEmbedResult",
    # DTOs
    "LLMGenerateResult",
    # Protocol
    "LLMProvider",
    "LLMProviderError",
    # Routing
    "ModelCapability",
    "close_all_providers",
    "get_default_model",
    "get_model_for_capability",
    "get_model_info",
    # Provider registry
    "get_provider",
    "list_available_providers",
    "list_capabilities",
]
