Skip to main content

Setup & Initialize Your Agent

🧠 Initialize Your Agent

Create an agent using TensaiKit for DeFi protocols actions of Katana Network.

import { privateKeyToAccount } from "viem/accounts";
import { createWalletClient, http } from "viem";
import { ChatOpenAI } from "@langchain/openai";
import { TensaiKit, sushiSwapActionProvider, katana } from "tensaikit";
import { ViemWalletProvider } from "tensaikit/wallet";
import { createReactAgent, tool, MemorySaver, HumanMessage } from "langchain";

// Initialize your agent
async function initializeAgent() {
try {
const llm = new ChatOpenAI({
model: "gpt-4o-mini",
apiKey: process.env.OPENAI_API_KEY,
});

const account = privateKeyToAccount(
(process.env.WALLET_PRIVATE_KEY as `0x{string}`) ?? ""
);

const client = createWalletClient({
account,
chain: katana(process.env.KATANA_RPC_API_KEY),
transport: http(),
});

const walletProvider = new ViemWalletProvider(client);

const agentkit = await TensaiKit.from({
walletProvider,
actionProviders: [sushiSwapActionProvider()],
});

const tools = await getMyLangChainTools(agentkit);
const memory = new MemorySaver();

const agentConfig = {
configurable: { thread_id: "Tensaikit Chatbot Example" },
};

const agent = createReactAgent({
llm,
tools,
checkpointSaver: memory,
messageModifier: `You are a helpful onchain agent using TensaiKit. Be clear, concise, and only use tools when needed.`,
});

return {
agent,
config: agentConfig,
};
} catch (error) {
console.error("Failed to initialize agent:", error);
throw error;
}
}

const agentPromise = initializeAgent();
export default agentPromise;

🛠️ LangChain Tool Wrapping

Wrap your TensaiKit actions into LangChain-compatible tools.

async function getMyLangChainTools(agentKit: TensaiKit) {
const actions = agentKit.getActions();

return actions.map((action) =>
tool(async (arg) => await action.invoke(arg), {
name: action.name,
description: action.description,
schema: action.schema,
})
);
}