Files
gt-ai-os-community/apps/resource-cluster/app/providers/__init__.py
HackWeasel b9dfb86260 GT AI OS Community Edition v2.0.33
Security hardening release addressing CodeQL and Dependabot alerts:

- Fix stack trace exposure in error responses
- Add SSRF protection with DNS resolution checking
- Implement proper URL hostname validation (replaces substring matching)
- Add centralized path sanitization to prevent path traversal
- Fix ReDoS vulnerability in email validation regex
- Improve HTML sanitization in validation utilities
- Fix capability wildcard matching in auth utilities
- Update glob dependency to address CVE
- Add CodeQL suppression comments for verified false positives

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 17:04:45 -05:00

76 lines
2.2 KiB
Python

"""
GT 2.0 Resource Cluster Providers
External AI model providers for the resource cluster.
"""
from typing import Dict, Any, Optional
import logging
from .external_provider import ExternalProvider
logger = logging.getLogger(__name__)
class ProviderFactory:
"""Factory for creating provider instances dynamically"""
def __init__(self):
self.providers = {}
self.initialized = False
async def initialize(self):
"""Initialize all providers"""
if self.initialized:
return
try:
# Initialize external provider (BGE-M3)
external_provider = ExternalProvider()
await external_provider.initialize()
self.providers["external"] = external_provider
logger.info("Provider factory initialized successfully")
self.initialized = True
except Exception as e:
logger.error(f"Failed to initialize provider factory: {e}")
raise
def get_provider(self, provider_name: str) -> Optional[Any]:
"""Get provider instance by name"""
return self.providers.get(provider_name)
def list_providers(self) -> Dict[str, Any]:
"""List all available providers"""
return {
name: {
"name": provider.name if hasattr(provider, "name") else name,
"status": "initialized" if provider else "error"
}
for name, provider in self.providers.items()
}
# Global provider factory instance
_provider_factory = None
async def get_provider_factory() -> ProviderFactory:
"""Get initialized provider factory"""
global _provider_factory
if _provider_factory is None:
_provider_factory = ProviderFactory()
await _provider_factory.initialize()
return _provider_factory
def get_external_provider():
"""Get external provider instance (synchronous)"""
global _provider_factory
if _provider_factory and "external" in _provider_factory.providers:
return _provider_factory.providers["external"]
return None
__all__ = ["ExternalProvider", "ProviderFactory", "get_provider_factory", "get_external_provider"]