Skip to content

Commit 171f708

Browse files
authored
[translator] refine evals for llm calls (#66)
* feat: [traceloop] fix trace and evals for llm calls * tsp: fix typo fetch 'content' field from the traceloop entity input/output * tsp: add check to output message This avoids building invocation when 'parts' is empty * tsp: explicitly disable deepeval telemetry with some versions * splunk-deepeval: Set min-max deepeval version This is done to make it compatible with traceloop-sdk * deployment: revert to 0.47.5 * revert to working tsp * remove filtering span exporter * address review comments * add old requirements use pypi for splunk deepeval wrapper
1 parent 38c6cb9 commit 171f708

File tree

11 files changed

+340
-462
lines changed

11 files changed

+340
-462
lines changed

instrumentation-genai/opentelemetry-instrumentation-langchain/examples/multi_agent_travel_planner/traceloop/.env

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ OPENAI_API_KEY=sk-YOUR_API_KEY
1111
# OTEL_EXPORTER_OTLP_PROTOCOL=grpc
1212

1313
# Traces will use this service.name
14-
OTEL_SERVICE_NAME=travel-plan-tl
14+
OTEL_SERVICE_NAME=travel-planner-tl
1515

1616
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
1717
OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental
@@ -20,4 +20,6 @@ OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT_MODE=SPAN_AND_EVENT
2020
OTEL_INSTRUMENTATION_GENAI_EMITTERS=span_metric_event,splunk
2121
OTEL_INSTRUMENTATION_GENAI_EMITTERS_EVALUATION=replace-category:SplunkEvaluationResults
2222
OTEL_INSTRUMENTATION_GENAI_EVALS_RESULTS_AGGREGATION=true
23-
OTEL_INSTRUMENTATION_GENAI_DEBUG=true
23+
OTEL_INSTRUMENTATION_GENAI_DEBUG=false
24+
25+
DEEPEVAL_TELEMETRY_OPT_OUT="YES"
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,18 @@ COPY util/opentelemetry-util-genai-evals /app/opentelemetry-util-genai-evals
1818
COPY util/opentelemetry-util-genai-evals-deepeval /app/opentelemetry-util-genai-evals-deepeval
1919
COPY util/opentelemetry-util-genai-emitters-splunk /app/opentelemetry-util-genai-emitters-splunk
2020

21-
# Set working directory to the example
22-
WORKDIR /app/opentelemetry-instrumentation-langchain/examples/multi_agent_travel_planner
21+
# Set working directory to the traceloop example
22+
WORKDIR /app/opentelemetry-instrumentation-langchain/examples/multi_agent_travel_planner/traceloop
2323

24-
# Install Python dependencies from requirements.traceloop.txt (excluding local -e packages)
25-
# First, create a temporary requirements file without the local editable packages
26-
RUN grep -v "^-e \.\." requirements.traceloop.txt > /tmp/requirements_external.txt && \
24+
# Install Python dependencies from requirements.traceloop.txt (excluding local -e packages and git+ssh)
25+
# First, create a temporary requirements file without the local editable packages and SSH git dependencies
26+
RUN grep -v "^-e" requirements.traceloop.txt | grep -v "git+ssh" > /tmp/requirements_external.txt && \
2727
pip install --no-cache-dir -r /tmp/requirements_external.txt && \
2828
rm /tmp/requirements_external.txt
2929

3030
# Install the local packages in editable mode
3131
# The Traceloop translator will enable zero-code instrumentation via .pth file
32+
# splunk-otel-instrumentation-langchain IS installed
3233
RUN cd /app/opentelemetry-util-genai && \
3334
pip install --no-cache-dir --no-deps -e . && \
3435
cd /app/opentelemetry-util-genai-evals && \
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
FROM python:3.12-slim
2+
3+
# Define Traceloop SDK version as build arg (also used for opentelemetry-instrumentation-* packages)
4+
ARG TRACELOOP_VERSION=0.47.5
5+
6+
WORKDIR /app
7+
8+
# Install git for pip dependencies
9+
RUN apt-get update && apt-get install -y --no-install-recommends \
10+
git \
11+
&& rm -rf /var/lib/apt/lists/*
12+
13+
# Copy required packages (build context is repo root)
14+
COPY util/opentelemetry-util-genai-traceloop-translator /app/opentelemetry-util-genai-traceloop-translator
15+
COPY instrumentation-genai/opentelemetry-instrumentation-langchain/examples/multi_agent_travel_planner /app/opentelemetry-instrumentation-langchain/examples/multi_agent_travel_planner
16+
17+
WORKDIR /app/opentelemetry-instrumentation-langchain/examples/multi_agent_travel_planner/traceloop
18+
19+
# Install Python dependencies (excluding local -e packages and git+ssh dependencies)
20+
RUN pip install --no-cache-dir -r requirements.traceloop.txt
21+
22+
# Verify packages are installed correctly
23+
RUN python3 -c "from opentelemetry.util.genai.handler import get_telemetry_handler; print('✓ GenAI handler available')" && \
24+
python3 -c "from opentelemetry.util.genai.evals import create_evaluation_manager; print('✓ Evaluation manager available')" && \
25+
python3 -c "import opentelemetry.util.genai.emitters.splunk; print('✓ Splunk emitters available')" && \
26+
python3 -c "import opentelemetry.util.evaluator.deepeval; print('✓ Deepeval evaluator module available')" && \
27+
python3 -c "import deepeval; print('✓ Deepeval SDK installed')" && \
28+
python3 -c "from opentelemetry.util.genai.traceloop import enable_traceloop_translator; print('✓ Traceloop translator available')"
29+
30+
# Make the script executable
31+
RUN chmod +x main_traceloop.py
32+
33+
# Set default environment variables
34+
ENV OTEL_PYTHON_LOG_CORRELATION=true \
35+
OTEL_PYTHON_LOG_LEVEL=info \
36+
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
37+
PYTHONUNBUFFERED=1
38+
39+
# Run the Traceloop version
40+
CMD ["python3", "main_traceloop.py"]
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@ metadata:
77
app: trip-planner-tl
88
component: telemetry
99
annotations:
10-
description: "Multi-agent trip planner with Traceloop translator and GenAI evaluations (Deepeval telemetry disabled)"
11-
git-commit: "20251107-164153"
10+
description: "Multi-agent trip planner with Traceloop translator and GenAI evaluations. splunk-otel-instrumentation-langchain is installed"
11+
git-commit: "1b4045e"
1212
spec:
13-
# Run every 10 minutes from Nov 7 (Fri) through Nov 10 (Mon) 10 AM PST
14-
# Covers: Fri Nov 7 (now) through Mon Nov 10 morning
15-
# NOTE: Manually suspend on Monday Nov 10 at 10 AM PST
16-
schedule: "*/10 * 7-10 11 *"
13+
# Run every 30 minutes from 8 AM to 5 PM PST on weekdays (Monday-Friday)
14+
# Offset from travel-planner-tl by 45 minutes (runs at :15 and :45)
15+
schedule: "15,45 8-17 * * 1-5"
1716
timeZone: "America/Los_Angeles"
1817
suspend: false
1918

@@ -38,7 +37,7 @@ spec:
3837
containers:
3938
- name: trip-planner-traceloop
4039
# Multi-platform image (amd64, arm64) with git commit hash tag
41-
image: admehra621/trip-planner-tl:20251107-164153
40+
image: admehra621/trip-planner-tl-lc:1b4045e
4241
imagePullPolicy: Always
4342

4443
env:
@@ -48,7 +47,7 @@ spec:
4847

4948
# === OpenTelemetry Resource Attributes ===
5049
- name: OTEL_RESOURCE_ATTRIBUTES
51-
value: "deployment.environment=o11y-inframon-ai,git.commit.id=20251107-164153"
50+
value: "deployment.environment=o11y-inframon-ai,git.commit.id=1b4045e"
5251

5352
# === Service name for telemetry ===
5453
- name: OTEL_SERVICE_NAME

instrumentation-genai/opentelemetry-instrumentation-langchain/examples/multi_agent_travel_planner/traceloop/cronjob-tl.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ metadata:
77
app: travel-planner-tl
88
component: telemetry
99
annotations:
10-
description: "Multi-agent travel planner with Traceloop translator and GenAI evaluations (Deepeval telemetry disabled)"
11-
git-commit: "2b4a41a"
10+
description: "Multi-agent travel planner with Traceloop translator and GenAI evaluations. splunk-otel-instrumentation-langchain is NOT installed"
11+
git-commit: "adc36a2"
1212
spec:
1313
# Run every 30 minutes from 8 AM to 5 PM PST on weekdays (Monday-Friday)
1414
schedule: "*/30 8-17 * * 1-5"
@@ -36,7 +36,7 @@ spec:
3636
containers:
3737
- name: travel-planner-traceloop
3838
# Multi-platform image (amd64, arm64) with git commit hash tag
39-
image: admehra621/travel-planner-tl:2b4a41a
39+
image: admehra621/travel-planner-tl:adc36a2
4040
imagePullPolicy: Always
4141

4242
env:
@@ -46,7 +46,7 @@ spec:
4646

4747
# === OpenTelemetry Resource Attributes ===
4848
- name: OTEL_RESOURCE_ATTRIBUTES
49-
value: "deployment.environment=o11y-inframon-ai,git.commit.id=2b4a41a"
49+
value: "deployment.environment=o11y-inframon-ai,git.commit.id=adc36a2"
5050

5151
# === Service name for telemetry ===
5252
- name: OTEL_SERVICE_NAME
@@ -64,7 +64,7 @@ spec:
6464

6565
# === Deepeval Telemetry Opt-Out ===
6666
- name: DEEPEVAL_TELEMETRY_OPT_OUT
67-
value: "1"
67+
value: "YES"
6868

6969
# === GenAI Content Capture ===
7070
- name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
opentelemetry-util-http==0.59b0
2+
orjson==3.11.4
3+
ormsgpack==1.11.0
4+
packaging==25.0
5+
platformdirs==4.5.0
6+
pluggy==1.6.0
7+
portalocker==3.2.0
8+
posthog==3.25.0
9+
pre-commit==3.7.0
10+
propcache==0.4.1
11+
protobuf==6.33.0
12+
pyasn1==0.6.1
13+
pyasn1_modules==0.4.2
14+
pydantic==2.12.3
15+
pydantic-settings==2.11.0
16+
pydantic_core==2.41.4
17+
pyfiglet==1.0.4
18+
Pygments==2.19.2
19+
pylint==3.0.2
20+
pyright==1.1.404
21+
pytest==8.4.2
22+
pytest-asyncio==1.2.0
23+
pytest-cov==4.1.0
24+
pytest-repeat==0.9.4
25+
pytest-rerunfailures==12.0
26+
pytest-xdist==3.8.0
27+
python-dateutil==2.9.0.post0
28+
python-dotenv==1.2.1
29+
PyYAML==6.0.3
30+
readme-renderer==42.0
31+
regex==2025.10.23
32+
requests==2.32.5
33+
requests-toolbelt==1.0.0
34+
rich==14.2.0
35+
rsa==4.9.1
36+
ruamel.yaml==0.17.21
37+
ruff==0.6.9
38+
sentry-sdk==2.43.0
39+
setuptools==80.9.0
40+
shellingham==1.5.4
41+
six==1.17.0
42+
sniffio==1.3.1
43+
snowballstemmer==3.0.1
44+
Sphinx==7.1.2
45+
sphinx-autodoc-typehints==1.25.2
46+
sphinx-rtd-theme==2.0.0rc4
47+
sphinxcontrib-applehelp==2.0.0
48+
sphinxcontrib-devhelp==2.0.0
49+
sphinxcontrib-htmlhelp==2.1.0
50+
sphinxcontrib-jquery==4.1
51+
sphinxcontrib-jsmath==1.0.1
52+
sphinxcontrib-qthelp==2.0.0
53+
sphinxcontrib-serializinghtml==2.0.0
54+
# Editable install with no version control (splunk-otel-genai-emitters-splunk==0.1b0.dev0)
55+
-e /app/opentelemetry-util-genai-emitters-splunk
56+
# Editable install with no version control (splunk-otel-genai-evals-deepeval==0.1b0.dev0)
57+
-e /app/opentelemetry-util-genai-evals-deepeval
58+
# Editable install with no version control (splunk-otel-util-genai==0.1b0.dev0)
59+
-e /app/opentelemetry-util-genai
60+
# Editable install with no version control (splunk-otel-util-genai-evals==0.1b0.dev0)
61+
-e /app/opentelemetry-util-genai-evals
62+
# Editable install with no version control (splunk-otel-util-genai-translator-traceloop==0.0.0.dev0)
63+
-e /app/opentelemetry-util-genai-traceloop-translator
64+
tabulate==0.9.0
65+
tenacity==9.1.2
66+
tiktoken==0.12.0
67+
tokenizers==0.22.1
68+
tomlkit==0.13.3
69+
tqdm==4.67.1
70+
traceloop-sdk==0.47.5
71+
typer==0.20.0
72+
typer-slim==0.20.0
73+
typing-inspection==0.4.2
74+
typing_extensions==4.15.0
75+
urllib3==2.5.0
76+
virtualenv==20.35.4
77+
webencodings==0.5.1
78+
websockets==15.0.1
79+
wheel==0.45.1
80+
wrapt==1.17.3
81+
xxhash==3.6.0
82+
yarl==1.22.0
83+
zipp==3.23.0
84+
zstandard==0.25.0

instrumentation-genai/opentelemetry-instrumentation-langchain/examples/multi_agent_travel_planner/traceloop/requirements.traceloop.txt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ opentelemetry-exporter-otlp-proto-common @ git+https://github.com/open-telemetry
7878
opentelemetry-exporter-otlp-proto-grpc @ git+https://github.com/open-telemetry/opentelemetry-python.git@1f68134481c46e476a127b61a36dc69889275d15#subdirectory=exporter/opentelemetry-exporter-otlp-proto-grpc
7979
opentelemetry-exporter-otlp-proto-http==1.38.0
8080
opentelemetry-instrumentation @ git+https://github.com/open-telemetry/opentelemetry-python-contrib.git@071f68697432e7e57b31238a5998dc4c1325855c#subdirectory=opentelemetry-instrumentation
81+
# OpenTelemetry instrumentation packages - version must match traceloop-sdk version (0.47.5)
8182
opentelemetry-instrumentation-alephalpha==0.47.5
8283
opentelemetry-instrumentation-anthropic==0.47.5
8384
opentelemetry-instrumentation-bedrock==0.47.5
@@ -170,11 +171,12 @@ sphinxcontrib-jquery==4.1
170171
sphinxcontrib-jsmath==1.0.1
171172
sphinxcontrib-qthelp==2.0.0
172173
sphinxcontrib-serializinghtml==2.0.0
173-
-e git+ssh://[email protected]/signalfx/splunk-otel-python-contrib.git@2b4a41abac7725b53c82f480833c874aca0af072#egg=splunk_otel_genai_evals_deepeval&subdirectory=util/opentelemetry-util-genai-evals-deepeval
174-
-e git+ssh://[email protected]/signalfx/splunk-otel-python-contrib.git@2b4a41abac7725b53c82f480833c874aca0af072#egg=splunk_otel_instrumentation_langchain&subdirectory=instrumentation-genai/opentelemetry-instrumentation-langchain
175-
-e git+ssh://[email protected]/signalfx/splunk-otel-python-contrib.git@2b4a41abac7725b53c82f480833c874aca0af072#egg=splunk_otel_util_genai&subdirectory=util/opentelemetry-util-genai
176-
-e git+ssh://[email protected]/signalfx/splunk-otel-python-contrib.git@2b4a41abac7725b53c82f480833c874aca0af072#egg=splunk_otel_util_genai_evals&subdirectory=util/opentelemetry-util-genai-evals
177-
-e git+ssh://[email protected]/signalfx/splunk-otel-python-contrib.git@2b4a41abac7725b53c82f480833c874aca0af072#egg=splunk_otel_util_genai_translator_traceloop&subdirectory=util/opentelemetry-util-genai-traceloop-translator
174+
splunk-otel-genai-evals-deepeval>=0.1.6
175+
splunk-otel-util-genai
176+
splunk-otel-util-genai-evals
177+
splunk-otel-genai-emitters-splunk
178+
# Editable install with no version control (splunk-otel-util-genai-translator-traceloop==0.0.0.dev0)
179+
-e /app/opentelemetry-util-genai-traceloop-translator
178180
tabulate==0.9.0
179181
tenacity==9.1.2
180182
tiktoken==0.12.0

util/opentelemetry-util-genai-traceloop-translator/src/opentelemetry/util/genai/processor/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
"""Traceloop span processor and transformation utilities."""
1616

17-
from .filtering_span_processor import FilteringSpanProcessor
1817
from .traceloop_span_processor import TraceloopSpanProcessor
1918

20-
__all__ = ["TraceloopSpanProcessor", "FilteringSpanProcessor"]
19+
__all__ = ["TraceloopSpanProcessor"]

0 commit comments

Comments
 (0)