fix (templates): llm-server almost OK.
This commit is contained in:
		
							parent
							
								
									bf9886e763
								
							
						
					
					
						commit
						93ff7a418e
					
				
					 5 changed files with 77 additions and 92 deletions
				
			
		| 
						 | 
					@ -1311,15 +1311,16 @@ export class DialogKeywords {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public async messageBot({ pid, text }) {
 | 
					  public async messageBot({ pid, text }) {
 | 
				
			||||||
    const { min, user } = await DialogKeywords.getProcessInfo(pid);
 | 
					    const { min, user } = await DialogKeywords.getProcessInfo(pid);
 | 
				
			||||||
    GBLogEx.info(min, `MESSAGE BOT: ${text}.`);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const { conversation, client } = min['apiConversations'][pid];
 | 
					    const { conversation, client } = min['apiConversations'][pid];
 | 
				
			||||||
 | 
					    GBLogEx.info(min, `API messaged bot (Conversation Id: ${conversation.conversationId}): ${text} .`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await client.apis.Conversations.Conversations_PostActivity({
 | 
					    await client.apis.Conversations.Conversations_PostActivity({
 | 
				
			||||||
      conversationId: conversation.conversationId,
 | 
					      conversationId: conversation.conversationId,
 | 
				
			||||||
      activity: {
 | 
					      activity: {
 | 
				
			||||||
        textFormat: 'plain',
 | 
					        textFormat: 'plain',
 | 
				
			||||||
        text: text,
 | 
					        text: text,
 | 
				
			||||||
        type: 'message',
 | 
					        type: 'message',
 | 
				
			||||||
 | 
					        pid: pid,
 | 
				
			||||||
        from: {
 | 
					        from: {
 | 
				
			||||||
          id: user.userSystemId,
 | 
					          id: user.userSystemId,
 | 
				
			||||||
          name: user.userName
 | 
					          name: user.userName
 | 
				
			||||||
| 
						 | 
					@ -1327,8 +1328,9 @@ export class DialogKeywords {
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    min['conversationWelcomed'][conversation.conversationId] = true;
 | 
				
			||||||
    let messages = [];
 | 
					    let messages = [];
 | 
				
			||||||
    GBLogEx.info(min, `MessageBot: Starting message polling ${conversation.conversationId}).`);
 | 
					    GBLogEx.info(min, `Start API message pooling: ${conversation.conversationId})...`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let count = POOLING_COUNT;
 | 
					    let count = POOLING_COUNT;
 | 
				
			||||||
    while (count--) {
 | 
					    while (count--) {
 | 
				
			||||||
| 
						 | 
					@ -1353,6 +1355,7 @@ export class DialogKeywords {
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
 | 
					        count = 0;
 | 
				
			||||||
        GBLog.error(`API Message Pooling error: ${GBUtil.toYAML(err)}`);
 | 
					        GBLog.error(`API Message Pooling error: ${GBUtil.toYAML(err)}`);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -210,13 +210,17 @@ export class GBMinService {
 | 
				
			||||||
      GBServer.globals.debugConversationId = conversationId;
 | 
					      GBServer.globals.debugConversationId = conversationId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const steps = process.env.TEST_MESSAGE.split(';');
 | 
					      const steps = process.env.TEST_MESSAGE.split(';');
 | 
				
			||||||
 | 
					      const sec = new SecService();
 | 
				
			||||||
 | 
					      const user = await sec.ensureUser(min, 'testuser', 'testuser', '', 'test', 'testuser', null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const pid = GBVMService.createProcessInfo(user, min, 'api', null);
 | 
				
			||||||
      await CollectionUtil.asyncForEach(steps, async step => {
 | 
					      await CollectionUtil.asyncForEach(steps, async step => {
 | 
				
			||||||
        client.apis.Conversations.Conversations_PostActivity({
 | 
					        client.apis.Conversations.Conversations_PostActivity({
 | 
				
			||||||
          conversationId: conversationId,
 | 
					          conversationId: conversationId,
 | 
				
			||||||
          activity: {
 | 
					          activity: {
 | 
				
			||||||
            textFormat: 'plain',
 | 
					            textFormat: 'plain',
 | 
				
			||||||
            text: step,
 | 
					            text: step,
 | 
				
			||||||
 | 
					            pid: pid,
 | 
				
			||||||
            type: 'message',
 | 
					            type: 'message',
 | 
				
			||||||
            from: {
 | 
					            from: {
 | 
				
			||||||
              id: 'test',
 | 
					              id: 'test',
 | 
				
			||||||
| 
						 | 
					@ -1197,10 +1201,7 @@ export class GBMinService {
 | 
				
			||||||
          await this.processEventActivity(min, user, context, step);
 | 
					          await this.processEventActivity(min, user, context, step);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      } catch (error) {
 | 
					      } catch (error) {
 | 
				
			||||||
        const msg = `ERROR: ${error.message} ${error.stack} ${error.error ? error.error.body : ''} ${
 | 
					        GBLog.error(`Receiver: ${GBUtil.toYAML(error)}`);
 | 
				
			||||||
          error.error ? (error.error.stack ? error.error.stack : '') : ''
 | 
					 | 
				
			||||||
        }`;
 | 
					 | 
				
			||||||
        GBLog.error(msg);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await min.conversationalService.sendText(
 | 
					        await min.conversationalService.sendText(
 | 
				
			||||||
          min,
 | 
					          min,
 | 
				
			||||||
| 
						 | 
					@ -1696,7 +1697,8 @@ export class GBMinService {
 | 
				
			||||||
              const client = await GBUtil.getDirectLineClient(min);
 | 
					              const client = await GBUtil.getDirectLineClient(min);
 | 
				
			||||||
              const response = await client.apis.Conversations.Conversations_StartConversation({
 | 
					              const response = await client.apis.Conversations.Conversations_StartConversation({
 | 
				
			||||||
                userSystemId: user.userSystemId,
 | 
					                userSystemId: user.userSystemId,
 | 
				
			||||||
                userName: user.userName
 | 
					                userName: user.userName,
 | 
				
			||||||
 | 
					                pid: pid
 | 
				
			||||||
              });
 | 
					              });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              min['apiConversations'][pid] = { conversation: response.obj, client: client };
 | 
					              min['apiConversations'][pid] = { conversation: response.obj, client: client };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@ export const getRouter = (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const activity = createConversationUpdateActivity
 | 
					    const activity = createConversationUpdateActivity
 | 
				
			||||||
      (serviceUrl, conversationId, req.query?.userSystemId,
 | 
					      (serviceUrl, conversationId, req.query?.userSystemId,
 | 
				
			||||||
        req.query?.userName
 | 
					        req.query?.userName, req.query.pid
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    fetch(botUrl, {
 | 
					    fetch(botUrl, {
 | 
				
			||||||
      method: 'POST',
 | 
					      method: 'POST',
 | 
				
			||||||
| 
						 | 
					@ -110,10 +110,12 @@ export const getRouter = (
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Sends message to bot. Assumes message activities
 | 
					  // Sends message to bot. Assumes message activities
 | 
				
			||||||
  router.post(`/directline/${botId}/conversations/:conversationId/activities`, (req, res) => {
 | 
					  
 | 
				
			||||||
 | 
					  router.post(`/api/messages/${botId}/v3/directline/conversations/:conversationId/activities`, (req, res) => {
 | 
				
			||||||
    const incomingActivity = req.body;
 | 
					    const incomingActivity = req.body;
 | 
				
			||||||
    // Make copy of activity. Add required fields
 | 
					    // Make copy of activity. Add required fields
 | 
				
			||||||
    const activity = createMessageActivity(incomingActivity, serviceUrl, req.params.conversationId);
 | 
					    const activity = createMessageActivity(incomingActivity, serviceUrl, req.params.conversationId, 
 | 
				
			||||||
 | 
					      req.params['pid']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const conversation = getConversation(req.params.conversationId, conversationInitRequired);
 | 
					    const conversation = getConversation(req.params.conversationId, conversationInitRequired);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -147,20 +149,20 @@ export const getRouter = (
 | 
				
			||||||
    console.warn('/v3/conversations not implemented');
 | 
					    console.warn('/v3/conversations not implemented');
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  router.post(`/api/messages/${botId}/v3/directline/conversations/:conversationId/activities`, (req, res) => {
 | 
					  // TODO: Check duplicate. router.post(`/api/messages/${botId}/v3/directline/conversations/:conversationId/activities`, (req, res) => {
 | 
				
			||||||
    let activity: IActivity;
 | 
					  //   let activity: IActivity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    activity = req.body;
 | 
					  //   activity = req.body;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    const conversation = getConversation(req.params.conversationId, conversationInitRequired);
 | 
					  //   const conversation = getConversation(req.params.conversationId, conversationInitRequired);
 | 
				
			||||||
    if (conversation) {
 | 
					  //   if (conversation) {
 | 
				
			||||||
      conversation.history.push(activity);
 | 
					  //     conversation.history.push(activity);
 | 
				
			||||||
      res.status(200).send();
 | 
					  //     res.status(200).send();
 | 
				
			||||||
    } else {
 | 
					  //   } else {
 | 
				
			||||||
      // Conversation was never initialized
 | 
					  //     // Conversation was never initialized
 | 
				
			||||||
      res.status(400).send();
 | 
					  //     res.status(400).send();
 | 
				
			||||||
    }
 | 
					  //   }
 | 
				
			||||||
  });
 | 
					  // });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  router.post(`/api/messages/${botId}/v3/conversations/:conversationId/activities/:activityId`, (req, res) => {
 | 
					  router.post(`/api/messages/${botId}/v3/conversations/:conversationId/activities/:activityId`, (req, res) => {
 | 
				
			||||||
    let activity: IActivity;
 | 
					    let activity: IActivity;
 | 
				
			||||||
| 
						 | 
					@ -320,21 +322,22 @@ const deleteStateForUser = (req: express.Request, res: express.Response) => {
 | 
				
			||||||
const createMessageActivity = (
 | 
					const createMessageActivity = (
 | 
				
			||||||
  incomingActivity: IMessageActivity,
 | 
					  incomingActivity: IMessageActivity,
 | 
				
			||||||
  serviceUrl: string,
 | 
					  serviceUrl: string,
 | 
				
			||||||
  conversationId: string
 | 
					  conversationId: string, pid
 | 
				
			||||||
): IMessageActivity => {
 | 
					): IMessageActivity => {
 | 
				
			||||||
  return {
 | 
					  const obj =  {
 | 
				
			||||||
    ...incomingActivity,
 | 
					    ...incomingActivity,
 | 
				
			||||||
    channelId: 'emulator',
 | 
					    channelId: 'api',
 | 
				
			||||||
    serviceUrl,
 | 
					    serviceUrl,
 | 
				
			||||||
    conversation: { id: conversationId },
 | 
					    conversation: { id: conversationId },
 | 
				
			||||||
    id: uuidv4.v4()
 | 
					    id: uuidv4.v4()
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					  return obj;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const createConversationUpdateActivity = (serviceUrl: string, conversationId: string, userSystemId, userName): IConversationUpdateActivity => {
 | 
					const createConversationUpdateActivity = (serviceUrl: string, conversationId: string, userSystemId, userName, pid): IConversationUpdateActivity => {
 | 
				
			||||||
  const activity: IConversationUpdateActivity = {
 | 
					  const activity: IConversationUpdateActivity = {
 | 
				
			||||||
    type: 'conversationUpdate',
 | 
					    type: 'conversationUpdate',
 | 
				
			||||||
    channelId: 'emulator',
 | 
					    channelId: 'api',
 | 
				
			||||||
    serviceUrl,
 | 
					    serviceUrl,
 | 
				
			||||||
    conversation: { id: conversationId },
 | 
					    conversation: { id: conversationId },
 | 
				
			||||||
    id: uuidv4.v4(),
 | 
					    id: uuidv4.v4(),
 | 
				
			||||||
| 
						 | 
					@ -342,6 +345,7 @@ const createConversationUpdateActivity = (serviceUrl: string, conversationId: st
 | 
				
			||||||
    membersRemoved: [],
 | 
					    membersRemoved: [],
 | 
				
			||||||
    from: { id: userSystemId, name: userName }
 | 
					    from: { id: userSystemId, name: userName }
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					  activity['pid']  = pid;
 | 
				
			||||||
  return activity;
 | 
					  return activity;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -109,9 +109,7 @@ export class AskDialog extends IGBDialog {
 | 
				
			||||||
          const askForMore = min.core.getParam(min.instance, 'Ask For More', null);
 | 
					          const askForMore = min.core.getParam(min.instance, 'Ask For More', null);
 | 
				
			||||||
          if (askForMore) {
 | 
					          if (askForMore) {
 | 
				
			||||||
            text = askForMore;
 | 
					            text = askForMore;
 | 
				
			||||||
          }
 | 
					          } else {
 | 
				
			||||||
          else {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return await step.endDialog(null);
 | 
					            return await step.endDialog(null);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        } else if (step.context.activity.group || (step.options && step.options.emptyPrompt)) {
 | 
					        } else if (step.context.activity.group || (step.options && step.options.emptyPrompt)) {
 | 
				
			||||||
| 
						 | 
					@ -131,15 +129,7 @@ export class AskDialog extends IGBDialog {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          let sec = new SecService();
 | 
					          let sec = new SecService();
 | 
				
			||||||
          const member = step.context.activity.from;
 | 
					          const member = step.context.activity.from;
 | 
				
			||||||
          const user = await sec.ensureUser(
 | 
					          const user = await sec.ensureUser(min, member.id, member.name, '', 'web', member.name, null);
 | 
				
			||||||
            min,
 | 
					 | 
				
			||||||
            member.id,
 | 
					 | 
				
			||||||
            member.name,
 | 
					 | 
				
			||||||
            '',
 | 
					 | 
				
			||||||
            'web',
 | 
					 | 
				
			||||||
            member.name,
 | 
					 | 
				
			||||||
            null
 | 
					 | 
				
			||||||
          );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
          let handled = false;
 | 
					          let handled = false;
 | 
				
			||||||
          let nextDialog = null;
 | 
					          let nextDialog = null;
 | 
				
			||||||
| 
						 | 
					@ -210,7 +200,7 @@ export class AskDialog extends IGBDialog {
 | 
				
			||||||
        const locale = step.context.activity.locale;
 | 
					        const locale = step.context.activity.locale;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Stops any content on projector.
 | 
					        // Stops any content on projector.
 | 
				
			||||||
        if (step.context.activity.channelId !== 'msteams') {
 | 
					        if (step.context.activity.channelId === 'web') {
 | 
				
			||||||
          await min.conversationalService.sendEvent(min, step, 'stop', undefined);
 | 
					          await min.conversationalService.sendEvent(min, step, 'stop', undefined);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // Handle extra text from FAQ.
 | 
					        // Handle extra text from FAQ.
 | 
				
			||||||
| 
						 | 
					@ -236,14 +226,21 @@ export class AskDialog extends IGBDialog {
 | 
				
			||||||
          return;
 | 
					          return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const results: any = await service.ask(min, user, step, step.context.activity['pid'], text, searchScore, null /* user.subjects */);
 | 
					        const results: any = await service.ask(
 | 
				
			||||||
 | 
					          min,
 | 
				
			||||||
 | 
					          user,
 | 
				
			||||||
 | 
					          step,
 | 
				
			||||||
 | 
					          step.context.activity['pid'],
 | 
				
			||||||
 | 
					          text,
 | 
				
			||||||
 | 
					          searchScore,
 | 
				
			||||||
 | 
					          null /* user.subjects */
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // If there is some result, answer immediately.
 | 
					        // If there is some result, answer immediately.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (results !== undefined && results.answer !== undefined) {
 | 
					        if (results !== undefined && results.answer !== undefined) {
 | 
				
			||||||
          let urls = [];
 | 
					          let urls = [];
 | 
				
			||||||
          if (results.sources) {
 | 
					          if (results.sources) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            for (const key in results.sources) {
 | 
					            for (const key in results.sources) {
 | 
				
			||||||
              const source = results.sources[key];
 | 
					              const source = results.sources[key];
 | 
				
			||||||
              const packagePath = GBUtil.getGBAIPath(min.botId, `gbkb`);
 | 
					              const packagePath = GBUtil.getGBAIPath(min.botId, `gbkb`);
 | 
				
			||||||
| 
						 | 
					@ -253,8 +250,7 @@ export class AskDialog extends IGBDialog {
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (urls.length > 0) {
 | 
					            if (urls.length > 0) {
 | 
				
			||||||
              await min.conversationalService.sendEvent(
 | 
					              await min.conversationalService.sendEvent(min, step, 'play', {
 | 
				
			||||||
                min, step, 'play', {
 | 
					 | 
				
			||||||
                playerType: 'multiurl',
 | 
					                playerType: 'multiurl',
 | 
				
			||||||
                data: urls
 | 
					                data: urls
 | 
				
			||||||
              });
 | 
					              });
 | 
				
			||||||
| 
						 | 
					@ -268,8 +264,6 @@ export class AskDialog extends IGBDialog {
 | 
				
			||||||
          return await AskDialog.handleAnswer(service, min, step, user, answer);
 | 
					          return await AskDialog.handleAnswer(service, min, step, user, answer);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        GBLogEx.info(min, `SEARCH called but NO answer could be found (zero results).`);
 | 
					        GBLogEx.info(min, `SEARCH called but NO answer could be found (zero results).`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Not found.
 | 
					        // Not found.
 | 
				
			||||||
| 
						 | 
					@ -284,7 +278,7 @@ export class AskDialog extends IGBDialog {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private static async handleAnswer(service: KBService, min: GBMinInstance, step: any, user, answer: GuaribasAnswer) {
 | 
					  private static async handleAnswer(service: KBService, min: GBMinInstance, step: any, user, answer: GuaribasAnswer) {
 | 
				
			||||||
    let text = typeof (answer) === 'string' ? answer : answer.content;
 | 
					    let text = typeof answer === 'string' ? answer : answer.content;
 | 
				
			||||||
    text = text.trim();
 | 
					    text = text.trim();
 | 
				
			||||||
    if (text.endsWith('.docx')) {
 | 
					    if (text.endsWith('.docx')) {
 | 
				
			||||||
      const mainName = GBVMService.getMethodNameFromVBSFilename(text);
 | 
					      const mainName = GBVMService.getMethodNameFromVBSFilename(text);
 | 
				
			||||||
| 
						 | 
					@ -381,15 +375,7 @@ export class AskDialog extends IGBDialog {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          let sec = new SecService();
 | 
					          let sec = new SecService();
 | 
				
			||||||
          const member = step.context.activity.from;
 | 
					          const member = step.context.activity.from;
 | 
				
			||||||
          const user = await sec.ensureUser(
 | 
					          const user = await sec.ensureUser(min, member.id, member.name, '', 'web', member.name, null);
 | 
				
			||||||
            min,
 | 
					 | 
				
			||||||
            member.id,
 | 
					 | 
				
			||||||
            member.name,
 | 
					 | 
				
			||||||
            '',
 | 
					 | 
				
			||||||
            'web',
 | 
					 | 
				
			||||||
            member.name,
 | 
					 | 
				
			||||||
            null
 | 
					 | 
				
			||||||
          );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
          await step.endDialog();
 | 
					          await step.endDialog();
 | 
				
			||||||
          const pid = step.context.activity['pid'];
 | 
					          const pid = step.context.activity['pid'];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,38 +14,28 @@ For each order placed, return a JSON containing the product name, the table, and
 | 
				
			||||||
Keep orderedItems with only one item and keep sideItems only with the sides that were specified.
 | 
					Keep orderedItems with only one item and keep sideItems only with the sides that were specified.
 | 
				
			||||||
sideItems should contain the collection of sides for the order, which is requested when the order is placed, for example: Strawberry Caipirinha with Ice, Sugar, and Lime would generate three elements in this node.
 | 
					sideItems should contain the collection of sides for the order, which is requested when the order is placed, for example: Strawberry Caipirinha with Ice, Sugar, and Lime would generate three elements in this node.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Here is an example of the Order JSON, clear the items and send one with the order made by the person, this is just an example:
 | 
					Here is an example of the Order YAML, clear the items and send one with the order made by the person, this is just an example:
 | 
				
			||||||
{
 | 
					
 | 
				
			||||||
    orderedItems: [
 | 
					    orderedItems:
 | 
				
			||||||
        {
 | 
					    - item:
 | 
				
			||||||
            item: {
 | 
					        id: 102
 | 
				
			||||||
                id: 102,
 | 
					        price: 0.30
 | 
				
			||||||
                price: 0.30,
 | 
					 | 
				
			||||||
        name: Banana
 | 
					        name: Banana
 | 
				
			||||||
            },
 | 
					        sideItems:
 | 
				
			||||||
            sideItems: [
 | 
					        - id: 0
 | 
				
			||||||
                {
 | 
					            price: 0
 | 
				
			||||||
                    id: 0,
 | 
					            quantity: 1
 | 
				
			||||||
                    price: 0,
 | 
					 | 
				
			||||||
        quantity: 1
 | 
					        quantity: 1
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            ],
 | 
					 | 
				
			||||||
            quantity: 1,
 | 
					 | 
				
			||||||
        notes: a
 | 
					        notes: a
 | 
				
			||||||
        },
 | 
					    - item:
 | 
				
			||||||
        {
 | 
					        id: 103
 | 
				
			||||||
            item: {
 | 
					        price: 0.30
 | 
				
			||||||
                id: 103,
 | 
					 | 
				
			||||||
                price: 0.30,
 | 
					 | 
				
			||||||
        name: Carrot
 | 
					        name: Carrot
 | 
				
			||||||
            },
 | 
					        sideItems: []
 | 
				
			||||||
            sideItems: [],
 | 
					        quantity: 1
 | 
				
			||||||
            quantity: 1,
 | 
					 | 
				
			||||||
        notes: none
 | 
					        notes: none
 | 
				
			||||||
        }
 | 
					    userId: ${operator}
 | 
				
			||||||
    ],
 | 
					    accountIdentifier: Areia
 | 
				
			||||||
    userId: ${operator},
 | 
					 | 
				
			||||||
    accountIdentifier: Areia,
 | 
					 | 
				
			||||||
    deliveryTypeId: 2
 | 
					    deliveryTypeId: 2
 | 
				
			||||||
}
 | 
					
 | 
				
			||||||
END SYSTEM PROMPT
 | 
					END SYSTEM PROMPT
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue