Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,27 +20,27 @@ def instrumentation_dependencies(self) -> Collection[str]:
def _instrument(self, **kwargs: Any) -> None:
"""Enable AgentScope instrumentation."""
if is_agentscope_v1():
from opentelemetry.instrumentation.agentscope.v1 import (
from opentelemetry.instrumentation.agentscope.v1 import ( # noqa: PLC0415
AgentScopeV1Instrumentor,
)

AgentScopeV1Instrumentor().instrument(**kwargs)
else:
from opentelemetry.instrumentation.agentscope.v0 import (
from opentelemetry.instrumentation.agentscope.v0 import ( # noqa: PLC0415
AgentScopeV0Instrumentor,
)

AgentScopeV0Instrumentor().instrument(**kwargs)

def _uninstrument(self, **kwargs: Any) -> None:
if is_agentscope_v1():
from opentelemetry.instrumentation.agentscope.v1 import (
from opentelemetry.instrumentation.agentscope.v1 import ( # noqa: PLC0415
AgentScopeV1Instrumentor,
)

AgentScopeV1Instrumentor().uninstrument(**kwargs)
else:
from opentelemetry.instrumentation.agentscope.v0 import (
from opentelemetry.instrumentation.agentscope.v0 import ( # noqa: PLC0415
AgentScopeV0Instrumentor,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ def _instrument(self, **kwargs: Any) -> None:
)

def _uninstrument(self, **kwargs: Any) -> None:
import agentscope.models.model
import agentscope.models.model # noqa: PLC0415

unwrap(agentscope.models.model.ModelWrapperBase, "__init__")
import agentscope.service.service_toolkit
import agentscope.service.service_toolkit # noqa: PLC0415

unwrap(
agentscope.service.service_toolkit.ServiceToolkit, "_execute_func"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ def extract(
f"{agent.model_type}",
)

for key in arguments.keys():
for item in arguments.items():
key, entry_value = item
if key == "messages":
messages = arguments[key]
messages = entry_value
for idx in range(len(messages)):
message = messages[idx]
if "role" in message:
Expand All @@ -44,7 +45,7 @@ def extract(
)

if key == "tools":
tools = arguments[key]
tools = entry_value
for idx in range(len(tools)):
tool = tools[idx]
yield (
Expand All @@ -53,17 +54,17 @@ def extract(
)

if key == "texts":
if isinstance(arguments[key], str):
yield GenAIAttributes.GEN_AI_PROMPT, f"{arguments[key]}"
elif isinstance(arguments[key], list):
for idx, text in enumerate(arguments[key]):
if isinstance(entry_value, str):
yield GenAIAttributes.GEN_AI_PROMPT, f"{entry_value}"
elif isinstance(entry_value, list):
for idx, text in enumerate(entry_value):
yield (
f"{GenAIAttributes.GEN_AI_PROMPT}.{idx}",
f"{text}",
)

if key == "prompt":
yield GenAIAttributes.GEN_AI_PROMPT, f"{arguments[key]}"
yield GenAIAttributes.GEN_AI_PROMPT, f"{entry_value}"


class ModelResponseExtractor(object):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ def _instrument(self, **kwargs: Any) -> None:
def _uninstrument(self, **kwargs: Any) -> None:
"""移除插装。"""
# 恢复被动态替换的方法
from ._wrapper import (
from ._wrapper import ( # noqa: PLC0415
AgentScopeV1AgentWrapper,
AgentScopeV1ChatModelWrapper,
AgentScopeV1EmbeddingModelWrapper,
Expand All @@ -166,43 +166,43 @@ def _uninstrument(self, **kwargs: Any) -> None:

# 恢复直接包装的方法
try:
import agentscope.model
import agentscope.model # noqa: PLC0415

unwrap(agentscope.model.ChatModelBase, "__init__")
except Exception:
pass

try:
import agentscope.embedding
import agentscope.embedding # noqa: PLC0415

unwrap(agentscope.embedding.EmbeddingModelBase, "__init__")
except Exception:
pass

try:
import agentscope.agent
import agentscope.agent # noqa: PLC0415

unwrap(agentscope.agent.AgentBase, "__init__")
except Exception:
pass

try:
import agentscope.tool
import agentscope.tool # noqa: PLC0415

unwrap(agentscope.tool.Toolkit, "call_tool_function")
except Exception:
pass

try:
import agentscope.formatter
import agentscope.formatter # noqa: PLC0415

unwrap(agentscope.formatter.FormatterBase, "format")
except Exception:
pass

# 恢复 setup_tracing
try:
import agentscope.tracing
import agentscope.tracing # noqa: PLC0415

unwrap(agentscope.tracing, "setup_tracing")
except Exception:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def _get_chatmodel_output_messages(
list[dict[str, Any]]: 格式化的输出消息列表
"""
try:
from agentscope.model import ChatResponse
from agentscope.model import ChatResponse # noqa: PLC0415

if not isinstance(chat_response, ChatResponse):
# logger.warning(f"Expected ChatResponse, got {type(chat_response)}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def skip_if_no_agentscope():
"""如果没有安装agentscope则跳过测试"""
try:
# test the import of agentscope, skip the warning
import agentscope # noqa: F401
import agentscope # noqa: F401, PLC0415

return pytest.mark.skipif(False, reason="")
except ImportError:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from agentscope.message import Msg
from agentscope.model import DashScopeChatModel
from agentscope.tool import Toolkit, execute_shell_command
from tests.shared.version_utils import skip_if_not_v1

from opentelemetry import trace as trace_api
from opentelemetry.instrumentation.agentscope import AgentScopeInstrumentor
Expand All @@ -21,7 +22,6 @@
from opentelemetry.sdk.trace.export.in_memory_span_exporter import (
InMemorySpanExporter,
)
from tests.shared.version_utils import skip_if_not_v1


@pytest.fixture(scope="module")
Expand Down Expand Up @@ -84,7 +84,7 @@ def test_agentscope_v1_basic(
msg_task = Msg("user", "compute 1615114134*4343434343 for me", "user")

# 使用 asyncio 来运行异步函数
import asyncio
import asyncio # noqa: PLC0415

async def run_agent():
response = await agent(msg_task)
Expand Down Expand Up @@ -114,7 +114,9 @@ async def run_agent():
check_tool = True # noqa: F841

# 先检查是否至少有模型调用 span
assert check_model, f"Model call span not found. Available spans: {[span.name for span in spans]}"
assert check_model, (
f"Model call span not found. Available spans: {[span.name for span in spans]}"
)


@skip_if_not_v1()
Expand Down Expand Up @@ -142,7 +144,7 @@ def test_agentscope_v1_simple_chat(

msg_task = Msg("user", "Hello, how are you?", "user")

import asyncio
import asyncio # noqa: PLC0415

async def run_agent():
response = await agent(msg_task)
Expand All @@ -162,9 +164,9 @@ async def run_agent():
spans = in_memory_span_exporter.get_finished_spans()
print(f"Simple chat spans: {[span.name for span in spans]}")
model_spans = [span for span in spans if span.name.startswith("chat ")]
assert (
len(model_spans) > 0
), f"No model call span found. Available spans: {[span.name for span in spans]}"
assert len(model_spans) > 0, (
f"No model call span found. Available spans: {[span.name for span in spans]}"
)


@skip_if_not_v1()
Expand All @@ -185,7 +187,7 @@ def test_agentscope_v1_model_direct(
# 直接调用模型(使用字典格式避免 Msg 对象问题)
messages = [{"role": "user", "content": "Hello, what is 1+1?"}]

import asyncio
import asyncio # noqa: PLC0415

async def call_model():
response = await model(messages)
Expand All @@ -205,9 +207,9 @@ async def call_model():
spans = in_memory_span_exporter.get_finished_spans()
print(f"Direct model spans: {[span.name for span in spans]}")
model_spans = [span for span in spans if span.name.startswith("chat ")]
assert (
len(model_spans) > 0
), f"No model call span found. Available spans: {[span.name for span in spans]}"
assert len(model_spans) > 0, (
f"No model call span found. Available spans: {[span.name for span in spans]}"
)


@skip_if_not_v1()
Expand All @@ -228,7 +230,7 @@ def test_agentscope_v1_span_attributes(
# 直接调用模型(使用字典格式)
messages = [{"role": "user", "content": "Simple test message"}]

import asyncio
import asyncio # noqa: PLC0415

async def call_model():
response = await model(messages)
Expand All @@ -245,9 +247,9 @@ async def call_model():
print(f"Attributes test spans: {[span.name for span in spans]}")
model_spans = [span for span in spans if span.name.startswith("chat ")]

assert (
len(model_spans) > 0
), f"No model call span found. Available spans: {[span.name for span in spans]}"
assert len(model_spans) > 0, (
f"No model call span found. Available spans: {[span.name for span in spans]}"
)

# 验证第一个ModelCall span的基本属性
model_span = model_spans[0]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,21 +98,21 @@ def _instrument(self, **kwargs: Any) -> None:

def _uninstrument(self, **kwargs: Any) -> None:
# Unwrap the agent call function
import agno.agent
import agno.agent # noqa: PLC0415

unwrap(agno.agent.Agent, "_run")
unwrap(agno.agent.Agent, "_arun")
unwrap(agno.agent.Agent, "_run_stream")
unwrap(agno.agent.Agent, "_arun_stream")

# Unwrap the function call
import agno.tools.function
import agno.tools.function # noqa: PLC0415

unwrap(agno.tools.function.FunctionCall, "execute")
unwrap(agno.tools.function.FunctionCall, "aexecute")

# Unwrap the model
import agno.models.base
import agno.models.base # noqa: PLC0415

unwrap(agno.models.base.Model, "response")
unwrap(agno.models.base.Model, "aresponse")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ def extract(

if agent.tools:
tool_names = []
from agno.tools.function import Function
from agno.tools.toolkit import Toolkit
from agno.tools.function import Function # noqa: PLC0415
from agno.tools.toolkit import Toolkit # noqa: PLC0415

for tool in agent.tools:
if isinstance(tool, Function):
Expand All @@ -45,14 +45,15 @@ def extract(
tool_names.append(str(tool))
yield GenAIAttributes.GEN_AI_TOOL_NAME, ", ".join(tool_names)

for key in arguments.keys():
for item in arguments.items():
key, entry_value = item
if key == "run_response":
yield (
GenAIAttributes.GEN_AI_RESPONSE_ID,
f"{arguments[key].run_id}",
f"{entry_value.run_id}",
)
elif key == "run_messages":
messages = arguments[key].messages
messages = entry_value.messages
for idx in range(len(messages)):
message = messages[idx]
yield (
Expand All @@ -62,7 +63,7 @@ def extract(
elif key == "response_format":
yield (
GenAIAttributes.GEN_AI_OPENAI_REQUEST_RESPONSE_FORMAT,
f"{arguments[key]}",
f"{entry_value}",
)


Expand Down Expand Up @@ -131,22 +132,23 @@ def extract(
f"{json.dumps(request_kwargs, indent=2)}",
)

for key in arguments.keys():
for item in arguments.items():
key, entry_value = item
if key == "response_format":
yield (
GenAIAttributes.GEN_AI_OPENAI_REQUEST_RESPONSE_FORMAT,
f"{arguments[key]}",
f"{entry_value}",
)
elif key == "messages":
messages = arguments["messages"]
messages = entry_value
for idx in range(len(messages)):
message = messages[idx]
yield (
f"{GenAIAttributes.GEN_AI_PROMPT}.{idx}.message",
f"{json.dumps(message.to_dict(), indent=2)}",
)
elif key == "tools":
tools = arguments["tools"]
tools = entry_value
for idx in range(len(tools)):
yield (
f"{GenAIAttributes.GEN_AI_TOOL_DESCRIPTION}.{idx}",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,6 @@ def test_agno(in_memory_span_exporter: InMemorySpanExporter):
check_model = True
if "ToolCall" in span.name:
check_tool = True
assert (
check_agent and check_model and check_tool
), "Agent, Model or ToolCall span not found"
assert check_agent and check_model and check_tool, (
"Agent, Model or ToolCall span not found"
)
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ def process(
event_id = kwargs["id"]
span = None
with self._lock:
from opentelemetry import context
from opentelemetry import context # noqa: PLC0415

ctx = context.get_current()
if len(ctx) == 0:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def _instrument(self, **kwargs: Any) -> None:
if not (tracer_provider := kwargs.get("tracer_provider")):
tracer_provider = trace_api.get_tracer_provider()
tracer = trace_api.get_tracer(__name__, "", tracer_provider)
from opentelemetry.instrumentation.langchain.internal._tracer import (
from opentelemetry.instrumentation.langchain.internal._tracer import ( # noqa: PLC0415
LoongsuiteTracer,
)

Expand Down
Loading