diff --git a/coderd/x/chatd/quickgen.go b/coderd/x/chatd/quickgen.go index 557f43ed09..6c3f52900f 100644 --- a/coderd/x/chatd/quickgen.go +++ b/coderd/x/chatd/quickgen.go @@ -424,6 +424,8 @@ func (p *Server) prepareQuickgenDebugCandidate( return runCtx, debugModel, finishDebugRun } +// Synthetic quickgen prompts end with an assistant marker because AI Bridge +// records final user-role messages as user prompts. const quickgenStructuredOutputReady = "Ready to provide the structured output." func syntheticObjectGenerationPrompt(systemPrompt, userInput string) fantasy.Prompt { diff --git a/coderd/x/chatd/quickgen_internal_test.go b/coderd/x/chatd/quickgen_internal_test.go index 185ebb9dc8..7e8ade8df3 100644 --- a/coderd/x/chatd/quickgen_internal_test.go +++ b/coderd/x/chatd/quickgen_internal_test.go @@ -526,6 +526,7 @@ func Test_generateManualTitle_TruncatesFirstUserInput(t *testing.T) { model := &chattest.FakeModel{ GenerateObjectFn: func(_ context.Context, call fantasy.ObjectCall) (*fantasy.ObjectResponse, error) { requireSyntheticQuickgenPrompt(t, call.Prompt, truncateRunes(longFirstUserText, 1000)) + // The manual title system prompt also includes the latest user excerpt. systemText, ok := call.Prompt[0].Content[0].(fantasy.TextPart) require.True(t, ok) require.Contains(t, systemText.Text, truncateRunes(longFirstUserText, 1000))