gen_ai.choice log reports gen_ai.system=gemini for OpenAI and Groq models through LiteLlm
Maintainer antworten meist innerhalb von 4 Tagen
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 82/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- python
- Bereich
- backend, observability
Rechercherichtung
Beginne in src/google/adk/telemetry/tracing.py, insbesondere bei _inference_system_name, _resolve_gen_ai_system_name und den beiden im Issue verlinkten gen_ai.choice-Aufrufstellen. Vergleiche, wie der Span und das Choice-Log gen_ai.system bestimmen, wenn LiteLLM ein model_version ohne Provider-Präfix zurückgibt; verwende die Reproduktion mit mock_response, um OpenAI und Groq zu überprüfen. Fertig ist es, wenn die Choice-Logs denselben Provider wie der jeweilige Span melden und der bestehende Anthropic-Fall weiterhin funktioniert.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
🔴 Required Information
Describe the Bug:
with ADK_TELEMETRY_SCHEMA_VERSION_OPT_IN=1 the gen_ai.choice log says gen_ai.system=gemini for openai/gpt-4o and groq/llama-3.1-8b-instant through LiteLlm. the span and the system/user message logs for the same call say openai and groq. anthropic comes out fine
_inference_system_name looks at llm_response.model_version first (tracing.py#L1521-L1531). litellm gives that back without the provider prefix (gpt-4o) so _resolve_gen_ai_system_name finds no provider and falls back to gemini (#L1461-L1475). both choice log call sites go through it (#L1364, #L1424)
Steps to Reproduce:
pip install google-adk litellm- run this (no api key needed, it uses litellm's
mock_response)
import asyncio
import os
os.environ["ADK_TELEMETRY_SCHEMA_VERSION_OPT_IN"] = "1"
from opentelemetry import _logs, trace
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import InMemoryLogRecordExporter, SimpleLogRecordProcessor
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter
spans, logs = InMemorySpanExporter(), InMemoryLogRecordExporter()
tp = TracerProvider()
tp.add_span_processor(SimpleSpanProcessor(spans))
trace.set_tracer_provider(tp)
lp = LoggerProvider()
lp.add_log_record_processor(SimpleLogRecordProcessor(logs))
_logs.set_logger_provider(lp)
from google.adk.agents import Agent
from google.adk.models.lite_llm import LiteLlm
from google.adk.runners import InMemoryRunner
from google.genai import types
async def run(model_id):
spans.clear()
logs.clear()
model = LiteLlm(model=model_id, mock_response="hi", api_key="unused")
runner = InMemoryRunner(agent=Agent(name="a", model=model), app_name="p")
session = await runner.session_service.create_session(app_name="p", user_id="u")
msg = types.Content(role="user", parts=[types.Part(text="hello")])
async for _ in runner.run_async(user_id="u", session_id=session.id, new_message=msg):
pass
await runner.close()
span = next(s for s in spans.get_finished_spans() if s.name.startswith("generate_content"))
print(model_id)
print(" span gen_ai.system:", span.attributes.get("gen_ai.system"))
for r in logs.get_finished_logs():
rec = r.log_record
print(" ", rec.event_name, "gen_ai.system:", rec.attributes.get("gen_ai.system"))
for m in ("openai/gpt-4o", "groq/llama-3.1-8b-instant", "anthropic/claude-sonnet-4-5"):
asyncio.run(run(m))
Expected Behavior:
gen_ai.choice has the same gen_ai.system as the span, so openai and groq here
Observed Behavior:
openai/gpt-4o
span gen_ai.system: openai
gen_ai.system.message gen_ai.system: openai
gen_ai.user.message gen_ai.system: openai
gen_ai.choice gen_ai.system: gemini
groq/llama-3.1-8b-instant
span gen_ai.system: groq
gen_ai.system.message gen_ai.system: groq
gen_ai.user.message gen_ai.system: groq
gen_ai.choice gen_ai.system: gemini
anthropic/claude-sonnet-4-5
span gen_ai.system: anthropic
gen_ai.system.message gen_ai.system: anthropic
gen_ai.user.message gen_ai.system: anthropic
gen_ai.choice gen_ai.system: anthropic
Environment Details:
- ADK Library Version (pip show google-adk): 2.12.0 (main at 77a74f0)
- Desktop OS: macOS
- Python Version (python -V): 3.12.15
Model Information:
- Are you using LiteLLM: Yes
- Which model is being used: openai/gpt-4o and groq/llama-3.1-8b-instant via litellm
mock_response
🟡 Optional Information
Regression:
havent checked older versions
falling back to the configured model id (what the span uses) when model_version has no provider prefix would fix it i think. can send a PR
- Vorherrschende Sprache
- Python
- Sterne
- 22k
- Forks
- 4.2k
- Ø Merge
- 3 T. 11 Std.
- Gemergte PRs (30 T.)
- 7
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus google/adk-python
-
LiteLlm with SSE streaming records the answer twice in gen_ai.output.messagesEvtl. vergeben @surajksharma07 hat das vor 1 Tag übernommen. Offenmodels
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
google/adk-python#7630 · 11 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 4 Tagen
-
Update opentelemetry-api and opentelemetry-sdk to 1.44.0Evtl. vergeben @llalitkumarrr hat das vor 15 Tagen übernommen. Offenrequest clarification tracing
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
google/adk-python#7433 · 5 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 4 Tagen
-
CI Mypy Check flags an existing streaming_utils.py error as new because the PR run reuses the baseline's mypy cacheEvtl. vergeben @DeanChensj hat das vor 17 Tagen übernommen. Offenneeds review
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
google/adk-python#7409 · 1 Kommentar · 2 zugewiesene Personen ·
Maintainer antworten meist innerhalb von 4 Tagen
-
A2aAgentExecutor sends the raw exception text to the A2A caller when the run failsEvtl. vergeben @sanketpatil06 hat das vor 18 Tagen übernommen. Offena2a request clarification
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
google/adk-python#7385 · 2 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 4 Tagen
-
Please support mermaid 12 (inbuild elk) in `adk web`Evtl. vergeben @sanketpatil06 hat das vor 18 Tagen übernommen. Offenneeds review web
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
google/adk-python#7381 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 4 Tagen
Alle Issues in google/adk-python
Ähnliche Issues
-
type-bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
push_gh-pages fails on master branch on forksEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offengood first issue infrastructure
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
kuznia-rdzeni/coreblocks#1135 ·
-
good first issue server
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
Maintainer antworten meist innerhalb von 1 Tag
-
documentation priority: high
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
a-lex-s/mealie-telegram-bot#54 ·
Maintainer antworten meist innerhalb von 1 Tag