gemini_adk_rs/telemetry/
spans.rs

1//! OpenTelemetry span definitions for agent lifecycle operations.
2//!
3//! Each span carries contextual fields for agent-level correlation.
4
5/// Create a span for an agent's run lifecycle.
6pub fn agent_run_span(agent_name: &str, session_id: &str) -> tracing::Span {
7    tracing::info_span!(
8        "gemini.agent.run",
9        agent_name = agent_name,
10        session_id = session_id,
11    )
12}
13
14/// Create a span for an agent transfer.
15pub fn agent_transfer_span(from: &str, to: &str, session_id: &str) -> tracing::Span {
16    tracing::info_span!(
17        "gemini.agent.transfer",
18        from = from,
19        to = to,
20        session_id = session_id,
21    )
22}
23
24/// Create a span for tool dispatch within an agent.
25pub fn tool_dispatch_span(tool_name: &str, tool_class: &str, session_id: &str) -> tracing::Span {
26    tracing::info_span!(
27        "gemini.agent.tool_dispatch",
28        tool_name = tool_name,
29        tool_class = tool_class,
30        session_id = session_id,
31    )
32}
33
34/// Create a span for an agent-as-tool invocation.
35pub fn agent_tool_span(agent_name: &str, parent_agent: &str) -> tracing::Span {
36    tracing::info_span!(
37        "gemini.agent.agent_tool",
38        agent_name = agent_name,
39        parent_agent = parent_agent,
40    )
41}
42
43/// Create a span for the top-level runner.
44pub fn runner_span(root_agent: &str) -> tracing::Span {
45    tracing::info_span!("gemini.agent.runner", root_agent = root_agent)
46}
47
48/// Create a span for an LLM generate call.
49pub fn call_llm_span(model_id: &str, agent_name: &str, session_id: &str) -> tracing::Span {
50    tracing::info_span!(
51        "gemini.agent.call_llm",
52        model_id = model_id,
53        agent_name = agent_name,
54        session_id = session_id,
55    )
56}
57
58/// Create a span for a full invocation (top-level).
59pub fn invocation_span(invocation_id: &str, root_agent: &str) -> tracing::Span {
60    tracing::info_span!(
61        "gemini.agent.invocation",
62        invocation_id = invocation_id,
63        root_agent = root_agent,
64    )
65}
66
67/// Create a span for a phase transition.
68pub fn phase_transition_span(from_phase: &str, to_phase: &str, session_id: &str) -> tracing::Span {
69    tracing::info_span!(
70        "gemini.agent.phase_transition",
71        from_phase = from_phase,
72        to_phase = to_phase,
73        session_id = session_id,
74    )
75}
76
77/// Create a span for an extraction operation.
78pub fn extraction_span(extractor_name: &str, session_id: &str) -> tracing::Span {
79    tracing::info_span!(
80        "gemini.agent.extraction",
81        extractor_name = extractor_name,
82        session_id = session_id,
83    )
84}