fix: remove system role from Shakespeare AI calls, embed prompt in user message instead

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
This commit is contained in:
shakespeare.diy 2026-06-16 19:39:50 +07:00
parent 4aebbc8798
commit ba8b65b6d9

View file

@ -225,13 +225,19 @@ export function SasquatchGuide({ message, onDismiss }: SasquatchGuideProps) {
let accumulated = ''; let accumulated = '';
// First pass: get AI response which may include a TOOL: call // First pass: get AI response which may include a TOOL: call
// Inject system prompt as first user message if system role unsupported // Prefix the system prompt into the first user message for compatibility
const messagesWithSystem = [ const historyWithContext = history.length > 0
{ role: 'system' as const, content: SYSTEM_PROMPT }, ? [
...history, {
]; role: 'user' as const,
content: `${SYSTEM_PROMPT}\n\n---\n\nUser question: ${history[0].content}`,
},
...history.slice(1),
]
: [{ role: 'user' as const, content: SYSTEM_PROMPT }];
const firstResponse = await shakespeare.sendChatMessage( const firstResponse = await shakespeare.sendChatMessage(
messagesWithSystem, historyWithContext,
'shakespeare' 'shakespeare'
); );
@ -278,12 +284,9 @@ export function SasquatchGuide({ message, onDismiss }: SasquatchGuideProps) {
setStreamingText(''); setStreamingText('');
const toolResultStr = JSON.stringify(toolResult, null, 2); const toolResultStr = JSON.stringify(toolResult, null, 2);
const secondResponse = await shakespeare.sendChatMessage([ const secondResponse = await shakespeare.sendChatMessage([
{ role: 'system' as const, content: SYSTEM_PROMPT },
...history,
{ role: 'assistant' as const, content: aiText },
{ {
role: 'user' as const, role: 'user' as const,
content: `Tool result from ${toolName}:\n${toolResultStr}\n\nNow answer the user's question naturally based on this live data. Be concise and skater-friendly.`, content: `${SYSTEM_PROMPT}\n\n---\n\nUser asked: ${question}\n\nTool result from ${toolName}:\n${toolResultStr}\n\nNow answer the user's question naturally based on this live data. Be concise and skater-friendly.`,
}, },
], 'shakespeare'); ], 'shakespeare');