feat: add agent id input validation in retrieve endpoint (#3892)

This commit is contained in:
cthomas
2025-08-13 14:03:05 -07:00
committed by GitHub
parent a78ccfe87b
commit aab41cdb76
2 changed files with 6 additions and 1 deletions

View File

@@ -35,6 +35,7 @@ LETTA_TOOL_MODULE_NAMES = [
DEFAULT_ORG_ID = "org-00000000-0000-4000-8000-000000000000"
DEFAULT_ORG_NAME = "default_org"
AGENT_ID_PATTERN = re.compile(r"^agent-[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$", re.IGNORECASE)
# String in the error message for when the context window is too large
# Example full message:

View File

@@ -13,7 +13,7 @@ from sqlalchemy.exc import IntegrityError, OperationalError
from starlette.responses import Response, StreamingResponse
from letta.agents.letta_agent import LettaAgent
from letta.constants import DEFAULT_MAX_STEPS, DEFAULT_MESSAGE_TOOL, DEFAULT_MESSAGE_TOOL_KWARG, REDIS_RUN_ID_PREFIX
from letta.constants import AGENT_ID_PATTERN, DEFAULT_MAX_STEPS, DEFAULT_MESSAGE_TOOL, DEFAULT_MESSAGE_TOOL_KWARG, REDIS_RUN_ID_PREFIX
from letta.data_sources.redis_client import get_redis_client
from letta.errors import AgentExportIdMappingError, AgentExportProcessingError, AgentFileImportError, AgentNotFoundForExportError
from letta.groups.sleeptime_multi_agent_v2 import SleeptimeMultiAgentV2
@@ -672,6 +672,10 @@ async def retrieve_agent(
"""
Get the state of the agent.
"""
# Check if agent_id matches uuid4 format
if not AGENT_ID_PATTERN.match(agent_id):
raise HTTPException(status_code=400, detail=f"agent_id {agent_id} is not in the valid format 'agent-<uuid4>'")
actor = await server.user_manager.get_actor_or_default_async(actor_id=actor_id)
try: