Commit Graph

255 Commits

Author SHA1 Message Date
Kian Jones
15cede7281 fix: prevent db connection pool exhaustion in multi-agent tool executor (#6619)
Problem: When executing a tool that sends messages to many agents matching
tags, the code used asyncio.gather to process all agents concurrently. Each
agent processing creates database operations (run creation, message storage),
leading to N concurrent database connections.

Example: If 100 agents match the tags, 100 simultaneous database connections
are created, exhausting the connection pool and causing errors.

Root cause: asyncio.gather(*[_process_agent(...) for agent in agents])
creates all coroutines and runs them concurrently, each opening a DB session.

Solution: Process agents sequentially instead of concurrently. While this is
slower, it prevents database connection pool exhaustion. The operation is
still async, so it won't block the event loop.

Changes:
- apps/core/letta/services/tool_executor/multi_agent_tool_executor.py:
  - Replaced asyncio.gather with sequential for loop
  - Added explanatory comment about why sequential processing is needed

Impact: With 100 matching agents:
- Before: 100 concurrent DB connections (pool exhaustion)
- After: 1 DB connection at a time (no pool exhaustion)

Note: This follows the same pattern as PR #6617 which fixed a similar issue
in file attachment operations.
2025-12-15 12:02:34 -08:00
Kian Jones
fbd89c9360 fix: replace all 'PRODUCTION' references with 'prod' for consistency (#6627)
* fix: replace all 'PRODUCTION' references with 'prod' for consistency

Problem: Codebase had 11 references to 'PRODUCTION' (uppercase) that should
use 'prod' (lowercase) for consistency with the deployment workflows and
environment normalization.

Changes across 8 files:

1. Source files (using settings.environment):
   - letta/functions/function_sets/multi_agent.py
   - letta/services/tool_manager.py
   - letta/services/tool_executor/multi_agent_tool_executor.py
   - letta/services/helpers/agent_manager_helper.py
   All checks changed from: settings.environment == "PRODUCTION"
   To: settings.environment == "prod"

2. OTEL resource configuration:
   - letta/otel/resource.py
     - Updated _normalize_environment_tag() to handle 'prod' directly
     - Removed 'PRODUCTION' -> 'prod' mapping (no longer needed)
     - Updated device.id check from _env != "PRODUCTION" to _env != "prod"

3. Test files:
   - tests/managers/conftest.py
     - Fixture parameter changed from "PRODUCTION" to "prod"
   - tests/managers/test_agent_manager.py (3 occurrences)
   - tests/managers/test_tool_manager.py (2 occurrences)
   All test checks changed to use "prod"

Result: Complete consistency across the codebase:
- All environment checks use "prod" instead of "PRODUCTION"
- Normalization function simplified (no special case for PRODUCTION)
- Tests use correct "prod" value
- Matches deployment workflow configuration from PR #6626

This completes the environment naming standardization effort.

* fix: update settings.py environment description to use 'prod' instead of 'PRODUCTION'

The field description still referenced PRODUCTION as an example value.
Updated to use lowercase 'prod' for consistency with actual usage.

Before: "Application environment (PRODUCTION, DEV, CANARY, etc. - normalized to lowercase for OTEL tags)"
After: "Application environment (prod, dev, canary, etc. - lowercase values used for OTEL tags)"
2025-12-15 12:02:34 -08:00
Cameron
a56c6571d2 fix: update fetch_webpage docstring to reflect actual implementation (#6503)
The docstring incorrectly stated that fetch_webpage uses Jina AI reader.
Updated to accurately describe the actual implementation which uses:
1. Exa API (if EXA_API_KEY is available)
2. Trafilatura (fallback)
3. Readability + html2text (final fallback)

🐾 Generated with [Letta Code](https://letta.com)

Co-authored-by: Letta <noreply@letta.com>
2025-12-15 12:02:34 -08:00
Sarah Wooders
ceadacd30e feat: support programmatic tool execution (cloud only) (#6441) 2025-12-15 12:02:19 -08:00
Charles Packer
d3f5307789 fix(core): patch bug in memory tool with leading '/' [LET-6266] (#6448)
fix(core): patch bug in memory tool with leading '/'
2025-12-15 12:02:19 -08:00
Sarah Wooders
c4d5c380d6 feat: pass in LETTA_TOOL_ID, LETTA_AGENT_ID, LETTA_PROJECT_ID into tool env (#6439) 2025-12-15 12:02:18 -08:00
Sarah Wooders
e349ba3bdd feat: support programmatic tool calling for custom tools [LET-6316] (#6369) 2025-11-26 14:39:40 -08:00
cthomas
1d55a0f4c5 fix: use new agent loop in multi agent test (#6384)
* use new agent loop and cleanup stale agents

* fix: make multi agent use new agent loop

* remove migration
2025-11-26 14:39:39 -08:00
Shubham Naik
a3dfdb1981 feat: e2e test for injected keys (#6196)
* feat: e2e test for injected keys

* chore: update errors

* chore: always log

* chore: log step orchestrator

* chore: add endpoint

---------

Co-authored-by: Shubham Naik <shub@memgpt.ai>
2025-11-24 19:10:27 -08:00
jnjpng
442b916fa9 feat: connect generated letta api key with modal function wrapper (#6329)
base

Co-authored-by: Letta Bot <noreply@letta.com>
2025-11-24 19:10:27 -08:00
Ari Webb
60a8292e0f fix: hotfix conversation_search recursion (#6308)
hotfix conversation_search recursion

Co-authored-by: Ari Webb <ari@letta.com>
2025-11-24 19:10:27 -08:00
Sarah Wooders
ce3add4f55 feat: migrate integration tests to use model_settings (#6125)
* migration integration tests to use model_settings

* updated configs

* update v2 tests

* revert files

* add some configs and fix tests

* fix conversation_search

---------

Co-authored-by: Ari Webb <ari@letta.com>
2025-11-24 19:09:33 -08:00
Ari Webb
ec953d27c0 fix: double escape leads to exponential growth in backslash character [LET-6016] (#6087) 2025-11-24 19:09:33 -08:00
Shubham Naik
acbbccd28a feat: have core ask cloud for any relavent api credentials to allow a… [LET-6179] (#6172)
feat: have core ask cloud for any relavent api credentials to allow an agent to perform letta tasks

Co-authored-by: Shubham Naik <shub@memgpt.ai>
2025-11-24 19:09:32 -08:00
Sarah Wooders
5730f69ecf feat: modal tool execution - NO FEATURE FLAGS USES MODAL [LET-4357] (#5120)
* initial commit

* add delay to deploy

* fix tests

* add tests

* passing tests

* cleanup

* and use modal

* working on modal

* gate on tool metadata

* agent state

* cleanup

---------

Co-authored-by: Letta Bot <noreply@letta.com>
2025-11-13 15:36:56 -08:00
Kevin Lin
f65eaa10c1 feat: Remove view from anthropic tool (#5832)
remove view from anthropic tool
2025-11-13 15:36:14 -08:00
Ari Webb
66ccc1d4df chore: silence exa search failed [LET-5952] (#5815)
silence exa search failed

Co-authored-by: Ari Webb <ari@letta.com>
2025-11-13 15:36:08 -08:00
Kevin Lin
4bb54f471c feat: memory apply patch [LET-5548] (#5475) 2025-10-24 15:13:15 -07:00
Kevin Lin
35b5383724 feat: match line number rendering to Anthropic / OAI defaults (#5492) 2025-10-24 15:13:15 -07:00
Ari Webb
3b399f999f chore: silence error [LET-5761] (#5610)
silence error

Co-authored-by: Ari Webb <ari@letta.com>
2025-10-24 15:13:15 -07:00
Ari Webb
967cc3decf move exceptions out of folders and sources [LET-4631] (#5444) 2025-10-24 15:12:11 -07:00
Caren Thomas
a5354d7534 chore: bump version 0.11.8 2025-10-07 18:31:26 -07:00
Sarah Wooders
e07a589796 chore: rm composio (#5151) 2025-10-07 17:50:49 -07:00
Sarah Wooders
6016ac0f33 chore: undo fetch_webpage rename (#5132) 2025-10-07 17:50:49 -07:00
Charles Packer
09b173668a feat(core): rename fetch_webpage to web_fetch (#5110) 2025-10-07 17:50:48 -07:00
Matthew Zhou
29515e9a7d feat: Make exa get_contents async [LET-4574] (#5068)
Make exa async
2025-10-07 17:50:48 -07:00
Matthew Zhou
7390edeb00 feat: Add exa for fetch webpage (#5066)
Add exa for fetch webpage
2025-10-07 17:50:48 -07:00
Kevin Lin
09d9c3ffd4 feat: anthropic tools for claude sonnet 4.5 (#4988)
* add anthropic memory tools

* memory view working

* update memory examples

* tools

* feat: some changes (#5003)

* feat: added the ability to modify and add descriptions on creation

* fix: kill dead code & write into core_tool_executor instead

* fix: use block_manager not agent_manager where possible, also turn the return string errors into raising exceptions

* fix: cleanup, get rid of more return string errors replaced with valueerror, also drop deadcode

---------

Co-authored-by: Charles Packer <packercharles@gmail.com>
2025-10-07 17:50:47 -07:00
Sarah Wooders
354205f581 feat: create new runs table [LET-4467] (#4841) 2025-10-07 17:50:47 -07:00
Charles Packer
809956d1aa fix(core): patch bug in the broadcast multi-agent tool where we were not properly awating returns [LET-4484] (#4866)
fix(core): patch bug in the broadcast multi-agent tool where we were not await-ing the responses to return them properly
2025-10-07 17:50:45 -07:00
Kian Jones
b8e9a80d93 merge this (#4759)
* wait I forgot to comit locally

* cp the entire core directory and then rm the .git subdir
2025-09-17 15:47:40 -07:00
Matthew Zhou
3c2911e9ae feat: Remove jinja2 (#2971)
Co-authored-by: Sarah Wooders <sarahwooders@gmail.com>
2025-09-17 10:00:49 -07:00
cthomas
edb6c5e14e feat: replace tool_exec_environtment_variables with secrets (#2953) 2025-09-16 13:22:48 -07:00
Matthew Zhou
981d286fbe feat: Remove Turbopuffer mentions from semantic_search_files (#2843) 2025-09-11 14:54:14 -07:00
cthomas
636fb52d87 feat: make multi-agent tools use new agent loop (#2826) 2025-09-10 22:30:12 -07:00
cthomas
2d971cdcf0 feat: hold reference to asyncio tasks in memory (#2823) 2025-09-10 17:08:07 -07:00
Kian Jones
22f70ca07c chore: officially migrate to submodule (#4502)
* remove apps/core and apps/fern

* fix precommit

* add submodule updates in workflows

* submodule

* remove core tests

* update core revision

* Add submodules: true to all GitHub workflows

- Ensure all workflows can access git submodules
- Add submodules support to deployment, test, and CI workflows
- Fix YAML syntax issues in workflow files

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* remove core-lint

* upgrade core with latest main of oss

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-09 12:45:53 -07:00
Matthew Zhou
516f2963e0 feat: Add turbopuffer embedder by default [LET-4253] (#4476)
* Adapt to turbopuffer embedder

* Make turbopuffer search more efficient over all source ids

* Combine turbopuffer and pinecone hybrid

* Fix test sources
2025-09-08 18:46:41 -07:00
Matthew Zhou
3a551f4bb7 feat: Add turbopuffer embedder by default [LET-4253] (#4476)
* Adapt to turbopuffer embedder

* Make turbopuffer search more efficient over all source ids

* Combine turbopuffer and pinecone hybrid

* Fix test sources
2025-09-08 18:46:41 -07:00
Charles Packer
388dd46ffc feat: various performance patches for gpt-5 [LET-4157] (#4381)
* feat: increase the verbosity of the heartbeat kwarg

* chore: strip docstrings out from the file in which they are not parsed (duplicates inside base.py

* feat: add examples to the docstrings for memory_replace and memory_insert

* feat: add more examples
2025-09-06 11:23:13 -07:00
Charles Packer
9bbe7ecb3e feat: various performance patches for gpt-5 [LET-4157] (#4381)
* feat: increase the verbosity of the heartbeat kwarg

* chore: strip docstrings out from the file in which they are not parsed (duplicates inside base.py

* feat: add examples to the docstrings for memory_replace and memory_insert

* feat: add more examples
2025-09-06 11:23:13 -07:00
Matthew Zhou
2ef47d8002 feat: Add search messages endpoint [LET-4144] (#4434)
* Add search messages endpoint

* Run fern autogen and fix tests
2025-09-05 14:28:27 -07:00
Matthew Zhou
2e3cabc080 feat: Add search messages endpoint [LET-4144] (#4434)
* Add search messages endpoint

* Run fern autogen and fix tests
2025-09-05 14:28:27 -07:00
Matthew Zhou
def95050e2 feat: Add ranks to archival memory search [LET-4193] (#4426)
* Add ranks to archival memory search

* Fix test managers

* Fix archival memory test
2025-09-04 13:35:54 -07:00
Matthew Zhou
b8d403c962 feat: Add ranks to archival memory search [LET-4193] (#4426)
* Add ranks to archival memory search

* Fix test managers

* Fix archival memory test
2025-09-04 13:35:54 -07:00
Matthew Zhou
d924cc005b fix: change to pure rank-based RRF for relevance ordering (#4411)
* Fix RRF

* Fix turbopuffer tests
2025-09-03 17:33:19 -07:00
Matthew Zhou
25d37e2ac9 fix: change to pure rank-based RRF for relevance ordering (#4411)
* Fix RRF

* Fix turbopuffer tests
2025-09-03 17:33:19 -07:00
Matthew Zhou
2af6049d6f feat: Change web search to exa [LET-4190] (#4401)
* Change web search to exa

* Fix tf/justfile

* add exa api key for integration test

* Mock exa

---------

Co-authored-by: Kian Jones <kian@letta.com>
2025-09-03 15:52:10 -07:00
Matthew Zhou
3126598720 feat: Change web search to exa [LET-4190] (#4401)
* Change web search to exa

* Fix tf/justfile

* add exa api key for integration test

* Mock exa

---------

Co-authored-by: Kian Jones <kian@letta.com>
2025-09-03 15:52:10 -07:00
Matthew Zhou
129dd97902 feat: Add fetch webpage tool [LET-4188] (#4395)
* Add fetch webpage tool

* Use trafilatura for web extraction
2025-09-03 13:34:35 -07:00