From 76e0299a84d283bbaa1b51c1d9c19f507c4858ba Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 19:46:28 +0000 Subject: [PATCH 01/62] chore(internal): reformat pyproject.toml From 374dd9a9cee4a9bfbe9e6861e97e8dc550d952ee Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 21:21:06 +0000 Subject: [PATCH 02/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index fa6353aa4..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-c108a179582f0e0c6d479ea4b3bc6310a83693987073967c2b6203df23718eb2.yml -openapi_spec_hash: 53b8e5866709af71bef94816b8ede38b +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From ce995684e0f937f444a6a62a51c475009438a325 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 22:21:04 +0000 Subject: [PATCH 03/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 781fa6096d2512c9833351edc7b5be99f7c0ba77 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 23:21:03 +0000 Subject: [PATCH 04/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From d807d4a876050247ee732ba0fcae2a34946f55d0 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 01:21:08 +0000 Subject: [PATCH 05/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 1a823ac32356d65d26b184d76450aa0913d8b44a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 07:21:27 +0000 Subject: [PATCH 06/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 2f4f8fff7e93261d76644040cf63f298e29f49f5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 11:21:25 +0000 Subject: [PATCH 07/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 09ccff7e2a606034452e77d082914f8444027bb1 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 14:21:24 +0000 Subject: [PATCH 08/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 481fc64069fc34866d0e5d612f3ea95918e4558d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 15:21:55 +0000 Subject: [PATCH 09/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 751e6e2025331fa86c8d52dad39971e8f6322a40 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 16:21:34 +0000 Subject: [PATCH 10/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 7d52c8bcc78103c46bfb0a5eeccc3e121e9ff3f3 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 17:21:24 +0000 Subject: [PATCH 11/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From dc26b2096044ef9fee71363c8446df9897411e33 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 20:21:29 +0000 Subject: [PATCH 12/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From d3d2fd3eaf24a8eabe10f96b558884f071c024e2 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 21:21:25 +0000 Subject: [PATCH 13/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 604484a69872622cb441d5c2de2ebe55477c4b4b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 02:21:27 +0000 Subject: [PATCH 14/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From fb2b652bf5aa201918528bf713cc6b1cd466887a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 03:21:27 +0000 Subject: [PATCH 15/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From f9e100dee998f402bcaf9a4bf6e53b14c76de2d5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 04:21:30 +0000 Subject: [PATCH 16/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From d2c3873cf506d333c7e568cccad2a43e356c0e2e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 05:21:45 +0000 Subject: [PATCH 17/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From b4ac8454430558bba6529513af0a27fd78c9bc08 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 06:21:28 +0000 Subject: [PATCH 18/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 1f81349d77de93b3eed5fb2af57729ccc9da893a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 09:21:27 +0000 Subject: [PATCH 19/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From c020912d10960ea37f96f39dc85b6ad8fda22542 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 10:21:25 +0000 Subject: [PATCH 20/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 8c93c463ab2c79e9b39d76f59718c3f70c00a86f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 14:21:30 +0000 Subject: [PATCH 21/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From d4589442b2a19ba96a348fd92777ca9c2edac0cf Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 15:21:34 +0000 Subject: [PATCH 22/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 50e7c837499d72b43300bbc3f68b2f029846113a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 18:21:29 +0000 Subject: [PATCH 23/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 66270059dbe06082cfc7fe392c9136a035240673 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 19:21:30 +0000 Subject: [PATCH 24/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From a0ff612da74c5e492a76f99dbc5f1afa4738cbad Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 20:21:31 +0000 Subject: [PATCH 25/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 3ef680491c7f7c8c357fd19c75f805cd69b2863e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 22:21:30 +0000 Subject: [PATCH 26/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From a3d0650c4cf232083ff6c9ba4919e034e6ba091e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 00:21:30 +0000 Subject: [PATCH 27/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 6ba71ee22a90cfe2455045a1cc192a4ba239f7a8 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 02:21:30 +0000 Subject: [PATCH 28/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 4d15e724c4ebaf5ec329cfbeb3449945e2f58c55 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 04:21:30 +0000 Subject: [PATCH 29/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 34d770c4dc6c83b89fe5dfa0386550473d5ad724 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 05:21:30 +0000 Subject: [PATCH 30/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 4218e0177e2f727556cc8f0dab868d82ba16aa1f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 06:21:28 +0000 Subject: [PATCH 31/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 3b8adfd558e257c3d8bbd1df1141fa2d1ebbddd8 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 09:21:29 +0000 Subject: [PATCH 32/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From a79813a198918255f0dc2de647d2e660c074241f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 10:21:36 +0000 Subject: [PATCH 33/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 8d80f94f885749c3817ebb7f87c260e31ce72f10 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 14:21:32 +0000 Subject: [PATCH 34/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From b8535dff4d6e884ad846e3c1248bb8a6c950d935 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 15:21:27 +0000 Subject: [PATCH 35/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From d47d89a7bfbf85a34657d3993f51a807634b0535 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 16:21:29 +0000 Subject: [PATCH 36/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 6b3f2787abc516c1dbf1ecdc5a687dfd3617b7d6 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 18:21:35 +0000 Subject: [PATCH 37/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 2a0e1a4590a325585a24595aa21104162d846cb3 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 22:21:31 +0000 Subject: [PATCH 38/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 888918e1bdb801e87d81466a3574c37429c6ac7b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 00:21:32 +0000 Subject: [PATCH 39/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From e3f18891e7a369fb4148addbbb6de66ec66a60c4 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 02:21:29 +0000 Subject: [PATCH 40/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 130d61a1c80444993496f63b92200c1ca6c093c9 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 04:21:30 +0000 Subject: [PATCH 41/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From d750e09a89269d667163fbc3482733a4b1cb74dc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 06:21:29 +0000 Subject: [PATCH 42/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 168b21fd7bdfb2b6dfd4f1da1da8896441d7c726 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 07:22:52 +0000 Subject: [PATCH 43/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 406192a36fabb2b917d10222e5ff40c1c58e0179 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 08:21:39 +0000 Subject: [PATCH 44/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 082a01affeb504003acb047fa26fb65274dcb30d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 09:21:28 +0000 Subject: [PATCH 45/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From ad0faaf41da38c27d91ceca96a82d2546c0ae18b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 11:21:32 +0000 Subject: [PATCH 46/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 7c918dbb849dfda0335d3253aa590faf92a51938 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 13:21:33 +0000 Subject: [PATCH 47/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 01492fef1f7f13ae859dc4afd0fa257c9f842696 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 14:21:30 +0000 Subject: [PATCH 48/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From c6f56f72b11f00123a455ffd1352fc2f9f7b7f68 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 15:21:31 +0000 Subject: [PATCH 49/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 0d318adfcbe6a8b09bef2a81ff70fe5a59acef46 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 16:26:18 +0000 Subject: [PATCH 50/62] chore(internal): version bump From eda66f5067b43d065c331c0a25a70606c626b087 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 19:21:31 +0000 Subject: [PATCH 51/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 91db92ce47814acfcabfcb338793bdbf8a69f9fe Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 20:21:27 +0000 Subject: [PATCH 52/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 6b4dd25bc0280ca246103cef4635c0cd46f95af2 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 22:15:50 +0000 Subject: [PATCH 53/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..fa6353aa4 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-c108a179582f0e0c6d479ea4b3bc6310a83693987073967c2b6203df23718eb2.yml +openapi_spec_hash: 53b8e5866709af71bef94816b8ede38b config_hash: fb079ef7936611b032568661b8165f19 From c1e7675532d1d335e65137867ba7ba50581108c3 Mon Sep 17 00:00:00 2001 From: Alvin Kam Date: Mon, 4 May 2026 15:50:46 -0700 Subject: [PATCH 54/62] batch SGP span upserts (#331) --- .../processors/sgp_tracing_processor.py | 78 +++++++++------ .../processors/tracing_processor_interface.py | 43 ++++++++ src/agentex/lib/core/tracing/span_queue.py | 43 +++++--- .../processors/test_sgp_tracing_processor.py | 39 ++++++++ .../test_tracing_processor_interface.py | 98 +++++++++++++++++++ tests/lib/core/tracing/test_span_queue.py | 97 ++++++++++++++++++ 6 files changed, 352 insertions(+), 46 deletions(-) create mode 100644 tests/lib/core/tracing/processors/test_tracing_processor_interface.py diff --git a/src/agentex/lib/core/tracing/processors/sgp_tracing_processor.py b/src/agentex/lib/core/tracing/processors/sgp_tracing_processor.py index 1376df06c..187dedcbc 100644 --- a/src/agentex/lib/core/tracing/processors/sgp_tracing_processor.py +++ b/src/agentex/lib/core/tracing/processors/sgp_tracing_processor.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import override import scale_gp_beta.lib.tracing as tracing @@ -125,48 +127,64 @@ def _add_source_to_span(self, span: Span) -> None: @override async def on_span_start(self, span: Span) -> None: - self._add_source_to_span(span) - sgp_span = create_span( - name=span.name, - span_type=_get_span_type(span), - span_id=span.id, - parent_id=span.parent_id, - trace_id=span.trace_id, - input=span.input, - output=span.output, - metadata=span.data, - ) - sgp_span.start_time = span.start_time.isoformat() # type: ignore[union-attr] + await self.on_spans_start([span]) + + @override + async def on_span_end(self, span: Span) -> None: + await self.on_spans_end([span]) + + @override + async def on_spans_start(self, spans: list[Span]) -> None: + if not spans: + return + + sgp_spans: list[SGPSpan] = [] + for span in spans: + self._add_source_to_span(span) + sgp_span = create_span( + name=span.name, + span_type=_get_span_type(span), + span_id=span.id, + parent_id=span.parent_id, + trace_id=span.trace_id, + input=span.input, + output=span.output, + metadata=span.data, + ) + sgp_span.start_time = span.start_time.isoformat() # type: ignore[union-attr] + self._spans[span.id] = sgp_span + sgp_spans.append(sgp_span) if self.disabled: logger.warning("SGP is disabled, skipping span upsert") return - # TODO(AGX1-198): Batch multiple spans into a single upsert_batch call - # instead of one span per HTTP request. - # https://linear.app/scale-epd/issue/AGX1-198/actually-use-sgp-batching-for-spans await self.sgp_async_client.spans.upsert_batch( # type: ignore[union-attr] - items=[sgp_span.to_request_params()] + items=[s.to_request_params() for s in sgp_spans] ) - self._spans[span.id] = sgp_span - @override - async def on_span_end(self, span: Span) -> None: - sgp_span = self._spans.pop(span.id, None) - if sgp_span is None: - logger.warning(f"Span {span.id} not found in stored spans, skipping span end") + async def on_spans_end(self, spans: list[Span]) -> None: + if not spans: return - self._add_source_to_span(span) - sgp_span.input = span.input # type: ignore[assignment] - sgp_span.output = span.output # type: ignore[assignment] - sgp_span.metadata = span.data # type: ignore[assignment] - sgp_span.end_time = span.end_time.isoformat() # type: ignore[union-attr] - - if self.disabled: + to_upsert: list[SGPSpan] = [] + for span in spans: + sgp_span = self._spans.pop(span.id, None) + if sgp_span is None: + logger.warning(f"Span {span.id} not found in stored spans, skipping span end") + continue + + self._add_source_to_span(span) + sgp_span.input = span.input # type: ignore[assignment] + sgp_span.output = span.output # type: ignore[assignment] + sgp_span.metadata = span.data # type: ignore[assignment] + sgp_span.end_time = span.end_time.isoformat() # type: ignore[union-attr] + to_upsert.append(sgp_span) + + if self.disabled or not to_upsert: return await self.sgp_async_client.spans.upsert_batch( # type: ignore[union-attr] - items=[sgp_span.to_request_params()] + items=[s.to_request_params() for s in to_upsert] ) @override diff --git a/src/agentex/lib/core/tracing/processors/tracing_processor_interface.py b/src/agentex/lib/core/tracing/processors/tracing_processor_interface.py index 4ab85dcf4..f352f38c4 100644 --- a/src/agentex/lib/core/tracing/processors/tracing_processor_interface.py +++ b/src/agentex/lib/core/tracing/processors/tracing_processor_interface.py @@ -1,7 +1,13 @@ +from __future__ import annotations + +import asyncio from abc import ABC, abstractmethod from agentex.types.span import Span from agentex.lib.types.tracing import TracingProcessorConfig +from agentex.lib.utils.logging import make_logger + +logger = make_logger(__name__) class SyncTracingProcessor(ABC): @@ -35,6 +41,43 @@ async def on_span_start(self, span: Span) -> None: async def on_span_end(self, span: Span) -> None: pass + async def on_spans_start(self, spans: list[Span]) -> None: + """Batched variant of on_span_start. + + Default fallback fans out to the single-span method in parallel so + existing processors keep working unchanged. Processors that support + real batching (e.g. sending all spans in one HTTP call) should + override this to avoid the per-span round trip. + + Per-span exceptions are captured and logged individually so that one + failing span does not prevent the others from being processed. + """ + results = await asyncio.gather( + *(self.on_span_start(s) for s in spans), return_exceptions=True + ) + for span, result in zip(spans, results): + if isinstance(result, Exception): + logger.error( + "Tracing processor %s failed on_span_start for span %s", + type(self).__name__, + span.id, + exc_info=result, + ) + + async def on_spans_end(self, spans: list[Span]) -> None: + """Batched variant of on_span_end. See on_spans_start for details.""" + results = await asyncio.gather( + *(self.on_span_end(s) for s in spans), return_exceptions=True + ) + for span, result in zip(spans, results): + if isinstance(result, Exception): + logger.error( + "Tracing processor %s failed on_span_end for span %s", + type(self).__name__, + span.id, + exc_info=result, + ) + @abstractmethod async def shutdown(self) -> None: pass diff --git a/src/agentex/lib/core/tracing/span_queue.py b/src/agentex/lib/core/tracing/span_queue.py index d5d09dd0f..d0d92669e 100644 --- a/src/agentex/lib/core/tracing/span_queue.py +++ b/src/agentex/lib/core/tracing/span_queue.py @@ -95,29 +95,40 @@ async def _drain_loop(self) -> None: @staticmethod async def _process_items(items: list[_SpanQueueItem]) -> None: - """Process a list of span events concurrently.""" + """Dispatch a batch of same-event-type items to each processor in one call. - async def _handle(item: _SpanQueueItem) -> None: + Groups spans by processor so each processor sees its full slice of the + drain batch at once. Processors that override the batched methods can + then send a single HTTP request per drain cycle instead of N. + """ + if not items: + return + + event_type = items[0].event_type + assert all(i.event_type == event_type for i in items), ( + "_process_items requires all items to share the same event_type; " + "callers must split START and END batches before dispatching." + ) + by_processor: dict[AsyncTracingProcessor, list[Span]] = {} + for item in items: + for p in item.processors: + by_processor.setdefault(p, []).append(item.span) + + async def _handle(p: AsyncTracingProcessor, spans: list[Span]) -> None: try: - if item.event_type == SpanEventType.START: - coros = [p.on_span_start(item.span) for p in item.processors] + if event_type == SpanEventType.START: + await p.on_spans_start(spans) else: - coros = [p.on_span_end(item.span) for p in item.processors] - results = await asyncio.gather(*coros, return_exceptions=True) - for result in results: - if isinstance(result, Exception): - logger.error( - "Tracing processor error during %s for span %s", - item.event_type.value, - item.span.id, - exc_info=result, - ) + await p.on_spans_end(spans) except Exception: logger.exception( - "Unexpected error in span queue for span %s", item.span.id + "Tracing processor %s failed handling %d spans during %s", + type(p).__name__, + len(spans), + event_type.value, ) - await asyncio.gather(*[_handle(item) for item in items]) + await asyncio.gather(*[_handle(p, spans) for p, spans in by_processor.items()]) # ------------------------------------------------------------------ # Shutdown diff --git a/tests/lib/core/tracing/processors/test_sgp_tracing_processor.py b/tests/lib/core/tracing/processors/test_sgp_tracing_processor.py index 818fed375..50d615e0d 100644 --- a/tests/lib/core/tracing/processors/test_sgp_tracing_processor.py +++ b/tests/lib/core/tracing/processors/test_sgp_tracing_processor.py @@ -188,3 +188,42 @@ async def test_sgp_span_input_updated_on_end(self): assert len(processor._spans) == 0 # The end upsert should have been called assert processor.sgp_async_client.spans.upsert_batch.call_count == 2 # start + end + + async def test_on_spans_start_sends_single_upsert_for_batch(self): + """Given N spans at once, on_spans_start should make ONE upsert_batch HTTP call.""" + processor, _ = self._make_processor() + + n = 10 + spans = [_make_span() for _ in range(n)] + with patch(f"{MODULE}.create_span", side_effect=lambda **kw: _make_mock_sgp_span()): + await processor.on_spans_start(spans) + + assert processor.sgp_async_client.spans.upsert_batch.call_count == 1, ( + "Batched on_spans_start must make exactly one upsert_batch HTTP call" + ) + items = processor.sgp_async_client.spans.upsert_batch.call_args.kwargs["items"] + assert len(items) == n + # All spans should be tracked for the subsequent end call + assert len(processor._spans) == n + + async def test_on_spans_end_sends_single_upsert_for_batch(self): + """Given N spans at once, on_spans_end should make ONE upsert_batch HTTP call.""" + processor, _ = self._make_processor() + + n = 10 + spans = [_make_span() for _ in range(n)] + with patch(f"{MODULE}.create_span", side_effect=lambda **kw: _make_mock_sgp_span()): + await processor.on_spans_start(spans) + + processor.sgp_async_client.spans.upsert_batch.reset_mock() + + for span in spans: + span.end_time = datetime.now(UTC) + await processor.on_spans_end(spans) + + assert processor.sgp_async_client.spans.upsert_batch.call_count == 1, ( + "Batched on_spans_end must make exactly one upsert_batch HTTP call" + ) + items = processor.sgp_async_client.spans.upsert_batch.call_args.kwargs["items"] + assert len(items) == n + assert len(processor._spans) == 0 diff --git a/tests/lib/core/tracing/processors/test_tracing_processor_interface.py b/tests/lib/core/tracing/processors/test_tracing_processor_interface.py new file mode 100644 index 000000000..12847b70d --- /dev/null +++ b/tests/lib/core/tracing/processors/test_tracing_processor_interface.py @@ -0,0 +1,98 @@ +from __future__ import annotations + +import uuid +import logging +from typing import override +from datetime import UTC, datetime + +from agentex.types.span import Span +from agentex.lib.types.tracing import TracingProcessorConfig +from agentex.lib.core.tracing.processors.tracing_processor_interface import ( + AsyncTracingProcessor, +) + + +def _make_span(span_id: str | None = None) -> Span: + return Span( + id=span_id or str(uuid.uuid4()), + name="test-span", + start_time=datetime.now(UTC), + trace_id="trace-1", + ) + + +class _RecordingProcessor(AsyncTracingProcessor): + """Test processor that records every on_span_* call and fails on demand.""" + + def __init__(self, fail_ids: set[str] | None = None) -> None: + self.started_ids: list[str] = [] + self.ended_ids: list[str] = [] + self._fail_ids = fail_ids or set() + + @override + async def on_span_start(self, span: Span) -> None: + self.started_ids.append(span.id) + if span.id in self._fail_ids: + raise RuntimeError(f"boom-start-{span.id}") + + @override + async def on_span_end(self, span: Span) -> None: + self.ended_ids.append(span.id) + if span.id in self._fail_ids: + raise RuntimeError(f"boom-end-{span.id}") + + @override + async def shutdown(self) -> None: + pass + + +class TestDefaultBatchedFanout: + """The default on_spans_start / on_spans_end in AsyncTracingProcessor must: + - dispatch to the single-span method for every span + - continue after individual failures (not short-circuit) + - log each failure individually + - not propagate exceptions to the caller + """ + + async def test_on_spans_start_runs_every_span_despite_failures(self, caplog): + proc = _RecordingProcessor(fail_ids={"span-1"}) + spans = [_make_span(f"span-{i}") for i in range(3)] + + with caplog.at_level(logging.ERROR): + # Must not raise, even though span-1 fails. + await proc.on_spans_start(spans) + + # Every span's on_span_start was invoked + assert proc.started_ids == ["span-0", "span-1", "span-2"] + + async def test_on_spans_start_logs_each_failure(self, caplog): + proc = _RecordingProcessor(fail_ids={"span-0", "span-2"}) + spans = [_make_span(f"span-{i}") for i in range(3)] + + with caplog.at_level(logging.ERROR): + await proc.on_spans_start(spans) + + # Two distinct error log records, one per failing span + error_records = [r for r in caplog.records if r.levelno == logging.ERROR] + messages = " ".join(r.getMessage() for r in error_records) + assert "span-0" in messages + assert "span-2" in messages + + async def test_on_spans_end_runs_every_span_despite_failures(self, caplog): + proc = _RecordingProcessor(fail_ids={"span-1"}) + spans = [_make_span(f"span-{i}") for i in range(3)] + + with caplog.at_level(logging.ERROR): + await proc.on_spans_end(spans) + + assert proc.ended_ids == ["span-0", "span-1", "span-2"] + + async def test_dummy_config_construction(self): + """AsyncTracingProcessor's __init__ is abstract — verify concrete + subclass above satisfies the interface.""" + _ = TracingProcessorConfig + proc = _RecordingProcessor() + await proc.on_spans_start([]) + await proc.on_spans_end([]) + assert proc.started_ids == [] + assert proc.ended_ids == [] diff --git a/tests/lib/core/tracing/test_span_queue.py b/tests/lib/core/tracing/test_span_queue.py index 4524ba187..0d6b2fd0a 100644 --- a/tests/lib/core/tracing/test_span_queue.py +++ b/tests/lib/core/tracing/test_span_queue.py @@ -21,9 +21,25 @@ def _make_span(span_id: str | None = None) -> Span: def _make_processor(**overrides: AsyncMock) -> AsyncMock: + """Build a mock processor compatible with the queue's batched dispatch. + + The queue now calls on_spans_start(list) / on_spans_end(list) on each + processor. Mirror the behavior of AsyncTracingProcessor's default fallback + by fanning out the list to per-span calls concurrently, so tests that + assert on on_span_start / on_span_end continue to observe per-span calls. + """ proc = AsyncMock() proc.on_span_start = overrides.get("on_span_start", AsyncMock()) proc.on_span_end = overrides.get("on_span_end", AsyncMock()) + + async def _fanout_start(spans: list[Span]) -> None: + await asyncio.gather(*(proc.on_span_start(s) for s in spans), return_exceptions=True) + + async def _fanout_end(spans: list[Span]) -> None: + await asyncio.gather(*(proc.on_span_end(s) for s in spans), return_exceptions=True) + + proc.on_spans_start = AsyncMock(side_effect=_fanout_start) + proc.on_spans_end = AsyncMock(side_effect=_fanout_end) return proc @@ -218,6 +234,87 @@ async def slow_start(span: Span) -> None: ) +class TestProcessItemsPreconditions: + """_process_items assumes every item in the list has the same event_type. + Violating that precondition silently causes END events to be treated as + STARTs (or vice versa), which is a silent data-corruption bug. Guard it + with an assertion.""" + + async def test_mixed_event_types_raise_assertion(self): + from agentex.lib.core.tracing.span_queue import _SpanQueueItem + + proc = AsyncMock() + proc.on_spans_start = AsyncMock() + proc.on_spans_end = AsyncMock() + + mixed = [ + _SpanQueueItem(event_type=SpanEventType.START, span=_make_span("a"), processors=[proc]), + _SpanQueueItem(event_type=SpanEventType.END, span=_make_span("b"), processors=[proc]), + ] + + try: + await AsyncSpanQueue._process_items(mixed) + except AssertionError: + return + else: + raise AssertionError("Expected AssertionError for mixed event types") + + +class TestAsyncSpanQueueBatchedDispatch: + """The queue should dispatch a whole drain batch to each processor via the + batched methods (on_spans_start / on_spans_end) in one call per processor, + so processors that support real HTTP batching can send one request instead + of N. + """ + + async def test_batched_start_dispatch_single_call_per_drain(self): + received: list[list[str]] = [] + + async def capture_starts(spans: list[Span]) -> None: + received.append([s.id for s in spans]) + + proc = AsyncMock() + proc.on_spans_start = AsyncMock(side_effect=capture_starts) + proc.on_spans_end = AsyncMock() + + queue = AsyncSpanQueue() + + # Enqueue several spans synchronously before the drain has a chance to + # run — they should all land in a single drain batch. + ids = [f"span-{i}" for i in range(5)] + for i in ids: + queue.enqueue(SpanEventType.START, _make_span(i), [proc]) + + await queue.shutdown() + + # on_spans_start must have been called exactly once with all 5 spans. + assert proc.on_spans_start.call_count == 1, ( + f"Expected one batched call, got {proc.on_spans_start.call_count}" + ) + assert received == [ids] + + async def test_batched_end_dispatch_single_call_per_drain(self): + received: list[list[str]] = [] + + async def capture_ends(spans: list[Span]) -> None: + received.append([s.id for s in spans]) + + proc = AsyncMock() + proc.on_spans_start = AsyncMock() + proc.on_spans_end = AsyncMock(side_effect=capture_ends) + + queue = AsyncSpanQueue() + + ids = [f"span-{i}" for i in range(5)] + for i in ids: + queue.enqueue(SpanEventType.END, _make_span(i), [proc]) + + await queue.shutdown() + + assert proc.on_spans_end.call_count == 1 + assert received == [ids] + + class TestAsyncSpanQueueIntegration: async def test_integration_with_async_trace(self): call_log: list[tuple[str, str]] = [] From b09749b6a14e752c0d75db4800d7e06af6910ec2 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 23:21:32 +0000 Subject: [PATCH 55/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index fa6353aa4..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-c108a179582f0e0c6d479ea4b3bc6310a83693987073967c2b6203df23718eb2.yml -openapi_spec_hash: 53b8e5866709af71bef94816b8ede38b +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 8921cc6ef05de880829b11624a690eb790d01469 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 00:21:35 +0000 Subject: [PATCH 56/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From bf74fd7b9d714172a60774d13ba6858444592f8d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 01:21:30 +0000 Subject: [PATCH 57/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 5aa039f54ecba746f57f2f5eaa2e2c32751e64ae Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 03:21:32 +0000 Subject: [PATCH 58/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 5a8ec93b12954f09f6a639366edaf1ad6ff11c9c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 04:21:31 +0000 Subject: [PATCH 59/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 95983d116ca151ee9a127a5e2ec720612355df40 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 05:21:35 +0000 Subject: [PATCH 60/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1ef89d297..10797f8dc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml -openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml +openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a config_hash: fb079ef7936611b032568661b8165f19 From 31a4678483f9a571766eb5b354739b86020725d1 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 06:21:32 +0000 Subject: [PATCH 61/62] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..1ef89d297 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 45 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-77d6129c9334f3e5fafbbfe9e6e31b5328a90042d36a83b7ebdf5ac803c84fad.yml -openapi_spec_hash: 29b1c8e19be86501217b5a6c1858f73a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-307ea66bdd28f83ddc0c526365cfe06f4c1bb2fd421d19f6ebb7f687d06f9ee6.yml +openapi_spec_hash: 5bbd18a405a11e8497d38a5a88b98018 config_hash: fb079ef7936611b032568661b8165f19 From 520693f99d6bc07142c2405fc38e66a167bc1ba3 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 06:22:18 +0000 Subject: [PATCH 62/62] release: 0.11.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 14 ++++++++++++++ pyproject.toml | 2 +- src/agentex/_version.py | 2 +- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index e1206f497..78e7f271d 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.10.4" + ".": "0.11.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index f908c282d..ff38f30e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## 0.11.0 (2026-05-05) + +Full Changelog: [v0.10.4...v0.11.0](https://github.com/scaleapi/scale-agentex-python/compare/v0.10.4...v0.11.0) + +### Features + +* **openai_agents:** expose real `usage`, `response_id`, plumb `previous_response_id`, opt-in `prompt_cache_key` for stateful responses and prompt caching ([#335](https://github.com/scaleapi/scale-agentex-python/issues/335)) ([ba5d64b](https://github.com/scaleapi/scale-agentex-python/commit/ba5d64be1f959ff1a35b30e647a0a5ead21a8402)) + + +### Chores + +* **internal:** reformat pyproject.toml ([76e0299](https://github.com/scaleapi/scale-agentex-python/commit/76e0299a84d283bbaa1b51c1d9c19f507c4858ba)) +* **internal:** version bump ([0d318ad](https://github.com/scaleapi/scale-agentex-python/commit/0d318adfcbe6a8b09bef2a81ff70fe5a59acef46)) + ## 0.10.4 (2026-05-04) Full Changelog: [v0.10.3...v0.10.4](https://github.com/scaleapi/scale-agentex-python/compare/v0.10.3...v0.10.4) diff --git a/pyproject.toml b/pyproject.toml index eeb562e0d..a1121161e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "agentex-sdk" -version = "0.10.4" +version = "0.11.0" description = "The official Python library for the agentex API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/agentex/_version.py b/src/agentex/_version.py index f9812cb77..59720802a 100644 --- a/src/agentex/_version.py +++ b/src/agentex/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "agentex" -__version__ = "0.10.4" # x-release-please-version +__version__ = "0.11.0" # x-release-please-version