letta-nightly 0.5.1.dev20241025104130__py3-none-any.whl → 0.5.1.dev20241027104016__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.

@@ -0,0 +1,193 @@
1
+ import importlib
2
+ import inspect
3
+ import warnings
4
+ from typing import List, Optional
5
+
6
+ from letta.functions.functions import derive_openai_json_schema, load_function_set
7
+
8
+ # TODO: Remove this once we translate all of these to the ORM
9
+ from letta.orm.errors import NoResultFound
10
+ from letta.orm.organization import Organization as OrganizationModel
11
+ from letta.orm.tool import Tool as ToolModel
12
+ from letta.orm.user import User as UserModel
13
+ from letta.schemas.tool import Tool as PydanticTool
14
+ from letta.schemas.tool import ToolCreate, ToolUpdate
15
+ from letta.utils import enforce_types
16
+
17
+
18
+ class ToolManager:
19
+ """Manager class to handle business logic related to Tools."""
20
+
21
+ def __init__(self):
22
+ # Fetching the db_context similarly as in OrganizationManager
23
+ from letta.server.server import db_context
24
+
25
+ self.session_maker = db_context
26
+
27
+ @enforce_types
28
+ def create_or_update_tool(self, tool_create: ToolCreate) -> PydanticTool:
29
+ """Create a new tool based on the ToolCreate schema."""
30
+ # Derive json_schema
31
+ derived_json_schema = tool_create.json_schema or derive_openai_json_schema(tool_create)
32
+ derived_name = tool_create.name or derived_json_schema["name"]
33
+
34
+ try:
35
+ # NOTE: We use the organization id here
36
+ # This is important, because even if it's a different user, adding the same tool to the org should not happen
37
+ tool = self.get_tool_by_name_and_org_id(tool_name=derived_name, organization_id=tool_create.organization_id)
38
+ # Put to dict and remove fields that should not be reset
39
+ update_data = tool_create.model_dump(exclude={"user_id", "organization_id", "module", "terminal"}, exclude_unset=True)
40
+ # Remove redundant update fields
41
+ update_data = {key: value for key, value in update_data.items() if getattr(tool, key) != value}
42
+
43
+ # If there's anything to update
44
+ if update_data:
45
+ self.update_tool_by_id(tool.id, ToolUpdate(**update_data))
46
+ else:
47
+ warnings.warn(
48
+ f"`create_or_update_tool` was called with user_id={tool_create.user_id}, organization_id={tool_create.organization_id}, name={tool_create.name}, but found existing tool with nothing to update."
49
+ )
50
+ except NoResultFound:
51
+ tool_create.json_schema = derived_json_schema
52
+ tool_create.name = derived_name
53
+ tool = self.create_tool(tool_create)
54
+
55
+ return tool
56
+
57
+ @enforce_types
58
+ def create_tool(self, tool_create: ToolCreate) -> PydanticTool:
59
+ """Create a new tool based on the ToolCreate schema."""
60
+ # Create the tool
61
+ with self.session_maker() as session:
62
+ # Include all fields except 'terminal' (which is not part of ToolModel) at the moment
63
+ create_data = tool_create.model_dump(exclude={"terminal"})
64
+ tool = ToolModel(**create_data) # Unpack everything directly into ToolModel
65
+ tool.create(session)
66
+
67
+ return tool.to_pydantic()
68
+
69
+ @enforce_types
70
+ def get_tool_by_id(self, tool_id: str) -> PydanticTool:
71
+ """Fetch a tool by its ID."""
72
+ with self.session_maker() as session:
73
+ try:
74
+ # Retrieve tool by id using the Tool model's read method
75
+ tool = ToolModel.read(db_session=session, identifier=tool_id)
76
+ # Convert the SQLAlchemy Tool object to PydanticTool
77
+ return tool.to_pydantic()
78
+ except NoResultFound:
79
+ raise ValueError(f"Tool with id {tool_id} not found.")
80
+
81
+ @enforce_types
82
+ def get_tool_by_name_and_user_id(self, tool_name: str, user_id: str) -> PydanticTool:
83
+ """Retrieve a tool by its name and organization_id."""
84
+ with self.session_maker() as session:
85
+ # Use the list method to apply filters
86
+ results = ToolModel.list(db_session=session, name=tool_name, _user_id=UserModel.get_uid_from_identifier(user_id))
87
+
88
+ # Ensure only one result is returned (since there is a unique constraint)
89
+ if not results:
90
+ raise NoResultFound(f"Tool with name {tool_name} and user_id {user_id} not found.")
91
+
92
+ if len(results) > 1:
93
+ raise RuntimeError(
94
+ f"Multiple tools with name {tool_name} and user_id {user_id} were found. This is a serious error, and means that our table does not have uniqueness constraints properly set up. Please reach out to the letta development team if you see this error."
95
+ )
96
+
97
+ # Return the single result
98
+ return results[0]
99
+
100
+ @enforce_types
101
+ def get_tool_by_name_and_org_id(self, tool_name: str, organization_id: str) -> PydanticTool:
102
+ """Retrieve a tool by its name and organization_id."""
103
+ with self.session_maker() as session:
104
+ # Use the list method to apply filters
105
+ results = ToolModel.list(
106
+ db_session=session, name=tool_name, _organization_id=OrganizationModel.get_uid_from_identifier(organization_id)
107
+ )
108
+
109
+ # Ensure only one result is returned (since there is a unique constraint)
110
+ if not results:
111
+ raise NoResultFound(f"Tool with name {tool_name} and organization_id {organization_id} not found.")
112
+
113
+ if len(results) > 1:
114
+ raise RuntimeError(
115
+ f"Multiple tools with name {tool_name} and organization_id {organization_id} were found. This is a serious error, and means that our table does not have uniqueness constraints properly set up. Please reach out to the letta development team if you see this error."
116
+ )
117
+
118
+ # Return the single result
119
+ return results[0]
120
+
121
+ @enforce_types
122
+ def list_tools_for_org(self, organization_id: str, cursor: Optional[str] = None, limit: Optional[int] = 50) -> List[PydanticTool]:
123
+ """List all tools with optional pagination using cursor and limit."""
124
+ with self.session_maker() as session:
125
+ tools = ToolModel.list(
126
+ db_session=session, cursor=cursor, limit=limit, _organization_id=OrganizationModel.get_uid_from_identifier(organization_id)
127
+ )
128
+ return [tool.to_pydantic() for tool in tools]
129
+
130
+ @enforce_types
131
+ def update_tool_by_id(self, tool_id: str, tool_update: ToolUpdate) -> None:
132
+ """Update a tool by its ID with the given ToolUpdate object."""
133
+ with self.session_maker() as session:
134
+ # Fetch the tool by ID
135
+ tool = ToolModel.read(db_session=session, identifier=tool_id)
136
+
137
+ # Update tool attributes with only the fields that were explicitly set
138
+ update_data = tool_update.model_dump(exclude_unset=True, exclude_none=True)
139
+ for key, value in update_data.items():
140
+ setattr(tool, key, value)
141
+
142
+ # Save the updated tool to the database
143
+ tool.update(db_session=session)
144
+
145
+ @enforce_types
146
+ def delete_tool_by_id(self, tool_id: str) -> None:
147
+ """Delete a tool by its ID."""
148
+ with self.session_maker() as session:
149
+ try:
150
+ tool = ToolModel.read(db_session=session, identifier=tool_id)
151
+ tool.delete(db_session=session)
152
+ except NoResultFound:
153
+ raise ValueError(f"Tool with id {tool_id} not found.")
154
+
155
+ @enforce_types
156
+ def add_default_tools(self, user_id: str, org_id: str, module_name="base"):
157
+ """Add default tools in {module_name}.py"""
158
+ full_module_name = f"letta.functions.function_sets.{module_name}"
159
+ try:
160
+ module = importlib.import_module(full_module_name)
161
+ except Exception as e:
162
+ # Handle other general exceptions
163
+ raise e
164
+
165
+ functions_to_schema = []
166
+ try:
167
+ # Load the function set
168
+ functions_to_schema = load_function_set(module)
169
+ except ValueError as e:
170
+ err = f"Error loading function set '{module_name}': {e}"
171
+ warnings.warn(err)
172
+
173
+ # create tool in db
174
+ for name, schema in functions_to_schema.items():
175
+ # print([str(inspect.getsource(line)) for line in schema["imports"]])
176
+ source_code = inspect.getsource(schema["python_function"])
177
+ tags = [module_name]
178
+ if module_name == "base":
179
+ tags.append("letta-base")
180
+
181
+ # create to tool
182
+ self.create_or_update_tool(
183
+ ToolCreate(
184
+ name=name,
185
+ tags=tags,
186
+ source_type="python",
187
+ module=schema["module"],
188
+ source_code=source_code,
189
+ json_schema=schema["json_schema"],
190
+ organization_id=org_id,
191
+ user_id=user_id,
192
+ ),
193
+ )
@@ -1,20 +1,20 @@
1
1
  from typing import List, Optional, Tuple
2
2
 
3
- from letta.constants import DEFAULT_ORG_ID, DEFAULT_USER_ID, DEFAULT_USER_NAME
4
-
5
- # TODO: Remove this once we translate all of these to the ORM
6
- from letta.metadata import AgentModel, AgentSourceMappingModel, SourceModel
7
3
  from letta.orm.errors import NoResultFound
8
4
  from letta.orm.organization import Organization as OrganizationModel
9
5
  from letta.orm.user import User as UserModel
10
6
  from letta.schemas.user import User as PydanticUser
11
7
  from letta.schemas.user import UserCreate, UserUpdate
8
+ from letta.services.organization_manager import OrganizationManager
12
9
  from letta.utils import enforce_types
13
10
 
14
11
 
15
12
  class UserManager:
16
13
  """Manager class to handle business logic related to Users."""
17
14
 
15
+ DEFAULT_USER_NAME = "default_user"
16
+ DEFAULT_USER_ID = "user-00000000-0000-4000-8000-000000000000"
17
+
18
18
  def __init__(self):
19
19
  # Fetching the db_context similarly as in OrganizationManager
20
20
  from letta.server.server import db_context
@@ -22,7 +22,7 @@ class UserManager:
22
22
  self.session_maker = db_context
23
23
 
24
24
  @enforce_types
25
- def create_default_user(self, org_id: str = DEFAULT_ORG_ID) -> PydanticUser:
25
+ def create_default_user(self, org_id: str = OrganizationManager.DEFAULT_ORG_ID) -> PydanticUser:
26
26
  """Create the default user."""
27
27
  with self.session_maker() as session:
28
28
  # Make sure the org id exists
@@ -33,10 +33,10 @@ class UserManager:
33
33
 
34
34
  # Try to retrieve the user
35
35
  try:
36
- user = UserModel.read(db_session=session, identifier=DEFAULT_USER_ID)
36
+ user = UserModel.read(db_session=session, identifier=self.DEFAULT_USER_ID)
37
37
  except NoResultFound:
38
38
  # If it doesn't exist, make it
39
- user = UserModel(id=DEFAULT_USER_ID, name=DEFAULT_USER_NAME, organization_id=org_id)
39
+ user = UserModel(id=self.DEFAULT_USER_ID, name=self.DEFAULT_USER_NAME, organization_id=org_id)
40
40
  user.create(session)
41
41
 
42
42
  return user.to_pydantic()
@@ -73,11 +73,11 @@ class UserManager:
73
73
  user = UserModel.read(db_session=session, identifier=user_id)
74
74
  user.delete(session)
75
75
 
76
- # TODO: Remove this once we have ORM models for the Agent, Source, and AgentSourceMapping
76
+ # TODO: Integrate this via the ORM models for the Agent, Source, and AgentSourceMapping
77
77
  # Cascade delete for related models: Agent, Source, AgentSourceMapping
78
- session.query(AgentModel).filter(AgentModel.user_id == user_id).delete()
79
- session.query(SourceModel).filter(SourceModel.user_id == user_id).delete()
80
- session.query(AgentSourceMappingModel).filter(AgentSourceMappingModel.user_id == user_id).delete()
78
+ # session.query(AgentModel).filter(AgentModel.user_id == user_id).delete()
79
+ # session.query(SourceModel).filter(SourceModel.user_id == user_id).delete()
80
+ # session.query(AgentSourceMappingModel).filter(AgentSourceMappingModel.user_id == user_id).delete()
81
81
 
82
82
  session.commit()
83
83
 
@@ -91,6 +91,11 @@ class UserManager:
91
91
  except NoResultFound:
92
92
  raise ValueError(f"User with id {user_id} not found.")
93
93
 
94
+ @enforce_types
95
+ def get_default_user(self) -> PydanticUser:
96
+ """Fetch the default user."""
97
+ return self.get_user_by_id(self.DEFAULT_USER_ID)
98
+
94
99
  @enforce_types
95
100
  def list_users(self, cursor: Optional[str] = None, limit: Optional[int] = 50) -> Tuple[Optional[str], List[PydanticUser]]:
96
101
  """List users with pagination using cursor (id) and limit."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.5.1.dev20241025104130
3
+ Version: 0.5.1.dev20241027104016
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -1,6 +1,6 @@
1
1
  letta/__init__.py,sha256=zlZXKr0iQIsC7FTkN9fjTvAgQGPXyr0nnkMJ7_OE1D0,1014
2
2
  letta/__main__.py,sha256=6Hs2PV7EYc5Tid4g4OtcLXhqVHiNYTGzSBdoOnW2HXA,29
3
- letta/agent.py,sha256=PRMDj0vZu5TGj-k2apeWcWYzJnBR36prdMXTKWnRYc8,72997
3
+ letta/agent.py,sha256=rU1XEgE-sIXGVq7oCSE1oeEJXezTIUGcPGCGYAbCJKY,72833
4
4
  letta/agent_store/chroma.py,sha256=upR5zGnGs6I6btulEYbiZdGG87BgKjxUJOQZ4Y-RQ_M,12492
5
5
  letta/agent_store/db.py,sha256=mTY3YWUs5n17479GMeTmxN8DAyzbBweVcypyNsK_slg,23435
6
6
  letta/agent_store/lancedb.py,sha256=i63d4VZwj9UIOTNs5f0JZ_r5yZD-jKWz4FAH4RMpXOE,5104
@@ -9,15 +9,15 @@ letta/agent_store/qdrant.py,sha256=6_33V-FEDpT9LG5zmr6-3y9slw1YFLswxpahiyMkvHA,7
9
9
  letta/agent_store/storage.py,sha256=4gKvMRYBGm9cwyaDOzljxDKgqr4MxGXcC4yGhAdKcAA,6693
10
10
  letta/benchmark/benchmark.py,sha256=ebvnwfp3yezaXOQyGXkYCDYpsmre-b9hvNtnyx4xkG0,3701
11
11
  letta/benchmark/constants.py,sha256=aXc5gdpMGJT327VuxsT5FngbCK2J41PQYeICBO7g_RE,536
12
- letta/cli/cli.py,sha256=A5u87nx6g7n_KfIfU2nmjWd2Wq8f5YnCvSBH86bOk28,16149
12
+ letta/cli/cli.py,sha256=145g2WAApbeEfOjVgxBzuv6BbbDr-cZSfT_ekfj945I,16162
13
13
  letta/cli/cli_config.py,sha256=ynsezKawQ0l95rymlv-AJ3QjbqiyaXZyuzsDfBYwMwg,8537
14
14
  letta/cli/cli_load.py,sha256=x4L8s15GwIW13xrhKYFWHo_y-IVGtoPDHWWKcHDRP10,4587
15
15
  letta/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- letta/client/client.py,sha256=CLOdsr3rVfWHQBPG-NN4sHKKn0Cn0VqIcjtHGxYaix4,93462
16
+ letta/client/client.py,sha256=lWd5Fv9UkkEn5oDPHjtbGhKNowwXA4sbhS3_OuCBStk,93707
17
17
  letta/client/streaming.py,sha256=bfWlUu7z7EoPfKxBqIarYxGKyrL7Pj79BlliToqcCgI,4592
18
18
  letta/client/utils.py,sha256=OJlAKWrldc4I6M1WpcTWNtPJ4wfxlzlZqWLfCozkFtI,2872
19
- letta/config.py,sha256=j2I90fOh9d9__kOYObwTDLbvVwYR50rIql5nzrvREKg,19161
20
- letta/constants.py,sha256=CLC--_fz5Gibaot0rJObjt53o-KO1LfxiAOJuwplHSI,6821
19
+ letta/config.py,sha256=eK-ip06ELHNYriInkgfidDvJxQ2tD1u49I-VLXB87nE,18929
20
+ letta/constants.py,sha256=hCV9OyPzv2bUBJNmQk9Ap1YBeUmgXquxnF50t5ApuuQ,6437
21
21
  letta/credentials.py,sha256=D9mlcPsdDWlIIXQQD8wSPE9M_QvsRrb0p3LB5i9OF5Q,5806
22
22
  letta/data_sources/connectors.py,sha256=qO81ASB6V-vDPthfHYtZiyqcQDQPTT0NuD8hVwC6xI0,9907
23
23
  letta/data_sources/connectors_helper.py,sha256=2TQjCt74fCgT5sw1AP8PalDEk06jPBbhrPG4HVr-WLs,3371
@@ -26,9 +26,9 @@ letta/errors.py,sha256=cDOo4cSYL-LA0w0b0GdsxXd5k2I1LLOY8nhtXk9YqYs,2875
26
26
  letta/functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  letta/functions/function_sets/base.py,sha256=N4QmOjL6gDEyOg67ocF6zVKM-NquTo-yXG_T8r18buA,6440
28
28
  letta/functions/function_sets/extras.py,sha256=Jik3UiDqYTm4Lam1XPTvuVjvgUHwIAhopsnbmVhGMBg,4732
29
- letta/functions/functions.py,sha256=BqO4jq0dNS29niwlNd0jIs5QIRn_dNaiJIhaZokQjqM,3397
30
- letta/functions/helpers.py,sha256=ypcf-BR-D99V8Zn6gwfNbUtxNcHawzElcQuiZrt3IGI,9899
31
- letta/functions/schema_generator.py,sha256=OBJnix2BpDJ3GAqlfLYrQLWWbh-imhy4ah0buXm64gU,6559
29
+ letta/functions/functions.py,sha256=DIF4m_IxPvitSyqrXRiBUgNnI0P7P0HsUZ7qk6j5vAM,4201
30
+ letta/functions/helpers.py,sha256=JU3e5xkkTVx4EevBmtyCRnidf0ncAeASvH2ZT_aBvPc,9905
31
+ letta/functions/schema_generator.py,sha256=GzNusbElWeaVWctFfHX9i93tiqNW16wMeS5ClKIal3A,7090
32
32
  letta/humans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  letta/humans/examples/basic.txt,sha256=Lcp8YESTWvOJgO4Yf_yyQmgo5bKakeB1nIVrwEGG6PA,17
34
34
  letta/humans/examples/cs_phd.txt,sha256=9C9ZAV_VuG7GB31ksy3-_NAyk8rjE6YtVOkhp08k1xw,297
@@ -83,19 +83,20 @@ letta/local_llm/webui/settings.py,sha256=gmLHfiOl1u4JmlAZU2d2O8YKF9lafdakyjwR_ft
83
83
  letta/log.py,sha256=QHquDnL7oUAvdKlAwUlCK9zXKDMUjrU9WA0bxnMsP0Y,2101
84
84
  letta/main.py,sha256=yHgM1lltQZvbE8k0QDQMmVyJiWEj07ZTOYIBHDxE_DQ,18709
85
85
  letta/memory.py,sha256=6q1x3-PY-PeXzAt6hvP-UF1ajvroPZ7XW-5nLy-JhMo,17657
86
- letta/metadata.py,sha256=a4XvHD6m52Pu1_Mr0m0yN0mFgo99OLKDtglfRBz6YRs,31548
87
- letta/o1_agent.py,sha256=0jospImZUKhuQZ0cop0INj8xI6cxhxNffGA8iloHyfU,3114
86
+ letta/metadata.py,sha256=vWxKnPlt6OM-Ir9UUaNwTis5eOLpss_o-GoilNl733g,27682
87
+ letta/o1_agent.py,sha256=LqATgTpkc02-nCH_F87EOvgxLjdjT9F07kdzj3zSdQg,3118
88
88
  letta/openai_backcompat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
89
  letta/openai_backcompat/openai_object.py,sha256=Y1ZS1sATP60qxJiOsjOP3NbwSzuzvkNAvb3DeuhM5Uk,13490
90
- letta/orm/__all__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
+ letta/orm/__all__.py,sha256=2gh2MZTkA3Hw67VWVKK3JIStJOqTeLdpCvYSVYNeEDA,692
91
91
  letta/orm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
92
  letta/orm/base.py,sha256=9k7mwKDApJNpbrk6oXosQ7amlpeYhDzArdYTZ6BhfpQ,2405
93
93
  letta/orm/enums.py,sha256=KfHcFt_fR6GUmSlmfsa-TetvmuRxGESNve8MStRYW64,145
94
94
  letta/orm/errors.py,sha256=somsGtotFlb3SDM6tKdZ5TDGwEEP3ppx47ICAvNMnkg,225
95
- letta/orm/mixins.py,sha256=NtJUSsOv6SM5GY9gXgHdq0smdXEeFv6tWXW_chpW0rw,2157
96
- letta/orm/organization.py,sha256=afjWs0FU2lOPOHsw_BhDvdmx4f19e1_Jfc0b1w2Bz_8,1316
97
- letta/orm/sqlalchemy_base.py,sha256=_UBfwpAeuHsPChu6EVV6jHQE_AMPDzE8Loj1a71M2ng,8973
98
- letta/orm/user.py,sha256=wRo776d-bsKE6ChJkbjO15jHUQ22RiJauhJtXSkOzoc,1079
95
+ letta/orm/mixins.py,sha256=hZJFYnmSGklryuAOypvVhMgXyU7pgatGEun-p-2f_Fc,2457
96
+ letta/orm/organization.py,sha256=ccE0ShFWqWPdtXiCRkZCSeIERbtwU-a7AF99N3S6IRM,1468
97
+ letta/orm/sqlalchemy_base.py,sha256=w3x8ShZhjQY59XjDj2nWiELSi7rJDLzTAnGUBKA1_c0,8880
98
+ letta/orm/tool.py,sha256=EB8d9Q1n-ktM6hJ0PP7xK7bL-ankrYTS_vdFfTfS7hY,2541
99
+ letta/orm/user.py,sha256=kaiqduMhHYcTLPWyzWyNTysNJijkReIhVtgIJ3qPfSY,1286
99
100
  letta/persistence_manager.py,sha256=LlLgEDpSafCPAiyKmuq0NvVAnfBkZo6TWbGIKYQjQBs,5200
100
101
  letta/personas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
102
  letta/personas/examples/anna_pa.txt,sha256=zgiNdSNhy1HQy58cF_6RFPzcg2i37F9v38YuL1CW40A,1849
@@ -123,7 +124,7 @@ letta/providers.py,sha256=tGnji2OlZSo5fgRaLiFaopqiyhKGOt5akngSjjM5RSI,19637
123
124
  letta/pytest.ini,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
125
  letta/schemas/agent.py,sha256=e69lAKJQYtx92w8tM9sdLdv1hDqZ_0V_qiUiQyI-uks,7138
125
126
  letta/schemas/api_key.py,sha256=u07yzzMn-hBAHZIIKbWY16KsgiFjSNR8lAghpMUo3_4,682
126
- letta/schemas/block.py,sha256=1_GwFtfykloYU4Mp2DV3-DqkvsKo79Mu3LAzVYOgMzk,3998
127
+ letta/schemas/block.py,sha256=2_GftSIoTie6qHqUcZTfvN5bZT-p3goGcVx3TAuNOPQ,3936
127
128
  letta/schemas/embedding_config.py,sha256=1kD6NpiXeH4roVumxqDAKk7xt8SpXGWNhZs_XXUSlEU,2855
128
129
  letta/schemas/enums.py,sha256=WfRYpLh_pD-VyhEnp3Y6pPfx063zq2o4jky6PulqO8w,629
129
130
  letta/schemas/file.py,sha256=Ns0V2Jp6_lmiCmLCnXsOAh_UNqTW-fstcLKjYI35VOA,1357
@@ -134,7 +135,7 @@ letta/schemas/letta_message.py,sha256=RuVVtwFbi85yP3dXQxowofQ6cI2cO_CdGtgpHGQzgH
134
135
  letta/schemas/letta_request.py,sha256=_oiDshc_AoFWIfXRk2VX5-AxO5vDlyN-9r-gnyLj_30,1890
135
136
  letta/schemas/letta_response.py,sha256=_UJoO3UtC3F5DtQCHzdiGM1SHNPYPKvopIWqg8t5YZw,1564
136
137
  letta/schemas/llm_config.py,sha256=eFA48vKBTO70qaob8pak2CWOH7TCQeqWuClkMBc2vbY,4172
137
- letta/schemas/memory.py,sha256=rBbfCps6Oi1p3eYDx8_bY34PQGXx69-pha0Uj4B9678,11650
138
+ letta/schemas/memory.py,sha256=rNUxCs11nZf_gbKgkJ-c4FRHZVhqIfTyfD2nS5WP6oI,11490
138
139
  letta/schemas/message.py,sha256=DQxnRYrYgHXpTKfMzfS-bpCAe-BO_Rmcfc1Wf-4GHjw,33703
139
140
  letta/schemas/openai/chat_completion_request.py,sha256=AOIwgbN3CZKVqkuXeMHeSa53u4h0wVq69t3T_LJ0vIE,3389
140
141
  letta/schemas/openai/chat_completion_response.py,sha256=05FRfm1EsVivyeWo2aoJk34h3W4pAb4lBCPn1eujjcw,3916
@@ -144,16 +145,16 @@ letta/schemas/openai/openai.py,sha256=Hilo5BiLAGabzxCwnwfzK5QrWqwYD8epaEKFa4Pwnd
144
145
  letta/schemas/organization.py,sha256=0MOUbaiDGTXkzTjaALLI2wj4E1bL5V_0jjI6jEgFKlA,635
145
146
  letta/schemas/passage.py,sha256=eYQMxD_XjHAi72jmqcGBU4wM4VZtSU0XK8uhQxxN3Ug,3563
146
147
  letta/schemas/source.py,sha256=hB4Ai6Nj8dFdbxv5_Qaf4uN_cmdGmnzgc-4QnHXcV3o,2562
147
- letta/schemas/tool.py,sha256=m8jWIsPUhekoQcjX7U_Y5vwhhQqSKn748RcXNXRiLGg,10329
148
+ letta/schemas/tool.py,sha256=shkyJ-qM5QtyrfG15yKFt8qujZfeW1wfzz6n9yVS4Y8,10259
148
149
  letta/schemas/usage.py,sha256=lvn1ooHwLEdv6gwQpw5PBUbcwn_gwdT6HA-fCiix6sY,817
149
- letta/schemas/user.py,sha256=s1D9QoyBwxsbcZALXg0cJIfKz-3k47UGJeaheiGxusU,1478
150
+ letta/schemas/user.py,sha256=toiA53UKB1hpH6k2xHyQNKVeDUoSB3RmLfxSwmKPAz4,1523
150
151
  letta/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
152
  letta/server/constants.py,sha256=yAdGbLkzlOU_dLTx0lKDmAnj0ZgRXCEaIcPJWO69eaE,92
152
153
  letta/server/rest_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
153
154
  letta/server/rest_api/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
155
  letta/server/rest_api/admin/agents.py,sha256=cFNDU4Z8wGpcWXuo5aBgX6CcxLzPpTFYnTIaiF-3qvw,564
155
156
  letta/server/rest_api/admin/tools.py,sha256=HdXR_MRWkh3zMtb96Eaomp4rReNm3DirnXCNqAD7tNU,3093
156
- letta/server/rest_api/admin/users.py,sha256=IIec8G2yxVZtSo8dYrQPktVj8XIsZMptxigxmgULKO8,3480
157
+ letta/server/rest_api/admin/users.py,sha256=B3KeVkPpXACFZUjjc6twDSxWO8sHLtBIaO61f1dpFU4,3493
157
158
  letta/server/rest_api/app.py,sha256=JNmDnvp9fP--hJPtPpEWgQT-14O1YOceZbWELr2vedA,6207
158
159
  letta/server/rest_api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
160
  letta/server/rest_api/auth/index.py,sha256=fQBGyVylGSRfEMLQ17cZzrHd5Y1xiVylvPqH5Rl-lXQ,1378
@@ -175,11 +176,11 @@ letta/server/rest_api/routers/v1/jobs.py,sha256=a-j0v-5A0un0pVCOHpfeWnzpOWkVDQO6
175
176
  letta/server/rest_api/routers/v1/llms.py,sha256=TcyvSx6MEM3je5F4DysL7ligmssL_pFlJaaO4uL95VY,877
176
177
  letta/server/rest_api/routers/v1/organizations.py,sha256=3XlHPUc6ZdMOVZNdarwDM8ZxYisoHunSZQ0ozzX5orU,2037
177
178
  letta/server/rest_api/routers/v1/sources.py,sha256=eY_pk9jRL2Y9yIZdsTjH6EuKsfH1neaTU15MKNL0dvw,8749
178
- letta/server/rest_api/routers/v1/tools.py,sha256=vxE4b5juoiBiNWmplktuv6GEgenCkKBRov-t6usUJ9A,3665
179
+ letta/server/rest_api/routers/v1/tools.py,sha256=38raONlEbflpspGenk_m8kVdE9p0Ev0SMBvAy_D25Xo,3692
179
180
  letta/server/rest_api/routers/v1/users.py,sha256=bxQ-YdevjDqmgNDfbSPAG_4KEVvPNBHD_-Lp1MdeMec,3374
180
181
  letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
181
182
  letta/server/rest_api/utils.py,sha256=Fc2ZGKzLaBa2sEtSTVjJ8D5M0xIwsWC0CVAOIJaD3rY,2176
182
- letta/server/server.py,sha256=EBDj5iH2tGr_GsMX6I_yRO6IBYpNpZUZxFY2nGqPDrc,90912
183
+ letta/server/server.py,sha256=IqVfEU4qYybWbUTrhRwcNmSwtL8nh4Qu-I3-f9c4bl4,79467
183
184
  letta/server/startup.sh,sha256=jeGV7B_PS0hS-tT6o6GpACrUbV9WV1NI2L9aLoUDDtc,311
184
185
  letta/server/static_files/assets/index-3ab03d5b.css,sha256=OrA9W4iKJ5h2Wlr7GwdAT4wow0CM8hVit1yOxEL49Qw,54295
185
186
  letta/server/static_files/assets/index-d6b3669a.js,sha256=i1nHReU0RPnj-a5W0nNPV4Y9bQ0FOW0ztjMz8a2AE-Y,1821560
@@ -193,15 +194,16 @@ letta/server/ws_api/interface.py,sha256=TWl9vkcMCnLsUtgsuENZ-ku2oMDA-OUTzLh_yNRo
193
194
  letta/server/ws_api/protocol.py,sha256=M_-gM5iuDBwa1cuN2IGNCG5GxMJwU2d3XW93XALv9s8,1821
194
195
  letta/server/ws_api/server.py,sha256=C2Kv48PCwl46DQFb0ZP30s86KJLQ6dZk2AhWQEZn9pY,6004
195
196
  letta/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
- letta/services/organization_manager.py,sha256=skEByzSiLgFesBRbm87VKR-TSUK3LhJitTwN1Zl6-Hw,3379
197
- letta/services/user_manager.py,sha256=q2GiGGv-bMTob2CT17onk38oHkWqU_DQap0sxQMhmkg,4376
197
+ letta/services/organization_manager.py,sha256=wW4wOmKaqhHC7oTGWU38OO-dFtmRI0JVmq_k8gI1b0A,3658
198
+ letta/services/tool_manager.py,sha256=7elTmzk0vhceD8ezcywYfLvRaVEi0bxp7HFcw27CQzg,8877
199
+ letta/services/user_manager.py,sha256=h6K06LnYIbzw7YoQia5WGmBNSXZg5AuHZTvS54aEmSI,4534
198
200
  letta/settings.py,sha256=yiYNmnYKj_BdTm0cBEIvQKYGU-lCmFntqsyVfRUy3_k,3411
199
201
  letta/streaming_interface.py,sha256=_FPUWy58j50evHcpXyd7zB1wWqeCc71NCFeWh_TBvnw,15736
200
202
  letta/streaming_utils.py,sha256=329fsvj1ZN0r0LpQtmMPZ2vSxkDBIUUwvGHZFkjm2I8,11745
201
203
  letta/system.py,sha256=buKYPqG5n2x41hVmWpu6JUpyd7vTWED9Km2_M7dLrvk,6960
202
204
  letta/utils.py,sha256=SXLEYhyp3gHyIjrxNIKNZZ5ittKo3KOj6zxgC_Trex0,31012
203
- letta_nightly-0.5.1.dev20241025104130.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
204
- letta_nightly-0.5.1.dev20241025104130.dist-info/METADATA,sha256=uJiEXtNCowfOlu8N-xbQw7zRMAM10EQUhwtZS9LLqN8,10660
205
- letta_nightly-0.5.1.dev20241025104130.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
206
- letta_nightly-0.5.1.dev20241025104130.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
207
- letta_nightly-0.5.1.dev20241025104130.dist-info/RECORD,,
205
+ letta_nightly-0.5.1.dev20241027104016.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
206
+ letta_nightly-0.5.1.dev20241027104016.dist-info/METADATA,sha256=fV_8mCj5F2wEpOiqVJTn1rUGlYwQwAGQeJN17-E2cxY,10660
207
+ letta_nightly-0.5.1.dev20241027104016.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
208
+ letta_nightly-0.5.1.dev20241027104016.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
209
+ letta_nightly-0.5.1.dev20241027104016.dist-info/RECORD,,