Skip to content

Commit d5798db

Browse files
committed
formatting
1 parent 630609f commit d5798db

File tree

6 files changed

+111
-119
lines changed

6 files changed

+111
-119
lines changed

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_opentelemetry_configurator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
from amazon.opentelemetry.distro.sampler.aws_xray_remote_sampler import AwsXRayRemoteSampler
3030
from amazon.opentelemetry.distro.scope_based_exporter import ScopeBasedPeriodicExportingMetricReader
3131
from amazon.opentelemetry.distro.scope_based_filtering_view import ScopeBasedRetainingView
32-
from opentelemetry._logs import set_logger_provider, get_logger_provider
32+
from opentelemetry._logs import get_logger_provider, set_logger_provider
3333
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
3434
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter as OTLPHttpOTLPMetricExporter
3535
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/logs/otlp_aws_logs_exporter.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ def export(self, batch: Sequence[LogData]) -> LogExportResult:
7171
7272
1. Always compresses the serialized data into gzip before sending.
7373
74-
2. If self._gen_ai_flag is enabled, the log data is > 1 MB and the assumption is that the log is a normalized gen.ai LogEvent.
74+
2. If self._gen_ai_flag is enabled, the log data is > 1 MB a
75+
and the assumption is that the log is a normalized gen.ai LogEvent.
7576
- inject the 'x-aws-log-semantics' flag into the header.
7677
7778
3. Retry behavior is now the following:

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/traces/otlp_aws_span_exporter.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33

44
from typing import Dict, Optional, Sequence
55

6+
from amazon.opentelemetry.distro._utils import is_agent_observability_enabled
67
from amazon.opentelemetry.distro.exporter.otlp.aws.common.aws_auth_session import AwsAuthSession
78
from amazon.opentelemetry.distro.llo_handler import LLOHandler
8-
from amazon.opentelemetry.distro._utils import is_agent_observability_enabled
9-
from opentelemetry.sdk._logs import LoggerProvider
109
from opentelemetry.exporter.otlp.proto.http import Compression
1110
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
11+
from opentelemetry.sdk._logs import LoggerProvider
1212
from opentelemetry.sdk.trace import ReadableSpan
1313
from opentelemetry.sdk.trace.export import SpanExportResult
1414

@@ -25,7 +25,7 @@ def __init__(
2525
headers: Optional[Dict[str, str]] = None,
2626
timeout: Optional[int] = None,
2727
compression: Optional[Compression] = None,
28-
logger_provider: Optional[LoggerProvider] = None
28+
logger_provider: Optional[LoggerProvider] = None,
2929
):
3030
self._aws_region = None
3131

@@ -52,4 +52,4 @@ def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult:
5252
llo_processed_spans = self._llo_handler.process_spans(spans)
5353
return super().export(llo_processed_spans)
5454

55-
return super().export(spans)
55+
return super().export(spans)

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/llo_handler.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import logging
22
import re
3-
43
from typing import Any, Dict, List, Optional, Sequence
54

6-
from opentelemetry.attributes import BoundedAttributes
75
from opentelemetry._events import Event
8-
from opentelemetry.sdk._logs import LoggerProvider
6+
from opentelemetry.attributes import BoundedAttributes
97
from opentelemetry.sdk._events import EventLoggerProvider
10-
from opentelemetry.sdk.trace import ReadableSpan, Event as SpanEvent
8+
from opentelemetry.sdk._logs import LoggerProvider
9+
from opentelemetry.sdk.trace import Event as SpanEvent
10+
from opentelemetry.sdk.trace import ReadableSpan
1111

1212
# Message event types
1313
GEN_AI_SYSTEM_MESSAGE = "gen_ai.system.message"
@@ -678,4 +678,4 @@ def _get_gen_ai_event(self, name, span_ctx, timestamp, attributes, body):
678678
trace_id=span_ctx.trace_id,
679679
span_id=span_ctx.span_id,
680680
trace_flags=span_ctx.trace_flags,
681-
)
681+
)

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/patches/_bedrock_patches.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ def extract_attributes(self, attributes: _AttributeMapT):
220220
knowledge_base_id = self._call_context.params.get(_KNOWLEDGE_BASE_ID)
221221
if knowledge_base_id:
222222
attributes[AWS_BEDROCK_KNOWLEDGE_BASE_ID] = knowledge_base_id
223-
223+
224224
def on_success(self, span: Span, result: _BotoResultT, instrumentor_context=None):
225225
# Currently no attributes to extract from the result
226226
pass

aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_llo_handler.py

Lines changed: 98 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from unittest import TestCase
2-
from unittest.mock import MagicMock, patch, call
2+
from unittest.mock import MagicMock, call, patch
33

44
from amazon.opentelemetry.distro.llo_handler import LLOHandler
55
from opentelemetry._events import Event
@@ -67,21 +67,21 @@ def test_is_llo_attribute_no_match(self):
6767
self.assertFalse(self.llo_handler._is_llo_attribute("some.other.attribute"))
6868

6969
def test_is_llo_attribute_traceloop_match(self):
70-
"""
71-
Test _is_llo_attribute method with Traceloop patterns
72-
"""
73-
# Test exact matches for Traceloop attributes
74-
self.assertTrue(self.llo_handler._is_llo_attribute("traceloop.entity.input"))
75-
self.assertTrue(self.llo_handler._is_llo_attribute("traceloop.entity.output"))
70+
"""
71+
Test _is_llo_attribute method with Traceloop patterns
72+
"""
73+
# Test exact matches for Traceloop attributes
74+
self.assertTrue(self.llo_handler._is_llo_attribute("traceloop.entity.input"))
75+
self.assertTrue(self.llo_handler._is_llo_attribute("traceloop.entity.output"))
7676

7777
def test_is_llo_attribute_openlit_match(self):
78-
"""
79-
Test _is_llo_attribute method with OpenLit patterns
80-
"""
81-
# Test exact matches for direct OpenLit attributes
82-
self.assertTrue(self.llo_handler._is_llo_attribute("gen_ai.prompt"))
83-
self.assertTrue(self.llo_handler._is_llo_attribute("gen_ai.completion"))
84-
self.assertTrue(self.llo_handler._is_llo_attribute("gen_ai.content.revised_prompt"))
78+
"""
79+
Test _is_llo_attribute method with OpenLit patterns
80+
"""
81+
# Test exact matches for direct OpenLit attributes
82+
self.assertTrue(self.llo_handler._is_llo_attribute("gen_ai.prompt"))
83+
self.assertTrue(self.llo_handler._is_llo_attribute("gen_ai.completion"))
84+
self.assertTrue(self.llo_handler._is_llo_attribute("gen_ai.content.revised_prompt"))
8585

8686
def test_is_llo_attribute_openinference_match(self):
8787
"""
@@ -296,105 +296,96 @@ def test_extract_traceloop_events(self):
296296
self.assertEqual(output_event.timestamp, 1234567899) # end_time
297297

298298
def test_extract_openlit_direct_prompt(self):
299-
"""
300-
Test _extract_openlit_span_event_attributes with direct prompt attribute
301-
"""
302-
attributes = {
303-
"gen_ai.prompt": "user direct prompt",
304-
"gen_ai.system": "openlit"
305-
}
306-
307-
span = self._create_mock_span(attributes)
308-
309-
events = self.llo_handler._extract_openlit_span_event_attributes(span, attributes)
310-
311-
self.assertEqual(len(events), 1)
312-
event = events[0]
313-
self.assertEqual(event.name, "gen_ai.user.message")
314-
self.assertEqual(event.body["content"], "user direct prompt")
315-
self.assertEqual(event.body["role"], "user")
316-
self.assertEqual(event.attributes["gen_ai.system"], "openlit")
317-
self.assertEqual(event.attributes["original_attribute"], "gen_ai.prompt")
318-
self.assertEqual(event.timestamp, 1234567890) # start_time
299+
"""
300+
Test _extract_openlit_span_event_attributes with direct prompt attribute
301+
"""
302+
attributes = {"gen_ai.prompt": "user direct prompt", "gen_ai.system": "openlit"}
303+
304+
span = self._create_mock_span(attributes)
305+
306+
events = self.llo_handler._extract_openlit_span_event_attributes(span, attributes)
307+
308+
self.assertEqual(len(events), 1)
309+
event = events[0]
310+
self.assertEqual(event.name, "gen_ai.user.message")
311+
self.assertEqual(event.body["content"], "user direct prompt")
312+
self.assertEqual(event.body["role"], "user")
313+
self.assertEqual(event.attributes["gen_ai.system"], "openlit")
314+
self.assertEqual(event.attributes["original_attribute"], "gen_ai.prompt")
315+
self.assertEqual(event.timestamp, 1234567890) # start_time
319316

320317
def test_extract_openlit_direct_completion(self):
321-
"""
322-
Test _extract_openlit_span_event_attributes with direct completion attribute
323-
"""
324-
attributes = {
325-
"gen_ai.completion": "assistant direct completion",
326-
"gen_ai.system": "openlit"
327-
}
328-
329-
span = self._create_mock_span(attributes)
330-
span.end_time = 1234567899
331-
332-
events = self.llo_handler._extract_openlit_span_event_attributes(span, attributes)
333-
334-
self.assertEqual(len(events), 1)
335-
event = events[0]
336-
self.assertEqual(event.name, "gen_ai.assistant.message")
337-
self.assertEqual(event.body["content"], "assistant direct completion")
338-
self.assertEqual(event.body["role"], "assistant")
339-
self.assertEqual(event.attributes["gen_ai.system"], "openlit")
340-
self.assertEqual(event.attributes["original_attribute"], "gen_ai.completion")
341-
self.assertEqual(event.timestamp, 1234567899) # end_time
318+
"""
319+
Test _extract_openlit_span_event_attributes with direct completion attribute
320+
"""
321+
attributes = {"gen_ai.completion": "assistant direct completion", "gen_ai.system": "openlit"}
322+
323+
span = self._create_mock_span(attributes)
324+
span.end_time = 1234567899
325+
326+
events = self.llo_handler._extract_openlit_span_event_attributes(span, attributes)
327+
328+
self.assertEqual(len(events), 1)
329+
event = events[0]
330+
self.assertEqual(event.name, "gen_ai.assistant.message")
331+
self.assertEqual(event.body["content"], "assistant direct completion")
332+
self.assertEqual(event.body["role"], "assistant")
333+
self.assertEqual(event.attributes["gen_ai.system"], "openlit")
334+
self.assertEqual(event.attributes["original_attribute"], "gen_ai.completion")
335+
self.assertEqual(event.timestamp, 1234567899) # end_time
342336

343337
def test_extract_openlit_all_attributes(self):
344-
"""
345-
Test _extract_openlit_span_event_attributes with all OpenLit attributes
346-
"""
347-
attributes = {
348-
"gen_ai.prompt": "user prompt",
349-
"gen_ai.completion": "assistant response",
350-
"gen_ai.content.revised_prompt": "revised prompt",
351-
"gen_ai.system": "langchain"
352-
}
353-
354-
span = self._create_mock_span(attributes)
355-
span.end_time = 1234567899
356-
357-
events = self.llo_handler._extract_openlit_span_event_attributes(span, attributes)
358-
359-
self.assertEqual(len(events), 3)
360-
361-
# Check that all events have the correct system
362-
for event in events:
363-
self.assertEqual(event.attributes["gen_ai.system"], "langchain")
364-
365-
# Check we have the expected event types
366-
event_types = {event.name for event in events}
367-
self.assertIn("gen_ai.user.message", event_types)
368-
self.assertIn("gen_ai.assistant.message", event_types)
369-
self.assertIn("gen_ai.system.message", event_types)
370-
371-
# Check original attributes
372-
original_attrs = {event.attributes["original_attribute"] for event in events}
373-
self.assertIn("gen_ai.prompt", original_attrs)
374-
self.assertIn("gen_ai.completion", original_attrs)
375-
self.assertIn("gen_ai.content.revised_prompt", original_attrs)
338+
"""
339+
Test _extract_openlit_span_event_attributes with all OpenLit attributes
340+
"""
341+
attributes = {
342+
"gen_ai.prompt": "user prompt",
343+
"gen_ai.completion": "assistant response",
344+
"gen_ai.content.revised_prompt": "revised prompt",
345+
"gen_ai.system": "langchain",
346+
}
347+
348+
span = self._create_mock_span(attributes)
349+
span.end_time = 1234567899
350+
351+
events = self.llo_handler._extract_openlit_span_event_attributes(span, attributes)
352+
353+
self.assertEqual(len(events), 3)
354+
355+
# Check that all events have the correct system
356+
for event in events:
357+
self.assertEqual(event.attributes["gen_ai.system"], "langchain")
358+
359+
# Check we have the expected event types
360+
event_types = {event.name for event in events}
361+
self.assertIn("gen_ai.user.message", event_types)
362+
self.assertIn("gen_ai.assistant.message", event_types)
363+
self.assertIn("gen_ai.system.message", event_types)
364+
365+
# Check original attributes
366+
original_attrs = {event.attributes["original_attribute"] for event in events}
367+
self.assertIn("gen_ai.prompt", original_attrs)
368+
self.assertIn("gen_ai.completion", original_attrs)
369+
self.assertIn("gen_ai.content.revised_prompt", original_attrs)
376370

377371
def test_extract_openlit_revised_prompt(self):
378-
"""
379-
Test _extract_openlit_span_event_attributes with revised prompt attribute
380-
"""
381-
attributes = {
382-
"gen_ai.content.revised_prompt": "revised system prompt",
383-
"gen_ai.system": "openlit"
384-
}
385-
386-
span = self._create_mock_span(attributes)
387-
388-
events = self.llo_handler._extract_openlit_span_event_attributes(span, attributes)
389-
390-
self.assertEqual(len(events), 1)
391-
event = events[0]
392-
self.assertEqual(event.name, "gen_ai.system.message")
393-
self.assertEqual(event.body["content"], "revised system prompt")
394-
self.assertEqual(event.body["role"], "system")
395-
self.assertEqual(event.attributes["gen_ai.system"], "openlit")
396-
self.assertEqual(event.attributes["original_attribute"], "gen_ai.content.revised_prompt")
397-
self.assertEqual(event.timestamp, 1234567890) # start_time
372+
"""
373+
Test _extract_openlit_span_event_attributes with revised prompt attribute
374+
"""
375+
attributes = {"gen_ai.content.revised_prompt": "revised system prompt", "gen_ai.system": "openlit"}
376+
377+
span = self._create_mock_span(attributes)
378+
379+
events = self.llo_handler._extract_openlit_span_event_attributes(span, attributes)
380+
381+
self.assertEqual(len(events), 1)
382+
event = events[0]
383+
self.assertEqual(event.name, "gen_ai.system.message")
384+
self.assertEqual(event.body["content"], "revised system prompt")
385+
self.assertEqual(event.body["role"], "system")
386+
self.assertEqual(event.attributes["gen_ai.system"], "openlit")
387+
self.assertEqual(event.attributes["original_attribute"], "gen_ai.content.revised_prompt")
388+
self.assertEqual(event.timestamp, 1234567890) # start_time
398389

399390
def test_extract_openinference_direct_attributes(self):
400391
"""

0 commit comments

Comments
 (0)