Merge pull request #87 from valueonag/feat/saas-multi-tenant-mandates

hotfix initiation of ai models performance issue
This commit is contained in:
Patrick Motsch 2026-01-14 22:39:14 +01:00 committed by GitHub
commit 4a47044b33
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 27 additions and 7 deletions

4
app.py
View file

@ -279,6 +279,10 @@ instanceLabel = APP_CONFIG.get("APP_ENV_LABEL")
async def lifespan(app: FastAPI):
logger.info("Application is starting up")
# Initialize AI connectors once at startup to avoid per-request discovery
from modules.aicore.aicoreModelRegistry import modelRegistry
modelRegistry.ensureConnectorsRegistered()
# Get event user for feature lifecycle (system-level user for background operations)
rootInterface = getRootInterface()
eventUser = rootInterface.getUserByUsername("event")

View file

@ -30,6 +30,7 @@ class ModelRegistry:
self._connectors: Dict[str, BaseConnectorAi] = {}
self._lastRefresh: Optional[float] = None
self._refreshInterval: float = 300.0 # 5 minutes
self._connectorsInitialized: bool = False
def registerConnector(self, connector: BaseConnectorAi):
"""Register a connector and collect its models."""
@ -96,11 +97,22 @@ class ModelRegistry:
logger.warning(f"Failed to discover connector from {filename}: {e}")
return connectors
def ensureConnectorsRegistered(self):
"""Register connectors once to avoid per-request discovery."""
if self._connectorsInitialized:
return
discovered = self.discoverConnectors()
for connector in discovered:
self.registerConnector(connector)
self._connectorsInitialized = True
def refreshModels(self, force: bool = False):
"""Refresh models from all registered connectors."""
import time
self.ensureConnectorsRegistered()
currentTime = time.time()
# Check if refresh is needed

View file

@ -22,15 +22,19 @@ logger = logging.getLogger(__name__)
class ExtractionService:
_sharedExtractorRegistry: Optional[ExtractorRegistry] = None
_sharedChunkerRegistry: Optional[ChunkerRegistry] = None
def __init__(self, services: Optional[Any] = None):
self.services = services
self._extractorRegistry = ExtractorRegistry()
self._chunkerRegistry = ChunkerRegistry()
# Ensure connectors are registered
discovered = modelRegistry.discoverConnectors()
for connector in discovered:
modelRegistry.registerConnector(connector)
if ExtractionService._sharedExtractorRegistry is None:
ExtractionService._sharedExtractorRegistry = ExtractorRegistry()
if ExtractionService._sharedChunkerRegistry is None:
ExtractionService._sharedChunkerRegistry = ChunkerRegistry()
self._extractorRegistry = ExtractionService._sharedExtractorRegistry
self._chunkerRegistry = ExtractionService._sharedChunkerRegistry
modelRegistry.ensureConnectorsRegistered()
# Verify required internal model is available (used for pricing in extractContent)
modelDisplayName = "Internal Document Extractor"