forked from google-antigravity/antigravity-sdk-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathobservability_otel.py
More file actions
92 lines (75 loc) · 2.75 KB
/
Copy pathobservability_otel.py
File metadata and controls
92 lines (75 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# Copyright 2026 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Example demonstrating OpenTelemetry tracing in Google Antigravity SDK.
Shows both basic agent tracing with custom tools and concurrent subagent
tracing.
"""
import asyncio
import sys
from google import antigravity
from google.antigravity.utils import otel as otel_hooks
from opentelemetry import trace
from opentelemetry.sdk import trace as sdk_trace
from opentelemetry.sdk.trace import export as sdk_trace_export
def get_weather(location: str) -> str:
"""Gets the weather for a location."""
return f"The weather in {location} is sunny."
async def run_basic_agent() -> None:
"""Runs a basic agent with a custom tool and prints OTel spans."""
print("\n--- Running Basic Agent Tracing ---")
config = antigravity.LocalAgentConfig(
tools=[get_weather],
policies=[],
hooks=otel_hooks.get_otel_hooks(),
)
async with antigravity.Agent(config) as my_agent:
prompt = "What is the weather in Paris?"
print(f" User: {prompt}")
response = await my_agent.chat(prompt)
print(" Agent: ", end="")
async for chunk in response:
sys.stdout.write(chunk)
sys.stdout.flush()
print()
async def run_subagents() -> None:
"""Runs an agent that delegates to a subagent and prints OTel spans."""
print("\n--- Running Subagents Tracing ---")
config = antigravity.LocalAgentConfig(
system_instructions=(
"You are a poet manager. Delegate the poem writing to a specialized"
" 'Poet' subagent."
),
hooks=otel_hooks.get_otel_hooks(),
)
async with antigravity.Agent(config) as my_agent:
prompt = "Write a 4-line poem about space."
print(f" User: {prompt}")
response = await my_agent.chat(prompt)
print(" Agent: ", end="")
async for chunk in response:
sys.stdout.write(chunk)
sys.stdout.flush()
print()
async def main() -> None:
# Setup OTel trace provider with a Console exporter
provider = sdk_trace.TracerProvider()
processor = sdk_trace_export.SimpleSpanProcessor(
sdk_trace_export.ConsoleSpanExporter()
)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
await run_basic_agent()
await run_subagents()
if __name__ == "__main__":
asyncio.run(main())