diff --git a/src/lib/agents/search/researcher/actions/academicSearch.ts b/src/lib/agents/search/researcher/actions/academicSearch.ts index 72e1f4b14..f59008eff 100644 --- a/src/lib/agents/search/researcher/actions/academicSearch.ts +++ b/src/lib/agents/search/researcher/actions/academicSearch.ts @@ -30,7 +30,7 @@ const academicSearchAction: ResearchAction = { config.classification.classification.skipSearch === false && config.classification.classification.academicSearch === true, execute: async (input, additionalConfig) => { - input.queries = input.queries.slice(0, 3); + const queries = (input.queries ?? []).slice(0, 3); const researchBlock = additionalConfig.session.getBlock( additionalConfig.researchBlockId, @@ -40,7 +40,7 @@ const academicSearchAction: ResearchAction = { researchBlock.data.subSteps.push({ type: 'searching', id: crypto.randomUUID(), - searching: input.queries, + searching: queries, }); additionalConfig.session.updateBlock(additionalConfig.researchBlockId, [ @@ -62,7 +62,7 @@ const academicSearchAction: ResearchAction = { engines: ['arxiv', 'google scholar', 'pubmed'], }); - const resultChunks: Chunk[] = res.results.map((r) => ({ + const resultChunks: Chunk[] = (res.results ?? []).map((r) => ({ content: r.content || r.title, metadata: { title: r.title, @@ -117,7 +117,7 @@ const academicSearchAction: ResearchAction = { } }; - await Promise.all(input.queries.map(search)); + await Promise.all(queries.map(search)); return { type: 'search_results', diff --git a/src/lib/agents/search/researcher/actions/scrapeURL.ts b/src/lib/agents/search/researcher/actions/scrapeURL.ts index c702a7014..7778ea66a 100644 --- a/src/lib/agents/search/researcher/actions/scrapeURL.ts +++ b/src/lib/agents/search/researcher/actions/scrapeURL.ts @@ -25,7 +25,7 @@ const scrapeURLAction: ResearchAction = { getDescription: () => actionDescription, enabled: (_) => true, execute: async (params, additionalConfig) => { - params.urls = params.urls.slice(0, 3); + const urls = (params.urls ?? []).slice(0, 3); let readingBlockId = crypto.randomUUID(); let readingEmitted = false; @@ -37,7 +37,7 @@ const scrapeURLAction: ResearchAction = { const results: Chunk[] = []; await Promise.all( - params.urls.map(async (url) => { + urls.map(async (url) => { try { const res = await fetch(url); const text = await res.text(); diff --git a/src/lib/agents/search/researcher/actions/socialSearch.ts b/src/lib/agents/search/researcher/actions/socialSearch.ts index 16468ab4c..3186043ea 100644 --- a/src/lib/agents/search/researcher/actions/socialSearch.ts +++ b/src/lib/agents/search/researcher/actions/socialSearch.ts @@ -30,7 +30,7 @@ const socialSearchAction: ResearchAction = { config.classification.classification.skipSearch === false && config.classification.classification.discussionSearch === true, execute: async (input, additionalConfig) => { - input.queries = input.queries.slice(0, 3); + const queries = (input.queries ?? []).slice(0, 3); const researchBlock = additionalConfig.session.getBlock( additionalConfig.researchBlockId, @@ -40,7 +40,7 @@ const socialSearchAction: ResearchAction = { researchBlock.data.subSteps.push({ type: 'searching', id: crypto.randomUUID(), - searching: input.queries, + searching: queries, }); additionalConfig.session.updateBlock(additionalConfig.researchBlockId, [ @@ -62,7 +62,7 @@ const socialSearchAction: ResearchAction = { engines: ['reddit'], }); - const resultChunks: Chunk[] = res.results.map((r) => ({ + const resultChunks: Chunk[] = (res.results ?? []).map((r) => ({ content: r.content || r.title, metadata: { title: r.title, @@ -117,7 +117,7 @@ const socialSearchAction: ResearchAction = { } }; - await Promise.all(input.queries.map(search)); + await Promise.all(queries.map(search)); return { type: 'search_results', diff --git a/src/lib/agents/search/researcher/actions/uploadsSearch.ts b/src/lib/agents/search/researcher/actions/uploadsSearch.ts index 819506395..579b80d85 100644 --- a/src/lib/agents/search/researcher/actions/uploadsSearch.ts +++ b/src/lib/agents/search/researcher/actions/uploadsSearch.ts @@ -27,7 +27,7 @@ const uploadsSearchAction: ResearchAction = { Never use this tool to search the web or for information that is not contained within the user's uploaded files. `, execute: async (input, additionalConfig) => { - input.queries = input.queries.slice(0, 3); + const queries = (input.queries ?? []).slice(0, 3); const researchBlock = additionalConfig.session.getBlock( additionalConfig.researchBlockId, @@ -37,7 +37,7 @@ const uploadsSearchAction: ResearchAction = { researchBlock.data.subSteps.push({ id: crypto.randomUUID(), type: 'upload_searching', - queries: input.queries, + queries: queries, }); additionalConfig.session.updateBlock(additionalConfig.researchBlockId, [ @@ -54,7 +54,7 @@ const uploadsSearchAction: ResearchAction = { fileIds: additionalConfig.fileIds, }); - const results = await uploadStore.query(input.queries, 10); + const results = await uploadStore.query(queries, 10); const seenIds = new Map(); diff --git a/src/lib/agents/search/researcher/actions/webSearch.ts b/src/lib/agents/search/researcher/actions/webSearch.ts index 4d60b79f2..43639af4d 100644 --- a/src/lib/agents/search/researcher/actions/webSearch.ts +++ b/src/lib/agents/search/researcher/actions/webSearch.ts @@ -85,7 +85,7 @@ const webSearchAction: ResearchAction = { config.sources.includes('web') && config.classification.classification.skipSearch === false, execute: async (input, additionalConfig) => { - input.queries = input.queries.slice(0, 3); + const queries = (input.queries ?? []).slice(0, 3); const researchBlock = additionalConfig.session.getBlock( additionalConfig.researchBlockId, @@ -95,7 +95,7 @@ const webSearchAction: ResearchAction = { researchBlock.data.subSteps.push({ id: crypto.randomUUID(), type: 'searching', - searching: input.queries, + searching: queries, }); additionalConfig.session.updateBlock(additionalConfig.researchBlockId, [ @@ -115,7 +115,7 @@ const webSearchAction: ResearchAction = { const search = async (q: string) => { const res = await searchSearxng(q); - const resultChunks: Chunk[] = res.results.map((r) => ({ + const resultChunks: Chunk[] = (res.results ?? []).map((r) => ({ content: r.content || r.title, metadata: { title: r.title, @@ -170,7 +170,7 @@ const webSearchAction: ResearchAction = { } }; - await Promise.all(input.queries.map(search)); + await Promise.all(queries.map(search)); return { type: 'search_results', diff --git a/src/lib/searxng.ts b/src/lib/searxng.ts index a0bcd8355..44be7ed6f 100644 --- a/src/lib/searxng.ts +++ b/src/lib/searxng.ts @@ -41,8 +41,8 @@ export const searchSearxng = async ( const res = await fetch(url); const data = await res.json(); - const results: SearxngSearchResult[] = data.results; - const suggestions: string[] = data.suggestions; + const results: SearxngSearchResult[] = data.results ?? []; + const suggestions: string[] = data.suggestions ?? []; return { results, suggestions }; };