From f328b81c78e7ab95cda3cb9d33ccc85beb26c16f Mon Sep 17 00:00:00 2001 From: Roman Rizzi Date: Tue, 16 Jul 2024 14:23:17 -0300 Subject: [PATCH] FIX: Make sure custom tool enums follow json-schema. (#718) Enums didn't work as expected because we the dialect couldn't translate them correctly. It doesn't understand what "enum_values" is. --- .../discourse_ai/admin/ai_tools_controller.rb | 2 +- .../discourse/admin/models/ai-tool.js | 6 ++- .../discourse/components/ai-tool-editor.gjs | 9 +--- .../components/ai-tool-parameter-editor.gjs | 25 ++++----- config/locales/client.en.yml | 1 + lib/completions/dialects/open_ai_tools.rb | 5 +- .../admin/ai_tools_controller_spec.rb | 52 ++++++++++++++++++- 7 files changed, 76 insertions(+), 24 deletions(-) diff --git a/app/controllers/discourse_ai/admin/ai_tools_controller.rb b/app/controllers/discourse_ai/admin/ai_tools_controller.rb index a0341089..4eb53578 100644 --- a/app/controllers/discourse_ai/admin/ai_tools_controller.rb +++ b/app/controllers/discourse_ai/admin/ai_tools_controller.rb @@ -81,7 +81,7 @@ module DiscourseAi :description, :script, :summary, - parameters: [:name, :type, :description, :required, :enum, enum_values: []], + parameters: [:name, :type, :description, :required, enum: []], ) end end diff --git a/assets/javascripts/discourse/admin/models/ai-tool.js b/assets/javascripts/discourse/admin/models/ai-tool.js index 7f1a0877..5002806e 100644 --- a/assets/javascripts/discourse/admin/models/ai-tool.js +++ b/assets/javascripts/discourse/admin/models/ai-tool.js @@ -27,9 +27,13 @@ export default class AiTool extends RestModel { attrs.parameters?.map((p) => { const parameter = new TrackedObject(p); + //Backwards-compatibility code. + // TODO(roman): Remove aug 2024. Leave only else clause. if (parameter.enum_values) { - parameter.enumValues = new TrackedArray(parameter.enum_values); + parameter.enum = new TrackedArray(parameter.enum_values); delete parameter.enum_values; + } else { + parameter.enum = new TrackedArray(parameter.enum); } return parameter; diff --git a/assets/javascripts/discourse/components/ai-tool-editor.gjs b/assets/javascripts/discourse/components/ai-tool-editor.gjs index 73893689..e9c3f70c 100644 --- a/assets/javascripts/discourse/components/ai-tool-editor.gjs +++ b/assets/javascripts/discourse/components/ai-tool-editor.gjs @@ -71,13 +71,6 @@ export default class AiToolEditor extends Component { "summary" ); - for (const p of data.parameters) { - if (p.enumValues) { - p.enum_values = p.enumValues; - delete p.enumValues; - } - } - await this.args.model.save(data); this.toasts.success({ @@ -124,7 +117,7 @@ export default class AiToolEditor extends Component {