1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
import * as api from './api';
import * as chat from './chat';
export function escapeHtml( html: string ) {
const entityMap = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
'/': '/',
'`': '`',
'=': '='
};
return String( html ).replace( /[&<>"'`=\/]/g, ( s ) => {
return entityMap[s];
} );
}
export function parseJWT( token: string ) : any {
const parts = token.split( '.' );
let encoded = parts[1];
encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');
const pad = encoded.length % 4;
if( pad === 1 )
throw new Error( 'what the fuck' );
if( pad > 1 )
encoded += new Array( 5 - pad ).join( '=' );
const payload = JSON.parse( atob( encoded ) );
return payload;
}
export function isToolStr( buf: string, model: api.Model ) {
const trimmed = buf.replace( /\s+/g, '' ).toLowerCase();
const capabilities = model.capabilities;
for( let tool in capabilities ) {
let name = tool.toLowerCase();
let str = `{"name":"${name}"`;
let not_matched = false;
for( let i = 0; i < Math.min( trimmed.length, str.length ); i++ ) {
if( trimmed[i] !== str[i] ) {
not_matched = true;
break;
}
}
if( !not_matched )
return true;
}
return false;
}
export function getToolCall( msg: chat.Msg ) {
let first_bracket = msg.content.indexOf( '{' );
let last_bracket = msg.content.lastIndexOf( '}' );
if( first_bracket == -1 || last_bracket == -1 )
return null;
let call = msg.content.substring( first_bracket, last_bracket + 1 );
let json = null;
try { json = JSON.parse( call ); }
catch( e ) { return null; }
return json;
}
export function sizeHumanReadable( size: number ) {
if( size < 1024 )
return size + ' B';
else if( size < 1024 * 1024 )
return ( size / 1024 ).toFixed( 2 ) + ' KB';
else if( size < 1024 * 1024 * 1024 )
return ( size / 1024 / 1024 ).toFixed( 2 ) + ' MB';
else
return ( size / 1024 / 1024 / 1024 ).toFixed( 2 ) + ' GB';
}
|