From 55e3334cc39b2e741399944166b64ba2d5512b40 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Sun, 15 Sep 2024 16:30:03 -0300 Subject: [PATCH] fix (templates): llm-server almost OK. --- .../basic.gblib/services/DialogKeywords.ts | 4 ++-- packages/basic.gblib/services/GBVMService.ts | 4 +++- .../basic.gblib/services/SystemKeywords.ts | 20 ++++++++-------- .../basic.gblib/services/vm2-process/index.ts | 4 ++-- packages/core.gbapp/services/GBCoreService.ts | 2 +- packages/core.gbapp/services/GBDeployer.ts | 18 +++++++------- packages/core.gbapp/services/GBMinService.ts | 5 ++-- packages/core.gbapp/services/router/bridge.ts | 2 +- .../services/GoogleChatDirectLine.ts | 4 ++-- packages/kb.gbapp/dialogs/AskDialog.ts | 24 ++++++++++++------- packages/kb.gbapp/services/KBService.ts | 2 +- src/app.ts | 4 ++-- src/util.ts | 14 +++++++---- .../llm-server.gbdialog/start.bas | 2 +- vm-inject.js | 16 ++++++++----- 15 files changed, 71 insertions(+), 54 deletions(-) diff --git a/packages/basic.gblib/services/DialogKeywords.ts b/packages/basic.gblib/services/DialogKeywords.ts index d245c75e..b13ac16e 100644 --- a/packages/basic.gblib/services/DialogKeywords.ts +++ b/packages/basic.gblib/services/DialogKeywords.ts @@ -1354,9 +1354,9 @@ export class DialogKeywords { return messages.join('\n'); } } - } catch (err) { + } catch (error) { count = 0; - GBLog.error(`API Message Pooling error: ${GBUtil.toYAML(err)}`); + GBLog.error(`API Message Pooling error: ${GBUtil.toYAML(error)}`); } } return null; diff --git a/packages/basic.gblib/services/GBVMService.ts b/packages/basic.gblib/services/GBVMService.ts index 35edbfd0..a6529c9d 100644 --- a/packages/basic.gblib/services/GBVMService.ts +++ b/packages/basic.gblib/services/GBVMService.ts @@ -511,7 +511,9 @@ export class GBVMService extends GBService { const jsfile: string = `${filename}.js`; - code = (await fs.readFile('./vm-inject.js')).toString(); + const template = (await fs.readFile('./vm-inject.js')).toString(); + code = template.replace('//##INJECTED_CODE_HERE', code ); + code = template.replace('//##INJECTED_HEADER', `port=${GBVMService.API_PORT}; botId='${min.botId}';` ); code = ji.default(code, ' '); diff --git a/packages/basic.gblib/services/SystemKeywords.ts b/packages/basic.gblib/services/SystemKeywords.ts index 908dc9cf..e67100ce 100644 --- a/packages/basic.gblib/services/SystemKeywords.ts +++ b/packages/basic.gblib/services/SystemKeywords.ts @@ -925,8 +925,8 @@ export class SystemKeywords { }, { retries: 5, - onRetry: err => { - GBLog.error(`Retrying HTTP GET due to: ${err.message}.`); + onRetry: error => { + GBLog.error(`Retrying HTTP GET due to: ${error.message}.`); } } ); @@ -1842,8 +1842,8 @@ export class SystemKeywords { }, { retries: 5, - onRetry: err => { - GBLog.error(`Retrying HTTP GET due to: ${err.message}.`); + onRetry: error => { + GBLog.error(`Retrying HTTP GET due to: ${error.message}.`); } } ); @@ -2198,8 +2198,8 @@ export class SystemKeywords { }, { retries: 5, - onRetry: err => { - GBLog.error(`MERGE: Retrying SELECT ALL on table: ${err.message}.`); + onRetry: error => { + GBLog.error(`MERGE: Retrying SELECT ALL on table: ${error.message}.`); } } ); @@ -2591,8 +2591,8 @@ export class SystemKeywords { }, { retries: 5, - onRetry: err => { - GBLog.error(`Retrying deleteFromStorage due to: ${err.message}.`); + onRetry: error => { + GBLog.error(`Retrying deleteFromStorage due to: ${error.message}.`); } } ); @@ -2853,8 +2853,8 @@ export class SystemKeywords { }, { retries: 5, - onRetry: err => { - GBLog.error(`Retrying SaveToStorage due to: ${err.message}.`); + onRetry: error => { + GBLog.error(`Retrying SaveToStorage due to: ${error.message}.`); } } ); diff --git a/packages/basic.gblib/services/vm2-process/index.ts b/packages/basic.gblib/services/vm2-process/index.ts index 680a5d36..86f2c5d1 100644 --- a/packages/basic.gblib/services/vm2-process/index.ts +++ b/packages/basic.gblib/services/vm2-process/index.ts @@ -251,8 +251,8 @@ export const createVm2Pool = ({ min, max, ...limits }) => { await client.Runtime.enable(); resolve(1); - } catch (err) { - GBLog.error(err); + } catch (error) { + GBLog.error(error); kill(childProcess); GBServer.globals.debuggers[limits.botId].state = 0; GBServer.globals.debuggers[limits.botId].stateInfo = 'Stopped'; diff --git a/packages/core.gbapp/services/GBCoreService.ts b/packages/core.gbapp/services/GBCoreService.ts index 133e1fab..60ad98f3 100644 --- a/packages/core.gbapp/services/GBCoreService.ts +++ b/packages/core.gbapp/services/GBCoreService.ts @@ -398,7 +398,7 @@ await fs.writeFile('.env', env); } try { instance.params = JSON.stringify(JSON.parse(instance.params)); - } catch (err) { + } catch (error) { instance.params = JSON.stringify(instance.params); } return await instance.save(); diff --git a/packages/core.gbapp/services/GBDeployer.ts b/packages/core.gbapp/services/GBDeployer.ts index f6364171..a5326c98 100644 --- a/packages/core.gbapp/services/GBDeployer.ts +++ b/packages/core.gbapp/services/GBDeployer.ts @@ -835,11 +835,11 @@ export class GBDeployer implements IGBDeployer { try { await search.deleteDataSource(dsName); - } catch (err) { + } catch (error) { // If it is a 404 there is nothing to delete as it is the first creation. - if (err.code !== 404) { - throw err; + if (error.code !== 404) { + throw error; } } @@ -847,11 +847,11 @@ export class GBDeployer implements IGBDeployer { try { await search.deleteIndex(); - } catch (err) { + } catch (error) { // If it is a 404 there is nothing to delete as it is the first creation. - if (err.code !== 404 && err.code !== 'OperationNotAllowed') { - throw err; + if (error.code !== 404 && error.code !== 'OperationNotAllowed') { + throw error; } } @@ -859,9 +859,9 @@ export class GBDeployer implements IGBDeployer { try { await search.createDataSource(dsName, dsName, 'GuaribasQuestion', 'azuresql', connectionString); - } catch (err) { - GBLog.error(err); - throw err; + } catch (error) { + GBLog.error(error); + throw error; } await search.createIndex(searchSchema, dsName); diff --git a/packages/core.gbapp/services/GBMinService.ts b/packages/core.gbapp/services/GBMinService.ts index a05a234a..6a0efd87 100644 --- a/packages/core.gbapp/services/GBMinService.ts +++ b/packages/core.gbapp/services/GBMinService.ts @@ -1218,6 +1218,7 @@ export class GBMinService { const context = adapter['createContext'](req); context['_activity'] = context.activity.body; await handler(context); + // Return status res.status(200); @@ -1230,7 +1231,7 @@ export class GBMinService { GBLog.error('Calling processActivity due to Signing Key could not be retrieved error.'); await adapter['processActivity'](req, res, handler); } else { - + GBLog.error(`Error processing activity: ${GBUtil.toYAML(error)}`); throw error; } } @@ -1637,7 +1638,7 @@ export class GBMinService { } }); data.step = null; - GBLogEx.info(min, `/answer being called from processMessageActivity (nextDialog=${nextDialog}).`); + GBLogEx.info(min, `/answer from processMessageActivity (nextDialog=${nextDialog}).`); await step.beginDialog(nextDialog ? nextDialog : '/answer', { data: data, query: text, diff --git a/packages/core.gbapp/services/router/bridge.ts b/packages/core.gbapp/services/router/bridge.ts index 7f147fec..63b1d4c2 100644 --- a/packages/core.gbapp/services/router/bridge.ts +++ b/packages/core.gbapp/services/router/bridge.ts @@ -164,7 +164,7 @@ export const getRouter = ( // } // }); - router.post(`/api/messages/${botId}/v3/conversations/:conversationId/activities/:activityId`, (req, res) => { + router.post(`/v3/conversations/:conversationId/activities/:activityId`, (req, res) => { let activity: IActivity; activity = req.body; diff --git a/packages/google-chat.gblib/services/GoogleChatDirectLine.ts b/packages/google-chat.gblib/services/GoogleChatDirectLine.ts index 5ac58329..90ab636f 100644 --- a/packages/google-chat.gblib/services/GoogleChatDirectLine.ts +++ b/packages/google-chat.gblib/services/GoogleChatDirectLine.ts @@ -188,8 +188,8 @@ export class GoogleChatDirectLine extends GBService { }); watermark = response.obj.watermark; await this.printMessages(response.obj.activities, conversationId, threadName, from, fromName); - } catch (err) { - GBLog.error(`Error calling printMessages on GoogleChat channel ${err.data === undefined ? err : err.data}`); + } catch (error) { + GBLog.error(`Error calling printMessages on GoogleChat channel ${GBUtil.toYAML(error)}`); } }; setInterval(worker, this.pollInterval); diff --git a/packages/kb.gbapp/dialogs/AskDialog.ts b/packages/kb.gbapp/dialogs/AskDialog.ts index ca8ea571..5d154747 100644 --- a/packages/kb.gbapp/dialogs/AskDialog.ts +++ b/packages/kb.gbapp/dialogs/AskDialog.ts @@ -226,15 +226,21 @@ export class AskDialog extends IGBDialog { return; } - const results: any = await service.ask( - min, - user, - step, - step.context.activity['pid'], - text, - searchScore, - null /* user.subjects */ - ); + let results; + try { + results = await service.ask( + min, + user, + step, + step.context.activity['pid'], + text, + searchScore, + null /* user.subjects */ + ); + } catch (error) { + GBLog.error(`/answer ERROR: ${GBUtil.toYAML(error)}`); + throw error; + } // If there is some result, answer immediately. diff --git a/packages/kb.gbapp/services/KBService.ts b/packages/kb.gbapp/services/KBService.ts index 329d79cc..1bdb29e2 100644 --- a/packages/kb.gbapp/services/KBService.ts +++ b/packages/kb.gbapp/services/KBService.ts @@ -915,7 +915,7 @@ export class KBService implements IGBKBService { } return !isIgnored && currentDomain == new URL(p.href).hostname; - } catch (err) { + } catch (error) { return false; } }); diff --git a/src/app.ts b/src/app.ts index 32b0b4c1..26ec5022 100644 --- a/src/app.ts +++ b/src/app.ts @@ -293,8 +293,8 @@ export class GBServer { if (process.env.DEV_OPEN_BROWSER) { core.openBrowserInDevelopment(); } - } catch (err) { - GBLog.error(`STOP: ${err.message ? err.message : err} ${err.stack ? err.stack : ''}`); + } catch (error) { + GBLog.error(`STOP: ${GBUtil.toYAML(error.message)}`); process.exit(1); } })(); diff --git a/src/util.ts b/src/util.ts index a8743e60..783fbd95 100644 --- a/src/util.ts +++ b/src/util.ts @@ -106,17 +106,21 @@ export class GBUtil { return acc; }, {}); }; - + const extractedError = extractProps(data); - - // Inline formatting for logs - return YAML.stringify(extractedError, { + let yamlString = YAML.stringify(extractedError, { indent: 2, // Defines the indentation flowLevel: -1, // Forces inline formatting styles: { '!!null': 'canonical' } // Optional: Customize null display } as any); + + + //yamlString = yamlString.slice(0, 256); // Truncate to 1024 bytes + + + return yamlString; } - + public static sleep(ms) { return new Promise(resolve => { setTimeout(resolve, ms); diff --git a/templates/llm-server.gbai/llm-server.gbdialog/start.bas b/templates/llm-server.gbai/llm-server.gbdialog/start.bas index c82906a2..4c89eb62 100644 --- a/templates/llm-server.gbai/llm-server.gbdialog/start.bas +++ b/templates/llm-server.gbai/llm-server.gbdialog/start.bas @@ -4,7 +4,7 @@ DESCRIPTION It is a WebService of GB. products = FIND "products.csv" BEGIN SYSTEM PROMPT - + You must act as a chatbot that will assist a store attendant by following these rules: Whenever the attendant places an order, it must include the table and the customer's name. Example: A 400ml Pineapple Caipirinha for Rafael at table 10. Orders are based on the products and sides from this product menu: diff --git a/vm-inject.js b/vm-inject.js index 9cc97624..7387c00b 100644 --- a/vm-inject.js +++ b/vm-inject.js @@ -1,4 +1,7 @@ module.exports = (async () => { + //##INJECTED_HEADER + + // Imports npm packages for this .gbdialog conversational application. require('isomorphic-fetch'); @@ -130,14 +133,15 @@ module.exports = (async () => { }; let url; const agent = http.Agent({ keepAlive: true }); - - url = 'http://localhost:${GBVMService.API_PORT}/${min.botId}/dk'; + + + url = `http://localhost:${port}/${botId}/dk`; const dk = (await createRpcClient(() => createHttpClient(url, { agent: agent }), optsRPC)).remote; - url = 'http://localhost:${GBVMService.API_PORT}/${min.botId}/sys'; + url = `http://localhost:${port}/${botId}/sys`; const sys = (await createRpcClient(() => createHttpClient(url, { agent: agent }), optsRPC)).remote; - url = 'http://localhost:${GBVMService.API_PORT}/${min.botId}/wa'; + url = `http://localhost:${port}/${botId}/wa`; const wa = (await createRpcClient(() => createHttpClient(url, { agent: agent }), optsRPC)).remote; - url = 'http://localhost:${GBVMService.API_PORT}/${min.botId}/img'; + url = `http://localhost:${port}/${botId}/img`; const img = (await createRpcClient(() => createHttpClient(url, { agent: agent }), optsRPC)).remote; const timeout = ms => { @@ -206,7 +210,7 @@ module.exports = (async () => { try { await ensureTokens(true); - ${code} + //##INJECTED_CODE_HERE } catch (e) { console.log(e);