Skip to content

Commit cd7be33

Browse files
committed
Release note, tests
1 parent ef8113c commit cd7be33

File tree

4 files changed

+28
-3
lines changed

4 files changed

+28
-3
lines changed

ddtrace/llmobs/_writer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import atexit
2-
import http.client as httplib
32
from typing import Any
43
from typing import Dict
54
from typing import List
@@ -19,6 +18,7 @@
1918
from ddtrace.internal import forksafe
2019
from ddtrace.internal.logger import get_logger
2120
from ddtrace.internal.periodic import PeriodicService
21+
from ddtrace.internal.utils.http import Response
2222
from ddtrace.internal.utils.http import get_connection
2323
from ddtrace.internal.utils.retry import fibonacci_backoff_with_jitter
2424
from ddtrace.llmobs import _telemetry as telemetry
@@ -132,7 +132,7 @@ def __init__(
132132
self._send_payload_with_retry = fibonacci_backoff_with_jitter(
133133
attempts=self.RETRY_ATTEMPTS,
134134
initial_wait=0.618 * self.interval / (1.618**self.RETRY_ATTEMPTS) / 2,
135-
until=lambda result: isinstance(result, httplib.HTTPResponse),
135+
until=lambda result: isinstance(result, Response),
136136
)(self._send_payload)
137137

138138
def start(self, *args, **kwargs):
@@ -217,7 +217,7 @@ def _send_payload(self, payload: bytes, num_events: int):
217217
telemetry.record_dropped_payload(num_events, event_type=self.EVENT_TYPE, error="http_error")
218218
else:
219219
logger.debug("sent %d LLMObs %s events to %s", num_events, self.EVENT_TYPE, self._url)
220-
return resp
220+
return Response.from_http_response(resp)
221221
except Exception:
222222
logger.error(
223223
"failed to send %d LLMObs %s events to %s", num_events, self.EVENT_TYPE, self._intake, exc_info=True
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
fixes:
3+
- |
4+
LLM Observability: Resolves an issue where spans and evaluation metrics were not being sent via Unix sockets.

tests/llmobs/test_llmobs_eval_metric_agent_writer.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
INTAKE_ENDPOINT = agent_config.trace_agent_url
1414
AGENT_PROXY_URL = f"{INTAKE_ENDPOINT}{EVP_PROXY_AGENT_BASE_PATH}{EVAL_ENDPOINT}"
15+
UNIX_AGENT_INTAKE = "unix:///var/run/datadog/apm.sock"
16+
UNIX_AGENT_PROXY_URL = "{}{}{}".format(UNIX_AGENT_INTAKE, EVP_PROXY_AGENT_BASE_PATH, EVAL_ENDPOINT)
1517

1618

1719
def test_writer_start(mock_writer_logs):
@@ -21,6 +23,15 @@ def test_writer_start(mock_writer_logs):
2123
llmobs_eval_metric_writer.stop()
2224

2325

26+
def test_unix_socket_writer_start(mock_writer_logs):
27+
llmobs_eval_metric_writer = LLMObsEvalMetricWriter(1, 1, is_agentless=False, _override_url=UNIX_AGENT_INTAKE)
28+
llmobs_eval_metric_writer.start()
29+
mock_writer_logs.debug.assert_has_calls(
30+
[mock.call("started %r to %r", "LLMObsEvalMetricWriter", UNIX_AGENT_PROXY_URL)]
31+
)
32+
llmobs_eval_metric_writer.stop()
33+
34+
2435
def test_buffer_limit(mock_writer_logs):
2536
llmobs_eval_metric_writer = LLMObsEvalMetricWriter(1, 1, is_agentless=False)
2637
for _ in range(1001):

tests/llmobs/test_llmobs_span_agent_writer.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,22 @@
1616

1717
INTAKE_ENDPOINT = agent_config.trace_agent_url
1818
AGENT_PROXY_URL = "{}{}{}".format(INTAKE_ENDPOINT, EVP_PROXY_AGENT_BASE_PATH, SPAN_ENDPOINT)
19+
UNIX_AGENT_INTAKE = "unix:///var/run/datadog/apm.sock"
20+
UNIX_AGENT_PROXY_URL = "{}{}{}".format(UNIX_AGENT_INTAKE, EVP_PROXY_AGENT_BASE_PATH, SPAN_ENDPOINT)
1921

2022

2123
def test_writer_start(mock_writer_logs):
2224
llmobs_span_writer = LLMObsSpanWriter(1, 1, is_agentless=False)
2325
llmobs_span_writer.start()
2426
mock_writer_logs.debug.assert_has_calls([mock.call("started %r to %r", "LLMObsSpanWriter", AGENT_PROXY_URL)])
27+
llmobs_span_writer.stop()
28+
29+
30+
def test_unix_socket_writer_start(mock_writer_logs):
31+
llmobs_span_writer = LLMObsSpanWriter(1, 1, is_agentless=False, _override_url=UNIX_AGENT_INTAKE)
32+
llmobs_span_writer.start()
33+
mock_writer_logs.debug.assert_has_calls([mock.call("started %r to %r", "LLMObsSpanWriter", UNIX_AGENT_PROXY_URL)])
34+
llmobs_span_writer.stop()
2535

2636

2737
def test_buffer_limit(mock_writer_logs):

0 commit comments

Comments
 (0)