* chore: have letta fire a request after every step
* chore: have letta fire a request after every step
* chore: temporal
* chore: temporal
---------
Co-authored-by: Shubham Naik <shub@memgpt.ai>
DatabaseRegistry.get_async_session_factory() was removed during the sync
DB removal refactor, but scheduler.py still referenced it. This caused
AttributeError failures in all integration and send-message tests.
Fix by importing and using async_session_factory() directly from db module.
* fix: patch hole in the fallback summarizer where we weren't actually truncating
* fix: remove no-op
* chore: comment
* fix: simplify the new fallback
* fix: properly handle images in summarizer payload
* add e2b sandbox template variable to env for now. (may need to pull from secrets to have syncing in future)
* upgrade from info to warning
* apps
* e2b execution time
* Add archival memory import/export utilities
Added two utility scripts for managing agent archival memories:
- export_agent_memories.py: Export all passages from an agent to JSON
- Paginates through all results
- Removes embedding/embedding_config for portability
- Usage: python export_agent_memories.py <agent_id> [--output <file>]
- import_agent_memories.py: Import passages into an agent from JSON
- Batch imports with progress tracking
- Handles optional fields (tags, created_at)
- Includes dry-run mode for preview
- Usage: python import_agent_memories.py <agent_id> <input_file>
Use cases:
- Backup/restore agent memories
- Transfer memories between agents
- Seed new agents with existing knowledge bases
👾 Generated with Letta Code (https://letta.com)
Co-Authored-By: Letta <noreply@letta.com>
* docs: migrate documentation to cloud-first approach
Update all documentation to use Letta Cloud as the default deployment path:
- Remove base_url parameter from cloud examples (uses api.letta.com by default)
- Add token authentication to all SDK examples
- Change localhost URLs to https://api.letta.com in all examples
- Remove embedding parameter from cloud examples (managed automatically)
- Add comprehensive embedding configuration section to self-hosting guide
- Add warnings about required embedding configuration for self-hosted deployments
- Update curl examples to include Authorization headers
- Link to https://app.letta.com/api-keys for token retrieval
Files updated:
- Agent guides (11 files)
- Model configuration pages (5 files)
- Evals documentation (6 files)
- ADE guides (2 files)
- Self-hosting guide
- Voice integration guide
- README
- Quickstart
* docs: fix embedding parameter issues in cloud examples
- Remove leftover embedding parameter from TypeScript example in agents/overview.mdx
- Make self-hosting comment more explicit in README by showing actual embedding parameter syntax
* docs: fix model configuration pages to be self-hosting focused
Model configuration pages (OpenAI, Anthropic, Azure, xAI, Ollama) are about
configuring providers on self-hosted servers, not Letta Cloud. Updated all
SDK examples to:
- Use base_url="http://localhost:8283" instead of cloud token auth
- Include embedding parameter with clear comment
- Use consistent "An embedding model is required for self-hosted" wording
- Add Note directing cloud users to quickstart guide
This clarifies that provider configuration is a self-hosting concern, while
Letta Cloud manages providers automatically.
* fix: remove duplicate Authorization headers in human-in-the-loop docs
* chore: remove utility scripts that shouldn't be in repo
---------
Co-authored-by: Letta <noreply@letta.com>
Added warning message to clarify that BYOK is only available for enterprise customers.
👾 Generated with [Letta Code](https://letta.com)
Co-authored-by: Letta <noreply@letta.com>
Removes all references to pip installation (pip install letta) and the
letta server command from documentation, as Docker is now the only
supported installation method for self-hosting Letta.
Changes:
- Removed pip installation accordion from selfhosting/overview.mdx
- Updated FAQ to indicate Docker is required
- Removed CLI/pip sections from all model provider docs (13 files):
* OpenAI, Anthropic, Groq, Google AI, DeepSeek, xAI, Together.AI
* AWS Bedrock, Azure OpenAI, Google Vertex AI
* Ollama, LM Studio, vLLM, OpenAI Proxy
- Removed "letta server" tabs from agent tool docs (web_search,
fetch_webpage, run_code)
- Updated evals getting-started.mdx to use Docker in error messages
All references now point to Docker installation with links to the
self-hosting guide. SDK installation (pip install letta-client) remains
intact for developers using the Letta API.
Fixes feedback from user report at docs.letta.com/prompts
🐾 Generated with [Letta Code](https://letta.com)
Co-authored-by: Letta <noreply@letta.com>
* fix: patch sse streaming errors
* fix: don't re-raise, but log explicitly with sentry
* chore: cleanup comments
* fix: revert change from #5907, also make sure to write out a [DONE] to close the stream
* Fix agent loop continuing after cancellation in letta_agent_v3
Bug: When a run is cancelled, _check_run_cancellation() sets
self.should_continue=False and returns early from _step(), but the outer
for loop (line 245) continues to the next iteration, executing subsequent
steps even though cancellation was requested.
Symptom: User hits cancel during step 1, backend marks run as cancelled,
but agent continues executing steps 2, 3, etc.
Root cause: After the 'async for chunk in response' loop completes (line 255),
there was no check of self.should_continue before continuing to the next
iteration of the outer step loop.
Fix: Added 'if not self.should_continue: break' check after the inner loop
to exit the outer step loop when cancellation is detected. This makes v3
consistent with v2 which already had this check (line 306-307).
🐾 Generated with [Letta Code](https://letta.com)
Co-authored-by: Letta <noreply@letta.com>
* add integration tests
* passing tests
* fix: minor patches
* undo
---------
Co-authored-by: cpacker <packercharles@gmail.com>
Co-authored-by: Letta <noreply@letta.com>
* Fix agent loop continuing after cancellation in letta_agent_v3
Bug: When a run is cancelled, _check_run_cancellation() sets
self.should_continue=False and returns early from _step(), but the outer
for loop (line 245) continues to the next iteration, executing subsequent
steps even though cancellation was requested.
Symptom: User hits cancel during step 1, backend marks run as cancelled,
but agent continues executing steps 2, 3, etc.
Root cause: After the 'async for chunk in response' loop completes (line 255),
there was no check of self.should_continue before continuing to the next
iteration of the outer step loop.
Fix: Added 'if not self.should_continue: break' check after the inner loop
to exit the outer step loop when cancellation is detected. This makes v3
consistent with v2 which already had this check (line 306-307).
🐾 Generated with [Letta Code](https://letta.com)
Co-authored-by: Letta <noreply@letta.com>
* add integration tests
* fix: misc fixes required to get cancellations to work on letta code localhost
---------
Co-authored-by: Letta <noreply@letta.com>
Co-authored-by: Sarah Wooders <sarahwooders@gmail.com>
Updates multimodal examples to place text content before image content,
which prevents request failures.
Changes:
- Reordered content array in all SDK examples to have text first, then image
- Fixed TypeScript mediaType casing (media_type -> mediaType)
- Applied to both URL-based and base64-encoded image examples
🐾 Generated with [Letta Code](https://letta.com)
Co-authored-by: Letta <noreply@letta.com>
* chore: migrate integration test send message to v1 sdk
* new folder
* set up new workflows for integration test
* remove file
* update stainless workflow
* fix import err
* add letta-client version logging
* fix: SDK cache miss should fall back to PyPI instead of failing
When the Stainless SDK cache is not available, the workflow should
fall back to installing the published SDK from PyPI rather than
failing the CI build. The workflow already has this fallback logic
in the "Install Stainless SDK" step, but the "Check SDK cache"
step was failing before it could reach that point.
This change converts the hard failure (exit 1) to a warning message,
allowing the workflow to continue and use the PyPI fallback.
Co-Authored-By: Claude <noreply@anthropic.com>
* force upgrade
* remove frozen
* install before running
* add no sync
* use upgrade instead of upgrade package
* update
* fix llm config
* fix
* update
* update path
* update workflow
* see installed version
* add fallback
* update
* fix mini
* lettaping
* fix: handle o1 token streaming and LettaPing step_id validation
- Skip LettaPing messages in step_id validation (they don't have step_id)
- Move o1/o3/o4 token streaming check before general assertion in assert_tool_call_response
- o1 reasoning models omit AssistantMessage in token streaming mode (6 messages instead of 7)
---------
Co-authored-by: Kian Jones <kian@letta.com>
Co-authored-by: Claude <noreply@anthropic.com>