diff --git a/api/v1/runner.ts b/api/v1/runner.ts index b23edb7..d259bd3 100644 --- a/api/v1/runner.ts +++ b/api/v1/runner.ts @@ -1,7 +1,6 @@ // TODO:后续替换为 sdk import { LobeChatPlugins } from '@lobehub/lobe-chat-plugins'; -import { PluginsMap } from '../../plugins'; import { OpenAIPluginPayload } from '../../types/plugins'; export const config = { @@ -15,14 +14,14 @@ const INDEX_URL = `https://registry.npmmirror.com/${INDEX_PKG}/latest/files`; export default async (req: Request) => { if (req.method !== 'POST') return new Response('Method Not Allowed', { status: 405 }); + const res = await fetch(INDEX_URL); + const manifest: LobeChatPlugins = await res.json(); + console.log('manifest:', manifest); + const { name, arguments: args } = (await req.json()) as OpenAIPluginPayload; console.log(`检测到 functionCall: ${name}`); - const res = await fetch(INDEX_URL); - const manifest: LobeChatPlugins = await res.json(); - console.log(manifest); - const item = manifest.plugins.find((i) => i.name === name); // 先通过插件资产 endpoint 路径查询 @@ -33,16 +32,5 @@ export default async (req: Request) => { return new Response(data); } - // TODO:兼容性代码,全量完成迁移后移除 - const func = PluginsMap[name]; - - if (func) { - const data = JSON.parse(args); - const result = await func.runner(data); - - console.log(`[${name}]`, args, `result:`, JSON.stringify(result, null, 2).slice(0, 3600)); - - return new Response(JSON.stringify(result)); - } return; }; diff --git a/plugins/index.ts b/plugins/index.ts deleted file mode 100644 index 8358a2e..0000000 --- a/plugins/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { PluginItem } from '../types/pluginItem'; -import searchEngine from './searchEngine'; - -export const PluginsMap: Record = { - [searchEngine.name]: searchEngine, -}; diff --git a/plugins/searchEngine/index.ts b/plugins/searchEngine/index.ts deleted file mode 100644 index 23ff8aa..0000000 --- a/plugins/searchEngine/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { PluginItem } from '../../types/pluginItem'; -import runner from './runner'; -import { Result } from './type'; - -const schema: PluginItem['schema'] = { - description: '查询搜索引擎获取信息', - name: 'searchEngine', - parameters: { - properties: { - keywords: { - description: '关键词', - type: 'string', - }, - }, - required: ['keywords'], - type: 'object', - }, -}; - -const searchEngine: PluginItem = { - avatar: '🔍', - name: 'searchEngine', - runner, - schema, -}; - -export default searchEngine; diff --git a/plugins/searchEngine/runner.ts b/plugins/searchEngine/runner.ts deleted file mode 100644 index 4227983..0000000 --- a/plugins/searchEngine/runner.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { PluginRunner } from '../../types/pluginItem'; -import { OrganicResults, Result } from './type'; - -const BASE_URL = 'https://serpapi.com/search'; - -const API_KEY = process.env.SERPAI_API_KEY; - -const fetchResult: PluginRunner<{ keywords: string }, Result> = async ({ keywords }) => { - const params = { - api_key: API_KEY, - engine: 'google', - gl: 'cn', - google_domain: 'google.com', - hl: 'zh-cn', - location: 'China', - q: keywords, - }; - - const { default: querystring } = await import('query-string'); - - const query = querystring.stringify(params); - - const res = await fetch(`${BASE_URL}?${query}`); - - const data = await res.json(); - - const results = data.organic_results as OrganicResults; - - return results.map((r) => ({ - content: r.snippet, - date: r.date, - displayed_link: r.displayed_link, - favicon: r.favicon, - link: r.link, - source: r.source, - title: r.title, - })); -}; - -export default fetchResult; diff --git a/plugins/searchEngine/type.ts b/plugins/searchEngine/type.ts deleted file mode 100644 index 0e6555c..0000000 --- a/plugins/searchEngine/type.ts +++ /dev/null @@ -1,82 +0,0 @@ -export type OrganicResults = OrganicResult[]; - -export interface SearchItem { - content: string; - date?: string; - displayed_link?: string; - favicon?: string; - link: string; - source?: string; - title: string; -} -export type Result = SearchItem[]; - -interface OrganicResult { - about_page_link: string; - about_page_serpapi_link: string; - about_this_result: AboutThisResult; - cached_page_link?: string; - date?: string; - displayed_link: string; - favicon?: string; - link: string; - position: number; - related_results?: RelatedResult[]; - rich_snippet?: RichSnippet; - snippet: string; - snippet_highlighted_words?: string[]; - source: string; - thumbnail?: string; - title: string; -} - -interface AboutThisResult { - languages: string[]; - regions: string[]; - source: Source; -} - -interface Source { - description: string; - icon: string; - security?: string; - source_info_link?: string; -} - -interface RelatedResult { - about_page_link: string; - about_page_serpapi_link: string; - about_this_result: AboutThisResult2; - cached_page_link: string; - date: string; - displayed_link: string; - link: string; - position: number; - snippet: string; - snippet_highlighted_words: string[]; - title: string; -} - -interface AboutThisResult2 { - languages: string[]; - regions: string[]; - source: Source2; -} - -interface Source2 { - description: string; - icon: string; -} - -interface RichSnippet { - top: Top; -} - -interface Top { - detected_extensions: DetectedExtensions; - extensions: string[]; -} - -interface DetectedExtensions { - month_ago: number; -}