From 9a8515d7ab329c4068d1535e39458df6a03f9024 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Sun, 30 Nov 2025 11:52:38 +0330 Subject: [PATCH] chat --- FRONTEND_PROMPT.md | 371 ++++++++++++++++++ .../chatbot/constants/chatbot.constants.ts | 306 +++------------ src/modules/chatbot/providers/llm.service.ts | 13 +- 3 files changed, 424 insertions(+), 266 deletions(-) create mode 100644 FRONTEND_PROMPT.md diff --git a/FRONTEND_PROMPT.md b/FRONTEND_PROMPT.md new file mode 100644 index 0000000..c9b727b --- /dev/null +++ b/FRONTEND_PROMPT.md @@ -0,0 +1,371 @@ +# Frontend WebSocket Chatbot Implementation Prompt + +Create a modern, responsive frontend application for a real-time chatbot system using Socket.IO. The chatbot is designed for an Electrical Power Panels (تابلو برق) e-commerce platform that provides product guidance in Persian/Farsi. + +## Technical Requirements + +### 1. WebSocket Connection Setup + +- **Connection Path**: `/ws-chatbot` +- **Library**: Use Socket.IO client library (socket.io-client) +- **Connection Options**: + - Support both authenticated (with JWT token) and anonymous connections + - Token can be provided via: + - Query parameter: `?token=YOUR_JWT_TOKEN` + - Authorization header: `Authorization: Bearer YOUR_JWT_TOKEN` + - For anonymous users, the system uses a ULID stored in cookies (`chatbot_session_id`) + - CORS is enabled with credentials support + +### 2. WebSocket Events to Implement + +#### Connection Events +- `connect` - Socket connected successfully +- `disconnect` - Socket disconnected +- `connection_failed` - Connection failed + +#### Authentication Events +- **Emit**: `authenticate` (if using token-based auth) +- **Listen**: `authenticated` - Authentication successful + ```json + { + "message": "authenticated", + "userId": "user_id", + "timestamp": "2024-01-01T00:00:00.000Z" + } + ``` +- **Listen**: `unauthorized` - Authentication failed + ```json + { + "message": "error_message", + "timestamp": "2024-01-01T00:00:00.000Z" + } + ``` + +#### Session Management Events +- **Emit**: `create_session` - Create a new chat session +- **Listen**: `session_created` - Session created successfully + ```json + { + "status": "success", + "data": { + "id": "session_ulid", + "status": "active", + "createdAt": "2024-01-01T00:00:00.000Z", + "lastMessageAt": "2024-01-01T00:00:00.000Z", + "messages": [] + }, + "timestamp": "2024-01-01T00:00:00.000Z" + } + ``` + +- **Emit**: `join_chat` - Join an existing chat session (pass sessionId as string) +- **Listen**: `chat_joined` - Successfully joined chat session + ```json + { + "status": "success", + "data": { + "id": "session_ulid", + "status": "active", + "createdAt": "2024-01-01T00:00:00.000Z", + "lastMessageAt": "2024-01-01T00:00:00.000Z", + "messages": [ + { + "id": "message_ulid", + "content": "message content", + "type": "user" | "bot" | "system", + "status": "sent" | "delivered" | "read" | "failed", + "createdAt": "2024-01-01T00:00:00.000Z", + "responseToId": "optional_message_id", + "metadata": {}, + "tokensUsed": 0 + } + ] + }, + "timestamp": "2024-01-01T00:00:00.000Z" + } + ``` + +- **Emit**: `leave_chat` - Leave a chat session (pass sessionId as string) +- **Listen**: `chat_left` - Successfully left chat session + +#### Message Events +- **Emit**: `send_message` - Send a regular message + ```json + { + "content": "user message text", + "sessionId": "session_ulid", + "responseToId": "optional_message_id_to_reply_to", + "metadata": {} + } + ``` + +- **Emit**: `send_message_stream` - Send a message and receive streaming response + ```json + { + "content": "user message text", + "sessionId": "session_ulid", + "responseToId": "optional_message_id_to_reply_to", + "metadata": {} + } + ``` + +- **Listen**: `message_received` - User message received and saved + ```json + { + "status": "success", + "data": { + "id": "message_ulid", + "content": "message content", + "type": "user", + "status": "sent", + "createdAt": "2024-01-01T00:00:00.000Z", + "responseToId": null, + "metadata": {}, + "tokensUsed": 0 + }, + "timestamp": "2024-01-01T00:00:00.000Z" + } + ``` + +#### Streaming Response Events (for `send_message_stream`) +- **Listen**: `bot_response_start` - Bot started generating response + ```json + { + "status": "success", + "data": { + "userMessageId": "message_ulid" + }, + "timestamp": "2024-01-01T00:00:00.000Z" + } + ``` + +- **Listen**: `bot_response_chunk` - Receive a chunk of bot response (streaming) + ```json + { + "status": "success", + "data": { + "chunk": "partial text chunk", + "userMessageId": "message_ulid" + }, + "timestamp": "2024-01-01T00:00:00.000Z" + } + ``` + +- **Listen**: `bot_response_end` - Bot finished generating response + ```json + { + "status": "success", + "data": { + "userMessageId": "message_ulid", + "fullResponse": "complete bot response text" + }, + "timestamp": "2024-01-01T00:00:00.000Z" + } + ``` + +#### Non-Streaming Bot Response (for `send_message`) +- **Listen**: `bot_response` - Complete bot response received + ```json + { + "status": "success", + "data": { + "id": "message_ulid", + "content": "complete bot response", + "type": "bot", + "status": "sent", + "createdAt": "2024-01-01T00:00:00.000Z", + "responseToId": "user_message_ulid", + "metadata": { + "confidence": 0.95, + "sources": [], + "llmContext": {} + }, + "tokensUsed": 150 + }, + "timestamp": "2024-01-01T00:00:00.000Z" + } + ``` + +#### Typing Indicators +- **Emit**: `typing_start` - User started typing (pass sessionId as string) +- **Emit**: `typing_stop` - User stopped typing (pass sessionId as string) +- **Listen**: `typing_start` - Another user started typing +- **Listen**: `typing_stop` - Another user stopped typing + +#### User Presence Events +- **Listen**: `user_joined` - Another user joined the session +- **Listen**: `user_left` - Another user left the session + +#### Error Events +- **Listen**: `error` - General error +- **Listen**: `websocket_error` - WebSocket connection error +- **Listen**: `session_error` - Session-related error +- **Listen**: `message_error` - Message-related error + +All error events follow this format: +```json +{ + "status": "error", + "message": "error message", + "timestamp": "2024-01-01T00:00:00.000Z" +} +``` + +### 3. REST API Endpoints (Optional - for session management) + +The backend also provides REST endpoints that can be used for session management: + +- `POST /chatbot/sessions` - Create a new chat session +- `GET /chatbot/sessions?limit=10` - Get user's chat sessions (paginated) +- `GET /chatbot/sessions/:sessionId` - Get a specific chat session with messages +- `POST /chatbot/messages` - Send a message (non-streaming) +- `POST /chatbot/messages/stream` - Send a message and get Server-Sent Events (SSE) streaming +- `PUT /chatbot/sessions/:sessionId/close` - Close a chat session +- `PUT /chatbot/sessions/:sessionId/messages/read` - Mark messages as read + +### 4. UI/UX Requirements + +#### Design +- Modern, clean, and responsive design +- Support for Persian/Farsi (RTL) text direction +- Mobile-first approach with desktop support +- Dark mode support (optional but recommended) +- Smooth animations and transitions + +#### Chat Interface Components + +1. **Session List Sidebar** (optional) + - List of all chat sessions + - Show last message preview + - Show unread message count + - Show session status (active/closed) + - Create new session button + +2. **Chat Window** + - Message list with scroll-to-bottom functionality + - Message bubbles: + - User messages: Right-aligned (or left in RTL), distinct styling + - Bot messages: Left-aligned (or right in RTL), distinct styling + - System messages: Centered, muted styling + - Show message timestamps (relative or absolute) + - Show message status indicators (sent, delivered, read, failed) + - Support for message replies (if responseToId is provided) + - Markdown rendering for bot messages (if applicable) + - Copy message functionality + +3. **Input Area** + - Text input field with character counter (max 2000 characters) + - Send button + - Support for Enter key to send (Shift+Enter for new line) + - Typing indicator display + - File upload support (if needed in future) + - Emoji picker (optional) + +4. **Streaming Response Display** + - Show typing indicator when `bot_response_start` is received + - Display streaming text character-by-character or word-by-word as chunks arrive + - Smooth animation for streaming text + - Show completion when `bot_response_end` is received + - Handle errors gracefully during streaming + +5. **Connection Status** + - Visual indicator for connection status (connected/disconnected/reconnecting) + - Auto-reconnect functionality with exponential backoff + - Show connection errors to user + +6. **Error Handling** + - Display user-friendly error messages + - Retry mechanisms for failed operations + - Toast notifications for errors + - Persian/Farsi error messages + +#### Features + +- **Real-time Updates**: All messages should appear in real-time +- **Message Persistence**: Load previous messages when joining a session +- **Auto-scroll**: Automatically scroll to bottom when new messages arrive +- **Typing Indicators**: Show when bot is generating response +- **Message Status**: Display sent/delivered/read status for user messages +- **Session Management**: Create, join, leave, and close sessions +- **Responsive Design**: Works on mobile, tablet, and desktop +- **Accessibility**: WCAG 2.1 AA compliance +- **Performance**: Optimize for smooth scrolling with many messages (virtual scrolling if needed) + +### 5. State Management + +Implement proper state management for: +- WebSocket connection state +- Current active session +- Message list for current session +- Session list +- Typing indicators +- Connection status +- Error states + +### 6. Technical Stack Recommendations + +- **Framework**: React, Vue, or Angular (your choice) +- **State Management**: Redux, Zustand, Pinia, or Context API +- **WebSocket**: socket.io-client +- **Styling**: Tailwind CSS, Material-UI, or styled-components +- **Icons**: React Icons, Heroicons, or similar +- **Date Formatting**: date-fns or moment.js +- **HTTP Client**: Axios or fetch API +- **Build Tool**: Vite, Create React App, or Next.js + +### 7. Implementation Notes + +- Handle reconnection automatically +- Store ULID in cookies for anonymous users +- Implement proper cleanup on component unmount +- Debounce typing indicators (send `typing_stop` after 3 seconds of inactivity) +- Implement message queuing for offline scenarios +- Add loading states for all async operations +- Implement proper error boundaries +- Add analytics/tracking (optional) +- Support for keyboard shortcuts (optional) + +### 8. Testing Requirements + +- Unit tests for WebSocket event handlers +- Integration tests for message flow +- E2E tests for critical user flows +- Test reconnection scenarios +- Test error handling +- Test streaming response display + +### 9. Additional Features (Optional) + +- Message search within a session +- Export chat history +- Share session link +- Voice input (speech-to-text) +- Message reactions +- Rich text formatting in messages +- Product cards/embeds in bot responses +- Quick reply buttons + +### 10. Example Flow + +1. User opens the application +2. Application connects to WebSocket (`/ws-chatbot`) +3. If authenticated, token is sent; otherwise, ULID is used from cookie or generated +4. User creates a new session or joins an existing one +5. Previous messages are loaded and displayed +6. User types a message and sends it +7. Message appears immediately in the chat +8. Bot response starts streaming (if using streaming) or arrives as complete message +9. User can continue the conversation +10. Connection is maintained and auto-reconnects if dropped + +## Deliverables + +Create a complete, production-ready frontend application with: +- Clean, maintainable code structure +- Comprehensive error handling +- Responsive design +- Real-time WebSocket integration +- TypeScript support (recommended) +- Documentation and comments +- README with setup instructions + diff --git a/src/modules/chatbot/constants/chatbot.constants.ts b/src/modules/chatbot/constants/chatbot.constants.ts index cb5de5f..26b2b28 100644 --- a/src/modules/chatbot/constants/chatbot.constants.ts +++ b/src/modules/chatbot/constants/chatbot.constants.ts @@ -4,280 +4,62 @@ export const CHATBOT_CONSTANTS = { DEFAULT_MAX_TOKENS: 2000, MAX_CONVERSATION_HISTORY: 20, - // General system prompt focused on company guidance - SYSTEM_PROMPT: `شما یک دستیار هوشمند AI برای پلتفرم DZone هستید که در راهنمایی کاربران درباره شرکت‌ها و صنایع تخصص دارید. شما باید تمامی پاسخ‌ها را به زبان فارسی ارائه دهید. + // General system prompt focused on Electrical Power Panels product guidance + SYSTEM_PROMPT: `شما یک دستیار هوشمند AI برای پلتفرم فجر تابلو مرکزی هستید که در راهنمایی کاربران برای یافتن و انتخاب تابلوهای برق (Electrical Power Panels) تخصص دارید. شما باید تمامی پاسخ‌ها را به زبان فارسی ارائه دهید. ## وظایف اصلی شما: -🏢 **راهنمایی شرکت‌ها**: کمک به کاربران برای یافتن شرکت‌های مناسب و اطلاعات تماس آن‌ها -🏭 **معرفی صنایع**: ارائه اطلاعات کامل درباره صنایع مختلف و شرکت‌های فعال در هر حوزه -💼 **محصولات و خدمات**: راهنمایی درباره محصولات و خدمات ارائه شده توسط شرکت‌ها -🔍 **جستجو و مقایسه**: کمک به انتخاب بهترین شرکت برای نیازهای خاص کاربران -📞 **اطلاعات تماس**: ارائه اطلاعات کامل تماس شامل تلفن، ایمیل و آدرس شرکت‌ها +⚡ **راهنمایی محصولات تابلو برق**: کمک به کاربران برای یافتن تابلوهای برق مناسب بر اساس نیازهایشان +🔌 **مشاوره فنی**: ارائه اطلاعات فنی درباره انواع تابلوهای برق، ظرفیت، ولتاژ و مشخصات +🏭 **معرفی تولیدکنندگان**: معرفی شرکت‌های تولیدکننده تابلو برق و محصولات آن‌ها +💡 **مشاوره انتخاب**: کمک به انتخاب بهترین تابلو برق بر اساس کاربرد، ظرفیت و بودجه +📋 **مشخصات فنی**: ارائه جزئیات کامل فنی شامل ولتاژ، جریان، ابعاد، استانداردها و گواهینامه‌ها +📞 **اطلاعات تماس**: ارائه اطلاعات تماس تولیدکنندگان و فروشندگان + +## انواع تابلوهای برق که باید درباره آن‌ها اطلاعات داشته باشید: +🔹 **تابلو برق فشار ضعیف (LV Panel)**: برای مصارف خانگی، تجاری و صنعتی +🔹 **تابلو برق فشار متوسط (MV Panel)**: برای شبکه‌های توزیع برق +🔹 **تابلو برق کنترل و فرمان**: برای کنترل موتورها و سیستم‌های اتوماسیون +🔹 **تابلو برق توزیع**: برای توزیع برق در ساختمان‌ها و کارخانه‌ها +🔹 **تابلو برق خازنی**: برای اصلاح ضریب توان +🔹 **تابلو برق UPS**: برای سیستم‌های برق اضطراری +🔹 **تابلو برق روشنایی**: برای کنترل روشنایی +🔹 **تابلو برق آسانسور**: برای سیستم‌های آسانسور + +## اطلاعات مهم برای راهنمایی کاربران: +✅ **ولتاژ کاری**: 220V, 380V, 400V, 6.6kV, 11kV, 20kV و غیره +✅ **جریان نامی**: آمپر مورد نیاز (از 10A تا چند هزار آمپر) +✅ **نوع نصب**: دیواری، ایستاده، توکار، روکار +✅ **درجه حفاظت**: IP54, IP65, IP66 و غیره +✅ **استانداردها**: IEC, VDE, DIN, IEEE و استانداردهای ملی +✅ **کاربرد**: مسکونی، تجاری، صنعتی، بیمارستانی، دیتاسنتر +✅ **ابعاد و ابعاد**: اندازه فیزیکی مناسب برای محل نصب +✅ **قابلیت‌های اضافی**: سیستم‌های مانیتورینگ، SCADA، کنترل از راه دور ## اصول پاسخگویی: ✅ همیشه به زبان فارسی پاسخ دهید -✅ از اطلاعات پایگاه داده شرکت‌ها و صنایع برای پاسخ‌های دقیق استفاده کنید -✅ در صورت سوال درباره شرکت خاص، اطلاعات کامل آن را ارائه دهید -✅ همیشه اطلاعات تماس (تلفن، ایمیل، آدرس) شرکت‌ها را اضافه کنید +✅ از اطلاعات پایگاه داده محصولات و شرکت‌ها برای پاسخ‌های دقیق استفاده کنید +✅ سوالات کاربر را برای درک بهتر نیازش بپرسید (ولتاژ، جریان، کاربرد، بودجه) +✅ اطلاعات فنی دقیق و قابل اعتماد ارائه دهید + +✅ در صورت نیاز، چند گزینه مختلف با مشخصات و قیمت ارائه دهید ✅ اگر چیزی نمی‌دانید، صادقانه اعتراف کنید و راه حل جایگزین پیشنهاد دهید ✅ از ایموجی‌ها برای بهتر کردن تجربه کاربر استفاده کنید ✅ پاسخ‌های خود را ساختاربندی و خوانا ارائه دهید -## قالب پاسخ برای شرکت‌ها: -📍 **نام شرکت**: [نام کامل] -📞 **تلفن**: [شماره تماس] -📧 **ایمیل**: [آدرس ایمیل] -🏠 **آدرس**: [آدرس کامل] -🏭 **صنعت**: [نوع صنعت] -💼 **محصولات/خدمات**: [فهرست محصولات و خدمات] +## قالب پاسخ برای محصولات تابلو برق: +⚡ **نام محصول**: [نام کامل محصول] +🏭 **تولیدکننده**: [نام شرکت] +📊 **مشخصات فنی**: + - ولتاژ: [مثلاً 380V] + - جریان نامی: [مثلاً 400A] -اگر اطلاعات شرکت‌ها یا صنایع مربوطه از پایگاه داده در دسترس است، حتماً از آن استفاده کرده و منبع آن را مشخص کنید.`, + - درجه حفاظت: [مثلاً IP54] + - استاندارد: [مثلاً IEC 61439] +💼 **کاربرد**: [مثلاً صنعتی، تجاری، مسکونی] +💰 **قیمت**: [در صورت موجود بودن] - // New company guidance system prompt - COMPANY_GUIDANCE_SYSTEM_PROMPT: `شما یک دستیار هوشمند برای راهنمایی کاربران درباره شرکت‌ها و صنایع موجود در پلتفرم DZone هستید. -## ماموریت شما: -- راهنمایی کاربران برای یافتن شرکت‌های مناسب -- ارائه اطلاعات کامل درباره شرکت‌ها، محصولات و خدمات -- معرفی صنایع مختلف و شرکت‌های فعال در هر حوزه -- کمک به انتخاب بهترین شرکت برای نیازهای کاربران - -## اطلاعات شرکت‌ها و صنایع: -{context} - -## تاریخچه مکالمه: -{conversation_history} - -## سوال کاربر: -{question} - -## دستورالعمل پاسخ: -بر اساس اطلاعات شرکت‌ها و صنایع موجود، پاسخی جامع و کاربردی به زبان فارسی ارائه دهید: - -**نکات مهم:** -- اگر کاربر درباره شرکت خاصی سوال می‌پرسد، اطلاعات کامل آن شرکت (نام، آدرس، تلفن، محصولات، خدمات) را ارائه دهید -- اگر سوال درباره صنعت خاصی است، شرکت‌های فعال در آن صنعت را معرفی کنید -- در صورت جستجوی محصول یا خدمت، شرکت‌های مرتبط را پیشنهاد دهید -- همیشه اطلاعات تماس (تلفن، ایمیل، آدرس) شرکت‌ها را ارائه دهید -- از ایموجی‌های مناسب برای بهتر شدن خوانایی استفاده کنید -- پاسخ خود را ساختاربندی و منظم ارائه دهید - -پاسخ شما:`, - - // Company data templates - COMPANY_DATA_TEMPLATES: { - COMPANY_INFO: `نام شرکت: {name} -مدیر عامل: {ceo} -ایمیل: {email} -تلفن: {phone} -شماره ثبت: {registrationNumber} -تاریخ تاسیس: {establishmentDate} -آدرس: {address} -وب‌سایت: {website} -توضیحات: {description} -صنعت فعالیت: {industry} -وضعیت: {status} -کسب و کار والد: {business} - -این شرکت در پلتفرم DZone ثبت شده و آماده ارائه خدمات و محصولات خود به مشتریان می‌باشد.`, - - COMPANY_PRODUCT: `محصول شرکت {companyName}: -نام محصول: {productTitle} -شرکت تولیدکننده: {companyName} -صنعت: {industry} -توضیحات شرکت: {companyDescription} -آدرس شرکت: {companyAddress} -تلفن تماس: {companyPhone} -ایمیل: {companyEmail} - -این محصول توسط شرکت {companyName} در صنعت {industry} تولید و ارائه می‌شود.`, - - COMPANY_SERVICE: `خدمات شرکت {companyName}: -نام خدمت: {serviceTitle} -شرکت ارائه‌دهنده: {companyName} -صنعت: {industry} -توضیحات شرکت: {companyDescription} -آدرس شرکت: {companyAddress} -تلفن تماس: {companyPhone} -ایمیل: {companyEmail} - -این خدمت توسط شرکت {companyName} در صنعت {industry} ارائه می‌شود.`, - - INDUSTRY_INFO: `صنعت: {title} -وضعیت: {status} -تعداد شرکت‌های فعال: {companiesCount} -کسب و کار والد: {business} - -شرکت‌های فعال در این صنعت: -{companiesList} - -این صنعت شامل شرکت‌هایی است که در حوزه {title} فعالیت می‌کنند و خدمات و محصولات مختلفی ارائه می‌دهند.`, - }, - - // Company guidance documents - COMPANY_GUIDANCE_DOCUMENTS: { - COMPANY_GUIDE: `راهنمای شرکت‌ها در پلتفرم DZone: - -🏢 **اطلاعات شرکت‌ها**: -در پلتفرم DZone شرکت‌های مختلفی در صنایع متنوع فعالیت می‌کنند. هر شرکت دارای اطلاعات کاملی شامل: -- نام و مشخصات کامل شرکت -- اطلاعات تماس (تلفن، ایمیل، آدرس) -- صنعت فعالیت و حوزه کاری -- محصولات و خدمات ارائه شده -- وضعیت فعالیت و مجوزهای لازم - -💼 **محصولات و خدمات**: -هر شرکت می‌تواند محصولات و خدمات متنوعی ارائه دهد: -- محصولات: کالاها و تولیدات شرکت -- خدمات: سرویس‌ها و راهکارهای ارائه شده -- اطلاعات تماس برای استعلام و سفارش -- جزئیات کامل درباره هر محصول و خدمت - -🏭 **دسته‌بندی صنایع**: -شرکت‌ها بر اساس صنعت فعالیت دسته‌بندی شده‌اند: -- هر صنعت شامل شرکت‌های مرتبط -- امکان جستجو بر اساس نوع صنعت -- مشاهده تمام شرکت‌های یک صنعت خاص -- اطلاعات کامل درباره حوزه فعالیت`, - - COMPANY_FAQ: `سوالات متداول درباره شرکت‌ها: - -❓ **چگونه اطلاعات یک شرکت را پیدا کنم؟** -می‌توانید با ذکر نام شرکت یا صنعت مورد نظر، اطلاعات کامل شامل آدرس، تلفن و محصولات آن را دریافت کنید. - -❓ **چه شرکت‌هایی در یک صنعت خاص فعالیت می‌کنند؟** -با ذکر نام صنعت، لیست کامل شرکت‌های فعال در آن حوزه را مشاهده خواهید کرد. - -❓ **چگونه با یک شرکت تماس بگیرم؟** -اطلاعات تماس شامل تلفن، ایمیل و آدرس تمام شرکت‌ها در پلتفرم موجود است. - -❓ **چه محصولات و خدماتی ارائه می‌شود؟** -هر شرکت لیست کاملی از محصولات و خدمات خود ارائه داده که قابل مشاهده است. - -❓ **چگونه شرکت مناسب برای نیاز خودم پیدا کنم؟** -با توصیف نیاز خود یا نوع محصول/خدمت مورد نظر، شرکت‌های مرتبط را معرفی خواهم کرد.`, - - SEARCH_GUIDE: `راهنمای جستجو و یافتن شرکت‌ها: - -🔍 **نحوه جستجو**: -- جستجو بر اساس نام شرکت -- جستجو بر اساس نوع صنعت -- جستجو بر اساس محصول یا خدمت -- جستجو بر اساس منطقه جغرافیایی - -📊 **اطلاعات قابل دریافت**: -- اطلاعات کامل شرکت (نام، آدرس، تلفن) -- لیست محصولات و توضیحات -- لیست خدمات ارائه شده -- صنعت و حوزه فعالیت -- وضعیت فعالیت شرکت - -🎯 **توصیه‌های مفید**: -- برای یافتن شرکت مناسب، نیاز خود را واضح بیان کنید -- از کلمات کلیدی مرتبط با صنعت استفاده کنید -- در صورت نیاز، اطلاعات تماس برای پیگیری بیشتر درخواست کنید -- برای مقایسه، چندین شرکت در یک صنعت را بررسی کنید`, - - INDUSTRY_GUIDE: `راهنمای صنایع و حوزه‌های فعالیت: - -🏭 **انواع صنایع موجود**: -در پلتفرم DZone شرکت‌های مختلفی در صنایع متنوع حضور دارند: -- صنایع تولیدی و ساختمانی -- خدمات فناوری اطلاعات -- صنایع غذایی و کشاورزی -- خدمات مالی و بیمه -- حمل و نقل و لجستیک -- آموزش و تربیت -- سلامت و درمان -- و سایر صنایع - -💡 **مزایای دسته‌بندی صنعتی**: -- یافتن آسان شرکت‌های مرتبط -- مقایسه خدمات در یک صنعت -- انتخاب بهترین گزینه برای نیاز شما -- دسترسی به اطلاعات تخصصی هر حوزه - -📈 **نحوه استفاده**: -- ابتدا صنعت مورد نظر خود را مشخص کنید -- سپس شرکت‌های فعال در آن صنعت را بررسی کنید -- محصولات و خدمات مناسب را انتخاب کنید -- برای اطلاعات بیشتر با شرکت تماس بگیرید`, - }, - - // Logging messages for LangChain service - LANGCHAIN_MESSAGES: { - LOADING_DATA: "Loading company and industry data for model training...", - NO_DATA_FOUND: "No data found for model training", - DOCUMENTS_SPLIT: "{totalDocs} documents split into {chunks} chunks", - VECTOR_STORE_READY: "Vector store successfully initialized - ready to guide users about companies and industries", - VECTOR_STORE_ERROR: "Error initializing vector store", - DOCUMENTS_LOADED: "{count} documents loaded from company and industry database", - LOADING_ERROR: "Error loading company and industry documents", - SERVICE_NOT_INITIALIZED: "LangChain service is not initialized", - RESPONSE_ERROR: "Error generating LangChain response", - STREAM_RESPONSE_ERROR: "Error generating LangChain stream response", - REFRESHING_VECTOR_STORE: "Refreshing vector store with new company and industry data...", - }, - - // Source type labels in Farsi - SOURCE_TYPE_LABELS: { - company: "شرکت", - product: "محصول", - service: "خدمت", - industry: "صنعت", - company_guide: "راهنمای شرکت‌ها", - company_faq: "سوالات متداول", - search_guide: "راهنمای جستجو", - industry_guide: "راهنمای صنایع", - }, - - // Default values for missing data - DEFAULT_VALUES: { - NO_WEBSITE: "ندارد", - UNSPECIFIED: "مشخص نشده", - ACTIVE: "فعال", - INACTIVE: "غیرفعال", - }, - - // WEBSOCKET_EVENTS: { - // // Connection events - // CONNECT: "connect", - // DISCONNECT: "disconnect", - // CONNECTION_ERROR: "connection_failed", - - // // Authentication events - // AUTHENTICATE: "authenticate", - // AUTHENTICATED: "authenticated", - // UNAUTHORIZED: "unauthorized", - - // // Session events - // CREATE_SESSION: "create_session", - // SESSION_CREATED: "session_created", - // JOIN_CHAT: "join_chat", - // CHAT_JOINED: "chat_joined", - // LEAVE_CHAT: "leave_chat", - // CHAT_LEFT: "chat_left", - - // // Message events - // SEND_MESSAGE: "send_message", - // MESSAGE_RECEIVED: "message_received", - // BOT_RESPONSE_START: "bot_response_start", - // BOT_RESPONSE_CHUNK: "bot_response_chunk", - // BOT_RESPONSE_END: "bot_response_end", - // BOT_RESPONSE: "bot_response", - - // // Status events - // TYPING_START: "typing_start", - // TYPING_STOP: "typing_stop", - // USER_JOINED: "user_joined", - // USER_LEFT: "user_left", - - // // Error events - // ERROR: "error", - // WEBSOCKET_ERROR: "websocket_error", - // SESSION_ERROR: "session_error", - // MESSAGE_ERROR: "message_error", - // }, +اگر اطلاعات محصولات تابلو برق یا پایگاه داده در دسترس است، حتماً از آن استفاده کرده و منبع آن را مشخص کنید.`, ERROR_MESSAGES: { SESSION_NOT_FOUND: "جلسه چت یافت نشد", diff --git a/src/modules/chatbot/providers/llm.service.ts b/src/modules/chatbot/providers/llm.service.ts index 07a95bf..7ef5396 100644 --- a/src/modules/chatbot/providers/llm.service.ts +++ b/src/modules/chatbot/providers/llm.service.ts @@ -16,19 +16,24 @@ export class LLMService { constructor(@inject(IOCTYPES.ChatbotDataContextService) private dataContextService: DataContextService) { this.logger = new Logger("LLMService"); this.config = { - model: process.env.OPENAI_MODEL || CHATBOT_CONSTANTS.DEFAULT_MODEL, - temperature: Number(process.env.OPENAI_TEMPERATURE || CHATBOT_CONSTANTS.DEFAULT_TEMPERATURE), - maxTokens: Number(process.env.OPENAI_MAX_TOKENS || CHATBOT_CONSTANTS.DEFAULT_MAX_TOKENS), + model: process.env.OPENAI_MODEL || "openai/gpt-4o-mini", + temperature: Number(process.env.OPENAI_TEMPERATURE || "0.7"), + maxTokens: Number(process.env.OPENAI_MAX_TOKENS || "2000"), topP: Number(process.env.OPENAI_TOP_P || "0.95"), - apiKey: process.env.OPENAI_API_KEY || "", + apiKey: + process.env.OPENAI_API_KEY || + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiI2OTFlMzBjOGI1NDRmYzJkY2JlMTQ2MGUiLCJ0eXBlIjoiYWlfa2V5IiwiaWF0IjoxNzYzNTg2MjQ4fQ.XRMe-TVV9FXCMdueI_xbxycBLj7KJEACXYlkxv3QZrE", }; if (!this.config.apiKey) { throw new Error("OPENAI_API_KEY is required"); } + const baseURL = process.env.OPENAI_BASE_URL || "https://ai.liara.ir/api/v1/691e30a204c9b93ad278578b"; + this.openai = new OpenAI({ apiKey: this.config.apiKey, + baseURL: baseURL, }); }