Skip to content

Commit 35ddd52

Browse files
committed
move decoder to utils
1 parent 24a3d42 commit 35ddd52

File tree

4 files changed

+14
-11
lines changed

4 files changed

+14
-11
lines changed

instrumentation-genai/opentelemetry-instrumentation-vertexai/src/opentelemetry/instrumentation/vertexai/patch.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
ContentCapturingMode,
5454
Text,
5555
)
56+
from opentelemetry.util.genai.utils import Base64JsonEncoder
5657

5758
if TYPE_CHECKING:
5859
from google.cloud.aiplatform_v1.services.prediction_service import client
@@ -213,7 +214,7 @@ def handle_response(
213214
):
214215
span.set_attributes(
215216
{
216-
k: json.dumps(v)
217+
k: json.dumps(v, cls=Base64JsonEncoder)
217218
for k, v in content_attributes.items()
218219
}
219220
)

instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ def instrument_with_experimental_semconvs(
192192

193193
@pytest.fixture(scope="function")
194194
def instrument_with_upload_hook(
195-
tracer_provider, event_logger_provider, meter_provider, request
195+
tracer_provider, event_logger_provider, meter_provider
196196
):
197197
# Reset global state..
198198
_OpenTelemetrySemanticConventionStability._initialized = False

util/opentelemetry-util-genai/src/opentelemetry/util/genai/_upload/completion_hook.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import logging
2020
import posixpath
2121
import threading
22-
from base64 import b64encode
2322
from concurrent.futures import Future, ThreadPoolExecutor
2423
from contextlib import ExitStack
2524
from dataclasses import asdict, dataclass
@@ -34,7 +33,7 @@
3433
from opentelemetry._logs import LogRecord
3534
from opentelemetry.semconv._incubating.attributes import gen_ai_attributes
3635
from opentelemetry.trace import Span
37-
from opentelemetry.util.genai import types
36+
from opentelemetry.util.genai import Base64JsonEncoder, types
3837
from opentelemetry.util.genai.completion_hook import CompletionHook
3938
from opentelemetry.util.genai.environment_variables import (
4039
OTEL_INSTRUMENTATION_GENAI_UPLOAD_FORMAT,
@@ -281,10 +280,3 @@ def shutdown(self, *, timeout_sec: float = 10.0) -> None:
281280

282281
# Queue is flushed and blocked, start shutdown
283282
self._executor.shutdown(wait=False)
284-
285-
286-
class Base64JsonEncoder(json.JSONEncoder):
287-
def default(self, o: Any) -> Any:
288-
if isinstance(o, bytes):
289-
return b64encode(o).decode()
290-
return super().default(o)

util/opentelemetry-util-genai/src/opentelemetry/util/genai/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
import json
1516
import logging
1617
import os
18+
from base64 import b64encode
19+
from typing import Any
1720

1821
from opentelemetry.instrumentation._semconv import (
1922
_OpenTelemetrySemanticConventionStability,
@@ -54,3 +57,10 @@ def get_content_capturing_mode() -> ContentCapturingMode:
5457
", ".join(e.name for e in ContentCapturingMode),
5558
)
5659
return ContentCapturingMode.NO_CONTENT
60+
61+
62+
class Base64JsonEncoder(json.JSONEncoder):
63+
def default(self, o: Any) -> Any:
64+
if isinstance(o, bytes):
65+
return b64encode(o).decode()
66+
return super().default(o)

0 commit comments

Comments
 (0)