fix(captain): localize AI summary to account language (#13790)

AI-generated summaries now respect the account's language setting.
Previously, summaries were always returned in English regardless of the
user's configured language, making section headings like "Customer
Intent" and "Action Items" appear in English even for non-English
accounts.

Previous behavior:
<img width="1336" height="790" alt="image"
src="https://github.com/user-attachments/assets/5df8b78b-1218-438d-9578-a806b5cb94ac"
/>


Current Behavior: 
<img width="1253" height="372" alt="image"
src="https://github.com/user-attachments/assets/ae932c97-06da-4baf-9f77-9719bc9162e8"
/>


## What changed
- Added explicit account locale to the AI system prompt in
`Captain::SummaryService`
- Updated the summary prompt template to instruct the model to translate
section headings

## How to test
1. Configure an account with a non-English language (e.g., Portuguese)
2. Open a conversation with messages
3. Use the Copilot "Summarize" feature
4. Verify that section headings ("Customer Intent", "Conversation
Summary", etc.) appear in the account's language

---------

Co-authored-by: Aakash Bakhle <48802744+aakashb95@users.noreply.github.com>
This commit is contained in:
Petterson
2026-04-14 09:06:10 -03:00
committed by GitHub
parent 288c1cb757
commit b7b6e67df7
3 changed files with 12 additions and 3 deletions

View File

@@ -5,7 +5,7 @@ class Captain::SummaryService < Captain::BaseTaskService
make_api_call(
model: GPT_MODEL,
messages: [
{ role: 'system', content: prompt_from_file('summary') },
{ role: 'system', content: system_prompt },
{ role: 'user', content: conversation.to_llm_text(include_contact_details: false) }
]
)
@@ -13,6 +13,14 @@ class Captain::SummaryService < Captain::BaseTaskService
private
def system_prompt
<<~PROMPT
#{prompt_from_file('summary')}
Reply in #{account.locale_english_name}.
PROMPT
end
def event_name
'summarize'
end

View File

@@ -17,7 +17,7 @@ Make sure you strongly adhere to the following rules when generating the summary
13. Do not insert your own opinions about the conversation.
Reply in the user's language, as a markdown of the following format.
Use markdown with the following format. Translate all section headings to match the reply language:
**Customer Intent**

View File

@@ -35,7 +35,8 @@ RSpec.describe Captain::SummaryService do
expect(service).to receive(:make_api_call) do |args|
expect(args[:messages].length).to eq(2)
expect(args[:messages][0][:role]).to eq('system')
expect(args[:messages][0][:content]).to eq('Summarize this')
expect(args[:messages][0][:content]).to include('Summarize this')
expect(args[:messages][0][:content]).to include("Reply in #{account.locale_english_name}")
expect(args[:messages][1][:role]).to eq('user')
expect(args[:messages][1][:content]).to be_a(String)
{ message: 'Summary' }