"""Partner Inference Harness.

A load testing harness for routing inference endpoints with optional
conductor infrastructure for model orchestration.

Provides two routing architectures:

1. RouterMLP: Simple 4-layer MLP for fast inference
2. CompatibilityScorer: Dual-encoder model for query-LLM compatibility scoring

Example usage:

    from partner_inference_harness import Router, GraphRouter, TextEmbedder

    # Simple MLP routing
    router = Router()
    result = router.route("What is the capital of France?")
    print(f"Selected: {result.selected_model} (confidence: {result.confidence:.2f})")

    # Compatibility-based routing (uses LLM embeddings)
    embedder = TextEmbedder()
    graph_router = GraphRouter()
    # ... use with query and LLM description embeddings
"""

__version__ = "0.1.0"

from partner_inference_harness.conductor import (
    ClaudeConductor,
    ConductorError,
    ConductorInterface,
    ConductorRequest,
    ConductorResponse,
    RND1Conductor,
)
from partner_inference_harness.embedding import TextEmbedder
from partner_inference_harness.inference import (
    GraphRouter,
    GraphRoutingResult,
    Router,
    RoutingResult,
    create_graph_router,
    create_router,
)
from partner_inference_harness.model import (
    CompatibilityConfig,
    CompatibilityScorer,
    HeteroGraphConfig,
    HeteroGraphRouter,
    RouterConfig,
    RouterMLP,
)

__all__ = [
    # Embedding
    "TextEmbedder",
    # MLP Router (simple, fast)
    "Router",
    "RoutingResult",
    "RouterConfig",
    "RouterMLP",
    "create_router",
    # Compatibility Scorer (dual-encoder, richer modeling)
    "GraphRouter",
    "GraphRoutingResult",
    "CompatibilityConfig",
    "CompatibilityScorer",
    "create_graph_router",
    # Backward compatibility aliases
    "HeteroGraphConfig",
    "HeteroGraphRouter",
    # Conductor (model orchestration)
    "ConductorInterface",
    "ConductorRequest",
    "ConductorResponse",
    "ConductorError",
    "RND1Conductor",
    "ClaudeConductor",
]
