This commit is contained in:
Timothy Jaeryang Baek
2026-05-09 04:36:43 +09:00
parent 1b4cd705d0
commit 005df577fe
+12 -2
View File
@@ -73,6 +73,11 @@ async def generate_direct_chat_completion(
request_id = str(uuid.uuid4()) # Generate a unique request ID request_id = str(uuid.uuid4()) # Generate a unique request ID
event_caller = await get_event_call(metadata) event_caller = await get_event_call(metadata)
if event_caller is None:
raise Exception(
'Direct connection requires an active WebSocket session; '
'cannot generate completion in this context (e.g. background task).'
)
channel = f'{user_id}:{session_id}:{request_id}' channel = f'{user_id}:{session_id}:{request_id}'
logging.info(f'WebSocket channel: {channel}') logging.info(f'WebSocket channel: {channel}')
@@ -180,10 +185,14 @@ async def generate_chat_completion(
} }
if getattr(request.state, 'direct', False) and hasattr(request.state, 'model'): if getattr(request.state, 'direct', False) and hasattr(request.state, 'model'):
# Merge the direct connection model into server models so that
# task functions (title, tags, etc.) can resolve a server-side
# task model while still having the direct model available.
models = { models = {
**request.app.state.MODELS,
request.state.model['id']: request.state.model, request.state.model['id']: request.state.model,
} }
log.debug(f'direct connection to model: {models}') log.debug(f'direct connection to model: {request.state.model["id"]}')
else: else:
models = request.app.state.MODELS models = request.app.state.MODELS
@@ -193,7 +202,7 @@ async def generate_chat_completion(
model = models[model_id] model = models[model_id]
if getattr(request.state, 'direct', False): if getattr(request.state, 'direct', False) and model_id == getattr(request.state, 'model', {}).get('id'):
return await generate_direct_chat_completion(request, form_data, user=user, models=models) return await generate_direct_chat_completion(request, form_data, user=user, models=models)
else: else:
# Check if user has access to the model # Check if user has access to the model
@@ -310,6 +319,7 @@ async def chat_completed(request: Request, form_data: dict, user: Any):
if getattr(request.state, 'direct', False) and hasattr(request.state, 'model'): if getattr(request.state, 'direct', False) and hasattr(request.state, 'model'):
models = { models = {
**request.app.state.MODELS,
request.state.model['id']: request.state.model, request.state.model['id']: request.state.model,
} }
else: else: