Solana Agent Kit provides integration with the Orbofi Personality Engine, allowing developers to create AI-powered personalities based on celebrities, historical figures, or fictional characters. This integration enables interactive chat experiences or autonomous agent behavior.
Key Features
- Personality fetching from Orbofi database
- Interactive chat mode
- Autonomous action mode
- Structured personality data
- Simple integration API
- Error handling and validation
Setup Instructions
Prerequisites
# Required dependencies
- @sendaifun/solana-agent-kit
- @orbofi/personality-engine
Installation
npm install @orbofi/personality-engine
Configuration
// Add to your Solana Agent Kit configuration
const config = {
// ... other configuration options
ORBOFI_API_KEY: "your_api_key_here"
};
Basic Usage
Fetching a Personality
// Import personality module
import { fetchPersonality } from '@orbofi/personality-engine';
// Fetch a personality by name
const personality = await agent.fetchOrbofiPersonality('satoshi nakamoto');
Using Chat Mode
// Start interactive chat with the personality
const chat = await agent.startOrbofiChat(personality);
// Send a message and get a response
const response = await chat.sendMessage('Tell me about yourself');
Using Autonomous Mode
// Start autonomous mode with specific goals
const autonomous = await agent.startOrbofiAutonomousMode(personality, {
goal: 'Explain blockchain technology',
steps: 5
});
// Execute autonomous actions
const result = await autonomous.execute();
Integration Examples
Basic Personality Fetcher App
import { SolanaAgentKit } from '@sendaifun/solana-agent-kit';
import readline from 'readline';
// Initialize Solana Agent Kit
const agent = new SolanaAgentKit({
// ... configuration
});
// Create interactive CLI
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
async function main() {
// Prompt for personality selection
console.log('************');
console.log('Personality Selection:');
console.log('What is the name of the celebrity/person/character that you would like to create?');
console.log('************');
rl.question('', async (name) => {
try {
// Fetch the personality
const personality = await agent.fetchOrbofiPersonality(name);
console.log(`Fetched personality: ${personality.description}`);
// Select mode
console.log('\nAvailable modes:');
console.log('1. chat\n- Interactive chat mode');
console.log('2. auto\n- Autonomous action mode');
rl.question('Choose a mode (enter number or name): ', async (mode) => {
if (mode === '1' || mode.toLowerCase() === 'chat') {
// Start chat mode
startChatMode(personality);
} else if (mode === '2' || mode.toLowerCase() === 'auto') {
// Start autonomous mode
startAutonomousMode(personality);
} else {
console.log('Invalid mode selected.');
rl.close();
}
});
} catch (error) {
console.error('Error fetching personality:', error.message);
rl.close();
}
});
}
async function startChatMode(personality) {
console.log('Starting chat mode... Type \'exit\' to end.');
const chat = await agent.startOrbofiChat(personality);
const promptUser = () => {
rl.question('Prompt: ', async (input) => {
if (input.toLowerCase() === 'exit') {
rl.close();
return;
}
try {
const response = await chat.sendMessage(input);
console.log(response);
promptUser();
} catch (error) {
console.error('Error in chat:', error.message);
promptUser();
}
});
};
promptUser();
}
async function startAutonomousMode(personality) {
console.log('Starting autonomous mode...');
try {
const autonomous = await agent.startOrbofiAutonomousMode(personality, {
goal: 'Provide insights about your field of expertise',
steps: 3
});
const result = await autonomous.execute();
console.log('Autonomous execution complete:');
console.log(result.join('\n'));
rl.close();
} catch (error) {
console.error('Error in autonomous mode:', error.message);
rl.close();
}
}
main();
API Reference
fetchOrbofiPersonality
/**
* Fetches personality data from the Orbofi database
* @param name Name of the celebrity/character to fetch
* @returns Personality object with description and properties
*/
async function fetchOrbofiPersonality(name: string): Promise<Personality>
startOrbofiChat
/**
* Starts an interactive chat session with the personality
* @param personality Personality object returned from fetchOrbofiPersonality
* @returns Chat object with methods for interaction
*/
async function startOrbofiChat(personality: Personality): Promise<OrbofiChat>
startOrbofiAutonomousMode
/**
* Starts autonomous mode with the specified personality
* @param personality Personality object returned from fetchOrbofiPersonality
* @param options Configuration options for autonomous behavior
* @returns Autonomous object with execution methods
*/
async function startOrbofiAutonomousMode(
personality: Personality,
options: AutonomousOptions
): Promise<OrbofiAutonomous>
Data Types
Personality
interface Personality {
id: string;
name: string;
description: string;
traits: {
[key: string]: number;
};
background: string;
capabilities: string[];
limitations: string[];
}
AutonomousOptions
interface AutonomousOptions {
goal: string;
steps?: number;
constraints?: string[];
outputFormat?: 'text' | 'json';
}
Best Practices
-
Error Handling
try {
const personality = await agent.fetchOrbofiPersonality(name);
} catch (error) {
if (error.message.includes('not found')) {
// Handle personality not found
} else if (error.message.includes('rate limit')) {
// Handle rate limiting
}
}
-
Personality Validation
function isValidPersonality(personality) {
return personality &&
personality.description &&
personality.name;
}
-
Response Processing
// Process chat responses
const response = await chat.sendMessage('Tell me about yourself');
const cleanResponse = response
.replace(/^\n+/, '') // Remove leading newlines
.replace(/\n+$/, ''); // Remove trailing newlines
Common Issues
-
Personality Not Found
- Check spelling and try alternative names
- Some personalities may not be in the database
-
API Rate Limiting
- Implement exponential backoff for retries
- Cache personality data when possible
-
Response Quality
- Be specific with prompts for better responses
- Use the autonomous mode for structured outputs
Example Personalities
-
Historical Figures
- Albert Einstein
- Cleopatra
- Leonardo da Vinci
-
Fictional Characters
- Sherlock Holmes
- Wonder Woman
- Harry Potter
-
Tech Personalities
- Satoshi Nakamoto
- Steve Jobs
- Ada Lovelace