letta-nightly 0.11.7.dev20251006104136__py3-none-any.whl → 0.11.7.dev20251008104128__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- letta/adapters/letta_llm_adapter.py +1 -0
- letta/adapters/letta_llm_request_adapter.py +0 -1
- letta/adapters/letta_llm_stream_adapter.py +7 -2
- letta/adapters/simple_llm_request_adapter.py +88 -0
- letta/adapters/simple_llm_stream_adapter.py +192 -0
- letta/agents/agent_loop.py +6 -0
- letta/agents/ephemeral_summary_agent.py +2 -1
- letta/agents/helpers.py +142 -6
- letta/agents/letta_agent.py +13 -33
- letta/agents/letta_agent_batch.py +2 -4
- letta/agents/letta_agent_v2.py +87 -77
- letta/agents/letta_agent_v3.py +899 -0
- letta/agents/voice_agent.py +2 -6
- letta/constants.py +8 -4
- letta/errors.py +40 -0
- letta/functions/function_sets/base.py +84 -4
- letta/functions/function_sets/multi_agent.py +0 -3
- letta/functions/schema_generator.py +113 -71
- letta/groups/dynamic_multi_agent.py +3 -2
- letta/groups/helpers.py +1 -2
- letta/groups/round_robin_multi_agent.py +3 -2
- letta/groups/sleeptime_multi_agent.py +3 -2
- letta/groups/sleeptime_multi_agent_v2.py +1 -1
- letta/groups/sleeptime_multi_agent_v3.py +17 -17
- letta/groups/supervisor_multi_agent.py +84 -80
- letta/helpers/converters.py +3 -0
- letta/helpers/message_helper.py +4 -0
- letta/helpers/tool_rule_solver.py +92 -5
- letta/interfaces/anthropic_streaming_interface.py +409 -0
- letta/interfaces/gemini_streaming_interface.py +296 -0
- letta/interfaces/openai_streaming_interface.py +752 -1
- letta/llm_api/anthropic_client.py +126 -16
- letta/llm_api/bedrock_client.py +4 -2
- letta/llm_api/deepseek_client.py +4 -1
- letta/llm_api/google_vertex_client.py +123 -42
- letta/llm_api/groq_client.py +4 -1
- letta/llm_api/llm_api_tools.py +11 -4
- letta/llm_api/llm_client_base.py +6 -2
- letta/llm_api/openai.py +32 -2
- letta/llm_api/openai_client.py +423 -18
- letta/llm_api/xai_client.py +4 -1
- letta/main.py +9 -5
- letta/memory.py +1 -0
- letta/orm/__init__.py +1 -1
- letta/orm/agent.py +10 -0
- letta/orm/block.py +7 -16
- letta/orm/blocks_agents.py +8 -2
- letta/orm/files_agents.py +2 -0
- letta/orm/job.py +7 -5
- letta/orm/mcp_oauth.py +1 -0
- letta/orm/message.py +21 -6
- letta/orm/organization.py +2 -0
- letta/orm/provider.py +6 -2
- letta/orm/run.py +71 -0
- letta/orm/sandbox_config.py +7 -1
- letta/orm/sqlalchemy_base.py +0 -306
- letta/orm/step.py +6 -5
- letta/orm/step_metrics.py +5 -5
- letta/otel/tracing.py +28 -3
- letta/plugins/defaults.py +4 -4
- letta/prompts/system_prompts/__init__.py +2 -0
- letta/prompts/system_prompts/letta_v1.py +25 -0
- letta/schemas/agent.py +3 -2
- letta/schemas/agent_file.py +9 -3
- letta/schemas/block.py +23 -10
- letta/schemas/enums.py +21 -2
- letta/schemas/job.py +17 -4
- letta/schemas/letta_message_content.py +71 -2
- letta/schemas/letta_stop_reason.py +5 -5
- letta/schemas/llm_config.py +53 -3
- letta/schemas/memory.py +1 -1
- letta/schemas/message.py +504 -117
- letta/schemas/openai/responses_request.py +64 -0
- letta/schemas/providers/__init__.py +2 -0
- letta/schemas/providers/anthropic.py +16 -0
- letta/schemas/providers/ollama.py +115 -33
- letta/schemas/providers/openrouter.py +52 -0
- letta/schemas/providers/vllm.py +2 -1
- letta/schemas/run.py +48 -42
- letta/schemas/step.py +2 -2
- letta/schemas/step_metrics.py +1 -1
- letta/schemas/tool.py +15 -107
- letta/schemas/tool_rule.py +88 -5
- letta/serialize_schemas/marshmallow_agent.py +1 -0
- letta/server/db.py +86 -408
- letta/server/rest_api/app.py +61 -10
- letta/server/rest_api/dependencies.py +14 -0
- letta/server/rest_api/redis_stream_manager.py +19 -8
- letta/server/rest_api/routers/v1/agents.py +364 -292
- letta/server/rest_api/routers/v1/blocks.py +14 -20
- letta/server/rest_api/routers/v1/identities.py +45 -110
- letta/server/rest_api/routers/v1/internal_templates.py +21 -0
- letta/server/rest_api/routers/v1/jobs.py +23 -6
- letta/server/rest_api/routers/v1/messages.py +1 -1
- letta/server/rest_api/routers/v1/runs.py +126 -85
- letta/server/rest_api/routers/v1/sandbox_configs.py +10 -19
- letta/server/rest_api/routers/v1/tools.py +281 -594
- letta/server/rest_api/routers/v1/voice.py +1 -1
- letta/server/rest_api/streaming_response.py +29 -29
- letta/server/rest_api/utils.py +122 -64
- letta/server/server.py +160 -887
- letta/services/agent_manager.py +236 -919
- letta/services/agent_serialization_manager.py +16 -0
- letta/services/archive_manager.py +0 -100
- letta/services/block_manager.py +211 -168
- letta/services/file_manager.py +1 -1
- letta/services/files_agents_manager.py +24 -33
- letta/services/group_manager.py +0 -142
- letta/services/helpers/agent_manager_helper.py +7 -2
- letta/services/helpers/run_manager_helper.py +85 -0
- letta/services/job_manager.py +96 -411
- letta/services/lettuce/__init__.py +6 -0
- letta/services/lettuce/lettuce_client_base.py +86 -0
- letta/services/mcp_manager.py +38 -6
- letta/services/message_manager.py +165 -362
- letta/services/organization_manager.py +0 -36
- letta/services/passage_manager.py +0 -345
- letta/services/provider_manager.py +0 -80
- letta/services/run_manager.py +301 -0
- letta/services/sandbox_config_manager.py +0 -234
- letta/services/step_manager.py +62 -39
- letta/services/summarizer/summarizer.py +9 -7
- letta/services/telemetry_manager.py +0 -16
- letta/services/tool_executor/builtin_tool_executor.py +35 -0
- letta/services/tool_executor/core_tool_executor.py +397 -2
- letta/services/tool_executor/files_tool_executor.py +3 -3
- letta/services/tool_executor/multi_agent_tool_executor.py +30 -15
- letta/services/tool_executor/tool_execution_manager.py +6 -8
- letta/services/tool_executor/tool_executor_base.py +3 -3
- letta/services/tool_manager.py +85 -339
- letta/services/tool_sandbox/base.py +24 -13
- letta/services/tool_sandbox/e2b_sandbox.py +16 -1
- letta/services/tool_schema_generator.py +123 -0
- letta/services/user_manager.py +0 -99
- letta/settings.py +20 -4
- {letta_nightly-0.11.7.dev20251006104136.dist-info → letta_nightly-0.11.7.dev20251008104128.dist-info}/METADATA +3 -5
- {letta_nightly-0.11.7.dev20251006104136.dist-info → letta_nightly-0.11.7.dev20251008104128.dist-info}/RECORD +140 -132
- letta/agents/temporal/activities/__init__.py +0 -4
- letta/agents/temporal/activities/example_activity.py +0 -7
- letta/agents/temporal/activities/prepare_messages.py +0 -10
- letta/agents/temporal/temporal_agent_workflow.py +0 -56
- letta/agents/temporal/types.py +0 -25
- {letta_nightly-0.11.7.dev20251006104136.dist-info → letta_nightly-0.11.7.dev20251008104128.dist-info}/WHEEL +0 -0
- {letta_nightly-0.11.7.dev20251006104136.dist-info → letta_nightly-0.11.7.dev20251008104128.dist-info}/entry_points.txt +0 -0
- {letta_nightly-0.11.7.dev20251006104136.dist-info → letta_nightly-0.11.7.dev20251008104128.dist-info}/licenses/LICENSE +0 -0
@@ -7,24 +7,38 @@ if TYPE_CHECKING:
|
|
7
7
|
from letta.server.server import SyncServer
|
8
8
|
|
9
9
|
|
10
|
+
class ExperimentalParams(BaseModel):
|
11
|
+
"""Experimental parameters used across REST API endpoints."""
|
12
|
+
|
13
|
+
message_async: Optional[bool] = None
|
14
|
+
letta_v1_agent: Optional[bool] = None
|
15
|
+
|
16
|
+
|
10
17
|
class HeaderParams(BaseModel):
|
11
18
|
"""Common header parameters used across REST API endpoints."""
|
12
19
|
|
13
20
|
actor_id: Optional[str] = None
|
14
21
|
user_agent: Optional[str] = None
|
15
22
|
project_id: Optional[str] = None
|
23
|
+
experimental_params: Optional[ExperimentalParams] = None
|
16
24
|
|
17
25
|
|
18
26
|
def get_headers(
|
19
27
|
actor_id: Optional[str] = Header(None, alias="user_id"),
|
20
28
|
user_agent: Optional[str] = Header(None, alias="User-Agent"),
|
21
29
|
project_id: Optional[str] = Header(None, alias="X-Project-Id"),
|
30
|
+
message_async: Optional[str] = Header(None, alias="X-Experimental-Message-Async"),
|
31
|
+
letta_v1_agent: Optional[str] = Header(None, alias="X-Experimental-Letta-V1-Agent"),
|
22
32
|
) -> HeaderParams:
|
23
33
|
"""Dependency injection function to extract common headers from requests."""
|
24
34
|
return HeaderParams(
|
25
35
|
actor_id=actor_id,
|
26
36
|
user_agent=user_agent,
|
27
37
|
project_id=project_id,
|
38
|
+
experimental_params=ExperimentalParams(
|
39
|
+
message_async=(message_async == "true") if message_async else None,
|
40
|
+
letta_v1_agent=(letta_v1_agent == "true") if letta_v1_agent else None,
|
41
|
+
),
|
28
42
|
)
|
29
43
|
|
30
44
|
|
@@ -8,9 +8,11 @@ from typing import AsyncIterator, Dict, List, Optional
|
|
8
8
|
|
9
9
|
from letta.data_sources.redis_client import AsyncRedisClient
|
10
10
|
from letta.log import get_logger
|
11
|
-
from letta.schemas.enums import
|
11
|
+
from letta.schemas.enums import RunStatus
|
12
|
+
from letta.schemas.letta_stop_reason import StopReasonType
|
13
|
+
from letta.schemas.run import RunUpdate
|
12
14
|
from letta.schemas.user import User
|
13
|
-
from letta.services.
|
15
|
+
from letta.services.run_manager import RunManager
|
14
16
|
from letta.utils import safe_create_task
|
15
17
|
|
16
18
|
logger = get_logger(__name__)
|
@@ -194,7 +196,7 @@ async def create_background_stream_processor(
|
|
194
196
|
redis_client: AsyncRedisClient,
|
195
197
|
run_id: str,
|
196
198
|
writer: Optional[RedisSSEStreamWriter] = None,
|
197
|
-
|
199
|
+
run_manager: Optional[RunManager] = None,
|
198
200
|
actor: Optional[User] = None,
|
199
201
|
) -> None:
|
200
202
|
"""
|
@@ -208,8 +210,8 @@ async def create_background_stream_processor(
|
|
208
210
|
redis_client: Redis client instance
|
209
211
|
run_id: The run ID to store chunks under
|
210
212
|
writer: Optional pre-configured writer (creates new if not provided)
|
211
|
-
|
212
|
-
actor: Optional actor for
|
213
|
+
run_manager: Optional run manager for updating run status
|
214
|
+
actor: Optional actor for run status updates
|
213
215
|
"""
|
214
216
|
if writer is None:
|
215
217
|
writer = RedisSSEStreamWriter(redis_client)
|
@@ -235,9 +237,12 @@ async def create_background_stream_processor(
|
|
235
237
|
# Write error chunk
|
236
238
|
# error_chunk = {"error": {"message": str(e)}}
|
237
239
|
# Mark run_id terminal state
|
238
|
-
if
|
239
|
-
await
|
240
|
-
|
240
|
+
if run_manager and actor:
|
241
|
+
await run_manager.update_run_by_id_async(
|
242
|
+
run_id=run_id,
|
243
|
+
update=RunUpdate(status=RunStatus.failed, stop_reason=StopReasonType.error.value),
|
244
|
+
actor=actor,
|
245
|
+
metadata={"error": str(e)},
|
241
246
|
)
|
242
247
|
|
243
248
|
error_chunk = {"error": str(e), "code": "INTERNAL_SERVER_ERROR"}
|
@@ -245,6 +250,12 @@ async def create_background_stream_processor(
|
|
245
250
|
finally:
|
246
251
|
if should_stop_writer:
|
247
252
|
await writer.stop()
|
253
|
+
if run_manager and actor:
|
254
|
+
await run_manager.update_run_by_id_async(
|
255
|
+
run_id=run_id,
|
256
|
+
update=RunUpdate(status=RunStatus.completed, stop_reason=StopReasonType.end_turn.value),
|
257
|
+
actor=actor,
|
258
|
+
)
|
248
259
|
|
249
260
|
|
250
261
|
async def redis_sse_stream_generator(
|