From b836ad28ec928cfb75324f5ec9d6c0ea8958799b Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Thu, 7 May 2026 15:50:22 -0700 Subject: [PATCH] managed agents: add GET /v1/managed_agents/sessions Adds list_sessions with optional ?agent_id= filter, ordered by created_at desc. Needed for the agent-platform UI sessions-list page and for computing 'active' status on the agents-list page. --- .../endpoints_sessions.py | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/managed_agents_endpoints/endpoints_sessions.py b/litellm/proxy/managed_agents_endpoints/endpoints_sessions.py index d2b33d021b1..580142cbbcb 100644 --- a/litellm/proxy/managed_agents_endpoints/endpoints_sessions.py +++ b/litellm/proxy/managed_agents_endpoints/endpoints_sessions.py @@ -1,10 +1,10 @@ import asyncio import json from datetime import datetime, timezone -from typing import Any, Dict, Optional +from typing import Any, Dict, List, Optional import httpx -from fastapi import Depends, HTTPException +from fastapi import Depends, HTTPException, Query from litellm._logging import verbose_proxy_logger from litellm.proxy.auth.user_api_key_auth import UserAPIKeyAuth, user_api_key_auth @@ -41,6 +41,7 @@ def _session_row_to_out(row, response: Optional[Dict[str, Any]] = None) -> Sessi status=row.status, task_arn=row.task_arn, response=response, + created_at=getattr(row, "created_at", None), ) @@ -270,6 +271,26 @@ async def create_session( await client.aclose() +@router.get("/sessions", response_model=List[SessionOut]) +async def list_sessions( + agent_id: Optional[str] = Query(default=None), + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +) -> List[SessionOut]: + from litellm.proxy.proxy_server import prisma_client + + if prisma_client is None: + raise HTTPException(status_code=500, detail="prisma client not available") + + where: Dict[str, Any] = {} + if agent_id is not None: + where["agent_id"] = agent_id + + rows = await prisma_client.db.litellm_managedagentsessiontable.find_many( + where=where, order={"created_at": "desc"} + ) + return [_session_row_to_out(row) for row in rows] + + @router.get("/sessions/{session_id}", response_model=SessionOut) async def get_session( session_id: str,