Skip to content

Commit 63be4b7

Browse files
committed
fix(tracing): add system prompt, model to google genai (#18424)
Related to getsentry/testing-ai-sdk-integrations#10 Fix JS-1218
1 parent 6e539e0 commit 63be4b7

File tree

1 file changed

+38
-11
lines changed
  • packages/core/src/tracing/google-genai

1 file changed

+38
-11
lines changed

packages/core/src/tracing/google-genai/index.ts

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@ import {
1616
GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE,
1717
GEN_AI_REQUEST_TOP_K_ATTRIBUTE,
1818
GEN_AI_REQUEST_TOP_P_ATTRIBUTE,
19+
GEN_AI_RESPONSE_MODEL_ATTRIBUTE,
1920
GEN_AI_RESPONSE_TEXT_ATTRIBUTE,
2021
GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,
2122
GEN_AI_SYSTEM_ATTRIBUTE,
2223
GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,
2324
GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,
2425
GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE,
2526
} from '../ai/gen-ai-attributes';
26-
import { buildMethodPath, getFinalOperationName, getSpanOperation, getTruncatedJsonString } from '../ai/utils';
27+
import { truncateGenAiMessages } from '../ai/messageTruncation';
28+
import { buildMethodPath, getFinalOperationName, getSpanOperation } from '../ai/utils';
2729
import { CHAT_PATH, CHATS_CREATE_METHOD, GOOGLE_GENAI_SYSTEM_NAME } from './constants';
2830
import { instrumentStream } from './streaming';
2931
import type {
@@ -134,27 +136,52 @@ function extractRequestAttributes(
134136
* Handles different parameter formats for different Google GenAI methods.
135137
*/
136138
function addPrivateRequestAttributes(span: Span, params: Record<string, unknown>): void {
139+
const messages: unknown[] = [];
140+
141+
// include system prompt if present in config param
142+
if (
143+
'config' in params &&
144+
params.config &&
145+
typeof params.config === 'object' &&
146+
'systemInstruction' in params.config
147+
) {
148+
messages.push({
149+
role: 'system',
150+
content: params.config.systemInstruction,
151+
});
152+
}
153+
137154
// For models.generateContent: ContentListUnion: Content | Content[] | PartUnion | PartUnion[]
138155
if ('contents' in params) {
139-
const contents = params.contents;
140-
// For models.generateContent: ContentListUnion: Content | Content[] | PartUnion | PartUnion[]
141-
const truncatedContents = getTruncatedJsonString(contents);
142-
span.setAttributes({ [GEN_AI_REQUEST_MESSAGES_ATTRIBUTE]: truncatedContents });
156+
if (Array.isArray(params.contents)) {
157+
messages.push(...params.contents);
158+
} else {
159+
messages.push({ role: 'user', content: params.contents });
160+
}
143161
}
144162

145163
// For chat.sendMessage: message can be string or Part[]
146164
if ('message' in params) {
147-
const message = params.message;
148-
const truncatedMessage = getTruncatedJsonString(message);
149-
span.setAttributes({ [GEN_AI_REQUEST_MESSAGES_ATTRIBUTE]: truncatedMessage });
165+
if (Array.isArray(params.message)) {
166+
messages.push(...params.message);
167+
} else {
168+
messages.push({ role: 'user', content: params.message });
169+
}
150170
}
151171

152172
// For chats.create: history contains the conversation history
153173
if ('history' in params) {
154-
const history = params.history;
155-
const truncatedHistory = getTruncatedJsonString(history);
156-
span.setAttributes({ [GEN_AI_REQUEST_MESSAGES_ATTRIBUTE]: truncatedHistory });
174+
if (Array.isArray(params.history)) {
175+
messages.push(...params.history);
176+
} else {
177+
messages.push({ role: 'user', content: params.history });
178+
}
157179
}
180+
181+
span.setAttributes({
182+
[GEN_AI_REQUEST_MESSAGES_ATTRIBUTE]: JSON.stringify(truncateGenAiMessages(messages)),
183+
[GEN_AI_RESPONSE_MODEL_ATTRIBUTE]: String(params.model),
184+
});
158185
}
159186

160187
/**

0 commit comments

Comments
 (0)