From 5cdd2bc14c068704c20be2f90cbc305eed17fd4e Mon Sep 17 00:00:00 2001 From: aakashb95 Date: Wed, 22 Jul 2026 23:55:13 +0530 Subject: [PATCH] fix(captain): mark discarded generations --- .../assistant/instrumentation_attribute_provider.rb | 3 ++- .../captain/assistant/agent_runner_service_spec.rb | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/enterprise/app/services/captain/assistant/instrumentation_attribute_provider.rb b/enterprise/app/services/captain/assistant/instrumentation_attribute_provider.rb index b9b812b0e..b4ae6fea8 100644 --- a/enterprise/app/services/captain/assistant/instrumentation_attribute_provider.rb +++ b/enterprise/app/services/captain/assistant/instrumentation_attribute_provider.rb @@ -13,7 +13,8 @@ class Captain::Assistant::InstrumentationAttributeProvider def generation_attributes(_context_wrapper, _chat, message) { - format(ATTR_LANGFUSE_OBSERVATION_METADATA, 'generation_stage') => generation_stage(message) + format(ATTR_LANGFUSE_OBSERVATION_METADATA, 'generation_stage') => generation_stage(message), + format(ATTR_LANGFUSE_OBSERVATION_METADATA, 'discarded') => @service.send(:trigger_message_stale?).to_s } end diff --git a/spec/enterprise/services/captain/assistant/agent_runner_service_spec.rb b/spec/enterprise/services/captain/assistant/agent_runner_service_spec.rb index 2a5d913c5..3776899bf 100644 --- a/spec/enterprise/services/captain/assistant/agent_runner_service_spec.rb +++ b/spec/enterprise/services/captain/assistant/agent_runner_service_spec.rb @@ -464,6 +464,7 @@ RSpec.describe Captain::Assistant::AgentRunnerService do attributes = provider.generation_attributes(nil, nil, message) expect(attributes['langfuse.observation.metadata.generation_stage']).to eq('final_response') + expect(attributes['langfuse.observation.metadata.discarded']).to eq('false') end it 'marks tool call generations separately from final responses' do @@ -474,6 +475,18 @@ RSpec.describe Captain::Assistant::AgentRunnerService do expect(attributes['langfuse.observation.metadata.generation_stage']).to eq('tool_call') end + + it 'marks a generation as discarded when a newer message has arrived' do + trigger_message = create(:message, conversation: conversation, message_type: :incoming) + runner_service = described_class.new(assistant: assistant, conversation: conversation, trigger_message_id: trigger_message.id) + attribute_provider = Captain::Assistant::InstrumentationAttributeProvider.new(runner_service) + message = instance_double(RubyLLM::Message, tool_calls: {}) + create(:message, conversation: conversation, message_type: :incoming) + + attributes = attribute_provider.generation_attributes(nil, nil, message) + + expect(attributes['langfuse.observation.metadata.discarded']).to eq('true') + end end describe '#build_state' do