before rbac and tool use

This commit is contained in:
2025-10-30 06:12:35 +01:00
parent df426f8dd5
commit e070c95190
22 changed files with 577 additions and 4246 deletions

View File

@@ -78,15 +78,16 @@ class LLMServiceConfig(BaseModel):
def create_default_config() -> LLMServiceConfig:
def create_default_config(env_vars=None) -> LLMServiceConfig:
"""Create default LLM service configuration"""
env = env_vars or EnvironmentVariables()
# PrivateMode.ai configuration (via proxy)
# Models will be fetched dynamically from proxy /models endpoint
privatemode_config = ProviderConfig(
name="privatemode",
provider_type="privatemode",
enabled=True,
enabled=bool(env.PRIVATEMODE_API_KEY),
base_url=settings.PRIVATEMODE_PROXY_URL,
api_key_env_var="PRIVATEMODE_API_KEY",
default_model="privatemode-latest",
@@ -108,13 +109,105 @@ def create_default_config() -> LLMServiceConfig:
)
)
providers: Dict[str, ProviderConfig] = {
"privatemode": privatemode_config
}
if env.OPENAI_API_KEY:
providers["openai"] = ProviderConfig(
name="openai",
provider_type="openai",
enabled=True,
base_url="https://api.openai.com/v1",
api_key_env_var="OPENAI_API_KEY",
default_model="gpt-4o-mini",
supported_models=[
"gpt-4o-mini",
"gpt-4o",
"gpt-3.5-turbo",
"text-embedding-3-large",
"text-embedding-3-small"
],
capabilities=["chat", "embeddings"],
priority=2,
supports_streaming=True,
supports_function_calling=True,
max_context_window=128000,
max_output_tokens=8192,
resilience=ResilienceConfig(
max_retries=2,
retry_delay_ms=750,
timeout_ms=45000,
circuit_breaker_threshold=6,
circuit_breaker_reset_timeout_ms=60000
)
)
if env.ANTHROPIC_API_KEY:
providers["anthropic"] = ProviderConfig(
name="anthropic",
provider_type="anthropic",
enabled=True,
base_url="https://api.anthropic.com/v1",
api_key_env_var="ANTHROPIC_API_KEY",
default_model="claude-3-opus-20240229",
supported_models=[
"claude-3-opus-20240229",
"claude-3-sonnet-20240229",
"claude-3-haiku-20240307"
],
capabilities=["chat"],
priority=3,
supports_streaming=True,
supports_function_calling=False,
max_context_window=200000,
max_output_tokens=4096,
resilience=ResilienceConfig(
max_retries=3,
retry_delay_ms=1000,
timeout_ms=60000,
circuit_breaker_threshold=5,
circuit_breaker_reset_timeout_ms=90000
)
)
if env.GOOGLE_API_KEY:
providers["google"] = ProviderConfig(
name="google",
provider_type="google",
enabled=True,
base_url="https://generativelanguage.googleapis.com/v1beta",
api_key_env_var="GOOGLE_API_KEY",
default_model="models/gemini-1.5-pro-latest",
supported_models=[
"models/gemini-1.5-pro-latest",
"models/gemini-1.5-flash-latest"
],
capabilities=["chat", "multimodal"],
priority=4,
supports_streaming=True,
supports_function_calling=True,
max_context_window=200000,
max_output_tokens=8192,
resilience=ResilienceConfig(
max_retries=2,
retry_delay_ms=1000,
timeout_ms=45000,
circuit_breaker_threshold=4,
circuit_breaker_reset_timeout_ms=60000
)
)
default_provider = next(
(name for name, provider in providers.items() if provider.enabled),
"privatemode"
)
# Create main configuration
config = LLMServiceConfig(
default_provider="privatemode",
default_provider=default_provider,
enable_detailed_logging=settings.LOG_LLM_PROMPTS,
providers={
"privatemode": privatemode_config
},
providers=providers,
model_routing={} # Will be populated dynamically from provider models
)
@@ -174,7 +267,7 @@ class ConfigurationManager:
def get_config(self) -> LLMServiceConfig:
"""Get current configuration"""
if self._config is None:
self._config = create_default_config()
self._config = create_default_config(self._env_vars)
self._validate_configuration()
return self._config
@@ -271,4 +364,4 @@ class ConfigurationManager:
# Global configuration manager
config_manager = ConfigurationManager()
config_manager = ConfigurationManager()