From 8991592229de8bcf030a1fb1720333df2a0d1084 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Fri, 11 Sep 2026 23:17:08 +0000 Subject: [PATCH 1/2] =?UTF-8?q?##=20Python=20SDK=20Changes:=20*=20`textql.?= =?UTF-8?q?chats.poll=5Fevents()`:=20=20`response.events[].union(cell).cel?= =?UTF-8?q?l.union(feed=5Fcreate=5Fcell).feed=5Fcreate=5Fcell.agent.llm=5F?= =?UTF-8?q?model`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`t?= =?UTF-8?q?extql.chats.query=5Fone=5Fshot()`:=20=20=20*=20=20`request.mode?= =?UTF-8?q?l`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20=20=20*=20?= =?UTF-8?q?=20`response.cells[].union(feed=5Fcreate=5Fcell).feed=5Fcreate?= =?UTF-8?q?=5Fcell.agent.llm=5Fmodel`=20**Changed**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20*=20`textql.agents.duplicate()`:=20=20`re?= =?UTF-8?q?sponse.agent.llm=5Fmodel`=20**Changed**=20(Breaking=20=E2=9A=A0?= =?UTF-8?q?=EF=B8=8F)=20*=20`textql.agents.get=5Fagent()`:=20=20`response.?= =?UTF-8?q?agent.llm=5Fmodel`=20**Changed**=20(Breaking=20=E2=9A=A0?= =?UTF-8?q?=EF=B8=8F)=20*=20`textql.agents.list()`:=20=20`response.agents[?= =?UTF-8?q?].llm=5Fmodel`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)?= =?UTF-8?q?=20*=20`textql.agents.update()`:=20=20=20*=20=20`request.llm=5F?= =?UTF-8?q?model`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20=20=20?= =?UTF-8?q?*=20=20`response.agent.llm=5Fmodel`=20**Changed**=20(Breaking?= =?UTF-8?q?=20=E2=9A=A0=EF=B8=8F)=20*=20`textql.chats.attach=5Fagent()`:?= =?UTF-8?q?=20=20`response.chat.model`=20**Changed**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20*=20`textql.chats.attach=5Fapp()`:=20=20`?= =?UTF-8?q?response.cell.union(feed=5Fcreate=5Fcell).feed=5Fcreate=5Fcell.?= =?UTF-8?q?agent.llm=5Fmodel`=20**Changed**=20(Breaking=20=E2=9A=A0?= =?UTF-8?q?=EF=B8=8F)=20*=20`textql.chats.attach=5Fdashboard()`:=20=20`res?= =?UTF-8?q?ponse.cell.union(feed=5Fcreate=5Fcell).feed=5Fcreate=5Fcell.age?= =?UTF-8?q?nt.llm=5Fmodel`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)?= =?UTF-8?q?=20*=20`textql.chats.run()`:=20=20=20*=20=20`request.model`=20*?= =?UTF-8?q?*Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20=20=20*=20=20`re?= =?UTF-8?q?sponse.cells[].union(feed=5Fcreate=5Fcell).feed=5Fcreate=5Fcell?= =?UTF-8?q?.agent.llm=5Fmodel`=20**Changed**=20(Breaking=20=E2=9A=A0?= =?UTF-8?q?=EF=B8=8F)=20*=20`textql.chats.check=5Fhealth()`:=20=20`request?= =?UTF-8?q?.model`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`?= =?UTF-8?q?textql.chats.check=5Fstreamlit=5Fhealth()`:=20=20`response.cell?= =?UTF-8?q?.union(feed=5Fcreate=5Fcell).feed=5Fcreate=5Fcell.agent.llm=5Fm?= =?UTF-8?q?odel`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`te?= =?UTF-8?q?xtql.chats.create=5Fchat()`:=20=20=20*=20=20`request.model`=20*?= =?UTF-8?q?*Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20=20=20*=20=20`re?= =?UTF-8?q?sponse.chat.model`=20**Changed**=20(Breaking=20=E2=9A=A0?= =?UTF-8?q?=EF=B8=8F)=20*=20`textql.chats.duplicate=5Fchat()`:=20=20=20*?= =?UTF-8?q?=20=20`request.model`=20**Changed**=20(Breaking=20=E2=9A=A0?= =?UTF-8?q?=EF=B8=8F)=20=20=20*=20=20`response.chat.model`=20**Changed**?= =?UTF-8?q?=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`textql.chats.get()`:?= =?UTF-8?q?=20=20`response.chat.model`=20**Changed**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20*=20`textql.chats.get=5Fhistory()`:=20=20?= =?UTF-8?q?`response.cells[].union(feed=5Fcreate=5Fcell).feed=5Fcreate=5Fc?= =?UTF-8?q?ell.agent.llm=5Fmodel`=20**Changed**=20(Breaking=20=E2=9A=A0?= =?UTF-8?q?=EF=B8=8F)=20*=20`textql.chats.get=5Fall()`:=20=20`response.cha?= =?UTF-8?q?ts[].model`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*?= =?UTF-8?q?=20`textql.chats.get=5Fplaybook=5Fchats()`:=20=20`response.chat?= =?UTF-8?q?s[].model`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*?= =?UTF-8?q?=20`textql.agents.create()`:=20=20=20*=20=20`request.llm=5Fmode?= =?UTF-8?q?l`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20=20=20*=20?= =?UTF-8?q?=20`response.agent.llm=5Fmodel`=20**Changed**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20*=20`textql.settings.update()`:=20=20=20*?= =?UTF-8?q?=20=20`request.enabled=5Fmodels[]`=20**Changed**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20*=20`textql.chats.attach=5Fdataset()`:=20?= =?UTF-8?q?=20`response.cell.union(feed=5Fcreate=5Fcell).feed=5Fcreate=5Fc?= =?UTF-8?q?ell.agent.llm=5Fmodel`=20**Changed**=20(Breaking=20=E2=9A=A0?= =?UTF-8?q?=EF=B8=8F)=20*=20`textql.chats.update()`:=20=20`response.chat.m?= =?UTF-8?q?odel`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`te?= =?UTF-8?q?xtql.observability.get=5Fcheck=5Frecord=5Ffix()`:=20=20`respons?= =?UTF-8?q?e.fix=5Fpatch=5Fcell.union(feed=5Fcreate=5Fcell).feed=5Fcreate?= =?UTF-8?q?=5Fcell.agent.llm=5Fmodel`=20**Changed**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20*=20`textql.observability.get=5Fthread=5F?= =?UTF-8?q?warnings()`:=20=20`response.warnings=5Fby=5Fchat.Map.warnings[].fix=5Fpatch=5Fcel?= =?UTF-8?q?l.union(feed=5Fcreate=5Fcell).feed=5Fcreate=5Fcell.agent.llm=5F?= =?UTF-8?q?model`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`t?= =?UTF-8?q?extql.playbooks.create=5Fplaybook()`:=20=20`response.playbook.l?= =?UTF-8?q?lm=5Fmodel`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*?= =?UTF-8?q?=20`textql.playbooks.duplicate()`:=20=20`response.playbook.llm?= =?UTF-8?q?=5Fmodel`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*?= =?UTF-8?q?=20`textql.playbooks.fetch()`:=20=20`response.playbook.llm=5Fmo?= =?UTF-8?q?del`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`tex?= =?UTF-8?q?tql.playbooks.get()`:=20=20`response.playbooks[].llm=5Fmodel`?= =?UTF-8?q?=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`textql.?= =?UTF-8?q?playbooks.update()`:=20=20=20*=20=20`request.llm=5Fmodel`=20**C?= =?UTF-8?q?hanged**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20=20=20*=20=20`resp?= =?UTF-8?q?onse.playbook.llm=5Fmodel`=20**Changed**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20*=20`textql.rbac.create=5Frole()`:=20=20`?= =?UTF-8?q?response.role.allowed=5Fmodels[]`=20**Changed**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20*=20`textql.rbac.get=5Fcurrent=5Fmember?= =?UTF-8?q?=5Froles=5Fand=5Fpermissions()`:=20=20`response.roles[].allowed?= =?UTF-8?q?=5Fmodels[]`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20?= =?UTF-8?q?*=20`textql.rbac.get=5Fmember=5Froles()`:=20=20`response.member?= =?UTF-8?q?=5Froles.Map.roles[].allowe?= =?UTF-8?q?d=5Fmodels[]`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)?= =?UTF-8?q?=20*=20`textql.rbac.get=5Frole()`:=20=20`response.role.allowed?= =?UTF-8?q?=5Fmodels[]`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20?= =?UTF-8?q?*=20`textql.rbac.list=5Froles()`:=20=20`response.roles[].allowe?= =?UTF-8?q?d=5Fmodels[]`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)?= =?UTF-8?q?=20*=20`textql.rbac.update=5Frole()`:=20=20=20*=20=20`request.a?= =?UTF-8?q?llowed=5Fmodels[]`=20**Changed**=20(Breaking=20=E2=9A=A0?= =?UTF-8?q?=EF=B8=8F)=20=20=20*=20=20`response.role.allowed=5Fmodels[]`=20?= =?UTF-8?q?**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`textql.rba?= =?UTF-8?q?c.who=5Fam=5Fi()`:=20=20`response.roles[].allowed=5Fmodels[]`?= =?UTF-8?q?=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`textql.?= =?UTF-8?q?settings.update=5Fmodels()`:=20=20`request.default=5Fmodel`=20*?= =?UTF-8?q?*Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`textql.rbac?= =?UTF-8?q?.export=5Frole=5Fpermissions()`:=20**Added**?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .speakeasy/gen.lock | 89 ++++++-- .speakeasy/gen.yaml | 2 +- .speakeasy/out.openapi.yaml | 65 +++++- .speakeasy/workflow.lock | 10 +- README-PYPI.md | 5 +- README.md | 5 +- RELEASES.md | 12 +- ...rbacserviceexportrolepermissionsrequest.md | 10 + ...bacserviceexportrolepermissionsresponse.md | 17 ++ docs/models/textqlrpcpublicchatllmmodel.md | 3 +- ...cpublicrbacexportrolepermissionsrequest.md | 7 + ...publicrbacexportrolepermissionsresponse.md | 10 + docs/sdks/observability/README.md | 8 +- docs/sdks/rbac/README.md | 42 ++++ pyproject.toml | 2 +- src/textql_sdk/_version.py | 4 +- src/textql_sdk/models/__init__.py | 30 +++ .../rbacservice_exportrolepermissionsop.py | 85 +++++++ .../models/textql_rpc_public_chat_llmmodel.py | 3 +- ...ublic_rbac_exportrolepermissionsrequest.py | 13 ++ ...blic_rbac_exportrolepermissionsresponse.py | 44 ++++ src/textql_sdk/observability.py | 16 +- src/textql_sdk/rbac.py | 214 ++++++++++++++++++ uv.lock | 2 +- 24 files changed, 638 insertions(+), 60 deletions(-) create mode 100644 docs/models/rbacserviceexportrolepermissionsrequest.md create mode 100644 docs/models/rbacserviceexportrolepermissionsresponse.md create mode 100644 docs/models/textqlrpcpublicrbacexportrolepermissionsrequest.md create mode 100644 docs/models/textqlrpcpublicrbacexportrolepermissionsresponse.md create mode 100644 src/textql_sdk/models/rbacservice_exportrolepermissionsop.py create mode 100644 src/textql_sdk/models/textql_rpc_public_rbac_exportrolepermissionsrequest.py create mode 100644 src/textql_sdk/models/textql_rpc_public_rbac_exportrolepermissionsresponse.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index c5d84bb8..bc718d61 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: 2.0.0 id: 140336b3-3873-4a19-9c47-b02749d85f10 management: - docChecksum: d4ffe6c2ca5b83feff412468224c930f + docChecksum: e45e7245f4383cd3ce41d9928345e73f docVersion: 1.0.0 speakeasyVersion: 1.796.4 generationVersion: 2.935.1 - releaseVersion: 1.1.25 - configChecksum: 3e76befd5c9e250effbb96c126b9dc1f + releaseVersion: 1.1.26 + configChecksum: 1b10344602bd47d79fb9e4744a9f447f repoURL: https://github.com/TextQLLabs/textql-python-v3.git installationURL: https://github.com/TextQLLabs/textql-python-v3.git published: true persistentEdits: - generation_id: e3b6bb10-b9a2-41b7-9e34-780fcc1fbc51 - pristine_commit_hash: 2290f4343b712bbcda915aa189d52a200fd5ad34 - pristine_tree_hash: c8773a7b2e2c89180e779470a7508214d3fd4cf3 + generation_id: 7efffc60-ca7c-4d5f-a4ee-f5e87e989f1d + pristine_commit_hash: 710c1075f603ddea2c46ccd6b3873851d2ab1a58 + pristine_tree_hash: e7acce46279061dd341e8969e176c68c1d5419d9 features: python: additionalDependencies: 1.1.0 @@ -3193,6 +3193,14 @@ trackedFiles: id: 3b40511753a0 last_write_checksum: sha1:cdf0d3aa0a5125e6580c52c31013f30682bcc858 pristine_git_object: e5e485b3810758c0eda37aefdaa242e6205c03d7 + docs/models/rbacserviceexportrolepermissionsrequest.md: + id: 80eb580c3513 + last_write_checksum: sha1:605737f99f4db785474ac0d211eb8bd88533e80e + pristine_git_object: 44ca7625042ddfd19d99becf49cb92b665bab66d + docs/models/rbacserviceexportrolepermissionsresponse.md: + id: c353a8e90320 + last_write_checksum: sha1:7210e8610272bf0f9681cbf3cc4498daf327f5af + pristine_git_object: 2df6ee7df0c84a2ea9cb86fa01b65232ed1f3066 docs/models/rbacservicegeneratesharelinkrequest.md: id: 762aa669cfd0 last_write_checksum: sha1:63957f3f5f87451ad04a10490b3772c9210a2b77 @@ -5735,8 +5743,8 @@ trackedFiles: pristine_git_object: 0f92ca5e018cc811f41612788240c3db1767bd8e docs/models/textqlrpcpublicchatllmmodel.md: id: 250bb4e00bcc - last_write_checksum: sha1:c13f58f86524d3bea480d724adffd3109aa1b845 - pristine_git_object: 02a697a03432fc557df42cf83b85daa59c99f4e5 + last_write_checksum: sha1:7191ae082dc4b408de9e33642d7382fde2fec40c + pristine_git_object: e87d2af04bb413570a380056f5c29f29641f4c80 docs/models/textqlrpcpublicchatllmusage.md: id: ecc4cb95a86e last_write_checksum: sha1:995d6d90553097a8362d8462ae9b28bce183f4c7 @@ -8677,6 +8685,14 @@ trackedFiles: id: 79bf1c904ba4 last_write_checksum: sha1:27b1107826fedb28c71ba79d2c0b78db467339a4 pristine_git_object: dbf5d43856332ba77fe3dbd5ac6551fdc726817f + docs/models/textqlrpcpublicrbacexportrolepermissionsrequest.md: + id: bbea9f9b3fa0 + last_write_checksum: sha1:5939414f267c637cf17eb73cc31c266020328578 + pristine_git_object: 52c2416c266d3ad945aeb6b8fc9b8653ed63e4cc + docs/models/textqlrpcpublicrbacexportrolepermissionsresponse.md: + id: bfe01e7f2361 + last_write_checksum: sha1:28345c742c34fe4503f648f908602cd1d3640a1a + pristine_git_object: 02ac21f015c32127fabd097d3345b6c7a211afa3 docs/models/textqlrpcpublicrbacgeneratesharelinkrequest.md: id: 9af50667d993 last_write_checksum: sha1:7982d3d0cba768901dabdd5692650195ab5b30fb @@ -9819,8 +9835,8 @@ trackedFiles: pristine_git_object: 8deca1efe3f5194872d5220086d68c35fb1e6028 docs/sdks/observability/README.md: id: bab967736831 - last_write_checksum: sha1:18ef88e5151090be79bb4a063ec328f45ebd13d5 - pristine_git_object: 4be6176f3cbc20e9fe6bc26ddc86eb67da3ef5d2 + last_write_checksum: sha1:0d1234068b37e37e1aa5b1c737165066d8b0c291 + pristine_git_object: a376e1e6a41aba2770d54939de1ab3a6e0ffa370 docs/sdks/ontology/README.md: id: 0dbbd337a8ee last_write_checksum: sha1:d4527c886504242c4a9199442a28258b4b32bbec @@ -9835,8 +9851,8 @@ trackedFiles: pristine_git_object: 4839ecd39174aa25a692a27d906c81be2a8c2eec docs/sdks/rbac/README.md: id: e80ec65410f2 - last_write_checksum: sha1:406e6fbcc1d435df9a6720dd25719c5380fded5e - pristine_git_object: 61a90e5a7d1ef18ee307adbcaf716a070c608f9f + last_write_checksum: sha1:b091e89aa37e095edd0fcb741ece6959671068d9 + pristine_git_object: 80745fa4de9979e4213c0943a8f6a0bc37a77e6e docs/sdks/sandbox/README.md: id: 16b3b8b0e152 last_write_checksum: sha1:127046434040e5ee54a47fe1beace53059db8b4e @@ -9883,8 +9899,8 @@ trackedFiles: pristine_git_object: d45dd3dfed8f57c8dde47774f645a4eb9575ba90 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:0dc4ccf521b58fa9f90aa7d828636510ec3cf2d8 - pristine_git_object: 838f0aa0d027f78de25427bbf88ec1720e275e47 + last_write_checksum: sha1:fc77f698a27afe3ff698bcd003c2af08cc2c42e0 + pristine_git_object: 67af03ca88d8d0e72a118f14b498c9517a8d4fd6 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:d5a0f1ce09f7b890340fdb6f26345fce7dc9a70d @@ -9911,8 +9927,8 @@ trackedFiles: pristine_git_object: a9e63d694ae036ae9a43efc262dd124a2e1062e7 src/textql_sdk/_version.py: id: "226928447e58" - last_write_checksum: sha1:3835f1d11dea464ed04122e55d6bd4821b5f66a5 - pristine_git_object: e387cc40e64a78a66dca05378bac70cfe5143857 + last_write_checksum: sha1:f8f7a1e71eb2a393bb05614be7abffb2209dfeaf + pristine_git_object: 2ecfca5a34e826c675e7acf49eb715fe9ec2e42b src/textql_sdk/agents.py: id: 4ff492529583 last_write_checksum: sha1:94f170d130c92cd3e2c61c2993c2e829056f3df7 @@ -9979,8 +9995,8 @@ trackedFiles: pristine_git_object: f5227a747725a68f1c9b6ebffe42ac0d2436f77f src/textql_sdk/models/__init__.py: id: c8cef98ef3e7 - last_write_checksum: sha1:7312f82432d04ccd36857976f596f210fa033169 - pristine_git_object: edbc2195402074acd57e32851910a0a3f45d617d + last_write_checksum: sha1:d0eeace7839045c838724f71fabf8fca13e129c6 + pristine_git_object: 8b208b9b29b6bd8a29af00f876b0483960264dbb src/textql_sdk/models/agentservice_createagentop.py: id: c31d4c4b52ae last_write_checksum: sha1:eb9ab95a772110d0f587963a73ff3ab4a6f11859 @@ -11249,6 +11265,10 @@ trackedFiles: id: 542824a16f92 last_write_checksum: sha1:f07fd1f8a42d33ab30035ac101517ea489d99257 pristine_git_object: 4447972b9fda3448b1df366002a72db6e7936720 + src/textql_sdk/models/rbacservice_exportrolepermissionsop.py: + id: e5749f6348c2 + last_write_checksum: sha1:b14ec16417b2f640de383f9ee048e9aae4f3c50a + pristine_git_object: a0b8812fd6711b2ab44f2962498a78d724670455 src/textql_sdk/models/rbacservice_generatesharelinkop.py: id: 52044f35ecb8 last_write_checksum: sha1:a95e49746f483b458a4eee2fbcce753fab1fe2ba @@ -12911,8 +12931,8 @@ trackedFiles: pristine_git_object: 1158d3652ef8c12b5130ae47321c05f0ea1cb53a src/textql_sdk/models/textql_rpc_public_chat_llmmodel.py: id: e334ecfa931c - last_write_checksum: sha1:c4c1e8deddc551cdffbe68972f82745254a690c4 - pristine_git_object: 316bd9851e93709e57acb7fbc7c44c653d82ec85 + last_write_checksum: sha1:b486e67d0ae021281a241e0e8ea6c0a7a523a907 + pristine_git_object: a97e4a2ab34b8231bb24073d90358c118c73429d src/textql_sdk/models/textql_rpc_public_chat_llmusage.py: id: 3877f58cdf3c last_write_checksum: sha1:87f11409a4552a186f6cad108ed106de1cd3151d @@ -15737,6 +15757,14 @@ trackedFiles: id: 7949ce0cf0db last_write_checksum: sha1:ea2e1f0576ade3c30a9cb76df1501a3c8881ceac pristine_git_object: 121f914be0e3b1c731f35083e55e77d247c7c776 + src/textql_sdk/models/textql_rpc_public_rbac_exportrolepermissionsrequest.py: + id: f2efd665a206 + last_write_checksum: sha1:a7a3b09983fd94bd489857696b8891a4973f8d9b + pristine_git_object: 110e4d11b3d1d6121013bc3f839486a76788a2bd + src/textql_sdk/models/textql_rpc_public_rbac_exportrolepermissionsresponse.py: + id: 2ffa6d0bc1e4 + last_write_checksum: sha1:fbefe3bcbb4cb4a90b078cdb0152d8f37befffa4 + pristine_git_object: 3a4b92c34a09ab86a0ca43c38b19d22b5d5bb697 src/textql_sdk/models/textql_rpc_public_rbac_generatesharelinkrequest.py: id: 24cd5b265dd1 last_write_checksum: sha1:cafc123894b42f2dce8f50151b507579fb527d5a @@ -16659,8 +16687,8 @@ trackedFiles: pristine_git_object: 59f2293fe57c7748ff8cf1d4abf80ab0af2c6853 src/textql_sdk/observability.py: id: 6aa1798287cb - last_write_checksum: sha1:a68d1b2eef901cbdd424e29afbf8bdfa5e02774b - pristine_git_object: 472fd921f33cc75ceaabe78d0764fd755604d3b5 + last_write_checksum: sha1:b0ae1858fd207f44ee1fc99ddf80399442d2c631 + pristine_git_object: cc003b999cc94c1e2a5a4223f63df500536ff45f src/textql_sdk/ontology.py: id: 317a9b15dfde last_write_checksum: sha1:16c865904b6e640b1a3b863dd5618a148b0892f7 @@ -16679,8 +16707,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 src/textql_sdk/rbac.py: id: 69b61272bc80 - last_write_checksum: sha1:d0df5b23b9386100b915b7deeb905428d16bd82b - pristine_git_object: 8a025bedec76b9d9af5495dc82d1d7f51839e63b + last_write_checksum: sha1:a68b9acc9d9cafc55bb754cc05d6f5a0bd31e1c6 + pristine_git_object: 2c57b0cc4a0106f4080b0316cf896fb0b524abe3 src/textql_sdk/sandbox.py: id: 14dbbbbb7c86 last_write_checksum: sha1:2c1ead1a5ba11ad7376373a8a0089c52f205178f @@ -27778,4 +27806,17 @@ examples: application/json: {} default: application/json: {"code": "not_found"} + RBACService_ExportRolePermissions: + speakeasy-default-RBAC-service-export-role-permissions: + parameters: + header: + Connect-Protocol-Version: 1 + requestBody: + application/json: {} + responses: + "200": + application/json: {} + default: + application/json: {"code": "not_found"} examplesVersion: 1.0.2 +releaseNotes: "## Python SDK Changes:\n* `textql.chats.poll_events()`: `response.events[].union(cell).cell.union(feed_create_cell).feed_create_cell.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.chats.query_one_shot()`: \n * `request.model` **Changed** (Breaking ⚠️)\n * `response.cells[].union(feed_create_cell).feed_create_cell.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.agents.duplicate()`: `response.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.agents.get_agent()`: `response.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.agents.list()`: `response.agents[].llm_model` **Changed** (Breaking ⚠️)\n* `textql.agents.update()`: \n * `request.llm_model` **Changed** (Breaking ⚠️)\n * `response.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.chats.attach_agent()`: `response.chat.model` **Changed** (Breaking ⚠️)\n* `textql.chats.attach_app()`: `response.cell.union(feed_create_cell).feed_create_cell.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.chats.attach_dashboard()`: `response.cell.union(feed_create_cell).feed_create_cell.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.chats.run()`: \n * `request.model` **Changed** (Breaking ⚠️)\n * `response.cells[].union(feed_create_cell).feed_create_cell.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.chats.check_health()`: `request.model` **Changed** (Breaking ⚠️)\n* `textql.chats.check_streamlit_health()`: `response.cell.union(feed_create_cell).feed_create_cell.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.chats.create_chat()`: \n * `request.model` **Changed** (Breaking ⚠️)\n * `response.chat.model` **Changed** (Breaking ⚠️)\n* `textql.chats.duplicate_chat()`: \n * `request.model` **Changed** (Breaking ⚠️)\n * `response.chat.model` **Changed** (Breaking ⚠️)\n* `textql.chats.get()`: `response.chat.model` **Changed** (Breaking ⚠️)\n* `textql.chats.get_history()`: `response.cells[].union(feed_create_cell).feed_create_cell.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.chats.get_all()`: `response.chats[].model` **Changed** (Breaking ⚠️)\n* `textql.chats.get_playbook_chats()`: `response.chats[].model` **Changed** (Breaking ⚠️)\n* `textql.agents.create()`: \n * `request.llm_model` **Changed** (Breaking ⚠️)\n * `response.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.settings.update()`: \n * `request.enabled_models[]` **Changed** (Breaking ⚠️)\n* `textql.chats.attach_dataset()`: `response.cell.union(feed_create_cell).feed_create_cell.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.chats.update()`: `response.chat.model` **Changed** (Breaking ⚠️)\n* `textql.observability.get_check_record_fix()`: `response.fix_patch_cell.union(feed_create_cell).feed_create_cell.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.observability.get_thread_warnings()`: `response.warnings_by_chat.Map.warnings[].fix_patch_cell.union(feed_create_cell).feed_create_cell.agent.llm_model` **Changed** (Breaking ⚠️)\n* `textql.playbooks.create_playbook()`: `response.playbook.llm_model` **Changed** (Breaking ⚠️)\n* `textql.playbooks.duplicate()`: `response.playbook.llm_model` **Changed** (Breaking ⚠️)\n* `textql.playbooks.fetch()`: `response.playbook.llm_model` **Changed** (Breaking ⚠️)\n* `textql.playbooks.get()`: `response.playbooks[].llm_model` **Changed** (Breaking ⚠️)\n* `textql.playbooks.update()`: \n * `request.llm_model` **Changed** (Breaking ⚠️)\n * `response.playbook.llm_model` **Changed** (Breaking ⚠️)\n* `textql.rbac.create_role()`: `response.role.allowed_models[]` **Changed** (Breaking ⚠️)\n* `textql.rbac.get_current_member_roles_and_permissions()`: `response.roles[].allowed_models[]` **Changed** (Breaking ⚠️)\n* `textql.rbac.get_member_roles()`: `response.member_roles.Map.roles[].allowed_models[]` **Changed** (Breaking ⚠️)\n* `textql.rbac.get_role()`: `response.role.allowed_models[]` **Changed** (Breaking ⚠️)\n* `textql.rbac.list_roles()`: `response.roles[].allowed_models[]` **Changed** (Breaking ⚠️)\n* `textql.rbac.update_role()`: \n * `request.allowed_models[]` **Changed** (Breaking ⚠️)\n * `response.role.allowed_models[]` **Changed** (Breaking ⚠️)\n* `textql.rbac.who_am_i()`: `response.roles[].allowed_models[]` **Changed** (Breaking ⚠️)\n* `textql.settings.update_models()`: `request.default_model` **Changed** (Breaking ⚠️)\n* `textql.rbac.export_role_permissions()`: **Added**\n" diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index a5815630..5b94ac59 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -34,7 +34,7 @@ generation: generateNewTests: true skipResponseBodyAssertions: false python: - version: 1.1.25 + version: 1.1.26 additionalDependencies: dev: types-protobuf: '>=6.31' diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index f78f6154..68998fd0 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -5846,7 +5846,8 @@ paths: post: tags: - ObservabilityService - summary: BackfillCustomTopic + summary: Custom topics + description: Custom topics operationId: ObservabilityService_BackfillCustomTopic x-speakeasy-group: observability x-speakeasy-name-override: backfillCustomTopic @@ -5920,8 +5921,7 @@ paths: post: tags: - ObservabilityService - summary: Custom topics - description: Custom topics + summary: CreateCustomTopic operationId: ObservabilityService_CreateCustomTopic x-speakeasy-group: observability x-speakeasy-name-override: createCustomTopic @@ -11719,6 +11719,43 @@ paths: application/json: schema: $ref: '#/components/schemas/textql.rpc.public.rbac.DeleteServiceAccountResponse' + /textql.rpc.public.rbac.RBACService/ExportRolePermissions: + post: + tags: + - RBACService + summary: ExportRolePermissions + operationId: RBACService_ExportRolePermissions + x-speakeasy-group: rbac + x-speakeasy-name-override: exportRolePermissions + parameters: + - name: Connect-Protocol-Version + in: header + required: true + schema: + $ref: '#/components/schemas/connect-protocol-version' + - name: Connect-Timeout-Ms + in: header + schema: + $ref: '#/components/schemas/connect-timeout-header' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/textql.rpc.public.rbac.ExportRolePermissionsRequest' + required: true + responses: + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/connect.error' + "200": + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/textql.rpc.public.rbac.ExportRolePermissionsResponse' /textql.rpc.public.rbac.RBACService/GenerateShareLink: post: tags: @@ -23866,10 +23903,9 @@ components: - MODEL_KIMI_K2_7_CODE - MODEL_QWEN3_7_PLUS - MODEL_KIMI_K3 - - MODEL_DEEPSEEK_V4_FLASH_0731 - - MODEL_DEEPSEEK_V4_FLASH_VISION_EXP - MODEL_GLM_5_3_FLASH - MODEL_GLM_5_3 + - MODEL_DEEPSEEK_V4P1_FLASH - MODEL_MUSE_SPARK_1_1 - MODEL_MUSE_SPARK_1_2 textql.rpc.public.chat.LlmUsage: @@ -36760,6 +36796,25 @@ components: title: success title: DeleteServiceAccountResponse additionalProperties: false + textql.rpc.public.rbac.ExportRolePermissionsRequest: + type: object + title: ExportRolePermissionsRequest + additionalProperties: false + textql.rpc.public.rbac.ExportRolePermissionsResponse: + type: object + properties: + fileName: + type: string + title: file_name + contentType: + type: string + title: content_type + data: + type: string + title: data + format: byte + title: ExportRolePermissionsResponse + additionalProperties: false textql.rpc.public.rbac.GenerateShareLinkRequest: type: object properties: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 301914c2..136d5a1e 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -2,8 +2,8 @@ speakeasyVersion: 1.796.4 sources: TextQL API: sourceNamespace: textql-api - sourceRevisionDigest: sha256:5c5b6198762963ac296917e0af851c1a260bdb0a5e2432620e276437c543135a - sourceBlobDigest: sha256:6cd636d17c0815463092010e3359c9fa5caa47b180b40691fb4e5409d7b3ea36 + sourceRevisionDigest: sha256:5219b1392378b0ab55922494bffe8bec5865dab71584bbd0ed6ed59c325f8f17 + sourceBlobDigest: sha256:b4d77779243e26b579c8268c17a841ac31a9fcce8a6763c9aa76c0f8dd7da2d4 tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: textql: source: TextQL API sourceNamespace: textql-api - sourceRevisionDigest: sha256:5c5b6198762963ac296917e0af851c1a260bdb0a5e2432620e276437c543135a - sourceBlobDigest: sha256:6cd636d17c0815463092010e3359c9fa5caa47b180b40691fb4e5409d7b3ea36 + sourceRevisionDigest: sha256:5219b1392378b0ab55922494bffe8bec5865dab71584bbd0ed6ed59c325f8f17 + sourceBlobDigest: sha256:b4d77779243e26b579c8268c17a841ac31a9fcce8a6763c9aa76c0f8dd7da2d4 codeSamplesNamespace: textql-api-python-code-samples - codeSamplesRevisionDigest: sha256:109d6e88f716004d7bc68727f23180cfc76f1efe8cf54992989981692e054cdf + codeSamplesRevisionDigest: sha256:c950920cc48c27c7e8906c70fabedc4e1aa884589e0e60464413d638ad1a0c53 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README-PYPI.md b/README-PYPI.md index 3014b334..20d05ece 100644 --- a/README-PYPI.md +++ b/README-PYPI.md @@ -373,9 +373,9 @@ with Textql( ### [Observability](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/observability/README.md) * [activate_custom_topic](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/observability/README.md#activate_custom_topic) - ActivateCustomTopic -* [backfill_custom_topic](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/observability/README.md#backfill_custom_topic) - BackfillCustomTopic +* [backfill_custom_topic](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/observability/README.md#backfill_custom_topic) - Custom topics * [backfill_thread_warnings](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/observability/README.md#backfill_thread_warnings) - BackfillThreadWarnings -* [create_custom_topic](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/observability/README.md#create_custom_topic) - Custom topics +* [create_custom_topic](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/observability/README.md#create_custom_topic) - CreateCustomTopic * [deactivate_custom_topic](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/observability/README.md#deactivate_custom_topic) - DeactivateCustomTopic * [delete_custom_topic](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/observability/README.md#delete_custom_topic) - DeleteCustomTopic * [export_csv](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/observability/README.md#export_csv) - ExportObservabilityCsv @@ -542,6 +542,7 @@ with Textql( * [create_service_account_api_key](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/rbac/README.md#create_service_account_api_key) - CreateServiceAccountApiKey * [delete_role](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/rbac/README.md#delete_role) - DeleteRole * [delete_service_account](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/rbac/README.md#delete_service_account) - DeleteServiceAccount +* [export_role_permissions](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/rbac/README.md#export_role_permissions) - ExportRolePermissions * [generate_share_link](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/rbac/README.md#generate_share_link) - GenerateShareLink * [get_current_member_roles_and_permissions](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/rbac/README.md#get_current_member_roles_and_permissions) - GetCurrentMemberRolesAndPermissions * [get_embed_user_api_key](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/rbac/README.md#get_embed_user_api_key) - GetEmbedUserApiKey diff --git a/README.md b/README.md index a715db44..7daa7d03 100644 --- a/README.md +++ b/README.md @@ -373,9 +373,9 @@ with Textql( ### [Observability](docs/sdks/observability/README.md) * [activate_custom_topic](docs/sdks/observability/README.md#activate_custom_topic) - ActivateCustomTopic -* [backfill_custom_topic](docs/sdks/observability/README.md#backfill_custom_topic) - BackfillCustomTopic +* [backfill_custom_topic](docs/sdks/observability/README.md#backfill_custom_topic) - Custom topics * [backfill_thread_warnings](docs/sdks/observability/README.md#backfill_thread_warnings) - BackfillThreadWarnings -* [create_custom_topic](docs/sdks/observability/README.md#create_custom_topic) - Custom topics +* [create_custom_topic](docs/sdks/observability/README.md#create_custom_topic) - CreateCustomTopic * [deactivate_custom_topic](docs/sdks/observability/README.md#deactivate_custom_topic) - DeactivateCustomTopic * [delete_custom_topic](docs/sdks/observability/README.md#delete_custom_topic) - DeleteCustomTopic * [export_csv](docs/sdks/observability/README.md#export_csv) - ExportObservabilityCsv @@ -542,6 +542,7 @@ with Textql( * [create_service_account_api_key](docs/sdks/rbac/README.md#create_service_account_api_key) - CreateServiceAccountApiKey * [delete_role](docs/sdks/rbac/README.md#delete_role) - DeleteRole * [delete_service_account](docs/sdks/rbac/README.md#delete_service_account) - DeleteServiceAccount +* [export_role_permissions](docs/sdks/rbac/README.md#export_role_permissions) - ExportRolePermissions * [generate_share_link](docs/sdks/rbac/README.md#generate_share_link) - GenerateShareLink * [get_current_member_roles_and_permissions](docs/sdks/rbac/README.md#get_current_member_roles_and_permissions) - GetCurrentMemberRolesAndPermissions * [get_embed_user_api_key](docs/sdks/rbac/README.md#get_embed_user_api_key) - GetEmbedUserApiKey diff --git a/RELEASES.md b/RELEASES.md index 0235d992..7549339d 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -488,4 +488,14 @@ Based on: ### Generated - [python v1.1.25] . ### Releases -- [PyPI v1.1.25] https://pypi.org/project/textql-sdk/1.1.25 - . \ No newline at end of file +- [PyPI v1.1.25] https://pypi.org/project/textql-sdk/1.1.25 - . + +## 2026-09-11 23:13:38 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.796.4 (2.935.1) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.26] . +### Releases +- [PyPI v1.1.26] https://pypi.org/project/textql-sdk/1.1.26 - . \ No newline at end of file diff --git a/docs/models/rbacserviceexportrolepermissionsrequest.md b/docs/models/rbacserviceexportrolepermissionsrequest.md new file mode 100644 index 00000000..44ca7625 --- /dev/null +++ b/docs/models/rbacserviceexportrolepermissionsrequest.md @@ -0,0 +1,10 @@ +# RBACServiceExportRolePermissionsRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `connect_protocol_version` | *float* | :heavy_check_mark: | N/A | +| `connect_timeout_ms` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `body` | [models.TextqlRPCPublicRbacExportRolePermissionsRequest](../models/textqlrpcpublicrbacexportrolepermissionsrequest.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/rbacserviceexportrolepermissionsresponse.md b/docs/models/rbacserviceexportrolepermissionsresponse.md new file mode 100644 index 00000000..2df6ee7d --- /dev/null +++ b/docs/models/rbacserviceexportrolepermissionsresponse.md @@ -0,0 +1,17 @@ +# RBACServiceExportRolePermissionsResponse + + +## Supported Types + +### `models.TextqlRPCPublicRbacExportRolePermissionsResponse` + +```python +value: models.TextqlRPCPublicRbacExportRolePermissionsResponse = /* values here */ +``` + +### `models.ConnectError` + +```python +value: models.ConnectError = /* values here */ +``` + diff --git a/docs/models/textqlrpcpublicchatllmmodel.md b/docs/models/textqlrpcpublicchatllmmodel.md index 02a697a0..e87d2af0 100644 --- a/docs/models/textqlrpcpublicchatllmmodel.md +++ b/docs/models/textqlrpcpublicchatllmmodel.md @@ -39,9 +39,8 @@ This is an open enum. Unrecognized values will not fail type checks. - `"MODEL_KIMI_K2_7_CODE"` - `"MODEL_QWEN3_7_PLUS"` - `"MODEL_KIMI_K3"` -- `"MODEL_DEEPSEEK_V4_FLASH_0731"` -- `"MODEL_DEEPSEEK_V4_FLASH_VISION_EXP"` - `"MODEL_GLM_5_3_FLASH"` - `"MODEL_GLM_5_3"` +- `"MODEL_DEEPSEEK_V4P1_FLASH"` - `"MODEL_MUSE_SPARK_1_1"` - `"MODEL_MUSE_SPARK_1_2"` diff --git a/docs/models/textqlrpcpublicrbacexportrolepermissionsrequest.md b/docs/models/textqlrpcpublicrbacexportrolepermissionsrequest.md new file mode 100644 index 00000000..52c2416c --- /dev/null +++ b/docs/models/textqlrpcpublicrbacexportrolepermissionsrequest.md @@ -0,0 +1,7 @@ +# TextqlRPCPublicRbacExportRolePermissionsRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/textqlrpcpublicrbacexportrolepermissionsresponse.md b/docs/models/textqlrpcpublicrbacexportrolepermissionsresponse.md new file mode 100644 index 00000000..02ac21f0 --- /dev/null +++ b/docs/models/textqlrpcpublicrbacexportrolepermissionsresponse.md @@ -0,0 +1,10 @@ +# TextqlRPCPublicRbacExportRolePermissionsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `file_name` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `content_type` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `data` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/sdks/observability/README.md b/docs/sdks/observability/README.md index 4be6176f..a376e1e6 100644 --- a/docs/sdks/observability/README.md +++ b/docs/sdks/observability/README.md @@ -5,9 +5,9 @@ ### Available Operations * [activate_custom_topic](#activate_custom_topic) - ActivateCustomTopic -* [backfill_custom_topic](#backfill_custom_topic) - BackfillCustomTopic +* [backfill_custom_topic](#backfill_custom_topic) - Custom topics * [backfill_thread_warnings](#backfill_thread_warnings) - BackfillThreadWarnings -* [create_custom_topic](#create_custom_topic) - Custom topics +* [create_custom_topic](#create_custom_topic) - CreateCustomTopic * [deactivate_custom_topic](#deactivate_custom_topic) - DeactivateCustomTopic * [delete_custom_topic](#delete_custom_topic) - DeleteCustomTopic * [export_csv](#export_csv) - ExportObservabilityCsv @@ -77,7 +77,7 @@ with Textql( ## backfill_custom_topic -BackfillCustomTopic +Custom topics ### Example Usage @@ -165,7 +165,7 @@ with Textql( ## create_custom_topic -Custom topics +CreateCustomTopic ### Example Usage diff --git a/docs/sdks/rbac/README.md b/docs/sdks/rbac/README.md index 61a90e5a..80745fa4 100644 --- a/docs/sdks/rbac/README.md +++ b/docs/sdks/rbac/README.md @@ -14,6 +14,7 @@ * [create_service_account_api_key](#create_service_account_api_key) - CreateServiceAccountApiKey * [delete_role](#delete_role) - DeleteRole * [delete_service_account](#delete_service_account) - DeleteServiceAccount +* [export_role_permissions](#export_role_permissions) - ExportRolePermissions * [generate_share_link](#generate_share_link) - GenerateShareLink * [get_current_member_roles_and_permissions](#get_current_member_roles_and_permissions) - GetCurrentMemberRolesAndPermissions * [get_embed_user_api_key](#get_embed_user_api_key) - GetEmbedUserApiKey @@ -478,6 +479,47 @@ with Textql( | ------------------------- | ------------------------- | ------------------------- | | errors.TextqlDefaultError | 4XX, 5XX | \*/\* | +## export_role_permissions + +ExportRolePermissions + +### Example Usage + + +```python +import os +from textql_sdk import Textql + + +with Textql( + api_key=os.getenv("TEXTQL_API_KEY", ""), +) as textql: + + res = textql.rbac.export_role_permissions(body={}) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| `body` | [models.TextqlRPCPublicRbacExportRolePermissionsRequest](../../models/textqlrpcpublicrbacexportrolepermissionsrequest.md) | :heavy_check_mark: | N/A | +| `connect_timeout_ms` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.RBACServiceExportRolePermissionsResponse](../../models/rbacserviceexportrolepermissionsresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------- | ------------------------- | ------------------------- | +| errors.TextqlDefaultError | 4XX, 5XX | \*/\* | + ## generate_share_link GenerateShareLink diff --git a/pyproject.toml b/pyproject.toml index 838f0aa0..67af03ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "textql-sdk" -version = "1.1.25" +version = "1.1.26" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Speakeasy" },] readme = "README-PYPI.md" diff --git a/src/textql_sdk/_version.py b/src/textql_sdk/_version.py index e387cc40..2ecfca5a 100644 --- a/src/textql_sdk/_version.py +++ b/src/textql_sdk/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "textql-sdk" -__version__: str = "1.1.25" +__version__: str = "1.1.26" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.935.1" -__user_agent__: str = "speakeasy-sdk/python 1.1.25 2.935.1 1.0.0 textql-sdk" +__user_agent__: str = "speakeasy-sdk/python 1.1.26 2.935.1 1.0.0 textql-sdk" try: if __package__ is not None: diff --git a/src/textql_sdk/models/__init__.py b/src/textql_sdk/models/__init__.py index edbc2195..8b208b9b 100644 --- a/src/textql_sdk/models/__init__.py +++ b/src/textql_sdk/models/__init__.py @@ -1916,6 +1916,12 @@ RBACServiceDeleteServiceAccountResponse, RBACServiceDeleteServiceAccountResponseTypedDict, ) + from .rbacservice_exportrolepermissionsop import ( + RBACServiceExportRolePermissionsRequest, + RBACServiceExportRolePermissionsRequestTypedDict, + RBACServiceExportRolePermissionsResponse, + RBACServiceExportRolePermissionsResponseTypedDict, + ) from .rbacservice_generatesharelinkop import ( RBACServiceGenerateShareLinkRequest, RBACServiceGenerateShareLinkRequestTypedDict, @@ -7112,6 +7118,14 @@ TextqlRPCPublicRbacDeleteServiceAccountResponse, TextqlRPCPublicRbacDeleteServiceAccountResponseTypedDict, ) + from .textql_rpc_public_rbac_exportrolepermissionsrequest import ( + TextqlRPCPublicRbacExportRolePermissionsRequest, + TextqlRPCPublicRbacExportRolePermissionsRequestTypedDict, + ) + from .textql_rpc_public_rbac_exportrolepermissionsresponse import ( + TextqlRPCPublicRbacExportRolePermissionsResponse, + TextqlRPCPublicRbacExportRolePermissionsResponseTypedDict, + ) from .textql_rpc_public_rbac_generatesharelinkrequest import ( TextqlRPCPublicRbacGenerateShareLinkRequest, TextqlRPCPublicRbacGenerateShareLinkRequestTypedDict, @@ -9641,6 +9655,10 @@ "RBACServiceDeleteServiceAccountRequestTypedDict", "RBACServiceDeleteServiceAccountResponse", "RBACServiceDeleteServiceAccountResponseTypedDict", + "RBACServiceExportRolePermissionsRequest", + "RBACServiceExportRolePermissionsRequestTypedDict", + "RBACServiceExportRolePermissionsResponse", + "RBACServiceExportRolePermissionsResponseTypedDict", "RBACServiceGenerateShareLinkRequest", "RBACServiceGenerateShareLinkRequestTypedDict", "RBACServiceGenerateShareLinkResponse", @@ -12313,6 +12331,10 @@ "TextqlRPCPublicRbacDeleteServiceAccountRequestTypedDict", "TextqlRPCPublicRbacDeleteServiceAccountResponse", "TextqlRPCPublicRbacDeleteServiceAccountResponseTypedDict", + "TextqlRPCPublicRbacExportRolePermissionsRequest", + "TextqlRPCPublicRbacExportRolePermissionsRequestTypedDict", + "TextqlRPCPublicRbacExportRolePermissionsResponse", + "TextqlRPCPublicRbacExportRolePermissionsResponseTypedDict", "TextqlRPCPublicRbacGenerateShareLinkRequest", "TextqlRPCPublicRbacGenerateShareLinkRequestTypedDict", "TextqlRPCPublicRbacGenerateShareLinkResponse", @@ -14126,6 +14148,10 @@ "RBACServiceDeleteServiceAccountRequestTypedDict": ".rbacservice_deleteserviceaccountop", "RBACServiceDeleteServiceAccountResponse": ".rbacservice_deleteserviceaccountop", "RBACServiceDeleteServiceAccountResponseTypedDict": ".rbacservice_deleteserviceaccountop", + "RBACServiceExportRolePermissionsRequest": ".rbacservice_exportrolepermissionsop", + "RBACServiceExportRolePermissionsRequestTypedDict": ".rbacservice_exportrolepermissionsop", + "RBACServiceExportRolePermissionsResponse": ".rbacservice_exportrolepermissionsop", + "RBACServiceExportRolePermissionsResponseTypedDict": ".rbacservice_exportrolepermissionsop", "RBACServiceGenerateShareLinkRequest": ".rbacservice_generatesharelinkop", "RBACServiceGenerateShareLinkRequestTypedDict": ".rbacservice_generatesharelinkop", "RBACServiceGenerateShareLinkResponse": ".rbacservice_generatesharelinkop", @@ -17120,6 +17146,10 @@ "TextqlRPCPublicRbacDeleteServiceAccountRequestTypedDict": ".textql_rpc_public_rbac_deleteserviceaccountrequest", "TextqlRPCPublicRbacDeleteServiceAccountResponse": ".textql_rpc_public_rbac_deleteserviceaccountresponse", "TextqlRPCPublicRbacDeleteServiceAccountResponseTypedDict": ".textql_rpc_public_rbac_deleteserviceaccountresponse", + "TextqlRPCPublicRbacExportRolePermissionsRequest": ".textql_rpc_public_rbac_exportrolepermissionsrequest", + "TextqlRPCPublicRbacExportRolePermissionsRequestTypedDict": ".textql_rpc_public_rbac_exportrolepermissionsrequest", + "TextqlRPCPublicRbacExportRolePermissionsResponse": ".textql_rpc_public_rbac_exportrolepermissionsresponse", + "TextqlRPCPublicRbacExportRolePermissionsResponseTypedDict": ".textql_rpc_public_rbac_exportrolepermissionsresponse", "TextqlRPCPublicRbacGenerateShareLinkRequest": ".textql_rpc_public_rbac_generatesharelinkrequest", "TextqlRPCPublicRbacGenerateShareLinkRequestTypedDict": ".textql_rpc_public_rbac_generatesharelinkrequest", "TextqlRPCPublicRbacGenerateShareLinkResponse": ".textql_rpc_public_rbac_generatesharelinkresponse", diff --git a/src/textql_sdk/models/rbacservice_exportrolepermissionsop.py b/src/textql_sdk/models/rbacservice_exportrolepermissionsop.py new file mode 100644 index 00000000..a0b8812f --- /dev/null +++ b/src/textql_sdk/models/rbacservice_exportrolepermissionsop.py @@ -0,0 +1,85 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .connect_error import ConnectError, ConnectErrorTypedDict +from .textql_rpc_public_rbac_exportrolepermissionsrequest import ( + TextqlRPCPublicRbacExportRolePermissionsRequest, + TextqlRPCPublicRbacExportRolePermissionsRequestTypedDict, +) +from .textql_rpc_public_rbac_exportrolepermissionsresponse import ( + TextqlRPCPublicRbacExportRolePermissionsResponse, + TextqlRPCPublicRbacExportRolePermissionsResponseTypedDict, +) +import pydantic +from pydantic import model_serializer +from pydantic.functional_validators import AfterValidator +from textql_sdk.types import BaseModel, UNSET_SENTINEL +from textql_sdk.utils import ( + FieldMetadata, + HeaderMetadata, + RequestMetadata, + validate_const, +) +from typing import Optional, Union +from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict + + +class RBACServiceExportRolePermissionsRequestTypedDict(TypedDict): + body: TextqlRPCPublicRbacExportRolePermissionsRequestTypedDict + connect_protocol_version: float + connect_timeout_ms: NotRequired[float] + + +class RBACServiceExportRolePermissionsRequest(BaseModel): + body: Annotated[ + TextqlRPCPublicRbacExportRolePermissionsRequest, + FieldMetadata(request=RequestMetadata(media_type="application/json")), + ] + + connect_protocol_version: Annotated[ + Annotated[float, AfterValidator(validate_const(1))], + pydantic.Field(alias="Connect-Protocol-Version"), + FieldMetadata(header=HeaderMetadata(style="simple", explode=False)), + ] = 1 + + connect_timeout_ms: Annotated[ + Optional[float], + pydantic.Field(alias="Connect-Timeout-Ms"), + FieldMetadata(header=HeaderMetadata(style="simple", explode=False)), + ] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["Connect-Timeout-Ms"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +RBACServiceExportRolePermissionsResponseTypedDict = TypeAliasType( + "RBACServiceExportRolePermissionsResponseTypedDict", + Union[ + TextqlRPCPublicRbacExportRolePermissionsResponseTypedDict, ConnectErrorTypedDict + ], +) + + +RBACServiceExportRolePermissionsResponse = TypeAliasType( + "RBACServiceExportRolePermissionsResponse", + Union[TextqlRPCPublicRbacExportRolePermissionsResponse, ConnectError], +) + + +try: + RBACServiceExportRolePermissionsRequest.model_rebuild() +except NameError: + pass diff --git a/src/textql_sdk/models/textql_rpc_public_chat_llmmodel.py b/src/textql_sdk/models/textql_rpc_public_chat_llmmodel.py index 316bd985..a97e4a2a 100644 --- a/src/textql_sdk/models/textql_rpc_public_chat_llmmodel.py +++ b/src/textql_sdk/models/textql_rpc_public_chat_llmmodel.py @@ -32,10 +32,9 @@ "MODEL_KIMI_K2_7_CODE", "MODEL_QWEN3_7_PLUS", "MODEL_KIMI_K3", - "MODEL_DEEPSEEK_V4_FLASH_0731", - "MODEL_DEEPSEEK_V4_FLASH_VISION_EXP", "MODEL_GLM_5_3_FLASH", "MODEL_GLM_5_3", + "MODEL_DEEPSEEK_V4P1_FLASH", "MODEL_MUSE_SPARK_1_1", "MODEL_MUSE_SPARK_1_2", ], diff --git a/src/textql_sdk/models/textql_rpc_public_rbac_exportrolepermissionsrequest.py b/src/textql_sdk/models/textql_rpc_public_rbac_exportrolepermissionsrequest.py new file mode 100644 index 00000000..110e4d11 --- /dev/null +++ b/src/textql_sdk/models/textql_rpc_public_rbac_exportrolepermissionsrequest.py @@ -0,0 +1,13 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from textql_sdk.types import BaseModel +from typing_extensions import TypedDict + + +class TextqlRPCPublicRbacExportRolePermissionsRequestTypedDict(TypedDict): + pass + + +class TextqlRPCPublicRbacExportRolePermissionsRequest(BaseModel): + pass diff --git a/src/textql_sdk/models/textql_rpc_public_rbac_exportrolepermissionsresponse.py b/src/textql_sdk/models/textql_rpc_public_rbac_exportrolepermissionsresponse.py new file mode 100644 index 00000000..3a4b92c3 --- /dev/null +++ b/src/textql_sdk/models/textql_rpc_public_rbac_exportrolepermissionsresponse.py @@ -0,0 +1,44 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +import pydantic +from pydantic import model_serializer +from textql_sdk.types import BaseModel, UNSET_SENTINEL +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class TextqlRPCPublicRbacExportRolePermissionsResponseTypedDict(TypedDict): + file_name: NotRequired[str] + content_type: NotRequired[str] + data: NotRequired[str] + + +class TextqlRPCPublicRbacExportRolePermissionsResponse(BaseModel): + file_name: Annotated[Optional[str], pydantic.Field(alias="fileName")] = None + + content_type: Annotated[Optional[str], pydantic.Field(alias="contentType")] = None + + data: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["fileName", "contentType", "data"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +try: + TextqlRPCPublicRbacExportRolePermissionsResponse.model_rebuild() +except NameError: + pass diff --git a/src/textql_sdk/observability.py b/src/textql_sdk/observability.py index 472fd921..cc003b99 100644 --- a/src/textql_sdk/observability.py +++ b/src/textql_sdk/observability.py @@ -231,7 +231,9 @@ def backfill_custom_topic( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.ObservabilityServiceBackfillCustomTopicResponse: - r"""BackfillCustomTopic + r"""Custom topics + + Custom topics :param connect_timeout_ms: :param topic_id: @@ -517,7 +519,9 @@ async def backfill_custom_topic_async( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.ObservabilityServiceBackfillCustomTopicResponse: - r"""BackfillCustomTopic + r"""Custom topics + + Custom topics :param connect_timeout_ms: :param topic_id: @@ -1030,9 +1034,7 @@ def create_custom_topic( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.ObservabilityServiceCreateCustomTopicResponse: - r"""Custom topics - - Custom topics + r"""CreateCustomTopic :param connect_timeout_ms: :param name: @@ -1145,9 +1147,7 @@ async def create_custom_topic_async( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.ObservabilityServiceCreateCustomTopicResponse: - r"""Custom topics - - Custom topics + r"""CreateCustomTopic :param connect_timeout_ms: :param name: diff --git a/src/textql_sdk/rbac.py b/src/textql_sdk/rbac.py index 8a025bed..2c57b0cc 100644 --- a/src/textql_sdk/rbac.py +++ b/src/textql_sdk/rbac.py @@ -2255,6 +2255,220 @@ async def delete_service_account_async( raise errors.TextqlDefaultError("Unexpected response received", http_res) + def export_role_permissions( + self, + *, + body: Union[ + models.TextqlRPCPublicRbacExportRolePermissionsRequest, + models.TextqlRPCPublicRbacExportRolePermissionsRequestTypedDict, + ], + connect_timeout_ms: Optional[float] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.RBACServiceExportRolePermissionsResponse: + r"""ExportRolePermissions + + :param body: + :param connect_timeout_ms: + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.RBACServiceExportRolePermissionsRequest( + connect_timeout_ms=connect_timeout_ms, + body=utils.get_pydantic_model( + body, models.TextqlRPCPublicRbacExportRolePermissionsRequest + ), + ) + + req = self._build_request( + method="POST", + path="/textql.rpc.public.rbac.RBACService/ExportRolePermissions", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.body, + False, + False, + "json", + models.TextqlRPCPublicRbacExportRolePermissionsRequest, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="RBACService_ExportRolePermissions", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["RBACService"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.TextqlRPCPublicRbacExportRolePermissionsResponse, http_res + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.TextqlDefaultError( + "API error occurred", http_res, http_res_text + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.TextqlDefaultError( + "API error occurred", http_res, http_res_text + ) + if utils.match_response(http_res, "default", "application/json"): + return unmarshal_json_response(models.ConnectError, http_res) + + raise errors.TextqlDefaultError("Unexpected response received", http_res) + + async def export_role_permissions_async( + self, + *, + body: Union[ + models.TextqlRPCPublicRbacExportRolePermissionsRequest, + models.TextqlRPCPublicRbacExportRolePermissionsRequestTypedDict, + ], + connect_timeout_ms: Optional[float] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.RBACServiceExportRolePermissionsResponse: + r"""ExportRolePermissions + + :param body: + :param connect_timeout_ms: + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.RBACServiceExportRolePermissionsRequest( + connect_timeout_ms=connect_timeout_ms, + body=utils.get_pydantic_model( + body, models.TextqlRPCPublicRbacExportRolePermissionsRequest + ), + ) + + req = self._build_request_async( + method="POST", + path="/textql.rpc.public.rbac.RBACService/ExportRolePermissions", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.body, + False, + False, + "json", + models.TextqlRPCPublicRbacExportRolePermissionsRequest, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="RBACService_ExportRolePermissions", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["RBACService"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.TextqlRPCPublicRbacExportRolePermissionsResponse, http_res + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.TextqlDefaultError( + "API error occurred", http_res, http_res_text + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.TextqlDefaultError( + "API error occurred", http_res, http_res_text + ) + if utils.match_response(http_res, "default", "application/json"): + return unmarshal_json_response(models.ConnectError, http_res) + + raise errors.TextqlDefaultError("Unexpected response received", http_res) + def generate_share_link( self, *, diff --git a/uv.lock b/uv.lock index 83a46b72..e77b54e6 100644 --- a/uv.lock +++ b/uv.lock @@ -470,7 +470,7 @@ wheels = [ [[package]] name = "textql-sdk" -version = "1.1.25" +version = "1.1.26" source = { editable = "." } dependencies = [ { name = "connect-python" }, From edebe0ae13ea53715c9c671cef1053cb2444a615 Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Fri, 11 Sep 2026 23:17:16 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow