hotfix initiation of ai models performance issue
This commit is contained in:
parent
1bd183ca4c
commit
89202eb040
3 changed files with 27 additions and 7 deletions
4
app.py
4
app.py
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in a new issue