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//! Feature-gated behind `tracing-support`.
5
6/// Create a span for an agent's run lifecycle.
7#[cfg(feature = "tracing-support")]
8pub fn agent_run_span(agent_name: &str, session_id: &str) -> tracing::Span {
9    tracing::info_span!(
10        "gemini.agent.run",
11        agent_name = agent_name,
12        session_id = session_id,
13    )
14}
15
16/// Create a span for an agent transfer.
17#[cfg(feature = "tracing-support")]
18pub fn agent_transfer_span(from: &str, to: &str, session_id: &str) -> tracing::Span {
19    tracing::info_span!(
20        "gemini.agent.transfer",
21        from = from,
22        to = to,
23        session_id = session_id,
24    )
25}
26
27/// Create a span for tool dispatch within an agent.
28#[cfg(feature = "tracing-support")]
29pub fn tool_dispatch_span(tool_name: &str, tool_class: &str, session_id: &str) -> tracing::Span {
30    tracing::info_span!(
31        "gemini.agent.tool_dispatch",
32        tool_name = tool_name,
33        tool_class = tool_class,
34        session_id = session_id,
35    )
36}
37
38/// Create a span for an agent-as-tool invocation.
39#[cfg(feature = "tracing-support")]
40pub fn agent_tool_span(agent_name: &str, parent_agent: &str) -> tracing::Span {
41    tracing::info_span!(
42        "gemini.agent.agent_tool",
43        agent_name = agent_name,
44        parent_agent = parent_agent,
45    )
46}
47
48/// Create a span for the top-level runner.
49#[cfg(feature = "tracing-support")]
50pub fn runner_span(root_agent: &str) -> tracing::Span {
51    tracing::info_span!("gemini.agent.runner", root_agent = root_agent)
52}
53
54// No-op stubs when tracing is disabled — these compile to nothing.
55/// Create a span for an agent's run lifecycle (no-op without `tracing-support` feature).
56#[cfg(not(feature = "tracing-support"))]
57pub fn agent_run_span(_: &str, _: &str) {}
58/// Create a span for an agent transfer (no-op without `tracing-support` feature).
59#[cfg(not(feature = "tracing-support"))]
60pub fn agent_transfer_span(_: &str, _: &str, _: &str) {}
61/// Create a span for tool dispatch (no-op without `tracing-support` feature).
62#[cfg(not(feature = "tracing-support"))]
63pub fn tool_dispatch_span(_: &str, _: &str, _: &str) {}
64/// Create a span for agent-as-tool invocation (no-op without `tracing-support` feature).
65#[cfg(not(feature = "tracing-support"))]
66pub fn agent_tool_span(_: &str, _: &str) {}
67/// Create a span for the top-level runner (no-op without `tracing-support` feature).
68#[cfg(not(feature = "tracing-support"))]
69pub fn runner_span(_: &str) {}
70
71/// Create a span for an LLM generate call.
72#[cfg(feature = "tracing-support")]
73pub fn call_llm_span(model_id: &str, agent_name: &str, session_id: &str) -> tracing::Span {
74    tracing::info_span!(
75        "gemini.agent.call_llm",
76        model_id = model_id,
77        agent_name = agent_name,
78        session_id = session_id,
79    )
80}
81
82/// Create a span for a full invocation (top-level).
83#[cfg(feature = "tracing-support")]
84pub fn invocation_span(invocation_id: &str, root_agent: &str) -> tracing::Span {
85    tracing::info_span!(
86        "gemini.agent.invocation",
87        invocation_id = invocation_id,
88        root_agent = root_agent,
89    )
90}
91
92/// Create a span for a phase transition.
93#[cfg(feature = "tracing-support")]
94pub fn phase_transition_span(from_phase: &str, to_phase: &str, session_id: &str) -> tracing::Span {
95    tracing::info_span!(
96        "gemini.agent.phase_transition",
97        from_phase = from_phase,
98        to_phase = to_phase,
99        session_id = session_id,
100    )
101}
102
103/// Create a span for an extraction operation.
104#[cfg(feature = "tracing-support")]
105pub fn extraction_span(extractor_name: &str, session_id: &str) -> tracing::Span {
106    tracing::info_span!(
107        "gemini.agent.extraction",
108        extractor_name = extractor_name,
109        session_id = session_id,
110    )
111}
112
113// No-op stubs for new spans when tracing is disabled.
114/// Create a span for an LLM generate call (no-op without `tracing-support` feature).
115#[cfg(not(feature = "tracing-support"))]
116pub fn call_llm_span(_: &str, _: &str, _: &str) {}
117/// Create a span for a full invocation (no-op without `tracing-support` feature).
118#[cfg(not(feature = "tracing-support"))]
119pub fn invocation_span(_: &str, _: &str) {}
120/// Create a span for a phase transition (no-op without `tracing-support` feature).
121#[cfg(not(feature = "tracing-support"))]
122pub fn phase_transition_span(_: &str, _: &str, _: &str) {}
123/// Create a span for an extraction operation (no-op without `tracing-support` feature).
124#[cfg(not(feature = "tracing-support"))]
125pub fn extraction_span(_: &str, _: &str) {}