Fix web search (again)
This commit is contained in:
@@ -18,7 +18,7 @@ import {
|
||||
retryStylePrompts
|
||||
} from "./chatMessageHelpers.js";
|
||||
|
||||
import {SearXNGSearchProvider, WebSearchError, buildWebSearchContext, buildWebSearchQuery} from "./webSearchService.js";
|
||||
import {SearXNGSearchProvider, WebSearchError, buildWebSearchContext, buildWebSearchQuery, decideWebSearch, selectSearchResults, MAX_CANDIDATES} from "./webSearchService.js";
|
||||
|
||||
export function createChatService(repositories, modelService, config, webSearchProvider = new SearXNGSearchProvider(config)) {
|
||||
const chatGenerationQueues = new Map();
|
||||
@@ -338,20 +338,35 @@ export function createChatService(repositories, modelService, config, webSearchP
|
||||
let payload;
|
||||
const fullReply = await withActiveGeneration(chatId, signal, async (activeSignal) => {
|
||||
if (webSearch) {
|
||||
onStatus?.({status: "searching"});
|
||||
const searchQuery = buildWebSearchQuery(message);
|
||||
sources = await webSearchProvider.search(searchQuery, {signal: activeSignal, limit: 5});
|
||||
const searchDecision = decideWebSearch(message);
|
||||
let searchQuery = null;
|
||||
let candidateCount = 0;
|
||||
let selectedCount = 0;
|
||||
if (searchDecision.needsSearch) {
|
||||
onStatus?.({status: "searching"});
|
||||
searchQuery = buildWebSearchQuery(message, searchDecision);
|
||||
const candidates = await webSearchProvider.search(searchQuery, {
|
||||
signal: activeSignal,
|
||||
limit: MAX_CANDIDATES,
|
||||
...(searchDecision.intent === "news" ? {category: "news"} : {})
|
||||
});
|
||||
candidateCount = candidates.length;
|
||||
sources = selectSearchResults(message, candidates, searchDecision);
|
||||
selectedCount = sources.length;
|
||||
onStatus?.({status: "generating", sourceCount: selectedCount});
|
||||
}
|
||||
if (config.structuredRequestLoggingEnabled) {
|
||||
console.log(JSON.stringify({
|
||||
event: "web_search",
|
||||
enabled: true,
|
||||
webSearchRequested: true,
|
||||
searchNeeded: searchDecision.needsSearch,
|
||||
query: searchQuery,
|
||||
resultCount: sources.length,
|
||||
webContextSupplied: true,
|
||||
candidateCount,
|
||||
selectedCount,
|
||||
webContextSupplied: sources !== null,
|
||||
model: effectiveModel
|
||||
}));
|
||||
}
|
||||
onStatus?.({status: "generating", sourceCount: sources.length});
|
||||
}
|
||||
payload = buildConversationContext({user, chatId, session, message: null, sources});
|
||||
return payload.activePersona
|
||||
|
||||
Reference in New Issue
Block a user