diff --git a/app/controllers/discourse_ai/admin/ai_personas_controller.rb b/app/controllers/discourse_ai/admin/ai_personas_controller.rb index 120b7c32..1a994aa2 100644 --- a/app/controllers/discourse_ai/admin/ai_personas_controller.rb +++ b/app/controllers/discourse_ai/admin/ai_personas_controller.rb @@ -62,6 +62,8 @@ module DiscourseAi :enabled, :system_prompt, :priority, + :top_p, + :temperature, allowed_group_ids: [], ) diff --git a/app/models/ai_persona.rb b/app/models/ai_persona.rb index e49aff62..54e54020 100644 --- a/app/models/ai_persona.rb +++ b/app/models/ai_persona.rb @@ -157,6 +157,14 @@ class AiPersona < ActiveRecord::Base options end + define_method :temperature do + @ai_persona&.temperature + end + + define_method :top_p do + @ai_persona&.top_p + end + define_method :system_prompt do @ai_persona&.system_prompt || "You are a helpful bot." end @@ -166,7 +174,8 @@ class AiPersona < ActiveRecord::Base private def system_persona_unchangeable - if system_prompt_changed? || commands_changed? || name_changed? || description_changed? + if top_p_changed? || temperature_changed? || system_prompt_changed? || commands_changed? || + name_changed? || description_changed? errors.add(:base, I18n.t("discourse_ai.ai_bot.personas.cannot_edit_system_persona")) end end @@ -186,7 +195,7 @@ end # id :bigint not null, primary key # name :string(100) not null # description :string(2000) not null -# commands :string default([]), not null, is an Array +# commands :json not null # system_prompt :string(10000000) not null # allowed_group_ids :integer default([]), not null, is an Array # created_by_id :integer @@ -194,7 +203,9 @@ end # created_at :datetime not null # updated_at :datetime not null # system :boolean default(FALSE), not null -# priority :integer default(0), not null +# priority :boolean default(FALSE), not null +# temperature :float +# top_p :float # # Indexes # diff --git a/app/serializers/localized_ai_persona_serializer.rb b/app/serializers/localized_ai_persona_serializer.rb index 1ecd3239..fca5f6d2 100644 --- a/app/serializers/localized_ai_persona_serializer.rb +++ b/app/serializers/localized_ai_persona_serializer.rb @@ -11,7 +11,9 @@ class LocalizedAiPersonaSerializer < ApplicationSerializer :priority, :commands, :system_prompt, - :allowed_group_ids + :allowed_group_ids, + :temperature, + :top_p def name object.class_instance.name diff --git a/assets/javascripts/discourse/admin/models/ai-persona.js b/assets/javascripts/discourse/admin/models/ai-persona.js index d9152cd9..8d7c4171 100644 --- a/assets/javascripts/discourse/admin/models/ai-persona.js +++ b/assets/javascripts/discourse/admin/models/ai-persona.js @@ -10,6 +10,8 @@ const ATTRIBUTES = [ "enabled", "system", "priority", + "top_p", + "temperature", ]; class CommandOption { diff --git a/assets/javascripts/discourse/components/ai-persona-editor.gjs b/assets/javascripts/discourse/components/ai-persona-editor.gjs index be922cdb..b172d0de 100644 --- a/assets/javascripts/discourse/components/ai-persona-editor.gjs +++ b/assets/javascripts/discourse/components/ai-persona-editor.gjs @@ -73,6 +73,14 @@ export default class PersonaEditor extends Component { } } + get showTemperature() { + return this.editingModel?.temperature || !this.editingModel?.system; + } + + get showTopP() { + return this.editingModel?.top_p || !this.editingModel?.system; + } + @action delete() { return this.dialog.confirm({ @@ -213,6 +221,36 @@ export default class PersonaEditor extends Component { disabled={{this.editingModel.system}} /> + {{#if this.showTemperature}} +