diff --git a/Gemfile b/Gemfile index f037583e7..46b11ef1d 100644 --- a/Gemfile +++ b/Gemfile @@ -191,10 +191,10 @@ gem 'reverse_markdown' gem 'iso-639' gem 'ruby-openai' -gem 'ai-agents', '>= 0.4.3' +gem 'ai-agents', '>= 0.7.0' # TODO: Move this gem as a dependency of ai-agents -gem 'ruby_llm', '>= 1.9.1' +gem 'ruby_llm', '>= 1.8.2' gem 'ruby_llm-schema' # OpenTelemetry for LLM observability diff --git a/Gemfile.lock b/Gemfile.lock index c3eec459b..55cfdef7e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -126,8 +126,8 @@ GEM jbuilder (~> 2) rails (>= 4.2, < 7.2) selectize-rails (~> 0.6) - ai-agents (0.4.3) - ruby_llm (~> 1.3) + ai-agents (0.7.0) + ruby_llm (~> 1.8.2) annotate (3.2.0) activerecord (>= 3.2, < 8.0) rake (>= 10.4, < 14.0) @@ -819,7 +819,7 @@ GEM ruby2ruby (2.5.0) ruby_parser (~> 3.1) sexp_processor (~> 4.6) - ruby_llm (1.9.1) + ruby_llm (1.8.2) base64 event_stream_parser (~> 1) faraday (>= 1.10.0) @@ -827,7 +827,6 @@ GEM faraday-net_http (>= 1) faraday-retry (>= 1) marcel (~> 1.0) - ruby_llm-schema (~> 0.2.1) zeitwerk (~> 2) ruby_llm-schema (0.2.5) ruby_parser (3.20.0) @@ -1018,7 +1017,7 @@ DEPENDENCIES administrate (>= 0.20.1) administrate-field-active_storage (>= 1.0.3) administrate-field-belongs_to_search (>= 0.9.0) - ai-agents (>= 0.4.3) + ai-agents (>= 0.7.0) annotate attr_extras audited (~> 5.4, >= 5.4.1) @@ -1120,7 +1119,7 @@ DEPENDENCIES rubocop-rails rubocop-rspec ruby-openai - ruby_llm (>= 1.9.1) + ruby_llm (>= 1.8.2) ruby_llm-schema scout_apm scss_lint diff --git a/enterprise/app/services/captain/tools/copilot/search_articles_service.rb b/enterprise/app/services/captain/tools/copilot/search_articles_service.rb index 24385a932..1647c939b 100644 --- a/enterprise/app/services/captain/tools/copilot/search_articles_service.rb +++ b/enterprise/app/services/captain/tools/copilot/search_articles_service.rb @@ -3,13 +3,9 @@ class Captain::Tools::Copilot::SearchArticlesService < Captain::Tools::BaseTool 'search_articles' end description 'Search articles based on parameters' - params do - string :query, description: 'Search articles by title or content (partial match)' - number :category_id, description: 'Filter articles by category ID' - any_of :status, description: 'Filter articles by status' do - string enum: %w[draft published archived] - end - end + param :query, desc: 'Search articles by title or content (partial match)', required: false + param :category_id, type: :number, desc: 'Filter articles by category ID', required: false + param :status, type: :string, desc: 'Filter articles by status - MUST BE ONE OF: draft, published, archived', required: false def execute(query: nil, category_id: nil, status: nil) articles = fetch_articles(query: query, category_id: category_id, status: status)