improve reasoning toggle tests and refactor model capability checks

This commit is contained in:
2026-09-22 10:30:03 +02:00
parent a8e348e0c7
commit 3b6c8969cc
15 changed files with 201 additions and 23 deletions
+5 -3
View File
@@ -106,14 +106,16 @@ export function buildWebSearchQueries(message, decision = decideWebSearch(messag
}
/** Retrieve before generation; only try a second date query when the first has no usable evidence. */
export async function retrieveWebSearch(message, provider, {signal, onSearching = () => {}} = {}) {
export async function retrieveWebSearch(message, provider, {signal, onSearching = () => {}, referenceText = ""} = {}) {
const decision = decideWebSearch(message);
if (!decision.shouldSearch) return {decision, state: "skipped", queries: [], candidates: [], sources: null};
onSearching();
const queries = [];
let candidates = [];
let sources = [];
for (const query of buildWebSearchQueries(message, decision)) {
// Image evidence may clarify "is this accurate?"; it must never alter the user's tool decision.
const searchMessage = referenceText ? `${message} ${referenceText}` : message;
for (const query of buildWebSearchQueries(searchMessage, decision)) {
queries.push(query);
try {
const results = await provider.search(query, {
@@ -125,7 +127,7 @@ export async function retrieveWebSearch(message, provider, {signal, onSearching
const merged = [...results, ...candidates].sort((a, b) =>
Number(Boolean(b?.snippet || b?.content)) - Number(Boolean(a?.snippet || a?.content)));
candidates = normalizeSearchCandidates(merged, MAX_CANDIDATES * 2);
sources = selectSearchResults(message, candidates, decision);
sources = selectSearchResults(searchMessage, candidates, decision);
if (sources.length) break;
} catch (error) {
if (signal?.aborted || queries.length === 1) throw error;