hotfix initiation of ai models performance issue

This commit is contained in:
ValueOn AG 2026-01-14 22:38:23 +01:00
parent 1bd183ca4c
commit 89202eb040
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): async def lifespan(app: FastAPI):
logger.info("Application is starting up") 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) # Get event user for feature lifecycle (system-level user for background operations)
rootInterface = getRootInterface() rootInterface = getRootInterface()
eventUser = rootInterface.getUserByUsername("event") eventUser = rootInterface.getUserByUsername("event")

View file

@ -30,6 +30,7 @@ class ModelRegistry:
self._connectors: Dict[str, BaseConnectorAi] = {} self._connectors: Dict[str, BaseConnectorAi] = {}
self._lastRefresh: Optional[float] = None self._lastRefresh: Optional[float] = None
self._refreshInterval: float = 300.0 # 5 minutes self._refreshInterval: float = 300.0 # 5 minutes
self._connectorsInitialized: bool = False
def registerConnector(self, connector: BaseConnectorAi): def registerConnector(self, connector: BaseConnectorAi):
"""Register a connector and collect its models.""" """Register a connector and collect its models."""
@ -97,10 +98,21 @@ class ModelRegistry:
return connectors 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): def refreshModels(self, force: bool = False):
"""Refresh models from all registered connectors.""" """Refresh models from all registered connectors."""
import time import time
self.ensureConnectorsRegistered()
currentTime = time.time() currentTime = time.time()
# Check if refresh is needed # Check if refresh is needed

View file

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