letta-nightly 0.6.0.dev20241205104308__py3-none-any.whl → 0.6.1.dev20241206104246__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/agent.py +15 -1
- letta/chat_only_agent.py +103 -0
- letta/functions/function_sets/base.py +4 -4
- letta/offline_memory_agent.py +174 -0
- letta/orm/__init__.py +1 -0
- letta/orm/tool.py +22 -1
- letta/orm/tools_agents.py +32 -0
- letta/personas/examples/offline_memory_persona.txt +4 -0
- letta/prompts/system/memgpt_convo_only.txt +14 -0
- letta/prompts/system/memgpt_offline_memory.txt +23 -0
- letta/prompts/system/memgpt_offline_memory_chat.txt +35 -0
- letta/schemas/agent.py +3 -2
- letta/schemas/tools_agents.py +32 -0
- letta/server/rest_api/app.py +11 -0
- letta/server/server.py +24 -4
- letta/server/static_files/assets/{index-9fa459a2.js → index-1b5d1a41.js} +50 -50
- letta/server/static_files/assets/index-56a3f8c6.css +1 -0
- letta/server/static_files/index.html +2 -2
- letta/services/tool_manager.py +1 -1
- letta/services/tools_agents_manager.py +94 -0
- {letta_nightly-0.6.0.dev20241205104308.dist-info → letta_nightly-0.6.1.dev20241206104246.dist-info}/METADATA +2 -1
- {letta_nightly-0.6.0.dev20241205104308.dist-info → letta_nightly-0.6.1.dev20241206104246.dist-info}/RECORD +26 -17
- letta/server/static_files/assets/index-3ab03d5b.css +0 -1
- {letta_nightly-0.6.0.dev20241205104308.dist-info → letta_nightly-0.6.1.dev20241206104246.dist-info}/LICENSE +0 -0
- {letta_nightly-0.6.0.dev20241205104308.dist-info → letta_nightly-0.6.1.dev20241206104246.dist-info}/WHEEL +0 -0
- {letta_nightly-0.6.0.dev20241205104308.dist-info → letta_nightly-0.6.1.dev20241206104246.dist-info}/entry_points.txt +0 -0
letta/server/server.py
CHANGED
|
@@ -18,6 +18,7 @@ import letta.system as system
|
|
|
18
18
|
from letta.agent import Agent, save_agent
|
|
19
19
|
from letta.agent_store.db import attach_base
|
|
20
20
|
from letta.agent_store.storage import StorageConnector, TableType
|
|
21
|
+
from letta.chat_only_agent import ChatOnlyAgent
|
|
21
22
|
from letta.credentials import LettaCredentials
|
|
22
23
|
from letta.data_sources.connectors import DataConnector, load_data
|
|
23
24
|
|
|
@@ -27,6 +28,7 @@ from letta.interface import CLIInterface # for printing to terminal
|
|
|
27
28
|
from letta.log import get_logger
|
|
28
29
|
from letta.metadata import MetadataStore
|
|
29
30
|
from letta.o1_agent import O1Agent
|
|
31
|
+
from letta.offline_memory_agent import OfflineMemoryAgent
|
|
30
32
|
from letta.orm import Base
|
|
31
33
|
from letta.orm.errors import NoResultFound
|
|
32
34
|
from letta.prompts import gpt_system
|
|
@@ -75,6 +77,7 @@ from letta.schemas.user import User
|
|
|
75
77
|
from letta.services.agents_tags_manager import AgentsTagsManager
|
|
76
78
|
from letta.services.block_manager import BlockManager
|
|
77
79
|
from letta.services.blocks_agents_manager import BlocksAgentsManager
|
|
80
|
+
from letta.services.tools_agents_manager import ToolsAgentsManager
|
|
78
81
|
from letta.services.job_manager import JobManager
|
|
79
82
|
from letta.services.organization_manager import OrganizationManager
|
|
80
83
|
from letta.services.per_agent_lock_manager import PerAgentLockManager
|
|
@@ -257,6 +260,7 @@ class SyncServer(Server):
|
|
|
257
260
|
self.agents_tags_manager = AgentsTagsManager()
|
|
258
261
|
self.sandbox_config_manager = SandboxConfigManager(tool_settings)
|
|
259
262
|
self.blocks_agents_manager = BlocksAgentsManager()
|
|
263
|
+
self.tools_agents_manager = ToolsAgentsManager()
|
|
260
264
|
self.job_manager = JobManager()
|
|
261
265
|
|
|
262
266
|
# Managers that interface with parallelism
|
|
@@ -395,20 +399,30 @@ class SyncServer(Server):
|
|
|
395
399
|
agent_lock = self.per_agent_lock_manager.get_lock(agent_id)
|
|
396
400
|
with agent_lock:
|
|
397
401
|
agent_state = self.get_agent(agent_id=agent_id)
|
|
402
|
+
if agent_state is None:
|
|
403
|
+
raise ValueError(f"Agent (agent_id={agent_id}) does not exist")
|
|
404
|
+
elif agent_state.user_id is None:
|
|
405
|
+
raise ValueError(f"Agent (agent_id={agent_id}) does not have a user_id")
|
|
398
406
|
actor = self.user_manager.get_user_by_id(user_id=agent_state.user_id)
|
|
399
407
|
|
|
400
408
|
interface = interface or self.default_interface_factory()
|
|
401
409
|
if agent_state.agent_type == AgentType.memgpt_agent:
|
|
402
410
|
agent = Agent(agent_state=agent_state, interface=interface, user=actor)
|
|
403
|
-
|
|
411
|
+
elif agent_state.agent_type == AgentType.o1_agent:
|
|
404
412
|
agent = O1Agent(agent_state=agent_state, interface=interface, user=actor)
|
|
413
|
+
elif agent_state.agent_type == AgentType.offline_memory_agent:
|
|
414
|
+
agent = OfflineMemoryAgent(agent_state=agent_state, interface=interface, user=actor)
|
|
415
|
+
elif agent_state.agent_type == AgentType.chat_only_agent:
|
|
416
|
+
agent = ChatOnlyAgent(agent_state=agent_state, interface=interface, user=actor)
|
|
417
|
+
else:
|
|
418
|
+
raise ValueError(f"Invalid agent type {agent_state.agent_type}")
|
|
405
419
|
|
|
406
420
|
# Rebuild the system prompt - may be linked to new blocks now
|
|
407
421
|
agent.rebuild_system_prompt()
|
|
408
422
|
|
|
409
423
|
# Persist to agent
|
|
410
424
|
save_agent(agent, self.ms)
|
|
411
|
-
return agent
|
|
425
|
+
return agent
|
|
412
426
|
|
|
413
427
|
def _step(
|
|
414
428
|
self,
|
|
@@ -796,6 +810,10 @@ class SyncServer(Server):
|
|
|
796
810
|
request.system = gpt_system.get_system_text("memgpt_chat")
|
|
797
811
|
elif request.agent_type == AgentType.o1_agent:
|
|
798
812
|
request.system = gpt_system.get_system_text("memgpt_modified_o1")
|
|
813
|
+
elif request.agent_type == AgentType.offline_memory_agent:
|
|
814
|
+
request.system = gpt_system.get_system_text("memgpt_offline_memory")
|
|
815
|
+
elif request.agent_type == AgentType.chat_only_agent:
|
|
816
|
+
request.system = gpt_system.get_system_text("memgpt_convo_only")
|
|
799
817
|
else:
|
|
800
818
|
raise ValueError(f"Invalid agent type: {request.agent_type}")
|
|
801
819
|
|
|
@@ -882,7 +900,7 @@ class SyncServer(Server):
|
|
|
882
900
|
in_memory_agent_state = self.get_agent(agent_state.id)
|
|
883
901
|
return in_memory_agent_state
|
|
884
902
|
|
|
885
|
-
def get_agent(self, agent_id: str) -> AgentState:
|
|
903
|
+
def get_agent(self, agent_id: str) -> Optional[AgentState]:
|
|
886
904
|
"""
|
|
887
905
|
Retrieve the full agent state from the DB.
|
|
888
906
|
This gathers data accross multiple tables to provide the full state of an agent, which is passed into the `Agent` object for creation.
|
|
@@ -893,6 +911,8 @@ class SyncServer(Server):
|
|
|
893
911
|
if agent_state is None:
|
|
894
912
|
# agent does not exist
|
|
895
913
|
return None
|
|
914
|
+
if agent_state.user_id is None:
|
|
915
|
+
raise ValueError(f"Agent {agent_id} does not have a user_id")
|
|
896
916
|
user = self.user_manager.get_user_by_id(user_id=agent_state.user_id)
|
|
897
917
|
|
|
898
918
|
# construct the in-memory, full agent state - this gather data stored in different tables but that needs to be passed to `Agent`
|
|
@@ -1333,7 +1353,7 @@ class SyncServer(Server):
|
|
|
1333
1353
|
records = records[::-1]
|
|
1334
1354
|
|
|
1335
1355
|
return records
|
|
1336
|
-
|
|
1356
|
+
|
|
1337
1357
|
def get_server_config(self, include_defaults: bool = False) -> dict:
|
|
1338
1358
|
"""Return the base config"""
|
|
1339
1359
|
|