Skip to content

feat(ui): find rows by a pasted ID on keys, agents, memory, audit, and request logs - #39661

Merged
ryan-crabbe-berri merged 5 commits into
litellm_internal_stagingfrom
litellm_lit_4741_copy_id_search
Sep 3, 2026
Merged

ryan-crabbe-berri merged 5 commits into
litellm_internal_stagingfrom
litellm_lit_4741_copy_id_search

Conversation

@ryan-crabbe-berri

@ryan-crabbe-berri ryan-crabbe-berri commented Sep 3, 2026 •

Copy link
Copy Markdown
Contributor

TLDR

Problem this solves:

  • An ID copied from one page finds nothing when pasted into another page's search
  • Virtual Keys search ignores the key hash
  • Team Virtual Keys has no key hash filter at all
  • Agents search skips the agent id
  • Memory search skips the memory id
  • Audit Logs has no search box
  • Request Logs search only matches request ids

How it solves it:

  • key/list, v1/memory, audit, and spend/logs/ui accept a search param
  • Each page's search box sends that param, so pasted ids resolve
  • Agents search also matches the agent id client-side
  • Team Virtual Keys gains a Key ID filter in the drawer

User Flow

Before: an admin copies a key hash from a log row and pastes it into Virtual Keys, and the search matches nothing

  1. They open http://localhost:4000/ui/?page=logs, click a row, and copy the key hash from the drawer
  2. They open http://localhost:4000/ui/?page=api-keys and paste it into the search box
  3. The table keeps showing every key, because the box only matched the alias
  4. They open the team on http://localhost:4000/ui/?page=teams, pick the Virtual Keys tab, and paste the hash: every key still shows, and the filter drawer has no Key ID field
  5. They copy an agent id from http://localhost:4000/ui/?page=agents and paste it into that page's search box: "No matching agents"
  6. They copy a memory id from http://localhost:4000/ui/?page=memory and paste it into the search box: no memories listed
  7. They open the Audit Logs tab on http://localhost:4000/ui/?page=logs: there is no search box, only the filter drawer
  8. They paste a session id into the Request Logs search box: the table is empty, because the box only matched request ids

After: the same paste finds the row on every page

  1. They open http://localhost:4000/ui/?page=logs, click a row, and copy the key hash from the drawer
  2. They open http://localhost:4000/ui/?page=api-keys and paste it into the search box
  3. The table narrows to that one key
  4. They open the team on http://localhost:4000/ui/?page=teams, pick the Virtual Keys tab, and paste the hash: the table narrows to that key, and the filter drawer now also offers a Key ID field
  5. They paste the agent id into the Agents search box: that agent is the only row
  6. They paste the memory id into the Memory search box: that memory is the only row
  7. The Audit Logs tab now has a search box; pasting the key hash shows the audit row for that key
  8. They paste the session id into the Request Logs search box: the table shows the requests from that session

Relevant issues

Linear ticket

Resolves LIT-4741

Pre-Submission checklist

Please complete all items before asking a LiteLLM maintainer to review your PR

  • I have added meaningful tests
  • The handful of test files covering my change pass locally, e.g. uv run pytest tests/test_litellm/<your_test_file>.py -v. Leave the suites (make test-unit-*, make test-unit) to CI: it finishes in ~15 minutes where a laptop takes an hour or more
  • My PR passes all required CI/CD checks (e.g., lint, schema.d.ts sync check, etc.)
  • My PR's scope is as isolated as possible; it only solves 1 specific problem
  • I have received a Greptile Confidence Score of at least 4/5 before requesting a maintainer review (Greptile reviews automatically once the PR is opened; only comment @greptileai to re-request a review after pushing changes)

Delays in PR merge?

If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).

Screenshots / Proof of Fix

Two proxies ran against the same Postgres: the merge base on :4741 with its dashboard dev server on :3741, and the PR tip on :4742 with its dashboard on :3742. Before running either side, one team, one key in that team, one chat completion made with that key under a session id, one memory entry, and one agent were created through the API, giving these ids

KEY_HASH=da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b
TEAM_ID=190353d0-2ad7-433a-825c-c5511ad8bed7
SESSION_ID=lit4741-144523-session
MEMORY_ID=35cf6c47-4c0b-4c5f-bb34-b55176249119
AGENT_ID=61845cbf-57ee-4cbd-840f-e2f55a1c03b9

Before (8699998)

Virtual Keys: paste the key hash

  1. curl -s 'http://localhost:4741/key/list?search=da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b&return_full_object=true' -H 'Authorization: Bearer sk-1234' | jq '{total_count, aliases: [.keys[].key_alias]}'

    {
      "total_count": 143,
      "aliases": [
        "lit4741-144523-key",
        "mr_widen2_1788293511",
        "mr_widen_1788293463",
        "mr_inherit_1788293463",
        "mr_narrow_1788293463",
        "pr37044-window-qa-1788235855",
        "pr37044-window-qa-1788234378",
        "pr37044-window-qa-1788231967",
        "listing-qa-scoped-openai",
        "listing-qa-scoped-key"
      ]
    }
  2. Open http://localhost:3741/?page=api-keys and paste the key hash into the search box: every key still shows

    before-virtual-keys

Team Virtual Keys: paste the key hash

  1. Open http://localhost:3741/?page=teams, click the team, open the Virtual Keys tab, and paste the key hash into the search box: the key does not show, and the filter drawer has no Key ID field

    before-team-virtual-keys

Agents: paste the agent id

  1. Open http://localhost:3741/?page=agents and paste the agent id into the search box: "No matching agents"

    before-agents

Memory: paste the memory id

  1. curl -s 'http://localhost:4741/v1/memory?search=35cf6c47-4c0b-4c5f-bb34-b55176249119' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.memories[] | {memory_id, key}]}'

    {
      "total": 2,
      "rows": [
        {
          "memory_id": "217a08de-fe00-4f8a-aa62-134d9c9c5bce",
          "key": "lit4741-decoy:prefs"
        },
        {
          "memory_id": "35cf6c47-4c0b-4c5f-bb34-b55176249119",
          "key": "lit4741-144523:profile"
        }
      ]
    }
  2. Open http://localhost:3741/?page=memory and paste the memory id into the search box: no memories listed

    before-memory

Audit Logs: paste the key hash or team id

  1. curl -s 'http://localhost:4741/audit?search=da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.audit_logs[] | {table_name, action, object_id}]}'

    {
      "total": 274,
      "rows": [
        {
          "table_name": "LiteLLM_UserTable",
          "action": "updated",
          "object_id": "default_user_id"
        },
        {
          "table_name": "LiteLLM_VerificationToken",
          "action": "created",
          "object_id": "da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b"
        },
        {
          "table_name": "LiteLLM_TeamTable",
          "action": "created",
          "object_id": "190353d0-2ad7-433a-825c-c5511ad8bed7"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "deleted",
          "object_id": "lit4738a-search-user"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "updated",
          "object_id": "default_user_id"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "updated",
          "object_id": "default_user_id"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "created",
          "object_id": "lit4738a-search-user"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "updated",
          "object_id": "default_user_id"
        },
        {
          "table_name": "LiteLLM_ProxyModelTable",
          "action": "deleted",
          "object_id": "beea582c-0a8e-4062-a316-067cbd6a5feb"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "updated",
          "object_id": "default_user_id"
        }
      ]
    }
  2. curl -s 'http://localhost:4741/audit?search=190353d0-2ad7-433a-825c-c5511ad8bed7' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.audit_logs[] | {table_name, action, object_id}]}'

    {
      "total": 274,
      "rows": [
        {
          "table_name": "LiteLLM_UserTable",
          "action": "updated",
          "object_id": "default_user_id"
        },
        {
          "table_name": "LiteLLM_VerificationToken",
          "action": "created",
          "object_id": "da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b"
        },
        {
          "table_name": "LiteLLM_TeamTable",
          "action": "created",
          "object_id": "190353d0-2ad7-433a-825c-c5511ad8bed7"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "deleted",
          "object_id": "lit4738a-search-user"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "updated",
          "object_id": "default_user_id"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "updated",
          "object_id": "default_user_id"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "created",
          "object_id": "lit4738a-search-user"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "updated",
          "object_id": "default_user_id"
        },
        {
          "table_name": "LiteLLM_ProxyModelTable",
          "action": "deleted",
          "object_id": "beea582c-0a8e-4062-a316-067cbd6a5feb"
        },
        {
          "table_name": "LiteLLM_UserTable",
          "action": "updated",
          "object_id": "default_user_id"
        }
      ]
    }
  3. Open http://localhost:3741/?page=logs and pick the Audit Logs tab: there is no search box

    before-audit-logs

Request Logs: paste a session id, team id, or key hash

  1. curl -s 'http://localhost:4741/spend/logs/ui?search=lit4741-144523-session&start_date=2026-09-02%2021:55:32&end_date=2026-09-04%2021:55:32' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.data[:3][] | {request_id, session_id, team_id}]}'

    {
      "total": 44,
      "rows": [
        {
          "request_id": "chatcmpl-EK9XJo56cePuTwzE8p7bOtVxRYDxf",
          "session_id": "lit4741-144523-session",
          "team_id": "190353d0-2ad7-433a-825c-c5511ad8bed7"
        },
        {
          "request_id": "chatcmpl-EK6A0FAsgWlMv1nxcHUZRzHLHYwSs",
          "session_id": "lit-4929-qa-1788458945",
          "team_id": ""
        },
        {
          "request_id": "chatcmpl-EK69zgkzOrrk64sEX9huxG4LAkMvu",
          "session_id": "lit-4929-qa-1788458945",
          "team_id": ""
        }
      ]
    }
  2. curl -s 'http://localhost:4741/spend/logs/ui?search=190353d0-2ad7-433a-825c-c5511ad8bed7&start_date=2026-09-02%2021:55:32&end_date=2026-09-04%2021:55:32' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.data[:3][] | {request_id, session_id, team_id}]}'

    {
      "total": 44,
      "rows": [
        {
          "request_id": "chatcmpl-EK9XJo56cePuTwzE8p7bOtVxRYDxf",
          "session_id": "lit4741-144523-session",
          "team_id": "190353d0-2ad7-433a-825c-c5511ad8bed7"
        },
        {
          "request_id": "chatcmpl-EK6A0FAsgWlMv1nxcHUZRzHLHYwSs",
          "session_id": "lit-4929-qa-1788458945",
          "team_id": ""
        },
        {
          "request_id": "chatcmpl-EK69zgkzOrrk64sEX9huxG4LAkMvu",
          "session_id": "lit-4929-qa-1788458945",
          "team_id": ""
        }
      ]
    }
  3. curl -s 'http://localhost:4741/spend/logs/ui?search=da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b&start_date=2026-09-02%2021:55:32&end_date=2026-09-04%2021:55:32' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.data[:3][] | {request_id, api_key}]}'

    {
      "total": 44,
      "rows": [
        {
          "request_id": "chatcmpl-EK9XJo56cePuTwzE8p7bOtVxRYDxf",
          "api_key": "da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b"
        },
        {
          "request_id": "chatcmpl-EK6A0FAsgWlMv1nxcHUZRzHLHYwSs",
          "api_key": "litellm_proxy_master_key"
        },
        {
          "request_id": "chatcmpl-EK69zgkzOrrk64sEX9huxG4LAkMvu",
          "api_key": "litellm_proxy_master_key"
        }
      ]
    }
  4. Open http://localhost:3741/?page=logs and paste the session id into the Request Logs search box: the table is empty

    before-request-logs

After (9464888)

Virtual Keys: paste the key hash

  1. curl -s 'http://localhost:4742/key/list?search=da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b&return_full_object=true' -H 'Authorization: Bearer sk-1234' | jq '{total_count, aliases: [.keys[].key_alias]}'

    {
      "total_count": 1,
      "aliases": [
        "lit4741-144523-key"
      ]
    }
  2. Open http://localhost:3742/?page=api-keys and paste the key hash into the search box: the table narrows to that key

    after-virtual-keys

Team Virtual Keys: paste the key hash

  1. Open http://localhost:3742/?page=teams, click the team, open the Virtual Keys tab, and paste the key hash into the search box: the table narrows to that key

    after-team-virtual-keys

Agents: paste the agent id

  1. Open http://localhost:3742/?page=agents and paste the agent id into the search box: that agent is the only row

    after-agents

Memory: paste the memory id

  1. curl -s 'http://localhost:4742/v1/memory?search=35cf6c47-4c0b-4c5f-bb34-b55176249119' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.memories[] | {memory_id, key}]}'

    {
      "total": 1,
      "rows": [
        {
          "memory_id": "35cf6c47-4c0b-4c5f-bb34-b55176249119",
          "key": "lit4741-144523:profile"
        }
      ]
    }
  2. Open http://localhost:3742/?page=memory and paste the memory id into the search box: that memory is the only row

    after-memory

Audit Logs: paste the key hash or team id

  1. curl -s 'http://localhost:4742/audit?search=da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.audit_logs[] | {table_name, action, object_id}]}'

    {
      "total": 1,
      "rows": [
        {
          "table_name": "LiteLLM_VerificationToken",
          "action": "created",
          "object_id": "da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b"
        }
      ]
    }
  2. curl -s 'http://localhost:4742/audit?search=190353d0-2ad7-433a-825c-c5511ad8bed7' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.audit_logs[] | {table_name, action, object_id}]}'

    {
      "total": 1,
      "rows": [
        {
          "table_name": "LiteLLM_TeamTable",
          "action": "created",
          "object_id": "190353d0-2ad7-433a-825c-c5511ad8bed7"
        }
      ]
    }
  3. Open http://localhost:3742/?page=logs, pick the Audit Logs tab, and paste the key hash into the new search box: the audit row for that key is the only row

    after-audit-logs

Request Logs: paste a session id, team id, or key hash

  1. curl -s 'http://localhost:4742/spend/logs/ui?search=lit4741-144523-session&start_date=2026-09-02%2023:05:31&end_date=2026-09-04%2023:05:31' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.data[:3][] | {request_id, session_id, team_id}]}'

    {
      "total": 1,
      "rows": [
        {
          "request_id": "chatcmpl-EK9XJo56cePuTwzE8p7bOtVxRYDxf",
          "session_id": "lit4741-144523-session",
          "team_id": "190353d0-2ad7-433a-825c-c5511ad8bed7"
        }
      ]
    }
  2. curl -s 'http://localhost:4742/spend/logs/ui?search=190353d0-2ad7-433a-825c-c5511ad8bed7&start_date=2026-09-02%2023:05:31&end_date=2026-09-04%2023:05:31' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.data[:3][] | {request_id, session_id, team_id}]}'

    {
      "total": 1,
      "rows": [
        {
          "request_id": "chatcmpl-EK9XJo56cePuTwzE8p7bOtVxRYDxf",
          "session_id": "lit4741-144523-session",
          "team_id": "190353d0-2ad7-433a-825c-c5511ad8bed7"
        }
      ]
    }
  3. curl -s 'http://localhost:4742/spend/logs/ui?search=da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b&start_date=2026-09-02%2023:05:31&end_date=2026-09-04%2023:05:31' -H 'Authorization: Bearer sk-1234' | jq '{total, rows: [.data[:3][] | {request_id, api_key}]}'

    {
      "total": 1,
      "rows": [
        {
          "request_id": "chatcmpl-EK9XJo56cePuTwzE8p7bOtVxRYDxf",
          "api_key": "da1abd4096c1b7cc325b3a5a62430f59883c46a49f8ae06272e4080278eff64b"
        }
      ]
    }
  4. Open http://localhost:3742/?page=logs and paste the session id into the Request Logs search box: the table shows the request from that session

    after-request-logs

Type

🆕 New Feature
🐛 Bug Fix

Caveats (if any)

Medium

  • Audit Logs and Request Logs search is exact match on ids, not substring
  • Request Logs search turns off session grouping while it is active

Low

  • Request Logs search matches ids only inside the selected date window, except request_id
  • /spend/logs/v2 accepts search too, always inside its required date window
  • Team Virtual Keys filter drawer gains a Key ID field

Final Attestation

  • The tests check the right things, including the edge cases, and regressions in the respective real-world customer use-cases are not possible after this PR

https://claude.ai/code/session_01Q5sbiogJzPcCRmYSbaHxZf

…listings

GET /key/list?search= matches the key hash (a raw sk- key is hashed
first) or a case-insensitive alias substring, and key_hash= now hashes a
raw sk- value too. GET /v1/memory?search= matches a key prefix or an
exact memory_id. GET /audit?search= matches id, object_id, changed_by,
or changed_by_api_key. GET /spend/logs/ui?search= matches request_id
across all time and api_key, team_id, user, end_user, session_id, or
model_id inside the date window; session grouping is skipped while a
search is active.

Claude-Session: https://claude.ai/code/session_01Q5sbiogJzPcCRmYSbaHxZf
Virtual Keys and Team Virtual Keys send the search box to the new
key/list search param so a key hash matches. Agents matches agent_id
client-side. Memory sends the box as search so a memory_id matches.
Audit Logs gains a search box. Request Logs sends the box as search so
a session, team, user, key hash, or model id matches without opening
the filter drawer.

Claude-Session: https://claude.ai/code/session_01Q5sbiogJzPcCRmYSbaHxZf
@codspeed

codspeed Bot commented Sep 3, 2026 •

Copy link
Copy Markdown
Contributor

Merging this PR will not alter performance

✅ 31 untouched benchmarks


Comparing litellm_lit_4741_copy_id_search (9464888) with litellm_internal_staging (a5b3bc8)

Open in CodSpeed

@greptile-apps

greptile-apps Bot commented Sep 3, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR adds ID-aware search across virtual keys, agents, memory, audit logs, and request logs.

  • Adds server-side search filters to key, memory, audit-log, and spend-log endpoints.
  • Connects dashboard search inputs to the new API parameters and adds agent-ID matching.
  • Adds focused backend and frontend regression tests for search behavior, visibility scoping, date windows, and session grouping.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
enterprise/litellm_enterprise/proxy/audit_logging_endpoints.py Adds exact search across audit-log identifier fields while composing it with existing filters.
litellm/proxy/management_endpoints/key_management_endpoints.py Adds combined exact token and case-insensitive alias search to key listings.
litellm/proxy/memory/memory_endpoints.py Adds memory-ID and key-prefix search while retaining visibility scoping.
litellm/proxy/spend_tracking/spend_management_endpoints.py Adds multi-identifier spend-log search with documented date-window and grouping behavior.
ui/litellm-dashboard/src/components/view_logs/AuditLogsPanel.tsx Adds dashboard audit-log search integration.
ui/litellm-dashboard/src/components/view_logs/RequestLogsPanel.tsx Connects request-log search to server-side multi-ID filtering.
ui/litellm-dashboard/src/components/team/TeamVirtualKeysTable.tsx Adds key-ID filtering for team virtual keys.
ui/litellm-dashboard/src/app/(dashboard)/memory/_components/MemoryView.tsx Connects memory search to the server-side search parameter.

Reviews (3): Last reviewed commit: "test(proxy): pass search=None in direct ..." | Re-trigger Greptile

Comment thread litellm/proxy/spend_tracking/spend_management_endpoints.py
Comment thread ui/litellm-dashboard/src/app/(dashboard)/hooks/keys/useKeys.ts
@veria-ai

veria-ai Bot commented Sep 3, 2026 •

Copy link
Copy Markdown
Contributor

PR overview

All previously flagged issues have been addressed. No open security concerns remain on this pull request.

Security review

No open security issues remain on this pull request.

Fixed/addressed: 1 · PR risk: 0/10

@codecov

codecov Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

The search= param on /key/list, /audit, and /spend/logs/ui, plus key_hash= on /key/list, now compare the pasted value verbatim. Only a copied key ID (the hash) matches, so a raw virtual key never needs to travel in a GET query string

Claude-Session: https://claude.ai/code/session_01Q5sbiogJzPcCRmYSbaHxZf
@ryan-crabbe-berri

Copy link
Copy Markdown
Contributor Author

@greptile re review

@ryan-crabbe-berri

Copy link
Copy Markdown
Contributor Author

@veria-ai review

Calling the endpoint without going through FastAPI leaves the new search param set to its Query default object, which is not None, so the grouped-session and request_id lookup tests started taking the search branch

Claude-Session: https://claude.ai/code/session_01Q5sbiogJzPcCRmYSbaHxZf
@ryan-crabbe-berri

Copy link
Copy Markdown
Contributor Author

@greptile re review

@ryan-crabbe-berri

Copy link
Copy Markdown
Contributor Author

@veria-ai review

@ryan-crabbe-berri
ryan-crabbe-berri merged commit a53c550 into litellm_internal_staging Sep 3, 2026
81 of 82 checks passed
@ryan-crabbe-berri
ryan-crabbe-berri deleted the litellm_lit_4741_copy_id_search branch September 3, 2026 23:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants