diff --git a/app/controllers/admin/prompt_sandboxes_controller.rb b/app/controllers/admin/prompt_sandboxes_controller.rb index f8c15444f..5f2d33739 100644 --- a/app/controllers/admin/prompt_sandboxes_controller.rb +++ b/app/controllers/admin/prompt_sandboxes_controller.rb @@ -1,23 +1,33 @@ class Admin::PromptSandboxesController < AdminController include DayTimelinesScoped + MODELS = %w[ + chatgpt-4o-latest + gpt-4.1 + gpt-3.5-turbo + gpt-4.1-mini + gpt-4.1-nano + gpt-4o-mini + ] + def show - @prompt = cookies[:prompt].presence || Event::Summarizer::PROMPT - @summary, @summarizable_content = summarize(@day_timeline, @prompt) + @llm_models = MODELS.map { |model| [ model, model ] } + @llm_model = params[:llm_model] || Event::Summarizer::LLM_MODEL + + if @prompt = cookies[:prompt].presence + summarizer = Event::Summarizer.new(@day_timeline.events, prompt: @prompt, llm_model: @llm_model) + @summary = Event::ActivitySummary.new(content: summarizer.summarize).to_html + @summarizable_content == summarizer.summarizable_content.html_safe + cookies[:prompt] = nil + else + @prompt = Event::Summarizer::PROMPT + end end def create @prompt = params[:prompt] + @llm_model = params[:llm_model] cookies[:prompt] = @prompt - @summary, @summarizable_content = summarize(@day_timeline, @prompt) - redirect_to admin_prompt_sandbox_path(day: @day_timeline.day) + redirect_to admin_prompt_sandbox_path(day: @day_timeline.day, llm_model: @llm_model) end - - private - def summarize(day_timeline, prompt) - summarizer = Event::Summarizer.new(day_timeline.events, prompt: prompt) - summary = summarizer.summarize - activity_summary = Event::ActivitySummary.new(content: summary) - [ activity_summary.to_html, summarizer.summarizable_content.html_safe ] - end end diff --git a/app/models/event/summarizer.rb b/app/models/event/summarizer.rb index 0416fdd8f..723d55da6 100644 --- a/app/models/event/summarizer.rb +++ b/app/models/event/summarizer.rb @@ -49,9 +49,10 @@ class Event::Summarizer - ❌ Ann closed [card 123]() PROMPT - def initialize(events, prompt: PROMPT) + def initialize(events, prompt: PROMPT, llm_model: LLM_MODEL) @events = events @prompt = prompt + @llm_model = llm_model self.default_url_options[:script_name] = "/#{Account.sole.queenbee_id}" end @@ -66,10 +67,10 @@ class Event::Summarizer end private - attr_reader :prompt + attr_reader :prompt, :llm_model def chat - chat = RubyLLM.chat(model: LLM_MODEL) + chat = RubyLLM.chat(model: llm_model) chat.with_instructions(combine(prompt, domain_model_prompt, user_data_injection_prompt)) end diff --git a/app/views/admin/prompt_sandboxes/show.html.erb b/app/views/admin/prompt_sandboxes/show.html.erb index e151ee7ba..e709f4850 100644 --- a/app/views/admin/prompt_sandboxes/show.html.erb +++ b/app/views/admin/prompt_sandboxes/show.html.erb @@ -12,9 +12,17 @@ <%= form.date_field :day, value: @day_timeline.day.to_date %> +
+ <%= form.label :llm_model, "LLM Model:" %> + <%= form.select :llm_model, + options_for_select(@llm_models, @llm_model), + {} %> +
+
<%= form.submit "Generate Summary", class: "btn btn-primary" %>
+ <% end %> <% if @summary.present? %> diff --git a/test/controllers/admin/prompt_sandboxes_controller_test.rb b/test/controllers/admin/prompt_sandboxes_controller_test.rb index 03b38238f..f03866a57 100644 --- a/test/controllers/admin/prompt_sandboxes_controller_test.rb +++ b/test/controllers/admin/prompt_sandboxes_controller_test.rb @@ -14,7 +14,8 @@ class Admin::PromptSandboxesControllerTest < ActionDispatch::IntegrationTest test "create processes prompt and renders show with summary" do post admin_prompt_sandbox_path, params: { prompt: "Test prompt for summarization" } - assert_response :success + assert_response :redirect + assert_redirected_to admin_prompt_sandbox_path(day: assigns(:day_timeline).day, llm_model: Event::Summarizer::LLM_MODEL) end test "non-staff user gets forbidden on show" do