letta-nightly 0.5.1.dev20241029104141__py3-none-any.whl → 0.5.1.dev20241030104135__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.
Potentially problematic release.
This version of letta-nightly might be problematic. Click here for more details.
- letta/server/rest_api/routers/v1/agents.py +12 -10
- letta/server/rest_api/utils.py +21 -2
- {letta_nightly-0.5.1.dev20241029104141.dist-info → letta_nightly-0.5.1.dev20241030104135.dist-info}/METADATA +1 -1
- {letta_nightly-0.5.1.dev20241029104141.dist-info → letta_nightly-0.5.1.dev20241030104135.dist-info}/RECORD +7 -7
- {letta_nightly-0.5.1.dev20241029104141.dist-info → letta_nightly-0.5.1.dev20241030104135.dist-info}/LICENSE +0 -0
- {letta_nightly-0.5.1.dev20241029104141.dist-info → letta_nightly-0.5.1.dev20241030104135.dist-info}/WHEEL +0 -0
- {letta_nightly-0.5.1.dev20241029104141.dist-info → letta_nightly-0.5.1.dev20241030104135.dist-info}/entry_points.txt +0 -0
|
@@ -359,7 +359,7 @@ def update_message(
|
|
|
359
359
|
return server.update_agent_message(agent_id=agent_id, request=request)
|
|
360
360
|
|
|
361
361
|
|
|
362
|
-
@router.post("/{agent_id}/messages", response_model=
|
|
362
|
+
@router.post("/{agent_id}/messages", response_model=None, operation_id="create_agent_message")
|
|
363
363
|
async def send_message(
|
|
364
364
|
agent_id: str,
|
|
365
365
|
server: SyncServer = Depends(get_letta_server),
|
|
@@ -373,16 +373,10 @@ async def send_message(
|
|
|
373
373
|
"""
|
|
374
374
|
actor = server.get_user_or_default(user_id=user_id)
|
|
375
375
|
|
|
376
|
-
# TODO(charles): support sending multiple messages
|
|
377
|
-
assert len(request.messages) == 1, f"Multiple messages not supported: {request.messages}"
|
|
378
|
-
request.messages[0]
|
|
379
|
-
|
|
380
376
|
return await send_message_to_agent(
|
|
381
377
|
server=server,
|
|
382
378
|
agent_id=agent_id,
|
|
383
379
|
user_id=actor.id,
|
|
384
|
-
# role=message.role,
|
|
385
|
-
# message=message.text,
|
|
386
380
|
messages=request.messages,
|
|
387
381
|
stream_steps=request.stream_steps,
|
|
388
382
|
stream_tokens=request.stream_tokens,
|
|
@@ -463,8 +457,12 @@ async def send_message_to_agent(
|
|
|
463
457
|
# Offload the synchronous message_func to a separate thread
|
|
464
458
|
streaming_interface.stream_start()
|
|
465
459
|
task = asyncio.create_task(
|
|
466
|
-
|
|
467
|
-
|
|
460
|
+
asyncio.to_thread(
|
|
461
|
+
server.send_messages,
|
|
462
|
+
user_id=user_id,
|
|
463
|
+
agent_id=agent_id,
|
|
464
|
+
messages=messages,
|
|
465
|
+
)
|
|
468
466
|
)
|
|
469
467
|
|
|
470
468
|
if stream_steps:
|
|
@@ -474,7 +472,11 @@ async def send_message_to_agent(
|
|
|
474
472
|
|
|
475
473
|
# return a stream
|
|
476
474
|
return StreamingResponse(
|
|
477
|
-
sse_async_generator(
|
|
475
|
+
sse_async_generator(
|
|
476
|
+
streaming_interface.get_generator(),
|
|
477
|
+
usage_task=task,
|
|
478
|
+
finish_message=include_final_message,
|
|
479
|
+
),
|
|
478
480
|
media_type="text/event-stream",
|
|
479
481
|
)
|
|
480
482
|
|
letta/server/rest_api/utils.py
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import asyncio
|
|
1
2
|
import json
|
|
2
3
|
import traceback
|
|
4
|
+
import warnings
|
|
3
5
|
from enum import Enum
|
|
4
|
-
from typing import AsyncGenerator, Union
|
|
6
|
+
from typing import AsyncGenerator, Optional, Union
|
|
5
7
|
|
|
6
8
|
from pydantic import BaseModel
|
|
7
9
|
|
|
10
|
+
from letta.schemas.usage import LettaUsageStatistics
|
|
8
11
|
from letta.server.rest_api.interface import StreamingServerInterface
|
|
9
12
|
from letta.server.server import SyncServer
|
|
10
13
|
|
|
@@ -24,7 +27,11 @@ def sse_formatter(data: Union[dict, str]) -> str:
|
|
|
24
27
|
return f"data: {data_str}\n\n"
|
|
25
28
|
|
|
26
29
|
|
|
27
|
-
async def sse_async_generator(
|
|
30
|
+
async def sse_async_generator(
|
|
31
|
+
generator: AsyncGenerator,
|
|
32
|
+
usage_task: Optional[asyncio.Task] = None,
|
|
33
|
+
finish_message=True,
|
|
34
|
+
):
|
|
28
35
|
"""
|
|
29
36
|
Wraps a generator for use in Server-Sent Events (SSE), handling errors and ensuring a completion message.
|
|
30
37
|
|
|
@@ -45,6 +52,18 @@ async def sse_async_generator(generator: AsyncGenerator, finish_message=True):
|
|
|
45
52
|
chunk = str(chunk)
|
|
46
53
|
yield sse_formatter(chunk)
|
|
47
54
|
|
|
55
|
+
# If we have a usage task, wait for it and send its result
|
|
56
|
+
if usage_task is not None:
|
|
57
|
+
try:
|
|
58
|
+
usage = await usage_task
|
|
59
|
+
# Double-check the type
|
|
60
|
+
if not isinstance(usage, LettaUsageStatistics):
|
|
61
|
+
raise ValueError(f"Expected LettaUsageStatistics, got {type(usage)}")
|
|
62
|
+
yield sse_formatter({"usage": usage.model_dump()})
|
|
63
|
+
except Exception as e:
|
|
64
|
+
warnings.warn(f"Error getting usage data: {e}")
|
|
65
|
+
yield sse_formatter({"error": "Failed to get usage data"})
|
|
66
|
+
|
|
48
67
|
except Exception as e:
|
|
49
68
|
print("stream decoder hit error:", e)
|
|
50
69
|
print(traceback.print_stack())
|
|
@@ -169,7 +169,7 @@ letta/server/rest_api/routers/openai/assistants/threads.py,sha256=WXVGBaBvSNPB7Z
|
|
|
169
169
|
letta/server/rest_api/routers/openai/chat_completions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
170
170
|
letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=-uye6cm4SnoQGwxhr1N1FrSXOlnO2Hvbfj6k8JSc45k,4918
|
|
171
171
|
letta/server/rest_api/routers/v1/__init__.py,sha256=sqlVZa-u9DJwdRsp0_8YUGrac9DHguIB4wETlEDRylA,666
|
|
172
|
-
letta/server/rest_api/routers/v1/agents.py,sha256=
|
|
172
|
+
letta/server/rest_api/routers/v1/agents.py,sha256=Ph3J90KKuUVXL1MotJFTtSg9_s9f2GkgbiAbJyj00V8,25166
|
|
173
173
|
letta/server/rest_api/routers/v1/blocks.py,sha256=0WekE_yBD2U3jYgPxI0DCFjACWavCAlvm_Ybw5SZBnw,2583
|
|
174
174
|
letta/server/rest_api/routers/v1/health.py,sha256=pKCuVESlVOhGIb4VC4K-H82eZqfghmT6kvj2iOkkKuc,401
|
|
175
175
|
letta/server/rest_api/routers/v1/jobs.py,sha256=a-j0v-5A0un0pVCOHpfeWnzpOWkVDQO6ti42k_qAlZY,2272
|
|
@@ -179,7 +179,7 @@ letta/server/rest_api/routers/v1/sources.py,sha256=eY_pk9jRL2Y9yIZdsTjH6EuKsfH1n
|
|
|
179
179
|
letta/server/rest_api/routers/v1/tools.py,sha256=aVZcVxL68Oq8N6p3p_MsGrNxmnK3-UWAIHdVztFw_Nk,3794
|
|
180
180
|
letta/server/rest_api/routers/v1/users.py,sha256=bxQ-YdevjDqmgNDfbSPAG_4KEVvPNBHD_-Lp1MdeMec,3374
|
|
181
181
|
letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
|
|
182
|
-
letta/server/rest_api/utils.py,sha256=
|
|
182
|
+
letta/server/rest_api/utils.py,sha256=GdHYCzXtbM5VCAYDPR0z5gnNZpRhwPld2BGZV7xT6cU,2924
|
|
183
183
|
letta/server/server.py,sha256=HeIucHAaf6CpV0izHTnrMfQwDX-Lbs7j9DHYogZpLAc,80255
|
|
184
184
|
letta/server/startup.sh,sha256=o2dY9wc5Ew1j_10U6dK2FYevAj79udZ-T969j5rG-a0,311
|
|
185
185
|
letta/server/static_files/assets/index-3ab03d5b.css,sha256=OrA9W4iKJ5h2Wlr7GwdAT4wow0CM8hVit1yOxEL49Qw,54295
|
|
@@ -202,8 +202,8 @@ letta/streaming_interface.py,sha256=_FPUWy58j50evHcpXyd7zB1wWqeCc71NCFeWh_TBvnw,
|
|
|
202
202
|
letta/streaming_utils.py,sha256=329fsvj1ZN0r0LpQtmMPZ2vSxkDBIUUwvGHZFkjm2I8,11745
|
|
203
203
|
letta/system.py,sha256=buKYPqG5n2x41hVmWpu6JUpyd7vTWED9Km2_M7dLrvk,6960
|
|
204
204
|
letta/utils.py,sha256=SXLEYhyp3gHyIjrxNIKNZZ5ittKo3KOj6zxgC_Trex0,31012
|
|
205
|
-
letta_nightly-0.5.1.
|
|
206
|
-
letta_nightly-0.5.1.
|
|
207
|
-
letta_nightly-0.5.1.
|
|
208
|
-
letta_nightly-0.5.1.
|
|
209
|
-
letta_nightly-0.5.1.
|
|
205
|
+
letta_nightly-0.5.1.dev20241030104135.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
|
|
206
|
+
letta_nightly-0.5.1.dev20241030104135.dist-info/METADATA,sha256=uGyx0kl-8ZxebvCtXGM5Ko0oQNo_hmgRGzuiO0DnPMc,10660
|
|
207
|
+
letta_nightly-0.5.1.dev20241030104135.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
208
|
+
letta_nightly-0.5.1.dev20241030104135.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
|
|
209
|
+
letta_nightly-0.5.1.dev20241030104135.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|