diff --git a/ee/app/services/ai/catalog/agents/execute_service.rb b/ee/app/services/ai/catalog/agents/execute_service.rb index 044ed30d3eb5f80c9fac09acc0904ca795ef7da5..a5ac29b97cf424cd103aa62cae218a8ed2f64de6 100644 --- a/ee/app/services/ai/catalog/agents/execute_service.rb +++ b/ee/app/services/ai/catalog/agents/execute_service.rb @@ -67,7 +67,11 @@ def execute_workflow_service(flow_config) params = { json_config: flow_config, container: agent.project, - goal: agent_goal + goal: agent_goal, + flow_name: format( + s_('AICatalog|Agent test: %{agent_name} (Agent ID %{agent_id})'), + agent_name: agent.name, agent_id: agent.id + ) } ::Ai::Catalog::ExecuteWorkflowService.new(current_user, params).execute diff --git a/ee/lib/ai/catalog/execute_workflow_service.rb b/ee/lib/ai/catalog/execute_workflow_service.rb index aad34e64e8a704f1739853f77d6c5eb1deb9f602..1aebd320c47d2396dd4956ca80d61238bb0beb9c 100644 --- a/ee/lib/ai/catalog/execute_workflow_service.rb +++ b/ee/lib/ai/catalog/execute_workflow_service.rb @@ -7,12 +7,14 @@ class ExecuteWorkflowService FLOW_CONFIG_VERSION = 'experimental' WORKFLOW_ENVIRONMENT = 'web' + DEFAULT_FLOW_NAME = 'ai_catalog_flow' def initialize(current_user, params) @current_user = current_user @json_config = params[:json_config] @container = params[:container] @goal = params[:goal] + @flow_name = params[:flow_name] || DEFAULT_FLOW_NAME end def execute @@ -37,7 +39,7 @@ def execute private - attr_reader :current_user, :json_config, :container, :goal + attr_reader :current_user, :json_config, :container, :goal, :flow_name def error(message, payload: {}) ServiceResponse.error(message: Array(message), payload: payload) @@ -55,7 +57,7 @@ def validate def create_workflow workflow_params = { goal: goal, - workflow_definition: determine_workflow_definition, + workflow_definition: flow_name, environment: WORKFLOW_ENVIRONMENT } @@ -87,7 +89,7 @@ def build_start_workflow_params(workflow) { goal: goal, - workflow_definition: determine_workflow_definition, + workflow_definition: flow_name, flow_config: json_config, flow_config_schema_version: FLOW_CONFIG_VERSION, workflow_id: workflow.id, @@ -103,14 +105,10 @@ def token_generation_service ::Ai::DuoWorkflows::TokenGenerationService.new( current_user: current_user, organization: container.organization, - workflow_definition: determine_workflow_definition + workflow_definition: flow_name ) end - def determine_workflow_definition - 'software_development' - end - def allowed? Ability.allowed?(current_user, :admin_ai_catalog_item, container) end diff --git a/ee/spec/services/ai/catalog/agents/execute_service_spec.rb b/ee/spec/services/ai/catalog/agents/execute_service_spec.rb index 3084c5319c3102972ca1834a0a71fc0013bb4d5b..c513c065a297d08b94849057ef469025a4af38a9 100644 --- a/ee/spec/services/ai/catalog/agents/execute_service_spec.rb +++ b/ee/spec/services/ai/catalog/agents/execute_service_spec.rb @@ -153,6 +153,16 @@ expect(result[:workload_id]).to eq(Ci::Workloads::Workload.last.id) end + it 'creates a Ai::DuoWorkflows::Workflow correctly' do + expect { execute }.to change { Ai::DuoWorkflows::Workflow.count }.by(1) + + workflow_session = Ai::DuoWorkflows::Workflow.last + + expect(workflow_session.workflow_definition).to eq( + "Agent test: #{agent.name} (Agent ID #{agent.id})" + ) + end + it 'triggers trigger_ai_catalog_item', :clean_gitlab_redis_shared_state do expect { execute } .to trigger_internal_events('trigger_ai_catalog_item') diff --git a/ee/spec/services/ai/catalog/execute_workflow_service_spec.rb b/ee/spec/services/ai/catalog/execute_workflow_service_spec.rb index 64b8a85d03a425ae5e3e8a5a13b348dcd19f9db3..cdce950c033553ec3938920314d506d875777459 100644 --- a/ee/spec/services/ai/catalog/execute_workflow_service_spec.rb +++ b/ee/spec/services/ai/catalog/execute_workflow_service_spec.rb @@ -154,15 +154,30 @@ context 'when workflow creation succeeds' do it_behaves_like 'starts workflow execution' - it 'creates the Ai::DuoWorkflows::Workflow' do + it 'creates a Ai::DuoWorkflows::Workflow correctly' do expect do service.execute end.to change { Ai::DuoWorkflows::Workflow.count }.by(1) - created_workflow = Ai::DuoWorkflows::Workflow.last + workflow_session = Ai::DuoWorkflows::Workflow.last - expect(created_workflow.goal).to eq(goal) - expect(created_workflow.environment).to eq("web") + expect(workflow_session).to have_attributes( + goal: goal, + environment: 'web', + workflow_definition: described_class::DEFAULT_FLOW_NAME + ) + end + + context 'when a flow_name is passed' do + let(:params) { super().merge(flow_name: 'My flow name') } + + it 'creates the Ai::DuoWorkflows::Workflow with the flow_name as the workflow_definition' do + service.execute + + workflow_session = Ai::DuoWorkflows::Workflow.last + + expect(workflow_session.workflow_definition).to eq('My flow name') + end end context 'when oauth token creation fails' do diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 3f4ac2c8c905020005457600cc2b7a98b520ad24..68e31542a00e1dafefc45d6234f6b6548e4d617e 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -2473,6 +2473,9 @@ msgstr "" msgid "AICatalog|Agent not found." msgstr "" +msgid "AICatalog|Agent test: %{agent_name} (Agent ID %{agent_id})" +msgstr "" + msgid "AICatalog|Agent updated successfully." msgstr ""