From 655c131b991f33b2c4599ec7f56ba58e67f6692a Mon Sep 17 00:00:00 2001 From: aryan Date: Mon, 18 Nov 2024 00:38:00 +0700 Subject: [PATCH] feat: test added --- package.json | 7 +++++-- pnpm-lock.yaml | 6 ++++++ src/langchain/index.ts | 16 ++++++++++++++- test/index.ts | 45 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 test/index.ts diff --git a/package.json b/package.json index c461014..2fdf714 100644 --- a/package.json +++ b/package.json @@ -5,15 +5,18 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", "build": "tsc", - "docs": "typedoc src --out docs" + "docs": "typedoc src --out docs", + "test": "ts-node test/index.ts" + }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "@bonfida/spl-name-service": "^3.0.7", + "@langchain/core": "^0.3.18", + "@langchain/openai": "^0.3.13", "@metaplex-foundation/js": "^0.20.1", "@metaplex-foundation/mpl-core": "^1.1.1", "@metaplex-foundation/mpl-token-metadata": "^3.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ce7fb64..c4b47c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,12 @@ importers: '@bonfida/spl-name-service': specifier: ^3.0.7 version: 3.0.7(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@langchain/core': + specifier: ^0.3.18 + version: 0.3.18(openai@4.72.0(zod@3.23.8)) + '@langchain/openai': + specifier: ^0.3.13 + version: 0.3.13(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))) '@metaplex-foundation/js': specifier: ^0.20.1 version: 0.20.1(arweave@1.15.5)(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)(utf-8-validate@5.0.10) diff --git a/src/langchain/index.ts b/src/langchain/index.ts index aa098ed..36885ef 100644 --- a/src/langchain/index.ts +++ b/src/langchain/index.ts @@ -166,6 +166,19 @@ export class SolanaRegisterDomainTool extends Tool { } } +export class SolanaGetWalletAddressTool extends Tool { + name = "solana_get_wallet_address"; + description = "Get the wallet address of the agent"; + + constructor(private solanaKit: SolanaAgentKit) { + super(); + } + + async _call(_input: string): Promise { + return this.solanaKit.wallet_address.toString(); + } +} + // Updated createSolanaTools function export function createSolanaTools(solanaKit: SolanaAgentKit) { return [ @@ -177,5 +190,6 @@ export function createSolanaTools(solanaKit: SolanaAgentKit) { new SolanaTradeTool(solanaKit), new SolanaRequestFundsTool(solanaKit), new SolanaRegisterDomainTool(solanaKit), + new SolanaGetWalletAddressTool(solanaKit), ]; -} \ No newline at end of file +} diff --git a/test/index.ts b/test/index.ts new file mode 100644 index 0000000..566954a --- /dev/null +++ b/test/index.ts @@ -0,0 +1,45 @@ +import { SolanaAgentKit } from "../src"; +import { createSolanaTools } from "../src/langchain"; +import { OpenAI } from "@langchain/openai"; +import { AgentExecutor } from "langchain/agents"; +import { PromptTemplate } from "@langchain/core/prompts"; +import { pull } from "langchain/hub"; +import { createReactAgent } from "langchain/agents"; + +// Initialize SolanaAgentKit +const solanaKit = new SolanaAgentKit( + "2bsq2EHutvSvZenGiFSqg4AKMBCP2gB1LnkRiavS4SHKZs4FnDSkGy9c2quiTBuSoKTn9AKV82P1E5D8mkiHJuEW" +); + +// Create Solana-specific tools +const tools = createSolanaTools(solanaKit); + + +(async () => { + // Define a Prompt Template for the Agent + const prompt = await pull("hwchase17/react"); + + // Create an LLM Chain + const llm = new OpenAI({ + modelName: "gpt-4o-mini", + temperature: 0, + }); + + const agent = await createReactAgent({ + llm, + tools, + prompt, + }); + + const agentExecutor = new AgentExecutor({ + agent, + tools, + }); + + const result = await agentExecutor.invoke({ + input: + "What is your wallet address?", + }); + + console.log(result); +})();