feat(tools): expose retrieval_mode in query-based tool responses
Add a retrieval_mode field ("semantic" or "text") to the output of all
five query-driven tools so callers can distinguish vector search from
Postgres full-text fallback without inspecting server logs.
Tools updated: search_thoughts, recall_context, get_project_context,
summarize_thoughts, and related_thoughts (semantic neighbours only;
omitempty so field is absent when include_semantic is false or no query
is provided for the non-mandatory-query tools).
The shared semanticSearch helper now returns the mode as a third return
value. All callers updated; fixes two compile errors left by the
previous worker (summarize.go and links.go were not capturing the new
return).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
package tools
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestRetrievalModeConstants(t *testing.T) {
|
||||
if RetrievalModeSemantic != "semantic" {
|
||||
t.Fatalf("RetrievalModeSemantic = %q, want %q", RetrievalModeSemantic, "semantic")
|
||||
}
|
||||
if RetrievalModeText != "text" {
|
||||
t.Fatalf("RetrievalModeText = %q, want %q", RetrievalModeText, "text")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSearchOutputIncludesRetrievalMode(t *testing.T) {
|
||||
out := SearchOutput{RetrievalMode: RetrievalModeSemantic}
|
||||
if out.RetrievalMode != RetrievalModeSemantic {
|
||||
t.Fatalf("SearchOutput.RetrievalMode = %q, want %q", out.RetrievalMode, RetrievalModeSemantic)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRelatedOutputIncludesRetrievalMode(t *testing.T) {
|
||||
out := RelatedOutput{RetrievalMode: RetrievalModeText}
|
||||
if out.RetrievalMode != RetrievalModeText {
|
||||
t.Fatalf("RelatedOutput.RetrievalMode = %q, want %q", out.RetrievalMode, RetrievalModeText)
|
||||
}
|
||||
// retrieval_mode is omitempty — empty string means semantic search was skipped
|
||||
out2 := RelatedOutput{}
|
||||
if out2.RetrievalMode != "" {
|
||||
t.Fatalf("RelatedOutput.RetrievalMode = %q, want empty when include_semantic is false", out2.RetrievalMode)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSummarizeOutputIncludesRetrievalModeOnlyWhenQueryUsed(t *testing.T) {
|
||||
withQuery := SummarizeOutput{Summary: "s", Count: 1, RetrievalMode: RetrievalModeSemantic}
|
||||
if withQuery.RetrievalMode != RetrievalModeSemantic {
|
||||
t.Fatalf("SummarizeOutput.RetrievalMode = %q, want %q", withQuery.RetrievalMode, RetrievalModeSemantic)
|
||||
}
|
||||
withoutQuery := SummarizeOutput{Summary: "s", Count: 1}
|
||||
if withoutQuery.RetrievalMode != "" {
|
||||
t.Fatalf("SummarizeOutput.RetrievalMode = %q, want empty when no query", withoutQuery.RetrievalMode)
|
||||
}
|
||||
}
|
||||
|
||||
func TestProjectContextOutputIncludesRetrievalModeOnlyWhenQueryUsed(t *testing.T) {
|
||||
withQuery := ProjectContextOutput{RetrievalMode: RetrievalModeText}
|
||||
if withQuery.RetrievalMode != RetrievalModeText {
|
||||
t.Fatalf("ProjectContextOutput.RetrievalMode = %q, want %q", withQuery.RetrievalMode, RetrievalModeText)
|
||||
}
|
||||
withoutQuery := ProjectContextOutput{}
|
||||
if withoutQuery.RetrievalMode != "" {
|
||||
t.Fatalf("ProjectContextOutput.RetrievalMode = %q, want empty when no query", withoutQuery.RetrievalMode)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRecallOutputIncludesRetrievalMode(t *testing.T) {
|
||||
out := RecallOutput{RetrievalMode: RetrievalModeSemantic}
|
||||
if out.RetrievalMode != RetrievalModeSemantic {
|
||||
t.Fatalf("RecallOutput.RetrievalMode = %q, want %q", out.RetrievalMode, RetrievalModeSemantic)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user