Skip to content

Commit 8024e9c

Browse files
committed
syntesize a tool call id
1 parent 81c72b3 commit 8024e9c

File tree

1 file changed

+13
-4
lines changed
  • instrumentation-genai/opentelemetry-instrumentation-google-genai/src/opentelemetry/instrumentation/google_genai

1 file changed

+13
-4
lines changed

instrumentation-genai/opentelemetry-instrumentation-google-genai/src/opentelemetry/instrumentation/google_genai/message.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,22 @@ def to_system_instruction(
8080
def _to_chat_message(
8181
content: genai_types.Content,
8282
) -> ChatMessage:
83-
parts = (_to_part(part) for part in (content.parts or []))
83+
parts = (
84+
_to_part(part, idx) for idx, part in enumerate(content.parts or [])
85+
)
8486
return ChatMessage(
8587
role=_to_role(content.role),
8688
# filter Nones
8789
parts=[part for part in parts if part is not None],
8890
)
8991

9092

91-
def _to_part(part: genai_types.Part) -> MessagePart | None:
93+
def _to_part(part: genai_types.Part, idx: int) -> MessagePart | None:
94+
def tool_call_id(name: str | None) -> str:
95+
if name:
96+
return f"{name}_{idx}"
97+
return f"{idx}"
98+
9299
if (text := part.text) is not None:
93100
return TextPart(content=text)
94101

@@ -102,12 +109,14 @@ def _to_part(part: genai_types.Part) -> MessagePart | None:
102109

103110
if call := part.function_call:
104111
return ToolCallRequestPart(
105-
id=call.id or "", name=call.name or "", arguments=call.args
112+
id=call.id or tool_call_id(call.name),
113+
name=call.name or "",
114+
arguments=call.args,
106115
)
107116

108117
if response := part.function_response:
109118
return ToolCallResponsePart(
110-
id=response.id or "",
119+
id=response.id or tool_call_id(response.name),
111120
response=response.response,
112121
)
113122

0 commit comments

Comments
 (0)