import { StreamChatResponse } from "~/types/bot"; import { ProductCardData } from "~/types/product"; export const MOCK_MODE = false; export const MOCK_SCENARIO = 2; export const mockResponse1 = { thread_id: "a4f81275-ade1-4ad1-a5de-ea9dc1a703c4", text_chunks: [ "س", "ل", "ا", "م", "!", " ", "چ", "ط", "و", "ر", " ", "م", "ی", "‌", "ت", "و", "ن", "م", " ", "ک", "م", "ک", "ت", "و", "ن", " ", "ک", "ن", "م", "؟" ], suggestions: [ "محصولات آرایشی جدید دارید؟", "کرم ضد آفتاب مناسب پوست چرب می‌خوام.", "عطر زنانه با تخفیف دارید؟", "محصولات مراقبت از پوست برای سن ۳۰ ساله پیشنهاد می‌کنی؟", "لوازم بهداشتی برای پوست حساس چی دارید؟" ] }; export const mockResponse2 = { thread_id: "a4f81275-ade1-4ad1-a5de-ea9dc1a703c4", text_chunks: [ "م", "ن", "ت", "ظ", "ر", " ", "ب", "ا", "ش", "ی", "د", "،", " ", "د", "ا", "ر", "م", " ", "ج", "س", "ت", "ج", "و", " ", "م", "ی", "‌", "ک", "ن", "م", "." ], additional_text_chunks: [ "چ", "ن", "د", " ", "ک", "ر", "م", " ", "ض", "د", " ", "آ", "ف", "ت", "ا", "ب", " ", "م", "ن", "ا", "س", "ب", " ", "پ", "و", "س", "ت", " ", "چ", "ر", "ب", " ", "ا", "ی", "ن", "ج", "ا", " ", "ب", "ر", "ا", "ت", "و", "ن", " ", "گ", "ذ", "ا", "ش", "ت", "م", ".", " ", "ا", "گ", "ر", " ", "م", "ی", "‌", "خ", "و", "ا", "ه", "ی", "د", " ", "د", "ر", "ب", "ا", "ر", "ه", " ", "ی", "ک", "ی", " ", "ب", "ی", "ش", "ت", "ر", " ", "ب", "د", "و", "ن", "ی", "د", " ", "ی", "ا", " ", "م", "ح", "ص", "و", "ل", " ", "د", "ی", "گ", "ه", "‌", "ا", "ی", " ", "م", "ی", "‌", "خ", "و", "ا", "ه", "ی", "د", " ", "ب", "گ", "ی", "د", ".", " " ], products: [ { status: "success", name: "ضد آفتاب فاقد چربی کلیون, CLIVEN با SPF 50 – محافظت کامل در برابر آفتاب برای پوست‌های چرب", id: "9d90fe706e0d30727a8623bd2326fb866dac45f89baff736d2b5b88a1881a104", price: 601000.0, url: "https://offerie.ir/product/ضد-آفتاب-فاقد-چربی-کلیون-CLIVEN-با-SPF-50-–-محافظت-کامل-در-برابر-آفتاب-برای-پوست‌های-چرب", currency: "IRR", description: "این ضد آفتاب کلیون فاقد چربی و مناسب پوست‌های چرب است و با ساختار سبک و مات‌کننده، می‌تواند به خوبی چربی پوست را کنترل کند و از براق شدن جلوگیری نماید.", category: undefined, sub_category: undefined, image: "https://oss.sazito.com/apiuploads/offerie/uploads/image/rootimage/6380/995ed3d1be1ced0be90ac1a809869280.jpeg", metadata: { categories: null, category_urls: null, raw_price: 722000, images_all: null, stock_number: 0, sku: "IN1704018220" }, tool_call_id: "call_8jW8H9YrJhfKKKbwG4nqc17H", tool_name: "default" }, { status: "success", name: "کرم ضد آفتاب پوست چرب مات فینیش SPF50 سینره Cinere", id: "c1036b89ee9fcbe85849cd9ec4218bdd861908783047c3a1a6cd07a892ac382f", price: 330000.0, url: "https://offerie.ir/product/کرم-ضد-آفتاب-پوست-چرب-مات-فینیش-SPF50-سینره-Cinere", currency: "IRR", description: "کرمی سبک و مات فینیش سینره مخصوص پوست چرب با جذب سریع و حفظ جلوه مات که برای پوست‌های چرب بسیار مناسب و فاقد چربی و پارابن است.", category: undefined, sub_category: undefined, image: "https://oss.sazito.com/apiuploads/offerie/uploads/image/rootimage/3978/a53bd7bbf0a300bd60d0ad23f5a8403e.jpg", metadata: { categories: null, category_urls: null, raw_price: null, images_all: null, stock_number: 0, sku: "IN1724614288" }, tool_call_id: "call_8jW8H9YrJhfKKKbwG4nqc17H", tool_name: "default" }, { status: "success", name: "کرم ضد آفتاب پوست های چرب SPF50 سانو ژن ژنوبایوتیک Geno", id: "31493482b0e18aab8436c94489d973e224e414763054724c54cdff75461725dd", price: 679800.0, url: "https://offerie.ir/product/کرم-ضد-آفتاب-پوست-های-چرب-SPF50-سانو-ژن-ژنوبایوتیک-Geno", currency: "IRR", description: "این کرم ضد آفتاب ژنوبایوتیک با ترکیبات گیاهی و داشتن فیلترهای فیزیکی و شیمیایی، محافظتی قوی و بدون چربی برای پوست چرب و مختلط ارائه می‌دهد.", category: undefined, sub_category: undefined, image: "https://oss.sazito.com/apiuploads/offerie/uploads/image/rootimage/4106/40060826cbf2e16fd9cf92211aea1805.jpeg", metadata: { categories: null, category_urls: null, raw_price: 814800, images_all: null, stock_number: 11, sku: "IN1724302234" }, tool_call_id: "call_8jW8H9YrJhfKKKbwG4nqc17H", tool_name: "default" } ], suggestions: [ "یکی از این کرم‌ها رو بیشتر توضیح بده.", "کدوم ضد آفتاب برای پوست حساس بهتره؟", "محصولات ارزان‌تر چی دارید؟", "چطوری سفارش بدم؟", "محصولات مراقبت پوستی دیگه هم دارین؟" ] }; export async function mockStreamingResponse( onChunk: (chunk: StreamChatResponse) => void, onComplete: () => void, abortController?: AbortController ): Promise { const mockData = mockResponse2; onChunk({ status: "success", thread_id: mockData.thread_id }); await new Promise((resolve) => setTimeout(resolve, 500)); for (const chunk of mockData.text_chunks) { if (abortController?.signal.aborted) { return; } onChunk({ status: "success", text: chunk }); await new Promise((resolve) => setTimeout(resolve, 50)); } if (MOCK_SCENARIO === 2) { await new Promise((resolve) => setTimeout(resolve, 1000)); onChunk({ status: "success", wait: true, tool_name: "product_retrieval" }); await new Promise((resolve) => setTimeout(resolve, 500)); onChunk({ status: "success", wait: true, tool_name: "thinking" }); await new Promise((resolve) => setTimeout(resolve, 500)); onChunk({ status: "success", wait: true, tool_name: "create_product_card" }); onChunk({ status: "success", products: mockData.products as ProductCardData[] }); await new Promise((resolve) => setTimeout(resolve, 500)); onChunk({ status: "success", wait: true, tool_name: "prompt_recommendation" }); await new Promise((resolve) => setTimeout(resolve, 800)); onChunk({ status: "success", suggestions: mockData.suggestions }); await new Promise((resolve) => setTimeout(resolve, 1000)); for (const chunk of mockData.additional_text_chunks) { if (abortController?.signal.aborted) { return; } onChunk({ status: "success", text: chunk }); await new Promise((resolve) => setTimeout(resolve, 50)); } } else { await new Promise((resolve) => setTimeout(resolve, 1000)); onChunk({ status: "success", wait: true, tool_name: "prompt_recommendation" }); await new Promise((resolve) => setTimeout(resolve, 800)); onChunk({ status: "success", suggestions: mockData.suggestions }); } onComplete(); }