Commit Graph

6751 Commits

Author SHA1 Message Date
Kevin Lin
a1dfedfb0b feat: Add structured outputs for Anthropic (#7495) 2026-01-12 10:57:19 -08:00
Sarah Wooders
acd8dd7bcf feat: make embedding_config optional on agent creation (#7553)
* feat: make embedding_config optional on agent creation

- Remove requirement for embedding_config in agent creation
- Add EmbeddingConfigRequiredError for operations that need embeddings
- Add null checks in sleeptime agent creation, passage insert, archive creation
- Register new error in app.py exception handlers

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

Co-Authored-By: Letta <noreply@letta.com>

* chore: update API schemas for optional embedding_config

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

Co-Authored-By: Letta <noreply@letta.com>

---------

Co-authored-by: Letta <noreply@letta.com>
2026-01-12 10:57:19 -08:00
jnjpng
a1fb295e69 feat: enable claude pro max plan for letta code (#7663)
* base

* more

* rev
2026-01-12 10:57:19 -08:00
Cameron
3e15159d83 fix: prevent human block overwrite when skills block missing (#7656)
* fix: prevent human block overwrite when skills block missing

**Bug**: When connecting to agents created before skills blocks were
standard, the human block gets overwritten with skills directory content.

**Root cause**: agent_manager.py:1893-1898 had `block = block` (no-op).
When skills block doesn't exist, loop variable ends as last block in
core_memory (often "human"), then updates that wrong block.

**Fix**: Use `matched_block` variable to properly track found block.
Now correctly raises NoResultFound when block label doesn't exist.

**Impact**: Affects pre-December 2025 agents missing skills blocks.

Written by Cameron ◯ Letta Code

"The best error message is the one that never shows up." - Thomas Fuchs

Co-Authored-By: Letta <noreply@letta.com>

* fix: use correct method name in block update test

Change get_block_by_label_async to get_block_with_label_async in test.

Written by Cameron ◯ Letta Code

Co-Authored-By: Letta <noreply@letta.com>

---------

Co-authored-by: Letta <noreply@letta.com>
2026-01-12 10:57:19 -08:00
cthomas
063228ba58 feat: letta code telemetry events (#7662)
* feat: letta code telemetry events

* api sync
2026-01-12 10:57:19 -08:00
Ari Webb
cd45212acb feat: add zai provider support (#7626)
* feat: add zai provider support

* add zai_api_key secret to deploy-core

* add to justfile

* add testing, provider integration skill

* enable zai key

* fix zai test

* clean up skill a little

* small changes
2026-01-12 10:57:19 -08:00
Ari Webb
cb283373b7 feat: add retrieve_file endpoint to get file content [LET-6188] (#7485)
* feat: add retrieve_file endpoint to get file content

* Restore package-lock.json to main
2026-01-12 10:57:19 -08:00
Kian Jones
61da937841 feat: enable differentiation between providers using the openai client (#7539)
enable differentiation between providers using the llm client base class
2026-01-12 10:57:19 -08:00
cthomas
9a95a8f976 fix: duplicate session commit in step logging (#7512)
* fix: duplicate session commit in step logging

* update all callsites
2026-01-12 10:57:19 -08:00
Ari Webb
4d8d9757aa feat: add request-id for steps [LET-6587] (#7349)
* feat: add request-id for steps

* order revisions correctly

* stage publish api
2026-01-12 10:57:19 -08:00
Kian Jones
3c0502454c feat: add llm obs patch (#7449)
* add llm obs patch

* add staging vars
2026-01-12 10:57:19 -08:00
Sarah Wooders
c675c289ef feat: add more summary logging (#7405) 2026-01-12 10:57:19 -08:00
Sarah Wooders
a7639a53eb fix: fix summary message return for compaction (#7402) 2026-01-12 10:57:19 -08:00
Shubham Naik
477b51fda1 chore: fix casing omg (#7379)
* chore: fix

* chore: fix

* chore: fix

* chore: merge

---------

Co-authored-by: Shubham Naik <shub@memgpt.ai>
2026-01-12 10:57:19 -08:00
Sarah Wooders
3f3e54d937 feat: add compaction response (#7389) 2026-01-12 10:57:19 -08:00
Sarah Wooders
f9f1b1e82d feat: allow for configuration compaction and return message delta (#7378) 2026-01-12 10:57:19 -08:00
Kian Jones
82e5d70807 fix: prevent empty reasoning messages in streaming interfaces (#7207)
* fix: prevent empty reasoning messages in streaming interfaces

Prevents empty "Thinking..." indicators from appearing in clients by
filtering out reasoning messages with no content at the source.

Changes:
- Gemini: Don't emit ReasoningMessage when only thought_signature exists
- Gemini: Only emit reasoning content if text is non-empty
- Anthropic: Don't emit ReasoningMessage for BetaSignatureDelta
- Anthropic: Only emit reasoning content if thinking text is non-empty

This fixes the issue where providers send signature metadata before
actual thinking content, causing empty reasoning blocks to appear
in the UI after responses complete.

Affects: Gemini reasoning, Anthropic extended thinking

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

Co-Authored-By: Letta <noreply@letta.com>

* fix: handle Anthropic thinking signature correctly

- Only include 'signature' in Anthropic message payload if it is not None (fixes BadRequestError).
- Capture and attach 'signature' to ReasoningMessage in streaming interface.

* fix(anthropic): attach signature to last reasoning message in stream

---------

Co-authored-by: Letta <noreply@letta.com>
2026-01-12 10:57:19 -08:00
Shubham Naik
0585f013f4 feat: telemetry endpoint [LET-6599] (#7370)
* feat: telemetry endpoint

* feat: telemetry endpoint

---------

Co-authored-by: Shubham Naik <shub@memgpt.ai>
2026-01-12 10:57:19 -08:00
neversettle
44f35793db Update contributing.md with corrected local setup steps (#3123) 2025-12-31 12:24:14 -08:00
Charles Packer
e026bef80f docs: update README.md (#3110) 2025-12-18 15:52:27 -08:00
cthomas
58ab2bcea5 chore: bump v0.16.1 (#3107) 2025-12-17 17:37:23 -08:00
Caren Thomas
5646be7df6 chore: bump version 0.16.1 2025-12-17 17:33:43 -08:00
Ari Webb
79c2319403 chore: add project constraint on tools db (#7360) 2025-12-17 17:32:27 -08:00
Kevin Lin
33afb930fc fix: Google AI client logging as Vertex (#7337)
fix
2025-12-17 17:32:27 -08:00
jnjpng
5312129587 chore: add redis to oss docker (#7347)
* base

* fix
2025-12-17 17:32:25 -08:00
Sarah Wooders
ae4490c5b3 fix: filter out stop reason from response streaming (#7332) 2025-12-17 17:31:03 -08:00
Ari Webb
e47eb23522 fix: max output tokens for gemini 3 models (#7322) 2025-12-17 17:31:03 -08:00
Shubham Naik
25a7eaafe6 Shub/let 6588 feedback endpoint [LET-6588] (#7329)
* feat: add feedback endpoint

* feat: add feedback endpoint

---------

Co-authored-by: Shubham Naik <shub@memgpt.ai>
2025-12-17 17:31:03 -08:00
cthomas
2d82faad70 fix: skip agent relationship joins for source upload (#7335) 2025-12-17 17:31:03 -08:00
cthomas
7dfdbc5a80 feat: enable agent override for proxy (#7231) 2025-12-17 17:31:03 -08:00
Kian Jones
632bee868c chore: upgrade ddtrace version (#7326)
* upgrade ddtrace version

* uv lock
2025-12-17 17:31:03 -08:00
Shubham Naik
2f023e9f4a Shub/let 6581 add endpoint for showing current balances [LET-6581] (#7208)
* feat: add endpoint for showing current balance

* feat: add endpoint for showing current balance

* chore: update endpoints

---------

Co-authored-by: Shubham Naik <shub@memgpt.ai>
2025-12-17 17:31:02 -08:00
Christina Tong
f929d53cfe add msg id to search endpoint response [LET-6582] (#7236)
* add msg id to search endpoint response

* rename
2025-12-17 17:31:02 -08:00
Kian Jones
9c1c2698ab feat: enable Datadog LLM Observability for memgpt-server (#7258)
* fix: prevent empty reasoning messages in streaming interfaces

Prevents empty "Thinking..." indicators from appearing in clients by
filtering out reasoning messages with no content at the source.

Changes:
- Gemini: Don't emit ReasoningMessage when only thought_signature exists
- Gemini: Only emit reasoning content if text is non-empty
- Anthropic: Don't emit ReasoningMessage for BetaSignatureDelta
- Anthropic: Only emit reasoning content if thinking text is non-empty

This fixes the issue where providers send signature metadata before
actual thinking content, causing empty reasoning blocks to appear
in the UI after responses complete.

Affects: Gemini reasoning, Anthropic extended thinking

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

Co-Authored-By: Letta <noreply@letta.com>

* feat: enable Datadog LLM Observability for memgpt-server

Enables DD_LLMOBS to track LLM calls, prompts, completions, and costs
in production for memgpt-server.

Changes:
- Add DD_LLMOBS_ENABLED=1 and DD_LLMOBS_ML_APP=memgpt-server in:
  - .github/workflows/deploy-core.yml (GitHub Actions deployment)
  - justfile (Helm deployment secrets)
  - apps/core/letta/server/rest_api/app.py (runtime config)

This provides visibility into:
- LLM API calls and latency
- Prompt/completion content and tokens
- Model costs and usage
- Error rates per model/provider

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

Co-Authored-By: Letta <noreply@letta.com>

* dd llmobs

* Revert "fix: prevent empty reasoning messages in streaming interfaces"

This reverts commit a900228b3611de49eb5f740f68dc76a657fc9b14.

---------

Co-authored-by: Letta <noreply@letta.com>
2025-12-17 17:31:02 -08:00
jnjpng
350f3a751c fix: update more plaintext non async callsites (#7223)
* bae

* update

* fix

* clean up

* last
2025-12-17 17:31:02 -08:00
jnjpng
591420876a fix: correct decorator order for trace_method and raise_on_invalid_id (#7226)
Swap the order of @trace_method and @raise_on_invalid_id decorators
across all service managers so that @trace_method is always the first
wrapper applied to the function (positioned directly above the method).

This ensures the ID validation happens before tracing begins, which is
the intended execution order.

Files modified:
- agent_manager.py (23 occurrences)
- archive_manager.py (11 occurrences)
- block_manager.py (7 occurrences)
- file_manager.py (6 occurrences)
- group_manager.py (9 occurrences)
- identity_manager.py (10 occurrences)
- job_manager.py (7 occurrences)
- message_manager.py (2 occurrences)
- provider_manager.py (3 occurrences)
- sandbox_config_manager.py (7 occurrences)
- source_manager.py (5 occurrences)
- step_manager.py (13 occurrences)
2025-12-17 17:31:02 -08:00
cthomas
82de08be42 fix: agent not defined more callsites (#7219) 2025-12-17 17:31:02 -08:00
jnjpng
25d75d6528 fix: update aysnc get plaintext callsites (#7069)
* base

* resolve

* fix

* fix
2025-12-17 17:31:02 -08:00
cthomas
e6a4b3e874 fix: nonetype not iterable (#7216) 2025-12-17 17:31:02 -08:00
cthomas
6a2e61c3fa fix: agent not defined error (#7212) 2025-12-17 17:31:02 -08:00
cthomas
9bc872a350 fix: add gen tool error handling (#7209) 2025-12-17 17:31:02 -08:00
cthomas
6de4f0f437 feat: filter out policy system messages for proxy (#7205) 2025-12-17 17:31:02 -08:00
Sarah Wooders
8729a037b9 fix: handle new openai overflow error format (#7110) 2025-12-17 17:31:02 -08:00
Sarah Wooders
f1bd246e9b feat: use token streaming for anthropic summarization (#7105) 2025-12-17 17:31:02 -08:00
Kevin Lin
857139f907 feat: Set reasonable defaults for max output tokens [LET-6483] (#7084) 2025-12-17 17:31:02 -08:00
jnjpng
00ba2d09f3 refactor: migrate mcp_servers and mcp_oauth to encrypted-only columns (#6751)
* refactor: migrate mcp_servers and mcp_oauth to encrypted-only columns

Complete migration to encrypted-only storage for sensitive fields:

- Remove dual-write to plaintext columns (token, custom_headers,
  authorization_code, access_token, refresh_token, client_secret)
- Read only from _enc columns, not from plaintext fallback
- Remove helper methods (get_token_secret, set_token_secret, etc.)
- Remove Secret.from_db() and Secret.to_dict() methods
- Update tests to verify encrypted-only behavior

After this change, plaintext columns can be set to NULL manually
since they are no longer read from or written to.

* fix test

* rename

* update

* union

* fix test
2025-12-17 17:31:02 -08:00
Kevin Lin
03a41f8e8d chore: Increase LLM streaming timeout [LET-6562] (#7080)
increase
2025-12-17 17:31:02 -08:00
Ari Webb
4878b49fa1 chore: bounds check for assistant message index (#7070) 2025-12-17 17:31:02 -08:00
Sooty
6f48d4bd48 Correct provider name for openai-proxy in LLMConfig (#3097) 2025-12-16 19:37:54 -08:00
cthomas
be53f15ce0 chore: bump v0.16.0 (#3095) 2025-12-15 12:12:23 -08:00