Skip to content

Add conversation observability metadata#3270

Draft
neubig wants to merge 1 commit into
mainfrom
openhands/laminar-conversation-metadata
Draft

Add conversation observability metadata#3270
neubig wants to merge 1 commit into
mainfrom
openhands/laminar-conversation-metadata

Conversation

@neubig
Copy link
Copy Markdown
Contributor

@neubig neubig commented May 15, 2026

Summary

  • add validated conversation-level observability_metadata and observability_tags fields to start requests
  • pass metadata through local/remote conversation construction and the agent server into Laminar root spans
  • apply trace metadata and span tags when creating the Laminar root span

Tests

  • uv run pytest -q tests/sdk/conversation/test_base_span_management.py tests/sdk/conversation/test_tags.py tests/sdk/observability/test_laminar.py
  • uv run ruff check openhands-sdk/openhands/sdk/conversation/base.py openhands-sdk/openhands/sdk/conversation/conversation.py openhands-sdk/openhands/sdk/conversation/impl/local_conversation.py openhands-sdk/openhands/sdk/conversation/impl/remote_conversation.py openhands-sdk/openhands/sdk/conversation/request.py openhands-sdk/openhands/sdk/conversation/types.py openhands-sdk/openhands/sdk/observability/laminar.py openhands-sdk/openhands/sdk/settings/model.py openhands-agent-server/openhands/agent_server/event_service.py tests/sdk/conversation/test_base_span_management.py tests/sdk/conversation/test_tags.py tests/sdk/observability/test_laminar.py

This PR was created by an AI agent (OpenHands) on behalf of the user.

@neubig can click here to continue refining the PR


Agent Server images for this PR

GHCR package: https://github.com/OpenHands/agent-sdk/pkgs/container/agent-server

Variants & Base Images

Variant Architectures Base Image Docs / Tags
java amd64, arm64 eclipse-temurin:17-jdk Link
python amd64, arm64 nikolaik/python-nodejs:python3.13-nodejs22-slim Link
golang amd64, arm64 golang:1.21-bookworm Link

Pull (multi-arch manifest)

# Each variant is a multi-arch manifest supporting both amd64 and arm64
docker pull ghcr.io/openhands/agent-server:8467f37-python

Run

docker run -it --rm \
  -p 8000:8000 \
  --name agent-server-8467f37-python \
  ghcr.io/openhands/agent-server:8467f37-python

All tags pushed for this build

ghcr.io/openhands/agent-server:8467f37-golang-amd64
ghcr.io/openhands/agent-server:8467f3705db6b8b298658cb28264aa9f85940f4c-golang-amd64
ghcr.io/openhands/agent-server:openhands-laminar-conversation-metadata-golang-amd64
ghcr.io/openhands/agent-server:8467f37-golang_tag_1.21-bookworm-amd64
ghcr.io/openhands/agent-server:8467f37-golang-arm64
ghcr.io/openhands/agent-server:8467f3705db6b8b298658cb28264aa9f85940f4c-golang-arm64
ghcr.io/openhands/agent-server:openhands-laminar-conversation-metadata-golang-arm64
ghcr.io/openhands/agent-server:8467f37-golang_tag_1.21-bookworm-arm64
ghcr.io/openhands/agent-server:8467f37-java-amd64
ghcr.io/openhands/agent-server:8467f3705db6b8b298658cb28264aa9f85940f4c-java-amd64
ghcr.io/openhands/agent-server:openhands-laminar-conversation-metadata-java-amd64
ghcr.io/openhands/agent-server:8467f37-eclipse-temurin_tag_17-jdk-amd64
ghcr.io/openhands/agent-server:8467f37-java-arm64
ghcr.io/openhands/agent-server:8467f3705db6b8b298658cb28264aa9f85940f4c-java-arm64
ghcr.io/openhands/agent-server:openhands-laminar-conversation-metadata-java-arm64
ghcr.io/openhands/agent-server:8467f37-eclipse-temurin_tag_17-jdk-arm64
ghcr.io/openhands/agent-server:8467f37-python-amd64
ghcr.io/openhands/agent-server:8467f3705db6b8b298658cb28264aa9f85940f4c-python-amd64
ghcr.io/openhands/agent-server:openhands-laminar-conversation-metadata-python-amd64
ghcr.io/openhands/agent-server:8467f37-nikolaik_s_python-nodejs_tag_python3.13-nodejs22-slim-amd64
ghcr.io/openhands/agent-server:8467f37-python-arm64
ghcr.io/openhands/agent-server:8467f3705db6b8b298658cb28264aa9f85940f4c-python-arm64
ghcr.io/openhands/agent-server:openhands-laminar-conversation-metadata-python-arm64
ghcr.io/openhands/agent-server:8467f37-nikolaik_s_python-nodejs_tag_python3.13-nodejs22-slim-arm64
ghcr.io/openhands/agent-server:8467f37-golang
ghcr.io/openhands/agent-server:8467f3705db6b8b298658cb28264aa9f85940f4c-golang
ghcr.io/openhands/agent-server:openhands-laminar-conversation-metadata-golang
ghcr.io/openhands/agent-server:8467f37-golang_tag_1.21-bookworm
ghcr.io/openhands/agent-server:8467f37-java
ghcr.io/openhands/agent-server:8467f3705db6b8b298658cb28264aa9f85940f4c-java
ghcr.io/openhands/agent-server:openhands-laminar-conversation-metadata-java
ghcr.io/openhands/agent-server:8467f37-eclipse-temurin_tag_17-jdk
ghcr.io/openhands/agent-server:8467f37-python
ghcr.io/openhands/agent-server:8467f3705db6b8b298658cb28264aa9f85940f4c-python
ghcr.io/openhands/agent-server:openhands-laminar-conversation-metadata-python
ghcr.io/openhands/agent-server:8467f37-nikolaik_s_python-nodejs_tag_python3.13-nodejs22-slim

About Multi-Architecture Support

  • Each variant tag (e.g., 8467f37-python) is a multi-arch manifest supporting both amd64 and arm64
  • Docker automatically pulls the correct architecture for your platform
  • Individual architecture tags (e.g., 8467f37-python-amd64) are also available if needed

Co-authored-by: openhands <openhands@all-hands.dev>
@github-actions
Copy link
Copy Markdown
Contributor

Python API breakage checks — ✅ PASSED

Result:PASSED

Action log

@github-actions
Copy link
Copy Markdown
Contributor

REST API breakage checks (OpenAPI) — ✅ PASSED

Result:PASSED

Action log

@github-actions
Copy link
Copy Markdown
Contributor

Coverage

Coverage Report •
FileStmtsMissCoverMissing
openhands-agent-server/openhands/agent_server
   event_service.py44310177%83–84, 114, 117–118, 122–123, 130, 134, 140, 150–154, 157–160, 219, 240–241, 312, 363, 373, 397–398, 402, 410, 413, 461, 463, 467–469, 473, 482–483, 485, 489, 495, 497, 527–532, 558, 561, 612, 616, 765, 767–768, 772, 786–788, 790, 794–797, 801–804, 812–815, 821–824, 863–864, 866–873, 875–876, 885–886, 888–889, 896–897, 899–900, 920, 926, 932, 941–942
openhands-sdk/openhands/sdk/conversation
   conversation.py34876%147, 160–161, 167–170, 174
   request.py71987%64, 223, 226, 228–229, 232–233, 237, 244
   types.py53198%66
openhands-sdk/openhands/sdk/conversation/impl
   local_conversation.py4442295%308, 313, 444, 490, 527, 543, 608, 827–828, 831, 1002, 1004, 1008–1009, 1020–1021, 1046, 1241, 1245, 1315, 1322–1323
   remote_conversation.py6579585%144, 171, 184, 186–189, 199, 221–222, 227–230, 314, 324–326, 332, 406, 553–556, 558, 584–588, 593–596, 599, 615, 772–773, 777–778, 792, 818–819, 838, 849–850, 870–873, 875–876, 904–906, 909–913, 915–916, 920, 922–930, 932, 969, 1100, 1172–1173, 1177, 1182–1186, 1192–1198, 1211, 1216, 1251, 1464–1465
openhands-sdk/openhands/sdk/observability
   laminar.py1964875%37–41, 103, 170–171, 184–185, 211–212, 277–284, 299–303, 322–323, 326–328, 332, 334–336, 351, 355, 407, 421, 465, 487–490, 523–525, 527–528
openhands-sdk/openhands/sdk/settings
   model.py5765290%84, 109, 114, 353, 363–366, 369, 382, 386, 392, 402, 408, 413, 613, 626, 637, 647, 651, 653, 655, 657, 659, 661, 663, 665, 667, 939, 941, 1054, 1235, 1303, 1341, 1426, 1462–1465, 1491, 1615, 1660, 1692, 1702, 1704, 1709, 1727, 1740, 1742, 1744, 1746, 1753
TOTAL27311627277% 

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