Introduction
Plugins
- Defi
- Token
- Blinks
- NFT
- Misc
Adapters
Examples
Integrations
- Token Operations
- NFT Management
- Defi Integrations
- Squads Protocol Multisig
- Solana Blinks
- Non-Financial Actions
Quickstart
React native
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
});
Was this page helpful?
On this page