diff --git a/app/controllers/discourse_ai/admin/ai_llms_controller.rb b/app/controllers/discourse_ai/admin/ai_llms_controller.rb index d9fb1e59..68ddcf94 100644 --- a/app/controllers/discourse_ai/admin/ai_llms_controller.rb +++ b/app/controllers/discourse_ai/admin/ai_llms_controller.rb @@ -157,6 +157,7 @@ module DiscourseAi :provider, :tokenizer, :max_prompt_tokens, + :max_output_tokens, :api_key, :enabled_chat_bot, :vision_enabled, diff --git a/app/models/llm_model.rb b/app/models/llm_model.rb index 366fdef3..111ac70a 100644 --- a/app/models/llm_model.rb +++ b/app/models/llm_model.rb @@ -13,6 +13,7 @@ class LlmModel < ActiveRecord::Base validates :url, presence: true, unless: -> { provider == BEDROCK_PROVIDER_NAME } validates_presence_of :name, :api_key validates :max_prompt_tokens, numericality: { greater_than: 0 } + validates :max_output_tokens, numericality: { greater_than_or_equal_to: 0 }, allow_nil: true validate :required_provider_params scope :in_use, -> do @@ -183,4 +184,5 @@ end # enabled_chat_bot :boolean default(FALSE), not null # provider_params :jsonb # vision_enabled :boolean default(FALSE), not null +# max_output_tokens :integer # diff --git a/app/serializers/llm_model_serializer.rb b/app/serializers/llm_model_serializer.rb index ea7d5728..33e62d8b 100644 --- a/app/serializers/llm_model_serializer.rb +++ b/app/serializers/llm_model_serializer.rb @@ -11,6 +11,7 @@ class LlmModelSerializer < ApplicationSerializer :name, :provider, :max_prompt_tokens, + :max_output_tokens, :tokenizer, :api_key, :url, diff --git a/assets/javascripts/discourse/admin/models/ai-llm.js b/assets/javascripts/discourse/admin/models/ai-llm.js index ec4bb13d..c434ba25 100644 --- a/assets/javascripts/discourse/admin/models/ai-llm.js +++ b/assets/javascripts/discourse/admin/models/ai-llm.js @@ -10,6 +10,7 @@ export default class AiLlm extends RestModel { "provider", "tokenizer", "max_prompt_tokens", + "max_output_tokens", "url", "api_key", "enabled_chat_bot", diff --git a/assets/javascripts/discourse/components/ai-llm-editor-form.gjs b/assets/javascripts/discourse/components/ai-llm-editor-form.gjs index 2eafe7cc..50ab2ff7 100644 --- a/assets/javascripts/discourse/components/ai-llm-editor-form.gjs +++ b/assets/javascripts/discourse/components/ai-llm-editor-form.gjs @@ -40,6 +40,7 @@ export default class AiLlmEditorForm extends Component { return { max_prompt_tokens: modelInfo.tokens, + max_output_tokens: modelInfo.max_output_tokens, tokenizer: info.tokenizer, url: modelInfo.endpoint || info.endpoint, display_name: modelInfo.display_name, @@ -53,6 +54,7 @@ export default class AiLlmEditorForm extends Component { return { max_prompt_tokens: model.max_prompt_tokens, + max_output_tokens: model.max_output_tokens, api_key: model.api_key, tokenizer: model.tokenizer, url: model.url, @@ -183,8 +185,18 @@ export default class AiLlmEditorForm extends Component { this.isSaving = true; const isNew = this.args.model.isNew; + const updatedData = { + ...data, + }; + + // If max_prompt_tokens input is cleared, + // we want the db to store null + if (!data.max_output_tokens) { + updatedData.max_output_tokens = null; + } + try { - await this.args.model.save(data); + await this.args.model.save(updatedData); if (isNew) { this.args.llms.addObject(this.args.model); @@ -399,6 +411,16 @@ export default class AiLlmEditorForm extends Component { + + + +