|
91 | 91 | get_last_user_message_item, |
92 | 92 | get_last_assistant_message, |
93 | 93 | get_system_message, |
| 94 | + replace_system_message_content, |
94 | 95 | prepend_to_first_user_message_content, |
95 | 96 | convert_logit_bias_input_to_json, |
96 | 97 | get_content_from_message, |
@@ -4090,6 +4091,22 @@ async def flush_pending_delta_data(threshold: int = 0): |
4090 | 4091 | all_tool_call_sources = [] # Accumulated sources across all iterations |
4091 | 4092 | user_message = get_last_user_message(form_data["messages"]) |
4092 | 4093 |
|
| 4094 | + # Check if citations are enabled for this model |
| 4095 | + citations_enabled = ( |
| 4096 | + model.get("info", {}).get("meta", {}).get("capabilities") or {} |
| 4097 | + ).get("citations", True) |
| 4098 | + |
| 4099 | + # Save original system message so we can restore it before |
| 4100 | + # re-applying source context (prevents duplication when |
| 4101 | + # RAG_SYSTEM_CONTEXT is enabled and the template is appended |
| 4102 | + # to the system message on each iteration). |
| 4103 | + original_system_message = get_system_message(form_data["messages"]) |
| 4104 | + original_system_content = ( |
| 4105 | + get_content_from_message(original_system_message) |
| 4106 | + if original_system_message |
| 4107 | + else None |
| 4108 | + ) |
| 4109 | + |
4093 | 4110 | while ( |
4094 | 4111 | len(tool_calls) > 0 |
4095 | 4112 | and tool_call_retries < CHAT_RESPONSE_MAX_TOOL_CALL_RETRIES |
@@ -4244,7 +4261,8 @@ async def flush_pending_delta_data(threshold: int = 0): |
4244 | 4261 |
|
4245 | 4262 | # Extract citation sources from tool results |
4246 | 4263 | if ( |
4247 | | - tool_function_name |
| 4264 | + citations_enabled |
| 4265 | + and tool_function_name |
4248 | 4266 | in [ |
4249 | 4267 | "search_web", |
4250 | 4268 | "fetch_url", |
@@ -4334,27 +4352,35 @@ async def flush_pending_delta_data(threshold: int = 0): |
4334 | 4352 | } |
4335 | 4353 | ) |
4336 | 4354 |
|
4337 | | - # Emit citation sources for UI display |
4338 | | - for source in tool_call_sources: |
4339 | | - await event_emitter({"type": "source", "data": source}) |
4340 | | - |
4341 | | - # Apply source context to messages for model |
4342 | | - # Use metadata_only=True to avoid duplicating content |
4343 | | - # that is already in the tool result message. |
4344 | | - all_tool_call_sources.extend(tool_call_sources) |
4345 | | - if all_tool_call_sources and user_message: |
4346 | | - # Restore original user message before re-applying to avoid recursive nesting |
4347 | | - set_last_user_message_content( |
4348 | | - user_message, form_data["messages"] |
4349 | | - ) |
4350 | | - form_data["messages"] = apply_source_context_to_messages( |
4351 | | - request, |
4352 | | - form_data["messages"], |
4353 | | - all_tool_call_sources, |
4354 | | - user_message, |
4355 | | - include_content=False, |
4356 | | - ) |
4357 | | - tool_call_sources.clear() |
| 4355 | + # Emit citation sources and apply source context to messages |
| 4356 | + if citations_enabled: |
| 4357 | + for source in tool_call_sources: |
| 4358 | + await event_emitter({"type": "source", "data": source}) |
| 4359 | + |
| 4360 | + # Apply source context to messages for model. |
| 4361 | + # Use include_content=False to avoid duplicating content |
| 4362 | + # that is already in the tool result message. |
| 4363 | + all_tool_call_sources.extend(tool_call_sources) |
| 4364 | + if all_tool_call_sources and user_message: |
| 4365 | + # Restore original messages before re-applying to |
| 4366 | + # avoid recursive nesting (user message) and |
| 4367 | + # duplication (system message with RAG_SYSTEM_CONTEXT). |
| 4368 | + set_last_user_message_content( |
| 4369 | + user_message, form_data["messages"] |
| 4370 | + ) |
| 4371 | + if original_system_content is not None: |
| 4372 | + replace_system_message_content( |
| 4373 | + original_system_content, |
| 4374 | + form_data["messages"], |
| 4375 | + ) |
| 4376 | + form_data["messages"] = apply_source_context_to_messages( |
| 4377 | + request, |
| 4378 | + form_data["messages"], |
| 4379 | + all_tool_call_sources, |
| 4380 | + user_message, |
| 4381 | + include_content=False, |
| 4382 | + ) |
| 4383 | + tool_call_sources.clear() |
4358 | 4384 |
|
4359 | 4385 | await event_emitter( |
4360 | 4386 | { |
|
0 commit comments