summaryrefslogtreecommitdiff
path: root/moneyjsx/src/util.tsx
blob: 097502e35abb7ac852a1837d84d410c3ba8699e4 (plain)
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 = {
    '&': '&',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#39;',
    '/': '&#x2F;',
    '`': '&#x60;',
    '=': '&#x3D;'
  };

  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';
}