From 1b40459a5ddef5d96f7c6da0742feb510ccef001 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Mon, 4 Aug 2025 09:30:36 -0600 Subject: [PATCH 01/15] GenAI SDK Structure --- RELEASING.md | 2 + eachdist.ini | 1 + instrumentation-genai/README.md | 1 + .../opentelemetry-genai-sdk/CHANGELOG.md | 8 + .../opentelemetry-genai-sdk/LICENSE | 201 ++++++++++++++++++ .../opentelemetry-genai-sdk/README.rst | 0 .../opentelemetry-genai-sdk/pyproject.toml | 55 +++++ .../src/opentelemetry/genai/sdk/__init__.py | 0 .../src/opentelemetry/genai/sdk/package.py | 16 ++ .../src/opentelemetry/genai/sdk/version.py | 15 ++ .../opentelemetry-genai-sdk/tests/__init__.py | 0 11 files changed, 299 insertions(+) create mode 100644 instrumentation-genai/opentelemetry-genai-sdk/CHANGELOG.md create mode 100644 instrumentation-genai/opentelemetry-genai-sdk/LICENSE create mode 100644 instrumentation-genai/opentelemetry-genai-sdk/README.rst create mode 100644 instrumentation-genai/opentelemetry-genai-sdk/pyproject.toml create mode 100644 instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/__init__.py create mode 100644 instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/package.py create mode 100644 instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/version.py create mode 100644 instrumentation-genai/opentelemetry-genai-sdk/tests/__init__.py diff --git a/RELEASING.md b/RELEASING.md index 5a6d0e7241..e750f77a50 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -25,6 +25,7 @@ > - opentelemetry-instrumentation-vertexai > - opentelemetry-instrumentation-google-genai > - opentelemetry-instrumentation-langchain +> - opentelemetry-genai-sdk > > These libraries are also excluded from the general release. @@ -88,6 +89,7 @@ The workflow will create a pull request that should be merged in order to procee > - opentelemetry-instrumentation-vertexai > - opentelemetry-instrumentation-google-genai > - opentelemetry-instrumentation-langchain +> - opentelemetry-genai-sdk > > These libraries are also excluded from the general patch release. diff --git a/eachdist.ini b/eachdist.ini index 21efa31e35..15995e52ca 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -55,6 +55,7 @@ packages= opentelemetry-instrumentation-openai-v2 opentelemetry-instrumentation-test opentelemetry-instrumentation-langchain + opentelemetry-genai-sdk [lintroots] extraroots=examples/*,scripts/ diff --git a/instrumentation-genai/README.md b/instrumentation-genai/README.md index 9857680589..eca55d7865 100644 --- a/instrumentation-genai/README.md +++ b/instrumentation-genai/README.md @@ -1,6 +1,7 @@ | Instrumentation | Supported Packages | Metrics support | Semconv status | | --------------- | ------------------ | --------------- | -------------- | +| [opentelemetry-genai-sdk](./opentelemetry-genai-sdk) | N/A | No | development | [opentelemetry-instrumentation-google-genai](./opentelemetry-instrumentation-google-genai) | google-genai >= 1.0.0 | No | development | [opentelemetry-instrumentation-langchain](./opentelemetry-instrumentation-langchain) | langchain >= 0.3.21 | No | development | [opentelemetry-instrumentation-openai-v2](./opentelemetry-instrumentation-openai-v2) | openai >= 1.26.0 | Yes | development diff --git a/instrumentation-genai/opentelemetry-genai-sdk/CHANGELOG.md b/instrumentation-genai/opentelemetry-genai-sdk/CHANGELOG.md new file mode 100644 index 0000000000..6209a70d6f --- /dev/null +++ b/instrumentation-genai/opentelemetry-genai-sdk/CHANGELOG.md @@ -0,0 +1,8 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## Unreleased \ No newline at end of file diff --git a/instrumentation-genai/opentelemetry-genai-sdk/LICENSE b/instrumentation-genai/opentelemetry-genai-sdk/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/instrumentation-genai/opentelemetry-genai-sdk/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/instrumentation-genai/opentelemetry-genai-sdk/README.rst b/instrumentation-genai/opentelemetry-genai-sdk/README.rst new file mode 100644 index 0000000000..e69de29bb2 diff --git a/instrumentation-genai/opentelemetry-genai-sdk/pyproject.toml b/instrumentation-genai/opentelemetry-genai-sdk/pyproject.toml new file mode 100644 index 0000000000..5f89010ab6 --- /dev/null +++ b/instrumentation-genai/opentelemetry-genai-sdk/pyproject.toml @@ -0,0 +1,55 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "opentelemetry-genai-sdk" +dynamic = ["version"] +description = "OpenTelemetry GenAI SDK" +readme = "README.rst" +license = "Apache-2.0" +requires-python = ">=3.8" +authors = [ + { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, +] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", +] +dependencies = [ + "opentelemetry-api ~= 1.30", + "opentelemetry-instrumentation ~= 0.51b0", + "opentelemetry-semantic-conventions ~= 0.51b0", + "opentelemetry-api>=1.31.0", + "opentelemetry-sdk>=1.31.0", +] + +[project.optional-dependencies] +test = [ + "pytest>=7.0.0", +] +# evaluation = ["deepevals>=0.1.0", "openlit-sdk>=0.1.0"] + +[project.urls] +Homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/instrumentation-genai/opentelemetry-genai-sdk" +Repository = "https://github.com/open-telemetry/opentelemetry-python-contrib" + +[tool.hatch.version] +path = "src/opentelemetry/genai/sdk/version.py" + +[tool.hatch.build.targets.sdist] +include = [ + "/src", + "/tests", +] + +[tool.hatch.build.targets.wheel] +packages = ["src/opentelemetry"] diff --git a/instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/__init__.py b/instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/package.py b/instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/package.py new file mode 100644 index 0000000000..211727b883 --- /dev/null +++ b/instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/package.py @@ -0,0 +1,16 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +_instruments = () diff --git a/instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/version.py b/instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/version.py new file mode 100644 index 0000000000..e7bf4a48eb --- /dev/null +++ b/instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/version.py @@ -0,0 +1,15 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +__version__ = "0.1b0.dev" diff --git a/instrumentation-genai/opentelemetry-genai-sdk/tests/__init__.py b/instrumentation-genai/opentelemetry-genai-sdk/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 From edeae262f3bf8dbd3296a7b2311e939f507a5353 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Mon, 4 Aug 2025 09:34:46 -0600 Subject: [PATCH 02/15] generate bootstrap entry --- scripts/generate_instrumentation_bootstrap.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/generate_instrumentation_bootstrap.py b/scripts/generate_instrumentation_bootstrap.py index 6b57fa5d62..e1564005a4 100755 --- a/scripts/generate_instrumentation_bootstrap.py +++ b/scripts/generate_instrumentation_bootstrap.py @@ -68,6 +68,10 @@ # development. This filter will get removed once it is further along in its # development lifecycle and ready to be included by default. "opentelemetry-instrumentation-langchain", + # GenAI SDK is currently excluded because it is still in early + # development. This filter will get removed once it is further along in its + # development lifecycle and ready to be included by default. + "opentelemetry-genai-sdk", ] # Static version specifiers for instrumentations that are released independently From a836cbf3310531b5a7a05946e88aa7dadf17210d Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Mon, 4 Aug 2025 10:14:42 -0600 Subject: [PATCH 03/15] Rename GenAI SDK to GenAI Utils --- RELEASING.md | 4 ++-- eachdist.ini | 2 +- instrumentation-genai/README.md | 2 +- .../CHANGELOG.md | 0 .../LICENSE | 0 .../README.rst | 0 .../pyproject.toml | 9 ++++----- .../src/opentelemetry/genai/utils}/__init__.py | 0 .../src/opentelemetry/genai/utils}/package.py | 0 .../src/opentelemetry/genai/utils}/version.py | 0 .../tests/__init__.py | 0 scripts/generate_instrumentation_bootstrap.py | 4 ++-- 12 files changed, 10 insertions(+), 11 deletions(-) rename instrumentation-genai/{opentelemetry-genai-sdk => opentelemetry-genai-utils}/CHANGELOG.md (100%) rename instrumentation-genai/{opentelemetry-genai-sdk => opentelemetry-genai-utils}/LICENSE (100%) rename instrumentation-genai/{opentelemetry-genai-sdk => opentelemetry-genai-utils}/README.rst (100%) rename instrumentation-genai/{opentelemetry-genai-sdk => opentelemetry-genai-utils}/pyproject.toml (84%) rename instrumentation-genai/{opentelemetry-genai-sdk/src/opentelemetry/genai/sdk => opentelemetry-genai-utils/src/opentelemetry/genai/utils}/__init__.py (100%) rename instrumentation-genai/{opentelemetry-genai-sdk/src/opentelemetry/genai/sdk => opentelemetry-genai-utils/src/opentelemetry/genai/utils}/package.py (100%) rename instrumentation-genai/{opentelemetry-genai-sdk/src/opentelemetry/genai/sdk => opentelemetry-genai-utils/src/opentelemetry/genai/utils}/version.py (100%) rename instrumentation-genai/{opentelemetry-genai-sdk => opentelemetry-genai-utils}/tests/__init__.py (100%) diff --git a/RELEASING.md b/RELEASING.md index e750f77a50..b24563823a 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -25,7 +25,7 @@ > - opentelemetry-instrumentation-vertexai > - opentelemetry-instrumentation-google-genai > - opentelemetry-instrumentation-langchain -> - opentelemetry-genai-sdk +> - opentelemetry-genai-utils > > These libraries are also excluded from the general release. @@ -89,7 +89,7 @@ The workflow will create a pull request that should be merged in order to procee > - opentelemetry-instrumentation-vertexai > - opentelemetry-instrumentation-google-genai > - opentelemetry-instrumentation-langchain -> - opentelemetry-genai-sdk +> - opentelemetry-genai-utils > > These libraries are also excluded from the general patch release. diff --git a/eachdist.ini b/eachdist.ini index 15995e52ca..814eb6a4e4 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -55,7 +55,7 @@ packages= opentelemetry-instrumentation-openai-v2 opentelemetry-instrumentation-test opentelemetry-instrumentation-langchain - opentelemetry-genai-sdk + opentelemetry-genai-utils [lintroots] extraroots=examples/*,scripts/ diff --git a/instrumentation-genai/README.md b/instrumentation-genai/README.md index eca55d7865..7f34f48bf0 100644 --- a/instrumentation-genai/README.md +++ b/instrumentation-genai/README.md @@ -1,7 +1,7 @@ | Instrumentation | Supported Packages | Metrics support | Semconv status | | --------------- | ------------------ | --------------- | -------------- | -| [opentelemetry-genai-sdk](./opentelemetry-genai-sdk) | N/A | No | development +| [opentelemetry-genai-utils](./opentelemetry-genai-utils) | N/A | No | development | [opentelemetry-instrumentation-google-genai](./opentelemetry-instrumentation-google-genai) | google-genai >= 1.0.0 | No | development | [opentelemetry-instrumentation-langchain](./opentelemetry-instrumentation-langchain) | langchain >= 0.3.21 | No | development | [opentelemetry-instrumentation-openai-v2](./opentelemetry-instrumentation-openai-v2) | openai >= 1.26.0 | Yes | development diff --git a/instrumentation-genai/opentelemetry-genai-sdk/CHANGELOG.md b/instrumentation-genai/opentelemetry-genai-utils/CHANGELOG.md similarity index 100% rename from instrumentation-genai/opentelemetry-genai-sdk/CHANGELOG.md rename to instrumentation-genai/opentelemetry-genai-utils/CHANGELOG.md diff --git a/instrumentation-genai/opentelemetry-genai-sdk/LICENSE b/instrumentation-genai/opentelemetry-genai-utils/LICENSE similarity index 100% rename from instrumentation-genai/opentelemetry-genai-sdk/LICENSE rename to instrumentation-genai/opentelemetry-genai-utils/LICENSE diff --git a/instrumentation-genai/opentelemetry-genai-sdk/README.rst b/instrumentation-genai/opentelemetry-genai-utils/README.rst similarity index 100% rename from instrumentation-genai/opentelemetry-genai-sdk/README.rst rename to instrumentation-genai/opentelemetry-genai-utils/README.rst diff --git a/instrumentation-genai/opentelemetry-genai-sdk/pyproject.toml b/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml similarity index 84% rename from instrumentation-genai/opentelemetry-genai-sdk/pyproject.toml rename to instrumentation-genai/opentelemetry-genai-utils/pyproject.toml index 5f89010ab6..1d1d4fe9fc 100644 --- a/instrumentation-genai/opentelemetry-genai-sdk/pyproject.toml +++ b/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml @@ -3,9 +3,9 @@ requires = ["hatchling"] build-backend = "hatchling.build" [project] -name = "opentelemetry-genai-sdk" +name = "opentelemetry-genai-utils" dynamic = ["version"] -description = "OpenTelemetry GenAI SDK" +description = "OpenTelemetry GenAI Utils" readme = "README.rst" license = "Apache-2.0" requires-python = ">=3.8" @@ -36,14 +36,13 @@ dependencies = [ test = [ "pytest>=7.0.0", ] -# evaluation = ["deepevals>=0.1.0", "openlit-sdk>=0.1.0"] [project.urls] -Homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/instrumentation-genai/opentelemetry-genai-sdk" +Homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/instrumentation-genai/opentelemetry-genai-utils" Repository = "https://github.com/open-telemetry/opentelemetry-python-contrib" [tool.hatch.version] -path = "src/opentelemetry/genai/sdk/version.py" +path = "src/opentelemetry/genai/utils/version.py" [tool.hatch.build.targets.sdist] include = [ diff --git a/instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/__init__.py b/instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/__init__.py similarity index 100% rename from instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/__init__.py rename to instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/__init__.py diff --git a/instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/package.py b/instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py similarity index 100% rename from instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/package.py rename to instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py diff --git a/instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/version.py b/instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/version.py similarity index 100% rename from instrumentation-genai/opentelemetry-genai-sdk/src/opentelemetry/genai/sdk/version.py rename to instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/version.py diff --git a/instrumentation-genai/opentelemetry-genai-sdk/tests/__init__.py b/instrumentation-genai/opentelemetry-genai-utils/tests/__init__.py similarity index 100% rename from instrumentation-genai/opentelemetry-genai-sdk/tests/__init__.py rename to instrumentation-genai/opentelemetry-genai-utils/tests/__init__.py diff --git a/scripts/generate_instrumentation_bootstrap.py b/scripts/generate_instrumentation_bootstrap.py index e1564005a4..469dd95e70 100755 --- a/scripts/generate_instrumentation_bootstrap.py +++ b/scripts/generate_instrumentation_bootstrap.py @@ -68,10 +68,10 @@ # development. This filter will get removed once it is further along in its # development lifecycle and ready to be included by default. "opentelemetry-instrumentation-langchain", - # GenAI SDK is currently excluded because it is still in early + # GenAI utils is currently excluded because it is still in early # development. This filter will get removed once it is further along in its # development lifecycle and ready to be included by default. - "opentelemetry-genai-sdk", + "opentelemetry-genai-utils", ] # Static version specifiers for instrumentations that are released independently From 771b549a52720c53a4199a0b1b6d391f21fb4bb3 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Wed, 6 Aug 2025 09:19:42 -0600 Subject: [PATCH 04/15] remove duplicate dependency --- instrumentation-genai/opentelemetry-genai-utils/pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml b/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml index 1d1d4fe9fc..c8710d8417 100644 --- a/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml +++ b/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml @@ -25,7 +25,6 @@ classifiers = [ "Programming Language :: Python :: 3.13", ] dependencies = [ - "opentelemetry-api ~= 1.30", "opentelemetry-instrumentation ~= 0.51b0", "opentelemetry-semantic-conventions ~= 0.51b0", "opentelemetry-api>=1.31.0", From 3bfb7effb9d29127bae7d5c4604cafe240182439 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Wed, 6 Aug 2025 09:53:00 -0600 Subject: [PATCH 05/15] update uv lock --- uv.lock | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/uv.lock b/uv.lock index 934249465e..6cd1d06458 100644 --- a/uv.lock +++ b/uv.lock @@ -13,6 +13,7 @@ resolution-markers = [ members = [ "opentelemetry-exporter-prometheus-remote-write", "opentelemetry-exporter-richconsole", + "opentelemetry-genai-utils", "opentelemetry-instrumentation", "opentelemetry-instrumentation-aio-pika", "opentelemetry-instrumentation-aiohttp-client", @@ -1727,6 +1728,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, ] +[[package]] +name = "iniconfig" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, +] + [[package]] name = "iso8601" version = "2.1.0" @@ -2420,6 +2430,31 @@ requires-dist = [ { name = "rich", specifier = ">=10.0.0" }, ] +[[package]] +name = "opentelemetry-genai-utils" +source = { editable = "instrumentation-genai/opentelemetry-genai-utils" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-sdk" }, + { name = "opentelemetry-semantic-conventions" }, +] + +[package.optional-dependencies] +test = [ + { name = "pytest" }, +] + +[package.metadata] +requires-dist = [ + { name = "opentelemetry-api", git = "https://github.com/open-telemetry/opentelemetry-python?subdirectory=opentelemetry-api&branch=main" }, + { name = "opentelemetry-instrumentation", editable = "opentelemetry-instrumentation" }, + { name = "opentelemetry-sdk", git = "https://github.com/open-telemetry/opentelemetry-python?subdirectory=opentelemetry-sdk&branch=main" }, + { name = "opentelemetry-semantic-conventions", git = "https://github.com/open-telemetry/opentelemetry-python?subdirectory=opentelemetry-semantic-conventions&branch=main" }, + { name = "pytest", marker = "extra == 'test'", specifier = ">=7.0.0" }, +] +provides-extras = ["test"] + [[package]] name = "opentelemetry-instrumentation" source = { editable = "opentelemetry-instrumentation" } @@ -4110,6 +4145,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bd/30/2d4cf89035c22a89bf0e34dbc50fdc07c42c9bdc90fd972d495257ad2b6e/plaster_pastedeploy-1.0.1-py2.py3-none-any.whl", hash = "sha256:ad3550cc744648969ed3b810f33c9344f515ee8d8a8cec18e8f2c4a643c2181f", size = 7823, upload-time = "2022-11-07T01:23:03.23Z" }, ] +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + [[package]] name = "prometheus-client" version = "0.22.0" @@ -4713,6 +4757,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/db/41/a2114b8dd2187ae007e022a2baabdc7937cc78211cefc0c01fc5452193af/pyramid-2.0.2-py3-none-any.whl", hash = "sha256:2e6585ac55c147f0a51bc00dadf72075b3bdd9a871b332ff9e5e04117ccd76fa", size = 247277, upload-time = "2023-08-25T06:33:20.883Z" }, ] +[[package]] +name = "pytest" +version = "8.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, +] + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -5155,6 +5217,45 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload-time = "2025-04-02T08:25:07.678Z" }, ] +[[package]] +name = "tomli" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, +] + [[package]] name = "tornado" version = "6.5" From 938c2026411ed89985c3933f5d5acc3f96266ce6 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Wed, 6 Aug 2025 10:26:19 -0600 Subject: [PATCH 06/15] generate tox doc --- instrumentation-genai/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/instrumentation-genai/README.md b/instrumentation-genai/README.md index 1cf878c31e..ef9f4ac739 100644 --- a/instrumentation-genai/README.md +++ b/instrumentation-genai/README.md @@ -1,7 +1,6 @@ | Instrumentation | Supported Packages | Metrics support | Semconv status | | --------------- | ------------------ | --------------- | -------------- | -| [opentelemetry-genai-utils](./opentelemetry-genai-utils) | N/A | No | development | [opentelemetry-instrumentation-google-genai](./opentelemetry-instrumentation-google-genai) | google-genai >= 1.0.0 | No | development | [opentelemetry-instrumentation-langchain](./opentelemetry-instrumentation-langchain) | langchain >= 0.3.21 | No | development | [opentelemetry-instrumentation-openai-v2](./opentelemetry-instrumentation-openai-v2) | openai >= 1.26.0 | Yes | development From e4d28fdd55973830e3806a2741e291df92e76939 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Thu, 7 Aug 2025 10:21:21 -0600 Subject: [PATCH 07/15] remove sdk dependency, remove bootstrap entry --- .../opentelemetry-genai-utils/pyproject.toml | 1 - scripts/generate_instrumentation_bootstrap.py | 4 ---- 2 files changed, 5 deletions(-) diff --git a/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml b/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml index c8710d8417..574df9ceef 100644 --- a/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml +++ b/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml @@ -28,7 +28,6 @@ dependencies = [ "opentelemetry-instrumentation ~= 0.51b0", "opentelemetry-semantic-conventions ~= 0.51b0", "opentelemetry-api>=1.31.0", - "opentelemetry-sdk>=1.31.0", ] [project.optional-dependencies] diff --git a/scripts/generate_instrumentation_bootstrap.py b/scripts/generate_instrumentation_bootstrap.py index 85f2a64860..23d5ba172e 100755 --- a/scripts/generate_instrumentation_bootstrap.py +++ b/scripts/generate_instrumentation_bootstrap.py @@ -72,10 +72,6 @@ # development. This filter will get removed once it is further along in its # development lifecycle and ready to be included by default. "opentelemetry-instrumentation-weaviate", - # GenAI utils is currently excluded because it is still in early - # development. This filter will get removed once it is further along in its - # development lifecycle and ready to be included by default. - "opentelemetry-genai-utils", ] # Static version specifiers for instrumentations that are released independently From 02e93f35985219d0901d65ba5cc2187002bdf6be Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Thu, 7 Aug 2025 10:25:51 -0600 Subject: [PATCH 08/15] ran tox generate and uv sync --- .../src/opentelemetry/instrumentation/bootstrap_gen.py | 1 + uv.lock | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py index 15c5536941..d09db5d7e6 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py @@ -214,6 +214,7 @@ }, ] default_instrumentations = [ + "opentelemetry-genai-utils==0.1b0.dev", "opentelemetry-instrumentation-asyncio==0.58b0.dev", "opentelemetry-instrumentation-dbapi==0.58b0.dev", "opentelemetry-instrumentation-logging==0.58b0.dev", diff --git a/uv.lock b/uv.lock index 6cd1d06458..f0d3c7d39c 100644 --- a/uv.lock +++ b/uv.lock @@ -2436,7 +2436,6 @@ source = { editable = "instrumentation-genai/opentelemetry-genai-utils" } dependencies = [ { name = "opentelemetry-api" }, { name = "opentelemetry-instrumentation" }, - { name = "opentelemetry-sdk" }, { name = "opentelemetry-semantic-conventions" }, ] @@ -2449,7 +2448,6 @@ test = [ requires-dist = [ { name = "opentelemetry-api", git = "https://github.com/open-telemetry/opentelemetry-python?subdirectory=opentelemetry-api&branch=main" }, { name = "opentelemetry-instrumentation", editable = "opentelemetry-instrumentation" }, - { name = "opentelemetry-sdk", git = "https://github.com/open-telemetry/opentelemetry-python?subdirectory=opentelemetry-sdk&branch=main" }, { name = "opentelemetry-semantic-conventions", git = "https://github.com/open-telemetry/opentelemetry-python?subdirectory=opentelemetry-semantic-conventions&branch=main" }, { name = "pytest", marker = "extra == 'test'", specifier = ">=7.0.0" }, ] From 9587b3fcc5c22f1428357a462c9d26a9f9473b02 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Thu, 7 Aug 2025 17:08:58 -0600 Subject: [PATCH 09/15] move package out of instrumentation folder --- .../instrumentation/bootstrap_gen.py | 1 - .../opentelemetry-genai-utils/CHANGELOG.md | 0 .../opentelemetry-genai-utils/LICENSE | 0 .../opentelemetry-genai-utils/README.rst | 0 .../opentelemetry-genai-utils/pyproject.toml | 2 +- .../src/opentelemetry/genai/utils/__init__.py | 0 .../src/opentelemetry/genai/utils/package.py | 2 - .../src/opentelemetry/genai/utils/version.py | 0 .../tests/__init__.py | 0 uv.lock | 99 ------------------- 10 files changed, 1 insertion(+), 103 deletions(-) rename {instrumentation-genai => util}/opentelemetry-genai-utils/CHANGELOG.md (100%) rename {instrumentation-genai => util}/opentelemetry-genai-utils/LICENSE (100%) rename {instrumentation-genai => util}/opentelemetry-genai-utils/README.rst (100%) rename {instrumentation-genai => util}/opentelemetry-genai-utils/pyproject.toml (95%) rename {instrumentation-genai => util}/opentelemetry-genai-utils/src/opentelemetry/genai/utils/__init__.py (100%) rename {instrumentation-genai => util}/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py (96%) rename {instrumentation-genai => util}/opentelemetry-genai-utils/src/opentelemetry/genai/utils/version.py (100%) rename {instrumentation-genai => util}/opentelemetry-genai-utils/tests/__init__.py (100%) diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py index d09db5d7e6..15c5536941 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py @@ -214,7 +214,6 @@ }, ] default_instrumentations = [ - "opentelemetry-genai-utils==0.1b0.dev", "opentelemetry-instrumentation-asyncio==0.58b0.dev", "opentelemetry-instrumentation-dbapi==0.58b0.dev", "opentelemetry-instrumentation-logging==0.58b0.dev", diff --git a/instrumentation-genai/opentelemetry-genai-utils/CHANGELOG.md b/util/opentelemetry-genai-utils/CHANGELOG.md similarity index 100% rename from instrumentation-genai/opentelemetry-genai-utils/CHANGELOG.md rename to util/opentelemetry-genai-utils/CHANGELOG.md diff --git a/instrumentation-genai/opentelemetry-genai-utils/LICENSE b/util/opentelemetry-genai-utils/LICENSE similarity index 100% rename from instrumentation-genai/opentelemetry-genai-utils/LICENSE rename to util/opentelemetry-genai-utils/LICENSE diff --git a/instrumentation-genai/opentelemetry-genai-utils/README.rst b/util/opentelemetry-genai-utils/README.rst similarity index 100% rename from instrumentation-genai/opentelemetry-genai-utils/README.rst rename to util/opentelemetry-genai-utils/README.rst diff --git a/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml b/util/opentelemetry-genai-utils/pyproject.toml similarity index 95% rename from instrumentation-genai/opentelemetry-genai-utils/pyproject.toml rename to util/opentelemetry-genai-utils/pyproject.toml index 574df9ceef..fc4a448be3 100644 --- a/instrumentation-genai/opentelemetry-genai-utils/pyproject.toml +++ b/util/opentelemetry-genai-utils/pyproject.toml @@ -36,7 +36,7 @@ test = [ ] [project.urls] -Homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/instrumentation-genai/opentelemetry-genai-utils" +Homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/util/opentelemetry-genai-utils" Repository = "https://github.com/open-telemetry/opentelemetry-python-contrib" [tool.hatch.version] diff --git a/instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/__init__.py b/util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/__init__.py similarity index 100% rename from instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/__init__.py rename to util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/__init__.py diff --git a/instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py b/util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py similarity index 96% rename from instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py rename to util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py index 211727b883..f87ce79b7c 100644 --- a/instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py +++ b/util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py @@ -12,5 +12,3 @@ # See the License for the specific language governing permissions and # limitations under the License. - -_instruments = () diff --git a/instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/version.py b/util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/version.py similarity index 100% rename from instrumentation-genai/opentelemetry-genai-utils/src/opentelemetry/genai/utils/version.py rename to util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/version.py diff --git a/instrumentation-genai/opentelemetry-genai-utils/tests/__init__.py b/util/opentelemetry-genai-utils/tests/__init__.py similarity index 100% rename from instrumentation-genai/opentelemetry-genai-utils/tests/__init__.py rename to util/opentelemetry-genai-utils/tests/__init__.py diff --git a/uv.lock b/uv.lock index f0d3c7d39c..934249465e 100644 --- a/uv.lock +++ b/uv.lock @@ -13,7 +13,6 @@ resolution-markers = [ members = [ "opentelemetry-exporter-prometheus-remote-write", "opentelemetry-exporter-richconsole", - "opentelemetry-genai-utils", "opentelemetry-instrumentation", "opentelemetry-instrumentation-aio-pika", "opentelemetry-instrumentation-aiohttp-client", @@ -1728,15 +1727,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, ] -[[package]] -name = "iniconfig" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, -] - [[package]] name = "iso8601" version = "2.1.0" @@ -2430,29 +2420,6 @@ requires-dist = [ { name = "rich", specifier = ">=10.0.0" }, ] -[[package]] -name = "opentelemetry-genai-utils" -source = { editable = "instrumentation-genai/opentelemetry-genai-utils" } -dependencies = [ - { name = "opentelemetry-api" }, - { name = "opentelemetry-instrumentation" }, - { name = "opentelemetry-semantic-conventions" }, -] - -[package.optional-dependencies] -test = [ - { name = "pytest" }, -] - -[package.metadata] -requires-dist = [ - { name = "opentelemetry-api", git = "https://github.com/open-telemetry/opentelemetry-python?subdirectory=opentelemetry-api&branch=main" }, - { name = "opentelemetry-instrumentation", editable = "opentelemetry-instrumentation" }, - { name = "opentelemetry-semantic-conventions", git = "https://github.com/open-telemetry/opentelemetry-python?subdirectory=opentelemetry-semantic-conventions&branch=main" }, - { name = "pytest", marker = "extra == 'test'", specifier = ">=7.0.0" }, -] -provides-extras = ["test"] - [[package]] name = "opentelemetry-instrumentation" source = { editable = "opentelemetry-instrumentation" } @@ -4143,15 +4110,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bd/30/2d4cf89035c22a89bf0e34dbc50fdc07c42c9bdc90fd972d495257ad2b6e/plaster_pastedeploy-1.0.1-py2.py3-none-any.whl", hash = "sha256:ad3550cc744648969ed3b810f33c9344f515ee8d8a8cec18e8f2c4a643c2181f", size = 7823, upload-time = "2022-11-07T01:23:03.23Z" }, ] -[[package]] -name = "pluggy" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, -] - [[package]] name = "prometheus-client" version = "0.22.0" @@ -4755,24 +4713,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/db/41/a2114b8dd2187ae007e022a2baabdc7937cc78211cefc0c01fc5452193af/pyramid-2.0.2-py3-none-any.whl", hash = "sha256:2e6585ac55c147f0a51bc00dadf72075b3bdd9a871b332ff9e5e04117ccd76fa", size = 247277, upload-time = "2023-08-25T06:33:20.883Z" }, ] -[[package]] -name = "pytest" -version = "8.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "iniconfig" }, - { name = "packaging" }, - { name = "pluggy" }, - { name = "pygments" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, -] - [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -5215,45 +5155,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload-time = "2025-04-02T08:25:07.678Z" }, ] -[[package]] -name = "tomli" -version = "2.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, - { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, - { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, - { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, - { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, - { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, - { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, - { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, - { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, - { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, - { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, - { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, - { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, - { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, - { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, - { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, - { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, - { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, - { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, - { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, - { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, - { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, - { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, - { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, - { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, - { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, - { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, - { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, - { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, - { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, - { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, -] - [[package]] name = "tornado" version = "6.5" From fb593cef7d9f77c440ac0a2f5e8a760b511cf541 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Fri, 8 Aug 2025 09:10:44 -0600 Subject: [PATCH 10/15] remove package file --- .../src/opentelemetry/genai/utils/package.py | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py diff --git a/util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py b/util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py deleted file mode 100644 index f87ce79b7c..0000000000 --- a/util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/package.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright The OpenTelemetry Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - From 801114a6aacfab4888638942db64d924bd23ea2b Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Wed, 13 Aug 2025 16:55:21 -0600 Subject: [PATCH 11/15] rename package to align with other util package --- RELEASING.md | 4 +-- eachdist.ini | 2 +- pyproject.toml | 2 ++ util/opentelemetry-genai-utils/README.rst | 0 .../CHANGELOG.md | 0 .../LICENSE | 0 util/opentelemetry-util-genai/README.rst | 25 +++++++++++++++++++ .../pyproject.toml | 6 ++--- .../src/opentelemetry/util/genai}/__init__.py | 0 .../src/opentelemetry/util/genai}/version.py | 0 .../tests/__init__.py | 0 11 files changed, 33 insertions(+), 6 deletions(-) delete mode 100644 util/opentelemetry-genai-utils/README.rst rename util/{opentelemetry-genai-utils => opentelemetry-util-genai}/CHANGELOG.md (100%) rename util/{opentelemetry-genai-utils => opentelemetry-util-genai}/LICENSE (100%) create mode 100644 util/opentelemetry-util-genai/README.rst rename util/{opentelemetry-genai-utils => opentelemetry-util-genai}/pyproject.toml (90%) rename util/{opentelemetry-genai-utils/src/opentelemetry/genai/utils => opentelemetry-util-genai/src/opentelemetry/util/genai}/__init__.py (100%) rename util/{opentelemetry-genai-utils/src/opentelemetry/genai/utils => opentelemetry-util-genai/src/opentelemetry/util/genai}/version.py (100%) rename util/{opentelemetry-genai-utils => opentelemetry-util-genai}/tests/__init__.py (100%) diff --git a/RELEASING.md b/RELEASING.md index 62c27c2683..053b235228 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -26,7 +26,7 @@ > - opentelemetry-instrumentation-google-genai > - opentelemetry-instrumentation-langchain > - opentelemetry-instrumentation-weaviate -> - opentelemetry-genai-utils +> - opentelemetry-util-genai > > These libraries are also excluded from the general release. @@ -91,7 +91,7 @@ The workflow will create a pull request that should be merged in order to procee > - opentelemetry-instrumentation-google-genai > - opentelemetry-instrumentation-langchain > - opentelemetry-instrumentation-weaviate -> - opentelemetry-genai-utils +> - opentelemetry-util-genai > > These libraries are also excluded from the general patch release. diff --git a/eachdist.ini b/eachdist.ini index d741ab41a1..52d1ef7fb1 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -56,7 +56,7 @@ packages= opentelemetry-instrumentation-test opentelemetry-instrumentation-langchain opentelemetry-instrumentation-weaviate - opentelemetry-genai-utils + opentelemetry-util-genai [lintroots] extraroots=examples/*,scripts/ diff --git a/pyproject.toml b/pyproject.toml index 5f0887e406..6397c0f4da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -202,6 +202,7 @@ include = [ "instrumentation-genai/opentelemetry-instrumentation-vertexai", "instrumentation-genai/opentelemetry-instrumentation-langchain", "instrumentation-genai/opentelemetry-instrumentation-weaviate", + "util/opentelemetry-util-genai", ] # We should also add type hints to the test suite - It helps on finding bugs. # We are excluding for now because it's easier, and more important to add to the instrumentation packages. @@ -215,4 +216,5 @@ exclude = [ "instrumentation-genai/opentelemetry-instrumentation-langchain/examples/**/*.py", "instrumentation-genai/opentelemetry-instrumentation-weaviate/tests/**/*.py", "instrumentation-genai/opentelemetry-instrumentation-weaviate/examples/**/*.py", + "util/opentelemetry-util-genai/tests/**/*.py", ] diff --git a/util/opentelemetry-genai-utils/README.rst b/util/opentelemetry-genai-utils/README.rst deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/util/opentelemetry-genai-utils/CHANGELOG.md b/util/opentelemetry-util-genai/CHANGELOG.md similarity index 100% rename from util/opentelemetry-genai-utils/CHANGELOG.md rename to util/opentelemetry-util-genai/CHANGELOG.md diff --git a/util/opentelemetry-genai-utils/LICENSE b/util/opentelemetry-util-genai/LICENSE similarity index 100% rename from util/opentelemetry-genai-utils/LICENSE rename to util/opentelemetry-util-genai/LICENSE diff --git a/util/opentelemetry-util-genai/README.rst b/util/opentelemetry-util-genai/README.rst new file mode 100644 index 0000000000..2c69f3a871 --- /dev/null +++ b/util/opentelemetry-util-genai/README.rst @@ -0,0 +1,25 @@ +OpenTelemetry Util for GenAI +======================= + + +The GenAI Utils package will include boilerplate and helpers to standardize instrumentation for Generative AI. +This package will provide APIs and decorators to minimize the work needed to instrument genai libraries, +while providing standardization for generating both types of otel, "spans and metrics" and "spans, metrics and events" + +Installation +------------ + +:: + + pip install opentelemetry-util-genai + + +Design Document +--------------- + +The design document for the OpenTelemetry GenAI Utils can be found at: Design Document + +References +---------- + +* `OpenTelemetry Project `_ diff --git a/util/opentelemetry-genai-utils/pyproject.toml b/util/opentelemetry-util-genai/pyproject.toml similarity index 90% rename from util/opentelemetry-genai-utils/pyproject.toml rename to util/opentelemetry-util-genai/pyproject.toml index fc4a448be3..280da37d58 100644 --- a/util/opentelemetry-genai-utils/pyproject.toml +++ b/util/opentelemetry-util-genai/pyproject.toml @@ -3,7 +3,7 @@ requires = ["hatchling"] build-backend = "hatchling.build" [project] -name = "opentelemetry-genai-utils" +name = "opentelemetry-util-genai" dynamic = ["version"] description = "OpenTelemetry GenAI Utils" readme = "README.rst" @@ -36,11 +36,11 @@ test = [ ] [project.urls] -Homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/util/opentelemetry-genai-utils" +Homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/util/opentelemetry-util-genai" Repository = "https://github.com/open-telemetry/opentelemetry-python-contrib" [tool.hatch.version] -path = "src/opentelemetry/genai/utils/version.py" +path = "src/opentelemetry/util/genai/version.py" [tool.hatch.build.targets.sdist] include = [ diff --git a/util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/__init__.py b/util/opentelemetry-util-genai/src/opentelemetry/util/genai/__init__.py similarity index 100% rename from util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/__init__.py rename to util/opentelemetry-util-genai/src/opentelemetry/util/genai/__init__.py diff --git a/util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/version.py b/util/opentelemetry-util-genai/src/opentelemetry/util/genai/version.py similarity index 100% rename from util/opentelemetry-genai-utils/src/opentelemetry/genai/utils/version.py rename to util/opentelemetry-util-genai/src/opentelemetry/util/genai/version.py diff --git a/util/opentelemetry-genai-utils/tests/__init__.py b/util/opentelemetry-util-genai/tests/__init__.py similarity index 100% rename from util/opentelemetry-genai-utils/tests/__init__.py rename to util/opentelemetry-util-genai/tests/__init__.py From 3ffffb337a489add94ed70eaa0cb348369b28e51 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Wed, 13 Aug 2025 17:02:36 -0600 Subject: [PATCH 12/15] add tox boilerplate --- tox.ini | 15 +++++++++++++++ .../test-requirements.txt | 1 + 2 files changed, 16 insertions(+) create mode 100644 util/opentelemetry-util-genai/test-requirements.txt diff --git a/tox.ini b/tox.ini index b37982567a..379735d408 100644 --- a/tox.ini +++ b/tox.ini @@ -356,6 +356,11 @@ envlist = pypy3-test-util-http lint-util-http + ; opentelemetry-util-genai + py3{9,10,11,12,13}-test-util-genai + pypy3-test-util-genai + lint-util-genai + ; opentelemetry-propagator-aws-xray py3{9,10,11,12,13}-test-propagator-aws-xray-{0,1} pypy3-test-propagator-aws-xray-{0,1} @@ -715,6 +720,11 @@ deps = util-http: {[testenv]test_deps} util-http: -r {toxinidir}/util/opentelemetry-util-http/test-requirements.txt util-http: {toxinidir}/util/opentelemetry-util-http + + util-genai: {[testenv]test_deps} + util-genai: -r {toxinidir}/util/opentelemetry-util-genai/test-requirements.txt + util-genai: {toxinidir}/util/opentelemetry-util-genai + ; FIXME: add coverage testing allowlist_externals = sh @@ -909,6 +919,9 @@ commands = test-util-http: pytest {toxinidir}/util/opentelemetry-util-http/tests {posargs} lint-util-http: sh -c "cd util && pylint --rcfile ../.pylintrc opentelemetry-util-http" + test-util-genai: pytest {toxinidir}/util/opentelemetry-util-genai/tests {posargs} + lint-util-genai: sh -c "cd util && pylint --rcfile ../.pylintrc opentelemetry-util-genai" + test-sdk-extension-aws: pytest {toxinidir}/sdk-extension/opentelemetry-sdk-extension-aws/tests {posargs} lint-sdk-extension-aws: sh -c "cd sdk-extension && pylint --rcfile ../.pylintrc opentelemetry-sdk-extension-aws" benchmark-sdk-extension-aws: pytest {toxinidir}/sdk-extension/opentelemetry-sdk-extension-aws/benchmarks {posargs} --benchmark-json=sdk-extension-aws-benchmark.json @@ -945,6 +958,7 @@ deps = {[testenv]test_deps} {toxinidir}/opentelemetry-instrumentation {toxinidir}/util/opentelemetry-util-http + {toxinidir}/util/opentelemetry-util-genai changedir = docs @@ -1046,6 +1060,7 @@ deps = {[testenv]test_deps} {toxinidir}/opentelemetry-instrumentation {toxinidir}/util/opentelemetry-util-http + {toxinidir}/util/opentelemetry-util-genai {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-vertexai[instruments] {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-google-genai[instruments] {toxinidir}/instrumentation/opentelemetry-instrumentation-aiokafka[instruments] diff --git a/util/opentelemetry-util-genai/test-requirements.txt b/util/opentelemetry-util-genai/test-requirements.txt new file mode 100644 index 0000000000..ec47fd9191 --- /dev/null +++ b/util/opentelemetry-util-genai/test-requirements.txt @@ -0,0 +1 @@ +-e opentelemetry-instrumentation \ No newline at end of file From a6460b3ad31883ed1bda42d92baa8e61f0cf07c8 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Wed, 13 Aug 2025 17:58:27 -0600 Subject: [PATCH 13/15] tox boilerplate --- .github/workflows/core_contrib_test_0.yml | 30 +++ .github/workflows/lint_0.yml | 19 ++ .github/workflows/test_1.yml | 228 +++++++++--------- .github/workflows/test_2.yml | 114 +++++++++ .../test-requirements.txt | 1 + .../tests/test_version.py | 29 +++ 6 files changed, 307 insertions(+), 114 deletions(-) create mode 100644 util/opentelemetry-util-genai/tests/test_version.py diff --git a/.github/workflows/core_contrib_test_0.yml b/.github/workflows/core_contrib_test_0.yml index ebc2c25ff2..33320b5ef5 100644 --- a/.github/workflows/core_contrib_test_0.yml +++ b/.github/workflows/core_contrib_test_0.yml @@ -2453,6 +2453,36 @@ jobs: - name: Run tests run: tox -e py39-test-util-http -- -ra + py39-test-util-genai: + name: util-genai + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout contrib repo @ SHA - ${{ env.CONTRIB_REPO_SHA }} + uses: actions/checkout@v4 + with: + repository: open-telemetry/opentelemetry-python-contrib + ref: ${{ env.CONTRIB_REPO_SHA }} + + - name: Checkout core repo @ SHA - ${{ env.CORE_REPO_SHA }} + uses: actions/checkout@v4 + with: + repository: open-telemetry/opentelemetry-python + ref: ${{ env.CORE_REPO_SHA }} + path: opentelemetry-python + + - name: Set up Python 3.9 + uses: actions/setup-python@v5 + with: + python-version: "3.9" + architecture: "x64" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py39-test-util-genai -- -ra + py39-test-propagator-aws-xray-0: name: propagator-aws-xray-0 runs-on: ubuntu-latest diff --git a/.github/workflows/lint_0.yml b/.github/workflows/lint_0.yml index 8583425708..1e91d4a4cf 100644 --- a/.github/workflows/lint_0.yml +++ b/.github/workflows/lint_0.yml @@ -1076,6 +1076,25 @@ jobs: - name: Run tests run: tox -e lint-util-http + lint-util-genai: + name: util-genai + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.13 + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e lint-util-genai + lint-propagator-aws-xray: name: propagator-aws-xray runs-on: ubuntu-latest diff --git a/.github/workflows/test_1.yml b/.github/workflows/test_1.yml index edf4be2e3e..0787a3c379 100644 --- a/.github/workflows/test_1.yml +++ b/.github/workflows/test_1.yml @@ -3964,6 +3964,120 @@ jobs: - name: Run tests run: tox -e pypy3-test-util-http -- -ra + py39-test-util-genai_ubuntu-latest: + name: util-genai 3.9 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.9 + uses: actions/setup-python@v5 + with: + python-version: "3.9" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py39-test-util-genai -- -ra + + py310-test-util-genai_ubuntu-latest: + name: util-genai 3.10 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.10 + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py310-test-util-genai -- -ra + + py311-test-util-genai_ubuntu-latest: + name: util-genai 3.11 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py311-test-util-genai -- -ra + + py312-test-util-genai_ubuntu-latest: + name: util-genai 3.12 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py312-test-util-genai -- -ra + + py313-test-util-genai_ubuntu-latest: + name: util-genai 3.13 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.13 + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py313-test-util-genai -- -ra + + pypy3-test-util-genai_ubuntu-latest: + name: util-genai pypy-3.9 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python pypy-3.9 + uses: actions/setup-python@v5 + with: + python-version: "pypy-3.9" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e pypy3-test-util-genai -- -ra + py39-test-propagator-aws-xray-0_ubuntu-latest: name: propagator-aws-xray-0 3.9 Ubuntu runs-on: ubuntu-latest @@ -4666,117 +4780,3 @@ jobs: - name: Run tests run: tox -e py310-test-instrumentation-aio-pika-2 -- -ra - - py310-test-instrumentation-aio-pika-3_ubuntu-latest: - name: instrumentation-aio-pika-3 3.10 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.10 - uses: actions/setup-python@v5 - with: - python-version: "3.10" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py310-test-instrumentation-aio-pika-3 -- -ra - - py311-test-instrumentation-aio-pika-0_ubuntu-latest: - name: instrumentation-aio-pika-0 3.11 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py311-test-instrumentation-aio-pika-0 -- -ra - - py311-test-instrumentation-aio-pika-1_ubuntu-latest: - name: instrumentation-aio-pika-1 3.11 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py311-test-instrumentation-aio-pika-1 -- -ra - - py311-test-instrumentation-aio-pika-2_ubuntu-latest: - name: instrumentation-aio-pika-2 3.11 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py311-test-instrumentation-aio-pika-2 -- -ra - - py311-test-instrumentation-aio-pika-3_ubuntu-latest: - name: instrumentation-aio-pika-3 3.11 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py311-test-instrumentation-aio-pika-3 -- -ra - - py312-test-instrumentation-aio-pika-0_ubuntu-latest: - name: instrumentation-aio-pika-0 3.12 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py312-test-instrumentation-aio-pika-0 -- -ra diff --git a/.github/workflows/test_2.yml b/.github/workflows/test_2.yml index 56d9c184d1..4270308bcf 100644 --- a/.github/workflows/test_2.yml +++ b/.github/workflows/test_2.yml @@ -31,6 +31,120 @@ env: jobs: + py310-test-instrumentation-aio-pika-3_ubuntu-latest: + name: instrumentation-aio-pika-3 3.10 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.10 + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py310-test-instrumentation-aio-pika-3 -- -ra + + py311-test-instrumentation-aio-pika-0_ubuntu-latest: + name: instrumentation-aio-pika-0 3.11 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py311-test-instrumentation-aio-pika-0 -- -ra + + py311-test-instrumentation-aio-pika-1_ubuntu-latest: + name: instrumentation-aio-pika-1 3.11 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py311-test-instrumentation-aio-pika-1 -- -ra + + py311-test-instrumentation-aio-pika-2_ubuntu-latest: + name: instrumentation-aio-pika-2 3.11 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py311-test-instrumentation-aio-pika-2 -- -ra + + py311-test-instrumentation-aio-pika-3_ubuntu-latest: + name: instrumentation-aio-pika-3 3.11 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py311-test-instrumentation-aio-pika-3 -- -ra + + py312-test-instrumentation-aio-pika-0_ubuntu-latest: + name: instrumentation-aio-pika-0 3.12 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py312-test-instrumentation-aio-pika-0 -- -ra + py312-test-instrumentation-aio-pika-1_ubuntu-latest: name: instrumentation-aio-pika-1 3.12 Ubuntu runs-on: ubuntu-latest diff --git a/util/opentelemetry-util-genai/test-requirements.txt b/util/opentelemetry-util-genai/test-requirements.txt index ec47fd9191..1cea41e870 100644 --- a/util/opentelemetry-util-genai/test-requirements.txt +++ b/util/opentelemetry-util-genai/test-requirements.txt @@ -1 +1,2 @@ +pytest>=8 -e opentelemetry-instrumentation \ No newline at end of file diff --git a/util/opentelemetry-util-genai/tests/test_version.py b/util/opentelemetry-util-genai/tests/test_version.py new file mode 100644 index 0000000000..eeeca17cee --- /dev/null +++ b/util/opentelemetry-util-genai/tests/test_version.py @@ -0,0 +1,29 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +from opentelemetry.util.genai.version import __version__ + + +class TestVersion(unittest.TestCase): + def test_version_exists(self): + """Test that version is defined and is a string.""" + self.assertIsInstance(__version__, str) + self.assertTrue(len(__version__) > 0) + + def test_version_format(self): + """Test that version follows expected format.""" + # Should be in format like "0.1b0.dev" or similar + self.assertRegex(__version__, r"^\d+\.\d+.*") From 00a7d10f52270a21a924fbd207580a27c3fba5d0 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Wed, 13 Aug 2025 18:01:09 -0600 Subject: [PATCH 14/15] Fix pytest version --- util/opentelemetry-util-genai/test-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/opentelemetry-util-genai/test-requirements.txt b/util/opentelemetry-util-genai/test-requirements.txt index 1cea41e870..91d59f42f5 100644 --- a/util/opentelemetry-util-genai/test-requirements.txt +++ b/util/opentelemetry-util-genai/test-requirements.txt @@ -1,2 +1,2 @@ -pytest>=8 +pytest==7.4.4 -e opentelemetry-instrumentation \ No newline at end of file From bd29125b744378c4f892609de79e2a4c68034654 Mon Sep 17 00:00:00 2001 From: Keith Decker Date: Thu, 14 Aug 2025 11:25:18 -0600 Subject: [PATCH 15/15] Corrected RST Link --- util/opentelemetry-util-genai/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/opentelemetry-util-genai/README.rst b/util/opentelemetry-util-genai/README.rst index 2c69f3a871..711ebf97bc 100644 --- a/util/opentelemetry-util-genai/README.rst +++ b/util/opentelemetry-util-genai/README.rst @@ -17,7 +17,7 @@ Installation Design Document --------------- -The design document for the OpenTelemetry GenAI Utils can be found at: Design Document +The design document for the OpenTelemetry GenAI Utils can be found at: `Design Document `_ References ----------