fix(basic.gblib): FUNCTION GPT.
This commit is contained in:
		
							parent
							
								
									842e70d725
								
							
						
					
					
						commit
						26b05aa394
					
				
					 6 changed files with 141 additions and 41 deletions
				
			
		| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
import { GBLog } from 'botlib';
 | 
			
		||||
import { GBLog, GBMinInstance } from 'botlib';
 | 
			
		||||
import { GBConfigService } from '../../core.gbapp/services/GBConfigService.js';
 | 
			
		||||
import { ChartServices } from './ChartServices.js';
 | 
			
		||||
import urlJoin from 'url-join';
 | 
			
		||||
| 
						 | 
				
			
			@ -61,6 +61,10 @@ const { List, Buttons } = pkg;
 | 
			
		|||
import mime from 'mime-types';
 | 
			
		||||
import { GBLogEx } from '../../core.gbapp/services/GBLogEx.js';
 | 
			
		||||
import { GBUtil } from '../../../src/util.js';
 | 
			
		||||
import SwaggerClient from 'swagger-client';
 | 
			
		||||
import { GBVMService } from './GBVMService.js';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Default check interval for user replay
 | 
			
		||||
| 
						 | 
				
			
			@ -317,7 +321,7 @@ export class DialogKeywords {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  // https://weblog.west-wind.com/posts/2008/Mar/18/A-simple-formatDate-function-for-JavaScript
 | 
			
		||||
  public async format({pid, value, format}) {
 | 
			
		||||
  public async format({ pid, value, format }) {
 | 
			
		||||
 | 
			
		||||
    const { min, user } = await DialogKeywords.getProcessInfo(pid);
 | 
			
		||||
    const contentLocale = min.core.getParam(
 | 
			
		||||
| 
						 | 
				
			
			@ -327,10 +331,10 @@ export class DialogKeywords {
 | 
			
		|||
    );
 | 
			
		||||
 | 
			
		||||
    if (!(value instanceof Date)) {
 | 
			
		||||
      value = SystemKeywords.getDateFromLocaleString(pid,value, contentLocale);
 | 
			
		||||
      value = SystemKeywords.getDateFromLocaleString(pid, value, contentLocale);
 | 
			
		||||
    }
 | 
			
		||||
    var date:any = new Date(value); //don't change original date
 | 
			
		||||
    
 | 
			
		||||
    var date: any = new Date(value); //don't change original date
 | 
			
		||||
 | 
			
		||||
    if (!format)
 | 
			
		||||
      format = "MM/dd/yyyy";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -375,7 +379,7 @@ export class DialogKeywords {
 | 
			
		|||
   *
 | 
			
		||||
   * https://stackoverflow.com/a/1214753/18511
 | 
			
		||||
   */
 | 
			
		||||
  public async dateAdd({pid, date, mode, units}) {
 | 
			
		||||
  public async dateAdd({ pid, date, mode, units }) {
 | 
			
		||||
 | 
			
		||||
    const { min, user } = await DialogKeywords.getProcessInfo(pid);
 | 
			
		||||
    const contentLocale = min.core.getParam(
 | 
			
		||||
| 
						 | 
				
			
			@ -386,7 +390,7 @@ export class DialogKeywords {
 | 
			
		|||
 | 
			
		||||
    let dateCopy = date;
 | 
			
		||||
    if (!(dateCopy instanceof Date)) {
 | 
			
		||||
      dateCopy = SystemKeywords.getDateFromLocaleString(pid,dateCopy, contentLocale);
 | 
			
		||||
      dateCopy = SystemKeywords.getDateFromLocaleString(pid, dateCopy, contentLocale);
 | 
			
		||||
    }
 | 
			
		||||
    var ret = new Date(dateCopy); //don't change original date
 | 
			
		||||
    var checkRollover = function () {
 | 
			
		||||
| 
						 | 
				
			
			@ -617,8 +621,7 @@ export class DialogKeywords {
 | 
			
		|||
    if (!people) {
 | 
			
		||||
      throw new Error(`Invalid access. Check if People sheet has the role ${role} checked.`);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
    else {
 | 
			
		||||
      GBLogEx.info(min, `Allowed access for ${user.userSystemId} on ${role}`);
 | 
			
		||||
      return people;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -948,7 +951,7 @@ export class DialogKeywords {
 | 
			
		|||
        const path = DialogKeywords.getGBAIPath(botId);
 | 
			
		||||
        let url = `${baseUrl}/drive/root:/${path}:/children`;
 | 
			
		||||
 | 
			
		||||
        GBLog.info(`Loading HEAR AS .xlsx options from Sheet: ${url}`);
 | 
			
		||||
        GBLogEx.info(min, `Loading HEAR AS .xlsx options from Sheet: ${url}`);
 | 
			
		||||
        const res = await client.api(url).get();
 | 
			
		||||
 | 
			
		||||
        // Finds .xlsx specified by arg.
 | 
			
		||||
| 
						 | 
				
			
			@ -999,7 +1002,7 @@ export class DialogKeywords {
 | 
			
		|||
        }
 | 
			
		||||
      } else if (kind === 'file') {
 | 
			
		||||
        GBLog.info(`BASIC (${min.botId}): Upload done for ${answer.filename}.`);
 | 
			
		||||
        const handle = WebAutomationServices.cyrb53({pid, str: min.botId + answer.filename});
 | 
			
		||||
        const handle = WebAutomationServices.cyrb53({ pid, str: min.botId + answer.filename });
 | 
			
		||||
        GBServer.globals.files[handle] = answer;
 | 
			
		||||
        result = handle;
 | 
			
		||||
      } else if (kind === 'boolean') {
 | 
			
		||||
| 
						 | 
				
			
			@ -1120,7 +1123,7 @@ export class DialogKeywords {
 | 
			
		|||
      } else if (kind === 'qr-scanner') {
 | 
			
		||||
        //https://github.com/GeneralBots/BotServer/issues/171
 | 
			
		||||
        GBLog.info(`BASIC (${min.botId}): Upload done for ${answer.filename}.`);
 | 
			
		||||
        const handle = WebAutomationServices.cyrb53({pid, str: min.botId + answer.filename});
 | 
			
		||||
        const handle = WebAutomationServices.cyrb53({ pid, str: min.botId + answer.filename });
 | 
			
		||||
        GBServer.globals.files[handle] = answer;
 | 
			
		||||
        QrScanner.scanImage(GBServer.globals.files[handle])
 | 
			
		||||
          .then(result => console.log(result))
 | 
			
		||||
| 
						 | 
				
			
			@ -1242,6 +1245,88 @@ export class DialogKeywords {
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public async messageBot({ pid, text }) {
 | 
			
		||||
    const { min, user } = await DialogKeywords.getProcessInfo(pid);
 | 
			
		||||
    GBLogEx.info(min,`MESSAGE BOT: ${text}.`);
 | 
			
		||||
 | 
			
		||||
    const conversation = min['apiConversations'][pid];
 | 
			
		||||
 | 
			
		||||
    conversation.client.apis.Conversations.Conversations_PostActivity({
 | 
			
		||||
      conversationId: conversation.conversationId,
 | 
			
		||||
      activity: {
 | 
			
		||||
        textFormat: 'plain',
 | 
			
		||||
        text: text,
 | 
			
		||||
        type: 'message',
 | 
			
		||||
        from: {
 | 
			
		||||
          id: 'word',
 | 
			
		||||
          name: 'word'
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
    const watermarkMap = conversation.watermarkMap;
 | 
			
		||||
 | 
			
		||||
    let messages = [];
 | 
			
		||||
 | 
			
		||||
    const response = await conversation.client.apis.Conversations.Conversations_GetActivities({
 | 
			
		||||
      conversationId: conversation.conversationId,
 | 
			
		||||
      watermark: conversation.watermark
 | 
			
		||||
    });
 | 
			
		||||
    conversation.watermarkMap = response.obj.watermark;
 | 
			
		||||
    let activities = response.obj.activites;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    if (activities && activities.length) {
 | 
			
		||||
      activities = activities.filter(m => m.from.id === min.botId && m.type === 'message');
 | 
			
		||||
      if (activities.length) {
 | 
			
		||||
        activities.forEach(activity => {
 | 
			
		||||
          messages.push({ text: activity.text });
 | 
			
		||||
          GBLogEx.info(min, `MESSAGE BOT answer from bot: ${activity.text}`);
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return messages.join('\n');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  public async start({ botId, botApiKey, userSystemId, text }) {
 | 
			
		||||
 | 
			
		||||
    let min: GBMinInstance = GBServer.globals.minInstances.filter(p => p.instance.botId === botId)[0];
 | 
			
		||||
    let sec = new SecService();
 | 
			
		||||
    let user = await sec.getUserFromSystemId(userSystemId);
 | 
			
		||||
    if (!user) {
 | 
			
		||||
      user = await sec.ensureUser(
 | 
			
		||||
        min,
 | 
			
		||||
        userSystemId,
 | 
			
		||||
        userSystemId,
 | 
			
		||||
        null,
 | 
			
		||||
        'api',
 | 
			
		||||
        'API User',
 | 
			
		||||
        null
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    const pid = GBVMService.createProcessInfo(user, min, 'api', null);
 | 
			
		||||
    
 | 
			
		||||
    const conversation = min['apiConversations'][pid];
 | 
			
		||||
 | 
			
		||||
    const client = await new SwaggerClient({
 | 
			
		||||
      spec: JSON.parse(Fs.readFileSync('directline-3.0.json', 'utf8')),
 | 
			
		||||
      requestInterceptor: req => {
 | 
			
		||||
        req.headers['Authorization'] = `Bearer ${min.instance.webchatKey}`;
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
    conversation.client = client;
 | 
			
		||||
    const response = await client.apis.Conversations.Conversations_StartConversation();
 | 
			
		||||
    conversation.conversationId = response.obj.conversationId;
 | 
			
		||||
 | 
			
		||||
    return  await GBVMService.callVM('start', min, null, pid);
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  public static async getProcessInfo(pid: number) {
 | 
			
		||||
    const proc = GBServer.globals.processes[pid];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1270,10 +1355,10 @@ export class DialogKeywords {
 | 
			
		|||
        min,
 | 
			
		||||
        text,
 | 
			
		||||
        user.locale ? user.locale : min.core.getParam(min.instance, 'Locale',
 | 
			
		||||
         GBConfigService.get('LOCALE'))
 | 
			
		||||
          GBConfigService.get('LOCALE'))
 | 
			
		||||
      );
 | 
			
		||||
      GBLog.verbose(`Translated text(playMarkdown): ${text}.`);
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      await min.conversationalService['sendOnConversation'](min, user, text);
 | 
			
		||||
    }
 | 
			
		||||
    return { status: 0 };
 | 
			
		||||
| 
						 | 
				
			
			@ -1336,19 +1421,19 @@ export class DialogKeywords {
 | 
			
		|||
 | 
			
		||||
    else {
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      const ext = Path.extname(filename);
 | 
			
		||||
      const gbaiName = DialogKeywords.getGBAIPath(min.botId);
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      let { baseUrl, client } = await GBDeployer.internalGetDriveClient(min);
 | 
			
		||||
      const fileUrl = urlJoin('/', gbaiName, `${min.botId}.gbdrive`, filename);
 | 
			
		||||
      GBLog.info(`BASIC: Direct send from .gbdrive: ${fileUrl} to ${mobile}.`);
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      const sys = new SystemKeywords();
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      const pathOnly = fileUrl.substring(0, fileUrl.lastIndexOf('/'));
 | 
			
		||||
      const fileOnly = fileUrl.substring(fileUrl.lastIndexOf('/') + 1);
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      let template = await sys.internalGetDocument(client, baseUrl, pathOnly, fileOnly);
 | 
			
		||||
 | 
			
		||||
      const driveUrl = template['@microsoft.graph.downloadUrl'];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -940,8 +940,7 @@ export class GBVMService extends GBService {
 | 
			
		|||
    text: string,
 | 
			
		||||
    min: GBMinInstance,
 | 
			
		||||
    step,
 | 
			
		||||
    user: GuaribasUser,
 | 
			
		||||
    deployer: GBDeployer,
 | 
			
		||||
    pid,
 | 
			
		||||
    debug: boolean = false,
 | 
			
		||||
    params = []
 | 
			
		||||
  ) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1001,7 +1000,8 @@ export class GBVMService extends GBService {
 | 
			
		|||
 | 
			
		||||
    let code = min.sandBoxMap[text];
 | 
			
		||||
    const channel = step ? step.context.activity.channelId : 'web';
 | 
			
		||||
    const pid = GBVMService.createProcessInfo(user, min, channel, text);
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    const dk = new DialogKeywords();
 | 
			
		||||
    const sys = new SystemKeywords();
 | 
			
		||||
    await dk.setFilter({ pid: pid, value: null });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -139,7 +139,9 @@ export class ScheduleServices extends GBService {
 | 
			
		|||
              p => p.instance.instanceId === item.instanceId
 | 
			
		||||
            )[0];
 | 
			
		||||
            GBLogEx.info(min,`Running .gbdialog word ${item.name} on:${item.schedule}...`);
 | 
			
		||||
            await GBVMService.callVM(script, min, null, null, null, false);
 | 
			
		||||
    
 | 
			
		||||
            const pid = GBVMService.createProcessInfo(null, min, 'batch', null);
 | 
			
		||||
            await GBVMService.callVM(script, min, null, pid);
 | 
			
		||||
          };
 | 
			
		||||
          (async () => {
 | 
			
		||||
            await finalData();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,7 +90,7 @@ export class SystemKeywords {
 | 
			
		|||
    const step = null;
 | 
			
		||||
    const deployer = null;
 | 
			
		||||
 | 
			
		||||
    return await GBVMService.callVM(text, min, step, user, deployer, false);
 | 
			
		||||
    return await GBVMService.callVM(text, min, step, pid,false, [text]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public async append({ pid, args }) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -759,6 +759,7 @@ export class GBMinService {
 | 
			
		|||
      const gbkbPath = DialogKeywords.getGBAIPath(min.botId, 'gbkb');
 | 
			
		||||
      min['vectorStorePath'] = Path.join('work', gbkbPath, 'docs-vectorized');
 | 
			
		||||
    }
 | 
			
		||||
    min['apiConversations'] = {};
 | 
			
		||||
    min.packages = sysPackages;
 | 
			
		||||
 | 
			
		||||
    // NLP Manager.
 | 
			
		||||
| 
						 | 
				
			
			@ -942,7 +943,7 @@ export class GBMinService {
 | 
			
		|||
 | 
			
		||||
    req.body.channelId = req.body.from.channelIdEx === 'whatsapp' ? 'omnichannel' : req.body.channelId;
 | 
			
		||||
    req.body.group = req.body.from.group;
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    // Default activity processing and handler.
 | 
			
		||||
 | 
			
		||||
    const handler = async context => {
 | 
			
		||||
| 
						 | 
				
			
			@ -1048,7 +1049,7 @@ export class GBMinService {
 | 
			
		|||
            if (startDialog) {
 | 
			
		||||
              await sec.setParam(userId, 'welcomed', 'true');
 | 
			
		||||
              GBLog.info(`Auto start (teams) dialog is now being called: ${startDialog} for ${min.instance.botId}...`);
 | 
			
		||||
              await GBVMService.callVM(startDialog.toLowerCase(), min, step, user, this.deployer, false);
 | 
			
		||||
              await GBVMService.callVM(startDialog.toLowerCase(), min, step, pid);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1064,6 +1065,12 @@ export class GBMinService {
 | 
			
		|||
 | 
			
		||||
        const startDialog = min.core.getParam(min.instance, 'Start Dialog', null);
 | 
			
		||||
 | 
			
		||||
        let pid = step.context.activity['pid'];
 | 
			
		||||
        if (!pid){
 | 
			
		||||
          pid = GBVMService.createProcessInfo(user, min, step.context.activity.channelId, null);
 | 
			
		||||
        }
 | 
			
		||||
        step.context.activity['pid'] = pid;
 | 
			
		||||
 | 
			
		||||
        if (context.activity.type === 'installationUpdate') {
 | 
			
		||||
          GBLog.info(`Bot installed on Teams.`);
 | 
			
		||||
        } else if (context.activity.type === 'conversationUpdate' && context.activity.membersAdded.length > 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1095,7 +1102,7 @@ export class GBMinService {
 | 
			
		|||
                GBLog.info(
 | 
			
		||||
                  `Auto start (web 1) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...`
 | 
			
		||||
                );
 | 
			
		||||
                await GBVMService.callVM(startDialog.toLowerCase(), min, step, user, this.deployer, false);
 | 
			
		||||
                await GBVMService.callVM(startDialog.toLowerCase(), min, step, pid);
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          } else {
 | 
			
		||||
| 
						 | 
				
			
			@ -1104,11 +1111,8 @@ export class GBMinService {
 | 
			
		|||
            return;
 | 
			
		||||
          }
 | 
			
		||||
        } else if (context.activity.type === 'message') {
 | 
			
		||||
 | 
			
		||||
          // Processes messages activities.
 | 
			
		||||
 | 
			
		||||
          const pid = GBVMService.createProcessInfo(user, min, step.context.activity.channelId, null);
 | 
			
		||||
          step.context.activity['pid'] = pid;
 | 
			
		||||
 | 
			
		||||
          await this.processMessageActivity(context, min, step, pid);
 | 
			
		||||
        } else if (context.activity.type === 'event') {
 | 
			
		||||
| 
						 | 
				
			
			@ -1171,7 +1175,7 @@ export class GBMinService {
 | 
			
		|||
      if (startDialog && !min['conversationWelcomed'][step.context.activity.conversation.id]) {
 | 
			
		||||
        user.welcomed = true;
 | 
			
		||||
        GBLog.info(`Auto start (web 2) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...`);
 | 
			
		||||
        await GBVMService.callVM(startDialog.toLowerCase(), min, step, user, this.deployer, false);
 | 
			
		||||
        await GBVMService.callVM(startDialog.toLowerCase(), min, step, pid);
 | 
			
		||||
      }
 | 
			
		||||
    } else if (context.activity.name === 'updateToken') {
 | 
			
		||||
      const token = context.activity.data;
 | 
			
		||||
| 
						 | 
				
			
			@ -1400,7 +1404,7 @@ export class GBMinService {
 | 
			
		|||
        GBLog.info(
 | 
			
		||||
          `Auto start (whatsapp) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...`
 | 
			
		||||
        );
 | 
			
		||||
        await GBVMService.callVM(startDialog.toLowerCase(), min, step, user, this.deployer, false);
 | 
			
		||||
        await GBVMService.callVM(startDialog.toLowerCase(), min, step, user, pid);
 | 
			
		||||
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -1418,7 +1422,7 @@ export class GBMinService {
 | 
			
		|||
    if (/create dialog|creative dialog|create a dialog|criar diálogo|criar diálogo/gi.test(context.activity.text)) {
 | 
			
		||||
      await step.beginDialog('/dialog');
 | 
			
		||||
    } else if (isVMCall) {
 | 
			
		||||
      await GBVMService.callVM(context.activity.text, min, step, user, this.deployer, false);
 | 
			
		||||
      await GBVMService.callVM(context.activity.text, min, step, pid);
 | 
			
		||||
    } else if (context.activity.text.charAt(0) === '/') {
 | 
			
		||||
      const text = context.activity.text;
 | 
			
		||||
      const parts = text.split(' ');
 | 
			
		||||
| 
						 | 
				
			
			@ -1430,11 +1434,11 @@ export class GBMinService {
 | 
			
		|||
 | 
			
		||||
        await min.conversationalService.sendEvent(min, step, 'loadInstance', {});
 | 
			
		||||
      } else if (cmdOrDialogName === '/call') {
 | 
			
		||||
        await GBVMService.callVM(args, min, step, user, this.deployer, false);
 | 
			
		||||
        await GBVMService.callVM(args, min, step, pid);
 | 
			
		||||
      } else if (cmdOrDialogName === '/callsch') {
 | 
			
		||||
        await GBVMService.callVM(args, min, null, null, null, false);
 | 
			
		||||
        await GBVMService.callVM(args, min, null, pid);
 | 
			
		||||
      } else if (cmdOrDialogName === '/calldbg') {
 | 
			
		||||
        await GBVMService.callVM(args, min, step, user, this.deployer, true);
 | 
			
		||||
        await GBVMService.callVM(args, min, step, pid,  true);
 | 
			
		||||
      } else {
 | 
			
		||||
        await step.beginDialog(cmdOrDialogName, { args: args });
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -1592,11 +1596,8 @@ export class GBMinService {
 | 
			
		|||
      await CollectionUtil.asyncForEach(Object.values(min.scriptMap), async script => {
 | 
			
		||||
 | 
			
		||||
        dialogs[script] = async (data) => {
 | 
			
		||||
          let params;
 | 
			
		||||
          if (data) {
 | 
			
		||||
            params = JSON.parse(data);
 | 
			
		||||
          }
 | 
			
		||||
          await GBVMService.callVM(script, min, null, null, null, false, params);
 | 
			
		||||
          let params = JSON.parse(data);
 | 
			
		||||
          return await GBVMService.callVM(script, min, null, params.pid, false, params);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -157,6 +157,9 @@ export class ChatServices {
 | 
			
		|||
      'Default Content Language',
 | 
			
		||||
      GBConfigService.get('DEFAULT_CONTENT_LANGUAGE')
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    const tools = ""// TODO: add func  list.
 | 
			
		||||
 
 | 
			
		||||
    const chatPrompt = ChatPromptTemplate.fromPromptMessages([
 | 
			
		||||
      systemPrompt,
 | 
			
		||||
| 
						 | 
				
			
			@ -171,8 +174,17 @@ export class ChatServices {
 | 
			
		|||
 | 
			
		||||
      QUESTION: """{input}"""
 | 
			
		||||
 | 
			
		||||
      You have the following tools that you can invoke based on the user inquiry. 
 | 
			
		||||
      Tools: 
 | 
			
		||||
 | 
			
		||||
        ${tools}
 | 
			
		||||
 | 
			
		||||
      `),
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    const windowMemory = new BufferWindowMemory({
 | 
			
		||||
      returnMessages: false,
 | 
			
		||||
      memoryKey: 'immediate_history',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue