Skip to content

Commit 08103d8

Browse files
committed
Update system instruction from 1 text part to a list of MessageParts
1 parent 97d300f commit 08103d8

File tree

2 files changed

+26
-35
lines changed
  • instrumentation-genai/opentelemetry-instrumentation-vertexai/src/opentelemetry/instrumentation/vertexai

2 files changed

+26
-35
lines changed

instrumentation-genai/opentelemetry-instrumentation-vertexai/src/opentelemetry/instrumentation/vertexai/patch.py

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
)
3636
from opentelemetry.instrumentation.vertexai.utils import (
3737
GenerateContentParams,
38-
convert_content_to_message,
39-
convert_response_to_output_messages,
38+
_map_finish_reason,
39+
convert_content_to_message_parts,
4040
get_genai_request_attributes,
4141
get_genai_response_attributes,
4242
get_server_attributes,
@@ -51,7 +51,8 @@
5151
from opentelemetry.util.genai.completion_hook import CompletionHook
5252
from opentelemetry.util.genai.types import (
5353
ContentCapturingMode,
54-
Text,
54+
InputMessage,
55+
OutputMessage,
5556
)
5657
from opentelemetry.util.genai.utils import Base64JsonEncoder
5758

@@ -179,21 +180,30 @@ def handle_response(
179180
)
180181
system_instructions, inputs, outputs = [], [], []
181182
if params.system_instruction:
182-
system_instructions = [
183-
Text(
184-
content="\n".join(
185-
part.text
186-
for part in params.system_instruction.parts
187-
)
188-
)
189-
]
183+
system_instructions = convert_content_to_message_parts(
184+
params.system_instruction
185+
)
190186
if params.contents:
191187
inputs = [
192-
convert_content_to_message(content)
188+
InputMessage(
189+
role=content.role,
190+
parts=convert_content_to_message_parts(content),
191+
)
193192
for content in params.contents
194193
]
195194
if response:
196-
outputs = convert_response_to_output_messages(response)
195+
outputs = [
196+
OutputMessage(
197+
finish_reason=_map_finish_reason(
198+
candidate.finish_reason
199+
),
200+
role=candidate.content.role,
201+
parts=convert_content_to_message_parts(
202+
candidate.content
203+
),
204+
)
205+
for candidate in response.candidates
206+
]
197207
content_attributes = {
198208
k: [asdict(x) for x in v]
199209
for k, v in [

instrumentation-genai/opentelemetry-instrumentation-vertexai/src/opentelemetry/instrumentation/vertexai/utils.py

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,7 @@
5353
from opentelemetry.util.genai.types import (
5454
ContentCapturingMode,
5555
FinishReason,
56-
InputMessage,
5756
MessagePart,
58-
OutputMessage,
5957
Text,
6058
ToolCall,
6159
ToolCallResponse,
@@ -310,26 +308,9 @@ def request_to_events(
310308
yield user_event(role=content.role, content=request_content)
311309

312310

313-
def convert_response_to_output_messages(
314-
response: prediction_service.GenerateContentResponse
315-
| prediction_service_v1beta1.GenerateContentResponse,
316-
) -> list[OutputMessage]:
317-
output_messages: list[OutputMessage] = []
318-
for candidate in response.candidates:
319-
message = convert_content_to_message(candidate.content)
320-
output_messages.append(
321-
OutputMessage(
322-
finish_reason=_map_finish_reason(candidate.finish_reason),
323-
role=message.role,
324-
parts=message.parts,
325-
)
326-
)
327-
return output_messages
328-
329-
330-
def convert_content_to_message(
311+
def convert_content_to_message_parts(
331312
content: content.Content | content_v1beta1.Content,
332-
) -> InputMessage:
313+
) -> list[MessagePart]:
333314
parts: MessagePart = []
334315
for idx, part in enumerate(content.parts):
335316
if "function_response" in part:
@@ -359,7 +340,7 @@ def convert_content_to_message(
359340
)
360341
dict_part["type"] = type(part)
361342
parts.append(dict_part)
362-
return InputMessage(role=content.role, parts=parts)
343+
return parts
363344

364345

365346
def response_to_events(

0 commit comments

Comments
 (0)