sovereign-engine-v2 / src /core /protocols.py
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/sovereign-engine-v2
9abace2 verified
Raw
History Blame Contribute Delete
12.9 kB
"""
Layer 1: Protocol Definitions
Part of SOVEREIGN PYTHON LLM ENGINE
Typed protocols for all major system components.
Protocols define contracts without implementation.
"""
from typing import Protocol, AsyncIterator, Any, runtime_checkable
import numpy as np
# ==========================================
# Retrieval Protocols
# ==========================================
@runtime_checkable
class Retriever(Protocol):
"""
Protocol for all retrieval sources (RAG, search, database, etc.)
Implementations:
- WikipediaRetriever
- GitHubRetriever
- VectorStoreRetriever
- SQLRetriever
"""
async def retrieve(self, query: str) -> str:
"""
Retrieve relevant content for query.
Args:
query: User query string
Returns:
Retrieved content (may be concatenated from multiple sources)
Raises:
RetrievalError: If retrieval fails
"""
...
@runtime_checkable
class BatchRetriever(Protocol):
"""Retriever that supports batch queries"""
async def retrieve_batch(self, queries: list[str]) -> list[str]:
"""Retrieve content for multiple queries concurrently"""
...
# ==========================================
# Tool Execution Protocols
# ==========================================
@runtime_checkable
class Tool(Protocol):
"""
Protocol for executable tools (code execution, API calls, etc.)
All tools must:
- Accept structured parameters (dict)
- Return structured results (dict)
- Be async
- Handle errors gracefully
"""
name: str
description: str
parameters_schema: dict[str, Any] # JSON schema
async def execute(self, params: dict[str, Any]) -> dict[str, Any]:
"""
Execute tool with given parameters.
Args:
params: Tool parameters (validated against schema)
Returns:
Tool execution results
Raises:
ToolExecutionError: If execution fails
"""
...
@runtime_checkable
class SandboxedTool(Protocol):
"""Tool that runs in isolated sandbox (e.g., code execution)"""
timeout: float # Execution timeout in seconds
async def execute_sandboxed(
self,
params: dict[str, Any]
) -> dict[str, Any]:
"""Execute in isolated environment"""
...
# ==========================================
# Model Inference Protocols
# ==========================================
@runtime_checkable
class Model(Protocol):
"""
Protocol for LLM inference backends.
Implementations:
- LlamaAPIBackend
- OpenAIBackend
- AnthropicBackend
- LocalTransformerBackend
"""
model_id: str
async def generate(
self,
messages: list[dict[str, str]],
temperature: float = 0.0,
max_tokens: int | None = None,
stream: bool = False
) -> str | AsyncIterator[str]:
"""
Generate completion from messages.
Args:
messages: List of {role, content} dicts
temperature: Sampling temperature [0.0, 2.0]
max_tokens: Max tokens to generate (None = model default)
stream: If True, return AsyncIterator of chunks
Returns:
Complete response string, or AsyncIterator of chunks if stream=True
Raises:
ModelError: If generation fails
"""
...
@runtime_checkable
class StructuredOutputModel(Protocol):
"""Model that supports structured output (JSON schema enforcement)"""
async def generate_structured(
self,
messages: list[dict[str, str]],
response_schema: dict[str, Any], # JSON schema
temperature: float = 0.0
) -> dict[str, Any]:
"""
Generate structured output matching schema.
Args:
messages: Conversation history
response_schema: JSON schema to enforce
temperature: Sampling temperature
Returns:
Validated structured output
Raises:
SchemaValidationError: If output doesn't match schema
"""
...
@runtime_checkable
class ToolCallingModel(Protocol):
"""Model that supports native tool calling"""
async def generate_with_tools(
self,
messages: list[dict[str, str]],
tools: list[dict[str, Any]], # Tool definitions
temperature: float = 0.0
) -> dict[str, Any]:
"""
Generate with tool calling support.
Returns:
{
"content": str,
"tool_calls": [{"name": str, "arguments": dict}]
}
"""
...
# ==========================================
# Storage Protocols
# ==========================================
@runtime_checkable
class KeyValueStore(Protocol):
"""Key-value storage interface"""
async def get(self, key: str) -> bytes | None:
"""Get value for key, None if not found"""
...
async def put(self, key: str, value: bytes) -> None:
"""Store key-value pair"""
...
async def delete(self, key: str) -> None:
"""Delete key"""
...
async def exists(self, key: str) -> bool:
"""Check if key exists"""
...
@runtime_checkable
class VectorStore(Protocol):
"""Vector database interface for embeddings"""
dimension: int # Embedding dimension
async def add(
self,
vectors: np.ndarray, # [n, dimension]
metadata: list[dict[str, Any]]
) -> list[str]:
"""
Add vectors with metadata.
Returns:
List of assigned IDs
"""
...
async def search(
self,
query_vector: np.ndarray, # [dimension]
k: int = 5
) -> list[dict[str, Any]]:
"""
Search for k nearest neighbors.
Returns:
List of {id, distance, metadata} dicts
"""
...
@runtime_checkable
class TransactionalStore(Protocol):
"""Database with transaction support"""
async def begin_transaction(self) -> Any:
"""Begin transaction, return transaction handle"""
...
async def commit(self, txn: Any) -> None:
"""Commit transaction"""
...
async def rollback(self, txn: Any) -> None:
"""Rollback transaction"""
...
# ==========================================
# Agent Protocols
# ==========================================
@runtime_checkable
class Agent(Protocol):
"""
Protocol for autonomous agents.
Implementations:
- ReActAgent
- MCTSAgent
- ReasoningAgent
"""
agent_id: str
max_steps: int
async def run(self, task: str) -> str:
"""
Execute agent on task.
Args:
task: Task description
Returns:
Final answer/result
Raises:
AgentError: If execution fails
MaxStepsExceeded: If max_steps reached without answer
"""
...
@runtime_checkable
class ReflectiveAgent(Protocol):
"""Agent with self-reflection capability"""
async def run_with_reflection(
self,
task: str,
reflection_trigger: str = "ERROR"
) -> dict[str, Any]:
"""
Run with reflection on errors.
Returns:
{
"answer": str,
"reflections": list[str],
"steps": int
}
"""
...
# ==========================================
# Router Protocols
# ==========================================
@runtime_checkable
class Router(Protocol):
"""
Protocol for routing/dispatching queries.
Implementations:
- LLMRouter (LLM-based routing)
- RuleRouter (rule-based routing)
- HybridRouter (combination)
"""
async def route(self, query: str) -> str:
"""
Route query to appropriate destination.
Args:
query: User query
Returns:
Destination identifier (e.g., "vector_db", "sql_database")
"""
...
@runtime_checkable
class WeightedRouter(Protocol):
"""Router that returns routing weights (for ensemble)"""
async def route_weighted(
self,
query: str
) -> dict[str, float]:
"""
Route with weights for each destination.
Returns:
{destination: weight} where sum(weights) = 1.0
"""
...
# ==========================================
# MoE Expert Protocols
# ==========================================
@runtime_checkable
class Expert(Protocol):
"""
Protocol for MoE experts.
Each expert is a feed-forward network (typically SwiGLU).
"""
expert_id: int
hidden_dim: int
intermediate_dim: int
def forward(self, x: np.ndarray) -> np.ndarray:
"""
Forward pass through expert.
Args:
x: Input hidden state [hidden_dim]
Returns:
Output hidden state [hidden_dim]
"""
...
@runtime_checkable
class QuantumExpert(Protocol):
"""Expert with quantum token handling"""
def forward_quantum(
self,
x: np.ndarray,
quantum_state: Any # QuantumState from quantum_moe.py
) -> np.ndarray:
"""Forward pass with quantum token encoding"""
...
# ==========================================
# Gating Network Protocols
# ==========================================
@runtime_checkable
class GatingNetwork(Protocol):
"""
Protocol for MoE gating/routing.
Implementations:
- Top-K Gating
- Top-K with noise
- Learned routing
"""
num_experts: int
top_k: int
def gate(self, x: np.ndarray) -> tuple[np.ndarray, np.ndarray]:
"""
Compute gating weights.
Args:
x: Input hidden state
Returns:
(expert_indices, expert_weights)
- expert_indices: [top_k] indices of selected experts
- expert_weights: [top_k] routing weights
"""
...
# ==========================================
# Scanner Protocols
# ==========================================
@runtime_checkable
class CodeScanner(Protocol):
"""Protocol for code analysis/scanning"""
async def scan_file(self, file_path: str) -> dict[str, Any]:
"""
Scan single file.
Returns:
{
"classes": list[str],
"functions": list[str],
"imports": list[str],
...
}
"""
...
async def scan_directory(self, root: str) -> dict[str, Any]:
"""Scan entire directory recursively"""
...
@runtime_checkable
class DependencyAnalyzer(Protocol):
"""Analyze code dependencies"""
async def build_graph(self, root: str) -> dict[str, Any]:
"""
Build dependency graph.
Returns:
{
"nodes": list[str], # File paths
"edges": list[tuple[str, str]], # (source, target)
"forward": dict, # file -> dependencies
"reverse": dict # file -> dependents
}
"""
...
# ==========================================
# Ledger/Evidence Protocols
# ==========================================
@runtime_checkable
class EvidenceLedger(Protocol):
"""Protocol for append-only evidence logging"""
async def append(
self,
event_type: str,
data: bytes,
metadata: dict[str, Any]
) -> dict[str, Any]:
"""
Append evidence record.
Returns:
Record metadata (timestamp, hash, signature)
"""
...
async def verify_chain(self) -> bool:
"""Verify cryptographic chain integrity"""
...
# ==========================================
# Type Checking Helpers
# ==========================================
def is_retriever(obj: Any) -> bool:
"""Check if object implements Retriever protocol"""
return isinstance(obj, Retriever)
def is_model(obj: Any) -> bool:
"""Check if object implements Model protocol"""
return isinstance(obj, Model)
def is_agent(obj: Any) -> bool:
"""Check if object implements Agent protocol"""
return isinstance(obj, Agent)