Modular agent orchestrator for reasoning pipelines
Project description
OrKa-Reasoning
AI Orchestration with 100x Faster Vector Search - OrKa transforms your AI workflows with YAML-driven agent orchestration, intelligent memory management, and lightning-fast semantic search powered by RedisStack HNSW indexing.
๐ What's New in V0.7.0
- ๐ 100x Faster Vector Search - RedisStack HNSW indexing now default across all components
- โก Sub-millisecond Search Latency - O(log n) complexity for massive datasets
- ๐๏ธ Unified Architecture - All components now use RedisStack with intelligent fallback
- ๐ฅ๏ธ Professional CLI Dashboard - Real-time performance monitoring and metrics
- ๐ง Zero-Breaking Migration - Complete backward compatibility maintained
โก 2-Minute Quickstart
Get OrKa running with enterprise-grade performance in 2 minutes:
Prerequisites: Ensure Docker is installed and running on your system.
# 1. Install OrKa with all dependencies
pip install orka-reasoning fastapi uvicorn kafka-python
# 2. Set your OpenAI key
export OPENAI_API_KEY=your-key-here
# 3. Start OrKa (automatically includes RedisStack + 100x faster vector search)
# For LOCAL development:
python -m orka.orka_start
# For PRODUCTION with Kafka streaming:
python -m orka.start_kafka
In a separate terminal:
# 4. Create a simple workflow
cat > quickstart.yml << EOF
orchestrator:
id: intelligent-qa
strategy: sequential
agents: [classifier, memory_search, web_search, answer_builder, memory_store]
agents:
- id: classifier
type: openai-classification
prompt: "Classify this query type"
options: [factual_question, how_to_guide, current_events, opinion]
- id: memory_search
type: memory-reader
namespace: knowledge_base
params:
limit: 5
enable_context_search: true
similarity_threshold: 0.8
prompt: "Find relevant information about: {{ input }}"
- id: web_search
type: duckduckgo
prompt: "{{ input }}"
- id: answer_builder
type: openai-answer
prompt: |
Query: {{ input }}
Type: {{ previous_outputs.classifier }}
Memory: {{ previous_outputs.memory_search }}
Web Results: {{ previous_outputs.web_search }}
Build a comprehensive answer combining memory and web results.
- id: memory_store
type: memory-writer
namespace: knowledge_base
params:
vector: true
metadata:
query_type: "{{ previous_outputs.classifier }}"
has_web_results: "{{ previous_outputs.web_search | length > 0 }}"
confidence: "high"
prompt: |
Query: {{ input }}
Answer: {{ previous_outputs.answer_builder }}
Sources: Web + Memory
EOF
# 5. Run your intelligent AI workflow
python -m orka.orka_cli ./quickstart.yml "What are the latest developments in quantum computing?"
# 6. Monitor performance (in another terminal)
python -m orka.orka_cli memory watch
# 7. Optional: Run OrKa UI for visual workflow monitoring
docker pull marcosomma/orka-ui:latest
docker run -it -p 80:80 --name orka-ui marcosomma/orka-ui:latest
# Then open http://localhost in your browser
This creates an intelligent Q&A system that:
- Classifies your query type
- Searches existing knowledge with 100x faster vector search
- Gets fresh information from the web
- Combines both sources into a comprehensive answer
- Stores the interaction for future reference
Performance Comparison
| Setup | Vector Search | Typical Use Case | Performance |
|---|---|---|---|
| RedisStack | โ HNSW Indexing | Production AI, semantic search | 100x faster |
| Basic Redis | โ Text only | Development, simple workflows | Standard |
๐ง Hands-On: Build Your First AI Memory System
Let's build a conversational AI that remembers and learns from interactions:
Step 1: Create the Workflow
# conversational-ai.yml
orchestrator:
id: conversational-ai
strategy: sequential
memory_config:
decay:
enabled: true
default_short_term_hours: 2 # Conversations fade after 2 hours
default_long_term_hours: 168 # Important info lasts 1 week
agents:
- conversation_context
- interaction_classifier
- response_generator
- memory_storage
agents:
# Retrieve relevant conversation history
- id: conversation_context
type: memory-reader
namespace: user_conversations
params:
limit: 5
enable_context_search: true
context_weight: 0.4
temporal_weight: 0.3
enable_temporal_ranking: true
prompt: "Find relevant conversation history for: {{ input }}"
# Understand the interaction type
- id: interaction_classifier
type: openai-classification
prompt: |
Based on history: {{ previous_outputs.conversation_context }}
Current input: {{ input }}
Classify this interaction:
options: [question, followup, correction, new_topic, feedback]
# Generate contextually aware response
- id: response_generator
type: openai-answer
prompt: |
Conversation history: {{ previous_outputs.conversation_context }}
Interaction type: {{ previous_outputs.interaction_classifier }}
Current input: {{ input }}
Generate a response that acknowledges the conversation history
and maintains continuity.
# Store the interaction with intelligent classification
- id: memory_storage
type: memory-writer
namespace: user_conversations
params:
vector: true # Enable semantic search
metadata:
interaction_type: "{{ previous_outputs.interaction_classifier }}"
has_history: "{{ previous_outputs.conversation_context | length > 0 }}"
response_quality: "pending_feedback"
timestamp: "{{ now() }}"
# memory_type automatically classified based on importance
prompt: |
User: {{ input }}
Type: {{ previous_outputs.interaction_classifier }}
Assistant: {{ previous_outputs.response_generator }}
Step 2: Run and Monitor
# Start the conversation
python -m orka.orka_cli ./conversational-ai.yml "Hello, I'm working on a machine learning project"
# Continue the conversation (it will remember context)
python -m orka.orka_cli ./conversational-ai.yml "What algorithms would you recommend for image classification?"
# Monitor memory performance in real-time
python -m orka.orka_cli memory watch
You'll see a professional dashboard like this:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ OrKa Memory Dashboard - 14:23:45 | Backend: redisstack โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ง Backend: redisstack (HNSW) โก Decay: โ
Enabled โ
โ ๐ Memories: 1,247 ๐ Active: 1,224 โ
โ ๐ HNSW Performance: 1,203 Avg: 2.1ms | Hybrid: 856 โ
โ ๐ง Memory Types: Short: 423 ๐พ Long: 801 | ๐ฅ Recent โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Step 3: Verify Memory Learning
# Check what the AI remembers about you
python -m orka.orka_cli memory stats
# Search specific memories
redis-cli FT.SEARCH orka:mem:idx "@namespace:user_conversations machine learning" LIMIT 0 5
๐ Ready-to-Use Workflow Templates
1. Intelligent Q&A with Web Search
# intelligent-qa.yml
orchestrator:
id: smart-qa
strategy: sequential
agents: [search_needed, router, web_search, answer_with_sources]
agents:
- id: search_needed
type: openai-binary
prompt: "Does this question require recent information? {{ input }}"
- id: router
type: router
params:
decision_key: search_needed
routing_map:
"true": [web_search, answer_with_sources]
"false": [answer_with_sources]
- id: web_search
type: duckduckgo
prompt: "{{ input }}"
- id: answer_with_sources
type: openai-answer
prompt: |
Question: {{ input }}
{% if previous_outputs.web_search %}
Web Results: {{ previous_outputs.web_search }}
{% endif %}
Provide a comprehensive answer with sources.
2. Content Analysis Pipeline
# content-analyzer.yml
orchestrator:
id: content-analysis
strategy: parallel
agents: [fork_analysis, join_results]
agents:
- id: fork_analysis
type: fork
targets:
- [sentiment_analysis]
- [topic_classification]
- [toxicity_check]
- id: sentiment_analysis
type: openai-classification
options: [positive, negative, neutral]
prompt: "Analyze sentiment: {{ input }}"
- id: topic_classification
type: openai-classification
options: [tech, business, science, politics, sports]
prompt: "Classify topic: {{ input }}"
- id: toxicity_check
type: openai-binary
prompt: "Is this content toxic or inappropriate? {{ input }}"
- id: join_results
type: join
prompt: |
Combine analysis results:
Sentiment: {{ previous_outputs.sentiment_analysis }}
Topic: {{ previous_outputs.topic_classification }}
Safe: {{ previous_outputs.toxicity_check }}
3. Knowledge Base Builder
# knowledge-builder.yml
orchestrator:
id: knowledge-builder
strategy: sequential
memory_config:
decay:
enabled: true
default_long_term_hours: 720 # Keep knowledge for 30 days
agents: [fact_checker, knowledge_storer, knowledge_retriever]
agents:
- id: fact_checker
type: openai-answer
prompt: |
Verify this information and rate confidence (1-10):
{{ input }}
- id: knowledge_storer
type: memory-writer
namespace: knowledge_base
params:
memory_type: long_term
vector: true
metadata:
confidence: "{{ previous_outputs.fact_checker.confidence | default('unknown') }}"
verified: "{{ previous_outputs.fact_checker.verified | default(false) }}"
domain: "{{ previous_outputs.fact_checker.domain | default('general') }}"
prompt: |
Fact: {{ input }}
Verification: {{ previous_outputs.fact_checker }}
- id: knowledge_retriever
type: memory-reader
namespace: knowledge_base
params:
limit: 10
similarity_threshold: 0.8
prompt: "Find related knowledge: {{ input }}"
๐ฏ Agent Quick Reference
Memory Agents (Powered by RedisStack HNSW)
# Read memories with 100x faster search
- id: memory_search
type: memory-reader
namespace: my_namespace
params:
limit: 10 # Max results
enable_context_search: true # Use conversation context
similarity_threshold: 0.8 # Relevance threshold
enable_temporal_ranking: true # Boost recent memories
prompt: "Search for: {{ input }}"
# Store memories with intelligent decay
- id: memory_store
type: memory-writer
namespace: my_namespace
params:
vector: true # Enable semantic search
# memory_type: auto-classified # short_term or long_term
metadata:
source: "user_input"
confidence: "high"
timestamp: "{{ now() }}"
prompt: "Store: {{ input }}"
LLM Agents
# Binary classification
- id: yes_no_classifier
type: openai-binary
prompt: "Is this a question? {{ input }}"
# Multi-class classification
- id: topic_classifier
type: openai-classification
options: [tech, science, business, other]
prompt: "Classify: {{ input }}"
# Answer generation
- id: answer_builder
type: openai-answer
prompt: |
Context: {{ previous_outputs.context }}
Question: {{ input }}
Generate a detailed answer.
Routing & Control Flow
# Dynamic routing
- id: content_router
type: router
params:
decision_key: content_type
routing_map:
"question": [search_agent, answer_agent]
"statement": [fact_checker]
# Parallel processing
- id: parallel_validator
type: fork
targets:
- [sentiment_check]
- [toxicity_check]
- [fact_validation]
# Wait for parallel completion
- id: combine_results
type: join
prompt: "Combine all validation results"
๐ฅ๏ธ CLI Commands You'll Use Daily
# Real-time memory monitoring with RedisStack metrics
orka memory watch --interval 3
# Check memory statistics and performance
orka memory stats
# Clean up expired memories (with HNSW index optimization)
orka memory cleanup --dry-run
# View configuration and backend status
orka memory configure
# Run workflows
orka run ./my-workflow.yml "Your input here"
# Check system health
orka system status
๐ Production Deployment
Docker Compose Setup
# docker-compose.yml
version: '3.8'
services:
redis-stack:
image: redis/redis-stack:latest
ports:
- "6379:6379"
volumes:
- redis_data:/data
environment:
- REDIS_ARGS=--save 60 1000
orka:
build: .
ports:
- "8000:8000"
environment:
- REDIS_URL=redis://redis-stack:6379/0
- ORKA_MEMORY_BACKEND=redisstack
- OPENAI_API_KEY=${OPENAI_API_KEY}
depends_on:
- redis-stack
volumes:
redis_data:
Environment Variables
# Core settings
export OPENAI_API_KEY=your-key-here
export ORKA_MEMORY_BACKEND=redisstack
export REDIS_URL=redis://localhost:6379/0
# Performance tuning
export ORKA_MAX_CONCURRENT_REQUESTS=100
export ORKA_TIMEOUT_SECONDS=300
# Memory management
export ORKA_MEMORY_DECAY_ENABLED=true
export ORKA_DEFAULT_SHORT_TERM_HOURS=2
export ORKA_DEFAULT_LONG_TERM_HOURS=168
๐ง Migration from Basic Redis
Upgrade to RedisStack for 100x performance improvement:
# 1. Analyze your current memories
python scripts/migrate_to_redisstack.py --dry-run
# 2. Backup existing data
redis-cli BGSAVE
# 3. Start RedisStack
docker run -d -p 6379:6379 --name orka-redis redis/redis-stack:latest
# 4. Migrate your memories
python scripts/migrate_to_redisstack.py --migrate
# 5. Validate migration
python scripts/migrate_to_redisstack.py --validate
# 6. Update your applications (no code changes needed!)
export ORKA_MEMORY_BACKEND=redisstack
๐ Troubleshooting
Common Issues & Quick Fixes
| Issue | Quick Fix |
|---|---|
"unknown command 'FT.CREATE'" |
You're using basic Redis. Install RedisStack: docker run -d -p 6379:6379 redis/redis-stack:latest |
"Cannot connect to Redis" |
Check Redis is running: redis-cli ping |
| Memory search returns no results | Check vector indexing: redis-cli FT._LIST |
| Slow performance | Verify RedisStack HNSW: orka memory configure |
| Out of memory errors | Run cleanup: orka memory cleanup |
Performance Optimization
# Check current performance
orka memory watch
# Optimize HNSW index
redis-cli FT.CONFIG SET FORK_GC_CLEAN_THRESHOLD 100
# Monitor Redis memory usage
redis-cli INFO memory
๐ Performance Benchmarks
| Metric | Basic Redis | RedisStack HNSW | Improvement |
|---|---|---|---|
| Vector Search | 50-200ms | 0.5-5ms | 100x faster |
| Memory Usage | 100% baseline | 40% | 60% reduction |
| Throughput | 1,000/sec | 50,000/sec | 50x higher |
| Concurrent Searches | 10-50 | 1,000+ | 20x more |
๐ Learn More
- ๐ฅ Video Tutorial - 5-minute OrKa overview
- ๐ Full Documentation - Complete API reference
- ๐ฌ Community Discord - Get help and share workflows
- ๐ GitHub Issues - Report bugs and request features
๐ค Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines.
๐ License
Apache 2.0 License. See LICENSE for details.
Ready to supercharge your AI workflows?
pip install orka-reasoning && docker run -d -p 6379:6379 redis/redis-stack:latest
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file orka_reasoning-0.7.1.tar.gz.
File metadata
- Download URL: orka_reasoning-0.7.1.tar.gz
- Upload date:
- Size: 316.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bccbe22252478892823bf2615cc0fbefc77be572dda3e6152b9b58ce8fff02f
|
|
| MD5 |
33515b35634e68ac971e83d8caaceb8a
|
|
| BLAKE2b-256 |
739b83ba5506d640cf38c80b1cba6572cae0c25d759612e9c7f238adee701242
|
File details
Details for the file orka_reasoning-0.7.1-py3-none-any.whl.
File metadata
- Download URL: orka_reasoning-0.7.1-py3-none-any.whl
- Upload date:
- Size: 254.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e1087d435a28a2de54dafff7afe2521571402f86f60d8bef51e20fa51f577c0
|
|
| MD5 |
317be17c284e712ab547115fabd39b79
|
|
| BLAKE2b-256 |
31387c060bab16afe75d61aa7e5869a35d60293f5484a31b9fc2b2cd8e4211c5
|