From 3faf5d5927abdc3036862d4d06e085cda0eb6cd4 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/72] chore(internal): reformat pyproject.toml From cccb539c8c1c6a311609643914800f11e5780bc8 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/72] 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 e90e0400ad05c838fb7847241a70ddbfcf3f4aed 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/72] 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 5268da26f16b33140051429dce07880f49fb79dc 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/72] 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 20e680f1a3ffc4fe9178ecfa93ebf3470c879f36 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/72] 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 332eb817129c60f88c39da6eab6332b75969cd9d 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/72] 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 30a29a8ac01cf11d2e94e8e544e425ff9900bb0e 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/72] 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 e7a3e524a54c2fa6dbddff700a7f69d0fecde89d 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/72] 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 62e5266b94dd65f2be4d00f4a27ea744ddf5a6b7 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/72] 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 a7dda473959e2ebf6ac3de9646c6eb3ab20e3481 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/72] 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 57074a134c30fcc29c51e023b45cd514a1b6da6b 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/72] 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 e1f84c8c703d58d0dce744e1cdcc17b4980d0034 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/72] 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 1f2e4a41971f3373c9db37ada6720abdaafa606c 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/72] 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 65f154d585d7fba5c3692104bfd455299ab64127 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/72] 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 2b244b3c9d56533823a8ef00b0eb08cb27f2859d 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/72] 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 b66cdbc0a9483a6f679c7c915d4b8e2751d4c4e5 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/72] 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 4743884f16f05f4f830c8be16370f5ece585199d 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/72] 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 b5d691d9494520febebe721b183ae89efc9ad4f4 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/72] 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 a2e308b05e8565ae896228337c10b3d42e710d32 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/72] 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 ae7d65a41b844156922b94aae1158f1ed2d87e31 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/72] 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 11edd53fd83a01e36a90889796b970716085d00e 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/72] 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 bb171e9e1a9a77d81986d677d126853791c7a86e 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/72] 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 dd4f91707810597c0a5b8b6c64c9cfc22b3fd25d 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/72] 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 a7f90df66c1b44da28eb40247393dde5dd10c883 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/72] 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 8bc1035ff2103fabe6481f8e00ef447faae4b68c 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/72] 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 def72ebfd65d4cd018b054e7fb4a274b6cde0e84 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/72] 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 3c5877ffe62ae254b28cc768263ee0b772f48cd2 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/72] 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 eaea40d442210fd68269ce4697109c13c2cff826 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/72] 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 6ac87a8d4a9d9c3b14bc4389fce52ad576c97209 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/72] 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 77fd2c735b4911f69c16e995aba933ad1c07ba8b 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/72] 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 c8392f2bbd417e2ed7d4ca2e5089e06ddbaef538 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/72] 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 7417bc5c735a795678daf0f0efb5613130e828fc 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/72] 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 1d151d2ae87228a991455e09af592801a06dd15a 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/72] 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 05fd9e22dcc7216ddbb7e5264f697ecfdb4b5441 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/72] 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 47f531d43cc8ebf928b6651851eb626cdbb2c721 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/72] 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 5cf02fd5dc7145e858f3d06a5c2efe0f81df9ccd 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/72] 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 545842d17571e608fab6e738f2bef91e6bf8db71 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/72] 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 a4067ed4236915ad714bff1e1863781262f6b3e9 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/72] 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 6f380ec1282ad81e50bbde95e0ebf720e7d0e02c 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/72] 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 061c18762f25089e1488ebe740c3cea6a465e02e 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/72] 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 d4a182e005bd94d9e1ab4ca127b06386940fbede 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/72] 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 f7f758b7ab073770fcc5103980d253e88c049bcf 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/72] 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 758089bb88c19087f7085ac0e43270a108f96364 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/72] 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 f441611a61f5c1b40daa6862a0e50d981ec79532 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/72] 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 e76a2f5ef9947e49024739c4443f49b488ca87a4 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/72] 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 29b0fc0f984b4317f7f30ea766189e99b04b4fee 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/72] 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 e614f6740073ad4d73219c5d51455fa4fd7bbd3b 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/72] 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 d88aa94021e5bdc1c2d4882c2f01dcc774ca146d 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/72] 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 1448a97f802205a9894a41748a3c18a5acc9ca9e 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/72] 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 5715828a358c20b1cc895a696d0c8d803ec71932 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/72] chore(internal): version bump From b0569d0818746f4a499c89afcd87a9c92c888406 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/72] 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 f79a20019c019d510df09487d19b51b4fd2181dd 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/72] 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 23fb7e47e3b0a7e9627486cb7cb1473c0e404229 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/72] 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 8d89bfb1c41643f48a7d0c9b0395baab694f059b Mon Sep 17 00:00:00 2001 From: Alvin Kam Date: Mon, 4 May 2026 15:50:46 -0700 Subject: [PATCH 54/72] 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 82871b3bdea75ff571175ec6b5c0f62f4af57a93 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/72] 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 63d4d509beb096b27bc606edd9adb5b711bcead0 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/72] 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 89334732f0d7858ce2ce76bf1c5e24e93144654c 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/72] 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 3deed3a1f552246053144547b9835fb1187bc758 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/72] 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 cbdd298571a5078d6b512ad4d1c7d7cf089e7c00 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/72] 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 e3fc47ef3264a2768cac99db1cb9c0ee465b505f 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/72] 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 18d56e4cc2cba3293cb06144ce25e5715406f52a 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/72] 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 2f8a4dbf8af68174735f8dd816d568b532cc4d7f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 07:21:30 +0000 Subject: [PATCH 62/72] 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 f10e02874808fd340430ef5855e99d081ce524a6 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 08:21:30 +0000 Subject: [PATCH 63/72] 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 c938cbbbaf039ad9045b7f2e51a7b36bb61efd34 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 09:21:28 +0000 Subject: [PATCH 64/72] 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 3ea4d3530d91d6bcfb2033f7ad5d7f827d35379e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 10:21:30 +0000 Subject: [PATCH 65/72] 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 dd01706375b21f2ee2c89201863c16ad8f4b8516 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 12:21:35 +0000 Subject: [PATCH 66/72] 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 af028371c4df56f2a7062886735b951fa5a6a966 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 16:21:32 +0000 Subject: [PATCH 67/72] 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 a6d478bf5a1278f9a0f1c3d41a7faacff87ef692 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 17:21:36 +0000 Subject: [PATCH 68/72] 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 ba06702fd362656d594f73852ad2c690383892a8 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 69/72] chore(internal): reformat pyproject.toml From 168cc44f8199015e232cd2bddf1669a08ee90778 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 70/72] chore(internal): version bump From ffaecd5a94b4082f9ef38d5c89286eabf3811759 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 19:22:46 +0000 Subject: [PATCH 71/72] feat(api): api update --- .stats.yml | 4 +-- src/agentex/resources/tasks.py | 32 ++++++++++++++++--- src/agentex/types/agent_rpc_by_name_params.py | 7 ++++ src/agentex/types/agent_rpc_params.py | 7 ++++ src/agentex/types/task_list_params.py | 9 ++++++ tests/api_resources/test_agents.py | 4 +++ tests/api_resources/test_tasks.py | 4 +++ 7 files changed, 61 insertions(+), 6 deletions(-) diff --git a/.stats.yml b/.stats.yml index 10797f8dc..089720ba3 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-b997afde6595db62caea38bca035fda2812ea52cc8f360dab829b71178e826e6.yml +openapi_spec_hash: d195a98bf64b6edb826bc420773ca52e config_hash: fb079ef7936611b032568661b8165f19 diff --git a/src/agentex/resources/tasks.py b/src/agentex/resources/tasks.py index d1e33f3a5..67704e36b 100644 --- a/src/agentex/resources/tasks.py +++ b/src/agentex/resources/tasks.py @@ -109,6 +109,9 @@ def list( order_direction: str | Omit = omit, page_number: int | Omit = omit, relationships: List[Literal["agents"]] | Omit = omit, + status: Optional[Literal["CANCELED", "COMPLETED", "FAILED", "RUNNING", "TERMINATED", "TIMED_OUT", "DELETED"]] + | Omit = omit, + task_metadata: Optional[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -116,10 +119,17 @@ def list( extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> TaskListResponse: - """ - List all tasks. + """List all tasks. Args: + status: Filter tasks by status (e.g. + + RUNNING, COMPLETED). + + task_metadata: + JSON-encoded object used to filter tasks via JSONB containment. Example: + {"created_by_user_id": "abc-123"}. + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -144,6 +154,8 @@ def list( "order_direction": order_direction, "page_number": page_number, "relationships": relationships, + "status": status, + "task_metadata": task_metadata, }, task_list_params.TaskListParams, ), @@ -679,6 +691,9 @@ async def list( order_direction: str | Omit = omit, page_number: int | Omit = omit, relationships: List[Literal["agents"]] | Omit = omit, + status: Optional[Literal["CANCELED", "COMPLETED", "FAILED", "RUNNING", "TERMINATED", "TIMED_OUT", "DELETED"]] + | Omit = omit, + task_metadata: Optional[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -686,10 +701,17 @@ async def list( extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> TaskListResponse: - """ - List all tasks. + """List all tasks. Args: + status: Filter tasks by status (e.g. + + RUNNING, COMPLETED). + + task_metadata: + JSON-encoded object used to filter tasks via JSONB containment. Example: + {"created_by_user_id": "abc-123"}. + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -714,6 +736,8 @@ async def list( "order_direction": order_direction, "page_number": page_number, "relationships": relationships, + "status": status, + "task_metadata": task_metadata, }, task_list_params.TaskListParams, ), diff --git a/src/agentex/types/agent_rpc_by_name_params.py b/src/agentex/types/agent_rpc_by_name_params.py index ec0f638ea..65bcc65c5 100644 --- a/src/agentex/types/agent_rpc_by_name_params.py +++ b/src/agentex/types/agent_rpc_by_name_params.py @@ -35,6 +35,13 @@ class ParamsCreateTaskRequest(TypedDict, total=False): params: Optional[Dict[str, object]] """The parameters for the task""" + task_metadata: Optional[Dict[str, object]] + """Caller-provided metadata to persist on the task row. + + Only applied at task creation; ignored if a task with this name already exists. + Forwarded to the agent inside the ACP payload for backward compatibility. + """ + class ParamsCancelTaskRequest(TypedDict, total=False): task_id: Optional[str] diff --git a/src/agentex/types/agent_rpc_params.py b/src/agentex/types/agent_rpc_params.py index fa101e796..9129dc166 100644 --- a/src/agentex/types/agent_rpc_params.py +++ b/src/agentex/types/agent_rpc_params.py @@ -35,6 +35,13 @@ class ParamsCreateTaskRequest(TypedDict, total=False): params: Optional[Dict[str, object]] """The parameters for the task""" + task_metadata: Optional[Dict[str, object]] + """Caller-provided metadata to persist on the task row. + + Only applied at task creation; ignored if a task with this name already exists. + Forwarded to the agent inside the ACP payload for backward compatibility. + """ + class ParamsCancelTaskRequest(TypedDict, total=False): task_id: Optional[str] diff --git a/src/agentex/types/task_list_params.py b/src/agentex/types/task_list_params.py index e41bf821b..f3f0ff4d9 100644 --- a/src/agentex/types/task_list_params.py +++ b/src/agentex/types/task_list_params.py @@ -22,3 +22,12 @@ class TaskListParams(TypedDict, total=False): page_number: int relationships: List[Literal["agents"]] + + status: Optional[Literal["CANCELED", "COMPLETED", "FAILED", "RUNNING", "TERMINATED", "TIMED_OUT", "DELETED"]] + """Filter tasks by status (e.g. RUNNING, COMPLETED).""" + + task_metadata: Optional[str] + """JSON-encoded object used to filter tasks via JSONB containment. + + Example: {"created_by_user_id": "abc-123"}. + """ diff --git a/tests/api_resources/test_agents.py b/tests/api_resources/test_agents.py index 859dee815..6e8f24839 100644 --- a/tests/api_resources/test_agents.py +++ b/tests/api_resources/test_agents.py @@ -250,6 +250,7 @@ def test_method_rpc_with_all_params(self, client: Agentex) -> None: params={ "name": "name", "params": {"foo": "bar"}, + "task_metadata": {"foo": "bar"}, }, id=0, jsonrpc="2.0", @@ -315,6 +316,7 @@ def test_method_rpc_by_name_with_all_params(self, client: Agentex) -> None: params={ "name": "name", "params": {"foo": "bar"}, + "task_metadata": {"foo": "bar"}, }, id=0, jsonrpc="2.0", @@ -594,6 +596,7 @@ async def test_method_rpc_with_all_params(self, async_client: AsyncAgentex) -> N params={ "name": "name", "params": {"foo": "bar"}, + "task_metadata": {"foo": "bar"}, }, id=0, jsonrpc="2.0", @@ -659,6 +662,7 @@ async def test_method_rpc_by_name_with_all_params(self, async_client: AsyncAgent params={ "name": "name", "params": {"foo": "bar"}, + "task_metadata": {"foo": "bar"}, }, id=0, jsonrpc="2.0", diff --git a/tests/api_resources/test_tasks.py b/tests/api_resources/test_tasks.py index 0f1dd591d..0e70529dd 100644 --- a/tests/api_resources/test_tasks.py +++ b/tests/api_resources/test_tasks.py @@ -93,6 +93,8 @@ def test_method_list_with_all_params(self, client: Agentex) -> None: order_direction="order_direction", page_number=0, relationships=["agents"], + status="CANCELED", + task_metadata="task_metadata", ) assert_matches_type(TaskListResponse, task, path=["response"]) @@ -818,6 +820,8 @@ async def test_method_list_with_all_params(self, async_client: AsyncAgentex) -> order_direction="order_direction", page_number=0, relationships=["agents"], + status="CANCELED", + task_metadata="task_metadata", ) assert_matches_type(TaskListResponse, task, path=["response"]) From 4c5762bfd9bd827cfc3352b444718099432a466d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 19:56:04 +0000 Subject: [PATCH 72/72] release: 0.10.5 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 17 +++++++++++++++++ pyproject.toml | 2 +- src/agentex/_version.py | 2 +- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index e1206f497..ae11ed3c5 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.10.4" + ".": "0.10.5" } diff --git a/CHANGELOG.md b/CHANGELOG.md index f908c282d..7b37e6651 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## 0.10.5 (2026-05-05) + +Full Changelog: [v0.10.4...v0.10.5](https://github.com/scaleapi/scale-agentex-python/compare/v0.10.4...v0.10.5) + +### Features + +* **api:** api update ([ffaecd5](https://github.com/scaleapi/scale-agentex-python/commit/ffaecd5a94b4082f9ef38d5c89286eabf3811759)) +* **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 ([ba06702](https://github.com/scaleapi/scale-agentex-python/commit/ba06702fd362656d594f73852ad2c690383892a8)) +* **internal:** reformat pyproject.toml ([3faf5d5](https://github.com/scaleapi/scale-agentex-python/commit/3faf5d5927abdc3036862d4d06e085cda0eb6cd4)) +* **internal:** version bump ([168cc44](https://github.com/scaleapi/scale-agentex-python/commit/168cc44f8199015e232cd2bddf1669a08ee90778)) +* **internal:** version bump ([5715828](https://github.com/scaleapi/scale-agentex-python/commit/5715828a358c20b1cc895a696d0c8d803ec71932)) + ## 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 369417695..a2dcd2751 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "agentex-sdk" -version = "0.10.4" +version = "0.10.5" 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..bc15d6ab6 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.10.5" # x-release-please-version