๐๏ธ Perspt: Your Terminal's Window to the AI World ๐ค
"The keyboard hums, the screen aglow,
AI's wisdom, a steady flow.
Will robots take over, it's quite the fright,
Or just provide insights, day and night?
We ponder and chat, with code as our guide,
Is AI our helper or our human pride?"
Perspt (pronounced "perspect," short for Personal Spectrum Pertaining Thoughts) is a high-performance command-line interface (CLI) application that gives you a peek into the mind of Large Language Models (LLMs). Built with Rust for speed and reliability, it allows you to chat with various AI models from multiple providers directly in your terminal using the modern genai crate's unified API.
๐ฏ Why Perspt?
- ๐ Latest Model Support: Built on the modern
genaicrate with support for latest reasoning models like Google's Gemini 2.5 Pro and OpenAI's o1-mini - โก Real-time Streaming: Ultra-responsive streaming responses with proper reasoning chunk handling
- ๐ก๏ธ Rock-solid Reliability: Comprehensive panic recovery and error handling that keeps your terminal safe
- ๐จ Beautiful Interface: Modern terminal UI with markdown rendering and smooth animations
- ๐ง Flexible Configuration: CLI arguments, environment variables, and JSON config files all work seamlessly
โจ Features
- ๐จ Interactive Chat Interface: A colorful and responsive chat interface powered by Ratatui with smooth scrolling and custom markdown rendering.
- โก Advanced Streaming: Real-time streaming of LLM responses with support for reasoning chunks and proper event handling.
- ๐ Latest Provider Support: Built on the modern
genaicrate with support for cutting-edge models:- OpenAI (GPT-4, GPT-4-turbo, GPT-3.5-turbo, GPT-4o, GPT-4o-mini, GPT-4.1, o1-mini, o1-preview, o3-mini, and more)
- Anthropic (Claude-3 Opus, Sonnet, Haiku, Claude-3.5 Sonnet, Claude-3.5 Haiku, and more)
- Google Gemini (Gemini-1.5-pro, Gemini-1.5-flash, Gemini-2.0-flash, Gemini-2.5-Pro, and more)
- Mistral (Mistral-tiny, small, medium, large, Mistral-nemo, Mixtral models, and more)
- Perplexity (Sonar, Sonar-pro, Sonar-reasoning, and more)
- DeepSeek (DeepSeek-chat, DeepSeek-reasoner, and more)
- AWS Bedrock (Amazon Nova models, and more)
- ๐ง Robust CLI Options: Full command-line support for API keys, models, and provider types that actually work.
- ๐ Flexible Authentication: API keys work via CLI arguments, environment variables, or configuration files.
- โ๏ธ Smart Configuration: Intelligent configuration loading with fallbacks and validation.
- ๐ Input Queuing: Type and submit new questions even while the AI is generating a previous response.
- ๐ Enhanced UI Feedback: Visual indicators for processing states and improved responsiveness.
- ๐ Custom Markdown Parser: Built-in markdown parser optimized for terminal rendering with proper streaming buffer management.
- ๐ก๏ธ Bulletproof Error Handling: Comprehensive panic recovery, network resilience, and user-friendly error messages.
- ๐ Extensive Documentation: Comprehensive code documentation and user guides.
๐ Getting Started
Read the perspt book - This illustrated guide walks through the project and explains key Rust concepts
๐ ๏ธ Prerequisites
- Rust: Ensure you have the Rust toolchain installed. Get it from rustup.rs.
- ๐ LLM API Key: For API providers, you'll need an API key from the respective provider:
- OpenAI: Get yours at platform.openai.com (supports o1-mini, o1-preview, o3-mini, GPT-4.1)
- Anthropic: Get yours at console.anthropic.com
- Google Gemini: Get yours at aistudio.google.com (supports Gemini 2.5 Pro)
- Mistral: Get yours at console.mistral.ai
- Perplexity: Get yours at www.perplexity.ai/settings/api
- DeepSeek: Get yours at platform.deepseek.com
๐ฆ Installation
-
Clone the Repository:
-
Build the Project:
Find the executable in the
target/releasedirectory. -
Quick Test (Optional):
# Test with OpenAI (replace with your API key) # Test with Google Gemini (supports latest models) # Test with Anthropic
โ๏ธ Configuration
Perspt can be configured using a config.json file or command-line arguments. Command-line arguments override config file settings.
๐ Config File (config.json)
Create a config.json in the root directory of the project, or specify a custom path using the -c CLI argument.
Example config.json:
Configuration Fields:
providers(Optional): A map of provider profile names to their API base URLs.provider_type: The type of LLM provider to use.- Valid values:
"openai","anthropic","google","mistral","perplexity","deepseek","aws-bedrock"
- Valid values:
default_provider(Optional): The name of the provider profile from theprovidersmap to use by default.default_model: The model name to use (e.g., "gpt-4o-mini", "claude-3-5-sonnet-20241022", "gemini-1.5-flash").api_key: Your API key for the configured provider.
Example configurations for different providers:
OpenAI:
Anthropic:
Google Gemini:
โจ๏ธ Command-Line Arguments
The CLI now has fully working argument support with proper API key handling:
-c <FILE>,--config <FILE>: Path to a custom configuration file.-p <TYPE>,--provider-type <TYPE>: Specify the provider type (openai,anthropic,google,mistral,perplexity,deepseek,aws-bedrock).-k <API_KEY>,--api-key <API_KEY>: Your API key for the LLM provider (works properly now!).-m <MODEL>,--model <MODEL>: The model name (e.g.,gpt-4o-mini,o1-mini,claude-3-5-sonnet-20241022,gemini-2.5-pro).--provider <PROVIDER_PROFILE>: Choose a pre-configured provider profile from yourconfig.json'sprovidersmap.--list-models: List available models for the configured provider.
โ Fixed Issues:
- CLI API keys now properly set environment variables for the genai client
- Model validation works correctly before starting the UI
- Provider type selection is properly handled
- No more "API key only works as environment variable" issues
Run target/release/perspt --help for a full list.
๐ Usage Examples
OpenAI (including latest reasoning models):
# Latest GPT-4o-mini (fast and efficient)
# GPT-4.1 (enhanced capabilities)
# OpenAI o1-mini (reasoning model)
# OpenAI o1-preview (advanced reasoning)
# OpenAI o3-mini (latest reasoning model)
Google Gemini (including latest models):
# Gemini 2.0 Flash (latest fast model)
# Gemini 1.5 Pro (balanced performance)
Anthropic:
Using environment variables:
# Set once, use multiple times
# Now you can skip the --api-key argument
Using a config file:
(Ensure my_config.json is correctly set up with provider_type, api_key, and default_model).
๐ฏ Model Discovery & Validation
Perspt uses the modern genai crate for robust model handling and validation:
# List OpenAI models (including o1-mini, o1-preview, o3-mini, GPT-4.1)
# List Google models (including Gemini 2.5 Pro, 2.0 Flash)
# List Anthropic models
# List Mistral models
# List Perplexity models
# List DeepSeek models
โ Enhanced Model Support:
- Real Model Validation: Models are validated before starting the UI to prevent runtime errors
- Latest Model Support: Built on genai crate which supports cutting-edge models like o1-mini and Gemini 2.5 Pro
- Proper Error Handling: Clear error messages when models don't exist or aren't available
- Reasoning Model Support: Full support for models with reasoning capabilities and special event handling
๐๏ธ Architecture & Technical Features
Built on Modern genai Crate
Perspt is built using the genai crate (v0.3.5), providing:
-
๐ฏ Latest Model Support: Direct support for cutting-edge models including:
- OpenAI's o1-mini, o1-preview, o3-mini, and GPT-4.1 reasoning models
- Google's Gemini 2.5 Pro and Gemini 2.0 Flash
- Latest Claude, Mistral, and other provider models
-
โก Advanced Streaming: Proper handling of streaming events including:
ChatStreamEvent::Start- Response initiationChatStreamEvent::Chunk- Regular content chunksChatStreamEvent::ReasoningChunk- Special reasoning model chunksChatStreamEvent::End- Response completion
-
๐ก๏ธ Robust Error Handling: Comprehensive error management with:
- Network failure recovery
- API authentication validation
- Model compatibility checking
- Graceful panic recovery with terminal restoration
-
๐ง Flexible Configuration: Multiple configuration methods:
- CLI arguments (working properly!)
- Environment variables
- JSON configuration files
- Smart fallbacks and validation
Custom Markdown Parser
Perspt includes a custom-built markdown parser optimized for terminal rendering:
- Stream-optimized: Handles real-time streaming content efficiently
- Terminal-native: Designed specifically for terminal color capabilities
- Lightweight: No external dependencies, built for performance
- Robust: Handles partial and malformed markdown gracefully
- Buffer-managed: Intelligent buffering for smooth rendering during streaming
Key Technical Improvements
- Fixed CLI Arguments: API keys and model selection now work correctly via command line
- Enhanced Streaming: Improved buffering and event handling for smooth response rendering
- Better Authentication: Proper environment variable mapping for different providers
- Responsive UI: Reduced timeouts and improved responsiveness (50ms vs 100ms)
- Custom Markdown Rendering: Built-in parser eliminates external dependencies
- Comprehensive Documentation: Extensive code documentation and user guides
๐๏ธ Key Bindings
Enter: Send your input to the LLM or queue it if the LLM is busy.Esc: Exit the application safely with proper terminal restoration.Ctrl+C/Ctrl+D: Exit the application with graceful cleanup.Up Arrow/Down Arrow: Scroll through chat history smoothly.Page Up/Page Down: Fast scroll through long conversations.
โ UI Improvements:
- Faster response times with 50ms event timeouts
- Better streaming buffer management for smooth markdown rendering with custom parser
- Visual feedback during model processing
- Proper terminal restoration on all exit paths
๐ฅ Recent Major Updates (v0.4.0)
Migration to genai Crate
We've migrated from the allms crate to the modern genai crate (v0.3.5), bringing significant improvements:
๐ฏ Fixed Critical Issues:
- โ CLI Arguments Now Work: API keys, models, and provider types work correctly via command line
- โ Flexible Authentication: API keys work via CLI, environment variables, or config files
- โ Responsive UI: Fixed keystroke waiting issues - UI now responds immediately
- โ Custom Markdown Parser: Built-in markdown parser eliminates external dependencies
๐ New Features:
- Support for latest reasoning models (o1-mini, o1-preview, Gemini 2.5 Pro)
- Enhanced streaming with proper reasoning chunk handling
- Custom markdown parser optimized for terminal rendering
- Comprehensive error handling with terminal restoration
- Model validation before UI startup
- Extensive code documentation and user guides
๐ก๏ธ Reliability Improvements:
- Bulletproof panic handling that restores terminal state
- Network failure recovery
- Better error messages with troubleshooting tips
- Comprehensive logging for debugging
๐จ User Experience:
- Reduced response latency (50ms vs 100ms timeouts)
- Smoother markdown rendering with custom parser
- Better visual feedback during processing
- Improved chat history navigation
๐ง Troubleshooting
Common Issues & Solutions
โ "API key not found" or authentication errors:
# Method 1: Use CLI argument (recommended)
# Method 2: Set environment variable
โ "Model not found" errors:
# List available models first
# Use exact model names from the list
โ Terminal corruption after crash:
# Reset terminal (if needed)
โ Permission denied errors:
# Make sure the binary is executable
# Or use cargo run for development
โ Documentation generation errors:
# If you see "Unrecognized option" errors when generating docs:
# The project includes custom rustdoc styling that's compatible with rustdoc 1.87.0+
โ Getting Help:
- Use
--helpfor full argument list:perspt --help - Check logs with:
RUST_LOG=debug perspt ... - Validate configuration with:
perspt --list-models - Test different providers to isolate issues
Best Practices
-
Always validate your setup first:
-
Use environment variables for security:
-
Start with simple models:
# These are reliable and fast -
Check the logs if issues persist:
RUST_LOG=debug
๐ CI/CD & Releases
This project uses GitHub Actions for comprehensive CI/CD:
๐งช Continuous Integration
- Multi-Platform Testing: Automated testing on Ubuntu, Windows, and macOS
- Code Quality: Automated formatting checks, clippy linting, and security audits
- Documentation: Automated building of both Rust API docs and Sphinx documentation
๐ฆ Automated Releases
- Cross-Platform Binaries: Automatic generation of optimized binaries for:
- Linux (x86_64)
- Windows (x86_64)
- macOS (x86_64 and ARM64)
- Documentation Packaging: Complete documentation bundles included in releases
- Checksum Generation: SHA256 checksums for all release artifacts
๐ Documentation Deployment
- GitHub Pages: Automatic deployment of documentation to GitHub Pages
- Dual Documentation: Both user guides (Sphinx) and API documentation (rustdoc)
- Live Updates: Documentation automatically updates on main branch changes
๐ฏ Getting Pre-built Binaries
Instead of building from source, you can download pre-built binaries from the releases page:
- Navigate to the latest release
- Download the appropriate binary for your platform
- Make it executable:
chmod +x perspt-*(Linux/macOS) - Move to your PATH:
sudo mv perspt-* /usr/local/bin/perspt
๐ Documentation
- Live Documentation: https://eonseed.github.io/perspt/
- User Guide: Comprehensive tutorials and usage examples
- API Documentation: Detailed Rust API documentation
๐ค Contributing
Contributions are welcome! Please open issues or submit pull requests for any bugs, features, or improvements.
Development Workflow
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Ensure CI passes locally:
cargo test && cargo clippy && cargo fmt --check - Submit a pull request
The CI will automatically test your changes on all supported platforms.
๐ License
Perspt is released under the GNU Lesser General Public License v3.0 (LGPL-3.0). See the LICENSE file for details.
โ๏ธ Author
- Vikrant Rathore
- Ronak Rathore
Perspt: Personal Spectrum Pertaining Thoughts โ the human lens through which we explore the enigma of AI and its implications for humanity.