@agent

Overview

The @agent decorator creates a span representing an autonomous agent. Agent spans set the workflow name context, so all nested tasks and tools appear grouped under this agent in the trace tree.

1from respan import agent

Parameters

ParameterTypeDefaultDescription
namestr | NoneFunction nameDisplay name for the agent span.
versionint | NoneNoneVersion number for the agent.
method_namestr | NoneNoneRequired when decorating a class. Specifies which method to use as the entry point.
processorsstr | List[str] | NoneNoneRoute this span to specific named processors. See add_processor.
export_filterFilterParamDict | NoneNoneFilter dict to control which spans are exported. Uses AND logic — all conditions must match.

Function usage

1from respan import Respan, agent, task, tool
2from openai import OpenAI
3
4respan = Respan(api_key="your-api-key")
5client = OpenAI()
6
7@tool(name="search")
8def search(query: str):
9 return f"Results for: {query}"
10
11@task(name="think")
12def think(context: str):
13 response = client.chat.completions.create(
14 model="gpt-4o-mini",
15 messages=[{"role": "user", "content": context}],
16 )
17 return response.choices[0].message.content
18
19@agent(name="research_agent")
20def research_agent(topic: str):
21 results = search(topic)
22 return think(results)
23
24print(research_agent("OpenTelemetry tracing"))

Class usage

1from respan import Respan, agent, task
2
3respan = Respan(api_key="your-api-key")
4
5@agent(name="assistant", method_name="run")
6class Assistant:
7 @task(name="respond")
8 def respond(self, input_text: str):
9 return f"Response: {input_text}"
10
11 def run(self):
12 return self.respond("Hello")
13
14print(Assistant().run())

Notes

  • Agent spans set the workflow name context — nested spans inherit the agent name for grouping
  • Use @agent for top-level autonomous entities and @task for individual operations within them