telemetry-dev-openrouter 0.2.4__tar.gz → 0.2.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {telemetry_dev_openrouter-0.2.4 → telemetry_dev_openrouter-0.2.5}/PKG-INFO +3 -3
- {telemetry_dev_openrouter-0.2.4 → telemetry_dev_openrouter-0.2.5}/README.md +2 -2
- {telemetry_dev_openrouter-0.2.4 → telemetry_dev_openrouter-0.2.5}/pyproject.toml +1 -1
- {telemetry_dev_openrouter-0.2.4 → telemetry_dev_openrouter-0.2.5}/pyproject.toml.orig +1 -1
- {telemetry_dev_openrouter-0.2.4 → telemetry_dev_openrouter-0.2.5}/src/telemetry_dev_openrouter/__init__.py +9 -27
- {telemetry_dev_openrouter-0.2.4 → telemetry_dev_openrouter-0.2.5}/LICENSE +0 -0
- {telemetry_dev_openrouter-0.2.4 → telemetry_dev_openrouter-0.2.5}/src/telemetry_dev_openrouter/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: telemetry-dev-openrouter
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: OpenRouter integration for telemetry.dev Python SDK
|
|
5
5
|
Keywords: telemetry,opentelemetry,openrouter,llm,genai,tracing
|
|
6
6
|
Author: telemetry.dev
|
|
@@ -57,7 +57,7 @@ from telemetry_dev_openrouter import wrap_open_router
|
|
|
57
57
|
client = wrap_open_router(OpenRouter(api_key="sk-or-v1-..."))
|
|
58
58
|
|
|
59
59
|
client.chat.send(
|
|
60
|
-
model="openai/gpt-
|
|
60
|
+
model="openai/gpt-6-luna",
|
|
61
61
|
messages=[{"role": "user", "content": "Tell me a joke about OpenTelemetry"}],
|
|
62
62
|
)
|
|
63
63
|
```
|
|
@@ -75,7 +75,7 @@ instrument_openrouter()
|
|
|
75
75
|
client = OpenRouter(api_key="sk-or-v1-...")
|
|
76
76
|
|
|
77
77
|
try:
|
|
78
|
-
client.responses.send(model="openai/gpt-
|
|
78
|
+
client.responses.send(model="openai/gpt-6-luna", input="Explain OpenTelemetry briefly")
|
|
79
79
|
finally:
|
|
80
80
|
uninstrument_openrouter()
|
|
81
81
|
```
|
|
@@ -34,7 +34,7 @@ from telemetry_dev_openrouter import wrap_open_router
|
|
|
34
34
|
client = wrap_open_router(OpenRouter(api_key="sk-or-v1-..."))
|
|
35
35
|
|
|
36
36
|
client.chat.send(
|
|
37
|
-
model="openai/gpt-
|
|
37
|
+
model="openai/gpt-6-luna",
|
|
38
38
|
messages=[{"role": "user", "content": "Tell me a joke about OpenTelemetry"}],
|
|
39
39
|
)
|
|
40
40
|
```
|
|
@@ -52,7 +52,7 @@ instrument_openrouter()
|
|
|
52
52
|
client = OpenRouter(api_key="sk-or-v1-...")
|
|
53
53
|
|
|
54
54
|
try:
|
|
55
|
-
client.responses.send(model="openai/gpt-
|
|
55
|
+
client.responses.send(model="openai/gpt-6-luna", input="Explain OpenTelemetry briefly")
|
|
56
56
|
finally:
|
|
57
57
|
uninstrument_openrouter()
|
|
58
58
|
```
|
|
@@ -15,7 +15,7 @@ from openrouter.chat import Chat
|
|
|
15
15
|
from openrouter.embeddings import Embeddings
|
|
16
16
|
from openrouter.responses import Responses
|
|
17
17
|
|
|
18
|
-
__version__ = "0.2.
|
|
18
|
+
__version__ = "0.2.5"
|
|
19
19
|
|
|
20
20
|
RequestMapper = Callable[[Mapping[str, Any]], tuple[str, dict[str, Any]]]
|
|
21
21
|
ResponseMapper = Callable[[Any], dict[str, Any]]
|
|
@@ -30,7 +30,6 @@ _FINISH_REASON_MAX_LENGTH = 128
|
|
|
30
30
|
_TERMINAL_RESPONSE_EVENTS = frozenset(
|
|
31
31
|
{"response.completed", "response.failed", "response.incomplete"}
|
|
32
32
|
)
|
|
33
|
-
_OMIT = object()
|
|
34
33
|
_ORIGINALS: list[tuple[type[Any], str, Any]] = []
|
|
35
34
|
_installed = False
|
|
36
35
|
_install_lock = threading.Lock()
|
|
@@ -711,15 +710,6 @@ def _ending_stream(end: Callable[..., None], release: Callable[[], None]) -> Cal
|
|
|
711
710
|
return end_stream
|
|
712
711
|
|
|
713
712
|
|
|
714
|
-
def _capture_masked(handle: telemetry_dev.SpanHandle) -> bool:
|
|
715
|
-
compatible = cast(Any, handle)
|
|
716
|
-
masked = getattr(compatible, "capture_masked", None)
|
|
717
|
-
if isinstance(masked, bool):
|
|
718
|
-
return masked
|
|
719
|
-
client = getattr(compatible, "_client", None)
|
|
720
|
-
return getattr(client, "mask", _OMIT) is not None if client is not None else True
|
|
721
|
-
|
|
722
|
-
|
|
723
713
|
def _mark_capture_incomplete(fields: dict[str, Any], mask_output: bool) -> dict[str, Any]:
|
|
724
714
|
fields["attributes"] = {**(fields.get("attributes") or {}), _CAPTURE_TRUNCATED_ATTRIBUTE: True}
|
|
725
715
|
if mask_output:
|
|
@@ -842,7 +832,7 @@ class _InstrumentedStream:
|
|
|
842
832
|
self._consume: Iterator[Any] | None = None
|
|
843
833
|
self._in_next = False
|
|
844
834
|
self._completed = False
|
|
845
|
-
self._mask_output_when_incomplete =
|
|
835
|
+
self._mask_output_when_incomplete = handle.capture_masked
|
|
846
836
|
self._budget = _stream_capture_budget()
|
|
847
837
|
# Bound to the budget, not self, so the callback adds no reference cycle.
|
|
848
838
|
self._end_stream = _ending_stream(_end_once(handle), partial(_release_budget, self._budget))
|
|
@@ -928,9 +918,7 @@ class _InstrumentedStream:
|
|
|
928
918
|
return True
|
|
929
919
|
update = _record_chat_chunk(chunk, self._states, self._budget)
|
|
930
920
|
if _chat_chunk_has_output(chunk):
|
|
931
|
-
|
|
932
|
-
if callable(record_output_chunk):
|
|
933
|
-
record_output_chunk(received_at * 1000)
|
|
921
|
+
self._handle.record_output_chunk(received_at * 1000)
|
|
934
922
|
if not self._saw_first:
|
|
935
923
|
self._saw_first = True
|
|
936
924
|
self._handle.update(
|
|
@@ -957,7 +945,7 @@ class _InstrumentedAsyncStream:
|
|
|
957
945
|
self._consume: AsyncIterator[Any] | None = None
|
|
958
946
|
self._in_next = False
|
|
959
947
|
self._completed = False
|
|
960
|
-
self._mask_output_when_incomplete =
|
|
948
|
+
self._mask_output_when_incomplete = handle.capture_masked
|
|
961
949
|
self._budget = _stream_capture_budget()
|
|
962
950
|
# Bound to the budget, not self, so the callback adds no reference cycle.
|
|
963
951
|
self._end_stream = _ending_stream(_end_once(handle), partial(_release_budget, self._budget))
|
|
@@ -1046,9 +1034,7 @@ class _InstrumentedAsyncStream:
|
|
|
1046
1034
|
return True
|
|
1047
1035
|
update = _record_chat_chunk(chunk, self._states, self._budget)
|
|
1048
1036
|
if _chat_chunk_has_output(chunk):
|
|
1049
|
-
|
|
1050
|
-
if callable(record_output_chunk):
|
|
1051
|
-
record_output_chunk(received_at * 1000)
|
|
1037
|
+
self._handle.record_output_chunk(received_at * 1000)
|
|
1052
1038
|
if not self._saw_first:
|
|
1053
1039
|
self._saw_first = True
|
|
1054
1040
|
self._handle.update(
|
|
@@ -1584,7 +1570,7 @@ class _InstrumentedResponsesStream:
|
|
|
1584
1570
|
# Bound to the state, not self, so the callback adds no reference cycle.
|
|
1585
1571
|
self._end_stream = _ending_stream(_end_once(handle), self._state.release)
|
|
1586
1572
|
self._ended = False
|
|
1587
|
-
self._mask_output_when_incomplete =
|
|
1573
|
+
self._mask_output_when_incomplete = handle.capture_masked
|
|
1588
1574
|
self._consume: Iterator[Any] | None = None
|
|
1589
1575
|
self._in_next = False
|
|
1590
1576
|
_hook_response_close(inner, self._on_response_close)
|
|
@@ -1661,9 +1647,7 @@ class _InstrumentedResponsesStream:
|
|
|
1661
1647
|
if self._ended:
|
|
1662
1648
|
return
|
|
1663
1649
|
if _response_event_has_output(event):
|
|
1664
|
-
|
|
1665
|
-
if callable(record_output_chunk):
|
|
1666
|
-
record_output_chunk(received_at * 1000)
|
|
1650
|
+
self._handle.record_output_chunk(received_at * 1000)
|
|
1667
1651
|
if not self._saw_first:
|
|
1668
1652
|
self._saw_first = True
|
|
1669
1653
|
self._handle.update(
|
|
@@ -1692,7 +1676,7 @@ class _InstrumentedAsyncResponsesStream:
|
|
|
1692
1676
|
# Bound to the state, not self, so the callback adds no reference cycle.
|
|
1693
1677
|
self._end_stream = _ending_stream(_end_once(handle), self._state.release)
|
|
1694
1678
|
self._ended = False
|
|
1695
|
-
self._mask_output_when_incomplete =
|
|
1679
|
+
self._mask_output_when_incomplete = handle.capture_masked
|
|
1696
1680
|
self._consume: AsyncIterator[Any] | None = None
|
|
1697
1681
|
self._in_next = False
|
|
1698
1682
|
_hook_response_close(inner, self._on_response_close)
|
|
@@ -1772,9 +1756,7 @@ class _InstrumentedAsyncResponsesStream:
|
|
|
1772
1756
|
if self._ended:
|
|
1773
1757
|
return
|
|
1774
1758
|
if _response_event_has_output(event):
|
|
1775
|
-
|
|
1776
|
-
if callable(record_output_chunk):
|
|
1777
|
-
record_output_chunk(received_at * 1000)
|
|
1759
|
+
self._handle.record_output_chunk(received_at * 1000)
|
|
1778
1760
|
if not self._saw_first:
|
|
1779
1761
|
self._saw_first = True
|
|
1780
1762
|
self._handle.update(
|
|
File without changes
|
|
File without changes
|