12
12
from ddtrace .contrib .internal .botocore .patch import unpatch
13
13
from ddtrace .llmobs import LLMObs
14
14
from ddtrace .llmobs import LLMObs as llmobs_service
15
- from ddtrace .llmobs ._constants import AGENTLESS_BASE_URL
16
- from ddtrace .llmobs ._writer import LLMObsSpanWriter
15
+ from ddtrace .llmobs ._constants import AGENTLESS_SPAN_BASE_URL
17
16
from ddtrace .trace import Pin
18
17
from tests .contrib .botocore .bedrock_utils import _MOCK_RESPONSE_DATA
19
18
from tests .contrib .botocore .bedrock_utils import _MODELS
22
21
from tests .contrib .botocore .bedrock_utils import bedrock_converse_args_with_system_and_tool
23
22
from tests .contrib .botocore .bedrock_utils import create_bedrock_converse_request
24
23
from tests .contrib .botocore .bedrock_utils import get_request_vcr
24
+ from tests .llmobs ._utils import TestLLMObsSpanWriter
25
25
from tests .llmobs ._utils import _expected_llmobs_llm_span_event
26
26
from tests .utils import DummyTracer
27
27
from tests .utils import override_global_config
28
28
29
29
30
- class TestLLMObsSpanWriter (LLMObsSpanWriter ):
31
- def __init__ (self , * args , ** kwargs ):
32
- super ().__init__ (* args , ** kwargs )
33
- self .events = []
34
-
35
- def enqueue (self , event ):
36
- self .events .append (event )
37
-
38
-
39
30
@pytest .fixture (scope = "session" )
40
31
def request_vcr ():
41
32
yield get_request_vcr ()
@@ -58,7 +49,7 @@ def aws_credentials():
58
49
59
50
60
51
@pytest .fixture
61
- def boto3 (aws_credentials , mock_llmobs_span_writer , ddtrace_global_config ):
52
+ def boto3 (aws_credentials , llmobs_span_writer , ddtrace_global_config ):
62
53
global_config = {"_dd_api_key" : "<not-a-real-api_key>" }
63
54
global_config .update (ddtrace_global_config )
64
55
with override_global_config (global_config ):
@@ -93,21 +84,9 @@ def bedrock_client_proxy(boto3):
93
84
yield bedrock_client
94
85
95
86
96
- @pytest .fixture
97
- def mock_llmobs_span_writer ():
98
- patcher = mock .patch ("ddtrace.llmobs._llmobs.LLMObsSpanWriter" )
99
- try :
100
- LLMObsSpanWriterMock = patcher .start ()
101
- m = mock .MagicMock ()
102
- LLMObsSpanWriterMock .return_value = m
103
- yield m
104
- finally :
105
- patcher .stop ()
106
-
107
-
108
87
@pytest .fixture
109
88
def llmobs_span_writer ():
110
- agentless_url = "{}.{}" .format (AGENTLESS_BASE_URL , "datad0g.com" )
89
+ agentless_url = "{}.{}" .format (AGENTLESS_SPAN_BASE_URL , "datad0g.com" )
111
90
yield TestLLMObsSpanWriter (is_agentless = True , _agentless_url = agentless_url , interval = 1.0 , timeout = 1.0 )
112
91
113
92
@@ -750,15 +729,15 @@ def test_llmobs_error(self, ddtrace_global_config, bedrock_client, mock_tracer,
750
729
)
751
730
752
731
@pytest .mark .skipif (BOTO_VERSION < (1 , 34 , 131 ), reason = "Converse API not available until botocore 1.34.131" )
753
- def test_llmobs_converse (cls , bedrock_client , mock_llmobs_span_writer , request_vcr , mock_tracer , llmobs_events ):
732
+ def test_llmobs_converse (cls , bedrock_client , request_vcr , mock_tracer , llmobs_events ):
754
733
request_params = create_bedrock_converse_request (** bedrock_converse_args_with_system_and_tool )
755
734
with request_vcr .use_cassette ("bedrock_converse.yaml" ):
756
735
response = bedrock_client .converse (** request_params )
757
736
758
737
span = mock_tracer .pop_traces ()[0 ][0 ]
759
738
assert len (llmobs_events ) == 1
760
739
761
- llmobs_events [0 ] == _expected_llmobs_llm_span_event (
740
+ assert llmobs_events [0 ] == _expected_llmobs_llm_span_event (
762
741
span ,
763
742
model_name = "claude-3-sonnet-20240229-v1:0" ,
764
743
model_provider = "anthropic" ,
@@ -793,9 +772,7 @@ def test_llmobs_converse(cls, bedrock_client, mock_llmobs_span_writer, request_v
793
772
)
794
773
795
774
@pytest .mark .skipif (BOTO_VERSION < (1 , 34 , 131 ), reason = "Converse API not available until botocore 1.34.131" )
796
- def test_llmobs_converse_error (
797
- self , bedrock_client , mock_llmobs_span_writer , request_vcr , mock_tracer , llmobs_events
798
- ):
775
+ def test_llmobs_converse_error (self , bedrock_client , request_vcr , mock_tracer , llmobs_events ):
799
776
"""Test error handling for the Bedrock Converse API."""
800
777
import botocore
801
778
@@ -825,9 +802,7 @@ def test_llmobs_converse_error(
825
802
)
826
803
827
804
@pytest .mark .skipif (BOTO_VERSION < (1 , 34 , 131 ), reason = "Converse API not available until botocore 1.34.131" )
828
- def test_llmobs_converse_stream (
829
- cls , bedrock_client , mock_llmobs_span_writer , request_vcr , mock_tracer , llmobs_events
830
- ):
805
+ def test_llmobs_converse_stream (cls , bedrock_client , request_vcr , mock_tracer , llmobs_events ):
831
806
output_msg = ""
832
807
request_params = create_bedrock_converse_request (** bedrock_converse_args_with_system_and_tool )
833
808
with request_vcr .use_cassette ("bedrock_converse_stream.yaml" ):
@@ -840,7 +815,7 @@ def test_llmobs_converse_stream(
840
815
span = mock_tracer .pop_traces ()[0 ][0 ]
841
816
assert len (llmobs_events ) == 1
842
817
843
- llmobs_events [0 ] == _expected_llmobs_llm_span_event (
818
+ assert llmobs_events [0 ] == _expected_llmobs_llm_span_event (
844
819
span ,
845
820
model_name = "claude-3-sonnet-20240229-v1:0" ,
846
821
model_provider = "anthropic" ,
0 commit comments