billing fix

This commit is contained in:
patrick-motsch 2026-02-13 14:43:45 +01:00
parent 92ee130c0a
commit d88bacc4a9
2 changed files with 30 additions and 7 deletions

View file

@ -412,9 +412,15 @@ async def bridgeAudioWebsocket(
logger.info(f"Bridge audio WebSocket config loaded: session={sessionId}") logger.info(f"Bridge audio WebSocket config loaded: session={sessionId}")
from modules.datamodels.datamodelUam import User from modules.datamodels.datamodelUam import User
systemUser = User(id="system", username="system", email="p.motsch@poweron.swiss") systemUser = User(id="system", username="system", email="system@internal.local")
service = TeamsbotService(systemUser, None, instanceId, config)
logger.info(f"Bridge audio WebSocket service created: session={sessionId}") # Look up mandateId from the session record (needed for AI billing context)
sessionInterface = interfaceDb.getInterface(systemUser, featureInstanceId=instanceId)
session = sessionInterface.getSession(sessionId)
mandateId = session.get("mandateId") if session else None
service = TeamsbotService(systemUser, mandateId, instanceId, config)
logger.info(f"Bridge audio WebSocket service created: session={sessionId}, mandateId={mandateId}")
await service.handleAudioStream(websocket, sessionId) await service.handleAudioStream(websocket, sessionId)
except WebSocketDisconnect: except WebSocketDisconnect:

View file

@ -31,6 +31,22 @@ from .bridgeConnector import BridgeConnector
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# =========================================================================
# Minimal Service Context (for AI billing in bridge callbacks)
# =========================================================================
class _ServiceContext:
"""Minimal context providing user/mandate info for AiService billing.
Used by bridge callbacks where a full Services instance is not available."""
def __init__(self, user, mandateId, featureInstanceId=None):
self.user = user
self.mandateId = mandateId
self.featureInstanceId = featureInstanceId
self.featureCode = "teamsbot"
# ========================================================================= # =========================================================================
# Session Event Queues (for SSE streaming to frontend) # Session Event Queues (for SSE streaming to frontend)
# ========================================================================= # =========================================================================
@ -377,9 +393,9 @@ class TeamsbotService:
try: try:
from modules.services.serviceAi.mainServiceAi import AiService from modules.services.serviceAi.mainServiceAi import AiService
# Create AiService with service center context # Create minimal service context for AI billing
# Note: In production, serviceCenter should be passed properly serviceContext = _ServiceContext(self.currentUser, self.mandateId, self.instanceId)
aiService = AiService(serviceCenter=None) aiService = AiService(serviceCenter=serviceContext)
await aiService.ensureAiObjectsInitialized() await aiService.ensureAiObjectsInitialized()
request = AiCallRequest( request = AiCallRequest(
@ -528,7 +544,8 @@ class TeamsbotService:
from modules.services.serviceAi.mainServiceAi import AiService from modules.services.serviceAi.mainServiceAi import AiService
aiService = AiService(serviceCenter=None) serviceContext = _ServiceContext(self.currentUser, self.mandateId, self.instanceId)
aiService = AiService(serviceCenter=serviceContext)
await aiService.ensureAiObjectsInitialized() await aiService.ensureAiObjectsInitialized()
request = AiCallRequest( request = AiCallRequest(