From 6b6a952214733eaa7e692bb7bdabde01136a6aff Mon Sep 17 00:00:00 2001 From: Manasjyoti Sharma Date: Tue, 2 Jun 2026 21:49:34 +0530 Subject: [PATCH] chore(fr): enforce modification notices and guard bedrock optional deps --- .github/workflows/fr-pr.yaml | 21 +- .../instrumentation/alephalpha/__init__.py | 4 + .../pyproject.toml | 4 + .../instrumentation/anthropic/__init__.py | 4 + .../instrumentation/anthropic/streaming.py | 4 + .../instrumentation/anthropic/utils.py | 4 + .../pyproject.toml | 4 + .../tests/conftest.py | 4 + .../tests/utils.py | 4 + .../instrumentation/bedrock/__init__.py | 4 + .../instrumentation/bedrock/guardrail.py | 4 + .../instrumentation/bedrock/span_utils.py | 10 +- .../bedrock/streaming_wrapper.py | 4 + .../pyproject.toml | 4 + .../test_bedrock_guardrails_metrics.py | 4 + .../tests/metrics/test_bedrock_metrics.py | 4 + .../tests/test_optional_dependencies.py | 27 +++ .../tests/traces/test_anthropic.py | 4 + .../instrumentation/cohere/__init__.py | 4 + .../instrumentation/cohere/streaming.py | 4 + .../pyproject.toml | 4 + .../google_generativeai/__init__.py | 4 + .../google_generativeai/config.py | 4 + .../google_generativeai/span_utils.py | 4 + .../pyproject.toml | 4 + .../tests/conftest.py | 4 + .../tests/test_generate_content.py | 4 + .../instrumentation/groq/__init__.py | 4 + .../pyproject.toml | 4 + .../pyproject.toml | 4 + .../tests/test_query.py | 4 + .../instrumentation/langchain/__init__.py | 4 + .../langchain/callback_handler.py | 4 + .../instrumentation/langchain/span_utils.py | 4 + .../pyproject.toml | 4 + .../tests/conftest.py | 4 + .../instrumentation/llamaindex/__init__.py | 4 + .../llamaindex/dispatcher_wrapper.py | 4 + .../instrumentation/llamaindex/span_utils.py | 4 + .../pyproject.toml | 4 + .../instrumentation/mistralai/__init__.py | 4 + .../pyproject.toml | 4 + .../instrumentation/ollama/__init__.py | 4 + .../pyproject.toml | 4 + .../pyproject.toml | 4 + .../instrumentation/openai/shared/__init__.py | 4 + .../openai/shared/chat_wrappers.py | 4 + .../openai/shared/completion_wrappers.py | 4 + .../instrumentation/openai/shared/config.py | 4 + .../instrumentation/openai/utils.py | 4 + .../instrumentation/openai/v0/__init__.py | 4 + .../instrumentation/openai/v1/__init__.py | 4 + .../openai/v1/assistant_wrappers.py | 4 + .../openai/v1/event_handler_wrapper.py | 4 + .../openai/v1/realtime_wrappers.py | 4 + .../openai/v1/responses_wrappers.py | 4 + .../pyproject.toml | 4 + .../tests/conftest.py | 4 + .../tests/metrics/test_openai_metrics.py | 4 + .../tests/traces/test_azure.py | 4 + .../tests/traces/test_chat.py | 4 + .../tests/traces/test_chat_parse.py | 4 + .../tests/traces/test_completions.py | 4 + .../tests/traces/test_embeddings.py | 4 + .../tests/traces/test_responses.py | 4 + .../tests/traces/utils.py | 4 + .../instrumentation/replicate/__init__.py | 4 + .../pyproject.toml | 4 + .../instrumentation/sagemaker/__init__.py | 4 + .../pyproject.toml | 4 + .../instrumentation/together/__init__.py | 4 + .../pyproject.toml | 4 + .../text_generation_pipeline_wrapper.py | 4 + .../pyproject.toml | 4 + .../instrumentation/vertexai/__init__.py | 4 + .../instrumentation/vertexai/config.py | 4 + .../pyproject.toml | 4 + .../instrumentation/watsonx/__init__.py | 4 + .../pyproject.toml | 4 + .../instrumentation/writer/__init__.py | 4 + .../pyproject.toml | 4 + packages/sample-app/pyproject.toml | 4 + packages/traceloop-sdk/pyproject.toml | 4 + packages/traceloop-sdk/tests/conftest.py | 4 + .../tests/test_association_properties.py | 4 + .../traceloop-sdk/tests/test_associations.py | 4 + .../tests/test_privacy_no_prompts.py | 4 + .../tests/test_prompt_management.py | 4 + .../tests/test_sdk_initialization.py | 4 + .../traceloop-sdk/tests/test_workflows.py | 4 + .../traceloop/sdk/instruments.py | 4 + .../traceloop/sdk/logging/logging.py | 4 + .../traceloop/sdk/metrics/metrics.py | 4 + .../traceloop/sdk/tracing/tracing.py | 23 +- scripts/apply-fr-modification-notices.py | 214 ++++++++++++++++++ scripts/test-apply-fr-modification-notices.py | 138 +++++++++++ 96 files changed, 778 insertions(+), 15 deletions(-) create mode 100644 packages/opentelemetry-instrumentation-bedrock/tests/test_optional_dependencies.py create mode 100755 scripts/apply-fr-modification-notices.py create mode 100644 scripts/test-apply-fr-modification-notices.py diff --git a/.github/workflows/fr-pr.yaml b/.github/workflows/fr-pr.yaml index 9d1dbe7369..aec75d2964 100644 --- a/.github/workflows/fr-pr.yaml +++ b/.github/workflows/fr-pr.yaml @@ -41,8 +41,25 @@ jobs: echo "No hardcoded secrets or credentials detected." - fr-tests: + fr-modification-notices: needs: secret-scan + name: FR Modification Notice Check + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ github.event.pull_request.head.sha }} + + - name: Run notice script unit tests + run: python3 ./scripts/test-apply-fr-modification-notices.py + + - name: Check modified-file notices + run: python3 ./scripts/apply-fr-modification-notices.py --check --base-ref "${{ github.base_ref }}" + + fr-tests: + needs: [secret-scan, fr-modification-notices] name: FR Tests (py${{ matrix.python-version }}) runs-on: ubuntu-latest timeout-minutes: 45 @@ -80,7 +97,7 @@ jobs: if-no-files-found: ignore non-fr-tests: - needs: secret-scan + needs: [secret-scan, fr-modification-notices] name: Non-FR Tests (py${{ matrix.python-version }}) runs-on: ubuntu-latest timeout-minutes: 60 diff --git a/packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/__init__.py b/packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/__init__.py index 32f560e03f..bdcb779ab6 100644 --- a/packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/__init__.py +++ b/packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Aleph Alpha instrumentation""" import logging diff --git a/packages/opentelemetry-instrumentation-alephalpha/pyproject.toml b/packages/opentelemetry-instrumentation-alephalpha/pyproject.toml index 352b94f64a..15f4371173 100644 --- a/packages/opentelemetry-instrumentation-alephalpha/pyproject.toml +++ b/packages/opentelemetry-instrumentation-alephalpha/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-alephalpha" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py b/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py index e1c77e9f63..6269354785 100644 --- a/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py +++ b/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Anthropic instrumentation""" import asyncio # FR: async safety diff --git a/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py b/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py index 045e589b0f..9aba00bed1 100644 --- a/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py +++ b/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import logging import time from typing import Optional diff --git a/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/utils.py b/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/utils.py index 81b1cb3f8c..eae4e6dc36 100644 --- a/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/utils.py +++ b/packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/utils.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import asyncio import json import logging diff --git a/packages/opentelemetry-instrumentation-anthropic/pyproject.toml b/packages/opentelemetry-instrumentation-anthropic/pyproject.toml index 9be0f51598..895a83c673 100644 --- a/packages/opentelemetry-instrumentation-anthropic/pyproject.toml +++ b/packages/opentelemetry-instrumentation-anthropic/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-anthropic" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-anthropic/tests/conftest.py b/packages/opentelemetry-instrumentation-anthropic/tests/conftest.py index e9a13450e2..b08e58a8a3 100644 --- a/packages/opentelemetry-instrumentation-anthropic/tests/conftest.py +++ b/packages/opentelemetry-instrumentation-anthropic/tests/conftest.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """Unit tests configuration module.""" import os diff --git a/packages/opentelemetry-instrumentation-anthropic/tests/utils.py b/packages/opentelemetry-instrumentation-anthropic/tests/utils.py index 1d53496fe4..d3c8620035 100644 --- a/packages/opentelemetry-instrumentation-anthropic/tests/utils.py +++ b/packages/opentelemetry-instrumentation-anthropic/tests/utils.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from opentelemetry.semconv._incubating.attributes import ( gen_ai_attributes as GenAIAttributes, ) diff --git a/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py b/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py index 3a60d38297..0468a09641 100644 --- a/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py +++ b/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Bedrock instrumentation""" import json diff --git a/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/guardrail.py b/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/guardrail.py index 1f566561b1..d5df6c359e 100644 --- a/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/guardrail.py +++ b/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/guardrail.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from enum import Enum from opentelemetry.semconv._incubating.attributes import ( gen_ai_attributes as GenAIAttributes, diff --git a/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/span_utils.py b/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/span_utils.py index fd029941be..6d3abedf4e 100644 --- a/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/span_utils.py +++ b/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/span_utils.py @@ -1,7 +1,11 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json +import logging import time -import anthropic from opentelemetry.instrumentation.bedrock.config import Config from opentelemetry.instrumentation.bedrock.utils import should_send_prompts from opentelemetry.semconv._incubating.attributes import ( @@ -325,9 +329,10 @@ def _count_anthropic_tokens(messages: list[str]): # Lazy initialization of the Anthropic client if anthropic_client is None: try: + import anthropic + anthropic_client = anthropic.Anthropic() except Exception as e: - import logging logger = logging.getLogger(__name__) logger.debug(f"Failed to initialize Anthropic client for token counting: {e}") # Return 0 if we can't create the client @@ -338,7 +343,6 @@ def _count_anthropic_tokens(messages: list[str]): for message in messages: count += anthropic_client.count_tokens(text=message) except Exception as e: - import logging logger = logging.getLogger(__name__) logger.debug(f"Failed to count tokens with Anthropic client: {e}") return 0 diff --git a/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/streaming_wrapper.py b/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/streaming_wrapper.py index 154b2af202..bf90c47681 100644 --- a/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/streaming_wrapper.py +++ b/packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/streaming_wrapper.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json from opentelemetry.instrumentation.bedrock.utils import ( diff --git a/packages/opentelemetry-instrumentation-bedrock/pyproject.toml b/packages/opentelemetry-instrumentation-bedrock/pyproject.toml index 87db86d388..6018298dc1 100644 --- a/packages/opentelemetry-instrumentation-bedrock/pyproject.toml +++ b/packages/opentelemetry-instrumentation-bedrock/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-bedrock" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_guardrails_metrics.py b/packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_guardrails_metrics.py index 3e94b08be7..874f6b9e37 100644 --- a/packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_guardrails_metrics.py +++ b/packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_guardrails_metrics.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json import pytest diff --git a/packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_metrics.py b/packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_metrics.py index 5cec4f25c7..1080a505b5 100644 --- a/packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_metrics.py +++ b/packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_metrics.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json import pytest diff --git a/packages/opentelemetry-instrumentation-bedrock/tests/test_optional_dependencies.py b/packages/opentelemetry-instrumentation-bedrock/tests/test_optional_dependencies.py new file mode 100644 index 0000000000..92dcc66f72 --- /dev/null +++ b/packages/opentelemetry-instrumentation-bedrock/tests/test_optional_dependencies.py @@ -0,0 +1,27 @@ +"""Tests for optional dependency behavior.""" + +from __future__ import annotations + +import builtins +import importlib +import sys + + +def test_bedrock_span_utils_import_without_anthropic(monkeypatch): + """Bedrock instrumentation import should not require the Anthropic package.""" + module_name = "opentelemetry.instrumentation.bedrock.span_utils" + sys.modules.pop(module_name, None) + sys.modules.pop("anthropic", None) + + original_import = builtins.__import__ + + def import_without_anthropic(name, *args, **kwargs): + if name == "anthropic": + raise ModuleNotFoundError("No module named 'anthropic'") + return original_import(name, *args, **kwargs) + + monkeypatch.setattr(builtins, "__import__", import_without_anthropic) + + module = importlib.import_module(module_name) + + assert module is not None diff --git a/packages/opentelemetry-instrumentation-bedrock/tests/traces/test_anthropic.py b/packages/opentelemetry-instrumentation-bedrock/tests/traces/test_anthropic.py index e0d2316000..795ccbc96e 100644 --- a/packages/opentelemetry-instrumentation-bedrock/tests/traces/test_anthropic.py +++ b/packages/opentelemetry-instrumentation-bedrock/tests/traces/test_anthropic.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json import pytest diff --git a/packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/__init__.py b/packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/__init__.py index cdd7b239c0..2e345a484a 100644 --- a/packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/__init__.py +++ b/packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Cohere instrumentation""" import asyncio # FR: async safety diff --git a/packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/streaming.py b/packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/streaming.py index dba57201a2..74ff309552 100644 --- a/packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/streaming.py +++ b/packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/streaming.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import copy # FR: needed for deepcopy fix from opentelemetry.instrumentation.cohere.event_emitter import emit_response_events diff --git a/packages/opentelemetry-instrumentation-cohere/pyproject.toml b/packages/opentelemetry-instrumentation-cohere/pyproject.toml index 801889eb00..bb94499036 100644 --- a/packages/opentelemetry-instrumentation-cohere/pyproject.toml +++ b/packages/opentelemetry-instrumentation-cohere/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-cohere" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/__init__.py b/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/__init__.py index 21bff41a23..c6b84e7814 100644 --- a/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/__init__.py +++ b/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Google Generative AI API instrumentation""" import asyncio # FR: async safety diff --git a/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/config.py b/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/config.py index f2bdc056f5..986f97b572 100644 --- a/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/config.py +++ b/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/config.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from typing import Callable, Optional diff --git a/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/span_utils.py b/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/span_utils.py index e904035eaf..f7bcd79527 100644 --- a/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/span_utils.py +++ b/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/span_utils.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json import base64 import logging diff --git a/packages/opentelemetry-instrumentation-google-generativeai/pyproject.toml b/packages/opentelemetry-instrumentation-google-generativeai/pyproject.toml index b4aee66e27..7676dbc74b 100644 --- a/packages/opentelemetry-instrumentation-google-generativeai/pyproject.toml +++ b/packages/opentelemetry-instrumentation-google-generativeai/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-google-generativeai" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-google-generativeai/tests/conftest.py b/packages/opentelemetry-instrumentation-google-generativeai/tests/conftest.py index 0e3fccf745..9cd8b8e02f 100644 --- a/packages/opentelemetry-instrumentation-google-generativeai/tests/conftest.py +++ b/packages/opentelemetry-instrumentation-google-generativeai/tests/conftest.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """Unit tests configuration module.""" import os diff --git a/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py b/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py index 4801c29d56..aaca006e3a 100644 --- a/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py +++ b/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import pytest from opentelemetry.trace import StatusCode, SpanKind diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py index 57033d7b20..d571112f75 100644 --- a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Groq instrumentation""" import asyncio # FR: async safety diff --git a/packages/opentelemetry-instrumentation-groq/pyproject.toml b/packages/opentelemetry-instrumentation-groq/pyproject.toml index 23ff768473..8c113b01db 100644 --- a/packages/opentelemetry-instrumentation-groq/pyproject.toml +++ b/packages/opentelemetry-instrumentation-groq/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-groq" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-lancedb/pyproject.toml b/packages/opentelemetry-instrumentation-lancedb/pyproject.toml index de62634556..fc5e909d5e 100644 --- a/packages/opentelemetry-instrumentation-lancedb/pyproject.toml +++ b/packages/opentelemetry-instrumentation-lancedb/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-lancedb" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-lancedb/tests/test_query.py b/packages/opentelemetry-instrumentation-lancedb/tests/test_query.py index 4a2d95a6dd..611cf2262a 100644 --- a/packages/opentelemetry-instrumentation-lancedb/tests/test_query.py +++ b/packages/opentelemetry-instrumentation-lancedb/tests/test_query.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import lancedb import pytest from opentelemetry.semconv_ai import SpanAttributes diff --git a/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py b/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py index 18a496136a..d5b2050340 100644 --- a/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py +++ b/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Langchain instrumentation""" import inspect diff --git a/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py b/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py index 880394b3fc..381c278780 100644 --- a/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py +++ b/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json import time from typing import Any, Dict, List, Optional, Type, Union diff --git a/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py b/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py index edfd7643fd..4198c974dd 100644 --- a/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py +++ b/packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json import time from dataclasses import dataclass, field diff --git a/packages/opentelemetry-instrumentation-langchain/pyproject.toml b/packages/opentelemetry-instrumentation-langchain/pyproject.toml index f9c39c1ad8..1bfd35642e 100644 --- a/packages/opentelemetry-instrumentation-langchain/pyproject.toml +++ b/packages/opentelemetry-instrumentation-langchain/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-langchain" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-langchain/tests/conftest.py b/packages/opentelemetry-instrumentation-langchain/tests/conftest.py index ca4fc44b18..e8e793089d 100644 --- a/packages/opentelemetry-instrumentation-langchain/tests/conftest.py +++ b/packages/opentelemetry-instrumentation-langchain/tests/conftest.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """Unit tests configuration module.""" import os diff --git a/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py b/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py index d4f6b1345e..44430d5f5d 100644 --- a/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py +++ b/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry LlamaIndex instrumentation""" import logging diff --git a/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/dispatcher_wrapper.py b/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/dispatcher_wrapper.py index e21bd81c66..4d0ec24146 100644 --- a/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/dispatcher_wrapper.py +++ b/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/dispatcher_wrapper.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import inspect import json import re diff --git a/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/span_utils.py b/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/span_utils.py index 329f86db05..0092ab59b2 100644 --- a/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/span_utils.py +++ b/packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/span_utils.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from llama_index.core.base.llms.types import MessageRole from opentelemetry.instrumentation.llamaindex.utils import ( dont_throw, diff --git a/packages/opentelemetry-instrumentation-llamaindex/pyproject.toml b/packages/opentelemetry-instrumentation-llamaindex/pyproject.toml index 6141d6de9b..b9e3711c3e 100644 --- a/packages/opentelemetry-instrumentation-llamaindex/pyproject.toml +++ b/packages/opentelemetry-instrumentation-llamaindex/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-llamaindex" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-mistralai/opentelemetry/instrumentation/mistralai/__init__.py b/packages/opentelemetry-instrumentation-mistralai/opentelemetry/instrumentation/mistralai/__init__.py index 745970b5e6..029fac1f13 100644 --- a/packages/opentelemetry-instrumentation-mistralai/opentelemetry/instrumentation/mistralai/__init__.py +++ b/packages/opentelemetry-instrumentation-mistralai/opentelemetry/instrumentation/mistralai/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Mistral AI instrumentation""" import asyncio # FR: async safety diff --git a/packages/opentelemetry-instrumentation-mistralai/pyproject.toml b/packages/opentelemetry-instrumentation-mistralai/pyproject.toml index e845d33f8a..691403cc81 100644 --- a/packages/opentelemetry-instrumentation-mistralai/pyproject.toml +++ b/packages/opentelemetry-instrumentation-mistralai/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-mistralai" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-ollama/opentelemetry/instrumentation/ollama/__init__.py b/packages/opentelemetry-instrumentation-ollama/opentelemetry/instrumentation/ollama/__init__.py index 445ab104e1..e05b2b5034 100644 --- a/packages/opentelemetry-instrumentation-ollama/opentelemetry/instrumentation/ollama/__init__.py +++ b/packages/opentelemetry-instrumentation-ollama/opentelemetry/instrumentation/ollama/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Ollama instrumentation""" import asyncio # FR: async safety diff --git a/packages/opentelemetry-instrumentation-ollama/pyproject.toml b/packages/opentelemetry-instrumentation-ollama/pyproject.toml index 25230ad1ab..c8e64b40d1 100644 --- a/packages/opentelemetry-instrumentation-ollama/pyproject.toml +++ b/packages/opentelemetry-instrumentation-ollama/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-ollama" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-openai-agents/pyproject.toml b/packages/opentelemetry-instrumentation-openai-agents/pyproject.toml index f08079ad91..bf30e4b4c8 100644 --- a/packages/opentelemetry-instrumentation-openai-agents/pyproject.toml +++ b/packages/opentelemetry-instrumentation-openai-agents/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-openai-agents" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/__init__.py b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/__init__.py index bfccd8b35f..71aaec8ed1 100644 --- a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/__init__.py +++ b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json import logging import types diff --git a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py index 468d1b31a3..6cd8cc88d6 100644 --- a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py +++ b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import asyncio # FR: async safety import copy import json diff --git a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/completion_wrappers.py b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/completion_wrappers.py index 74c683d977..4c682b4030 100644 --- a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/completion_wrappers.py +++ b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/completion_wrappers.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import asyncio # FR: async safety import logging diff --git a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/config.py b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/config.py index 8c30171b0d..0a0570d0ec 100644 --- a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/config.py +++ b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/config.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from typing import Callable, Optional from opentelemetry._logs import Logger diff --git a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py index ee6eccb5a7..f1c0119b32 100644 --- a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py +++ b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import asyncio import logging import os diff --git a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v0/__init__.py b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v0/__init__.py index ff7ce4aca1..e3eb1507d1 100644 --- a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v0/__init__.py +++ b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v0/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from typing import Collection from opentelemetry._logs import get_logger diff --git a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/__init__.py b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/__init__.py index f1ad96344e..d6fab7ec3c 100644 --- a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/__init__.py +++ b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from typing import Collection from opentelemetry._logs import get_logger diff --git a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py index cade7f1c72..549af3b525 100644 --- a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py +++ b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import logging import time diff --git a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py index a896f72a58..97494b001b 100644 --- a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py +++ b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from opentelemetry.instrumentation.openai.shared import _set_span_attribute from opentelemetry.instrumentation.openai.shared.event_emitter import emit_event from opentelemetry.instrumentation.openai.shared.event_models import ChoiceEvent diff --git a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/realtime_wrappers.py b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/realtime_wrappers.py index 6ab0dd36e3..2739d55c74 100644 --- a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/realtime_wrappers.py +++ b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/realtime_wrappers.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """ Instrumentation wrappers for OpenAI Realtime API. diff --git a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/responses_wrappers.py b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/responses_wrappers.py index 0039368e32..40d4c861c7 100644 --- a/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/responses_wrappers.py +++ b/packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/responses_wrappers.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import asyncio # FR: async safety import json import pydantic diff --git a/packages/opentelemetry-instrumentation-openai/pyproject.toml b/packages/opentelemetry-instrumentation-openai/pyproject.toml index dc40d0d13e..c578398a4f 100644 --- a/packages/opentelemetry-instrumentation-openai/pyproject.toml +++ b/packages/opentelemetry-instrumentation-openai/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-openai" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-openai/tests/conftest.py b/packages/opentelemetry-instrumentation-openai/tests/conftest.py index 9f06622ad0..46c53fa9d2 100644 --- a/packages/opentelemetry-instrumentation-openai/tests/conftest.py +++ b/packages/opentelemetry-instrumentation-openai/tests/conftest.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """Unit tests configuration module.""" import os diff --git a/packages/opentelemetry-instrumentation-openai/tests/metrics/test_openai_metrics.py b/packages/opentelemetry-instrumentation-openai/tests/metrics/test_openai_metrics.py index 1e8c4b4ec5..499729cb8f 100644 --- a/packages/opentelemetry-instrumentation-openai/tests/metrics/test_openai_metrics.py +++ b/packages/opentelemetry-instrumentation-openai/tests/metrics/test_openai_metrics.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import pytest from openai import OpenAI from opentelemetry.semconv._incubating.attributes import ( diff --git a/packages/opentelemetry-instrumentation-openai/tests/traces/test_azure.py b/packages/opentelemetry-instrumentation-openai/tests/traces/test_azure.py index 43eb6ab8b2..0194b7545d 100644 --- a/packages/opentelemetry-instrumentation-openai/tests/traces/test_azure.py +++ b/packages/opentelemetry-instrumentation-openai/tests/traces/test_azure.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json import pytest diff --git a/packages/opentelemetry-instrumentation-openai/tests/traces/test_chat.py b/packages/opentelemetry-instrumentation-openai/tests/traces/test_chat.py index 629d15e63c..ef7e8b72dc 100644 --- a/packages/opentelemetry-instrumentation-openai/tests/traces/test_chat.py +++ b/packages/opentelemetry-instrumentation-openai/tests/traces/test_chat.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import asyncio import logging from unittest.mock import patch diff --git a/packages/opentelemetry-instrumentation-openai/tests/traces/test_chat_parse.py b/packages/opentelemetry-instrumentation-openai/tests/traces/test_chat_parse.py index db936c35df..205c5966ed 100644 --- a/packages/opentelemetry-instrumentation-openai/tests/traces/test_chat_parse.py +++ b/packages/opentelemetry-instrumentation-openai/tests/traces/test_chat_parse.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json import pytest from pydantic import BaseModel diff --git a/packages/opentelemetry-instrumentation-openai/tests/traces/test_completions.py b/packages/opentelemetry-instrumentation-openai/tests/traces/test_completions.py index 9c67dfeb2c..67ae15a7e2 100644 --- a/packages/opentelemetry-instrumentation-openai/tests/traces/test_completions.py +++ b/packages/opentelemetry-instrumentation-openai/tests/traces/test_completions.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from unittest.mock import patch import httpx diff --git a/packages/opentelemetry-instrumentation-openai/tests/traces/test_embeddings.py b/packages/opentelemetry-instrumentation-openai/tests/traces/test_embeddings.py index 9932982a59..931d153506 100644 --- a/packages/opentelemetry-instrumentation-openai/tests/traces/test_embeddings.py +++ b/packages/opentelemetry-instrumentation-openai/tests/traces/test_embeddings.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from unittest.mock import patch import httpx diff --git a/packages/opentelemetry-instrumentation-openai/tests/traces/test_responses.py b/packages/opentelemetry-instrumentation-openai/tests/traces/test_responses.py index 3e758ed8b1..702f688aca 100644 --- a/packages/opentelemetry-instrumentation-openai/tests/traces/test_responses.py +++ b/packages/opentelemetry-instrumentation-openai/tests/traces/test_responses.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import pytest from openai import AsyncOpenAI, OpenAI diff --git a/packages/opentelemetry-instrumentation-openai/tests/traces/utils.py b/packages/opentelemetry-instrumentation-openai/tests/traces/utils.py index b370174d46..e8aa873bed 100644 --- a/packages/opentelemetry-instrumentation-openai/tests/traces/utils.py +++ b/packages/opentelemetry-instrumentation-openai/tests/traces/utils.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import httpx from opentelemetry.sdk.trace import Span from opentelemetry.trace import StatusCode diff --git a/packages/opentelemetry-instrumentation-replicate/opentelemetry/instrumentation/replicate/__init__.py b/packages/opentelemetry-instrumentation-replicate/opentelemetry/instrumentation/replicate/__init__.py index e901760f54..b841a0d4f8 100644 --- a/packages/opentelemetry-instrumentation-replicate/opentelemetry/instrumentation/replicate/__init__.py +++ b/packages/opentelemetry-instrumentation-replicate/opentelemetry/instrumentation/replicate/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Replicate instrumentation""" import logging diff --git a/packages/opentelemetry-instrumentation-replicate/pyproject.toml b/packages/opentelemetry-instrumentation-replicate/pyproject.toml index ff7d731541..80728b2984 100644 --- a/packages/opentelemetry-instrumentation-replicate/pyproject.toml +++ b/packages/opentelemetry-instrumentation-replicate/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-replicate" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-sagemaker/opentelemetry/instrumentation/sagemaker/__init__.py b/packages/opentelemetry-instrumentation-sagemaker/opentelemetry/instrumentation/sagemaker/__init__.py index b1ef721555..aa66ba4260 100644 --- a/packages/opentelemetry-instrumentation-sagemaker/opentelemetry/instrumentation/sagemaker/__init__.py +++ b/packages/opentelemetry-instrumentation-sagemaker/opentelemetry/instrumentation/sagemaker/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry SageMaker instrumentation""" from functools import wraps diff --git a/packages/opentelemetry-instrumentation-sagemaker/pyproject.toml b/packages/opentelemetry-instrumentation-sagemaker/pyproject.toml index fca46d41e3..c85220cbee 100644 --- a/packages/opentelemetry-instrumentation-sagemaker/pyproject.toml +++ b/packages/opentelemetry-instrumentation-sagemaker/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-sagemaker" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-together/opentelemetry/instrumentation/together/__init__.py b/packages/opentelemetry-instrumentation-together/opentelemetry/instrumentation/together/__init__.py index 58ac9cb153..9bb025a8b0 100644 --- a/packages/opentelemetry-instrumentation-together/opentelemetry/instrumentation/together/__init__.py +++ b/packages/opentelemetry-instrumentation-together/opentelemetry/instrumentation/together/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Together AI instrumentation""" import logging diff --git a/packages/opentelemetry-instrumentation-together/pyproject.toml b/packages/opentelemetry-instrumentation-together/pyproject.toml index c73832aa99..967677b74f 100644 --- a/packages/opentelemetry-instrumentation-together/pyproject.toml +++ b/packages/opentelemetry-instrumentation-together/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-together" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-transformers/opentelemetry/instrumentation/transformers/text_generation_pipeline_wrapper.py b/packages/opentelemetry-instrumentation-transformers/opentelemetry/instrumentation/transformers/text_generation_pipeline_wrapper.py index 4a30e29ee1..60122f66e8 100644 --- a/packages/opentelemetry-instrumentation-transformers/opentelemetry/instrumentation/transformers/text_generation_pipeline_wrapper.py +++ b/packages/opentelemetry-instrumentation-transformers/opentelemetry/instrumentation/transformers/text_generation_pipeline_wrapper.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import logging from opentelemetry import context as context_api diff --git a/packages/opentelemetry-instrumentation-transformers/pyproject.toml b/packages/opentelemetry-instrumentation-transformers/pyproject.toml index c87a6c94a8..dfe384573b 100644 --- a/packages/opentelemetry-instrumentation-transformers/pyproject.toml +++ b/packages/opentelemetry-instrumentation-transformers/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-transformers" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-vertexai/opentelemetry/instrumentation/vertexai/__init__.py b/packages/opentelemetry-instrumentation-vertexai/opentelemetry/instrumentation/vertexai/__init__.py index b4c5f50252..b44d7315d1 100644 --- a/packages/opentelemetry-instrumentation-vertexai/opentelemetry/instrumentation/vertexai/__init__.py +++ b/packages/opentelemetry-instrumentation-vertexai/opentelemetry/instrumentation/vertexai/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Vertex AI instrumentation""" import asyncio # FR: async safety diff --git a/packages/opentelemetry-instrumentation-vertexai/opentelemetry/instrumentation/vertexai/config.py b/packages/opentelemetry-instrumentation-vertexai/opentelemetry/instrumentation/vertexai/config.py index e08814f50f..785342989d 100644 --- a/packages/opentelemetry-instrumentation-vertexai/opentelemetry/instrumentation/vertexai/config.py +++ b/packages/opentelemetry-instrumentation-vertexai/opentelemetry/instrumentation/vertexai/config.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from typing import Callable, Optional diff --git a/packages/opentelemetry-instrumentation-vertexai/pyproject.toml b/packages/opentelemetry-instrumentation-vertexai/pyproject.toml index 06a9158fb1..fe6102a03c 100644 --- a/packages/opentelemetry-instrumentation-vertexai/pyproject.toml +++ b/packages/opentelemetry-instrumentation-vertexai/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-vertexai" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-watsonx/opentelemetry/instrumentation/watsonx/__init__.py b/packages/opentelemetry-instrumentation-watsonx/opentelemetry/instrumentation/watsonx/__init__.py index ac6e6188be..7217ad05fd 100644 --- a/packages/opentelemetry-instrumentation-watsonx/opentelemetry/instrumentation/watsonx/__init__.py +++ b/packages/opentelemetry-instrumentation-watsonx/opentelemetry/instrumentation/watsonx/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry IBM Watsonx AI instrumentation""" import logging diff --git a/packages/opentelemetry-instrumentation-watsonx/pyproject.toml b/packages/opentelemetry-instrumentation-watsonx/pyproject.toml index 5517607e11..6ce922dd20 100644 --- a/packages/opentelemetry-instrumentation-watsonx/pyproject.toml +++ b/packages/opentelemetry-instrumentation-watsonx/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-watsonx" version = "0.52.6" diff --git a/packages/opentelemetry-instrumentation-writer/opentelemetry/instrumentation/writer/__init__.py b/packages/opentelemetry-instrumentation-writer/opentelemetry/instrumentation/writer/__init__.py index 3d0fbcb23c..811fb4995e 100644 --- a/packages/opentelemetry-instrumentation-writer/opentelemetry/instrumentation/writer/__init__.py +++ b/packages/opentelemetry-instrumentation-writer/opentelemetry/instrumentation/writer/__init__.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """OpenTelemetry Writer instrumentation""" import asyncio # FR: async safety diff --git a/packages/opentelemetry-instrumentation-writer/pyproject.toml b/packages/opentelemetry-instrumentation-writer/pyproject.toml index ffa6d9825a..75c7f13f6e 100644 --- a/packages/opentelemetry-instrumentation-writer/pyproject.toml +++ b/packages/opentelemetry-instrumentation-writer/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "opentelemetry-instrumentation-writer" version = "0.52.6" diff --git a/packages/sample-app/pyproject.toml b/packages/sample-app/pyproject.toml index 5d26fbd2ef..04ff0e77a1 100644 --- a/packages/sample-app/pyproject.toml +++ b/packages/sample-app/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "sample-app" version = "0.0.1" diff --git a/packages/traceloop-sdk/pyproject.toml b/packages/traceloop-sdk/pyproject.toml index b2060b3404..274b6f0371 100644 --- a/packages/traceloop-sdk/pyproject.toml +++ b/packages/traceloop-sdk/pyproject.toml @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + [project] name = "traceloop-sdk" version = "0.52.6" diff --git a/packages/traceloop-sdk/tests/conftest.py b/packages/traceloop-sdk/tests/conftest.py index 971f06a1d2..ec0afb9990 100644 --- a/packages/traceloop-sdk/tests/conftest.py +++ b/packages/traceloop-sdk/tests/conftest.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + """Unit tests configuration module.""" import os diff --git a/packages/traceloop-sdk/tests/test_association_properties.py b/packages/traceloop-sdk/tests/test_association_properties.py index a51aa6b3de..4aa3f17eb2 100644 --- a/packages/traceloop-sdk/tests/test_association_properties.py +++ b/packages/traceloop-sdk/tests/test_association_properties.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import pytest from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate diff --git a/packages/traceloop-sdk/tests/test_associations.py b/packages/traceloop-sdk/tests/test_associations.py index 32d499faaa..5930524223 100644 --- a/packages/traceloop-sdk/tests/test_associations.py +++ b/packages/traceloop-sdk/tests/test_associations.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import pytest from traceloop.sdk import Traceloop, AssociationProperty from traceloop.sdk.decorators import task, workflow diff --git a/packages/traceloop-sdk/tests/test_privacy_no_prompts.py b/packages/traceloop-sdk/tests/test_privacy_no_prompts.py index bd31251ca6..e8534eeb22 100644 --- a/packages/traceloop-sdk/tests/test_privacy_no_prompts.py +++ b/packages/traceloop-sdk/tests/test_privacy_no_prompts.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import os import pytest diff --git a/packages/traceloop-sdk/tests/test_prompt_management.py b/packages/traceloop-sdk/tests/test_prompt_management.py index 57ac4f71a6..d1cdaa4658 100644 --- a/packages/traceloop-sdk/tests/test_prompt_management.py +++ b/packages/traceloop-sdk/tests/test_prompt_management.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import json import pytest diff --git a/packages/traceloop-sdk/tests/test_sdk_initialization.py b/packages/traceloop-sdk/tests/test_sdk_initialization.py index 89876daacc..5f7c51057b 100644 --- a/packages/traceloop-sdk/tests/test_sdk_initialization.py +++ b/packages/traceloop-sdk/tests/test_sdk_initialization.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import pytest from unittest.mock import patch from openai import OpenAI diff --git a/packages/traceloop-sdk/tests/test_workflows.py b/packages/traceloop-sdk/tests/test_workflows.py index eaadaa269f..498bdcbbdf 100644 --- a/packages/traceloop-sdk/tests/test_workflows.py +++ b/packages/traceloop-sdk/tests/test_workflows.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import asyncio import json import dataclasses diff --git a/packages/traceloop-sdk/traceloop/sdk/instruments.py b/packages/traceloop-sdk/traceloop/sdk/instruments.py index 775045f2c6..f32c293bfe 100644 --- a/packages/traceloop-sdk/traceloop/sdk/instruments.py +++ b/packages/traceloop-sdk/traceloop/sdk/instruments.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from enum import Enum diff --git a/packages/traceloop-sdk/traceloop/sdk/logging/logging.py b/packages/traceloop-sdk/traceloop/sdk/logging/logging.py index 3458f37d2d..e43d6ea3ca 100644 --- a/packages/traceloop-sdk/traceloop/sdk/logging/logging.py +++ b/packages/traceloop-sdk/traceloop/sdk/logging/logging.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + import logging from typing import Dict, Optional, Any, cast from urllib.parse import urlparse diff --git a/packages/traceloop-sdk/traceloop/sdk/metrics/metrics.py b/packages/traceloop-sdk/traceloop/sdk/metrics/metrics.py index b365f1457f..313a1657f6 100644 --- a/packages/traceloop-sdk/traceloop/sdk/metrics/metrics.py +++ b/packages/traceloop-sdk/traceloop/sdk/metrics/metrics.py @@ -1,3 +1,7 @@ +# NOTE: +# This file has been modified by FortifyRoot. +# Original source: https://github.com/traceloop/openllmetry + from collections.abc import Sequence from typing import Dict, Optional, Any from urllib.parse import urlparse diff --git a/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py b/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py index 127c509c3d..515f7e4a2a 100644 --- a/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py +++ b/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py @@ -627,8 +627,8 @@ def init_instrumentations( print(Fore.RED + f"Warning: {instrument} instrumentation does not exist.") print( "Usage:\n" - "from traceloop.sdk.instruments import Instruments\n" - "Traceloop.init(app_name='...', instruments=set([Instruments.OPENAI]))" + "from fortifyroot import Instruments\n" + "fortifyroot.init(app_name='...', instruments=set([Instruments.OPENAI]))" ) print(Fore.RESET) @@ -939,15 +939,18 @@ def init_pymysql_instrumentor(): def init_bedrock_instrumentor(should_enrich_metrics: bool): - if is_package_installed("boto3"): - from opentelemetry.instrumentation.bedrock import BedrockInstrumentor + try: + if is_package_installed("boto3"): + from opentelemetry.instrumentation.bedrock import BedrockInstrumentor - instrumentor = BedrockInstrumentor( - enrich_token_usage=should_enrich_metrics, - ) - if not instrumentor.is_instrumented_by_opentelemetry: - instrumentor.instrument() - return True + instrumentor = BedrockInstrumentor( + enrich_token_usage=should_enrich_metrics, + ) + if not instrumentor.is_instrumented_by_opentelemetry: + instrumentor.instrument() + return True + except Exception as e: + logging.error(f"Error initializing Bedrock instrumentor: {e}") return False diff --git a/scripts/apply-fr-modification-notices.py b/scripts/apply-fr-modification-notices.py new file mode 100755 index 0000000000..0601b66a7a --- /dev/null +++ b/scripts/apply-fr-modification-notices.py @@ -0,0 +1,214 @@ +#!/usr/bin/env python3 +"""Apply/check FortifyRoot modification notices in the OpenLLMetry fork. + +The FR fork branches are based on an upstream Traceloop/OpenLLMetry tag. +For files that existed in that upstream tag and were modified by FR, Apache +2.0 requires a prominent notice that the file changed. This script keeps that +notice consistent for supported text source/metadata files under packages/. +""" + +from __future__ import annotations + +import argparse +import re +import subprocess +import sys +from pathlib import Path + + +NOTICE_LINES = [ + "# NOTE:", + "# This file has been modified by FortifyRoot.", + "# Original source: https://github.com/traceloop/openllmetry", + "", +] +NOTICE_SUFFIXES = {".py", ".toml"} + +BRANCH_RE = re.compile(r"^fr-v(?P\d+)\.(?P\d+)\.(?P\d+)\.x$") +TAG_RE = re.compile( + r"^fr-v(?P\d+)\.(?P\d+)\.(?P\d+)\.(?P\d+)$" +) + + +def run_git(repo: Path, args: list[str], *, check: bool = True) -> str: + result = subprocess.run( + ["git", *args], + cwd=repo, + text=True, + capture_output=True, + ) + if check and result.returncode != 0: + raise RuntimeError( + f"git {' '.join(args)} failed:\n{result.stderr.strip()}" + ) + return result.stdout.strip() + + +def derive_baseline( + repo: Path, + explicit_baseline: str | None, + base_ref: str | None = None, +) -> str: + if explicit_baseline: + return explicit_baseline + + ref_match = _match_fr_branch_or_tag(base_ref or "") + if ref_match: + return _baseline_from_match(ref_match) + + branch = run_git(repo, ["branch", "--show-current"], check=False) + branch_match = _match_fr_branch_or_tag(branch) + if branch_match: + return _baseline_from_match(branch_match) + + tag = run_git(repo, ["describe", "--tags", "--exact-match"], check=False) + tag_match = _match_fr_branch_or_tag(tag) + if tag_match: + return _baseline_from_match(tag_match) + + raise RuntimeError( + "Could not derive upstream baseline. Checkout a branch named " + "fr-vA.B.C.x, checkout a tag named fr-vA.B.C.D, or pass " + "--upstream-baseline vA.B.C." + ) + + +def _match_fr_branch_or_tag(ref: str) -> re.Match[str] | None: + """Match FR fork branch/tag names, tolerating common git ref prefixes.""" + ref_name = ref.strip() + for prefix in ("refs/heads/", "refs/tags/", "origin/"): + if ref_name.startswith(prefix): + ref_name = ref_name[len(prefix):] + break + return BRANCH_RE.match(ref_name) or TAG_RE.match(ref_name) + + +def _baseline_from_match(match: re.Match[str]) -> str: + return ( + f"v{match.group('major')}.{match.group('minor')}.{match.group('patch')}" + ) + + +def verify_baseline(repo: Path, baseline: str) -> None: + run_git(repo, ["rev-parse", "--verify", f"{baseline}^{{commit}}"]) + + +def modified_upstream_notice_files(repo: Path, baseline: str) -> list[Path]: + diff_output = run_git( + repo, + ["diff", "--name-only", "--diff-filter=AM", f"{baseline}..HEAD", "--", "packages"], + ) + paths: list[Path] = [] + + for line in diff_output.splitlines(): + path = Path(line) + if path.suffix not in NOTICE_SUFFIXES: + continue + if not (repo / path).exists(): + continue + existed_upstream = subprocess.run( + ["git", "cat-file", "-e", f"{baseline}:{line}"], + cwd=repo, + text=True, + capture_output=True, + ).returncode == 0 + if existed_upstream: + paths.append(path) + + return sorted(paths) + + +def normalize_notice(content: str) -> str: + bom = "\ufeff" if content.startswith("\ufeff") else "" + body_content = content[len(bom):] if bom else content + newline = "\r\n" if "\r\n" in body_content else "\n" + lines = body_content.splitlines(keepends=True) + insert_at = _python_header_insert_index(lines) + body = lines[:insert_at] + _strip_existing_modified_notice(lines[insert_at:]) + return ( + bom + + "".join(body[:insert_at]) + + _notice_text(newline) + + "".join(body[insert_at:]) + ) + + +def _notice_text(newline: str) -> str: + return newline.join(NOTICE_LINES) + newline + + +def _python_header_insert_index(lines: list[str]) -> int: + index = 0 + if lines and lines[0].startswith("#!"): + index = 1 + if index < len(lines) and re.match(r"^#.*coding[:=]\s*[-\w.]+", lines[index]): + index += 1 + return index + + +def _strip_existing_modified_notice(lines: list[str]) -> list[str]: + if len(lines) < len(NOTICE_LINES): + return lines + + for offset, expected in enumerate(NOTICE_LINES): + if lines[offset].strip() != expected: + return lines + return lines[len(NOTICE_LINES):] + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Apply/check FR modification notices in fr-openllmetry-py." + ) + parser.add_argument( + "--upstream-baseline", + help="Upstream tag to diff against, e.g. v0.52.6. If omitted, derive from current FR branch/tag.", + ) + parser.add_argument( + "--base-ref", + help="FR fork base branch/tag ref to derive the upstream baseline from, e.g. fr-v0.52.6.x. Intended for pull-request CI.", + ) + parser.add_argument( + "--check", + action="store_true", + help="Check notices and exit nonzero if any file would change.", + ) + args = parser.parse_args() + + repo = Path(__file__).resolve().parents[1] + + try: + baseline = derive_baseline(repo, args.upstream_baseline, args.base_ref) + verify_baseline(repo, baseline) + files = modified_upstream_notice_files(repo, baseline) + except RuntimeError as exc: + print(f"ERROR: {exc}", file=sys.stderr) + return 2 + + changed: list[Path] = [] + for path in files: + file_path = repo / path + content = file_path.read_text(encoding="utf-8") + normalized = normalize_notice(content) + if normalized == content: + continue + changed.append(path) + if not args.check: + file_path.write_text(normalized, encoding="utf-8") + + if changed: + action = "would update" if args.check else "updated" + print(f"FR modification notices {action} for {len(changed)} file(s):") + for path in changed: + print(f" {path}") + return 1 if args.check else 0 + + print( + f"FR modification notices are up to date for {len(files)} modified upstream file(s) " + f"against {baseline}." + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/test-apply-fr-modification-notices.py b/scripts/test-apply-fr-modification-notices.py new file mode 100644 index 0000000000..4b6f334460 --- /dev/null +++ b/scripts/test-apply-fr-modification-notices.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 +"""Unit tests for apply-fr-modification-notices.py.""" + +from __future__ import annotations + +import importlib.util +import subprocess +import tempfile +import unittest +from pathlib import Path + + +SCRIPT_PATH = Path(__file__).with_name("apply-fr-modification-notices.py") +spec = importlib.util.spec_from_file_location("apply_fr_modification_notices", SCRIPT_PATH) +assert spec is not None +notices = importlib.util.module_from_spec(spec) +assert spec.loader is not None +spec.loader.exec_module(notices) + + +class NoticeNormalizationTests(unittest.TestCase): + def test_explicit_baseline_wins_over_base_ref(self) -> None: + baseline = notices.derive_baseline( + Path.cwd(), + explicit_baseline="v9.8.7", + base_ref="refs/heads/fr-v0.52.6.x", + ) + + self.assertEqual(baseline, "v9.8.7") + + def test_exact_notice_strip_preserves_adjacent_copyright(self) -> None: + content = ( + "# NOTE:\n" + "# This file has been modified by FortifyRoot.\n" + "# Original source: https://github.com/traceloop/openllmetry\n" + "\n" + "# Copyright 2023 Traceloop\n" + "import os\n" + ) + + normalized = notices.normalize_notice(content) + + self.assertEqual(normalized.count("This file has been modified by FortifyRoot."), 1) + self.assertIn("# Copyright 2023 Traceloop\n", normalized) + + def test_notice_preserves_bom(self) -> None: + normalized = notices.normalize_notice("\ufeffimport os\n") + + self.assertTrue(normalized.startswith("\ufeff# NOTE:\n")) + + def test_notice_preserves_crlf(self) -> None: + normalized = notices.normalize_notice("import os\r\n") + + self.assertIn("# NOTE:\r\n", normalized) + self.assertNotIn("# NOTE:\n", normalized.replace("\r\n", "")) + + def test_notice_stays_after_shebang_and_encoding(self) -> None: + normalized = notices.normalize_notice( + "#!/usr/bin/env python3\n" + "# -*- coding: utf-8 -*-\n" + "from __future__ import annotations\n" + ) + + self.assertTrue( + normalized.startswith( + "#!/usr/bin/env python3\n" + "# -*- coding: utf-8 -*-\n" + "# NOTE:\n" + ) + ) + self.assertIn("from __future__ import annotations\n", normalized) + + def test_toml_notice_uses_toml_comment_syntax(self) -> None: + normalized = notices.normalize_notice("[tool.poetry]\nname = \"demo\"\n") + + self.assertTrue(normalized.startswith("# NOTE:\n")) + self.assertIn('[tool.poetry]\nname = "demo"\n', normalized) + + def test_baseline_derives_from_base_ref_in_detached_head_context(self) -> None: + baseline = notices.derive_baseline( + Path.cwd(), + explicit_baseline=None, + base_ref="refs/heads/fr-v0.52.6.x", + ) + + self.assertEqual(baseline, "v0.52.6") + + def test_modified_upstream_notice_files_include_toml_and_skip_fr_added_files(self) -> None: + with tempfile.TemporaryDirectory() as tmp_dir: + repo = Path(tmp_dir) + packages = repo / "packages" / "demo" + packages.mkdir(parents=True) + (packages / "existing.py").write_text("import os\n", encoding="utf-8") + (packages / "pyproject.toml").write_text( + "[project]\nname = \"demo\"\n", + encoding="utf-8", + ) + (packages / "README.md").write_text("demo\n", encoding="utf-8") + + self._git(repo, "init") + self._git(repo, "config", "user.email", "test@example.com") + self._git(repo, "config", "user.name", "Test User") + self._git(repo, "add", ".") + self._git(repo, "commit", "-m", "upstream baseline") + self._git(repo, "tag", "v0.52.6") + + (packages / "existing.py").write_text("import sys\n", encoding="utf-8") + (packages / "pyproject.toml").write_text( + "[project]\nname = \"demo-fr\"\n", + encoding="utf-8", + ) + (packages / "fr_added.py").write_text("import json\n", encoding="utf-8") + (packages / "README.md").write_text("demo fr\n", encoding="utf-8") + self._git(repo, "add", ".") + self._git(repo, "commit", "-m", "fr changes") + + paths = notices.modified_upstream_notice_files(repo, "v0.52.6") + + self.assertEqual( + paths, + [ + Path("packages/demo/existing.py"), + Path("packages/demo/pyproject.toml"), + ], + ) + + def _git(self, repo: Path, *args: str) -> None: + subprocess.run( + ["git", *args], + cwd=repo, + check=True, + text=True, + capture_output=True, + ) + + +if __name__ == "__main__": + unittest.main()