Skip to content
代码片段 群组 项目
提交 c6c20850 编辑于 作者: Alper Akgun's avatar Alper Akgun
浏览文件

Merge branch 'mk-fix-categorize-quest' into 'master'

Add response modifier to categorize questions

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/138628



Merged-by: default avatarAlper Akgun <aakgun@gitlab.com>
Approved-by: default avatarAlejandro Rodríguez <alejandro@gitlab.com>
Approved-by: default avatarAlper Akgun <aakgun@gitlab.com>
Reviewed-by: default avatarAlper Akgun <aakgun@gitlab.com>
Co-authored-by: default avatarMałgorzata Ksionek <mksionek@gitlab.com>
No related branches found
No related tags found
无相关合并请求
...@@ -16,7 +16,13 @@ def execute ...@@ -16,7 +16,13 @@ def execute
response = response_for(user, options) response = response_for(user, options)
@logger = Gitlab::Llm::Logger.build @logger = Gitlab::Llm::Logger.build
process_response(response, user) result = process_response(response, user)
if result
ResponseModifiers::CategorizeQuestion.new(nil)
else
ResponseModifiers::CategorizeQuestion.new(error: 'Event not tracked')
end
end end
private private
...@@ -35,17 +41,23 @@ def request(template) ...@@ -35,17 +41,23 @@ def request(template)
def process_response(response, user) def process_response(response, user)
json = Gitlab::Json.parse(response) json = Gitlab::Json.parse(response)
return unless json return false unless json
track(user, json) track(user, json)
rescue JSON::ParserError rescue JSON::ParserError
error_message = "JSON has an invalid format." error_message = "JSON has an invalid format."
@logger.error(message: "Error", class: self.class.to_s, error: error_message) @logger.error(message: "Error", class: self.class.to_s, error: error_message)
false
end end
def track(user, json) def track(user, json)
return unless contains_categories?(json) unless contains_categories?(json)
error_message = 'Response did not contain defined categories'
@logger.error(message: "Error", class: self.class.to_s, error: error_message)
return false
end
context = SnowplowTracker::SelfDescribingJson.new(SCHEMA_URL, json.slice(*PERMITTED_KEYS)) context = SnowplowTracker::SelfDescribingJson.new(SCHEMA_URL, json.slice(*PERMITTED_KEYS))
......
# frozen_string_literal: true
module Gitlab
module Llm
module Anthropic
module ResponseModifiers
class CategorizeQuestion < Gitlab::Llm::BaseResponseModifier
def errors
@errors ||= [ai_response&.dig('error')].compact
end
end
end
end
end
end
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
let(:answer) { { detailed_category: "Summarize issue", category: 'Summarize something' }.to_json } let(:answer) { { detailed_category: "Summarize issue", category: 'Summarize something' }.to_json }
it 'tracks event' do it 'tracks event' do
categorize_action expect(categorize_action.errors).to be_empty
expect_snowplow_event( expect_snowplow_event(
category: described_class.to_s, category: described_class.to_s,
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
let(:answer) { { category: 'Summarize something' }.to_json } let(:answer) { { category: 'Summarize something' }.to_json }
it 'does not track event' do it 'does not track event' do
categorize_action expect(categorize_action.errors).to include('Event not tracked')
expect_no_snowplow_event( expect_no_snowplow_event(
category: described_class.to_s, category: described_class.to_s,
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
let(:answer) { "invalid" } let(:answer) { "invalid" }
it 'does not track event' do it 'does not track event' do
categorize_action expect(categorize_action.errors).to include('Event not tracked')
expect_no_snowplow_event( expect_no_snowplow_event(
category: described_class.to_s, category: described_class.to_s,
......
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::Llm::Anthropic::ResponseModifiers::CategorizeQuestion, feature_category: :duo_chat do
subject(:response_modifier) { described_class.new(nil) }
it 'returns empty errors' do
expect(response_modifier.errors).to be_empty
end
context 'when error is present' do
subject(:response_modifier) { described_class.new(error: 'error') }
it 'returns empty errors' do
expect(response_modifier.errors).to eq(['error'])
end
end
end
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册