adk-typescript
Version:
TypeScript port of Google's Agent Development Kit (ADK)
66 lines (65 loc) • 2.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertSessionToEvalFormat = convertSessionToEvalFormat;
/**
* Converts a session into an evaluation format
*
* @param session The session to convert
* @returns Array of evaluation cases extracted from the session
*/
function convertSessionToEvalFormat(session) {
const evalCases = [];
const events = session.events || [];
for (let i = 0; i < events.length; i++) {
const event = events[i];
// Skip if not a user event or has no content
if (event.author !== 'user' || !event.content || !event.content.parts || event.content.parts.length === 0) {
continue;
}
// Extract user query
const query = event.content.parts[0].text || '';
// Find the corresponding tool usage or response for the query
const expectedToolUse = [];
const intermediateAgentResponses = [];
// Check subsequent events to extract tool uses or responses for this turn
for (let j = i + 1; j < events.length; j++) {
const subsequentEvent = events[j];
const eventAuthor = subsequentEvent.author || 'agent';
// If we find a user event, this is the start of a new turn
if (eventAuthor === 'user') {
break;
}
if (!subsequentEvent.content || !subsequentEvent.content.parts) {
continue;
}
for (const part of subsequentEvent.content.parts) {
if (part.functionCall) {
const toolName = part.functionCall.name || '';
const toolInput = part.functionCall.args || {};
expectedToolUse.push({
tool_name: toolName,
tool_input: toolInput,
});
}
else if (part.text) {
// Also keep track of all the natural language responses that
// agent (or sub agents) generated
intermediateAgentResponses.push({
author: eventAuthor,
text: part.text
});
}
}
}
// We assume the last natural language intermediate response is the final response
// from the agent/model. We treat that as a reference.
evalCases.push({
query,
expected_tool_use: expectedToolUse,
expected_intermediate_agent_responses: intermediateAgentResponses.slice(0, -1),
reference: intermediateAgentResponses.length > 0 ?
intermediateAgentResponses[intermediateAgentResponses.length - 1].text : '',
});
}
return evalCases;
}