| | import { AgentStep, AgentTrace, AgentTraceMetadata, FinalStep } from '@/types/agent';
|
| |
|
| | |
| | |
| |
|
| | const extractFinalAnswer = (steps: AgentStep[]): string | null => {
|
| | if (!steps || steps.length === 0) {
|
| | return null;
|
| | }
|
| |
|
| |
|
| | for (let i = steps.length - 1; i >= 0; i--) {
|
| | const step = steps[i];
|
| |
|
| | if (step.actions && Array.isArray(step.actions)) {
|
| | const finalAnswerAction = step.actions.find(
|
| | (action) => action.function_name === 'final_answer'
|
| | );
|
| |
|
| | if (finalAnswerAction && finalAnswerAction.parameters?.answer) {
|
| | return String(finalAnswerAction.parameters.answer);
|
| | }
|
| | }
|
| | }
|
| |
|
| |
|
| | const lastStep = steps[steps.length - 1];
|
| | return lastStep?.thought || null;
|
| | };
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | export const exportTraceToJson = (
|
| | trace: AgentTrace,
|
| | steps: AgentStep[],
|
| | metadata?: AgentTraceMetadata,
|
| | finalStep?: FinalStep
|
| | ): string => {
|
| | const exportData = getTraceExportData(trace, steps, metadata, finalStep);
|
| | return JSON.stringify(exportData, null, 2);
|
| | };
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | export const getTraceExportData = (
|
| | trace: AgentTrace,
|
| | steps: AgentStep[],
|
| | metadata?: AgentTraceMetadata,
|
| | finalStep?: FinalStep
|
| | ): object => {
|
| |
|
| | const finalMetadata = finalStep?.metadata || metadata || trace.traceMetadata;
|
| |
|
| | return {
|
| | trace: {
|
| | id: trace.id,
|
| | timestamp: trace.timestamp,
|
| | instruction: trace.instruction,
|
| | modelId: trace.modelId,
|
| | isRunning: trace.isRunning,
|
| | },
|
| | completion: finalStep ? {
|
| | status: finalStep.type,
|
| | message: finalStep.message || null,
|
| | finalAnswer: extractFinalAnswer(steps),
|
| | } : null,
|
| | metadata: finalMetadata,
|
| |
|
| | user_evaluation: finalMetadata?.user_evaluation || 'not_evaluated',
|
| | steps: steps.map((step) => ({
|
| | traceId: step.traceId,
|
| | stepId: step.stepId,
|
| | error: step.error,
|
| | image: step.image,
|
| | thought: step.thought,
|
| | actions: step.actions,
|
| | duration: step.duration,
|
| | inputTokensUsed: step.inputTokensUsed,
|
| | outputTokensUsed: step.outputTokensUsed,
|
| | step_evaluation: step.step_evaluation,
|
| | })),
|
| | exportedAt: new Date().toISOString(),
|
| | };
|
| | };
|
| |
|
| | |
| | |
| | |
| | |
| |
|
| | export const downloadJson = (jsonString: string, filename: string = 'trace.json') => {
|
| | const blob = new Blob([jsonString], { type: 'application/json' });
|
| | const url = URL.createObjectURL(blob);
|
| | const link = document.createElement('a');
|
| | link.href = url;
|
| | link.download = filename;
|
| | document.body.appendChild(link);
|
| | link.click();
|
| | document.body.removeChild(link);
|
| | URL.revokeObjectURL(url);
|
| | };
|
| |
|