| | """ |
| | Configuration management for SPARKNET |
| | Handles loading and validation of configuration files |
| | """ |
| |
|
| | import yaml |
| | from pathlib import Path |
| | from typing import Dict, Any, Optional |
| | from pydantic import BaseModel, Field |
| | from loguru import logger |
| |
|
| |
|
| | class GPUConfig(BaseModel): |
| | """GPU configuration.""" |
| | primary: int = Field(default=0, description="Primary GPU device ID") |
| | fallback: list[int] = Field(default=[1, 2, 3], description="Fallback GPU device IDs") |
| | max_memory_per_model: str = Field(default="8GB", description="Max memory per model") |
| |
|
| |
|
| | class OllamaConfig(BaseModel): |
| | """Ollama configuration.""" |
| | host: str = Field(default="localhost", description="Ollama server host") |
| | port: int = Field(default=11434, description="Ollama server port") |
| | default_model: str = Field(default="llama3.2:latest", description="Default model") |
| | timeout: int = Field(default=300, description="Request timeout in seconds") |
| |
|
| |
|
| | class MemoryConfig(BaseModel): |
| | """Memory configuration.""" |
| | vector_store: str = Field(default="chromadb", description="Vector store backend") |
| | embedding_model: str = Field( |
| | default="nomic-embed-text:latest", |
| | description="Embedding model" |
| | ) |
| | max_context_length: int = Field(default=4096, description="Max context length") |
| | persist_directory: str = Field(default="./data/memory", description="Memory persistence directory") |
| |
|
| |
|
| | class WorkflowConfig(BaseModel): |
| | """Workflow configuration.""" |
| | max_parallel_tasks: int = Field(default=5, description="Max parallel tasks") |
| | task_timeout: int = Field(default=600, description="Task timeout in seconds") |
| | retry_attempts: int = Field(default=3, description="Retry attempts for failed tasks") |
| |
|
| |
|
| | class LoggingConfig(BaseModel): |
| | """Logging configuration.""" |
| | level: str = Field(default="INFO", description="Logging level") |
| | log_file: Optional[str] = Field(default="./logs/sparknet.log", description="Log file path") |
| | rotation: str = Field(default="100 MB", description="Log rotation size") |
| | retention: str = Field(default="7 days", description="Log retention period") |
| |
|
| |
|
| | class SparknetConfig(BaseModel): |
| | """Main SPARKNET configuration.""" |
| | gpu: GPUConfig = Field(default_factory=GPUConfig) |
| | ollama: OllamaConfig = Field(default_factory=OllamaConfig) |
| | memory: MemoryConfig = Field(default_factory=MemoryConfig) |
| | workflow: WorkflowConfig = Field(default_factory=WorkflowConfig) |
| | logging: LoggingConfig = Field(default_factory=LoggingConfig) |
| |
|
| |
|
| | def load_config(config_path: Optional[Path] = None) -> SparknetConfig: |
| | """ |
| | Load configuration from YAML file or use defaults. |
| | |
| | Args: |
| | config_path: Path to configuration file |
| | |
| | Returns: |
| | SparknetConfig instance |
| | """ |
| | if config_path and config_path.exists(): |
| | logger.info(f"Loading configuration from {config_path}") |
| | with open(config_path, "r") as f: |
| | config_data = yaml.safe_load(f) |
| | return SparknetConfig(**config_data) |
| | else: |
| | logger.info("Using default configuration") |
| | return SparknetConfig() |
| |
|
| |
|
| | def save_config(config: SparknetConfig, config_path: Path): |
| | """ |
| | Save configuration to YAML file. |
| | |
| | Args: |
| | config: SparknetConfig instance |
| | config_path: Path to save configuration |
| | """ |
| | config_path.parent.mkdir(parents=True, exist_ok=True) |
| | with open(config_path, "w") as f: |
| | yaml.dump(config.model_dump(), f, default_flow_style=False) |
| | logger.info(f"Configuration saved to {config_path}") |
| |
|
| |
|
| | |
| | _config: Optional[SparknetConfig] = None |
| |
|
| |
|
| | def get_config() -> SparknetConfig: |
| | """Get or create the global configuration instance.""" |
| | global _config |
| | if _config is None: |
| | _config = load_config() |
| | return _config |
| |
|
| |
|
| | def set_config(config: SparknetConfig): |
| | """Set the global configuration instance.""" |
| | global _config |
| | _config = config |
| |
|