letta-nightly 0.1.7.dev20241002104051__py3-none-any.whl → 0.4.1.dev20241004012408__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 CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.1.17"
1
+ __version__ = "0.4.1"
2
2
 
3
3
  # import clients
4
4
  from letta.client.admin import Admin
@@ -2,11 +2,11 @@
2
2
 
3
3
  import time
4
4
  import uuid
5
- from typing import Annotated
5
+ from typing import Annotated, Union
6
6
 
7
7
  import typer
8
8
 
9
- from letta import create_client
9
+ from letta import LocalClient, RESTClient, create_client
10
10
  from letta.benchmark.constants import HUMAN, PERSONA, PROMPTS, TRIES
11
11
  from letta.config import LettaConfig
12
12
 
@@ -17,11 +17,13 @@ from letta.utils import get_human_text, get_persona_text
17
17
  app = typer.Typer()
18
18
 
19
19
 
20
- def send_message(message: str, agent_id, turn: int, fn_type: str, print_msg: bool = False, n_tries: int = TRIES):
20
+ def send_message(
21
+ client: Union[LocalClient, RESTClient], message: str, agent_id, turn: int, fn_type: str, print_msg: bool = False, n_tries: int = TRIES
22
+ ):
21
23
  try:
22
24
  print_msg = f"\t-> Now running {fn_type}. Progress: {turn}/{n_tries}"
23
25
  print(print_msg, end="\r", flush=True)
24
- response = client.user_message(agent_id=agent_id, message=message, return_token_count=True)
26
+ response = client.user_message(agent_id=agent_id, message=message)
25
27
 
26
28
  if turn + 1 == n_tries:
27
29
  print(" " * len(print_msg), end="\r", flush=True)
@@ -65,7 +67,7 @@ def bench(
65
67
 
66
68
  agent_id = agent.id
67
69
  result, msg = send_message(
68
- message=message, agent_id=agent_id, turn=i, fn_type=fn_type, print_msg=print_messages, n_tries=n_tries
70
+ client=client, message=message, agent_id=agent_id, turn=i, fn_type=fn_type, print_msg=print_messages, n_tries=n_tries
69
71
  )
70
72
 
71
73
  if print_messages:
@@ -3,6 +3,31 @@ from typing import Any, Optional, Union
3
3
  from pydantic import BaseModel
4
4
 
5
5
 
6
+ def generate_composio_tool_wrapper(action: "ActionType") -> tuple[str, str]:
7
+ # Instantiate the object
8
+ tool_instantiation_str = f"composio_toolset.get_tools(actions=[Action.{action.name}])[0]"
9
+
10
+ # Generate func name
11
+ func_name = f"run_{action.name}"
12
+
13
+ wrapper_function_str = f"""
14
+ def {func_name}(**kwargs):
15
+ if 'self' in kwargs:
16
+ del kwargs['self']
17
+ from composio import Action, App, Tag
18
+ from composio_langchain import ComposioToolSet
19
+
20
+ composio_toolset = ComposioToolSet()
21
+ tool = {tool_instantiation_str}
22
+ tool.func(**kwargs)
23
+ """
24
+
25
+ # Compile safety check
26
+ assert_code_gen_compilable(wrapper_function_str)
27
+
28
+ return func_name, wrapper_function_str
29
+
30
+
6
31
  def generate_langchain_tool_wrapper(
7
32
  tool: "LangChainBaseTool", additional_imports_module_attr_map: dict[str, str] = None
8
33
  ) -> tuple[str, str]:
@@ -28,6 +53,10 @@ def {func_name}(**kwargs):
28
53
  {tool_instantiation}
29
54
  {run_call}
30
55
  """
56
+
57
+ # Compile safety check
58
+ assert_code_gen_compilable(wrapper_function_str)
59
+
31
60
  return func_name, wrapper_function_str
32
61
 
33
62
 
@@ -48,14 +77,26 @@ def generate_crewai_tool_wrapper(tool: "CrewAIBaseTool", additional_imports_modu
48
77
  def {func_name}(**kwargs):
49
78
  if 'self' in kwargs:
50
79
  del kwargs['self']
80
+ import importlib
51
81
  {import_statement}
52
82
  {extra_module_imports}
53
83
  {tool_instantiation}
54
84
  {run_call}
55
85
  """
86
+
87
+ # Compile safety check
88
+ assert_code_gen_compilable(wrapper_function_str)
89
+
56
90
  return func_name, wrapper_function_str
57
91
 
58
92
 
93
+ def assert_code_gen_compilable(code_str):
94
+ try:
95
+ compile(code_str, "<string>", "exec")
96
+ except SyntaxError as e:
97
+ print(f"Syntax error in code: {e}")
98
+
99
+
59
100
  def assert_all_classes_are_imported(
60
101
  tool: Union["LangChainBaseTool", "CrewAIBaseTool"], additional_imports_module_attr_map: dict[str, str]
61
102
  ) -> None:
@@ -129,7 +170,7 @@ def generate_imported_tool_instantiation_call_str(obj: Any) -> Optional[str]:
129
170
  # e.g. {arg}={value}
130
171
  # The reason why this is recursive, is because the value can be another BaseModel that we need to stringify
131
172
  model_name = obj.__class__.__name__
132
- fields = dict(obj)
173
+ fields = obj.dict()
133
174
  # Generate code for each field, skipping empty or None values
134
175
  field_assignments = []
135
176
  for arg, value in fields.items():
@@ -168,6 +209,11 @@ def generate_imported_tool_instantiation_call_str(obj: Any) -> Optional[str]:
168
209
  print(
169
210
  f"[WARNING] Skipping parsing unknown class {obj.__class__.__name__} (does not inherit from the Pydantic BaseModel and is not a basic Python type)"
170
211
  )
212
+ if obj.__class__.__name__ == "function":
213
+ import inspect
214
+
215
+ print(inspect.getsource(obj))
216
+
171
217
  return None
172
218
 
173
219
 
letta/llm_api/openai.py CHANGED
@@ -419,6 +419,8 @@ def openai_chat_completions_request(
419
419
  try:
420
420
  response = requests.post(url, headers=headers, json=data)
421
421
  printd(f"response = {response}, response.text = {response.text}")
422
+ # print(json.dumps(data, indent=4))
423
+ # raise requests.exceptions.HTTPError
422
424
  response.raise_for_status() # Raises HTTPError for 4XX/5XX status
423
425
 
424
426
  response = response.json() # convert to dict from string
letta/schemas/block.py CHANGED
@@ -46,15 +46,7 @@ class BaseBlock(LettaBase, validate_assignment=True):
46
46
  return self
47
47
 
48
48
  def __len__(self):
49
- return len(str(self))
50
-
51
- def __str__(self) -> str:
52
- if isinstance(self.value, list):
53
- return ",".join(self.value)
54
- elif isinstance(self.value, str):
55
- return self.value
56
- else:
57
- return ""
49
+ return len(self.value)
58
50
 
59
51
  def __setattr__(self, name, value):
60
52
  """Run validation if self.value is updated"""
@@ -0,0 +1,10 @@
1
+ from pydantic import BaseModel
2
+
3
+
4
+ class Health(BaseModel):
5
+ """
6
+ Health check response body
7
+ """
8
+
9
+ version: str
10
+ status: str
letta/schemas/tool.py CHANGED
@@ -3,6 +3,7 @@ from typing import Dict, List, Optional
3
3
  from pydantic import Field
4
4
 
5
5
  from letta.functions.helpers import (
6
+ generate_composio_tool_wrapper,
6
7
  generate_crewai_tool_wrapper,
7
8
  generate_langchain_tool_wrapper,
8
9
  )
@@ -57,6 +58,54 @@ class Tool(BaseTool):
57
58
  )
58
59
  )
59
60
 
61
+ @classmethod
62
+ def get_composio_tool(
63
+ cls,
64
+ action: "ActionType",
65
+ ) -> "Tool":
66
+ """
67
+ Class method to create an instance of Letta-compatible Composio Tool.
68
+ Check https://docs.composio.dev/introduction/intro/overview to look at options for get_composio_tool
69
+
70
+ This function will error if we find more than one tool, or 0 tools.
71
+
72
+ Args:
73
+ action ActionType: A action name to filter tools by.
74
+ Returns:
75
+ Tool: A Letta Tool initialized with attributes derived from the Composio tool.
76
+ """
77
+ from composio_langchain import ComposioToolSet
78
+
79
+ composio_toolset = ComposioToolSet()
80
+ composio_tools = composio_toolset.get_tools(actions=[action])
81
+
82
+ assert len(composio_tools) > 0, "User supplied parameters do not match any Composio tools"
83
+ assert len(composio_tools) == 1, f"User supplied parameters match too many Composio tools; {len(composio_tools)} > 1"
84
+
85
+ composio_tool = composio_tools[0]
86
+
87
+ description = composio_tool.description
88
+ source_type = "python"
89
+ tags = ["composio"]
90
+ wrapper_func_name, wrapper_function_str = generate_composio_tool_wrapper(action)
91
+ json_schema = generate_schema_from_args_schema(composio_tool.args_schema, name=wrapper_func_name, description=description)
92
+
93
+ # append heartbeat (necessary for triggering another reasoning step after this tool call)
94
+ json_schema["parameters"]["properties"]["request_heartbeat"] = {
95
+ "type": "boolean",
96
+ "description": "Request an immediate heartbeat after function execution. Set to 'true' if you want to send a follow-up message or run a follow-up function.",
97
+ }
98
+ json_schema["parameters"]["required"].append("request_heartbeat")
99
+
100
+ return cls(
101
+ name=wrapper_func_name,
102
+ description=description,
103
+ source_type=source_type,
104
+ tags=tags,
105
+ source_code=wrapper_function_str,
106
+ json_schema=json_schema,
107
+ )
108
+
60
109
  @classmethod
61
110
  def from_langchain(cls, langchain_tool: "LangChainBaseTool", additional_imports_module_attr_map: dict[str, str] = None) -> "Tool":
62
111
  """
@@ -1,5 +1,6 @@
1
1
  from letta.server.rest_api.routers.v1.agents import router as agents_router
2
2
  from letta.server.rest_api.routers.v1.blocks import router as blocks_router
3
+ from letta.server.rest_api.routers.v1.health import router as health_router
3
4
  from letta.server.rest_api.routers.v1.jobs import router as jobs_router
4
5
  from letta.server.rest_api.routers.v1.llms import router as llm_router
5
6
  from letta.server.rest_api.routers.v1.sources import router as sources_router
@@ -12,4 +13,5 @@ ROUTERS = [
12
13
  llm_router,
13
14
  blocks_router,
14
15
  jobs_router,
16
+ health_router,
15
17
  ]
@@ -0,0 +1,20 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ from fastapi import APIRouter
4
+
5
+ from letta.cli.cli import version
6
+ from letta.schemas.health import Health
7
+
8
+ if TYPE_CHECKING:
9
+ pass
10
+
11
+ router = APIRouter(prefix="/health", tags=["health"])
12
+
13
+
14
+ # Health check
15
+ @router.get("/", response_model=Health, operation_id="health_check")
16
+ def health_check():
17
+ return Health(
18
+ version=version(),
19
+ status="ok",
20
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.1.7.dev20241002104051
3
+ Version: 0.4.1.dev20241004012408
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -23,6 +23,8 @@ Provides-Extra: tests
23
23
  Requires-Dist: autoflake (>=2.3.0,<3.0.0) ; extra == "dev"
24
24
  Requires-Dist: black[jupyter] (>=24.2.0,<25.0.0) ; extra == "dev"
25
25
  Requires-Dist: chromadb (>=0.4.24,<0.5.0)
26
+ Requires-Dist: composio-core (>=0.5.28,<0.6.0) ; extra == "external-tools"
27
+ Requires-Dist: composio-langchain (>=0.5.28,<0.6.0) ; extra == "external-tools"
26
28
  Requires-Dist: crewai (>=0.41.1,<0.42.0) ; extra == "external-tools"
27
29
  Requires-Dist: crewai-tools (>=0.8.3,<0.9.0) ; extra == "external-tools"
28
30
  Requires-Dist: datasets (>=2.14.6,<3.0.0) ; extra == "dev"
@@ -1,4 +1,4 @@
1
- letta/__init__.py,sha256=GLC0hUCM1OicDGDXuV0_AX6m4Irjqy2K_GSy43nbdLc,997
1
+ letta/__init__.py,sha256=btKRPdyhkpIyHlCPRLwwz-SCSVcEGNBeheYA-XNesiI,996
2
2
  letta/__main__.py,sha256=6Hs2PV7EYc5Tid4g4OtcLXhqVHiNYTGzSBdoOnW2HXA,29
3
3
  letta/agent.py,sha256=GdNhMG_ypSmkU8FDqNf3BQMMftRsIrNAbzyhqlIv2jE,65251
4
4
  letta/agent_store/chroma.py,sha256=upR5zGnGs6I6btulEYbiZdGG87BgKjxUJOQZ4Y-RQ_M,12492
@@ -7,7 +7,7 @@ letta/agent_store/lancedb.py,sha256=8RWmqVjowm5g0cc6DNRcb6f1FHGEqFnccnuekhWY39U,
7
7
  letta/agent_store/milvus.py,sha256=VxEKz9XR7_3QTY59K_38NtJCCQvi41rhHoFibfzW7yw,8469
8
8
  letta/agent_store/qdrant.py,sha256=qIEJhXJb6GzcT4wp8iV5Ox5W1CFMvcPViTI4HLSh59E,7879
9
9
  letta/agent_store/storage.py,sha256=QWrPdIEJCnsPg1xnPrG1xbOXmbjpz37ZNhvuH52M7A8,6642
10
- letta/benchmark/benchmark.py,sha256=JjCQE7piz2VHh3QCGwJX-9DelaSlUYV4Qw01hQuVolU,3633
10
+ letta/benchmark/benchmark.py,sha256=ebvnwfp3yezaXOQyGXkYCDYpsmre-b9hvNtnyx4xkG0,3701
11
11
  letta/benchmark/constants.py,sha256=aXc5gdpMGJT327VuxsT5FngbCK2J41PQYeICBO7g_RE,536
12
12
  letta/cli/cli.py,sha256=saohjAsXFs4_kwzd95xk4JSZnd0T0OYN4TTj-ZOYEpQ,31195
13
13
  letta/cli/cli_config.py,sha256=MSxqbS5F9jUSjCgLkd-6T5Hj3ca_l-AoSwXc6dgy13E,57093
@@ -30,7 +30,7 @@ letta/functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  letta/functions/function_sets/base.py,sha256=N4QmOjL6gDEyOg67ocF6zVKM-NquTo-yXG_T8r18buA,6440
31
31
  letta/functions/function_sets/extras.py,sha256=Jik3UiDqYTm4Lam1XPTvuVjvgUHwIAhopsnbmVhGMBg,4732
32
32
  letta/functions/functions.py,sha256=OU98c-Rds9UCQ8CufzdrpzSZsQ0a02uDv_x5VqoNFfw,3381
33
- letta/functions/helpers.py,sha256=YpUdt_XshDdsM4OJB6CFNNKB0c-heOqNKTgJeiFMzFc,8693
33
+ letta/functions/helpers.py,sha256=dzeQ1hsxI-20QcVzkS8y55aCJw3iGbtm4oqBobb_tIM,9876
34
34
  letta/functions/schema_generator.py,sha256=v3LXdA5UVQXqpBkURK2H5PZuZoLlpZygleG35T3vMBc,6488
35
35
  letta/humans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  letta/humans/examples/basic.txt,sha256=Lcp8YESTWvOJgO4Yf_yyQmgo5bKakeB1nIVrwEGG6PA,17
@@ -42,7 +42,7 @@ letta/llm_api/azure_openai.py,sha256=NjAVifNpjbTSGa9dZ4lS12sjwRWZBsmB1wlIGD4m4aI
42
42
  letta/llm_api/cohere.py,sha256=vDRd-SUGp1t_JUIdwC3RkIhwMl0OY7n-tAU9uPORYkY,14826
43
43
  letta/llm_api/google_ai.py,sha256=Ksf4vlYoWRe5JtiPOqxaArDnjUbAS8fxX_zwgt-2buQ,19100
44
44
  letta/llm_api/llm_api_tools.py,sha256=hoWYAG11YNN5YzOuemePKX2gPURCROvi0ra4XAMMsO8,20529
45
- letta/llm_api/openai.py,sha256=iJVKnfT0vQ447wkhv6_eZCI_K0gauV86IPuJ0BnPAuc,21064
45
+ letta/llm_api/openai.py,sha256=BViGY7gybFgK8qmvVn_HDAHGd_lcWxMRzrzF0imzfdY,21154
46
46
  letta/local_llm/README.md,sha256=hFJyw5B0TU2jrh9nb0zGZMgdH-Ei1dSRfhvPQG_NSoU,168
47
47
  letta/local_llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
48
  letta/local_llm/chat_completion_proxy.py,sha256=CQ3G9Ci6AUAd2DiJ8QOgpnUNFt6WaM0fNQeuP7ao6H4,13296
@@ -111,10 +111,11 @@ letta/prompts/system/memgpt_modified_chat.txt,sha256=HOaPVurEftD8KsuwsclDgE2afIf
111
111
  letta/pytest.ini,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
112
  letta/schemas/agent.py,sha256=OUnKIKK2WRtXp5F9tGiaWL-h80Ep5LZFK0K85vulzr4,5856
113
113
  letta/schemas/api_key.py,sha256=u07yzzMn-hBAHZIIKbWY16KsgiFjSNR8lAghpMUo3_4,682
114
- letta/schemas/block.py,sha256=1QuHtgEM3SXO0bI2eF_tZ6EVP0LOB39L08G6rLLyfiE,4205
114
+ letta/schemas/block.py,sha256=3u8bQoNh21a5Paa-QkAX76DWFC0sK0XA33Ct7TAfkvA,3986
115
115
  letta/schemas/document.py,sha256=JpvU0YkvOVLvHaDNcg-ihFzpeHC2zqsWBgyJ6zHnfNw,745
116
116
  letta/schemas/embedding_config.py,sha256=KhEOStOD8VbHFyLI9pkQVbTG1Av2g-Ql0yf9M868LME,2570
117
117
  letta/schemas/enums.py,sha256=WfRYpLh_pD-VyhEnp3Y6pPfx063zq2o4jky6PulqO8w,629
118
+ letta/schemas/health.py,sha256=zT6mYovvD17iJRuu2rcaQQzbEEYrkwvAE9TB7iU824c,139
118
119
  letta/schemas/job.py,sha256=bYDrjbJm2B4LUTSkLUdQR_HDhL2E23g0EHf7E23ezYU,1547
119
120
  letta/schemas/letta_base.py,sha256=4QXFgyjCHqIagi8B6_4nmqb9eoJ52Y6aCxBxQpGX48M,2832
120
121
  letta/schemas/letta_message.py,sha256=Slgxa59qZfdvqXuCVHOt03u-7JL456ZY-WLaK5UYYKU,6234
@@ -131,7 +132,7 @@ letta/schemas/openai/openai.py,sha256=Hilo5BiLAGabzxCwnwfzK5QrWqwYD8epaEKFa4Pwnd
131
132
  letta/schemas/organization.py,sha256=JSc3hLl0IO_c9iOqf367sU5tJ0Dx_kPzbokCEg0eS4g,601
132
133
  letta/schemas/passage.py,sha256=ZO8-WOToLgf-DzUkREp9MQF274SLYeZwnSoNo2sKPHc,3573
133
134
  letta/schemas/source.py,sha256=rAM3Xjt7zJ3JLXpUxWmdYIujns4ZuqGCsozmNAWX5kI,2570
134
- letta/schemas/tool.py,sha256=JZE93JgN2pOds2dMjXF4uoP6AK7F5I72DjfnLRIJDNk,6502
135
+ letta/schemas/tool.py,sha256=Xutv0JyoSmxgmUykQI_lYtn54bf85CG-2hZQs6TIbKc,8591
135
136
  letta/schemas/usage.py,sha256=lvn1ooHwLEdv6gwQpw5PBUbcwn_gwdT6HA-fCiix6sY,817
136
137
  letta/schemas/user.py,sha256=D7DiPzieXZIHOLInJdYZlHjKOy2bl7KxGCesNk0yf5E,1003
137
138
  letta/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -154,9 +155,10 @@ letta/server/rest_api/routers/openai/assistants/schemas.py,sha256=d3LdBLUI-mMUCP
154
155
  letta/server/rest_api/routers/openai/assistants/threads.py,sha256=5-5XsbEDLIZ_xyur5LJVELWLc5PyDc-mkqLQ9t4awmw,13554
155
156
  letta/server/rest_api/routers/openai/chat_completions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
157
  letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=5RxCClOm0JCDzLAbh1K8C-dGIrERKUxC4DJPlMcPcgw,4758
157
- letta/server/rest_api/routers/v1/__init__.py,sha256=xzNnC4_aIbWJNhpoh0o3hGjLpS8X2gFtxsNS5IGCWPI,571
158
+ letta/server/rest_api/routers/v1/__init__.py,sha256=sqlVZa-u9DJwdRsp0_8YUGrac9DHguIB4wETlEDRylA,666
158
159
  letta/server/rest_api/routers/v1/agents.py,sha256=AsLvhZjXBRd7_hbxrvKvccKQtkcjkHpZmEqm6xe5w8U,19462
159
160
  letta/server/rest_api/routers/v1/blocks.py,sha256=xY-9k2e2dTRsU9Zh-kT164Z977O0Ed_YYBjLaWKbDpE,2293
161
+ letta/server/rest_api/routers/v1/health.py,sha256=pKCuVESlVOhGIb4VC4K-H82eZqfghmT6kvj2iOkkKuc,401
160
162
  letta/server/rest_api/routers/v1/jobs.py,sha256=YHEKALAkSCvF_gzIhvsTkqaLdIhFBYrTNmwCtnzohhM,1574
161
163
  letta/server/rest_api/routers/v1/llms.py,sha256=1O1YiSNeJBnSZY1dFiH58Gk3dodR2GrsgAkG-hR9p9c,797
162
164
  letta/server/rest_api/routers/v1/organizations.py,sha256=i3S9E1hu2Zj9g0pRv6wnQhz1VJ_RMIHCrGzgwY-Wj3Y,1945
@@ -182,8 +184,8 @@ letta/settings.py,sha256=1S0CN3fCGdZIdhIWPNJO5k2vmosrNRux4arnCj7dYQg,6502
182
184
  letta/streaming_interface.py,sha256=LPY1NmXtptcjdHrfVOOKL4-v3AyUD8SIyQMt1Dypd1A,15532
183
185
  letta/system.py,sha256=buKYPqG5n2x41hVmWpu6JUpyd7vTWED9Km2_M7dLrvk,6960
184
186
  letta/utils.py,sha256=LyqSRz_FejtsdelKigpV86kT8GRVrLwkXIOVQLHPm7Q,30661
185
- letta_nightly-0.1.7.dev20241002104051.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
186
- letta_nightly-0.1.7.dev20241002104051.dist-info/METADATA,sha256=CZRkBRUH41egw16NT07RzK7gInHg883ZJl2ksmU2mbc,5812
187
- letta_nightly-0.1.7.dev20241002104051.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
188
- letta_nightly-0.1.7.dev20241002104051.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
189
- letta_nightly-0.1.7.dev20241002104051.dist-info/RECORD,,
187
+ letta_nightly-0.4.1.dev20241004012408.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
188
+ letta_nightly-0.4.1.dev20241004012408.dist-info/METADATA,sha256=qx7pv3QJc_760ltIgPfj8SYiNVDbSZZho8o5Ybv07FA,5967
189
+ letta_nightly-0.4.1.dev20241004012408.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
190
+ letta_nightly-0.4.1.dev20241004012408.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
191
+ letta_nightly-0.4.1.dev20241004012408.dist-info/RECORD,,