# Pull Request Template ## Description Routes OSS reply-box and small Captain tasks through feature-specific LLM model resolution. Rewrite, reply suggestion, summary, follow-up, and CSAT utility analysis now resolve through the `editor` feature; label suggestion resolves through `label_suggestion`. Existing credentials, account OpenAI hook behavior, and instrumentation event names remain unchanged. Linear: https://linear.app/chatwoot/issue/CW-7425/test-new-models Depends on #14839 ## Type of change - [ ] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality not to work as expected) - [ ] This change requires a documentation update ## How Has This Been Tested? - `bundle exec rspec spec/lib/captain/base_task_service_spec.rb spec/lib/captain/rewrite_service_spec.rb spec/lib/captain/reply_suggestion_service_spec.rb spec/lib/captain/summary_service_spec.rb spec/lib/captain/label_suggestion_service_spec.rb spec/lib/captain/csat_utility_analysis_service_spec.rb spec/lib/captain/follow_up_service_spec.rb` passed with 81 examples, 0 failures. - `bundle exec rubocop lib/captain/base_task_service.rb lib/captain/rewrite_service.rb lib/captain/reply_suggestion_service.rb lib/captain/summary_service.rb lib/captain/label_suggestion_service.rb lib/captain/csat_utility_analysis_service.rb lib/captain/follow_up_service.rb enterprise/lib/enterprise/captain/reply_suggestion_service.rb spec/lib/captain/base_task_service_spec.rb spec/lib/captain/rewrite_service_spec.rb spec/lib/captain/reply_suggestion_service_spec.rb spec/lib/captain/summary_service_spec.rb spec/lib/captain/label_suggestion_service_spec.rb spec/lib/captain/csat_utility_analysis_service_spec.rb spec/lib/captain/follow_up_service_spec.rb` passed with no offenses. - `git diff --check` passed. ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules
47 lines
1.1 KiB
Ruby
47 lines
1.1 KiB
Ruby
class Captain::ReplySuggestionService < Captain::BaseTaskService
|
|
pattr_initialize [:account!, :conversation_display_id!, :user!]
|
|
|
|
def perform
|
|
make_api_call(
|
|
feature: 'editor',
|
|
messages: [
|
|
{ role: 'system', content: system_prompt },
|
|
{ role: 'user', content: formatted_conversation }
|
|
]
|
|
)
|
|
end
|
|
|
|
private
|
|
|
|
def system_prompt
|
|
template = prompt_from_file('reply')
|
|
render_liquid_template(template, prompt_variables)
|
|
end
|
|
|
|
def prompt_variables
|
|
{
|
|
'channel_type' => conversation.inbox.channel_type,
|
|
'agent_name' => user.name,
|
|
'agent_signature' => user.message_signature.presence
|
|
}
|
|
end
|
|
|
|
def render_liquid_template(template_content, variables = {})
|
|
Liquid::Template.parse(template_content).render(variables)
|
|
end
|
|
|
|
def formatted_conversation
|
|
LlmFormatter::ConversationLlmFormatter.new(conversation).format(token_limit: TOKEN_LIMIT)
|
|
end
|
|
|
|
def event_name
|
|
'reply_suggestion'
|
|
end
|
|
|
|
def use_account_openai_hook?
|
|
true
|
|
end
|
|
end
|
|
|
|
Captain::ReplySuggestionService.prepend_mod_with('Captain::ReplySuggestionService')
|