forked from elizaOS/eliza
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'tcm-tavily' of http://github.com/ai16z/eliza into HEAD
- Loading branch information
Showing
9 changed files
with
295 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
* | ||
|
||
!dist/** | ||
!package.json | ||
!readme.md | ||
!tsup.config.ts |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
{ | ||
"name": "@ai16z/plugin-web-search", | ||
"version": "0.1.3", | ||
"main": "dist/index.js", | ||
"type": "module", | ||
"types": "dist/index.d.ts", | ||
"dependencies": { | ||
"@ai16z/eliza": "workspace:*", | ||
"tsup": "^8.3.5" | ||
}, | ||
"scripts": { | ||
"build": "tsup --format esm --dts" | ||
}, | ||
"peerDependencies": { | ||
"whatwg-url": "7.1.0" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,188 @@ | ||
import { elizaLogger } from "@ai16z/eliza"; | ||
import { | ||
Action, | ||
HandlerCallback, | ||
IAgentRuntime, | ||
Memory, | ||
Plugin, | ||
State, | ||
} from "@ai16z/eliza"; | ||
import { generateWebSearch } from "@ai16z/eliza"; | ||
|
||
import { SearchResult } from "@ai16z/eliza"; | ||
|
||
const webSearch: Action = { | ||
name: "WEB_SEARCH", | ||
similes: [ | ||
"SEARCH_WEB", | ||
"INTERNET_SEARCH", | ||
"LOOKUP", | ||
"QUERY_WEB", | ||
"FIND_ONLINE", | ||
"SEARCH_ENGINE", | ||
"WEB_LOOKUP", | ||
"ONLINE_SEARCH", | ||
"FIND_INFORMATION", | ||
], | ||
description: | ||
"Perform a web search to find information related to the message.", | ||
validate: async (runtime: IAgentRuntime, message: Memory) => { | ||
const tavilyApiKeyOk = !!runtime.getSetting("TAVILY_API_KEY"); | ||
|
||
return tavilyApiKeyOk; | ||
}, | ||
handler: async ( | ||
runtime: IAgentRuntime, | ||
message: Memory, | ||
state: State, | ||
options: any, | ||
callback: HandlerCallback | ||
) => { | ||
elizaLogger.log("Composing state for message:", message); | ||
state = (await runtime.composeState(message)) as State; | ||
const userId = runtime.agentId; | ||
elizaLogger.log("User ID:", userId); | ||
|
||
const webSearchPrompt = message.content.text; | ||
elizaLogger.log("web search prompt received:", webSearchPrompt); | ||
|
||
elizaLogger.log("Generating image with prompt:", webSearchPrompt); | ||
const searchResponse = await generateWebSearch( | ||
webSearchPrompt, | ||
runtime | ||
); | ||
|
||
if (searchResponse && searchResponse.results.length) { | ||
const responseList = searchResponse.answer | ||
? `${searchResponse.answer}${ | ||
Array.isArray(searchResponse.results) && | ||
searchResponse.results.length > 0 | ||
? `\n\nFor more details, you can check out these resources:\n${searchResponse.results | ||
.map( | ||
(result: SearchResult, index: number) => | ||
`${index + 1}. [${result.title}](${result.url})` | ||
) | ||
.join("\n")}` | ||
: "" | ||
}` | ||
: ""; | ||
|
||
callback({ | ||
text: responseList, | ||
}); | ||
} else { | ||
elizaLogger.error("search failed or returned no data."); | ||
} | ||
}, | ||
examples: [ | ||
[ | ||
{ | ||
user: "{{user1}}", | ||
content: { | ||
text: "Find the latest news about SpaceX launches.", | ||
}, | ||
}, | ||
{ | ||
user: "{{agentName}}", | ||
content: { | ||
text: "Here is the latest news about SpaceX launches:", | ||
action: "WEB_SEARCH", | ||
}, | ||
}, | ||
], | ||
[ | ||
{ | ||
user: "{{user1}}", | ||
content: { | ||
text: "Can you find details about the iPhone 16 release?", | ||
}, | ||
}, | ||
{ | ||
user: "{{agentName}}", | ||
content: { | ||
text: "Here are the details I found about the iPhone 16 release:", | ||
action: "WEB_SEARCH", | ||
}, | ||
}, | ||
], | ||
[ | ||
{ | ||
user: "{{user1}}", | ||
content: { | ||
text: "What is the schedule for the next FIFA World Cup?", | ||
}, | ||
}, | ||
{ | ||
user: "{{agentName}}", | ||
content: { | ||
text: "Here is the schedule for the next FIFA World Cup:", | ||
action: "WEB_SEARCH", | ||
}, | ||
}, | ||
], | ||
[ | ||
{ | ||
user: "{{user1}}", | ||
content: { text: "Check the latest stock price of Tesla." }, | ||
}, | ||
{ | ||
user: "{{agentName}}", | ||
content: { | ||
text: "Here is the latest stock price of Tesla I found:", | ||
action: "WEB_SEARCH", | ||
}, | ||
}, | ||
], | ||
[ | ||
{ | ||
user: "{{user1}}", | ||
content: { | ||
text: "What are the current trending movies in the US?", | ||
}, | ||
}, | ||
{ | ||
user: "{{agentName}}", | ||
content: { | ||
text: "Here are the current trending movies in the US:", | ||
action: "WEB_SEARCH", | ||
}, | ||
}, | ||
], | ||
[ | ||
{ | ||
user: "{{user1}}", | ||
content: { | ||
text: "What is the latest score in the NBA finals?", | ||
}, | ||
}, | ||
{ | ||
user: "{{agentName}}", | ||
content: { | ||
text: "Here is the latest score from the NBA finals:", | ||
action: "WEB_SEARCH", | ||
}, | ||
}, | ||
], | ||
[ | ||
{ | ||
user: "{{user1}}", | ||
content: { text: "When is the next Apple keynote event?" }, | ||
}, | ||
{ | ||
user: "{{agentName}}", | ||
content: { | ||
text: "Here is the information about the next Apple keynote event:", | ||
action: "WEB_SEARCH", | ||
}, | ||
}, | ||
], | ||
], | ||
} as Action; | ||
|
||
export const webSearchPlugin: Plugin = { | ||
name: "webSearch", | ||
description: "Search web", | ||
actions: [webSearch], | ||
evaluators: [], | ||
providers: [], | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ | ||
"extends": "../../tsconfig.json", | ||
"compilerOptions": { | ||
"outDir": "dist", | ||
"rootDir": "src", | ||
"types": ["node"] | ||
}, | ||
"include": ["src/**/*.ts"] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import { defineConfig } from "tsup"; | ||
|
||
export default defineConfig({ | ||
entry: ["src/index.ts"], | ||
outDir: "dist", | ||
sourcemap: true, | ||
clean: true, | ||
format: ["esm"], // Ensure you're targeting CommonJS | ||
external: [ | ||
"dotenv", // Externalize dotenv to prevent bundling | ||
"fs", // Externalize fs to use Node.js built-in module | ||
"path", // Externalize other built-ins if necessary | ||
"@reflink/reflink", | ||
"@node-llama-cpp", | ||
"https", | ||
"http", | ||
"agentkeepalive", | ||
"zod", | ||
// Add other modules you want to externalize | ||
], | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters