1
import { describe, expect, it } from 'vitest';
2
import { ZodError } from 'zod';
4
import { parseToolCalls } from '../parseToolCalls';
6
describe('parseToolCalls', () => {
7
it('should create add new item', () => {
9
{ index: 0, id: '1', type: 'function', function: { name: 'func', arguments: '' } },
12
const result = parseToolCalls([], chunk);
13
expect(result).toEqual([
14
{ id: '1', type: 'function', function: { name: 'func', arguments: '' } },
18
it('should update arguments if there is a toolCall', () => {
19
const origin = [{ id: '1', type: 'function', function: { name: 'func', arguments: '' } }];
21
const chunk1 = [{ index: 0, function: { arguments: '{"lo' } }];
23
const result1 = parseToolCalls(origin, chunk1);
24
expect(result1).toEqual([
25
{ id: '1', type: 'function', function: { name: 'func', arguments: '{"lo' } },
28
const chunk2 = [{ index: 0, function: { arguments: 'cation\\": \\"Hangzhou\\"}' } }];
29
const result2 = parseToolCalls(result1, chunk2);
31
expect(result2).toEqual([
35
function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
40
it('should add a new tool call if the index is different', () => {
45
function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
54
function: { name: 'func', arguments: '' },
58
const result1 = parseToolCalls(origin, chunk);
59
expect(result1).toEqual([
63
function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
65
{ id: '2', type: 'function', function: { name: 'func', arguments: '' } },
69
it('should update correct arguments if there are multi tool calls', () => {
74
function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
76
{ id: '2', type: 'function', function: { name: 'func', arguments: '' } },
79
const chunk = [{ index: 1, function: { arguments: '{"location\\": \\"Beijing\\"}' } }];
81
const result1 = parseToolCalls(origin, chunk);
82
expect(result1).toEqual([
86
function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
91
function: { name: 'func', arguments: '{"location\\": \\"Beijing\\"}' },
96
it('should throw error if incomplete tool calls data', () => {
101
function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
105
const chunk = [{ index: 1, id: '2', type: 'function' }];
108
parseToolCalls(origin, chunk as any);
113
code: 'invalid_type',
115
received: 'undefined',