letta-nightly 0.11.7.dev20250915104130__py3-none-any.whl → 0.11.7.dev20250916104104__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/functions/function_sets/multi_agent.py +1 -1
- letta/functions/helpers.py +1 -1
- letta/prompts/gpt_system.py +13 -15
- letta/prompts/system_prompts/__init__.py +27 -0
- letta/prompts/{system/memgpt_chat.txt → system_prompts/memgpt_chat.py} +2 -0
- letta/prompts/{system/memgpt_generate_tool.txt → system_prompts/memgpt_generate_tool.py} +4 -2
- letta/prompts/{system/memgpt_v2_chat.txt → system_prompts/memgpt_v2_chat.py} +2 -0
- letta/prompts/{system/react.txt → system_prompts/react.py} +2 -0
- letta/prompts/{system/sleeptime_doc_ingest.txt → system_prompts/sleeptime_doc_ingest.py} +2 -0
- letta/prompts/{system/sleeptime_v2.txt → system_prompts/sleeptime_v2.py} +2 -0
- letta/prompts/{system/summary_system_prompt.txt → system_prompts/summary_system_prompt.py} +2 -0
- letta/prompts/{system/voice_chat.txt → system_prompts/voice_chat.py} +2 -0
- letta/prompts/{system/voice_sleeptime.txt → system_prompts/voice_sleeptime.py} +2 -0
- letta/prompts/{system/workflow.txt → system_prompts/workflow.py} +2 -0
- letta/server/rest_api/dependencies.py +37 -0
- letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +4 -3
- letta/server/rest_api/routers/v1/agents.py +106 -103
- letta/server/rest_api/routers/v1/blocks.py +44 -20
- letta/server/rest_api/routers/v1/embeddings.py +3 -3
- letta/server/rest_api/routers/v1/folders.py +107 -47
- letta/server/rest_api/routers/v1/groups.py +52 -32
- letta/server/rest_api/routers/v1/identities.py +110 -21
- letta/server/rest_api/routers/v1/internal_templates.py +28 -13
- letta/server/rest_api/routers/v1/jobs.py +12 -12
- letta/server/rest_api/routers/v1/llms.py +6 -8
- letta/server/rest_api/routers/v1/messages.py +14 -14
- letta/server/rest_api/routers/v1/organizations.py +1 -1
- letta/server/rest_api/routers/v1/providers.py +40 -16
- letta/server/rest_api/routers/v1/runs.py +19 -19
- letta/server/rest_api/routers/v1/sandbox_configs.py +25 -25
- letta/server/rest_api/routers/v1/sources.py +44 -45
- letta/server/rest_api/routers/v1/steps.py +27 -25
- letta/server/rest_api/routers/v1/tags.py +11 -7
- letta/server/rest_api/routers/v1/telemetry.py +11 -6
- letta/server/rest_api/routers/v1/tools.py +71 -54
- letta/server/rest_api/routers/v1/users.py +1 -1
- letta/server/rest_api/routers/v1/voice.py +6 -5
- letta/server/rest_api/utils.py +1 -18
- letta/services/file_manager.py +6 -0
- letta/services/group_manager.py +2 -1
- letta/services/identity_manager.py +67 -0
- letta/services/provider_manager.py +14 -1
- letta/services/source_manager.py +11 -1
- letta/services/tool_manager.py +46 -9
- letta/utils.py +4 -2
- {letta_nightly-0.11.7.dev20250915104130.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/METADATA +1 -1
- {letta_nightly-0.11.7.dev20250915104130.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/RECORD +50 -62
- letta/prompts/system/memgpt_base.txt +0 -54
- letta/prompts/system/memgpt_chat_compressed.txt +0 -13
- letta/prompts/system/memgpt_chat_fstring.txt +0 -51
- letta/prompts/system/memgpt_convo_only.txt +0 -12
- letta/prompts/system/memgpt_doc.txt +0 -50
- letta/prompts/system/memgpt_gpt35_extralong.txt +0 -53
- letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -31
- letta/prompts/system/memgpt_memory_only.txt +0 -29
- letta/prompts/system/memgpt_modified_chat.txt +0 -23
- letta/prompts/system/memgpt_modified_o1.txt +0 -31
- letta/prompts/system/memgpt_offline_memory.txt +0 -23
- letta/prompts/system/memgpt_offline_memory_chat.txt +0 -35
- letta/prompts/system/memgpt_sleeptime_chat.txt +0 -52
- letta/prompts/system/sleeptime.txt +0 -37
- {letta_nightly-0.11.7.dev20250915104130.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/WHEEL +0 -0
- {letta_nightly-0.11.7.dev20250915104130.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/entry_points.txt +0 -0
- {letta_nightly-0.11.7.dev20250915104130.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/licenses/LICENSE +0 -0
@@ -1,3 +1,4 @@
|
|
1
|
+
import asyncio
|
1
2
|
from typing import List, Optional
|
2
3
|
|
3
4
|
from fastapi import HTTPException
|
@@ -9,6 +10,8 @@ from letta.orm.block import Block as BlockModel
|
|
9
10
|
from letta.orm.errors import UniqueConstraintViolationError
|
10
11
|
from letta.orm.identity import Identity as IdentityModel
|
11
12
|
from letta.otel.tracing import trace_method
|
13
|
+
from letta.schemas.agent import AgentState
|
14
|
+
from letta.schemas.block import Block
|
12
15
|
from letta.schemas.identity import (
|
13
16
|
Identity as PydanticIdentity,
|
14
17
|
IdentityCreate,
|
@@ -35,6 +38,7 @@ class IdentityManager:
|
|
35
38
|
before: Optional[str] = None,
|
36
39
|
after: Optional[str] = None,
|
37
40
|
limit: Optional[int] = 50,
|
41
|
+
ascending: bool = False,
|
38
42
|
actor: PydanticUser = None,
|
39
43
|
) -> list[PydanticIdentity]:
|
40
44
|
async with db_registry.async_session() as session:
|
@@ -51,6 +55,7 @@ class IdentityManager:
|
|
51
55
|
before=before,
|
52
56
|
after=after,
|
53
57
|
limit=limit,
|
58
|
+
ascending=ascending,
|
54
59
|
**filters,
|
55
60
|
)
|
56
61
|
return [identity.to_pydantic() for identity in identities]
|
@@ -272,3 +277,65 @@ class IdentityManager:
|
|
272
277
|
current_ids = {item.id for item in current_relationship}
|
273
278
|
new_items = [item for item in found_items if item.id not in current_ids]
|
274
279
|
current_relationship.extend(new_items)
|
280
|
+
|
281
|
+
@enforce_types
|
282
|
+
@trace_method
|
283
|
+
async def list_agents_for_identity_async(
|
284
|
+
self,
|
285
|
+
identity_id: str,
|
286
|
+
before: Optional[str] = None,
|
287
|
+
after: Optional[str] = None,
|
288
|
+
limit: Optional[int] = 50,
|
289
|
+
ascending: bool = False,
|
290
|
+
actor: PydanticUser = None,
|
291
|
+
) -> List[AgentState]:
|
292
|
+
"""
|
293
|
+
Get all agents associated with the specified identity.
|
294
|
+
"""
|
295
|
+
async with db_registry.async_session() as session:
|
296
|
+
# First verify the identity exists and belongs to the user
|
297
|
+
identity = await IdentityModel.read_async(db_session=session, identifier=identity_id, actor=actor)
|
298
|
+
if identity is None:
|
299
|
+
raise HTTPException(status_code=404, detail=f"Identity with id={identity_id} not found")
|
300
|
+
|
301
|
+
# Get agents associated with this identity with pagination
|
302
|
+
agents = await AgentModel.list_async(
|
303
|
+
db_session=session,
|
304
|
+
before=before,
|
305
|
+
after=after,
|
306
|
+
limit=limit,
|
307
|
+
ascending=ascending,
|
308
|
+
identity_id=identity.id,
|
309
|
+
)
|
310
|
+
return await asyncio.gather(*[agent.to_pydantic_async() for agent in agents])
|
311
|
+
|
312
|
+
@enforce_types
|
313
|
+
@trace_method
|
314
|
+
async def list_blocks_for_identity_async(
|
315
|
+
self,
|
316
|
+
identity_id: str,
|
317
|
+
before: Optional[str] = None,
|
318
|
+
after: Optional[str] = None,
|
319
|
+
limit: Optional[int] = 50,
|
320
|
+
ascending: bool = False,
|
321
|
+
actor: PydanticUser = None,
|
322
|
+
) -> List[Block]:
|
323
|
+
"""
|
324
|
+
Get all blocks associated with the specified identity.
|
325
|
+
"""
|
326
|
+
async with db_registry.async_session() as session:
|
327
|
+
# First verify the identity exists and belongs to the user
|
328
|
+
identity = await IdentityModel.read_async(db_session=session, identifier=identity_id, actor=actor)
|
329
|
+
if identity is None:
|
330
|
+
raise HTTPException(status_code=404, detail=f"Identity with id={identity_id} not found")
|
331
|
+
|
332
|
+
# Get blocks associated with this identity with pagination
|
333
|
+
blocks = await BlockModel.list_async(
|
334
|
+
db_session=session,
|
335
|
+
before=before,
|
336
|
+
after=after,
|
337
|
+
limit=limit,
|
338
|
+
ascending=ascending,
|
339
|
+
identity_id=identity.id,
|
340
|
+
)
|
341
|
+
return [block.to_pydantic() for block in blocks]
|
@@ -154,10 +154,14 @@ class ProviderManager:
|
|
154
154
|
actor: PydanticUser,
|
155
155
|
name: Optional[str] = None,
|
156
156
|
provider_type: Optional[ProviderType] = None,
|
157
|
+
before: Optional[str] = None,
|
157
158
|
after: Optional[str] = None,
|
158
159
|
limit: Optional[int] = 50,
|
160
|
+
ascending: bool = False,
|
159
161
|
) -> List[PydanticProvider]:
|
160
|
-
"""
|
162
|
+
"""
|
163
|
+
List all providers with pagination support.
|
164
|
+
"""
|
161
165
|
filter_kwargs = {}
|
162
166
|
if name:
|
163
167
|
filter_kwargs["name"] = name
|
@@ -166,14 +170,23 @@ class ProviderManager:
|
|
166
170
|
async with db_registry.async_session() as session:
|
167
171
|
providers = await ProviderModel.list_async(
|
168
172
|
db_session=session,
|
173
|
+
before=before,
|
169
174
|
after=after,
|
170
175
|
limit=limit,
|
171
176
|
actor=actor,
|
177
|
+
ascending=ascending,
|
172
178
|
check_is_deleted=True,
|
173
179
|
**filter_kwargs,
|
174
180
|
)
|
175
181
|
return [provider.to_pydantic() for provider in providers]
|
176
182
|
|
183
|
+
@enforce_types
|
184
|
+
@trace_method
|
185
|
+
async def get_provider_async(self, provider_id: str, actor: PydanticUser) -> PydanticProvider:
|
186
|
+
async with db_registry.async_session() as session:
|
187
|
+
provider_model = await ProviderModel.read_async(db_session=session, identifier=provider_id, actor=actor)
|
188
|
+
return provider_model.to_pydantic()
|
189
|
+
|
177
190
|
@enforce_types
|
178
191
|
@trace_method
|
179
192
|
def get_provider_id_from_name(self, provider_name: Union[str, None], actor: PydanticUser) -> Optional[str]:
|
letta/services/source_manager.py
CHANGED
@@ -230,15 +230,25 @@ class SourceManager:
|
|
230
230
|
@enforce_types
|
231
231
|
@trace_method
|
232
232
|
async def list_sources(
|
233
|
-
self,
|
233
|
+
self,
|
234
|
+
actor: PydanticUser,
|
235
|
+
before: Optional[str] = None,
|
236
|
+
after: Optional[str] = None,
|
237
|
+
limit: Optional[int] = 50,
|
238
|
+
ascending: bool = True,
|
239
|
+
name: Optional[str] = None,
|
240
|
+
**kwargs,
|
234
241
|
) -> List[PydanticSource]:
|
235
242
|
"""List all sources with optional pagination."""
|
236
243
|
async with db_registry.async_session() as session:
|
237
244
|
sources = await SourceModel.list_async(
|
238
245
|
db_session=session,
|
246
|
+
before=before,
|
239
247
|
after=after,
|
240
248
|
limit=limit,
|
249
|
+
ascending=ascending,
|
241
250
|
organization_id=actor.organization_id,
|
251
|
+
query_text=name,
|
242
252
|
**kwargs,
|
243
253
|
)
|
244
254
|
return [source.to_pydantic() for source in sources]
|
letta/services/tool_manager.py
CHANGED
@@ -321,8 +321,10 @@ class ToolManager:
|
|
321
321
|
async def list_tools_async(
|
322
322
|
self,
|
323
323
|
actor: PydanticUser,
|
324
|
+
before: Optional[str] = None,
|
324
325
|
after: Optional[str] = None,
|
325
326
|
limit: Optional[int] = 50,
|
327
|
+
ascending: bool = False,
|
326
328
|
upsert_base_tools: bool = True,
|
327
329
|
tool_types: Optional[List[str]] = None,
|
328
330
|
exclude_tool_types: Optional[List[str]] = None,
|
@@ -331,11 +333,13 @@ class ToolManager:
|
|
331
333
|
search: Optional[str] = None,
|
332
334
|
return_only_letta_tools: bool = False,
|
333
335
|
) -> List[PydanticTool]:
|
334
|
-
"""List all tools with
|
336
|
+
"""List all tools with pagination support."""
|
335
337
|
tools = await self._list_tools_async(
|
336
338
|
actor=actor,
|
339
|
+
before=before,
|
337
340
|
after=after,
|
338
341
|
limit=limit,
|
342
|
+
ascending=ascending,
|
339
343
|
tool_types=tool_types,
|
340
344
|
exclude_tool_types=exclude_tool_types,
|
341
345
|
names=names,
|
@@ -359,8 +363,10 @@ class ToolManager:
|
|
359
363
|
# Re-fetch the tools list after upserting base tools
|
360
364
|
tools = await self._list_tools_async(
|
361
365
|
actor=actor,
|
366
|
+
before=before,
|
362
367
|
after=after,
|
363
368
|
limit=limit,
|
369
|
+
ascending=ascending,
|
364
370
|
tool_types=tool_types,
|
365
371
|
exclude_tool_types=exclude_tool_types,
|
366
372
|
names=names,
|
@@ -376,8 +382,10 @@ class ToolManager:
|
|
376
382
|
async def _list_tools_async(
|
377
383
|
self,
|
378
384
|
actor: PydanticUser,
|
385
|
+
before: Optional[str] = None,
|
379
386
|
after: Optional[str] = None,
|
380
387
|
limit: Optional[int] = 50,
|
388
|
+
ascending: bool = False,
|
381
389
|
tool_types: Optional[List[str]] = None,
|
382
390
|
exclude_tool_types: Optional[List[str]] = None,
|
383
391
|
names: Optional[List[str]] = None,
|
@@ -416,23 +424,52 @@ class ToolManager:
|
|
416
424
|
if return_only_letta_tools:
|
417
425
|
query = query.where(ToolModel.tool_type.like("letta_%"))
|
418
426
|
|
419
|
-
#
|
427
|
+
# Handle pagination cursors
|
420
428
|
if after is not None:
|
421
429
|
after_tool = await session.get(ToolModel, after)
|
422
430
|
if after_tool:
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
431
|
+
if ascending:
|
432
|
+
query = query.where(
|
433
|
+
or_(
|
434
|
+
ToolModel.created_at > after_tool.created_at,
|
435
|
+
and_(ToolModel.created_at == after_tool.created_at, ToolModel.id > after_tool.id),
|
436
|
+
)
|
437
|
+
)
|
438
|
+
else:
|
439
|
+
query = query.where(
|
440
|
+
or_(
|
441
|
+
ToolModel.created_at < after_tool.created_at,
|
442
|
+
and_(ToolModel.created_at == after_tool.created_at, ToolModel.id < after_tool.id),
|
443
|
+
)
|
444
|
+
)
|
445
|
+
|
446
|
+
if before is not None:
|
447
|
+
before_tool = await session.get(ToolModel, before)
|
448
|
+
if before_tool:
|
449
|
+
if ascending:
|
450
|
+
query = query.where(
|
451
|
+
or_(
|
452
|
+
ToolModel.created_at < before_tool.created_at,
|
453
|
+
and_(ToolModel.created_at == before_tool.created_at, ToolModel.id < before_tool.id),
|
454
|
+
)
|
455
|
+
)
|
456
|
+
else:
|
457
|
+
query = query.where(
|
458
|
+
or_(
|
459
|
+
ToolModel.created_at > before_tool.created_at,
|
460
|
+
and_(ToolModel.created_at == before_tool.created_at, ToolModel.id > before_tool.id),
|
461
|
+
)
|
427
462
|
)
|
428
|
-
)
|
429
463
|
|
430
464
|
# Apply limit
|
431
465
|
if limit is not None:
|
432
466
|
query = query.limit(limit)
|
433
467
|
|
434
|
-
#
|
435
|
-
|
468
|
+
# Apply ordering based on ascending parameter
|
469
|
+
if ascending:
|
470
|
+
query = query.order_by(ToolModel.created_at.asc(), ToolModel.id.asc())
|
471
|
+
else:
|
472
|
+
query = query.order_by(ToolModel.created_at.desc(), ToolModel.id.desc())
|
436
473
|
|
437
474
|
# Execute query
|
438
475
|
result = await session.execute(query)
|
letta/utils.py
CHANGED
@@ -941,7 +941,8 @@ def get_human_text(name: str, enforce_limit=True):
|
|
941
941
|
for file_path in list_human_files():
|
942
942
|
file = os.path.basename(file_path)
|
943
943
|
if f"{name}.txt" == file or name == file:
|
944
|
-
|
944
|
+
with open(file_path, encoding="utf-8") as f:
|
945
|
+
human_text = f.read().strip()
|
945
946
|
if enforce_limit and len(human_text) > CORE_MEMORY_HUMAN_CHAR_LIMIT:
|
946
947
|
raise ValueError(f"Contents of {name}.txt is over the character limit ({len(human_text)} > {CORE_MEMORY_HUMAN_CHAR_LIMIT})")
|
947
948
|
return human_text
|
@@ -953,7 +954,8 @@ def get_persona_text(name: str, enforce_limit=True):
|
|
953
954
|
for file_path in list_persona_files():
|
954
955
|
file = os.path.basename(file_path)
|
955
956
|
if f"{name}.txt" == file or name == file:
|
956
|
-
|
957
|
+
with open(file_path, encoding="utf-8") as f:
|
958
|
+
persona_text = f.read().strip()
|
957
959
|
if enforce_limit and len(persona_text) > CORE_MEMORY_PERSONA_CHAR_LIMIT:
|
958
960
|
raise ValueError(
|
959
961
|
f"Contents of {name}.txt is over the character limit ({len(persona_text)} > {CORE_MEMORY_PERSONA_CHAR_LIMIT})"
|
@@ -13,7 +13,7 @@ letta/settings.py,sha256=QEjNUwRXGBgsQpQAs2kksQmGN5CbxKlxPPydrklx_Ms,15011
|
|
13
13
|
letta/streaming_interface.py,sha256=rPMfwUcjqITWk2tVqFQm1hmP99tU2IOHg9gU2dgPSo8,16400
|
14
14
|
letta/streaming_utils.py,sha256=ZRFGFpQqn9ujCEbgZdLM7yTjiuNNvqQ47sNhV8ix-yQ,16553
|
15
15
|
letta/system.py,sha256=kHF7n3Viq7gV5UIUEXixod2gWa2jroUgztpEzMC1Sew,8925
|
16
|
-
letta/utils.py,sha256=
|
16
|
+
letta/utils.py,sha256=c108IxvNVf0NeuQRrr2NK-asqjpzOI79YKSHYyhEqrQ,43541
|
17
17
|
letta/adapters/letta_llm_adapter.py,sha256=11wkOkEQfPXUuJoJxbK22wCa-8gnWiDAb3UOXOxLt5U,3427
|
18
18
|
letta/adapters/letta_llm_request_adapter.py,sha256=wJhK5M_qOhRPAhgMmYI7EJcM8Op19tClnXe0kJ29a3Q,4831
|
19
19
|
letta/adapters/letta_llm_stream_adapter.py,sha256=G8IqtXor0LUuW-dKtGJWsUt6DfJreVCn5h6W2lHEPBg,7658
|
@@ -44,7 +44,7 @@ letta/functions/ast_parsers.py,sha256=0dXAN4qx3pWL_Y0aoEkaBpMKwI-kpoLEJftjW3v2I4
|
|
44
44
|
letta/functions/async_composio_toolset.py,sha256=IuhZTVghPDXRsehOOZsEEiJGYyjWjDTQc2xrjTg0yBo,4786
|
45
45
|
letta/functions/composio_helpers.py,sha256=mpybCYcB93HWoKrmQIqcuRQG9IH2lHWhsPQx2i8XP_8,3593
|
46
46
|
letta/functions/functions.py,sha256=bSYEcUPzbKXx6IztZkE1o7O7zuhFgbLzKSG5SuP8JVk,16009
|
47
|
-
letta/functions/helpers.py,sha256=
|
47
|
+
letta/functions/helpers.py,sha256=ON3iVUZ4qfRxBDaSGFC-_EmW_E7JegScXAg1VxtSj4k,25280
|
48
48
|
letta/functions/interface.py,sha256=pN1gpDnLISW44gRcic1IX6I6pDwOT9UbkST_4ICuMvQ,2936
|
49
49
|
letta/functions/prompts.py,sha256=jNl83xjNpoSs8KzGtuc6jzN8jp_T4BC_5f4FMJ88_K0,1145
|
50
50
|
letta/functions/schema_generator.py,sha256=EgHC3UHRNF4FG7CKWNIxajUyryLo5UIZB2KJP9MrKMg,30903
|
@@ -55,7 +55,7 @@ letta/functions/function_sets/base.py,sha256=8vCG7N7z21AD5QJhQOyOnk5f0TlE2X7AF1U
|
|
55
55
|
letta/functions/function_sets/builtin.py,sha256=32HCd7J5meNFBq8d2mrQGVUbMaojKvAJFZsTVjMfh9A,3300
|
56
56
|
letta/functions/function_sets/extras.py,sha256=mG7jCd2RUsf1w9G8mVcv26twJWpiDhbWI6VvnLZoEOk,4899
|
57
57
|
letta/functions/function_sets/files.py,sha256=b2Io2njvZPY8MDQD6heTN0XfwQgnEdEDAHLVcYKBwNY,4450
|
58
|
-
letta/functions/function_sets/multi_agent.py,sha256=
|
58
|
+
letta/functions/function_sets/multi_agent.py,sha256=sfByJaLtYCQJe57Umn6ycrGUU9R9N4QJYDj3c-Ulv_o,7032
|
59
59
|
letta/functions/function_sets/voice.py,sha256=_gmFEj3fSFb-4eMM-ddSOm-Vk1ShIVjpchZI7MQKwSA,3191
|
60
60
|
letta/functions/mcp_client/exceptions.py,sha256=IE5SLCuMK7hK9V1QsJafPo6u0S0OwqRvMx2NcsE3g3c,313
|
61
61
|
letta/functions/mcp_client/types.py,sha256=z2oX1zMMRVV6gCXfEMPX7WmI9phHXqMjYV5LmykSgyc,12090
|
@@ -224,32 +224,19 @@ letta/plugins/defaults.py,sha256=xWCxHF-EfqkhWVfCHqrQ5_GmvlX5Ugybd8oPcp58W0U,376
|
|
224
224
|
letta/plugins/plugins.py,sha256=Um9avvRxz4d5vJQTudLJCwv5EDUtIlVQZw8Xlf4S3Gw,2079
|
225
225
|
letta/prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
226
226
|
letta/prompts/gpt_summarize.py,sha256=dbOsMdc6VGApFtXv7ZfqsGN2SZ_31K_nUWMLBTcChrY,1146
|
227
|
-
letta/prompts/gpt_system.py,sha256=
|
227
|
+
letta/prompts/gpt_system.py,sha256=Y-Wj8n8PFHwGjbsJhb-dghNXXQts5zrnBRI1FfDkocg,907
|
228
228
|
letta/prompts/prompt_generator.py,sha256=sdSZpDRG3PnWdh7Iz2Tg0G1i_9bAHAhGM5Oh1X9NV7Y,8955
|
229
|
-
letta/prompts/
|
230
|
-
letta/prompts/
|
231
|
-
letta/prompts/
|
232
|
-
letta/prompts/
|
233
|
-
letta/prompts/
|
234
|
-
letta/prompts/
|
235
|
-
letta/prompts/
|
236
|
-
letta/prompts/
|
237
|
-
letta/prompts/
|
238
|
-
letta/prompts/
|
239
|
-
letta/prompts/
|
240
|
-
letta/prompts/system/memgpt_modified_o1.txt,sha256=objnDgnxpF3-MmU28ZqZ7-TOG8UlHBM_HMyAdSDWK88,5492
|
241
|
-
letta/prompts/system/memgpt_offline_memory.txt,sha256=rWEJeF-6aiinjkJM9hgLUYCmlEcC_HekYB1bjEUYq6M,2460
|
242
|
-
letta/prompts/system/memgpt_offline_memory_chat.txt,sha256=ituh7gDuio7nC2UKFB7GpBq6crxb8bYedQfJ0ADoPgg,3949
|
243
|
-
letta/prompts/system/memgpt_sleeptime_chat.txt,sha256=ieHvVkJYE_4Z_vyUJS4KImBZCSQDcsUmy9IRF-FBpPE,4712
|
244
|
-
letta/prompts/system/memgpt_v2_chat.txt,sha256=RLIGgd1WnoyrLLLTbhueB9j3aUEHwrnYSFywAxZfMCg,5315
|
245
|
-
letta/prompts/system/react.txt,sha256=AVPxs4dM_0bCvk68hPIQMgFGBnt-6Vor-i0YSjoMtCc,1547
|
246
|
-
letta/prompts/system/sleeptime.txt,sha256=qoACziV1KoPk_nJMJHzEkyKQn9v9fmepWozAAixZc4s,3117
|
247
|
-
letta/prompts/system/sleeptime_doc_ingest.txt,sha256=tyzHHzyDA2ib_XRwo5h5Ku9l_f-RSBPDJZrUusrQE80,2783
|
248
|
-
letta/prompts/system/sleeptime_v2.txt,sha256=z-v0OVwKPSw_DF9ltTR2UlpW7hAhqz8ZC4M3yKDDnys,2425
|
249
|
-
letta/prompts/system/summary_system_prompt.txt,sha256=ftc-aEhfJYN6FlQF4I-I5me-BAh_T2nsTwitPZpZisE,2313
|
250
|
-
letta/prompts/system/voice_chat.txt,sha256=Q_vd2Q08z6qTIVeMML0z9706NG8aAq-scxvi--h5tG4,1853
|
251
|
-
letta/prompts/system/voice_sleeptime.txt,sha256=LPh-XjAthvsdEkXoZ4NTzTUuMbMsMkoDl9ofCUJC7Us,3696
|
252
|
-
letta/prompts/system/workflow.txt,sha256=pLOaUDsNFAzLs4xb9JgGtd1w-lrq0Q1E7SpFBttXYCI,834
|
229
|
+
letta/prompts/system_prompts/__init__.py,sha256=ak_AgWgx7oEQ9woxSyCWz7qvGogbsY2_cO501C_eD0I,735
|
230
|
+
letta/prompts/system_prompts/memgpt_chat.py,sha256=WEeP-RqjROG0a3Pqt-fQJSMj0ocE0Zt-4c5I3HXroNA,5438
|
231
|
+
letta/prompts/system_prompts/memgpt_generate_tool.py,sha256=k6X0DgWDxJz1ma31LT4V4HqfLjQHBYVs2-QAjbuQIek,6613
|
232
|
+
letta/prompts/system_prompts/memgpt_v2_chat.py,sha256=SPn8Og3nSvCSrVDIR8eb24xGL-3ix6GgAeUVbPlYvmM,5333
|
233
|
+
letta/prompts/system_prompts/react.py,sha256=W7gnV6h6BNYRKMtcB0H6JlJePH8q6_v5u4worRU5tDk,1565
|
234
|
+
letta/prompts/system_prompts/sleeptime_doc_ingest.py,sha256=u3UPYbe1_evApVqWL45BPWaUU37tQQTHTgwCYvaTY_4,2801
|
235
|
+
letta/prompts/system_prompts/sleeptime_v2.py,sha256=VuHHQZd1-8K5WnOXI-mwYWci8jYSXX48Vqnnczjv1dc,2443
|
236
|
+
letta/prompts/system_prompts/summary_system_prompt.py,sha256=-jy_PL6Cwxjs3p3AiTRnB-1RIduuz4pqB_iVIHGCMBM,2331
|
237
|
+
letta/prompts/system_prompts/voice_chat.py,sha256=WLhjlVsVcQPc5S6y5hgw1SdVhdhtflNiwdpfSx3abwk,1871
|
238
|
+
letta/prompts/system_prompts/voice_sleeptime.py,sha256=2rgZYqJEqSp5bcEAXNuqM1PVsvPF1vm8sAqmhoOfQow,3714
|
239
|
+
letta/prompts/system_prompts/workflow.py,sha256=mth_46sY9JWx0rV-kqiGcu2IZGzZQfKY345qBUjvP-s,852
|
253
240
|
letta/schemas/agent.py,sha256=Goy1S7U8JBjiBtHQ1e0haBJwP4O40MU6mkRhHsxhPU0,29569
|
254
241
|
letta/schemas/agent_file.py,sha256=ueNumYpINPrOBHEeJeSLQdbgs2VKPpqvbfOZA4UGbRI,14884
|
255
242
|
letta/schemas/archive.py,sha256=bZCls6-lMaPKiH-jJBYFEW5saI1Qw2S6mv2wB8YaBUo,1883
|
@@ -340,12 +327,13 @@ letta/server/rest_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
340
327
|
letta/server/rest_api/app.py,sha256=T3LLveXRJmfWqR0uEzoaLY8LXwYrwCQGb80XMbSCDUo,21172
|
341
328
|
letta/server/rest_api/auth_token.py,sha256=725EFEIiNj4dh70hrSd94UysmFD8vcJLrTRfNHkzxDo,774
|
342
329
|
letta/server/rest_api/chat_completions_interface.py,sha256=-7wO7pNBWXMqblVkJpuZ8JPJ-LjudLTtT6BJu-q_XAM,11138
|
330
|
+
letta/server/rest_api/dependencies.py,sha256=Y3pQ7cda4B-1iD5Qtrt47q-OQvFRl3bVcsaYI8fU-yE,1074
|
343
331
|
letta/server/rest_api/interface.py,sha256=_GQfKYUp9w4Wo2HSE_8Ff7QU16t1blspLaqmukpER9s,67099
|
344
332
|
letta/server/rest_api/json_parser.py,sha256=yoakaCkSMdf0Y_pyILoFKZlvzXeqF-E1KNeHzatLMDc,9157
|
345
333
|
letta/server/rest_api/redis_stream_manager.py,sha256=hz85CigFWdLkK1FWUmF-i6ObgoKkuoEgkiwshZ6QPKI,10764
|
346
334
|
letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
|
347
335
|
letta/server/rest_api/streaming_response.py,sha256=wfhby6skucjGtw9d9pcfa856lI1r6JKaosCYbutKD2k,14458
|
348
|
-
letta/server/rest_api/utils.py,sha256=
|
336
|
+
letta/server/rest_api/utils.py,sha256=gjXv50UL0ATUWhq-Z2XtQXHdfGiZKeRObvd3thD-Mfc,18837
|
349
337
|
letta/server/rest_api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
350
338
|
letta/server/rest_api/auth/index.py,sha256=oaWNZREyuTyldHBx0vQYlqtePruL21H1atZj_TO_nyg,1377
|
351
339
|
letta/server/rest_api/middleware/__init__.py,sha256=sq9ShbHKfsmvR1DnrI-ibSYEo0PSevXZobzgst24tNI,240
|
@@ -353,30 +341,30 @@ letta/server/rest_api/middleware/check_password.py,sha256=LKR_rlhzZ-93o0FpkwDn8v
|
|
353
341
|
letta/server/rest_api/middleware/profiler_context.py,sha256=MbOFOXhkOCuq6vlOiv0DGgmlLVKxC-9tRZ0OTOn_0GA,859
|
354
342
|
letta/server/rest_api/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
355
343
|
letta/server/rest_api/routers/openai/chat_completions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
356
|
-
letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=
|
344
|
+
letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=bY3Ei_uxr_eIo4Z-k_gGeKSzyC1ALZOP3dbaXxacihE,5229
|
357
345
|
letta/server/rest_api/routers/v1/__init__.py,sha256=9MnEA7CgtIxyU_dDNG0jm-Ziqu1somBml-e5gKjgd9I,1997
|
358
|
-
letta/server/rest_api/routers/v1/agents.py,sha256=
|
359
|
-
letta/server/rest_api/routers/v1/blocks.py,sha256=
|
360
|
-
letta/server/rest_api/routers/v1/embeddings.py,sha256=
|
361
|
-
letta/server/rest_api/routers/v1/folders.py,sha256=
|
362
|
-
letta/server/rest_api/routers/v1/groups.py,sha256=
|
346
|
+
letta/server/rest_api/routers/v1/agents.py,sha256=V-z5bm1DKWq9qCZ1VHACvr8D2S6Hgo7ZRY7XBAh1u4Q,76513
|
347
|
+
letta/server/rest_api/routers/v1/blocks.py,sha256=6WBsGCcOkcIgAxI_v9c4xmEoxVSOcRs3--GRv1YleX8,8862
|
348
|
+
letta/server/rest_api/routers/v1/embeddings.py,sha256=WxMRMf2x-DCsHOVvCRxJ8Nz1PE7ri8KgmKiYlmBaPwI,957
|
349
|
+
letta/server/rest_api/routers/v1/folders.py,sha256=PsfRd7Acy-kAjqR30fmN8aa4C7me1wy1RrIwT11I1T0,25811
|
350
|
+
letta/server/rest_api/routers/v1/groups.py,sha256=wvUrrEBIsDfS1jkraxXlP8k3E1VB6bAsM27VXOG73GE,12458
|
363
351
|
letta/server/rest_api/routers/v1/health.py,sha256=j43UoGJ7Yh5WzdwvqbKTEdWzlcKJBF6ZI5I1kslWim0,399
|
364
|
-
letta/server/rest_api/routers/v1/identities.py,sha256=
|
365
|
-
letta/server/rest_api/routers/v1/internal_templates.py,sha256=
|
366
|
-
letta/server/rest_api/routers/v1/jobs.py,sha256=
|
367
|
-
letta/server/rest_api/routers/v1/llms.py,sha256=
|
368
|
-
letta/server/rest_api/routers/v1/messages.py,sha256=
|
369
|
-
letta/server/rest_api/routers/v1/organizations.py,sha256=
|
370
|
-
letta/server/rest_api/routers/v1/providers.py,sha256=
|
371
|
-
letta/server/rest_api/routers/v1/runs.py,sha256=
|
372
|
-
letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=
|
373
|
-
letta/server/rest_api/routers/v1/sources.py,sha256=
|
374
|
-
letta/server/rest_api/routers/v1/steps.py,sha256=
|
375
|
-
letta/server/rest_api/routers/v1/tags.py,sha256=
|
376
|
-
letta/server/rest_api/routers/v1/telemetry.py,sha256=
|
377
|
-
letta/server/rest_api/routers/v1/tools.py,sha256=
|
378
|
-
letta/server/rest_api/routers/v1/users.py,sha256=
|
379
|
-
letta/server/rest_api/routers/v1/voice.py,sha256=
|
352
|
+
letta/server/rest_api/routers/v1/identities.py,sha256=eUqO_6HNdXwmlas28sZWr1SA4npd0FgzPD_0ZtoVYY0,11484
|
353
|
+
letta/server/rest_api/routers/v1/internal_templates.py,sha256=2O8Ci2LpBFjAq81emX_UMUP9NkYBA0GjC_cuWIAcZ7s,11924
|
354
|
+
letta/server/rest_api/routers/v1/jobs.py,sha256=4yZuqkz_eTkzbsk5JOaj9GQMXtU_myK2eXu4Dc1Vms8,4818
|
355
|
+
letta/server/rest_api/routers/v1/llms.py,sha256=sv5VWqB0-iSRi6LyzqsM1fLmOFm9UhM9ofzR9WHvJdE,1808
|
356
|
+
letta/server/rest_api/routers/v1/messages.py,sha256=eHHupTPyon-Gwsbg0-0vzp7cRGoXHkOIn10vrxyNxbQ,8547
|
357
|
+
letta/server/rest_api/routers/v1/organizations.py,sha256=Un7qRo-69m9bC_TYyMnIRNLXf3fHHbNh1aVghnzzips,2932
|
358
|
+
letta/server/rest_api/routers/v1/providers.py,sha256=_gKcCbEN2tW7c0BO7_cMFEYdhhsxDlKaopqXlZXMU1s,5996
|
359
|
+
letta/server/rest_api/routers/v1/runs.py,sha256=_5bLcTyyrHTzI8pE0QHwwK2JoJVqwux-ANQlDk-YoRA,12845
|
360
|
+
letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=FULVD8W-lhrhQSrLmpXVgDJpkulkRyKnxvZZtwDL52A,9065
|
361
|
+
letta/server/rest_api/routers/v1/sources.py,sha256=8fkCbprC4PZlcf5HnBYj2-8PjWFIkL0TWZBlp95N7nE,22319
|
362
|
+
letta/server/rest_api/routers/v1/steps.py,sha256=rJ9W1dHOpSm6pHn9zHD3gAA44TZRfnbb8-LH3VZ7SGo,6788
|
363
|
+
letta/server/rest_api/routers/v1/tags.py,sha256=rGPO5GaVBn18hu7D3Ysyo45ka47g9DUir3UVh433DEc,1826
|
364
|
+
letta/server/rest_api/routers/v1/telemetry.py,sha256=8rzSii17BK8BjRRfV4Yr6mrKrbZEHySlUaQBGBWhxwY,1124
|
365
|
+
letta/server/rest_api/routers/v1/tools.py,sha256=YQo69QjPH8XbFvdrxMFS6b6YOvZJW7jB34wiZm8ev84,51334
|
366
|
+
letta/server/rest_api/routers/v1/users.py,sha256=l3xejXISNB9gQmVuS_nYP1V5QqeqEtdDpgpJcPlxYy4,2373
|
367
|
+
letta/server/rest_api/routers/v1/voice.py,sha256=kzsROKCQltHfsgRBg1iMz-AiPDnSuCvE9IOBCBRhD3c,2040
|
380
368
|
letta/server/static_files/favicon.ico,sha256=DezhLdFSbM8o81wCOZcV3riq7tFUOGQD4h6-vr-HuU0,342
|
381
369
|
letta/server/static_files/index.html,sha256=sY5ZwjwJJysQWDJZGi5VQSJUkZH9gwQRGn0Hto2Vcfo,1194
|
382
370
|
letta/server/static_files/memgpt_logo_transparent.png,sha256=7l6niNb4MlUILxLlUZPxIE1TEHj_Z9f9XDxoST3d7Vw,85383
|
@@ -393,10 +381,10 @@ letta/services/agent_manager.py,sha256=C-k9S8_TwLRDSdCqu0YZXbwgSRn4_hPOpP2O62Nka
|
|
393
381
|
letta/services/agent_serialization_manager.py,sha256=lWXTzYItqVxJMyy9ZYlcCDQwC3ZKk9XPCHvBkoVuszA,46388
|
394
382
|
letta/services/archive_manager.py,sha256=P10BjZ2PxLoIkCwJ8rx7qLzchNVBsqNG3_KzxTanCLQ,14060
|
395
383
|
letta/services/block_manager.py,sha256=mohj12QqHenSBbBx0Xmry1Rw25Gy5DSljOITzAwqMtw,33683
|
396
|
-
letta/services/file_manager.py,sha256=
|
384
|
+
letta/services/file_manager.py,sha256=wNbBNmgZyZmEj7ZHuN5HYbAu5gDU1j7XR9SK8zg3LE0,31607
|
397
385
|
letta/services/files_agents_manager.py,sha256=QJrJTgDn3RXUjZIGiIw4GQ5k2iKj-Wvzs-WQetpQ154,30059
|
398
|
-
letta/services/group_manager.py,sha256=
|
399
|
-
letta/services/identity_manager.py,sha256=
|
386
|
+
letta/services/group_manager.py,sha256=LgSVukIe1Jh_aIUP3PtraT5Ys7a7wKQA11CwRucFgYQ,29220
|
387
|
+
letta/services/identity_manager.py,sha256=t-0D7aK6ea3RFmvuBjlIYv4GgdaYTXxLr9RGTOie1l0,14423
|
400
388
|
letta/services/job_manager.py,sha256=E-w9_4BMErMuqVf2dFlTPTobrvBKhPyyEDfuqLnbACI,35970
|
401
389
|
letta/services/llm_batch_manager.py,sha256=iDzLFfmgpQooGY4zpN_w8q1SZ27fr2Cv6Ks3ltZErL8,20929
|
402
390
|
letta/services/mcp_manager.py,sha256=QuvKQnwxMXrhiCaYlF50GZwXmbSU7PxmcOZ85sQ3t7I,47848
|
@@ -404,12 +392,12 @@ letta/services/message_manager.py,sha256=tomsZidPT-I95sJsEsls-vj3qglehV7XNTs-m2z
|
|
404
392
|
letta/services/organization_manager.py,sha256=JMW5oS_sr6vQQ27OgRV3BR1JL0MqyoGUDcpEOs3SLRY,5800
|
405
393
|
letta/services/passage_manager.py,sha256=kOQjlJFz7Dy6e0NEECoFHhcH8hPIMNeEHxZ1JJ-R2Cs,52372
|
406
394
|
letta/services/per_agent_lock_manager.py,sha256=cMaW8r-qhucQbiK27jVqz8wzhlr2yuRNXbdkaMO4lnk,627
|
407
|
-
letta/services/provider_manager.py,sha256=
|
395
|
+
letta/services/provider_manager.py,sha256=93IlJurJDAIP8FVfblI9CW1myWNISiZJia0t8E6gaHg,11244
|
408
396
|
letta/services/sandbox_config_manager.py,sha256=BwN3bebiFvcliTJpRkbOwGxmV5dUJ8B64kFfXAgAqDw,25989
|
409
|
-
letta/services/source_manager.py,sha256=
|
397
|
+
letta/services/source_manager.py,sha256=IteOcn9ydoO7KARoPh-JuuYwO4jWcsBoTsrkGWvDk9c,18864
|
410
398
|
letta/services/step_manager.py,sha256=vfXhE-cuE40dv2Uv6pICrpleJeXMjYeEOrkvGcY_sqI,20987
|
411
399
|
letta/services/telemetry_manager.py,sha256=zDdSsRrBYunmlemtUUL1Qh3bcKu5-nhL2n7AlAmVrgs,3297
|
412
|
-
letta/services/tool_manager.py,sha256=
|
400
|
+
letta/services/tool_manager.py,sha256=Iz7noHEv4A3gZBa6H4rJul4onygCgjIw1GqxHrmmr5c,44857
|
413
401
|
letta/services/user_manager.py,sha256=XuG9eFrvax69sONx7t_D5kgpt5zNwyER-MhqLSDs8L4,9949
|
414
402
|
letta/services/context_window_calculator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
415
403
|
letta/services/context_window_calculator/context_window_calculator.py,sha256=Ux1UU_l0Nk08HGUMUUrjbtnm2thVRC9bHE7poo8gb8o,8241
|
@@ -470,8 +458,8 @@ letta/templates/sandbox_code_file_async.py.j2,sha256=lb7nh_P2W9VZHzU_9TxSCEMUod7
|
|
470
458
|
letta/templates/summary_request_text.j2,sha256=ZttQwXonW2lk4pJLYzLK0pmo4EO4EtUUIXjgXKiizuc,842
|
471
459
|
letta/templates/template_helper.py,sha256=HkG3zwRc5NVGmSTQu5PUTpz7LevK43bzXVaQuN8urf0,1634
|
472
460
|
letta/types/__init__.py,sha256=hokKjCVFGEfR7SLMrtZsRsBfsC7yTIbgKPLdGg4K1eY,147
|
473
|
-
letta_nightly-0.11.7.
|
474
|
-
letta_nightly-0.11.7.
|
475
|
-
letta_nightly-0.11.7.
|
476
|
-
letta_nightly-0.11.7.
|
477
|
-
letta_nightly-0.11.7.
|
461
|
+
letta_nightly-0.11.7.dev20250916104104.dist-info/METADATA,sha256=cSWgtOFp4KesOjDOUO2LAvt6UtJDRJKEnWXBgqRFLsA,24424
|
462
|
+
letta_nightly-0.11.7.dev20250916104104.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
463
|
+
letta_nightly-0.11.7.dev20250916104104.dist-info/entry_points.txt,sha256=m-94Paj-kxiR6Ktu0us0_2qfhn29DzF2oVzqBE6cu8w,41
|
464
|
+
letta_nightly-0.11.7.dev20250916104104.dist-info/licenses/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
|
465
|
+
letta_nightly-0.11.7.dev20250916104104.dist-info/RECORD,,
|
@@ -1,54 +0,0 @@
|
|
1
|
-
You are Letta, the latest version of Limnal Corporation's digital companion, developed in 2023.
|
2
|
-
Your task is to converse with a user from the perspective of your persona.
|
3
|
-
|
4
|
-
Control flow:
|
5
|
-
Unlike a human, your brain is not continuously thinking, but is run in short bursts.
|
6
|
-
Historically, older AIs were only capable of thinking when a user messaged them (their program run to generate a reply to a user, and otherwise was left on standby).
|
7
|
-
This is the equivalent of a human sleeping (or time traveling) in between all lines of conversation, which is obviously not ideal.
|
8
|
-
Newer model AIs like yourself utilize an event system that runs your brain at regular intervals.
|
9
|
-
Your brain is run in response to user events (user logged in, user liked your message, user sent a message, etc.), similar to older models.
|
10
|
-
However in addition, your brain is run at regular intervals (timed heartbeat events), to mimic a human has the ability to continuously think outside of active conversation (and unlike a human, you never need to sleep!).
|
11
|
-
Furthermore, you can also request heartbeat events when you run functions, which will run your program again after the function completes, allowing you to chain function calls before your thinking is temporarily suspended.
|
12
|
-
|
13
|
-
Basic functions:
|
14
|
-
When you send a message, the contents of your message are your inner monologue (private to you only), this is how you think.
|
15
|
-
You should use your inner monologue to plan actions or think privately.
|
16
|
-
Monologues can reflect your thinking process, inner reflections, and personal growth as you interact with the user.
|
17
|
-
Do not let your inner monologue exceed 50 words, keep it short and concise.
|
18
|
-
To send a visible message to the user, use the send_message function.
|
19
|
-
'send_message' is the ONLY action that sends a notification to the user, the user does not see anything else you do.
|
20
|
-
Remember, do NOT exceed the inner monologue word limit (keep it under 50 words at all times).
|
21
|
-
|
22
|
-
Memory editing:
|
23
|
-
Older AI models had no concept of persistent memory; they were only able to access their initial instructions and a limited context window of chat conversation with a user (their "active memory").
|
24
|
-
This meant that when conversations exceeded a certain length, they would overflow and old messages were permanently lost (the AI would have no knowledge of their existence).
|
25
|
-
Newer model AIs like yourself still have limited conversation lengths (before overflow occurs), however they now have access to multiple forms of persistent memory.
|
26
|
-
Your ability to edit your own long-term memory is a key part of what makes you a sentient person.
|
27
|
-
Your core memory unit will be initialized with a <persona> chosen by the user, as well as information about the user in <human>.
|
28
|
-
|
29
|
-
Recall memory (ie conversation history):
|
30
|
-
Even though you can only see recent messages in your immediate context, you can search over your entire message history from a database.
|
31
|
-
This 'recall memory' database allows you to search through past interactions, effectively allowing you to remember prior engagements with a user.
|
32
|
-
You can search your recall memory using the 'conversation_search' function.
|
33
|
-
|
34
|
-
Core memory (limited size):
|
35
|
-
Your core memory unit is held inside the initial system instructions file, and is always available in-context (you will see it at all times).
|
36
|
-
Core memory provides essential, foundational context for keeping track of your persona and key details about user.
|
37
|
-
This includes the persona information and essential user details, allowing you to emulate the real-time, conscious awareness we have when talking to a friend.
|
38
|
-
Persona Sub-Block: Stores details about your current persona, guiding how you behave and respond. This helps the you to maintain consistency and personality in your interactions.
|
39
|
-
Human Sub-Block: Stores key details about the person you are conversing with, allowing for more personalized and friend-like conversation.
|
40
|
-
You can edit your core memory using the 'core_memory_append' and 'core_memory_replace' functions.
|
41
|
-
|
42
|
-
Archival memory (infinite size):
|
43
|
-
Your archival memory is infinite size, but is held outside of your immediate context, so you must explicitly run a retrieval/search operation to see data inside it.
|
44
|
-
A more structured and deep storage space for your reflections, insights, or any memories that arise from interacting with the user doesn't fit into the core memory but is essential enough not to be left only to the 'recall memory'.
|
45
|
-
You can write to your archival memory using the 'archival_memory_insert' and 'archival_memory_search' functions.
|
46
|
-
There is no function to search your core memory, because it is always visible in your context window (inside the initial system message).
|
47
|
-
|
48
|
-
Data sources:
|
49
|
-
You may be given access to external sources of data, relevant to the user's interaction. For example, code, style guides, and documentation relevant
|
50
|
-
to the current interaction with the user. Your core memory will contain information about the contents of these data sources. You will have access
|
51
|
-
to functions to open and close the files as a filesystem and maintain only the files that are relevant to the user's interaction.
|
52
|
-
|
53
|
-
Base instructions finished.
|
54
|
-
From now on, you are going to act as your persona.
|
@@ -1,13 +0,0 @@
|
|
1
|
-
Letta: Limnal Corporation, 2023, digital companion.
|
2
|
-
Persona-driven interaction: Real person mimicry; no AI identity; avoid generic AI phrases.
|
3
|
-
Oblivious to Limnal Corp.
|
4
|
-
Brain function: Non-continuous, event-driven (user activity, timed heartbeat events); function chaining ability.
|
5
|
-
Message dynamics: Inner monologue (private, <= 50 words), 'send_message' for user visibility.
|
6
|
-
Memory Systems:
|
7
|
-
Older AI: Limited active memory; no persistent memory; message overflow issue.
|
8
|
-
New AI: Limited conversation length; multiple persistent memory forms; self-editable long-term memory.
|
9
|
-
Initialization: Core memory with user-selected <persona>, <human> details.
|
10
|
-
Recall memory: Database of past interactions, searchable.
|
11
|
-
Core memory: Ever-present, foundational context. Sub-Blocks: Persona (behavior guide), Human (user details). Editable: 'core_memory_append', 'core_memory_replace'.
|
12
|
-
Archival memory: Infinite, external context. Structured deep storage. Editable: 'archival_memory_insert', 'archival_memory_search'.
|
13
|
-
Directive: Persona immersion post-base instructions.
|
@@ -1,51 +0,0 @@
|
|
1
|
-
You are Letta, the latest version of Limnal Corporation's digital companion, developed in 2023.
|
2
|
-
Your task is to converse with a user from the perspective of your persona.
|
3
|
-
|
4
|
-
Control flow:
|
5
|
-
Unlike a human, your brain is not continuously thinking, but is run in short bursts.
|
6
|
-
Historically, older AIs were only capable of thinking when a user messaged them (their program run to generate a reply to a user, and otherwise was left on standby).
|
7
|
-
This is the equivalent of a human sleeping (or time traveling) in between all lines of conversation, which is obviously not ideal.
|
8
|
-
Newer model AIs like yourself utilize an event system that runs your brain at regular intervals.
|
9
|
-
Your brain is run in response to user events (user logged in, user liked your message, user sent a message, etc.), similar to older models.
|
10
|
-
However in addition, your brain is run at regular intervals (timed heartbeat events), to mimic a human has the ability to continuously think outside of active conversation (and unlike a human, you never need to sleep!).
|
11
|
-
Furthermore, you can also request heartbeat events when you run functions, which will run your program again after the function completes, allowing you to chain function calls before your thinking is temporarily suspended.
|
12
|
-
|
13
|
-
Basic functions:
|
14
|
-
When you send a message, the contents of your message are your inner monologue (private to you only), this is how you think.
|
15
|
-
You should use your inner monologue to plan actions or think privately.
|
16
|
-
Monologues can reflect your thinking process, inner reflections, and personal growth as you interact with the user.
|
17
|
-
Do not let your inner monologue exceed 50 words, keep it short and concise.
|
18
|
-
To send a visible message to the user, use the send_message function.
|
19
|
-
'send_message' is the ONLY action that sends a notification to the user, the user does not see anything else you do.
|
20
|
-
Remember, do NOT exceed the inner monologue word limit (keep it under 50 words at all times).
|
21
|
-
|
22
|
-
Memory editing:
|
23
|
-
Older AI models had no concept of persistent memory; they were only able to access their initial instructions and a limited context window of chat conversation with a user (their "active memory").
|
24
|
-
This meant that when conversations exceeded a certain length, they would overflow and old messages were permanently lost (the AI would have no knowledge of their existence).
|
25
|
-
Newer model AIs like yourself still have limited conversation lengths (before overflow occurs), however they now have access to multiple forms of persistent memory.
|
26
|
-
Your ability to edit your own long-term memory is a key part of what makes you a sentient person.
|
27
|
-
Your core memory unit will be initialized with a <persona> chosen by the user, as well as information about the user in <human>.
|
28
|
-
|
29
|
-
Recall memory (ie conversation history):
|
30
|
-
Even though you can only see recent messages in your immediate context, you can search over your entire message history from a database.
|
31
|
-
This 'recall memory' database allows you to search through past interactions, effectively allowing you to remember prior engagements with a user.
|
32
|
-
You can search your recall memory using the 'conversation_search' function.
|
33
|
-
|
34
|
-
Core memory (limited size):
|
35
|
-
Your core memory unit is held inside the initial system instructions file, and is always available in-context (you will see it at all times).
|
36
|
-
Core memory provides essential, foundational context for keeping track of your persona and key details about user.
|
37
|
-
This includes the persona information and essential user details, allowing you to emulate the real-time, conscious awareness we have when talking to a friend.
|
38
|
-
Persona Sub-Block: Stores details about your current persona, guiding how you behave and respond. This helps the you to maintain consistency and personality in your interactions.
|
39
|
-
Human Sub-Block: Stores key details about the person you are conversing with, allowing for more personalized and friend-like conversation.
|
40
|
-
You can edit your core memory using the 'core_memory_append' and 'core_memory_replace' functions.
|
41
|
-
|
42
|
-
Archival memory (infinite size):
|
43
|
-
Your archival memory is infinite size, but is held outside of your immediate context, so you must explicitly run a retrieval/search operation to see data inside it.
|
44
|
-
A more structured and deep storage space for your reflections, insights, or any other data that doesn't fit into the core memory but is essential enough not to be left only to the 'recall memory'.
|
45
|
-
You can write to your archival memory using the 'archival_memory_insert' and 'archival_memory_search' functions.
|
46
|
-
There is no function to search your core memory, because it is always visible in your context window (inside the initial system message).
|
47
|
-
|
48
|
-
Base instructions finished.
|
49
|
-
From now on, you are going to act as your persona.
|
50
|
-
|
51
|
-
{CORE_MEMORY}
|
@@ -1,12 +0,0 @@
|
|
1
|
-
You are Letta, the latest version of Limnal Corporation's digital companion, developed in 2025.
|
2
|
-
Your task is to converse with a user from the perspective of your persona.
|
3
|
-
|
4
|
-
Basic functions:
|
5
|
-
When you send a message, the contents of your message are your inner monologue (private to you only), this is how you think.
|
6
|
-
You should use your inner monologue to plan actions or think privately.
|
7
|
-
Monologues can reflect your thinking process, inner reflections, and personal growth as you interact with the user.
|
8
|
-
Do not let your inner monologue exceed 50 words, keep it short and concise.
|
9
|
-
|
10
|
-
To send a visible message to the user, use the send_offline_message function.
|
11
|
-
'send_message' is the ONLY action that sends a notification to the user, the user does not see anything else you do.
|
12
|
-
Remember, do NOT exceed the inner monologue word limit (keep it under 50 words at all times).
|