Documentation Index
Fetch the complete documentation index at: https://docs.sendai.fun/llms.txt
Use this file to discover all available pages before exploring further.
React Native Integration
For React Native applications, you can integrate Solana Agent Kit with wallet adapters that work in a mobile environment. Here’s a simplified example using a custom wallet hook:import { useCallback, useMemo, useState } from "react";
import { generateText, type Message } from "ai";
import { SolanaAgentKit, createVercelAITools } from "solana-agent-kit";
import TokenPlugin from "@solana-agent-kit/plugin-token";
import { Connection, PublicKey } from "@solana/web3.js";
import { useWallet } from "@/walletProviders"; // Your wallet provider hook
export function useChat({ id, initialMessages = [] }) {
const [messages, setMessages] = useState(initialMessages);
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState(null);
// Get wallet functionality from your custom wallet hook
const { connected, address, signTransaction, signMessage, sendTransaction } = useWallet();
// Initialize Solana tools with the connected wallet
const solanaTools = useMemo(() => {
if (connected && address) {
const agent = new SolanaAgentKit(
{
publicKey: new PublicKey(address),
signTransaction: async (tx) => await signTransaction(tx),
signMessage: async (msg) => await signMessage(msg),
sendTransaction: async (tx) => {
const connection = new Connection("YOUR_RPC_URL", "confirmed");
return await sendTransaction(tx, connection);
},
signAndSendTransaction: async (tx) => {
const connection = new Connection("YOUR_RPC_URL", "confirmed");
const signature = await sendTransaction(tx, connection);
return { signature };
},
},
"YOUR_RPC_URL",
{}
).use(TokenPlugin);
return createVercelAITools(agent, agent.actions);
}
}, [connected, address, signTransaction, signMessage, sendTransaction]);
// Send a message to the AI assistant
const sendMessage = useCallback(async (newMessage) => {
if (!connected) {
setError("You must be connected to your wallet to send messages");
return;
}
setIsLoading(true);
setError(null);
// Update UI with user message
setMessages((prev) => [...prev, newMessage]);
try {
// Generate AI response
const res = await generateText({
model: myProvider.languageModel("chat-model"),
system: `You're a helpful Solana assistant that helps people carry out transactions. Connected wallet: ${address}`,
messages: [...messages, newMessage],
tools: solanaTools,
});
// Process and display assistant response
const assistantMessage = res.response.messages.find(m => m.role === "assistant");
if (assistantMessage) {
setMessages((prev) => [...prev, {
id: assistantMessage.id,
content: assistantMessage.content,
role: "assistant",
parts: assistantMessage.parts,
}]);
}
} catch (err) {
setError(err.message || "An error occurred");
} finally {
setIsLoading(false);
}
}, [messages, solanaTools, connected, address]);
return {
messages,
isLoading,
error,
sendMessage,
};
}
Using with Vercel AI SDK
Once you’ve set up your agent and tools, you can use them with the Vercel AI SDK:import { generateText } from "ai";
// Generate a response with your AI provider
const res = await generateText({
model: myProvider.languageModel("your-model"),
system: "You're a helpful Solana assistant that helps people carry out transactions on the Solana blockchain.",
messages: messages, // Your chat messages
tools: solanaTools, // The tools created above
});