From 3ec7e7410f7a108fa8d2db490e1489adf5671957 Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Mon, 18 Nov 2024 22:39:07 +1100 Subject: [PATCH 1/5] unruggable --- packages/agent/src/index.ts | 5 +- packages/plugin-starknet/package.json | 1 + .../plugin-starknet/src/actions/unruggable.ts | 195 ++++++++++++++++++ pnpm-lock.yaml | 102 ++++++++- 4 files changed, 300 insertions(+), 3 deletions(-) create mode 100644 packages/plugin-starknet/src/actions/unruggable.ts diff --git a/packages/agent/src/index.ts b/packages/agent/src/index.ts index 70749fb06a8..5449dc63ada 100644 --- a/packages/agent/src/index.ts +++ b/packages/agent/src/index.ts @@ -21,7 +21,8 @@ import Database from "better-sqlite3"; import fs from "fs"; import readline from "readline"; import yargs from "yargs"; -import { character } from "./character.ts"; +// import { character } from "./character.ts"; +import { blobert } from "./blobert.ts"; export const wait = (minTime: number = 1000, maxTime: number = 3000) => { const waitTime = @@ -263,7 +264,7 @@ const startAgents = async () => { let charactersArg = args.characters || args.character; - let characters = [character]; + let characters = [blobert]; if (charactersArg) { characters = await loadCharacters(charactersArg); diff --git a/packages/plugin-starknet/package.json b/packages/plugin-starknet/package.json index b570351570e..cec0f12fdfa 100644 --- a/packages/plugin-starknet/package.json +++ b/packages/plugin-starknet/package.json @@ -8,6 +8,7 @@ "@ai16z/eliza": "workspace:*", "@ai16z/plugin-trustdb": "workspace:*", "@avnu/avnu-sdk": "^2.1.1", + "@unruggable_starknet/core": "^0.1.0", "starknet": "^6.17.0", "tsup": "^8.3.5", "vitest": "^2.1.4" diff --git a/packages/plugin-starknet/src/actions/unruggable.ts b/packages/plugin-starknet/src/actions/unruggable.ts new file mode 100644 index 00000000000..844d9d38eec --- /dev/null +++ b/packages/plugin-starknet/src/actions/unruggable.ts @@ -0,0 +1,195 @@ +import { + ActionExample, + HandlerCallback, + IAgentRuntime, + Memory, + ModelClass, + State, + type Action, +} from "@ai16z/eliza"; +import { composeContext } from "@ai16z/eliza"; +import { generateObject } from "@ai16z/eliza"; +import { + executeSwap as executeAvnuSwap, + fetchQuotes, + QuoteRequest, +} from "@avnu/avnu-sdk"; + +import { getStarknetAccount, validateSettings } from "../utils/index.ts"; + +interface SwapContent { + sellTokenAddress: string; + buyTokenAddress: string; + sellAmount: string; +} + +export function isSwapContent(content: SwapContent): content is SwapContent { + // Validate types + const validTypes = + typeof content.sellTokenAddress === "string" && + typeof content.buyTokenAddress === "string" && + typeof content.sellAmount === "string"; + if (!validTypes) { + return false; + } + + // Validate addresses (must be 32-bytes long with 0x prefix) + const validAddresses = + content.sellTokenAddress.startsWith("0x") && + content.sellTokenAddress.length === 66 && + content.buyTokenAddress.startsWith("0x") && + content.buyTokenAddress.length === 66; + + return validAddresses; +} + +const swapTemplate = `Respond with a JSON markdown block containing only the extracted values. Use null for any values that cannot be determined. + +These are known addresses you will get asked to swap, use these addresses for sellTokenAddress and buyTokenAddress: +- BROTHER/brother/$brother: 0x03b405a98c9e795d427fe82cdeeeed803f221b52471e3a757574a2b4180793ee +- BTC/btc: 0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac +- ETH/eth: 0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 +- STRK/strk: 0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d +- LORDS/lords: 0x0124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49 + +Example response: +\`\`\`json +{ + "sellTokenAddress": "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "buyTokenAddress": "0x124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49", + "sellAmount": "1000000000000000000" +} +\`\`\` + +{{recentMessages}} + +Extract the following information about the requested token swap: +- Sell token address +- Buy token address +- Amount to sell (in wei) + +Respond with a JSON markdown block containing only the extracted values. Use null for any values that cannot be determined.`; + +export const deployToken: Action = { + name: "EXECUTE_STARKNET_SWAP", + similes: [ + "STARKNET_SWAP_TOKENS", + "STARKNET_TOKEN_SWAP", + "STARKNET_TRADE_TOKENS", + "STARKNET_EXCHANGE_TOKENS", + ], + validate: async (runtime: IAgentRuntime, message: Memory) => { + return validateSettings(runtime); + }, + description: + "Perform a token swap on starknet. Use this action when a user asks you to swap tokens anything.", + handler: async ( + runtime: IAgentRuntime, + message: Memory, + state: State, + _options: { [key: string]: unknown }, + callback?: HandlerCallback + ): Promise => { + if (!state) { + state = (await runtime.composeState(message)) as State; + } else { + state = await runtime.updateRecentMessageState(state); + } + + const swapContext = composeContext({ + state, + template: swapTemplate, + }); + + const response = await generateObject({ + runtime, + context: swapContext, + modelClass: ModelClass.MEDIUM, + }); + + console.log("Response:", response); + + if (!isSwapContent(response)) { + callback?.({ text: "Invalid swap content, please try again." }); + return false; + } + + try { + // Get quote + const quoteParams: QuoteRequest = { + sellTokenAddress: response.sellTokenAddress, + buyTokenAddress: response.buyTokenAddress, + sellAmount: BigInt(response.sellAmount), + }; + + const quote = await fetchQuotes(quoteParams); + + // Execute swap + const swapResult = await executeAvnuSwap( + getStarknetAccount(runtime), + quote[0], + { + slippage: 0.05, // 5% slippage + executeApprove: true, + } + ); + + console.log("Swap completed successfully!"); + callback?.({ + text: + "Swap completed successfully! tx: " + + swapResult.transactionHash, + }); + + return true; + } catch (error) { + console.error("Error during token swap:", error); + callback?.({ text: `Error during swap:` }); + return false; + } + }, + examples: [ + [ + { + user: "{{user1}}", + content: { + text: "Swap 10 ETH for LORDS", + }, + }, + { + user: "{{agent}}", + content: { + text: "Ok, I'll swap 10 ETH for LORDS", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "Swap 100 $lords on starknet", + }, + }, + { + user: "{{agent}}", + content: { + text: "Ok, I'll swap 100 $lords on starknet", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "Swap 0.5 BTC for LORDS", + }, + }, + { + user: "{{agent}}", + content: { + text: "Ok, I'll swap 0.5 BTC for LORDS", + }, + }, + ], + ] as ActionExample[][], +} as Action; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f38759380c..e02f4c76661 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -866,6 +866,9 @@ importers: '@avnu/avnu-sdk': specifier: ^2.1.1 version: 2.1.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(qs@6.13.0)(starknet@6.17.0(encoding@0.1.13)) + '@unruggable_starknet/core': + specifier: ^0.1.0 + version: 0.1.0(starknet@6.17.0(encoding@0.1.13)) starknet: specifier: ^6.17.0 version: 6.17.0(encoding@0.1.13) @@ -2509,6 +2512,24 @@ packages: resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ethersproject/address@5.7.0': + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + + '@ethersproject/bignumber@5.7.0': + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + + '@ethersproject/bytes@5.7.0': + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + + '@ethersproject/keccak256@5.7.0': + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + + '@ethersproject/logger@5.7.0': + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + '@ethersproject/rlp@5.7.0': + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + '@google-cloud/vertexai@1.9.0': resolution: {integrity: sha512-8brlcJwFXI4fPuBtsDNQqCdWZmz8gV9jeEKOU0vc5H2SjehCQpXK/NwuSEr916zbhlBHtg/sU37qQQdgvh5BRA==} engines: {node: '>=18.0.0'} @@ -4467,6 +4488,15 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@uniswap/sdk-core@4.2.1': + resolution: {integrity: sha512-hr7vwYrXScg+V8/rRc2UL/Ixc/p0P7yqe4D/OxzUdMRYr8RZd+8z5Iu9+WembjZT/DCdbTjde6lsph4Og0n1BQ==} + engines: {node: '>=10'} + + '@unruggable_starknet/core@0.1.0': + resolution: {integrity: sha512-qhKqw1XKhSRHzK3Ll/RzCblGFJDD4oeGoPQbal/X7QVVG1qz+VnqoyA1U6SDmlSGTHfskvMoXrVWkPRFL2RqHA==} + peerDependencies: + starknet: '>=5.0.0' + '@vitejs/plugin-react@4.3.3': resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -6099,6 +6129,9 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decimal.js-light@2.5.1: + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -8092,6 +8125,9 @@ packages: js-sha1@0.7.0: resolution: {integrity: sha512-oQZ1Mo7440BfLSv9TX87VNEyU52pXPVG19F9PL3gTgNt0tVxlZ8F4O6yze3CLuLx28TxotxvlyepCNaaV0ZjMw==} + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -8103,6 +8139,9 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbi@3.2.5: + resolution: {integrity: sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==} + jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} @@ -8933,6 +8972,9 @@ packages: module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -11528,6 +11570,9 @@ packages: resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} engines: {node: '>=12'} + toformat@2.0.0: + resolution: {integrity: sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==} + together-ai@0.7.0: resolution: {integrity: sha512-/be/HOecBSwRTDHB14vCvHbp1WiNsFxyS4pJlyBoMup1X3n7xD1b/Gm5Z5amlKzD2zll9Y5wscDk7Ut5OsT1nA==} @@ -14907,6 +14952,36 @@ snapshots: dependencies: levn: 0.4.1 + '@ethersproject/address@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + '@ethersproject/bignumber@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + + '@ethersproject/bytes@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.7.0': {} + + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@google-cloud/vertexai@1.9.0(encoding@0.1.13)': dependencies: google-auth-library: 9.15.0(encoding@0.1.13) @@ -17334,6 +17409,21 @@ snapshots: '@ungap/structured-clone@1.2.0': {} + '@uniswap/sdk-core@4.2.1': + dependencies: + '@ethersproject/address': 5.7.0 + big.js: 5.2.2 + decimal.js-light: 2.5.1 + jsbi: 3.2.5 + tiny-invariant: 1.3.3 + toformat: 2.0.0 + + '@unruggable_starknet/core@0.1.0(starknet@6.17.0(encoding@0.1.13))': + dependencies: + '@uniswap/sdk-core': 4.2.1 + moment: 2.30.1 + starknet: 6.17.0(encoding@0.1.13) + '@vitejs/plugin-react@4.3.3(vite@5.4.11(@types/node@22.8.4)(terser@5.36.0))': dependencies: '@babel/core': 7.26.0 @@ -19205,6 +19295,8 @@ snapshots: decamelize@1.2.0: {} + decimal.js-light@2.5.1: {} + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 @@ -19959,7 +20051,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.7(supports-color@5.5.0) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -21677,6 +21769,8 @@ snapshots: js-sha1@0.7.0: {} + js-sha3@0.8.0: {} + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -21688,6 +21782,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsbi@3.2.5: {} + jsbn@0.1.1: {} jsbn@1.1.0: {} @@ -22921,6 +23017,8 @@ snapshots: module-details-from-path@1.0.3: {} + moment@2.30.1: {} + mri@1.2.0: {} mrmime@2.0.0: {} @@ -26001,6 +26099,8 @@ snapshots: toad-cache@3.7.0: {} + toformat@2.0.0: {} + together-ai@0.7.0(encoding@0.1.13): dependencies: '@types/node': 18.19.64 From 8c8886ad5de5d3831f48fe7e5490b55371cdd19d Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Tue, 19 Nov 2024 07:45:44 +1100 Subject: [PATCH 2/5] improve logging --- packages/client-direct/src/index.ts | 8 ++++---- .../src/actions/chat_with_attachments.ts | 6 ++---- .../src/actions/summarize_conversation.ts | 4 ++-- packages/client-twitter/src/interactions.ts | 18 +++++++++--------- packages/plugin-node/src/services/image.ts | 4 ++-- packages/plugin-solana/src/actions/transfer.ts | 4 ++-- packages/plugin-starknet/src/actions/swap.ts | 10 +++++++--- .../plugin-starknet/src/actions/transfer.ts | 15 +++++++-------- .../plugin-starknet/src/actions/unruggable.ts | 10 ++++++---- 9 files changed, 41 insertions(+), 38 deletions(-) diff --git a/packages/client-direct/src/index.ts b/packages/client-direct/src/index.ts index 96ffcfee044..1ca8a97658e 100644 --- a/packages/client-direct/src/index.ts +++ b/packages/client-direct/src/index.ts @@ -2,7 +2,7 @@ import bodyParser from "body-parser"; import cors from "cors"; import express, { Request as ExpressRequest } from "express"; import multer, { File } from "multer"; -import { generateCaption, generateImage } from "@ai16z/eliza"; +import { elizaLogger, generateCaption, generateImage } from "@ai16z/eliza"; import { composeContext } from "@ai16z/eliza"; import { generateMessageResponse } from "@ai16z/eliza"; import { messageCompletionFooter } from "@ai16z/eliza"; @@ -279,21 +279,21 @@ export class DirectClient { public start(port: number) { this.app.listen(port, () => { - console.log(`Server running at http://localhost:${port}/`); + elizaLogger.success(`Server running at http://localhost:${port}/`); }); } } export const DirectClientInterface: Client = { start: async (runtime: IAgentRuntime) => { - console.log("DirectClientInterface start"); + elizaLogger.log("DirectClientInterface start"); const client = new DirectClient(); const serverPort = parseInt(settings.SERVER_PORT || "3000"); client.start(serverPort); return client; }, stop: async (runtime: IAgentRuntime) => { - console.warn("Direct client does not support stopping yet"); + elizaLogger.warn("Direct client does not support stopping yet"); }, }; diff --git a/packages/client-discord/src/actions/chat_with_attachments.ts b/packages/client-discord/src/actions/chat_with_attachments.ts index 7a7e6d90d6f..85cf2bc599e 100644 --- a/packages/client-discord/src/actions/chat_with_attachments.ts +++ b/packages/client-discord/src/actions/chat_with_attachments.ts @@ -180,14 +180,12 @@ const summarizeAction = { let currentSummary = ""; - const model = models[runtime.character.settings.model]; - const chunkSize = model.settings.maxContextLength; + const model = models[runtime.character.modelProvider]; + const chunkSize = model.settings.maxOutputTokens; state.attachmentsWithText = attachmentsWithText; state.objective = objective; - const datestr = new Date().toUTCString().replace(/:/g, "-"); - const context = composeContext({ state, // make sure it fits, we can pad the tokens a bit diff --git a/packages/client-discord/src/actions/summarize_conversation.ts b/packages/client-discord/src/actions/summarize_conversation.ts index bca4adc8a24..fbed5ad1c65 100644 --- a/packages/client-discord/src/actions/summarize_conversation.ts +++ b/packages/client-discord/src/actions/summarize_conversation.ts @@ -249,8 +249,8 @@ const summarizeAction = { let currentSummary = ""; - const model = models[runtime.character.settings.model]; - const chunkSize = model.settings.maxContextLength - 1000; + const model = models[runtime.character.modelProvider]; + const chunkSize = model.settings.maxOutputTokens - 1000; const chunks = await splitChunks(formattedMemories, chunkSize, 0); diff --git a/packages/client-twitter/src/interactions.ts b/packages/client-twitter/src/interactions.ts index f6e7e2dff30..3e2f20cbd36 100644 --- a/packages/client-twitter/src/interactions.ts +++ b/packages/client-twitter/src/interactions.ts @@ -86,7 +86,7 @@ export class TwitterInteractionClient extends ClientBase { } async handleTwitterInteractions() { - console.log("Checking Twitter interactions"); + elizaLogger.log("Checking Twitter interactions"); try { // Check for mentions const tweetCandidates = ( @@ -152,7 +152,7 @@ export class TwitterInteractionClient extends ClientBase { ); } } catch (error) { - console.error( + elizaLogger.error( "Error saving latest checked tweet ID to file:", error ); @@ -170,15 +170,15 @@ export class TwitterInteractionClient extends ClientBase { ); } } catch (error) { - console.error( + elizaLogger.error( "Error saving latest checked tweet ID to file:", error ); } - console.log("Finished checking Twitter interactions"); + elizaLogger.log("Finished checking Twitter interactions"); } catch (error) { - console.error("Error handling Twitter interactions:", error); + elizaLogger.error("Error handling Twitter interactions:", error); } } @@ -196,7 +196,7 @@ export class TwitterInteractionClient extends ClientBase { } if (!message.content.text) { - console.log("skipping tweet with no text", tweet.id); + elizaLogger.log("skipping tweet with no text", tweet.id); return { text: "", action: "IGNORE" }; } elizaLogger.log("handling tweet", tweet.id); @@ -242,7 +242,7 @@ export class TwitterInteractionClient extends ClientBase { await this.runtime.messageManager.getMemoryById(tweetId); if (!tweetExists) { - console.log("tweet does not exist, saving"); + elizaLogger.log("tweet does not exist, saving"); const userIdUUID = stringToUuid(tweet.userId as string); const roomId = stringToUuid(tweet.conversationId); @@ -283,7 +283,7 @@ export class TwitterInteractionClient extends ClientBase { }); if (!shouldRespond) { - console.log("Not responding to message"); + elizaLogger.log("Not responding to message"); return { text: "", action: "IGNORE" }; } @@ -355,7 +355,7 @@ export class TwitterInteractionClient extends ClientBase { fs.writeFileSync(debugFileName, responseInfo); await wait(); } catch (error) { - console.error(`Error sending response tweet: ${error}`); + elizaLogger.error(`Error sending response tweet: ${error}`); } } } diff --git a/packages/plugin-node/src/services/image.ts b/packages/plugin-node/src/services/image.ts index 1aac84f5a42..374582936d9 100644 --- a/packages/plugin-node/src/services/image.ts +++ b/packages/plugin-node/src/services/image.ts @@ -43,9 +43,9 @@ export class ImageDescriptionService extends Service { return; } - const model = models[runtime.character.settings.model]; + const model = models[runtime.character.modelProvider]; - if (model === ModelProviderName.LLAMALOCAL) { + if (model === models[ModelProviderName.LLAMALOCAL]) { this.modelId = "onnx-community/Florence-2-base-ft"; env.allowLocalModels = false; diff --git a/packages/plugin-solana/src/actions/transfer.ts b/packages/plugin-solana/src/actions/transfer.ts index c5fe7774771..c9c4639c2f4 100644 --- a/packages/plugin-solana/src/actions/transfer.ts +++ b/packages/plugin-solana/src/actions/transfer.ts @@ -3,7 +3,7 @@ import { createTransferInstruction, } from "@solana/spl-token"; import bs58 from "bs58"; -import { settings } from "@ai16z/eliza"; +import { elizaLogger, settings } from "@ai16z/eliza"; import { Connection, @@ -103,7 +103,7 @@ export default { _options: { [key: string]: unknown }, callback?: HandlerCallback ): Promise => { - console.log("Starting TRANSFER_TOKEN handler..."); + elizaLogger.log("Starting SEND_TOKEN handler..."); // Initialize or update state if (!state) { diff --git a/packages/plugin-starknet/src/actions/swap.ts b/packages/plugin-starknet/src/actions/swap.ts index e6b47d0c16a..46760ce02e7 100644 --- a/packages/plugin-starknet/src/actions/swap.ts +++ b/packages/plugin-starknet/src/actions/swap.ts @@ -1,5 +1,6 @@ import { ActionExample, + elizaLogger, HandlerCallback, IAgentRuntime, Memory, @@ -90,6 +91,7 @@ export const executeSwap: Action = { _options: { [key: string]: unknown }, callback?: HandlerCallback ): Promise => { + elizaLogger.log("Starting EXECUTE_STARKNET_SWAP handler..."); if (!state) { state = (await runtime.composeState(message)) as State; } else { @@ -107,7 +109,7 @@ export const executeSwap: Action = { modelClass: ModelClass.MEDIUM, }); - console.log("Response:", response); + elizaLogger.debug("Response:", response); if (!isSwapContent(response)) { callback?.({ text: "Invalid swap content, please try again." }); @@ -134,7 +136,9 @@ export const executeSwap: Action = { } ); - console.log("Swap completed successfully!"); + elizaLogger.log( + "Swap completed successfully! tx: " + swapResult.transactionHash + ); callback?.({ text: "Swap completed successfully! tx: " + @@ -143,7 +147,7 @@ export const executeSwap: Action = { return true; } catch (error) { - console.error("Error during token swap:", error); + elizaLogger.error("Error during token swap:", error); callback?.({ text: `Error during swap:` }); return false; } diff --git a/packages/plugin-starknet/src/actions/transfer.ts b/packages/plugin-starknet/src/actions/transfer.ts index 5c064e84319..1f4f85e878e 100644 --- a/packages/plugin-starknet/src/actions/transfer.ts +++ b/packages/plugin-starknet/src/actions/transfer.ts @@ -2,9 +2,7 @@ // It should just transfer tokens from the agent's wallet to the recipient. import { - settings, ActionExample, - Content, HandlerCallback, IAgentRuntime, Memory, @@ -13,6 +11,7 @@ import { type Action, composeContext, generateObject, + elizaLogger, } from "@ai16z/eliza"; import { getStarknetAccount, @@ -70,7 +69,7 @@ export default { _options: { [key: string]: unknown }, callback?: HandlerCallback ): Promise => { - console.log("Starting TRANSFER_TOKEN handler..."); + elizaLogger.log("Starting SEND_TOKEN handler..."); // Initialize or update state if (!state) { @@ -92,11 +91,11 @@ export default { modelClass: ModelClass.MEDIUM, }); - console.log("Transfer content:", content); + elizaLogger.debug("Transfer content:", content); // Validate transfer content if (!isTransferContent(content)) { - console.error("Invalid content for TRANSFER_TOKEN action."); + elizaLogger.error("Invalid content for TRANSFER_TOKEN action."); if (callback) { callback({ text: "Not enough information to transfer tokens. Please respond with token address, recipient, and amount.", @@ -120,7 +119,7 @@ export default { amountWei ); - console.log( + elizaLogger.success( "Transferring", amountWei, "of", @@ -131,7 +130,7 @@ export default { const tx = await account.execute(transferCall); - console.log( + elizaLogger.success( "Transfer completed successfully! tx: " + tx.transaction_hash ); if (callback) { @@ -145,7 +144,7 @@ export default { return true; } catch (error) { - console.error("Error during token transfer:", error); + elizaLogger.error("Error during token transfer:", error); if (callback) { callback({ text: `Error transferring tokens: ${error.message}`, diff --git a/packages/plugin-starknet/src/actions/unruggable.ts b/packages/plugin-starknet/src/actions/unruggable.ts index 844d9d38eec..028393347f0 100644 --- a/packages/plugin-starknet/src/actions/unruggable.ts +++ b/packages/plugin-starknet/src/actions/unruggable.ts @@ -1,5 +1,6 @@ import { ActionExample, + elizaLogger, HandlerCallback, IAgentRuntime, Memory, @@ -90,6 +91,7 @@ export const deployToken: Action = { _options: { [key: string]: unknown }, callback?: HandlerCallback ): Promise => { + elizaLogger.log("Starting EXECUTE_STARKNET_SWAP handler..."); if (!state) { state = (await runtime.composeState(message)) as State; } else { @@ -107,8 +109,6 @@ export const deployToken: Action = { modelClass: ModelClass.MEDIUM, }); - console.log("Response:", response); - if (!isSwapContent(response)) { callback?.({ text: "Invalid swap content, please try again." }); return false; @@ -134,7 +134,9 @@ export const deployToken: Action = { } ); - console.log("Swap completed successfully!"); + elizaLogger.log( + "Swap completed successfully!" + swapResult.transactionHash + ); callback?.({ text: "Swap completed successfully! tx: " + @@ -143,7 +145,7 @@ export const deployToken: Action = { return true; } catch (error) { - console.error("Error during token swap:", error); + elizaLogger.error("Error during token swap:", error); callback?.({ text: `Error during swap:` }); return false; } From 1ff870894c97047736d1d197199da6093c54a624 Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Tue, 19 Nov 2024 07:51:03 +1100 Subject: [PATCH 3/5] formatting --- packages/plugin-starknet/src/actions/unruggable.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/plugin-starknet/src/actions/unruggable.ts b/packages/plugin-starknet/src/actions/unruggable.ts index 028393347f0..d558c27587d 100644 --- a/packages/plugin-starknet/src/actions/unruggable.ts +++ b/packages/plugin-starknet/src/actions/unruggable.ts @@ -1,3 +1,5 @@ +// TODO: add unruggable + import { ActionExample, elizaLogger, From 6e8b4577f7637fa0e0ecd59bbde0aaf109f2e65c Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Tue, 19 Nov 2024 08:03:01 +1100 Subject: [PATCH 4/5] contain --- packages/plugin-bootstrap/src/actions/continue.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugin-bootstrap/src/actions/continue.ts b/packages/plugin-bootstrap/src/actions/continue.ts index 7ff82a3feb8..aca1eba1e37 100644 --- a/packages/plugin-bootstrap/src/actions/continue.ts +++ b/packages/plugin-bootstrap/src/actions/continue.ts @@ -1,4 +1,4 @@ -import { composeContext } from "@ai16z/eliza"; +import { composeContext, elizaLogger } from "@ai16z/eliza"; import { generateMessageResponse, generateTrueOrFalse } from "@ai16z/eliza"; import { booleanFooter, messageCompletionFooter } from "@ai16z/eliza"; import { @@ -123,7 +123,7 @@ export const continueAction: Action = { const shouldContinue = await _shouldContinue(state); if (!shouldContinue) { - console.log("Not elaborating"); + elizaLogger.log("Not elaborating, returning"); return; } From 2eec9deed095593c21419e42db46fb5f409fded1 Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Tue, 19 Nov 2024 08:53:31 +1100 Subject: [PATCH 5/5] unruggable --- packages/agent/src/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/agent/src/index.ts b/packages/agent/src/index.ts index 5449dc63ada..2cd94f5aa2f 100644 --- a/packages/agent/src/index.ts +++ b/packages/agent/src/index.ts @@ -21,9 +21,7 @@ import Database from "better-sqlite3"; import fs from "fs"; import readline from "readline"; import yargs from "yargs"; -// import { character } from "./character.ts"; -import { blobert } from "./blobert.ts"; - +import { character } from "./character.ts"; export const wait = (minTime: number = 1000, maxTime: number = 3000) => { const waitTime = Math.floor(Math.random() * (maxTime - minTime + 1)) + minTime; @@ -264,7 +262,7 @@ const startAgents = async () => { let charactersArg = args.characters || args.character; - let characters = [blobert]; + let characters = [character]; if (charactersArg) { characters = await loadCharacters(charactersArg);