Merge pull request #37361 from sytianhe/litellm_spend_log_timestamps

feat(spend-logs): add lifecycle timestamps
This commit is contained in:
Mateo Wang 2026-08-19 13:29:49 -07:00 committed by GitHub
commit 0f19b5b9ab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 34 additions and 0 deletions

View file

@ -0,0 +1,3 @@
ALTER TABLE "LiteLLM_SpendLogs"
ADD COLUMN IF NOT EXISTS "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN IF NOT EXISTS "updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;

View file

@ -641,6 +641,8 @@ model LiteLLM_SpendLogs {
mcp_namespaced_tool_name String?
agent_id String?
proxy_server_request Json? @default("{}")
created_at DateTime @default(now()) @map("created_at")
updated_at DateTime @default(now()) @updatedAt @map("updated_at")
@@index([startTime])
@@index([startTime, request_id])
@@index([end_user])

View file

@ -33,6 +33,8 @@ class LiteLLM_SpendLogs(LiteLLMPydanticObjectBase):
requester_ip_address: str | None = None
messages: str | list | dict | None
response: str | list | dict | None
created_at: datetime | None = None
updated_at: datetime | None = None
class LiteLLM_ErrorLogs(LiteLLMPydanticObjectBase):

View file

@ -641,6 +641,8 @@ model LiteLLM_SpendLogs {
mcp_namespaced_tool_name String?
agent_id String?
proxy_server_request Json? @default("{}")
created_at DateTime @default(now()) @map("created_at")
updated_at DateTime @default(now()) @updatedAt @map("updated_at")
@@index([startTime])
@@index([startTime, request_id])
@@index([end_user])

View file

@ -641,6 +641,8 @@ model LiteLLM_SpendLogs {
mcp_namespaced_tool_name String?
agent_id String?
proxy_server_request Json? @default("{}")
created_at DateTime @default(now()) @map("created_at")
updated_at DateTime @default(now()) @updatedAt @map("updated_at")
@@index([startTime])
@@index([startTime, request_id])
@@index([end_user])

View file

@ -498,6 +498,25 @@ class TestSpendLogs:
assert log.request_id == "r1"
assert log.spend == 0.0
assert log.cache_hit == "False"
assert log.created_at is None
assert log.updated_at is None
def test_spend_logs_parse_database_timestamps(self):
created_at = datetime(2026, 8, 18, 12, 0, 0)
updated_at = datetime(2026, 8, 18, 12, 5, 0)
log = LiteLLM_SpendLogs(
request_id="r1",
api_key="sk-1",
call_type="completion",
startTime=None,
endTime=None,
messages=None,
response=None,
created_at=created_at,
updated_at=updated_at,
)
assert log.created_at == created_at
assert log.updated_at == updated_at
def test_error_logs_creation(self):
log = LiteLLM_ErrorLogs(

View file

@ -27746,6 +27746,8 @@ export interface components {
* @default 0
*/
completion_tokens: number | null;
/** Created At */
created_at?: string | null;
/** Endtime */
endTime: string | null;
/** Messages */
@ -27789,6 +27791,8 @@ export interface components {
* @default 0
*/
total_tokens: number | null;
/** Updated At */
updated_at?: string | null;
/**
* User
* @default