mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-20 16:57:46 +00:00
Telemetry: Improve API response logging with function call details (#1064)
This commit is contained in:
@@ -4,18 +4,116 @@
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
import { GenerateContentResponse, Part } from '@google/genai';
|
||||
import { GenerateContentResponse, Part, FunctionCall } from '@google/genai';
|
||||
|
||||
export function getResponseText(
|
||||
response: GenerateContentResponse,
|
||||
): string | undefined {
|
||||
return (
|
||||
response.candidates?.[0]?.content?.parts
|
||||
?.map((part) => part.text)
|
||||
.join('') || undefined
|
||||
);
|
||||
const parts = response.candidates?.[0]?.content?.parts;
|
||||
if (!parts) {
|
||||
return undefined;
|
||||
}
|
||||
const textSegments = parts
|
||||
.map((part) => part.text)
|
||||
.filter((text): text is string => typeof text === 'string');
|
||||
|
||||
if (textSegments.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
return textSegments.join('');
|
||||
}
|
||||
|
||||
export function getResponseTextFromParts(parts: Part[]): string | undefined {
|
||||
return parts?.map((part) => part.text).join('') || undefined;
|
||||
if (!parts) {
|
||||
return undefined;
|
||||
}
|
||||
const textSegments = parts
|
||||
.map((part) => part.text)
|
||||
.filter((text): text is string => typeof text === 'string');
|
||||
|
||||
if (textSegments.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
return textSegments.join('');
|
||||
}
|
||||
|
||||
export function getFunctionCalls(
|
||||
response: GenerateContentResponse,
|
||||
): FunctionCall[] | undefined {
|
||||
const parts = response.candidates?.[0]?.content?.parts;
|
||||
if (!parts) {
|
||||
return undefined;
|
||||
}
|
||||
const functionCallParts = parts
|
||||
.filter((part) => !!part.functionCall)
|
||||
.map((part) => part.functionCall as FunctionCall);
|
||||
return functionCallParts.length > 0 ? functionCallParts : undefined;
|
||||
}
|
||||
|
||||
export function getFunctionCallsFromParts(
|
||||
parts: Part[],
|
||||
): FunctionCall[] | undefined {
|
||||
if (!parts) {
|
||||
return undefined;
|
||||
}
|
||||
const functionCallParts = parts
|
||||
.filter((part) => !!part.functionCall)
|
||||
.map((part) => part.functionCall as FunctionCall);
|
||||
return functionCallParts.length > 0 ? functionCallParts : undefined;
|
||||
}
|
||||
|
||||
export function getFunctionCallsAsJson(
|
||||
response: GenerateContentResponse,
|
||||
): string | undefined {
|
||||
const functionCalls = getFunctionCalls(response);
|
||||
if (!functionCalls) {
|
||||
return undefined;
|
||||
}
|
||||
return JSON.stringify(functionCalls, null, 2);
|
||||
}
|
||||
|
||||
export function getFunctionCallsFromPartsAsJson(
|
||||
parts: Part[],
|
||||
): string | undefined {
|
||||
const functionCalls = getFunctionCallsFromParts(parts);
|
||||
if (!functionCalls) {
|
||||
return undefined;
|
||||
}
|
||||
return JSON.stringify(functionCalls, null, 2);
|
||||
}
|
||||
|
||||
export function getStructuredResponse(
|
||||
response: GenerateContentResponse,
|
||||
): string | undefined {
|
||||
const textContent = getResponseText(response);
|
||||
const functionCallsJson = getFunctionCallsAsJson(response);
|
||||
|
||||
if (textContent && functionCallsJson) {
|
||||
return `${textContent}\n${functionCallsJson}`;
|
||||
}
|
||||
if (textContent) {
|
||||
return textContent;
|
||||
}
|
||||
if (functionCallsJson) {
|
||||
return functionCallsJson;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function getStructuredResponseFromParts(
|
||||
parts: Part[],
|
||||
): string | undefined {
|
||||
const textContent = getResponseTextFromParts(parts);
|
||||
const functionCallsJson = getFunctionCallsFromPartsAsJson(parts);
|
||||
|
||||
if (textContent && functionCallsJson) {
|
||||
return `${textContent}\n${functionCallsJson}`;
|
||||
}
|
||||
if (textContent) {
|
||||
return textContent;
|
||||
}
|
||||
if (functionCallsJson) {
|
||||
return functionCallsJson;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user