mirror of
https://github.com/aljazceru/enclava.git
synced 2025-12-17 15:34:36 +01:00
273 lines
6.5 KiB
Python
273 lines
6.5 KiB
Python
"""
|
|
Module Protocols for Confidential Empire
|
|
|
|
This file defines the interface contracts that modules must implement for inter-module communication.
|
|
Using Python protocols provides compile-time type checking with zero runtime overhead.
|
|
"""
|
|
|
|
from typing import Protocol, Dict, List, Any, Optional, Union
|
|
from datetime import datetime
|
|
from abc import abstractmethod
|
|
|
|
|
|
class RAGServiceProtocol(Protocol):
|
|
"""Protocol for RAG (Retrieval-Augmented Generation) service interface"""
|
|
|
|
@abstractmethod
|
|
async def search(
|
|
self, query: str, collection_name: str, top_k: int
|
|
) -> Dict[str, Any]:
|
|
"""
|
|
Search for relevant documents
|
|
|
|
Args:
|
|
query: Search query string
|
|
collection_name: Name of the collection to search in
|
|
top_k: Number of top results to return
|
|
|
|
Returns:
|
|
Dictionary containing search results with 'results' key
|
|
"""
|
|
...
|
|
|
|
@abstractmethod
|
|
async def index_document(
|
|
self, content: str, metadata: Dict[str, Any] = None
|
|
) -> str:
|
|
"""
|
|
Index a document in the vector database
|
|
|
|
Args:
|
|
content: Document content to index
|
|
metadata: Optional metadata for the document
|
|
|
|
Returns:
|
|
Document ID
|
|
"""
|
|
...
|
|
|
|
@abstractmethod
|
|
async def delete_document(self, document_id: str) -> bool:
|
|
"""
|
|
Delete a document from the vector database
|
|
|
|
Args:
|
|
document_id: ID of document to delete
|
|
|
|
Returns:
|
|
True if successfully deleted
|
|
"""
|
|
...
|
|
|
|
|
|
class ChatbotServiceProtocol(Protocol):
|
|
"""Protocol for Chatbot service interface"""
|
|
|
|
@abstractmethod
|
|
async def chat_completion(self, request: Any, user_id: str, db: Any) -> Any:
|
|
"""
|
|
Generate chat completion response
|
|
|
|
Args:
|
|
request: Chat request object
|
|
user_id: ID of the user making the request
|
|
db: Database session
|
|
|
|
Returns:
|
|
Chat response object
|
|
"""
|
|
...
|
|
|
|
@abstractmethod
|
|
async def create_chatbot(self, config: Any, user_id: str, db: Any) -> Any:
|
|
"""
|
|
Create a new chatbot instance
|
|
|
|
Args:
|
|
config: Chatbot configuration
|
|
user_id: ID of the user creating the chatbot
|
|
db: Database session
|
|
|
|
Returns:
|
|
Created chatbot instance
|
|
"""
|
|
...
|
|
|
|
|
|
class LiteLLMClientProtocol(Protocol):
|
|
"""Protocol for LiteLLM client interface"""
|
|
|
|
@abstractmethod
|
|
async def completion(
|
|
self, model: str, messages: List[Dict[str, str]], **kwargs
|
|
) -> Any:
|
|
"""
|
|
Create a completion using the specified model
|
|
|
|
Args:
|
|
model: Model name to use
|
|
messages: List of messages for the conversation
|
|
**kwargs: Additional parameters for the completion
|
|
|
|
Returns:
|
|
Completion response object
|
|
"""
|
|
...
|
|
|
|
@abstractmethod
|
|
async def create_chat_completion(
|
|
self,
|
|
model: str,
|
|
messages: List[Dict[str, str]],
|
|
user_id: str,
|
|
api_key_id: str,
|
|
**kwargs,
|
|
) -> Any:
|
|
"""
|
|
Create a chat completion with user tracking
|
|
|
|
Args:
|
|
model: Model name to use
|
|
messages: List of messages for the conversation
|
|
user_id: ID of the user making the request
|
|
api_key_id: API key identifier
|
|
**kwargs: Additional parameters
|
|
|
|
Returns:
|
|
Chat completion response
|
|
"""
|
|
...
|
|
|
|
|
|
class CacheServiceProtocol(Protocol):
|
|
"""Protocol for Cache service interface"""
|
|
|
|
@abstractmethod
|
|
async def get(self, key: str, default: Any = None) -> Any:
|
|
"""
|
|
Get value from cache
|
|
|
|
Args:
|
|
key: Cache key
|
|
default: Default value if key not found
|
|
|
|
Returns:
|
|
Cached value or default
|
|
"""
|
|
...
|
|
|
|
@abstractmethod
|
|
async def set(self, key: str, value: Any, ttl: Optional[int] = None) -> bool:
|
|
"""
|
|
Set value in cache
|
|
|
|
Args:
|
|
key: Cache key
|
|
value: Value to cache
|
|
ttl: Time to live in seconds
|
|
|
|
Returns:
|
|
True if successfully cached
|
|
"""
|
|
...
|
|
|
|
@abstractmethod
|
|
async def delete(self, key: str) -> bool:
|
|
"""
|
|
Delete key from cache
|
|
|
|
Args:
|
|
key: Cache key to delete
|
|
|
|
Returns:
|
|
True if successfully deleted
|
|
"""
|
|
...
|
|
|
|
|
|
class SecurityServiceProtocol(Protocol):
|
|
"""Protocol for Security service interface"""
|
|
|
|
@abstractmethod
|
|
async def analyze_request(self, request: Any) -> Any:
|
|
"""
|
|
Perform security analysis on a request
|
|
|
|
Args:
|
|
request: Request object to analyze
|
|
|
|
Returns:
|
|
Security analysis result
|
|
"""
|
|
...
|
|
|
|
@abstractmethod
|
|
async def validate_request(self, request: Any) -> bool:
|
|
"""
|
|
Validate request for security compliance
|
|
|
|
Args:
|
|
request: Request object to validate
|
|
|
|
Returns:
|
|
True if request is valid/safe
|
|
"""
|
|
...
|
|
|
|
|
|
class WorkflowServiceProtocol(Protocol):
|
|
"""Protocol for Workflow service interface"""
|
|
|
|
@abstractmethod
|
|
async def execute_workflow(
|
|
self, workflow: Any, input_data: Dict[str, Any] = None
|
|
) -> Any:
|
|
"""
|
|
Execute a workflow definition
|
|
|
|
Args:
|
|
workflow: Workflow definition to execute
|
|
input_data: Optional input data for the workflow
|
|
|
|
Returns:
|
|
Workflow execution result
|
|
"""
|
|
...
|
|
|
|
@abstractmethod
|
|
async def get_execution(self, execution_id: str) -> Any:
|
|
"""
|
|
Get workflow execution status
|
|
|
|
Args:
|
|
execution_id: ID of the execution to retrieve
|
|
|
|
Returns:
|
|
Execution status object
|
|
"""
|
|
...
|
|
|
|
|
|
class ModuleServiceProtocol(Protocol):
|
|
"""Base protocol for all module services"""
|
|
|
|
@abstractmethod
|
|
async def initialize(self, **kwargs) -> None:
|
|
"""Initialize the module"""
|
|
...
|
|
|
|
@abstractmethod
|
|
async def cleanup(self) -> None:
|
|
"""Cleanup module resources"""
|
|
...
|
|
|
|
@abstractmethod
|
|
def get_required_permissions(self) -> List[Any]:
|
|
"""Get required permissions for this module"""
|
|
...
|
|
|
|
|
|
# Type aliases for common service combinations
|
|
ServiceRegistry = Dict[str, ModuleServiceProtocol]
|
|
ServiceDependencies = Dict[str, Optional[ModuleServiceProtocol]]
|