letta-nightly 0.6.10.dev20250120193553__py3-none-any.whl → 0.6.12.dev20250120222244__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/__init__.py +1 -1
- letta/client/streaming.py +3 -1
- letta/server/rest_api/app.py +4 -4
- letta/server/rest_api/interface.py +135 -46
- letta/server/server.py +16 -7
- letta/streaming_utils.py +4 -2
- {letta_nightly-0.6.10.dev20250120193553.dist-info → letta_nightly-0.6.12.dev20250120222244.dist-info}/METADATA +2 -1
- {letta_nightly-0.6.10.dev20250120193553.dist-info → letta_nightly-0.6.12.dev20250120222244.dist-info}/RECORD +11 -11
- {letta_nightly-0.6.10.dev20250120193553.dist-info → letta_nightly-0.6.12.dev20250120222244.dist-info}/LICENSE +0 -0
- {letta_nightly-0.6.10.dev20250120193553.dist-info → letta_nightly-0.6.12.dev20250120222244.dist-info}/WHEEL +0 -0
- {letta_nightly-0.6.10.dev20250120193553.dist-info → letta_nightly-0.6.12.dev20250120222244.dist-info}/entry_points.txt +0 -0
letta/__init__.py
CHANGED
letta/client/streaming.py
CHANGED
|
@@ -7,7 +7,7 @@ from httpx_sse import SSEError, connect_sse
|
|
|
7
7
|
from letta.constants import OPENAI_CONTEXT_WINDOW_ERROR_SUBSTRING
|
|
8
8
|
from letta.errors import LLMError
|
|
9
9
|
from letta.schemas.enums import MessageStreamStatus
|
|
10
|
-
from letta.schemas.letta_message import ReasoningMessage, ToolCallMessage, ToolReturnMessage
|
|
10
|
+
from letta.schemas.letta_message import AssistantMessage, ReasoningMessage, ToolCallMessage, ToolReturnMessage
|
|
11
11
|
from letta.schemas.letta_response import LettaStreamingResponse
|
|
12
12
|
from letta.schemas.usage import LettaUsageStatistics
|
|
13
13
|
|
|
@@ -50,6 +50,8 @@ def _sse_post(url: str, data: dict, headers: dict) -> Generator[LettaStreamingRe
|
|
|
50
50
|
chunk_data = json.loads(sse.data)
|
|
51
51
|
if "reasoning" in chunk_data:
|
|
52
52
|
yield ReasoningMessage(**chunk_data)
|
|
53
|
+
elif "assistant_message" in chunk_data:
|
|
54
|
+
yield AssistantMessage(**chunk_data)
|
|
53
55
|
elif "tool_call" in chunk_data:
|
|
54
56
|
yield ToolCallMessage(**chunk_data)
|
|
55
57
|
elif "tool_return" in chunk_data:
|
letta/server/rest_api/app.py
CHANGED
|
@@ -290,8 +290,8 @@ def start_server(
|
|
|
290
290
|
server_logger.addHandler(stream_handler)
|
|
291
291
|
|
|
292
292
|
if (os.getenv("LOCAL_HTTPS") == "true") or "--localhttps" in sys.argv:
|
|
293
|
-
print(f"▶ Server running at: https://{host or 'localhost'}:{port or REST_DEFAULT_PORT}
|
|
294
|
-
print(f"▶ View using ADE at: https://app.letta.com/development-servers/local/dashboard")
|
|
293
|
+
print(f"▶ Server running at: https://{host or 'localhost'}:{port or REST_DEFAULT_PORT}")
|
|
294
|
+
print(f"▶ View using ADE at: https://app.letta.com/development-servers/local/dashboard\n")
|
|
295
295
|
uvicorn.run(
|
|
296
296
|
app,
|
|
297
297
|
host=host or "localhost",
|
|
@@ -300,8 +300,8 @@ def start_server(
|
|
|
300
300
|
ssl_certfile="certs/localhost.pem",
|
|
301
301
|
)
|
|
302
302
|
else:
|
|
303
|
-
print(f"▶ Server running at: http://{host or 'localhost'}:{port or REST_DEFAULT_PORT}
|
|
304
|
-
print(f"▶ View using ADE at: https://app.letta.com/development-servers/local/dashboard")
|
|
303
|
+
print(f"▶ Server running at: http://{host or 'localhost'}:{port or REST_DEFAULT_PORT}")
|
|
304
|
+
print(f"▶ View using ADE at: https://app.letta.com/development-servers/local/dashboard\n")
|
|
305
305
|
uvicorn.run(
|
|
306
306
|
app,
|
|
307
307
|
host=host or "localhost",
|
|
@@ -264,6 +264,7 @@ class StreamingServerInterface(AgentChunkStreamingInterface):
|
|
|
264
264
|
self,
|
|
265
265
|
multi_step=True,
|
|
266
266
|
# Related to if we want to try and pass back the AssistantMessage as a special case function
|
|
267
|
+
use_assistant_message=False,
|
|
267
268
|
assistant_message_tool_name=DEFAULT_MESSAGE_TOOL,
|
|
268
269
|
assistant_message_tool_kwarg=DEFAULT_MESSAGE_TOOL_KWARG,
|
|
269
270
|
# Related to if we expect inner_thoughts to be in the kwargs
|
|
@@ -295,9 +296,10 @@ class StreamingServerInterface(AgentChunkStreamingInterface):
|
|
|
295
296
|
# self.multi_step_gen_indicator = MessageStreamStatus.done_generation
|
|
296
297
|
|
|
297
298
|
# Support for AssistantMessage
|
|
298
|
-
self.use_assistant_message =
|
|
299
|
+
self.use_assistant_message = use_assistant_message # TODO: Remove this (actually? @charles)
|
|
299
300
|
self.assistant_message_tool_name = assistant_message_tool_name
|
|
300
301
|
self.assistant_message_tool_kwarg = assistant_message_tool_kwarg
|
|
302
|
+
self.prev_assistant_message_id = None # Used to skip tool call response receipts for `send_message`
|
|
301
303
|
|
|
302
304
|
# Support for inner_thoughts_in_kwargs
|
|
303
305
|
self.inner_thoughts_in_kwargs = inner_thoughts_in_kwargs
|
|
@@ -308,6 +310,8 @@ class StreamingServerInterface(AgentChunkStreamingInterface):
|
|
|
308
310
|
self.function_name_buffer = None
|
|
309
311
|
self.function_args_buffer = None
|
|
310
312
|
self.function_id_buffer = None
|
|
313
|
+
# A buffer used to store the last flushed function name
|
|
314
|
+
self.last_flushed_function_name = None
|
|
311
315
|
|
|
312
316
|
# extra prints
|
|
313
317
|
self.debug = False
|
|
@@ -434,7 +438,8 @@ class StreamingServerInterface(AgentChunkStreamingInterface):
|
|
|
434
438
|
|
|
435
439
|
# TODO(charles) merge into logic for internal_monologue
|
|
436
440
|
# special case for trapping `send_message`
|
|
437
|
-
if self.use_assistant_message and tool_call.function:
|
|
441
|
+
# if self.use_assistant_message and tool_call.function:
|
|
442
|
+
if not self.inner_thoughts_in_kwargs and self.use_assistant_message and tool_call.function:
|
|
438
443
|
if self.inner_thoughts_in_kwargs:
|
|
439
444
|
raise NotImplementedError("inner_thoughts_in_kwargs with use_assistant_message not yet supported")
|
|
440
445
|
|
|
@@ -535,15 +540,28 @@ class StreamingServerInterface(AgentChunkStreamingInterface):
|
|
|
535
540
|
# however the frontend may expect name first, then args, so to be
|
|
536
541
|
# safe we'll output name first in a separate chunk
|
|
537
542
|
if self.function_name_buffer:
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
543
|
+
|
|
544
|
+
# use_assisitant_message means that we should also not release main_json raw, and instead should only release the contents of "message": "..."
|
|
545
|
+
if self.use_assistant_message and self.function_name_buffer == self.assistant_message_tool_name:
|
|
546
|
+
processed_chunk = None
|
|
547
|
+
|
|
548
|
+
# Store the ID of the tool call so allow skipping the corresponding response
|
|
549
|
+
if self.function_id_buffer:
|
|
550
|
+
self.prev_assistant_message_id = self.function_id_buffer
|
|
551
|
+
|
|
552
|
+
else:
|
|
553
|
+
processed_chunk = ToolCallMessage(
|
|
554
|
+
id=message_id,
|
|
555
|
+
date=message_date,
|
|
556
|
+
tool_call=ToolCallDelta(
|
|
557
|
+
name=self.function_name_buffer,
|
|
558
|
+
arguments=None,
|
|
559
|
+
tool_call_id=self.function_id_buffer,
|
|
560
|
+
),
|
|
561
|
+
)
|
|
562
|
+
|
|
563
|
+
# Record what the last function name we flushed was
|
|
564
|
+
self.last_flushed_function_name = self.function_name_buffer
|
|
547
565
|
# Clear the buffer
|
|
548
566
|
self.function_name_buffer = None
|
|
549
567
|
self.function_id_buffer = None
|
|
@@ -559,35 +577,94 @@ class StreamingServerInterface(AgentChunkStreamingInterface):
|
|
|
559
577
|
# If there was nothing in the name buffer, we can proceed to
|
|
560
578
|
# output the arguments chunk as a ToolCallMessage
|
|
561
579
|
else:
|
|
562
|
-
|
|
563
|
-
#
|
|
564
|
-
if self.
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
580
|
+
|
|
581
|
+
# use_assisitant_message means that we should also not release main_json raw, and instead should only release the contents of "message": "..."
|
|
582
|
+
if self.use_assistant_message and (
|
|
583
|
+
self.last_flushed_function_name is not None
|
|
584
|
+
and self.last_flushed_function_name == self.assistant_message_tool_name
|
|
585
|
+
):
|
|
586
|
+
# do an additional parse on the updates_main_json
|
|
587
|
+
if self.function_args_buffer:
|
|
588
|
+
|
|
589
|
+
updates_main_json = self.function_args_buffer + updates_main_json
|
|
590
|
+
self.function_args_buffer = None
|
|
591
|
+
|
|
592
|
+
# Pretty gross hardcoding that assumes that if we're toggling into the keywords, we have the full prefix
|
|
593
|
+
match_str = '{"' + self.assistant_message_tool_kwarg + '":"'
|
|
594
|
+
if updates_main_json == match_str:
|
|
595
|
+
updates_main_json = None
|
|
596
|
+
|
|
597
|
+
else:
|
|
598
|
+
# Some hardcoding to strip off the trailing "}"
|
|
599
|
+
if updates_main_json in ["}", '"}']:
|
|
600
|
+
updates_main_json = None
|
|
601
|
+
if updates_main_json and len(updates_main_json) > 0 and updates_main_json[-1:] == '"':
|
|
602
|
+
updates_main_json = updates_main_json[:-1]
|
|
603
|
+
|
|
604
|
+
if not updates_main_json:
|
|
605
|
+
# early exit to turn into content mode
|
|
606
|
+
return None
|
|
607
|
+
|
|
608
|
+
# There may be a buffer from a previous chunk, for example
|
|
609
|
+
# if the previous chunk had arguments but we needed to flush name
|
|
610
|
+
if self.function_args_buffer:
|
|
611
|
+
# In this case, we should release the buffer + new data at once
|
|
612
|
+
combined_chunk = self.function_args_buffer + updates_main_json
|
|
613
|
+
processed_chunk = AssistantMessage(
|
|
614
|
+
id=message_id,
|
|
615
|
+
date=message_date,
|
|
616
|
+
assistant_message=combined_chunk,
|
|
617
|
+
)
|
|
618
|
+
# Store the ID of the tool call so allow skipping the corresponding response
|
|
619
|
+
if self.function_id_buffer:
|
|
620
|
+
self.prev_assistant_message_id = self.function_id_buffer
|
|
621
|
+
# clear buffer
|
|
622
|
+
self.function_args_buffer = None
|
|
623
|
+
self.function_id_buffer = None
|
|
624
|
+
|
|
625
|
+
else:
|
|
626
|
+
# If there's no buffer to clear, just output a new chunk with new data
|
|
627
|
+
processed_chunk = AssistantMessage(
|
|
628
|
+
id=message_id,
|
|
629
|
+
date=message_date,
|
|
630
|
+
assistant_message=updates_main_json,
|
|
631
|
+
)
|
|
632
|
+
# Store the ID of the tool call so allow skipping the corresponding response
|
|
633
|
+
if self.function_id_buffer:
|
|
634
|
+
self.prev_assistant_message_id = self.function_id_buffer
|
|
635
|
+
# clear buffers
|
|
636
|
+
self.function_id_buffer = None
|
|
579
637
|
else:
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
638
|
+
|
|
639
|
+
# There may be a buffer from a previous chunk, for example
|
|
640
|
+
# if the previous chunk had arguments but we needed to flush name
|
|
641
|
+
if self.function_args_buffer:
|
|
642
|
+
# In this case, we should release the buffer + new data at once
|
|
643
|
+
combined_chunk = self.function_args_buffer + updates_main_json
|
|
644
|
+
processed_chunk = ToolCallMessage(
|
|
645
|
+
id=message_id,
|
|
646
|
+
date=message_date,
|
|
647
|
+
tool_call=ToolCallDelta(
|
|
648
|
+
name=None,
|
|
649
|
+
arguments=combined_chunk,
|
|
650
|
+
tool_call_id=self.function_id_buffer,
|
|
651
|
+
),
|
|
652
|
+
)
|
|
653
|
+
# clear buffer
|
|
654
|
+
self.function_args_buffer = None
|
|
655
|
+
self.function_id_buffer = None
|
|
656
|
+
else:
|
|
657
|
+
# If there's no buffer to clear, just output a new chunk with new data
|
|
658
|
+
processed_chunk = ToolCallMessage(
|
|
659
|
+
id=message_id,
|
|
660
|
+
date=message_date,
|
|
661
|
+
tool_call=ToolCallDelta(
|
|
662
|
+
name=None,
|
|
663
|
+
arguments=updates_main_json,
|
|
664
|
+
tool_call_id=self.function_id_buffer,
|
|
665
|
+
),
|
|
666
|
+
)
|
|
667
|
+
self.function_id_buffer = None
|
|
591
668
|
|
|
592
669
|
# # If there's something in the main_json buffer, we should add if to the arguments and release it together
|
|
593
670
|
# tool_call_delta = {}
|
|
@@ -906,6 +983,8 @@ class StreamingServerInterface(AgentChunkStreamingInterface):
|
|
|
906
983
|
date=msg_obj.created_at,
|
|
907
984
|
assistant_message=func_args[self.assistant_message_tool_kwarg],
|
|
908
985
|
)
|
|
986
|
+
# Store the ID of the tool call so allow skipping the corresponding response
|
|
987
|
+
self.prev_assistant_message_id = function_call.id
|
|
909
988
|
else:
|
|
910
989
|
processed_chunk = ToolCallMessage(
|
|
911
990
|
id=msg_obj.id,
|
|
@@ -938,13 +1017,23 @@ class StreamingServerInterface(AgentChunkStreamingInterface):
|
|
|
938
1017
|
msg = msg.replace("Success: ", "")
|
|
939
1018
|
# new_message = {"function_return": msg, "status": "success"}
|
|
940
1019
|
assert msg_obj.tool_call_id is not None
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
1020
|
+
|
|
1021
|
+
print(f"YYY printing the function call - {msg_obj.tool_call_id} == {self.prev_assistant_message_id} ???")
|
|
1022
|
+
|
|
1023
|
+
# Skip this is use_assistant_message is on
|
|
1024
|
+
if self.use_assistant_message and msg_obj.tool_call_id == self.prev_assistant_message_id:
|
|
1025
|
+
# Wipe the cache
|
|
1026
|
+
self.prev_assistant_message_id = None
|
|
1027
|
+
# Skip this tool call receipt
|
|
1028
|
+
return
|
|
1029
|
+
else:
|
|
1030
|
+
new_message = ToolReturnMessage(
|
|
1031
|
+
id=msg_obj.id,
|
|
1032
|
+
date=msg_obj.created_at,
|
|
1033
|
+
tool_return=msg,
|
|
1034
|
+
status="success",
|
|
1035
|
+
tool_call_id=msg_obj.tool_call_id,
|
|
1036
|
+
)
|
|
948
1037
|
|
|
949
1038
|
elif msg.startswith("Error: "):
|
|
950
1039
|
msg = msg.replace("Error: ", "", 1)
|
letta/server/server.py
CHANGED
|
@@ -1215,7 +1215,6 @@ class SyncServer(Server):
|
|
|
1215
1215
|
stream_tokens: bool,
|
|
1216
1216
|
# related to whether or not we return `LettaMessage`s or `Message`s
|
|
1217
1217
|
chat_completion_mode: bool = False,
|
|
1218
|
-
timestamp: Optional[datetime] = None,
|
|
1219
1218
|
# Support for AssistantMessage
|
|
1220
1219
|
use_assistant_message: bool = True,
|
|
1221
1220
|
assistant_message_tool_name: str = constants.DEFAULT_MESSAGE_TOOL,
|
|
@@ -1249,7 +1248,16 @@ class SyncServer(Server):
|
|
|
1249
1248
|
stream_tokens = False
|
|
1250
1249
|
|
|
1251
1250
|
# Create a new interface per request
|
|
1252
|
-
letta_agent.interface = StreamingServerInterface(
|
|
1251
|
+
letta_agent.interface = StreamingServerInterface(
|
|
1252
|
+
# multi_step=True, # would we ever want to disable this?
|
|
1253
|
+
use_assistant_message=use_assistant_message,
|
|
1254
|
+
assistant_message_tool_name=assistant_message_tool_name,
|
|
1255
|
+
assistant_message_tool_kwarg=assistant_message_tool_kwarg,
|
|
1256
|
+
inner_thoughts_in_kwargs=(
|
|
1257
|
+
llm_config.put_inner_thoughts_in_kwargs if llm_config.put_inner_thoughts_in_kwargs is not None else False
|
|
1258
|
+
),
|
|
1259
|
+
# inner_thoughts_kwarg=INNER_THOUGHTS_KWARG,
|
|
1260
|
+
)
|
|
1253
1261
|
streaming_interface = letta_agent.interface
|
|
1254
1262
|
if not isinstance(streaming_interface, StreamingServerInterface):
|
|
1255
1263
|
raise ValueError(f"Agent has wrong type of interface: {type(streaming_interface)}")
|
|
@@ -1263,13 +1271,14 @@ class SyncServer(Server):
|
|
|
1263
1271
|
# streaming_interface.function_call_legacy_mode = stream
|
|
1264
1272
|
|
|
1265
1273
|
# Allow AssistantMessage is desired by client
|
|
1266
|
-
streaming_interface.
|
|
1267
|
-
streaming_interface.
|
|
1274
|
+
# streaming_interface.use_assistant_message = use_assistant_message
|
|
1275
|
+
# streaming_interface.assistant_message_tool_name = assistant_message_tool_name
|
|
1276
|
+
# streaming_interface.assistant_message_tool_kwarg = assistant_message_tool_kwarg
|
|
1268
1277
|
|
|
1269
1278
|
# Related to JSON buffer reader
|
|
1270
|
-
streaming_interface.inner_thoughts_in_kwargs = (
|
|
1271
|
-
|
|
1272
|
-
)
|
|
1279
|
+
# streaming_interface.inner_thoughts_in_kwargs = (
|
|
1280
|
+
# llm_config.put_inner_thoughts_in_kwargs if llm_config.put_inner_thoughts_in_kwargs is not None else False
|
|
1281
|
+
# )
|
|
1273
1282
|
|
|
1274
1283
|
# Offload the synchronous message_func to a separate thread
|
|
1275
1284
|
streaming_interface.stream_start()
|
letta/streaming_utils.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Optional
|
|
1
|
+
from typing import Optional, Tuple
|
|
2
2
|
|
|
3
3
|
from letta.constants import DEFAULT_MESSAGE_TOOL_KWARG
|
|
4
4
|
|
|
@@ -48,7 +48,7 @@ class JSONInnerThoughtsExtractor:
|
|
|
48
48
|
self.hold_main_json = wait_for_first_key
|
|
49
49
|
self.main_json_held_buffer = ""
|
|
50
50
|
|
|
51
|
-
def process_fragment(self, fragment):
|
|
51
|
+
def process_fragment(self, fragment: str) -> Tuple[str, str]:
|
|
52
52
|
updates_main_json = ""
|
|
53
53
|
updates_inner_thoughts = ""
|
|
54
54
|
i = 0
|
|
@@ -263,8 +263,10 @@ class FunctionArgumentsStreamHandler:
|
|
|
263
263
|
self.key_buffer = ""
|
|
264
264
|
self.accumulating = True
|
|
265
265
|
return None
|
|
266
|
+
|
|
266
267
|
if chunk.strip() == "}":
|
|
267
268
|
self.in_message = False
|
|
268
269
|
self.message_started = False
|
|
269
270
|
return None
|
|
271
|
+
|
|
270
272
|
return None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: letta-nightly
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.12.dev20250120222244
|
|
4
4
|
Summary: Create LLM agents with long-term memory and custom tools
|
|
5
5
|
License: Apache License
|
|
6
6
|
Author: Letta Team
|
|
@@ -25,6 +25,7 @@ Requires-Dist: anthropic (>=0.43.0,<0.44.0)
|
|
|
25
25
|
Requires-Dist: autoflake (>=2.3.0,<3.0.0) ; extra == "dev" or extra == "all"
|
|
26
26
|
Requires-Dist: black[jupyter] (>=24.2.0,<25.0.0) ; extra == "dev" or extra == "all"
|
|
27
27
|
Requires-Dist: brotli (>=1.1.0,<2.0.0)
|
|
28
|
+
Requires-Dist: colorama (>=0.4.6,<0.5.0)
|
|
28
29
|
Requires-Dist: composio-core (>=0.6.15,<0.7.0)
|
|
29
30
|
Requires-Dist: composio-langchain (>=0.6.15,<0.7.0)
|
|
30
31
|
Requires-Dist: datasets (>=2.14.6,<3.0.0) ; extra == "dev" or extra == "all"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
letta/__init__.py,sha256=
|
|
1
|
+
letta/__init__.py,sha256=hzPeIYFlPTm3BdvaQW2D0Bu22kxEQdlkwfwDxyYtbJk,993
|
|
2
2
|
letta/__main__.py,sha256=6Hs2PV7EYc5Tid4g4OtcLXhqVHiNYTGzSBdoOnW2HXA,29
|
|
3
3
|
letta/agent.py,sha256=m4g4gbx4Y0SFPsGzNi6lmkwVSWPfvh2bYoQTKf1CL6A,57854
|
|
4
4
|
letta/benchmark/benchmark.py,sha256=ebvnwfp3yezaXOQyGXkYCDYpsmre-b9hvNtnyx4xkG0,3701
|
|
@@ -9,7 +9,7 @@ letta/cli/cli_config.py,sha256=I5J8D0OpsDDXCTOWFqjmxQuZCGrC1oCuNbVkrKwg4VM,8544
|
|
|
9
9
|
letta/cli/cli_load.py,sha256=xFw-CuzjChcIptaqQ1XpDROENt0JSjyPeiQ0nmEeO1k,2706
|
|
10
10
|
letta/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
11
|
letta/client/client.py,sha256=EPLzfx_05J4ihIJtKwQ5rI_ncPxeK9-zLNyYaQ-ubg4,135712
|
|
12
|
-
letta/client/streaming.py,sha256=
|
|
12
|
+
letta/client/streaming.py,sha256=mWyMMCJeYf0aGcX_-9ZeiH3egh2Fl20Yjo1acaPO4nA,4824
|
|
13
13
|
letta/client/utils.py,sha256=VCGV-op5ZSmurd4yw7Vhf93XDQ0BkyBT8qsuV7EqfiU,2859
|
|
14
14
|
letta/config.py,sha256=JFGY4TWW0Wm5fTbZamOwWqk5G8Nn-TXyhgByGoAqy2c,12375
|
|
15
15
|
letta/constants.py,sha256=qkH98awgWUW1g9Qpb-IWqVULcLHH-lpblWeUZdLDzkY,7528
|
|
@@ -175,11 +175,11 @@ letta/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
175
175
|
letta/server/constants.py,sha256=yAdGbLkzlOU_dLTx0lKDmAnj0ZgRXCEaIcPJWO69eaE,92
|
|
176
176
|
letta/server/generate_openapi_schema.sh,sha256=0OtBhkC1g6CobVmNEd_m2B6sTdppjbJLXaM95icejvE,371
|
|
177
177
|
letta/server/rest_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
178
|
-
letta/server/rest_api/app.py,sha256=
|
|
178
|
+
letta/server/rest_api/app.py,sha256=iFc5YNC2Wa5R0yWL3S1IrTMUHPWPWTHg5EkYbPw61ak,11850
|
|
179
179
|
letta/server/rest_api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
180
180
|
letta/server/rest_api/auth/index.py,sha256=fQBGyVylGSRfEMLQ17cZzrHd5Y1xiVylvPqH5Rl-lXQ,1378
|
|
181
181
|
letta/server/rest_api/auth_token.py,sha256=725EFEIiNj4dh70hrSd94UysmFD8vcJLrTRfNHkzxDo,774
|
|
182
|
-
letta/server/rest_api/interface.py,sha256=
|
|
182
|
+
letta/server/rest_api/interface.py,sha256=1p8Bt7uLNLJsKa-TnLXobiLfO91laclK-AiE-jbJr18,51494
|
|
183
183
|
letta/server/rest_api/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
184
184
|
letta/server/rest_api/routers/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
185
185
|
letta/server/rest_api/routers/openai/assistants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -203,7 +203,7 @@ letta/server/rest_api/routers/v1/tools.py,sha256=rGw3hDUFYmY_kmJw5hsQWnBOWQqJFdf
|
|
|
203
203
|
letta/server/rest_api/routers/v1/users.py,sha256=EBQe9IfCG3kzHpKmotz4yVGZioXz3SCSRy5yEhJK8hU,2293
|
|
204
204
|
letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
|
|
205
205
|
letta/server/rest_api/utils.py,sha256=dsjkZzgo9Rk3fjUf1ajjiiql1eeO5DAzmXprttI7bJU,3993
|
|
206
|
-
letta/server/server.py,sha256=
|
|
206
|
+
letta/server/server.py,sha256=_Ubvl4CVQAh4BBKNzCnGHD47de2h6vuP2SvSnMZtA8U,57622
|
|
207
207
|
letta/server/startup.sh,sha256=722uKJWB2C4q3vjn39De2zzPacaZNw_1fN1SpLGjKIo,1569
|
|
208
208
|
letta/server/static_files/assets/index-048c9598.js,sha256=mR16XppvselwKCcNgONs4L7kZEVa4OEERm4lNZYtLSk,146819
|
|
209
209
|
letta/server/static_files/assets/index-0e31b727.css,sha256=SBbja96uiQVLDhDOroHgM6NSl7tS4lpJRCREgSS_hA8,7672
|
|
@@ -234,11 +234,11 @@ letta/services/tool_manager.py,sha256=CdI6aYQZr2Ar9-iDSMnjMcLIh8n8y_gkKte6FnUy9u
|
|
|
234
234
|
letta/services/user_manager.py,sha256=oqLF9C4mGbN0TaGj7wMpb2RH2bUg6OJJcdyaWv370rQ,4272
|
|
235
235
|
letta/settings.py,sha256=LJAMa0APYBPn9oFtpAGotH10drrzaoFGL88RFoc8QTI,4733
|
|
236
236
|
letta/streaming_interface.py,sha256=lo2VAQRUJOdWTijwnXuKOC9uejqr2siUAEmZiQUXkj8,15710
|
|
237
|
-
letta/streaming_utils.py,sha256=
|
|
237
|
+
letta/streaming_utils.py,sha256=pJExJe6OgWDyRgzxbsSuT5JrVsXNlZP4hrT4Xu_z3Po,11778
|
|
238
238
|
letta/system.py,sha256=buKYPqG5n2x41hVmWpu6JUpyd7vTWED9Km2_M7dLrvk,6960
|
|
239
239
|
letta/utils.py,sha256=FQgWuYF0CTCIyH41rVy_rD5_ATPIlBZ24ovBtf3T1tI,33291
|
|
240
|
-
letta_nightly-0.6.
|
|
241
|
-
letta_nightly-0.6.
|
|
242
|
-
letta_nightly-0.6.
|
|
243
|
-
letta_nightly-0.6.
|
|
244
|
-
letta_nightly-0.6.
|
|
240
|
+
letta_nightly-0.6.12.dev20250120222244.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
|
|
241
|
+
letta_nightly-0.6.12.dev20250120222244.dist-info/METADATA,sha256=TCGBysenArOWc2TOkQ7PkfQnCd5v6NCM0MetiKt1-Jw,21836
|
|
242
|
+
letta_nightly-0.6.12.dev20250120222244.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
243
|
+
letta_nightly-0.6.12.dev20250120222244.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
|
|
244
|
+
letta_nightly-0.6.12.dev20250120222244.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|