From b312cc12f47cbf1bb28a3d810960bc0d11cbc02d Mon Sep 17 00:00:00 2001 From: guillemwilly Date: Wed, 17 Jun 2026 14:29:58 +0200 Subject: [PATCH] docs(integrations): add Latitude observability integration Add a Latitude integration page under docs/integrations with an observability catalog tag, a square card logo, and a complete, runnable ADK example using Latitude's Python telemetry SDK. --- docs/integrations/assets/latitude.png | Bin 0 -> 23124 bytes docs/integrations/latitude.md | 128 ++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 docs/integrations/assets/latitude.png create mode 100644 docs/integrations/latitude.md diff --git a/docs/integrations/assets/latitude.png b/docs/integrations/assets/latitude.png new file mode 100644 index 0000000000000000000000000000000000000000..083a54a3fdcf97e5a6a026dba462ea9aff24bb4a GIT binary patch literal 23124 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�+Pe_ip^DMXRr|>UK83@l0`|)pmcZz73Hg8vfkK-G}WX zeFY&iAK^!fVTv9bml2l2(v5J(LX-na`^Mjk0 zW{dXRdewdLiP_zK#i-_rwY`o^*$Sw(S`HvMuKVQd6SdlD4~0TDP+WdQ+l7IIBI%Ro zyf58vGh>Q@+q`Ed|1FI9;~+OpUbh|0GrGb~5bXDn&azNq0B-}&bD{k=vIrXnJ@v9N zmz=Nul}#`GaA=_iFgy4d;J4>ZY48jGfBeeD)3P-;lHIOL4iF4H9*VB6cH)Kat^Rx21zNt?D1d znbSZ{wxI9;DQ63a>Eo`bM-@nU!WMYvB4SRl)sW}w1U{sF)&hZCvfup0P1FUzf4zIb zH(NR+fM)5FqGgB0s`rkDPLPSg;kQ!8*kB8{W1jise4U^Ir)^kug(gl??86?Qguj#n z;JeF3R`2`(t+8&i${C@uE^a=x+i&D+6uS4^G2|{BX&<*XjA5wY!|#nKHohgv+q6XuSgX&9wtf=^&PiP z9kml@_Mhg)SfkN$m2`Hr2~irDp|U=1yRoGa&69An(^m_=d=-v6!HCl2-1qXkDMwf<3u6*y{H}Njzx&&%B5qYL0b#s zIfOj3-@l?Vsyybww2^+55iv2ddVXA00tDHwx?XmjQQ;o3rH-+&@y-Rab1xDQ)Gu4o zlB>8btmkp*xi0a}8e`UT<&W{p+N8L2)kMtnW)WHyMd z$ZaYq(W-11OF|{;Z}XZ`A4M`A;7%9Vop4Qa92?Kjxky$%yTl+eDdErtV>wAMuPcrlf0RFqX^eHj(FgbLE_g`G)afyVWC7_W1Vb!J-Eqo(^q%@P1&3| z7XWN*{5r>_L*ezLBw^BJB6B#VcD+LR-@opK+DVt3lJU4Jb-H)J>9tQA${~KsB*~9D zedzr~S^j8YuL~m8uZ~)K3cMRIlMfP)eyA>41MnRke@5UsH@dp#vo!#*#!1iKNL!n5 zXLp=YZy*9d%DQ=aMRd6_M7e2E>PKxwTX<-@OqP8b?j9`;{3*Q^&U&tl}4;jo$ikFyTCX~wa+xznKjQ?k*>@Y&UD1(-Sg9N zrI?l^mnULN-5zS!{wfvA_(Juezyl0B>*HT40=~lw<@9c~IK_aZheP6!=*dfcZp}R_ zTvUH~HvSGWjwx+!cByk(CCCHOa3Fg#VqMuo2R1JByi5ePn(=Sg_~aWN>isc`$bA{s z|CdJJIg^X4F-A>-fqg}0SpV-Q;O(4Ot zrR#16N1xovU(+5Rz$fD4MrnmkJz8Xh>HF#lFG4D_zL~=()@%BxQr|G*t<&RZuCnwh zcp`#<4R_a^v3J~P&z4=rJ~rF61a7|0a2_~_l*^6OWZ~0i=MV;ir#Ir$pCX~JAUgyC z^hXXla7UexKu_Sw8>cPvf>xYS(@jEK_iFhg6j2j~mc*V9HnZ7(+(>G*1KUj~h^V&Hv z`Qx>P$#j75hLE)#cEL(TB?A?TNBT*;R;(8-4Qo*^)EEs*X7=#j0ZNviNu@m4(>ja|33PN^HM&)>OEQ;}yN!Z)Bj-%e{ z1ske55`ffGk<$nY=iI&zrO{K!Zza@!Wtx|ip?$)#>|YovMRX(93cK(gb6FH^=Il}o zgOQ1#E7cexK1*s*@8)(6(*AIQB{q?^E9r6D(9O&*LWUetoe5oZQOLsl^5+qmp{Er{ z02^GGn64+x=rpcQTEwIIY>@J(M{CBty=?o?dC)eHcLyP*ze$p{`yT0{xakfvEzMJx z_E!{AXIzfMA-N2$d^cGw*@9?k>>hKX1;pNpbDM9l%>DJl0$SM6e91j z4J?{k1)GD$=|Y(V`ZK__@S@8^9M9DkjO#VXIL&+J=yF=Ckt}WBWDD(GTf;!U)UX- zB>(5WevPW3c70vU_v1CKX(L^44Ker&X*VQ`tdx`P1Bl1pJC;KnK)@jO|g|&YXC%e8Y-1+Eu*J Ld%@>!VO#$V>ApvZ literal 0 HcmV?d00001 diff --git a/docs/integrations/latitude.md b/docs/integrations/latitude.md new file mode 100644 index 000000000..44b5455bd --- /dev/null +++ b/docs/integrations/latitude.md @@ -0,0 +1,128 @@ +--- +catalog_title: Latitude +catalog_description: Open-source observability and evaluation for ADK agents +catalog_icon: /integrations/assets/latitude.png +catalog_tags: ["observability"] +--- + +# Latitude observability for ADK + +
+ Supported in ADKPython +
+ +[Latitude](https://latitude.so) is an open-source observability and evaluation +platform for LLM applications. Its Python telemetry SDK ships dedicated +instrumentation for the Agent Development Kit, so every agent run, model +generation, and tool call is exported as an OpenTelemetry trace you can inspect, +search, and evaluate. + +## Why Latitude for ADK? + +Google ADK includes its own OpenTelemetry-based tracing. Latitude builds on it +with a hosted (or self-hosted) platform purpose-built for agents: + +- **Full agent traces:** Agent → generation → tool-call hierarchy, captured + automatically with no changes to how you call ADK. +- **Cost, tokens, and latency:** Aggregated at every level of the trace. +- **Sessions:** Group multi-turn conversations and multi-step agent runs into a + single session. +- **Evaluations:** Score agent outputs offline or in production with + LLM-as-judge or code-based evaluators. +- **Open source:** Run it fully self-hosted, or use the managed cloud. + +## Prerequisites + +- A **Latitude account** and **API key** — sign up at + [console.latitude.so](https://console.latitude.so/login) (or self-host). +- A **Latitude project slug**. +- A **Gemini API key** set as `GOOGLE_API_KEY`. + +## Installation + +```bash +pip install latitude-telemetry google-adk +``` + +## Use with agent + +Pass the `google.adk` module to the Latitude SDK under the `google_adk` +instrumentation key. Latitude registers an OpenTelemetry tracer provider and +instruments ADK; you keep calling ADK exactly as you do today. + +```python +import asyncio + +import google.adk +from google.adk.agents import Agent +from google.adk.runners import InMemoryRunner +from google.genai import types + +from latitude_telemetry import Latitude, capture + +latitude = Latitude( + api_key="your-api-key", + project="your-project-slug", + instrumentations={"google_adk": google.adk}, +) + + +def get_weather(city: str) -> dict: + """Returns the current weather for a city.""" + return {"status": "success", "report": f"The weather in {city} is sunny."} + + +agent = Agent( + name="weather_agent", + model="gemini-2.5-flash", + description="Agent that answers weather questions using tools.", + instruction="Answer weather questions using get_weather.", + tools=[get_weather], +) + + +async def weather_agent_run(): + runner = InMemoryRunner(agent=agent, app_name="weather_app") + await runner.session_service.create_session( + app_name="weather_app", + user_id="user_123", + session_id="session_abc", + ) + + async for event in runner.run_async( + user_id="user_123", + session_id="session_abc", + new_message=types.Content( + role="user", + parts=[types.Part(text="What's the weather in Barcelona?")], + ), + ): + if event.is_final_response() and event.content and event.content.parts: + return event.content.parts[0].text + + +# Wrap a request or job with capture() to attach a user_id, session_id, tags, +# or metadata to every span produced inside it. +capture("weather-agent-run", lambda: asyncio.run(weather_agent_run())) + +# Flush pending spans before the process exits. +latitude.shutdown() +``` + +## What you get + +Each agent run shows up in Latitude as a trace with nested spans: + +- **Agent spans** — agent name, instructions, and configured tools +- **Generation spans** — model, input/output messages, and token usage +- **Tool spans** — tool calls with input arguments and output + +Open your project in the [Latitude dashboard](https://console.latitude.so/login) +to see the full agent → generation → tool hierarchy, with token usage and +latency aggregated at every level. + +## Resources + +- [Latitude documentation](https://docs.latitude.so) +- [Google ADK integration guide](https://docs.latitude.so/telemetry/frameworks/google-adk#google-adk) +- [Latitude on GitHub](https://github.com/latitude-dev/latitude-llm)