@sweetoburrito/backstage-plugin-ai-assistant-backend-module-tool-provider-search 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -34,15 +34,29 @@ const createSearchWikipediaTool = ({}) => {
|
|
|
34
34
|
if (pageDetails && pageDetails.extract) {
|
|
35
35
|
const summary = `Page: ${pageTitle}
|
|
36
36
|
Summary: ${pageDetails.extract}`;
|
|
37
|
-
summaries.push(
|
|
37
|
+
summaries.push({
|
|
38
|
+
summary,
|
|
39
|
+
url: `https://en.wikipedia.org/wiki/${encodeURIComponent(
|
|
40
|
+
pageTitle
|
|
41
|
+
)}`
|
|
42
|
+
});
|
|
38
43
|
}
|
|
39
44
|
}
|
|
40
45
|
if (summaries.length === 0) {
|
|
41
|
-
return
|
|
46
|
+
return {
|
|
47
|
+
content: "No relevant Wikipedia articles found for the query."
|
|
48
|
+
};
|
|
42
49
|
}
|
|
43
|
-
return
|
|
50
|
+
return {
|
|
51
|
+
content: summaries.map((s) => s.summary).join("\n\n").slice(0, maxContentLength),
|
|
52
|
+
metadata: {
|
|
53
|
+
urls: summaries.map((s) => s.url).filter((url) => url !== void 0)
|
|
54
|
+
}
|
|
55
|
+
};
|
|
44
56
|
} catch (error) {
|
|
45
|
-
return
|
|
57
|
+
return {
|
|
58
|
+
content: `Error searching Wikipedia: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
59
|
+
};
|
|
46
60
|
}
|
|
47
61
|
}
|
|
48
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wikipedia.cjs.js","sources":["../../src/tools/wikipedia.ts"],"sourcesContent":["import {\n createAssistantTool,\n Tool,\n} from '@sweetoburrito/backstage-plugin-ai-assistant-node';\nimport z from 'zod';\nimport { SearchResults, PageResult, Page } from '../types/wikipedia';\n\ntype CreateSearchWikipediaToolOptions = {};\n\nexport const createSearchWikipediaTool =\n ({}: CreateSearchWikipediaToolOptions): Tool => {\n const wikipediaTool = createAssistantTool({\n tool: {\n name: 'search-wikipedia',\n description: `Use this tool to search Wikipedia articles for relevant information.\n\n Use this tool when users ask about:\n - General knowledge questions that can be answered using Wikipedia articles\n - Historical facts, biographical information, scientific concepts\n - Definitions and explanations of topics\n `,\n schema: z.object({\n query: z\n .string()\n .describe('The search query to look for on Wikipedia'),\n topKResults: z\n .number()\n .optional()\n .default(3)\n .describe('Number of top results to return (default: 3)'),\n maxContentLength: z\n .number()\n .optional()\n .default(4000)\n .describe('Maximum length of content to return (default: 4000)'),\n }),\n func: async ({ query, topKResults = 3, maxContentLength = 4000 }) => {\n try {\n const baseUrl = 'https://en.wikipedia.org/w/api.php';\n\n const searchResults = await fetchSearchResults(baseUrl, query);\n const summaries: string[] = [];\n\n for (\n let i = 0;\n i < Math.min(topKResults, searchResults.query.search.length);\n i++\n ) {\n const pageTitle = searchResults.query.search[i].title;\n const pageDetails = await fetchPage(baseUrl, pageTitle);\n\n if (pageDetails && pageDetails.extract) {\n const summary = `Page: ${pageTitle}\\nSummary: ${pageDetails.extract}`;\n summaries.push(summary);\n }\n }\n\n if (summaries.length === 0) {\n return 'No
|
|
1
|
+
{"version":3,"file":"wikipedia.cjs.js","sources":["../../src/tools/wikipedia.ts"],"sourcesContent":["import {\n createAssistantTool,\n Tool,\n} from '@sweetoburrito/backstage-plugin-ai-assistant-node';\nimport z from 'zod';\nimport { SearchResults, PageResult, Page } from '../types/wikipedia';\n\ntype CreateSearchWikipediaToolOptions = {};\n\nexport const createSearchWikipediaTool =\n ({}: CreateSearchWikipediaToolOptions): Tool => {\n const wikipediaTool = createAssistantTool({\n tool: {\n name: 'search-wikipedia',\n description: `Use this tool to search Wikipedia articles for relevant information.\n\n Use this tool when users ask about:\n - General knowledge questions that can be answered using Wikipedia articles\n - Historical facts, biographical information, scientific concepts\n - Definitions and explanations of topics\n `,\n schema: z.object({\n query: z\n .string()\n .describe('The search query to look for on Wikipedia'),\n topKResults: z\n .number()\n .optional()\n .default(3)\n .describe('Number of top results to return (default: 3)'),\n maxContentLength: z\n .number()\n .optional()\n .default(4000)\n .describe('Maximum length of content to return (default: 4000)'),\n }),\n func: async ({ query, topKResults = 3, maxContentLength = 4000 }) => {\n try {\n const baseUrl = 'https://en.wikipedia.org/w/api.php';\n\n const searchResults = await fetchSearchResults(baseUrl, query);\n const summaries: {\n summary: string;\n url?: string;\n }[] = [];\n\n for (\n let i = 0;\n i < Math.min(topKResults, searchResults.query.search.length);\n i++\n ) {\n const pageTitle = searchResults.query.search[i].title;\n const pageDetails = await fetchPage(baseUrl, pageTitle);\n\n if (pageDetails && pageDetails.extract) {\n const summary = `Page: ${pageTitle}\\nSummary: ${pageDetails.extract}`;\n summaries.push({\n summary,\n url: `https://en.wikipedia.org/wiki/${encodeURIComponent(\n pageTitle,\n )}`,\n });\n }\n }\n\n if (summaries.length === 0) {\n return {\n content: 'No relevant Wikipedia articles found for the query.',\n };\n }\n\n return {\n content: summaries\n .map(s => s.summary)\n .join('\\n\\n')\n .slice(0, maxContentLength),\n metadata: {\n urls: summaries\n .map(s => s.url)\n .filter(url => url !== undefined),\n },\n };\n } catch (error) {\n return {\n content: `Error searching Wikipedia: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n };\n }\n },\n },\n });\n\n return wikipediaTool;\n };\n\n/**\n * Fetches search results from Wikipedia API\n */\nasync function fetchSearchResults(\n baseUrl: string,\n query: string,\n): Promise<SearchResults> {\n const searchParams = new URLSearchParams({\n action: 'query',\n list: 'search',\n srsearch: query,\n format: 'json',\n });\n\n const response = await fetch(`${baseUrl}?${searchParams.toString()}`);\n if (!response.ok) {\n throw new Error(\n `Wikipedia search failed: ${response.status} ${response.statusText}`,\n );\n }\n\n return await response.json();\n}\n\n/**\n * Fetches page content from Wikipedia API\n */\nasync function fetchPage(\n baseUrl: string,\n pageTitle: string,\n): Promise<Page | null> {\n const params = new URLSearchParams({\n action: 'query',\n prop: 'extracts',\n explaintext: 'true',\n redirects: '1',\n format: 'json',\n titles: pageTitle,\n });\n\n const response = await fetch(`${baseUrl}?${params.toString()}`);\n if (!response.ok) {\n throw new Error(\n `Wikipedia page fetch failed: ${response.status} ${response.statusText}`,\n );\n }\n\n const data: PageResult = await response.json();\n const { pages } = data.query;\n const pageId = Object.keys(pages)[0];\n\n return pages[pageId] || null;\n}\n"],"names":["createAssistantTool","z"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sweetoburrito/backstage-plugin-ai-assistant-backend-module-tool-provider-search",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "The tool-provider-search backend module for the ai-assistant plugin.",
|
|
6
6
|
"main": "dist/index.cjs.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@backstage/backend-plugin-api": "^1.4.3",
|
|
32
|
-
"@sweetoburrito/backstage-plugin-ai-assistant-node": "^0.
|
|
32
|
+
"@sweetoburrito/backstage-plugin-ai-assistant-node": "^0.7.0",
|
|
33
33
|
"zod": "^4.1.11"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|