feat: make identities many to many (#1085)
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import traceback
|
||||
from datetime import datetime
|
||||
from typing import Annotated, List, Optional
|
||||
|
||||
@@ -51,7 +52,7 @@ def list_agents(
|
||||
project_id: Optional[str] = Query(None, description="Search agents by project id"),
|
||||
template_id: Optional[str] = Query(None, description="Search agents by template id"),
|
||||
base_template_id: Optional[str] = Query(None, description="Search agents by base template id"),
|
||||
identifier_key: Optional[str] = Query(None, description="Search agents by identifier key"),
|
||||
identifier_keys: Optional[List[str]] = Query(None, description="Search agents by identifier keys"),
|
||||
):
|
||||
"""
|
||||
List all agents associated with a given user.
|
||||
@@ -67,7 +68,6 @@ def list_agents(
|
||||
"project_id": project_id,
|
||||
"template_id": template_id,
|
||||
"base_template_id": base_template_id,
|
||||
"identifier_key": identifier_key,
|
||||
}.items()
|
||||
if value is not None
|
||||
}
|
||||
@@ -81,6 +81,7 @@ def list_agents(
|
||||
query_text=query_text,
|
||||
tags=tags,
|
||||
match_all_tags=match_all_tags,
|
||||
identifier_keys=identifier_keys,
|
||||
**kwargs,
|
||||
)
|
||||
return agents
|
||||
@@ -119,8 +120,12 @@ def create_agent(
|
||||
"""
|
||||
Create a new agent with the specified configuration.
|
||||
"""
|
||||
actor = server.user_manager.get_user_or_default(user_id=user_id)
|
||||
return server.create_agent(agent, actor=actor)
|
||||
try:
|
||||
actor = server.user_manager.get_user_or_default(user_id=user_id)
|
||||
return server.create_agent(agent, actor=actor)
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.patch("/{agent_id}", response_model=AgentState, operation_id="modify_agent")
|
||||
|
||||
@@ -16,6 +16,7 @@ router = APIRouter(prefix="/identities", tags=["identities"])
|
||||
def list_identities(
|
||||
name: Optional[str] = Query(None),
|
||||
project_id: Optional[str] = Query(None),
|
||||
identifier_key: Optional[str] = Query(None),
|
||||
identity_type: Optional[IdentityType] = Query(None),
|
||||
before: Optional[str] = Query(None),
|
||||
after: Optional[str] = Query(None),
|
||||
@@ -30,7 +31,14 @@ def list_identities(
|
||||
actor = server.user_manager.get_user_or_default(user_id=user_id)
|
||||
|
||||
identities = server.identity_manager.list_identities(
|
||||
name=name, project_id=project_id, identity_type=identity_type, before=before, after=after, limit=limit, actor=actor
|
||||
name=name,
|
||||
project_id=project_id,
|
||||
identifier_key=identifier_key,
|
||||
identity_type=identity_type,
|
||||
before=before,
|
||||
after=after,
|
||||
limit=limit,
|
||||
actor=actor,
|
||||
)
|
||||
except HTTPException:
|
||||
raise
|
||||
@@ -39,13 +47,13 @@ def list_identities(
|
||||
return identities
|
||||
|
||||
|
||||
@router.get("/{identifier_key}", tags=["identities"], response_model=Identity, operation_id="get_identity_from_identifier_key")
|
||||
@router.get("/{identity_id}", tags=["identities"], response_model=Identity, operation_id="retrieve_identity")
|
||||
def retrieve_identity(
|
||||
identifier_key: str,
|
||||
identity_id: str,
|
||||
server: "SyncServer" = Depends(get_letta_server),
|
||||
):
|
||||
try:
|
||||
return server.identity_manager.get_identity_from_identifier_key(identifier_key=identifier_key)
|
||||
return server.identity_manager.get_identity(identity_id=identity_id)
|
||||
except NoResultFound as e:
|
||||
raise HTTPException(status_code=404, detail=str(e))
|
||||
|
||||
@@ -82,25 +90,25 @@ def upsert_identity(
|
||||
raise HTTPException(status_code=500, detail=f"{e}")
|
||||
|
||||
|
||||
@router.patch("/{identifier_key}", tags=["identities"], response_model=Identity, operation_id="update_identity")
|
||||
@router.patch("/{identity_id}", tags=["identities"], response_model=Identity, operation_id="update_identity")
|
||||
def modify_identity(
|
||||
identifier_key: str,
|
||||
identity_id: str,
|
||||
identity: IdentityUpdate = Body(...),
|
||||
server: "SyncServer" = Depends(get_letta_server),
|
||||
user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
||||
):
|
||||
try:
|
||||
actor = server.user_manager.get_user_or_default(user_id=user_id)
|
||||
return server.identity_manager.update_identity_by_key(identifier_key=identifier_key, identity=identity, actor=actor)
|
||||
return server.identity_manager.update_identity(identity_id=identity_id, identity=identity, actor=actor)
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"{e}")
|
||||
|
||||
|
||||
@router.delete("/{identifier_key}", tags=["identities"], operation_id="delete_identity")
|
||||
@router.delete("/{identity_id}", tags=["identities"], operation_id="delete_identity")
|
||||
def delete_identity(
|
||||
identifier_key: str,
|
||||
identity_id: str,
|
||||
server: "SyncServer" = Depends(get_letta_server),
|
||||
user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
||||
):
|
||||
@@ -108,4 +116,4 @@ def delete_identity(
|
||||
Delete an identity by its identifier key
|
||||
"""
|
||||
actor = server.user_manager.get_user_or_default(user_id=user_id)
|
||||
server.identity_manager.delete_identity_by_key(identifier_key=identifier_key, actor=actor)
|
||||
server.identity_manager.delete_identity(identity_id=identity_id, actor=actor)
|
||||
|
||||
Reference in New Issue
Block a user