Letta 0.14.0 is out!
This release brings major improvements to parallel tool calling, archival memory management, and a fully updated v1.0 SDK architecture.
See it on Docker: letta/letta - Docker Image
Major Features
SDK v1.0
The new v1.0 SDK is now supported and recommended for all users.
What’s Different
- Property naming now uses snake_case (llm_config instead of llmConfig)
- Method renames: update() instead of modify(), stream() instead of createStream()
- List method pagination: returns page objects with .items
- Tool calls: changed from single object → array for parallel tools
- Archive management: new APIs for creating and managing shared archival memory
Examples
// Before (v0.x)
const agent = await client.agents.modify(agentId, {
llmConfig: { temperature: 0.7 }
});
// After (v1.0)
const agent = await client.agents.update(agentId, {
llm_config: { temperature: 0.7 }
});
Migration Required:
Users upgrading to 0.14.0 should migrate to the v1.0 SDK to avoid issues when legacy routes are deprecated.
Migration Guide: SDK v1.0 migration guide | Letta Docs
Parallel Tool Calling
Full support for parallel tool calls across OpenAI and Gemini.
- OpenAI: streaming + non-streaming parallel tool calls
- Gemini: streaming + non-streaming parallel tool calls
Multiple tools now execute simultaneously with proper tool-call ID tracking.
Webhooks for Step Completions
Receive real-time notifications whenever agent steps complete.
Configuration
export STEP_COMPLETE_WEBHOOK="https://your-app.com/api/webhooks/step-complete"
export STEP_COMPLETE_KEY="your-secret-key"
Use Cases
- Trigger downstream pipelines on completion
- Log agent activity
- Update app state in real time
- Notify users
Behavior
- Fires on success, error, or cancellation
- Failures don’t block step completion
- Includes Authorization: Bearer when configured
Documentation coming soon.
Archival Memory Enhancements
Add passages directly to archives without going through an agent.
TypeScript
import Letta from '@letta-ai/letta-client';
const client = new Letta({ apiKey: 'My API Key' });
const passage = await client.archives.passages.create('archive-123e4567', {
text: 'Important project context that all agents should know',
tags: ['project-alpha', 'requirements'],
metadata: { source: 'documentation', date: '2024-11-14' }
});
console.log(passage.id);
Python
from letta import Letta
client = Letta(api_key="My API Key")
passage = client.archives.passages.create(
archive_id="archive-123e4567",
text="Important project context that all agents should know",
tags=["project-alpha", "requirements"],
metadata={"source": "documentation", "date": "2024-11-14"}
)
print(passage.id)
Benefits
- Pre-populate shared knowledge bases
- Add external context into archives
- Build centralized knowledge repositories
Other Improvements
- No chunking during archive insertion (higher retrieval quality)
- Better docstrings for archive operations
Model Configuration Improvements
- Persisted model configurations stored in database
- Provider-specific settings via model_settings
- Improved listing: resolves Model / EmbeddingModel objects reliably
New Message Types
- EventMessage — track system-level events
- SummaryMessage — dedicated type for conversation summaries
Performance Improvements
Streaming Performance
Eliminated O(n²) string growth in streaming code:
- OpenAI: up to 10× faster for long streams
- Anthropic: major memory + CPU improvements
- Gemini: fixed runaway string growth
Query Performance
- Added step_id index → up to 80% faster message queries
- Faster startup: removed redundant Pinecone + SSL initializations
Other
- Bounded async queues for safe high-throughput streaming
- Scheduler uses async_session_factory directly
Agent Features
- Stop reason tracking: last_stop_reason on AgentState + filter by stop reason
- Input field: send_message supports input alongside messages
- Sleeptime agents: use new agent loop when messaged
- Count filters: filter agents by stop reason, etc. in count_agents
Breaking Changes
Deprecated APIs
- EmbeddingConfig removed from archives → use embedding field with model handle
- shared_block_ids removed → use groups and blocks
Bug Fixes
Agents
- Fixed agents-from-templates unable to read attached files
- Fixed sleeptime agents using client-side tools
- Fixed enable_sleeptime initial message sequence
- Fixed parallel tool calling config on create/update
- Fixed “too many runs” error blocking execution
- Fixed stale state issues in background mode
Streaming
- Fixed Responses API parallel tool call IDs
- Fixed step streaming for sleeptime
- Fixed bounded async queue behavior
- Fixed poison-state from bad approvals
Providers
- Fixed Anthropic client f-string formatting
- Fixed empty-content messages
- Fixed tool-use ID errors
- Fixed sanitization for token counter
Performance
- Fixed query latency (proper step_id indexing)
- Fixed embedding dimension padding (pgvector-only)
SDK
- Fixed pagination in v1.0
- Fixed integration tests for renamed methods
- Fixed list endpoint subscripting
Other
- Fixed empty PDF uploads
- Fixed invalid embeddings
- Fixed model settings updates
- Fixed summarizer fallback
- Fixed tool-return character limit overflow
Infrastructure
- Global exception middleware
- Context-aware logging improvements
- Better request logging
- Stack trace dump on segfault