1"""Base routing strategy protocol."""
2
3from __future__ import annotations
4
5from typing import Protocol
6
7from lexigram.ai.rag.routing.types import (
8 DataSource,
9 QueryFeatures,
10 RoutingDecision,
11)
12
13
14class RoutingStrategy(Protocol):
15 """Protocol for routing strategies.
16
17 All routing strategies must implement the `route` method that takes
18 query features and available data sources, and returns a routing decision.
19
20 Example:
21 ```python
22 class MyRouter:
23 async def route(
24 self,
25 features: QueryFeatures,
26 available_sources: list[DataSourceProtocol]
27 ) -> RoutingDecision:
28 # Custom routing logic
29 return RoutingDecision(...)
30 ```
31 """
32
33 async def route(
34 self,
35 features: QueryFeatures,
36 available_sources: list[DataSource],
37 ) -> RoutingDecision:
38 """Route a query to appropriate data sources.
39
40 Args:
41 features: Extracted query features.
42 available_sources: List of available data sources.
43
44 Returns:
45 Routing decision with selected sources and strategy.
46 """
47 ...