Skip to content

Commit 4ecaf95

Browse files
committed
changes made according to linter:
- change camel to snake case - added headers
1 parent 8475d99 commit 4ecaf95

File tree

10 files changed

+88
-38
lines changed

10 files changed

+88
-38
lines changed

ai_agent_instrumentation/opentelemetry-instrumentation-langchain-v2/src/opentelemetry/instrumentation/langchain_v2/__init__.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# pylint: disable=no-self-use
5+
16
from typing import Collection
27

38
from wrapt import wrap_function_wrapper
@@ -15,19 +20,19 @@
1520

1621
class LangChainInstrumentor(BaseInstrumentor):
1722

18-
def instrumentation_dependencies(cls) -> Collection[str]:
23+
def instrumentation_dependencies(self, cls) -> Collection[str]:
1924
return _instruments
2025

2126
def _instrument(self, **kwargs):
2227
tracer_provider = kwargs.get("tracer_provider")
2328
tracer = get_tracer(__name__, __version__, tracer_provider)
2429

25-
otelCallbackHandler = OpenTelemetryCallbackHandler(tracer)
30+
otel_callback_handler = OpenTelemetryCallbackHandler(tracer)
2631

2732
wrap_function_wrapper(
2833
module="langchain_core.callbacks",
2934
name="BaseCallbackManager.__init__",
30-
wrapper=_BaseCallbackManagerInitWrapper(otelCallbackHandler),
35+
wrapper=_BaseCallbackManagerInitWrapper(otel_callback_handler),
3136
)
3237

3338
def _uninstrument(self, **kwargs):
@@ -53,5 +58,5 @@ def __call__(
5358
for handler in instance.inheritable_handlers:
5459
if isinstance(handler, OpenTelemetryCallbackHandler):
5560
return None
56-
else:
57-
instance.add_handler(self.callback_handler, True)
61+
62+
instance.add_handler(self.callback_handler, True)

ai_agent_instrumentation/opentelemetry-instrumentation-langchain-v2/src/opentelemetry/instrumentation/langchain_v2/callback_handler.py

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# pylint: disable=no-self-use
5+
16
import time
27
from dataclasses import dataclass, field
38
from typing import Any, Optional
@@ -9,7 +14,7 @@
914
from langchain_core.outputs import LLMResult
1015

1116
from opentelemetry import context as context_api
12-
from opentelemetry.instrumentation.langchain_v2.span_attributes import GenAIOperationValues, Span_Attributes
17+
from opentelemetry.instrumentation.langchain_v2.span_attributes import GenAIOperationValues, SpanAttributes
1318
from opentelemetry.instrumentation.utils import _SUPPRESS_INSTRUMENTATION_KEY
1419
from opentelemetry.trace import SpanKind, set_span_in_context
1520
from opentelemetry.trace.span import Span
@@ -31,7 +36,7 @@ def _set_request_params(span, kwargs, span_holder: SpanHolder):
3136
if (model := kwargs.get(model_tag)) is not None:
3237
span_holder.request_model = model
3338
break
34-
elif (model := (kwargs.get("invocation_params") or {}).get(model_tag)) is not None:
39+
if (model := (kwargs.get("invocation_params") or {}).get(model_tag)) is not None:
3540
span_holder.request_model = model
3641
break
3742
else:
@@ -40,8 +45,8 @@ def _set_request_params(span, kwargs, span_holder: SpanHolder):
4045
if span_holder.request_model is None:
4146
model = None
4247

43-
_set_span_attribute(span, Span_Attributes.GEN_AI_REQUEST_MODEL, model)
44-
_set_span_attribute(span, Span_Attributes.GEN_AI_RESPONSE_MODEL, model)
48+
_set_span_attribute(span, SpanAttributes.GEN_AI_REQUEST_MODEL, model)
49+
_set_span_attribute(span, SpanAttributes.GEN_AI_RESPONSE_MODEL, model)
4550

4651
if "invocation_params" in kwargs:
4752
params = kwargs["invocation_params"].get("params") or kwargs["invocation_params"]
@@ -50,13 +55,13 @@ def _set_request_params(span, kwargs, span_holder: SpanHolder):
5055

5156
_set_span_attribute(
5257
span,
53-
Span_Attributes.GEN_AI_REQUEST_MAX_TOKENS,
58+
SpanAttributes.GEN_AI_REQUEST_MAX_TOKENS,
5459
params.get("max_tokens") or params.get("max_new_tokens"),
5560
)
5661

57-
_set_span_attribute(span, Span_Attributes.GEN_AI_REQUEST_TEMPERATURE, params.get("temperature"))
62+
_set_span_attribute(span, SpanAttributes.GEN_AI_REQUEST_TEMPERATURE, params.get("temperature"))
5863

59-
_set_span_attribute(span, Span_Attributes.GEN_AI_REQUEST_TOP_P, params.get("top_p"))
64+
_set_span_attribute(span, SpanAttributes.GEN_AI_REQUEST_TOP_P, params.get("top_p"))
6065

6166

6267
def _set_span_attribute(span: Span, name: str, value: AttributeValue):
@@ -196,13 +201,13 @@ def on_chat_model_start(
196201
kind=SpanKind.CLIENT,
197202
metadata=metadata,
198203
)
199-
_set_span_attribute(span, Span_Attributes.GEN_AI_OPERATION_NAME, GenAIOperationValues.CHAT)
204+
_set_span_attribute(span, SpanAttributes.GEN_AI_OPERATION_NAME, GenAIOperationValues.CHAT)
200205

201206
if "kwargs" in serialized:
202207
_set_request_params(span, serialized["kwargs"], self.span_mapping[run_id])
203208
if "name" in serialized:
204-
_set_span_attribute(span, Span_Attributes.GEN_AI_SYSTEM, serialized.get("name"))
205-
_set_span_attribute(span, Span_Attributes.GEN_AI_OPERATION_NAME, "chat")
209+
_set_span_attribute(span, SpanAttributes.GEN_AI_SYSTEM, serialized.get("name"))
210+
_set_span_attribute(span, SpanAttributes.GEN_AI_OPERATION_NAME, "chat")
206211

207212
def on_llm_start(
208213
self,
@@ -233,13 +238,13 @@ def on_llm_start(
233238
kind=SpanKind.CLIENT,
234239
metadata=metadata,
235240
)
236-
_set_span_attribute(span, Span_Attributes.GEN_AI_OPERATION_NAME, GenAIOperationValues.CHAT)
241+
_set_span_attribute(span, SpanAttributes.GEN_AI_OPERATION_NAME, GenAIOperationValues.CHAT)
237242

238243
_set_request_params(span, kwargs, self.span_mapping[run_id])
239244

240-
_set_span_attribute(span, Span_Attributes.GEN_AI_SYSTEM, serialized.get("name"))
245+
_set_span_attribute(span, SpanAttributes.GEN_AI_SYSTEM, serialized.get("name"))
241246

242-
_set_span_attribute(span, Span_Attributes.GEN_AI_OPERATION_NAME, "text_completion")
247+
_set_span_attribute(span, SpanAttributes.GEN_AI_OPERATION_NAME, "text_completion")
243248

244249
def on_llm_end(
245250
self,
@@ -263,11 +268,11 @@ def on_llm_end(
263268
if response.llm_output is not None:
264269
model_name = response.llm_output.get("model_name") or response.llm_output.get("model_id")
265270
if model_name is not None:
266-
_set_span_attribute(span, Span_Attributes.GEN_AI_RESPONSE_MODEL, model_name)
271+
_set_span_attribute(span, SpanAttributes.GEN_AI_RESPONSE_MODEL, model_name)
267272

268-
id = response.llm_output.get("id")
269-
if id is not None and id != "":
270-
_set_span_attribute(span, Span_Attributes.GEN_AI_RESPONSE_ID, id)
273+
item_id = response.llm_output.get("id")
274+
if item_id is not None and item_id != "":
275+
_set_span_attribute(span, SpanAttributes.GEN_AI_RESPONSE_ID, item_id)
271276

272277
token_usage = (response.llm_output or {}).get("token_usage") or (response.llm_output or {}).get("usage")
273278

@@ -283,9 +288,9 @@ def on_llm_end(
283288
or token_usage.get("output_tokens")
284289
)
285290

286-
_set_span_attribute(span, Span_Attributes.GEN_AI_USAGE_INPUT_TOKENS, prompt_tokens)
291+
_set_span_attribute(span, SpanAttributes.GEN_AI_USAGE_INPUT_TOKENS, prompt_tokens)
287292

288-
_set_span_attribute(span, Span_Attributes.GEN_AI_USAGE_OUTPUT_TOKENS, completion_tokens)
293+
_set_span_attribute(span, SpanAttributes.GEN_AI_USAGE_OUTPUT_TOKENS, completion_tokens)
289294

290295
self._end_span(span, run_id)
291296

@@ -325,7 +330,7 @@ def on_chain_start(
325330
)
326331

327332
if "agent_name" in metadata:
328-
_set_span_attribute(span, Span_Attributes.GEN_AI_AGENT_NAME, metadata["agent_name"])
333+
_set_span_attribute(span, SpanAttributes.GEN_AI_AGENT_NAME, metadata["agent_name"])
329334

330335
_set_span_attribute(span, "gen_ai.prompt", str(inputs))
331336

@@ -384,18 +389,18 @@ def on_tool_start(
384389
_set_span_attribute(span, "gen_ai.tool.input", input_str)
385390

386391
if serialized.get("id"):
387-
_set_span_attribute(span, Span_Attributes.GEN_AI_TOOL_CALL_ID, serialized.get("id"))
392+
_set_span_attribute(span, SpanAttributes.GEN_AI_TOOL_CALL_ID, serialized.get("id"))
388393

389394
if serialized.get("description"):
390395
_set_span_attribute(
391396
span,
392-
Span_Attributes.GEN_AI_TOOL_DESCRIPTION,
397+
SpanAttributes.GEN_AI_TOOL_DESCRIPTION,
393398
serialized.get("description"),
394399
)
395400

396-
_set_span_attribute(span, Span_Attributes.GEN_AI_TOOL_NAME, name)
401+
_set_span_attribute(span, SpanAttributes.GEN_AI_TOOL_NAME, name)
397402

398-
_set_span_attribute(span, Span_Attributes.GEN_AI_OPERATION_NAME, "execute_tool")
403+
_set_span_attribute(span, SpanAttributes.GEN_AI_OPERATION_NAME, "execute_tool")
399404

400405
def on_tool_end(
401406
self,
@@ -433,7 +438,7 @@ def on_agent_action(self, action: AgentAction, run_id: UUID, parent_run_id: UUID
433438

434439
_set_span_attribute(span, "gen_ai.agent.tool.input", tool_input)
435440
_set_span_attribute(span, "gen_ai.agent.tool.name", tool)
436-
_set_span_attribute(span, Span_Attributes.GEN_AI_OPERATION_NAME, "invoke_agent")
441+
_set_span_attribute(span, SpanAttributes.GEN_AI_OPERATION_NAME, "invoke_agent")
437442

438443
def on_agent_finish(self, finish: AgentFinish, run_id: UUID, parent_run_id: UUID, **kwargs: Any):
439444

ai_agent_instrumentation/opentelemetry-instrumentation-langchain-v2/src/opentelemetry/instrumentation/langchain_v2/span_attributes.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# pylint: disable=no-self-use
5+
16
"""
27
Semantic conventions for Gen AI agent spans following OpenTelemetry standards.
38
@@ -6,7 +11,7 @@
611
"""
712

813

9-
class Span_Attributes:
14+
class SpanAttributes:
1015
GEN_AI_OPERATION_NAME = "gen_ai.operation.name"
1116
GEN_AI_SYSTEM = "gen_ai.system"
1217
GEN_AI_ERROR_TYPE = "error.type"
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# pylint: disable=no-self-use
5+
16
__version__ = "0.1.0"

ai_agent_instrumentation/opentelemetry-instrumentation-langchain-v2/tests/conftest.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# pylint: disable=no-self-use
5+
16
import os
27

38
import pytest

ai_agent_instrumentation/opentelemetry-instrumentation-langchain-v2/tests/test-requirements.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# pylint: disable=no-self-use
5+
16
typing
27

38
# LangChain and related packages

ai_agent_instrumentation/opentelemetry-instrumentation-langchain-v2/tests/test_agents.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# pylint: disable=no-self-use
5+
16
import os
27

38
import boto3
@@ -45,7 +50,7 @@ def test_agents(instrument_langchain, span_exporter):
4550

4651
spans = span_exporter.get_finished_spans()
4752

48-
assert set([span.name for span in spans]) == {
53+
assert {span.name for span in spans} == {
4954
"chat anthropic.claude-3-5-sonnet-20240620-v1:0",
5055
"chain AgentExecutor",
5156
"chain RunnableSequence",
@@ -85,7 +90,7 @@ def test_agents_with_events_with_content(instrument_with_content, span_exporter,
8590

8691
spans = span_exporter.get_finished_spans()
8792

88-
assert set([span.name for span in spans]) == {
93+
assert {span.name for span in spans} == {
8994
"chat anthropic.claude-3-5-sonnet-20240620-v1:0",
9095
"chain AgentExecutor",
9196
"chain RunnableSequence",
@@ -124,7 +129,7 @@ def test_agents_with_events_with_no_content(instrument_langchain, span_exporter)
124129

125130
spans = span_exporter.get_finished_spans()
126131

127-
assert set([span.name for span in spans]) == {
132+
assert {span.name for span in spans} == {
128133
"chat anthropic.claude-3-5-sonnet-20240620-v1:0",
129134
"chain AgentExecutor",
130135
"chain RunnableSequence",

ai_agent_instrumentation/opentelemetry-instrumentation-langchain-v2/tests/test_chains.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# pylint: disable=no-self-use
5+
16
import ast
27

38
import boto3

ai_agent_instrumentation/opentelemetry-instrumentation-langchain-v2/tests/test_langgraph_agent.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# pylint: disable=no-self-use
5+
16
import os
27
from typing import TypedDict
38

@@ -53,7 +58,7 @@ def calculate(state: State):
5358

5459
expected_spans = {"chain LangGraph", "chain calculate", "chat anthropic.claude-3-haiku-20240307-v1:0"}
5560

56-
assert expected_spans == set([span.name for span in spans])
61+
assert expected_spans == {span.name for span in spans}
5762

5863
llm_span = next(span for span in spans if span.name == "chat anthropic.claude-3-haiku-20240307-v1:0")
5964
calculate_task_span = next(span for span in spans if span.name == "chain calculate")
@@ -114,9 +119,9 @@ def calculate(state: State):
114119
await langgraph.ainvoke(input={"request": user_request})
115120
spans = span_exporter.get_finished_spans()
116121

117-
assert set(["chain LangGraph", "chain calculate", "chat anthropic.claude-3-haiku-20240307-v1:0"]) == set(
118-
[span.name for span in spans]
119-
)
122+
assert set(["chain LangGraph", "chain calculate", "chat anthropic.claude-3-haiku-20240307-v1:0"]) == {
123+
span.name for span in spans
124+
}
120125

121126
llm_span = next(span for span in spans if span.name == "chat anthropic.claude-3-haiku-20240307-v1:0")
122127
calculate_task_span = next(span for span in spans if span.name == "chain calculate")
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# pylint: disable=no-self-use
5+
16
__version__ = "0.1.0"

0 commit comments

Comments
 (0)