fix: minor bug fixes to chatbot to work with service center

This commit is contained in:
Ida Dittrich 2026-03-06 14:31:56 +01:00
parent 47340e6949
commit 9d1a8d53fc
3 changed files with 33 additions and 7 deletions

View file

@ -204,7 +204,7 @@ def getChatStreamingHelper():
def __get_placeholder_user():
"""Placeholder user for contexts that only need service resolution (e.g. ChatStreamingHelper)."""
from modules.datamodels.datamodelUam import User
return User(id="system", email="system@placeholder", firstName="System", lastName="Placeholder")
return User(id="system", username="system", email=None, fullName="System Placeholder")
def getEventManager(user, mandateId: Optional[str] = None, featureInstanceId: Optional[str] = None):
@ -333,6 +333,22 @@ def getChatbotServices(
hub.ai = PublicService(AiService(hub), functionsOnly=False)
hub.streaming = PublicService(StreamingService(hub))
# Resolve billing from service center (required for _preflight_billing_check and billing callback)
try:
from modules.serviceCenter import getService
from modules.serviceCenter.context import ServiceCenterContext
_workflow = workflow or type("_Placeholder", (), {"featureCode": FEATURE_CODE})()
ctx = ServiceCenterContext(
user=user,
mandate_id=mandateId,
feature_instance_id=featureInstanceId,
workflow=_workflow,
)
hub.billing = getService("billing", ctx, legacy_hub=None)
except Exception as e:
logger.warning(f"Could not resolve billing service for chatbot: {e}")
hub.billing = None
return hub
@ -358,6 +374,7 @@ class _ChatbotServiceHub:
return self._interfaceDbComponent_val
chat = None
ai = None
billing = None
streaming = None
featureCode = "chatbot"
allowedProviders = None

View file

@ -19,7 +19,7 @@ from modules.datamodels.datamodelUam import User
from modules.datamodels.datamodelAi import AiCallRequest, AiCallOptions, OperationTypeEnum, ProcessingModeEnum
from modules.datamodels.datamodelDocref import DocumentReferenceList, DocumentItemReference
from modules.shared.timeUtils import getUtcTimestamp, parseTimestamp
from modules.features.chatbot.mainChatbot import getChatbotServices
from modules.features.chatbot.mainChatbot import getChatbotServices, getChatStreamingHelper
from modules.features.chatbot.chatbot import Chatbot
from modules.features.chatbot.bridges.ai import AICenterChatModel, clear_workflow_allowed_providers
from modules.features.chatbot.bridges.memory import DatabaseCheckpointer
@ -1391,9 +1391,9 @@ async def _processChatbotMessageLangGraph(
)
# Create chatbot instance with config for dynamic tool configuration
chat_streaming_helper = None
if services.streaming:
chat_streaming_helper = services.streaming.getChatStreamingHelper()
# Use mainChatbot.getChatStreamingHelper() - resolves from service center (legacy hub.streaming has no getChatStreamingHelper)
from modules.features.chatbot.mainChatbot import getChatStreamingHelper
chat_streaming_helper = getChatStreamingHelper()
if not chat_streaming_helper:
logger.warning("ChatStreamingHelper not available from streaming service; message normalization may fail")
chatbot = await Chatbot.create(

View file

@ -199,6 +199,15 @@ def getRecordsetWithRBAC(
# Add additional record filters
if recordFilter:
for field, value in recordFilter.items():
if isinstance(value, (list, tuple)):
if len(value) == 0:
whereConditions.append("1 = 0") # Empty IN -> no matches
else:
whereConditions.append(f'"{field}" = ANY(%s)')
whereValues.append(list(value))
elif value is None:
whereConditions.append(f'"{field}" IS NULL')
else:
whereConditions.append(f'"{field}" = %s')
whereValues.append(value)