From ebdd87fefdb4e5eb4a5020b8a0a95c8bff695349 Mon Sep 17 00:00:00 2001 From: lincyaw <814750204@qq.com> Date: Fri, 31 Oct 2025 14:47:11 +0800 Subject: [PATCH 1/2] feat: add phoenix tracer --- .github/workflows/tests-full.yml | 4 +- .github/workflows/tests.yml | 5 +- agentlightning/tracer/phoenix.py | 195 +++++++++++ pyproject.toml | 4 + tests/tracer/test_phoenix.py | 542 +++++++++++++++++++++++++++++++ uv.lock | 72 +++- 6 files changed, 817 insertions(+), 5 deletions(-) create mode 100644 agentlightning/tracer/phoenix.py create mode 100644 tests/tracer/test_phoenix.py diff --git a/.github/workflows/tests-full.yml b/.github/workflows/tests-full.yml index 5dbd5f4e..11b8f092 100644 --- a/.github/workflows/tests-full.yml +++ b/.github/workflows/tests-full.yml @@ -55,10 +55,10 @@ jobs: run: uv lock --upgrade if: matrix.setup-script == 'latest' - name: Sync dependencies (latest) - run: uv sync --frozen --no-default-groups --extra apo --group dev --group agents --group torch-gpu-stable + run: uv sync --frozen --no-default-groups --extra apo --extra phoenix --group dev --group agents --group torch-gpu-stable if: matrix.setup-script == 'latest' - name: Sync dependencies (stable & legacy) - run: uv sync --frozen --no-default-groups --extra apo --group dev --group agents --group torch-gpu-${{ matrix.setup-script }} + run: uv sync --frozen --no-default-groups --extra apo --extra phoenix --group dev --group agents --group torch-gpu-${{ matrix.setup-script }} if: matrix.setup-script != 'latest' - name: Freeze dependencies run: | diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e638275b..7dc39bd5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -37,6 +37,7 @@ jobs: uv sync --frozen \ --extra apo \ --extra verl \ + --extra phoenix \ --group dev \ --group torch-cpu \ --group torch-stable \ @@ -115,10 +116,10 @@ jobs: run: uv lock --upgrade if: matrix.setup-script == 'latest' - name: Sync dependencies (latest) - run: uv sync --frozen --no-default-groups --extra apo --group dev --group agents --group core-stable + run: uv sync --frozen --no-default-groups --extra apo --extra phoenix --group dev --group agents --group core-stable if: matrix.setup-script == 'latest' - name: Sync dependencies (stable & legacy) - run: uv sync --frozen --no-default-groups --extra apo --group dev --group agents --group core-${{ matrix.setup-script }} + run: uv sync --frozen --no-default-groups --extra apo --extra phoenix --group dev --group agents --group core-${{ matrix.setup-script }} if: matrix.setup-script != 'latest' - name: Freeze dependencies run: | diff --git a/agentlightning/tracer/phoenix.py b/agentlightning/tracer/phoenix.py new file mode 100644 index 00000000..eea185c2 --- /dev/null +++ b/agentlightning/tracer/phoenix.py @@ -0,0 +1,195 @@ +"""Phoenix-backed tracer integration for Agent Lightning. + +This tracer bridges Agent Lightning's tracing interface with Arize Phoenix by +leveraging the ``arize-phoenix-otel`` package. It registers a Phoenix-aware +``TracerProvider`` for each worker process and reuses the built-in +``LightningSpanProcessor`` to capture spans so that they can be stored or +inspected inside Agent Lightning. +""" + +from __future__ import annotations + +import inspect +import logging +import os +from collections.abc import AsyncGenerator, Iterator +from contextlib import asynccontextmanager, contextmanager +from typing import Any + +from agentlightning.store.base import LightningStore +from agentlightning.tracer.agentops import LightningSpanProcessor +from agentlightning.tracer.base import Tracer +from opentelemetry import trace as trace_api +from opentelemetry.sdk.trace import ReadableSpan, TracerProvider +from phoenix.otel import register as phoenix_register + +logger = logging.getLogger(__name__) + + +class PhoenixTracer(Tracer): + """Tracer implementation that sends spans to Arize Phoenix. + + Parameters are primarily thin wrappers around ``phoenix.otel.register``. By + default, configuration is read from the standard Phoenix environment + variables so that existing deployments keep working without code changes. + + Note: This tracer will set its own global OpenTelemetry TracerProvider. + If you have already called ``setup_otel_tracing()`` from this module, + there may be conflicts. Choose one approach: + + - For Agent Lightning training: Use PhoenixTracer with Trainer + - For general agent tracing: Use setup_otel_tracing() + """ + + def __init__( + self, + *, + endpoint: str | None = None, + project_name: str | None = None, + api_key: str | None = None, + auto_instrument: bool = True, + use_batch_processor: bool = False, + headers: dict[str, str] | None = None, + register_kwargs: dict[str, Any] | None = None, + ) -> None: + super().__init__() + self.endpoint = endpoint or os.getenv("PHOENIX_ENDPOINT") + self.project_name = project_name or os.getenv("PHOENIX_PROJECT_NAME") + self.api_key = api_key or os.getenv("PHOENIX_API_KEY") + self.auto_instrument = auto_instrument + self.use_batch_processor = use_batch_processor + self.headers = headers + self.register_kwargs = register_kwargs.copy() if register_kwargs else {} + + self._tracer_provider: TracerProvider | None = None + self._lightning_span_processor: LightningSpanProcessor | None = None + self._initialized = False + + def init(self, *args: Any, **kwargs: Any) -> None: # noqa: D401 - hook required by interface + """Main-process initialization hook (no-op for Phoenix).""" + logger.debug("PhoenixTracer main-process init invoked.") + + def teardown(self, *args: Any, **kwargs: Any) -> None: + logger.debug("PhoenixTracer main-process teardown invoked.") + + def init_worker(self, worker_id: int, *args: Any, **kwargs: Any) -> None: + super().init_worker(worker_id, *args, **kwargs) + if self._initialized: + logger.warning( + "PhoenixTracer already initialized in worker %s; skipping re-registration.", + worker_id, + ) + return + + logger.info("[Worker %s] Configuring Phoenix tracer provider...", worker_id) + + register_options: dict[str, Any] = { + "endpoint": self.endpoint, + "project_name": self.project_name, + "headers": self.headers, + "batch": self.use_batch_processor, + "set_global_tracer_provider": False, # Don't override existing global provider + "auto_instrument": self.auto_instrument, + } + if self.api_key: + register_options["api_key"] = self.api_key + register_options.update(self.register_kwargs) + + tracer_provider = phoenix_register(**register_options) + self._tracer_provider = tracer_provider + + # Set as global tracer provider (will override if already set) + trace_api.set_tracer_provider(tracer_provider) + logger.info("[Worker %s] Phoenix tracer provider set as global.", worker_id) + + self._lightning_span_processor = LightningSpanProcessor() + span_processor_kwargs: dict[str, Any] = {} + parameters = inspect.signature(tracer_provider.add_span_processor).parameters + if "replace_default_processor" in parameters: + span_processor_kwargs["replace_default_processor"] = False + tracer_provider.add_span_processor( + self._lightning_span_processor, **span_processor_kwargs + ) # type: ignore[misc] + + self._initialized = True + logger.info("[Worker %s] Phoenix tracer provider ready.", worker_id) + + def teardown_worker(self, worker_id: int, *args: Any, **kwargs: Any) -> None: + super().teardown_worker(worker_id, *args, **kwargs) + logger.info("[Worker %s] Tearing down Phoenix tracer provider...", worker_id) + if self._lightning_span_processor is not None: + self._lightning_span_processor.shutdown() + self._lightning_span_processor = None + if self._tracer_provider is not None: + self._tracer_provider.shutdown() + self._tracer_provider = None + self._initialized = False + + @asynccontextmanager + async def trace_context( + self, + name: str | None = None, + *, + store: LightningStore | None = None, + rollout_id: str | None = None, + attempt_id: str | None = None, + ) -> AsyncGenerator[LightningSpanProcessor, None]: + if not self._lightning_span_processor: + raise RuntimeError( + "LightningSpanProcessor is not initialized. Call init_worker() first." + ) + + with self._trace_context_sync( + name=name, + store=store, + rollout_id=rollout_id, + attempt_id=attempt_id, + ) as processor: + yield processor + + @contextmanager + def _trace_context_sync( + self, + name: str | None = None, + *, + store: LightningStore | None = None, + rollout_id: str | None = None, + attempt_id: str | None = None, + ) -> Iterator[LightningSpanProcessor]: + if not self._lightning_span_processor: + raise RuntimeError( + "LightningSpanProcessor is not initialized. Call init_worker() first." + ) + + if store is not None and rollout_id is not None and attempt_id is not None: + ctx = self._lightning_span_processor.with_context( + store=store, rollout_id=rollout_id, attempt_id=attempt_id + ) + with ctx as processor: + yield processor + elif store is None and rollout_id is None and attempt_id is None: + with self._lightning_span_processor: + yield self._lightning_span_processor + else: + raise ValueError( + "store, rollout_id, and attempt_id must be either all provided or all None" + ) + + def get_last_trace(self) -> list[ReadableSpan]: + if not self._lightning_span_processor: + raise RuntimeError( + "LightningSpanProcessor is not initialized. Call init_worker() first." + ) + return self._lightning_span_processor.spans() + + def get_config(self) -> dict[str, Any]: + """Expose current Phoenix configuration for debugging or tests.""" + return { + "endpoint": self.endpoint, + "project_name": self.project_name, + "api_key": bool(self.api_key), + "auto_instrument": self.auto_instrument, + "use_batch_processor": self.use_batch_processor, + "headers": self.headers, + "register_kwargs": self.register_kwargs, + } diff --git a/pyproject.toml b/pyproject.toml index 0f827f17..7065ee9d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,10 @@ dependencies = [ apo = [ "poml", ] +phoenix = [ + "arize-phoenix-client>=1.14.1", + "arize-phoenix-otel>=0.11.0" +] # It's not recommended to use agentlightning[verl] to install VERL and its dependencies. # though it's listed here for completeness. verl = [ diff --git a/tests/tracer/test_phoenix.py b/tests/tracer/test_phoenix.py new file mode 100644 index 00000000..84a9a948 --- /dev/null +++ b/tests/tracer/test_phoenix.py @@ -0,0 +1,542 @@ +# Copyright (c) Microsoft. All rights reserved. + +# pyright: reportPrivateUsage=false + +from __future__ import annotations + +import asyncio +import multiprocessing +import pickle +import threading +import time +from multiprocessing.connection import Connection +from typing import Any +from unittest.mock import AsyncMock, MagicMock + +import pytest +from opentelemetry.sdk.trace import ReadableSpan +from opentelemetry.trace import SpanContext, TraceFlags + +from agentlightning.reward import ( + emit_reward, + find_reward_spans, + get_reward_value, + reward, +) +from agentlightning.store.base import LightningStore +from agentlightning.tracer.agentops import LightningSpanProcessor +from agentlightning.tracer.phoenix import PhoenixTracer + +from ..common.tracer import clear_agentops_init, clear_tracer_provider + + +def create_span( + name: str, sampled: bool = True, with_context: bool = True +) -> MagicMock: + """Helper to create mock spans with different properties.""" + span = MagicMock(spec=ReadableSpan) + span.name = name + if with_context: + span.context = SpanContext( + trace_id=hash(name) % (2**64), + span_id=hash(name) % (2**64), + is_remote=False, + trace_flags=TraceFlags(0x01 if sampled else 0x00), + ) + else: + span.context = None + return span + + +def create_mock_store() -> MagicMock: + """Helper to create a mock LightningStore.""" + store = MagicMock(spec=LightningStore) + store.add_otel_span = AsyncMock(return_value=None) + return store + + +def test_initialization_and_shutdown(): + """Test processor lifecycle: initialization, loop thread, and shutdown.""" + processor = LightningSpanProcessor() + + # Verify initialization + assert processor._spans == [] + assert processor._store is None + assert processor._rollout_id is None + assert processor._attempt_id is None + + # Verify loop thread is running correctly + assert processor._loop is not None + assert processor._loop.is_running() + assert processor._loop_thread.is_alive() + assert processor._loop_thread.daemon is True + assert processor._loop_thread.name == "otel-loop" + + # Verify shutdown stops everything + thread = processor._loop_thread + processor.shutdown() + + time.sleep(0.1) # Give thread time to stop + assert not thread.is_alive() + assert processor._loop is None + + # Verify double shutdown is safe (idempotent) + processor.shutdown() # Should not raise + assert processor._loop is None + + +def test_span_collection_with_filtering(): + """Test that spans are collected with proper filtering.""" + processor = LightningSpanProcessor() + + sampled_span = create_span("sampled", sampled=True) + unsampled_span = create_span("unsampled", sampled=False) + no_context_span = create_span("no_context", with_context=False) + + # Process different types of spans + processor.on_end(sampled_span) + processor.on_end(unsampled_span) + processor.on_end(no_context_span) + + # Only sampled span with context should be collected + collected = processor.spans() + assert len(collected) == 1 + assert collected[0] == sampled_span + + processor.shutdown() + + +def test_context_managers_clear_state(): + """Test that both context managers properly manage state.""" + processor = LightningSpanProcessor() + store = create_mock_store() + + # Add a span first + span1 = create_span("span1") + processor.on_end(span1) + assert len(processor.spans()) == 1 + + # Test basic context manager: __enter__ clears spans + with processor: + assert len(processor.spans()) == 0 + span2 = create_span("span2") + processor.on_end(span2) + assert len(processor.spans()) == 1 + + # After exit, store context should be cleared + assert processor._store is None + assert processor._rollout_id is None + assert processor._attempt_id is None + + # Test with_context: sets and clears store context + with processor.with_context(store=store, rollout_id="r1", attempt_id="a1") as proc: + assert proc is processor + assert processor._store is store + assert processor._rollout_id == "r1" + assert processor._attempt_id == "a1" + + # After exit, context should be cleared + assert processor._store is None + assert processor._rollout_id is None + assert processor._attempt_id is None + + processor.shutdown() + + +def test_store_integration_complete(): + """Test all store integration scenarios: writes, errors, timeout, thread verification.""" + processor = LightningSpanProcessor() + store = create_mock_store() + + # Test 1: Successful store writes + with processor.with_context(store=store, rollout_id="r1", attempt_id="a1"): + span1 = create_span("span1") + span2 = create_span("span2") + processor.on_end(span1) + processor.on_end(span2) + + # Verify both spans written to store + assert store.add_otel_span.call_count == 2 + assert len(processor.spans()) == 2 + + # Verify call arguments + calls = store.add_otel_span.call_args_list + assert calls[0][0] == ("r1", "a1", span1) + assert calls[1][0] == ("r1", "a1", span2) + + # Test 2: Store write errors are caught and don't crash + store.add_otel_span.reset_mock() + store.add_otel_span.side_effect = RuntimeError("Store failure") + + with processor.with_context(store=store, rollout_id="r2", attempt_id="a2"): + span3 = create_span("span3") + processor.on_end(span3) # Should not raise + + # Span still collected despite store error + assert len(processor.spans()) == 1 + store.add_otel_span.side_effect = None + + # Test 3: Verify writes happen in loop thread + execution_thread = None + + async def track_thread(*args: Any, **kwargs: Any): + nonlocal execution_thread + execution_thread = threading.current_thread() + + store.add_otel_span = AsyncMock(side_effect=track_thread) + + with processor.with_context(store=store, rollout_id="r3", attempt_id="a3"): + span4 = create_span("span4") + processor.on_end(span4) + + assert execution_thread is not None + assert execution_thread.name == "otel-loop" + + # Test 4: Unsampled and no-context spans don't trigger store writes + store.add_otel_span.reset_mock() + store.add_otel_span = AsyncMock() + + with processor.with_context(store=store, rollout_id="r4", attempt_id="a4"): + unsampled = create_span("unsampled", sampled=False) + no_ctx = create_span("no_ctx", with_context=False) + processor.on_end(unsampled) + processor.on_end(no_ctx) + + # Store should not be called for filtered spans + store.add_otel_span.assert_not_called() + + processor.shutdown() + + +def test_event_loop_operations(): + """Test _await_in_loop: execution, exceptions, and timeout.""" + processor = LightningSpanProcessor() + + # Test 1: Successful coroutine execution + async def successful_coro(): + await asyncio.sleep(0.01) + return "success" + + result = processor._await_in_loop(successful_coro()) + assert result == "success" + + # Test 2: Exception propagation + async def failing_coro(): + raise ValueError("Expected error") + + with pytest.raises(ValueError, match="Expected error"): + processor._await_in_loop(failing_coro()) + + # Test 3: Timeout handling + async def slow_coro(): + await asyncio.sleep(10) + return "too_slow" + + with pytest.raises(Exception): # Should timeout + processor._await_in_loop(slow_coro(), timeout=0.1) + + processor.shutdown() + + +def test_concurrent_access(): + """Test thread-safe concurrent span processing.""" + processor = LightningSpanProcessor() + store = create_mock_store() + + num_threads = 10 + spans_per_thread = 5 + barrier = threading.Barrier(num_threads) + + def process_spans(thread_id: int) -> None: + barrier.wait() # Synchronize all threads to start together + for i in range(spans_per_thread): + span = create_span(f"thread{thread_id}_span{i}") + processor.on_end(span) + + with processor.with_context( + store=store, rollout_id="concurrent", attempt_id="test" + ): + threads = [ + threading.Thread(target=process_spans, args=(i,)) + for i in range(num_threads) + ] + + for t in threads: + t.start() + for t in threads: + t.join() + + # All spans should be collected and written + assert len(processor.spans()) == num_threads * spans_per_thread + assert store.add_otel_span.call_count == num_threads * spans_per_thread + + processor.shutdown() + + +def test_multiprocessing_behavior(): + """Test processor behavior across process boundaries.""" + + # Test 1: Creating new processor in subprocess works + def subprocess_task(result_queue: "multiprocessing.Queue[tuple[str, Any]]") -> None: + try: + processor = LightningSpanProcessor() + + # Verify processor works in new process + assert processor._loop is not None + assert processor._loop_thread.is_alive() + + span = create_span("subprocess_span") + processor.on_end(span) + + result_queue.put(("success", len(processor.spans()))) + processor.shutdown() + except Exception as e: + result_queue.put(("error", str(e))) + + result_queue: multiprocessing.Queue[tuple[str, Any]] = multiprocessing.Queue() + process = multiprocessing.Process(target=subprocess_task, args=(result_queue,)) + process.start() + process.join(timeout=5) + + assert not process.is_alive() + status, value = result_queue.get(timeout=1) + assert status == "success" + assert value == 1 + + # Test 2: Processor cannot be pickled (threads aren't picklable) + processor = LightningSpanProcessor() + + with pytest.raises((TypeError, AttributeError)): + pickle.dumps(processor) + + processor.shutdown() + + +def test_edge_cases(): + """Test edge cases and error conditions.""" + processor = LightningSpanProcessor() + + # Test 1: force_flush always returns True + assert processor.force_flush() is True + assert processor.force_flush(timeout_millis=5000) is True + + # Test 2: Calling _await_in_loop after shutdown raises + processor.shutdown() + + async def dummy_coro(): + return "test" + + with pytest.raises(RuntimeError, match="Loop is not initialized"): + processor._await_in_loop(dummy_coro()) + + # Test 3: Verify shutdown thread join timeout is respected + processor2 = LightningSpanProcessor() + + # Mock thread.join to verify timeout parameter + original_join = processor2._loop_thread.join + join_timeout: float | None = None + + def mock_join(timeout: float | None = None) -> None: + nonlocal join_timeout + join_timeout = timeout + return original_join(timeout=timeout) + + processor2._loop_thread.join = mock_join + processor2.shutdown() + + assert join_timeout == 5 # Should pass 5 second timeout + + +def test_store_write_timeout(): + """Test that slow store writes respect timeout.""" + processor = LightningSpanProcessor() + store = create_mock_store() + + # Create a slow async function that exceeds timeout + async def slow_write(*args: Any, **kwargs: Any) -> None: + await asyncio.sleep(10) + + store.add_otel_span = AsyncMock(side_effect=slow_write) + + with processor.with_context(store=store, rollout_id="r1", attempt_id="a1"): + span = create_span("test_span") + # Should not raise - timeout is caught in on_end + processor.on_end(span) + + # Span still collected despite timeout + # Note: The timeout in on_end is 5.0 seconds, but the error is caught + assert len(processor.spans()) == 1 + + processor.shutdown() + + +def test_multiple_processors_in_same_process(): + """Test that multiple processors can coexist in the same process.""" + processor1 = LightningSpanProcessor() + processor2 = LightningSpanProcessor() + + # Both should have independent loops and threads + assert processor1._loop is not processor2._loop + assert processor1._loop_thread is not processor2._loop_thread + assert processor1._loop is not None and processor1._loop.is_running() + assert processor2._loop is not None and processor2._loop.is_running() + + # Both should work independently + span1 = create_span("p1_span") + span2 = create_span("p2_span") + + processor1.on_end(span1) + processor2.on_end(span2) + + assert len(processor1.spans()) == 1 + assert len(processor2.spans()) == 1 + assert processor1.spans()[0] == span1 + assert processor2.spans()[0] == span2 + + processor1.shutdown() + processor2.shutdown() + + +def test_context_manager_reusability(): + """Test that context managers can be entered and exited multiple times.""" + processor = LightningSpanProcessor() + store = create_mock_store() + + # First usage + with processor.with_context(store=store, rollout_id="r1", attempt_id="a1"): + span1 = create_span("span1") + processor.on_end(span1) + + assert len(processor.spans()) == 1 + assert processor._store is None + + # Second usage - should work fine + with processor.with_context(store=store, rollout_id="r2", attempt_id="a2"): + span2 = create_span("span2") + processor.on_end(span2) + + # Spans should be cleared from first context, only span2 present + assert len(processor.spans()) == 1 + assert processor.spans()[0].name == "span2" + assert processor._store is None + + processor.shutdown() + + +def _otel_reward_subprocess(mode: str, conn: Connection[tuple[str, Any]]) -> None: + asyncio.run(_otel_reward_subprocess_async(mode, conn)) + + +async def _otel_reward_subprocess_async( + mode: str, conn: Connection[tuple[str, Any]] +) -> None: + tracer: PhoenixTracer | None = None + try: + try: + clear_agentops_init() + except Exception: + # Some environments ship a minimal agentops stub without tracer helpers. + pass + clear_tracer_provider() + + tracer = PhoenixTracer() + tracer.init_worker(0) + + if mode == "decorator": + expected_reward = 2.5 + + @reward + def compute_reward() -> float: + return expected_reward + + async with tracer.trace_context(name="reward-decorator"): + returned = compute_reward() + if returned != expected_reward: + raise AssertionError( + f"Expected reward {expected_reward}, got {returned}" + ) + + elif mode == "emit": + expected_reward = 4.5 + async with tracer.trace_context(name="reward-emit"): + emit_reward(expected_reward) + else: + raise ValueError(f"Unsupported mode: {mode}") + + spans = tracer.get_last_trace() + total_spans = len(spans) + reward_spans = find_reward_spans(spans) + if not reward_spans: + raise AssertionError("No reward spans captured by OtelTracer.") + + actual_reward = get_reward_value(reward_spans[-1]) + if actual_reward is None: + raise AssertionError( + "Captured reward span does not contain a reward value." + ) + + conn.send( + ( + "success", + { + "mode": mode, + "reward": actual_reward, + "expected_reward": expected_reward, + "total_spans": total_spans, + "reward_spans": len(reward_spans), + }, + ) + ) + except Exception as exc: # pragma: no cover - defensive path + try: + conn.send(("error", repr(exc))) + except Exception: + pass + finally: + if tracer is not None: + tracer.teardown_worker(0) + conn.close() + + +def _run_otel_reward_test(mode: str) -> dict[str, Any]: + ctx = multiprocessing.get_context("spawn") + parent_conn, child_conn = ctx.Pipe(duplex=False) + proc = ctx.Process(target=_otel_reward_subprocess, args=(mode, child_conn)) + proc.start() + proc.join(15.0) + + if proc.is_alive(): + proc.terminate() + proc.join(5) + pytest.fail(f"Subprocess for mode {mode!r} hung.") + + try: + if not parent_conn.poll(1.0): + pytest.fail(f"No result from subprocess for mode {mode!r}: timed out") + status, payload = parent_conn.recv() + finally: + parent_conn.close() + + if status != "success": + pytest.fail(f"Subprocess for mode {mode!r} failed: {payload}") + + assert proc.exitcode == 0, ( + f"Subprocess for mode {mode!r} exited with code {proc.exitcode}" + ) + return payload + + +def test_otel_tracer_captures_reward_from_decorator(): + payload = _run_otel_reward_test("decorator") + assert payload["reward_spans"] == 1 + assert payload["total_spans"] == 1 + assert payload["reward"] == pytest.approx(payload["expected_reward"]) # pyright: ignore[reportUnknownMemberType] + assert payload["expected_reward"] == pytest.approx(2.5) # pyright: ignore[reportUnknownMemberType] + + +def test_otel_tracer_captures_reward_from_emit_reward(): + payload = _run_otel_reward_test("emit") + assert payload["reward_spans"] == 1 + assert payload["total_spans"] == 1 + assert payload["reward"] == pytest.approx(payload["expected_reward"]) # pyright: ignore[reportUnknownMemberType] + assert payload["expected_reward"] == pytest.approx(4.5) # pyright: ignore[reportUnknownMemberType] diff --git a/uv.lock b/uv.lock index 9aa49922..864b9162 100644 --- a/uv.lock +++ b/uv.lock @@ -142,6 +142,10 @@ dependencies = [ apo = [ { name = "poml", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, ] +phoenix = [ + { name = "arize-phoenix-client", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "arize-phoenix-otel", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, +] verl = [ { name = "verl", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, { name = "vllm", version = "0.9.2", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (sys_platform != 'linux' and extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (sys_platform != 'linux' and extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (sys_platform != 'linux' and extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (sys_platform == 'linux' and extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-legacy') or (sys_platform == 'linux' and extra != 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (sys_platform == 'linux' and extra != 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra != 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra != 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra != 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra != 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra != 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra != 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-legacy' and extra != 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-cpu' and extra != 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-cpu' and extra != 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-legacy' and extra != 'group-14-agentlightning-torch-gpu-legacy' and extra != 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra != 'group-14-agentlightning-torch-gpu-legacy' and extra != 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, @@ -323,6 +327,8 @@ trl = [ requires-dist = [ { name = "agentops", specifier = ">=0.4.13" }, { name = "aiohttp" }, + { name = "arize-phoenix-client", marker = "extra == 'phoenix'", specifier = ">=1.14.1" }, + { name = "arize-phoenix-otel", marker = "extra == 'phoenix'", specifier = ">=0.11.0" }, { name = "fastapi" }, { name = "flask" }, { name = "graphviz" }, @@ -341,7 +347,7 @@ requires-dist = [ { name = "verl", marker = "extra == 'verl'", specifier = ">=0.5.0,<0.6.0" }, { name = "vllm", marker = "extra == 'verl'", specifier = ">=0.8.4,<0.11.0" }, ] -provides-extras = ["apo", "verl"] +provides-extras = ["apo", "verl", "phoenix"] [package.metadata.requires-dev] agents = [ @@ -865,6 +871,43 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d0/ae/9a053dd9229c0fde6b1f1f33f609ccff1ee79ddda364c756a924c6d8563b/APScheduler-3.11.0-py3-none-any.whl", hash = "sha256:fc134ca32e50f5eadcc4938e3a4545ab19131435e851abb40b34d63d5141c6da", size = 64004, upload-time = "2024-11-24T19:39:24.442Z" }, ] +[[package]] +name = "arize-phoenix-client" +version = "1.21.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "openinference-instrumentation", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "openinference-semantic-conventions", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "opentelemetry-exporter-otlp", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "opentelemetry-sdk", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "tqdm", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "typing-extensions", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/00/ffef83cc5a335061f0eee538e6d0d0ab594d1a9920b23b6560c095db3b04/arize_phoenix_client-1.21.0.tar.gz", hash = "sha256:72e5ce34f0cbe731d189cda9c93cd0e011886eaadf42be289b96b72187623e1b", size = 122369, upload-time = "2025-09-29T18:58:00.224Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/31/3cfaf7721858390da6cd6c1f8c5b65c4e0421b67958c723c61c43e86688e/arize_phoenix_client-1.21.0-py3-none-any.whl", hash = "sha256:be3574363f686508f1f21f8cb956d5141ea6781b0b8b573844f1e8278a927e57", size = 129062, upload-time = "2025-09-29T18:57:59.124Z" }, +] + +[[package]] +name = "arize-phoenix-otel" +version = "0.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "openinference-instrumentation", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "openinference-semantic-conventions", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "opentelemetry-exporter-otlp", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "opentelemetry-proto", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "opentelemetry-sdk", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "opentelemetry-semantic-conventions", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "typing-extensions", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "wrapt", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/44/3b/8745dc29b9d7db658f64d4a14d100285d1b74f38827171c22120aa5b7c9c/arize_phoenix_otel-0.13.1.tar.gz", hash = "sha256:6fb7bcfed4260b9ddd5bcaa20a678b60e388525e4bbaec1247092f163a0e0204", size = 20166, upload-time = "2025-09-10T06:09:30.954Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/40/1d421e172453f07fc8a91b5a2407350bbba598e37b9025ae84b68b0ce8a2/arize_phoenix_otel-0.13.1-py3-none-any.whl", hash = "sha256:98d34da78aebac7f60ec4bc30f0eab1e4490c7329b2c74988b9684f9dc182949", size = 17717, upload-time = "2025-09-10T06:09:30.037Z" }, +] + [[package]] name = "astor" version = "0.8.1" @@ -6840,8 +6883,11 @@ dependencies = [ { name = "sympy", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, ] wheels = [ + { url = "https://files.pythonhosted.org/packages/35/d6/311b1afea060015b56c742f3531168c1644650767f27ef40062569960587/onnxruntime-1.23.2-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:a7730122afe186a784660f6ec5807138bf9d792fa1df76556b27307ea9ebcbe3", size = 17195934, upload-time = "2025-10-27T23:06:14.143Z" }, + { url = "https://files.pythonhosted.org/packages/db/db/81bf3d7cecfbfed9092b6b4052e857a769d62ed90561b410014e0aae18db/onnxruntime-1.23.2-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b28740f4ecef1738ea8f807461dd541b8287d5650b5be33bca7b474e3cbd1f36", size = 19153079, upload-time = "2025-10-27T23:05:57.686Z" }, { url = "https://files.pythonhosted.org/packages/2e/4d/a382452b17cf70a2313153c520ea4c96ab670c996cb3a95cc5d5ac7bfdac/onnxruntime-1.23.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8f7d1fe034090a1e371b7f3ca9d3ccae2fabae8c1d8844fb7371d1ea38e8e8d2", size = 15219883, upload-time = "2025-10-22T03:46:21.66Z" }, { url = "https://files.pythonhosted.org/packages/fb/56/179bf90679984c85b417664c26aae4f427cba7514bd2d65c43b181b7b08b/onnxruntime-1.23.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4ca88747e708e5c67337b0f65eed4b7d0dd70d22ac332038c9fc4635760018f7", size = 17370357, upload-time = "2025-10-22T03:46:57.968Z" }, + { url = "https://files.pythonhosted.org/packages/cd/6d/738e50c47c2fd285b1e6c8083f15dac1a5f6199213378a5f14092497296d/onnxruntime-1.23.2-cp310-cp310-win_amd64.whl", hash = "sha256:0be6a37a45e6719db5120e9986fcd30ea205ac8103fd1fb74b6c33348327a0cc", size = 13467651, upload-time = "2025-10-27T23:06:11.904Z" }, { url = "https://files.pythonhosted.org/packages/44/be/467b00f09061572f022ffd17e49e49e5a7a789056bad95b54dfd3bee73ff/onnxruntime-1.23.2-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:6f91d2c9b0965e86827a5ba01531d5b669770b01775b23199565d6c1f136616c", size = 17196113, upload-time = "2025-10-22T03:47:33.526Z" }, { url = "https://files.pythonhosted.org/packages/9f/a8/3c23a8f75f93122d2b3410bfb74d06d0f8da4ac663185f91866b03f7da1b/onnxruntime-1.23.2-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:87d8b6eaf0fbeb6835a60a4265fde7a3b60157cf1b2764773ac47237b4d48612", size = 19153857, upload-time = "2025-10-22T03:46:37.578Z" }, { url = "https://files.pythonhosted.org/packages/3f/d8/506eed9af03d86f8db4880a4c47cd0dffee973ef7e4f4cff9f1d4bcf7d22/onnxruntime-1.23.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbfd2fca76c855317568c1b36a885ddea2272c13cb0e395002c402f2360429a6", size = 15220095, upload-time = "2025-10-22T03:46:24.769Z" }, @@ -7099,6 +7145,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/86/8a/69176a64335aed183529207ba8bc3d329c2999d852b4f3818027203f50e6/opencv_python_headless-4.11.0.86-cp37-abi3-win_amd64.whl", hash = "sha256:6c304df9caa7a6a5710b91709dd4786bf20a74d57672b3c31f7033cc638174ca", size = 39402386, upload-time = "2025-01-16T13:52:56.418Z" }, ] +[[package]] +name = "openinference-instrumentation" +version = "0.1.41" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "openinference-semantic-conventions", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "opentelemetry-api", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "opentelemetry-sdk", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, + { name = "wrapt", marker = "sys_platform == 'linux' or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-core-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-tinker') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-core-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-core-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-tinker' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-cu128') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-legacy') or (extra == 'group-14-agentlightning-torch-cpu' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-gpu-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-gpu-legacy' and extra == 'group-14-agentlightning-trl') or (extra == 'group-14-agentlightning-torch-gpu-stable' and extra == 'group-14-agentlightning-torch-legacy') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-torch-stable') or (extra == 'group-14-agentlightning-torch-legacy' and extra == 'group-14-agentlightning-trl')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/1d/e40227fb6fd0683bdf47c8fed93c15b42f878a0054ef3a09c30dee9b5496/openinference_instrumentation-0.1.41.tar.gz", hash = "sha256:95beaebf8cd2729a4681aaf96a607657c9ed4d4bab6a2fce25e2e1c20850e224", size = 23835, upload-time = "2025-10-20T13:56:00.935Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/9f/09b901e2987f2742cc449694514be3423fd5af71d2f6ffbc5c4e157328c9/openinference_instrumentation-0.1.41-py3-none-any.whl", hash = "sha256:bc206d561ae2b745383a3f18bfc4efba3fc40617e7fee67015924852942704f9", size = 29967, upload-time = "2025-10-20T13:56:00.09Z" }, +] + +[[package]] +name = "openinference-semantic-conventions" +version = "0.1.24" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/07/15/be7566a4bba4b57f7c70b088f42735f2005e2c0adce646a537f63dcf21de/openinference_semantic_conventions-0.1.24.tar.gz", hash = "sha256:3223b8c3958525457a369d58ebf0c56230a1f00567ae1e99f1c2049a8ac2cacd", size = 12741, upload-time = "2025-10-10T03:49:13.987Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/c5/fa81b19042b387826151f984a91fa3d0b52b08374e4d5786521ac2d9e704/openinference_semantic_conventions-0.1.24-py3-none-any.whl", hash = "sha256:b2d650ca7e39c5fb02bf908b8049d6ece2a2657757448e1925a38b59548a80b3", size = 10373, upload-time = "2025-10-10T03:49:00.318Z" }, +] + [[package]] name = "openpyxl" version = "3.1.5" From 8a4491f821f1ee234561ab0b2f5c52beec23e738 Mon Sep 17 00:00:00 2001 From: lincyaw <814750204@qq.com> Date: Fri, 31 Oct 2025 14:56:01 +0800 Subject: [PATCH 2/2] fix legacy comment --- agentlightning/tracer/phoenix.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/agentlightning/tracer/phoenix.py b/agentlightning/tracer/phoenix.py index eea185c2..b411e1c4 100644 --- a/agentlightning/tracer/phoenix.py +++ b/agentlightning/tracer/phoenix.py @@ -32,13 +32,6 @@ class PhoenixTracer(Tracer): Parameters are primarily thin wrappers around ``phoenix.otel.register``. By default, configuration is read from the standard Phoenix environment variables so that existing deployments keep working without code changes. - - Note: This tracer will set its own global OpenTelemetry TracerProvider. - If you have already called ``setup_otel_tracing()`` from this module, - there may be conflicts. Choose one approach: - - - For Agent Lightning training: Use PhoenixTracer with Trainer - - For general agent tracing: Use setup_otel_tracing() """ def __init__(