From 0c2adf29d22fb30ff17c7f8943f97bf5dd7d91a8 Mon Sep 17 00:00:00 2001 From: cthomas Date: Mon, 15 Sep 2025 13:32:37 -0700 Subject: [PATCH] feat: add new headers dependency to routes (#2903) --- fern/scripts/prepare-openapi.ts | 2 +- letta/server/rest_api/dependencies/headers.py | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 letta/server/rest_api/dependencies/headers.py diff --git a/fern/scripts/prepare-openapi.ts b/fern/scripts/prepare-openapi.ts index d232dbb7..7df4d687 100644 --- a/fern/scripts/prepare-openapi.ts +++ b/fern/scripts/prepare-openapi.ts @@ -98,7 +98,7 @@ for (const path of Object.keys(lettaAgentsAPI.paths)) { ][method].parameters.filter( (param: Record) => param.in !== 'header' || - (param.name !== 'user_id' && param.name !== 'actor_id'), + (param.name !== 'user_id' && param.name !== 'User-Agent' && param.name !== 'X-Project-Id'), ); } } diff --git a/letta/server/rest_api/dependencies/headers.py b/letta/server/rest_api/dependencies/headers.py new file mode 100644 index 00000000..3350f23f --- /dev/null +++ b/letta/server/rest_api/dependencies/headers.py @@ -0,0 +1,25 @@ +from typing import Optional + +from fastapi import Header +from pydantic import BaseModel + + +class HeaderParams(BaseModel): + """Common header parameters used across REST API endpoints.""" + + actor_id: Optional[str] = None + user_agent: Optional[str] = None + project_id: Optional[str] = None + + +def get_headers( + actor_id: Optional[str] = Header(None, alias="user_id"), + user_agent: Optional[str] = Header(None, alias="User-Agent"), + project_id: Optional[str] = Header(None, alias="X-Project-Id"), +) -> HeaderParams: + """Dependency injection function to extract common headers from requests.""" + return HeaderParams( + actor_id=actor_id, + user_agent=user_agent, + project_id=project_id, + )