feat: add helper to verify sdk version [ADD-1] (#5698)

feat: add helper to verify sdk version
This commit is contained in:
cthomas
2025-10-23 12:36:15 -07:00
committed by Caren Thomas
parent e8cb8e3342
commit ee7f2b9e84
4 changed files with 284 additions and 1 deletions

View File

@@ -41,6 +41,7 @@ from letta.helpers.json_helpers import json_dumps, json_loads
from letta.log import get_logger
from letta.otel.tracing import log_attributes, trace_method
from letta.schemas.openai.chat_completion_response import ChatCompletionResponse
from letta.server.rest_api.dependencies import HeaderParams
logger = get_logger(__name__)
@@ -1400,3 +1401,51 @@ def fire_and_forget(coro, task_name: Optional[str] = None, error_callback: Optio
task.add_done_callback(callback)
return task
def is_1_0_sdk_version(headers: HeaderParams):
"""
Check if the SDK version is 1.0.0 or above.
1. If sdk_version is provided from stainless (all stainless versions are 1.0.0+)
2. If user_agent is provided and in the format
@letta-ai/letta-client/version (node) or
letta-client/version (python)
"""
sdk_version = headers.sdk_version
if sdk_version:
return True
client = headers.user_agent
if "/" not in client:
return False
# Split into parts to validate format
parts = client.split("/")
# Should have at least 2 parts (client-name/version)
if len(parts) < 2:
return False
if len(parts) == 3:
# Format: @letta-ai/letta-client/version
if parts[0] != "@letta-ai" or parts[1] != "letta-client":
return False
elif len(parts) == 2:
# Format: letta-client/version
if parts[0] != "letta-client":
return False
else:
return False
# Extract and validate version
maybe_version = parts[-1]
if "." not in maybe_version:
return False
# Extract major version (handle alpha/beta suffixes like 1.0.0-alpha.2 or 1.0.0a5)
version_base = maybe_version.split("-")[0].split("a")[0].split("b")[0]
if "." not in version_base:
return False
major_version = version_base.split(".")[0]
return major_version == "1"