From d1ab6edaf1be9bcae00a399ab1bd4816fdff0b47 Mon Sep 17 00:00:00 2001 From: aakashb95 Date: Sat, 11 Jul 2026 21:39:58 +0530 Subject: [PATCH] feat(captain): store FAQ suggestion language --- db/migrate/20260710000000_create_captain_faq_suggestions.rb | 5 ++++- db/schema.rb | 4 +++- enterprise/app/models/captain/faq_observation.rb | 3 ++- enterprise/app/models/captain/faq_suggestion.rb | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/db/migrate/20260710000000_create_captain_faq_suggestions.rb b/db/migrate/20260710000000_create_captain_faq_suggestions.rb index 002fa85d8..1eced91c4 100644 --- a/db/migrate/20260710000000_create_captain_faq_suggestions.rb +++ b/db/migrate/20260710000000_create_captain_faq_suggestions.rb @@ -13,13 +13,15 @@ class CreateCaptainFaqSuggestions < ActiveRecord::Migration[7.1] t.vector :embedding, limit: 1536 t.references :assistant, null: false, index: true t.references :account, null: false, index: true + t.string :language, null: false, default: 'en' t.integer :source_count, null: false, default: 0 t.integer :status, null: false, default: 0 t.timestamps end - add_index :captain_faq_suggestions, [:assistant_id, :status] + add_index :captain_faq_suggestions, [:assistant_id, :status, :language], + name: 'idx_captain_faq_suggestions_on_assistant_status_language' add_index :captain_faq_suggestions, :embedding, using: :ivfflat, name: 'vector_idx_captain_faq_suggestions_embedding', opclass: :vector_cosine_ops @@ -31,6 +33,7 @@ class CreateCaptainFaqSuggestions < ActiveRecord::Migration[7.1] t.references :faq_suggestion, index: true t.string :generated_question, null: false t.text :generated_answer, null: false + t.string :language, null: false, default: 'en' t.integer :status, null: false, default: 0 t.timestamps diff --git a/db/schema.rb b/db/schema.rb index b58fdbd1a..f952e66b2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -397,6 +397,7 @@ ActiveRecord::Schema[7.1].define(version: 2026_07_10_000000) do t.bigint "faq_suggestion_id" t.string "generated_question", null: false t.text "generated_answer", null: false + t.string "language", default: "en", null: false t.integer "status", default: 0, null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false @@ -411,12 +412,13 @@ ActiveRecord::Schema[7.1].define(version: 2026_07_10_000000) do t.vector "embedding", limit: 1536 t.bigint "assistant_id", null: false t.bigint "account_id", null: false + t.string "language", default: "en", null: false t.integer "source_count", default: 0, null: false t.integer "status", default: 0, null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["account_id"], name: "index_captain_faq_suggestions_on_account_id" - t.index ["assistant_id", "status"], name: "index_captain_faq_suggestions_on_assistant_id_and_status" + t.index ["assistant_id", "status", "language"], name: "idx_captain_faq_suggestions_on_assistant_status_language" t.index ["assistant_id"], name: "index_captain_faq_suggestions_on_assistant_id" t.index ["embedding"], name: "vector_idx_captain_faq_suggestions_embedding", opclass: :vector_cosine_ops, using: :ivfflat end diff --git a/enterprise/app/models/captain/faq_observation.rb b/enterprise/app/models/captain/faq_observation.rb index 50107b6a6..31ee7ae53 100644 --- a/enterprise/app/models/captain/faq_observation.rb +++ b/enterprise/app/models/captain/faq_observation.rb @@ -5,6 +5,7 @@ # id :bigint not null, primary key # generated_answer :text not null # generated_question :string not null +# language :string default("en"), not null # status :integer default("attached"), not null # created_at :datetime not null # updated_at :datetime not null @@ -19,6 +20,6 @@ class Captain::FaqObservation < ApplicationRecord enum status: { attached: 0, discarded: 1 } - validates :generated_question, :generated_answer, presence: true + validates :generated_question, :generated_answer, :language, presence: true validates :faq_suggestion, presence: true, if: :attached? end diff --git a/enterprise/app/models/captain/faq_suggestion.rb b/enterprise/app/models/captain/faq_suggestion.rb index 1759b6151..fdda5fae6 100644 --- a/enterprise/app/models/captain/faq_suggestion.rb +++ b/enterprise/app/models/captain/faq_suggestion.rb @@ -5,6 +5,7 @@ # id :bigint not null, primary key # answer :text not null # embedding :vector(1536) +# language :string default("en"), not null # question :string not null # source_count :integer default(0), not null # status :integer default("open"), not null @@ -26,12 +27,13 @@ class Captain::FaqSuggestion < ApplicationRecord enum status: { open: 0, approved: 1, dismissed: 2 } - validates :question, :answer, presence: true + validates :question, :answer, :language, presence: true before_validation :ensure_account after_commit :update_embedding scope :ordered, -> { order(source_count: :desc, updated_at: :desc) } + scope :by_language, ->(language) { where(language: language) } private