From 641d4abb6939656bf9c5ce08570d6a34e0812649 Mon Sep 17 00:00:00 2001 From: Aidan Cornelius-Bell Date: Sun, 8 Dec 2024 17:25:39 +1030 Subject: [PATCH] Fixed the debugging code for summaries --- app/controllers/posts_controller.rb | 42 ++++++++++--------- app/services/kagi_summarizer_service.rb | 16 ++++--- app/views/posts/index.html.erb | 2 +- app/views/posts/show.html.erb | 2 +- ...0241208065057_add_api_response_to_posts.rb | 6 +++ db/schema.rb | 4 +- 6 files changed, 41 insertions(+), 31 deletions(-) create mode 100644 db/migrate/20241208065057_add_api_response_to_posts.rb diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index ef1d82b..0d03868 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -126,16 +126,12 @@ class PostsController < ApplicationController summarizer = KagiSummarizerService.new - # Determine what content to summarize based on post type content_to_summarize = if @post.bookmark? && @post.url.present? Rails.logger.debug "Using URL for summarization: #{@post.url}" @post.url elsif @post.content.present? Rails.logger.debug "Using content for summarization (first 100 chars): #{@post.content.truncate(100)}" @post.content - else - Rails.logger.warn "No content available for summarization" - nil end if content_to_summarize.nil? @@ -146,28 +142,36 @@ class PostsController < ApplicationController type = @post.bookmark? && @post.url.present? ? :url : :text result = summarizer.summarize(content_to_summarize, type) - Rails.logger.debug "Summarization result: #{result.inspect}" - - if result && result['output'].present? - success = @post.update(summary: result['output']) - Rails.logger.debug "Update post with summary: #{success ? 'successful' : 'failed'}" - if success + Rails.logger.debug "Full API result: #{result.inspect}" + + # Always store the API response and timestamp + @post.update( + summarizer_api_response: { + response_body: result[:raw_response], + status_code: result[:status_code], + timestamp: Time.current + }, + last_summarized_at: Time.current + ) + + if result[:success] && result[:parsed_response] + summary_text = result[:parsed_response]['output'] || + result[:parsed_response].dig('data', 'output') || + result[:parsed_response]['summary'] || + result[:parsed_response].dig('data', 'summary') + + if summary_text.present? + @post.update(summary: summary_text) redirect_to @post, notice: 'Summary generated successfully.' else - Rails.logger.error "Failed to save summary: #{@post.errors.full_messages}" - redirect_to @post, alert: "Failed to save summary: #{@post.errors.full_messages.join(', ')}" + redirect_to @post, alert: 'API response did not contain expected summary content.' end else - error_message = if result - "API returned success but no summary output was present" - else - "Failed to generate summary from API" - end - Rails.logger.error error_message - redirect_to @post, alert: error_message + redirect_to @post, alert: "API request failed with status #{result[:status_code]}" end end + private # Use callbacks to share common setup or constraints between actions. def set_post diff --git a/app/services/kagi_summarizer_service.rb b/app/services/kagi_summarizer_service.rb index 318dd8c..2fc4030 100644 --- a/app/services/kagi_summarizer_service.rb +++ b/app/services/kagi_summarizer_service.rb @@ -34,14 +34,12 @@ class KagiSummarizerService response = self.class.post('/summarize', @options.merge(body: body.to_json)) Rails.logger.debug "Received response from Kagi API: Status #{response.code}, Body: #{response.body}" - if response.success? - parsed_response = JSON.parse(response.body) - Rails.logger.debug "Parsed response: #{parsed_response.inspect}" - parsed_response - else - Rails.logger.error "Kagi API error: #{response.code} - #{response.body}" - Rails.logger.error "Full response object: #{response.inspect}" - nil - end + # Return both the parsed response and the raw response + { + success: response.success?, + status_code: response.code, + raw_response: response.body, + parsed_response: response.success? ? JSON.parse(response.body) : nil + } end end diff --git a/app/views/posts/index.html.erb b/app/views/posts/index.html.erb index 9a58f61..ce4c9c9 100644 --- a/app/views/posts/index.html.erb +++ b/app/views/posts/index.html.erb @@ -29,7 +29,7 @@ <%= link_to "View", post, class: "button small" %> <%= link_to "Edit", edit_post_path(post), class: "button small" %> <%= link_to "Delete", post, method: :delete, data: { confirm: "Are you sure you want to delete this post?" }, class: "button small danger" %> - <%= button_to "Generate Summary", summarize_post_path(post), class: "button small summary", data: { confirm: 'This will call the Kagi API. Continue?' } %> + <%= if post.summary.blank? then button_to "Generate Summary", summarize_post_path(post), class: "button small summary", data: { confirm: 'This will call the Kagi API. Continue?' } end %> <% end %> diff --git a/app/views/posts/show.html.erb b/app/views/posts/show.html.erb index 2f00e08..6ee72e7 100644 --- a/app/views/posts/show.html.erb +++ b/app/views/posts/show.html.erb @@ -8,7 +8,7 @@
<%= link_to "Edit this post", edit_post_path(@post), class: "button" %> - <%= button_to "Summarise this post", summarize_post_path(@post), class: "button" %> + <%= if @post.summary.blank? then button_to "Summarise this post", summarize_post_path(@post), class: "button" end %> <%= button_to "Destroy this post", @post, method: :delete %>
diff --git a/db/migrate/20241208065057_add_api_response_to_posts.rb b/db/migrate/20241208065057_add_api_response_to_posts.rb new file mode 100644 index 0000000..dcd35ca --- /dev/null +++ b/db/migrate/20241208065057_add_api_response_to_posts.rb @@ -0,0 +1,6 @@ +class AddApiResponseToPosts < ActiveRecord::Migration[7.2] + def change + add_column :posts, :summarizer_api_response, :json + add_column :posts, :last_summarized_at, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index ffb94b5..e5e4662 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2024_12_08_061729) do +ActiveRecord::Schema[7.2].define(version: 2024_12_08_065057) do create_table "api_keys", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.string "key" t.datetime "created_at", null: false @@ -39,6 +39,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_08_061729) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.text "summary" + t.json "summarizer_api_response" + t.datetime "last_summarized_at" t.index ["post_type"], name: "index_posts_on_post_type" t.index ["published_at"], name: "index_posts_on_published_at" t.index ["slug"], name: "index_posts_on_slug", unique: true -- 2.39.5