This adds a `captain_sessions` table to log every Captain run, starting with Assistant Responses and Copilot Responses. Each session records the assistant, model, credits consumed, the FAQs/documents/scenario that contributed to the response, and the full run context — giving customers visibility into how a response was generated and giving us durable stats on credit, FAQ, and document usage (which today only exist as ephemeral trace metadata and an aggregate account counter). ## What changed - New `Captain::Session` model with a `session_type` enum (`assistant`, `copilot`). The subject (`Conversation` / `CopilotThread`) and result (`Message` / `CopilotMessage`) classes are inferred from the session type, so the table stores plain `subject_id` / `result_id` ids. `result_id` is nullable so failed runs that still consumed credits can be logged. - Composite indexes on `[session_type, subject_id]`, `[session_type, result_id]`, and `[account_id, session_type, created_at]` for lookup and usage-stats queries. - Factory and model specs. This PR is schema + model only; the writer/instrumentation that records sessions from the assistant and copilot flows will follow. --------- Co-authored-by: Sony Mathew <sony@chatwoot.com>
15 lines
409 B
Ruby
15 lines
409 B
Ruby
FactoryBot.define do
|
|
factory :captain_agent_session, class: 'Captain::AgentSession' do
|
|
account
|
|
association :assistant, factory: :captain_assistant
|
|
session_type { :assistant }
|
|
subject { create(:conversation, account: account) }
|
|
|
|
trait :copilot do
|
|
session_type { :copilot }
|
|
user
|
|
subject { create(:captain_copilot_thread, account: account, user: user) }
|
|
end
|
|
end
|
|
end
|