lobe-chat

Форк
0
/
parseToolCalls.test.ts 
123 строки · 3.3 Кб
1
import { describe, expect, it } from 'vitest';
2
import { ZodError } from 'zod';
3

4
import { parseToolCalls } from '../parseToolCalls';
5

6
describe('parseToolCalls', () => {
7
  it('should create add new item', () => {
8
    const chunk = [
9
      { index: 0, id: '1', type: 'function', function: { name: 'func', arguments: '' } },
10
    ];
11

12
    const result = parseToolCalls([], chunk);
13
    expect(result).toEqual([
14
      { id: '1', type: 'function', function: { name: 'func', arguments: '' } },
15
    ]);
16
  });
17

18
  it('should update arguments if there is a toolCall', () => {
19
    const origin = [{ id: '1', type: 'function', function: { name: 'func', arguments: '' } }];
20

21
    const chunk1 = [{ index: 0, function: { arguments: '{"lo' } }];
22

23
    const result1 = parseToolCalls(origin, chunk1);
24
    expect(result1).toEqual([
25
      { id: '1', type: 'function', function: { name: 'func', arguments: '{"lo' } },
26
    ]);
27

28
    const chunk2 = [{ index: 0, function: { arguments: 'cation\\": \\"Hangzhou\\"}' } }];
29
    const result2 = parseToolCalls(result1, chunk2);
30

31
    expect(result2).toEqual([
32
      {
33
        id: '1',
34
        type: 'function',
35
        function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
36
      },
37
    ]);
38
  });
39

40
  it('should add a new tool call if the index is different', () => {
41
    const origin = [
42
      {
43
        id: '1',
44
        type: 'function',
45
        function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
46
      },
47
    ];
48

49
    const chunk = [
50
      {
51
        index: 1,
52
        id: '2',
53
        type: 'function',
54
        function: { name: 'func', arguments: '' },
55
      },
56
    ];
57

58
    const result1 = parseToolCalls(origin, chunk);
59
    expect(result1).toEqual([
60
      {
61
        id: '1',
62
        type: 'function',
63
        function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
64
      },
65
      { id: '2', type: 'function', function: { name: 'func', arguments: '' } },
66
    ]);
67
  });
68

69
  it('should update correct arguments if there are multi tool calls', () => {
70
    const origin = [
71
      {
72
        id: '1',
73
        type: 'function',
74
        function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
75
      },
76
      { id: '2', type: 'function', function: { name: 'func', arguments: '' } },
77
    ];
78

79
    const chunk = [{ index: 1, function: { arguments: '{"location\\": \\"Beijing\\"}' } }];
80

81
    const result1 = parseToolCalls(origin, chunk);
82
    expect(result1).toEqual([
83
      {
84
        id: '1',
85
        type: 'function',
86
        function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
87
      },
88
      {
89
        id: '2',
90
        type: 'function',
91
        function: { name: 'func', arguments: '{"location\\": \\"Beijing\\"}' },
92
      },
93
    ]);
94
  });
95

96
  it('should throw error if incomplete tool calls data', () => {
97
    const origin = [
98
      {
99
        id: '1',
100
        type: 'function',
101
        function: { name: 'func', arguments: '{"location\\": \\"Hangzhou\\"}' },
102
      },
103
    ];
104

105
    const chunk = [{ index: 1, id: '2', type: 'function' }];
106

107
    try {
108
      parseToolCalls(origin, chunk as any);
109
    } catch (e) {
110
      expect(e).toEqual(
111
        new ZodError([
112
          {
113
            code: 'invalid_type',
114
            expected: 'object',
115
            received: 'undefined',
116
            path: ['function'],
117
            message: 'Required',
118
          },
119
        ]),
120
      );
121
    }
122
  });
123
});
124

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.