diff --git a/src/app.ts b/src/app.ts
index 0510e7f..dd46728 100644
--- a/src/app.ts
+++ b/src/app.ts
@@ -1,3 +1,5 @@
+// import path from "path";
+
import compression from "compression";
import cookieParser from "cookie-parser";
import cors from "cors";
@@ -142,6 +144,11 @@ class App {
*/
app.use(cors(appConfig.cors));
+ /**
+ * serve static files from project root (for test files)
+ */
+ app.use(express.static(process.cwd()));
+
/**
* config passport
*/
diff --git a/src/modules/chatbot/providers/llm.service.ts b/src/modules/chatbot/providers/llm.service.ts
index f067aa9..07a95bf 100644
--- a/src/modules/chatbot/providers/llm.service.ts
+++ b/src/modules/chatbot/providers/llm.service.ts
@@ -16,7 +16,7 @@ export class LLMService {
constructor(@inject(IOCTYPES.ChatbotDataContextService) private dataContextService: DataContextService) {
this.logger = new Logger("LLMService");
this.config = {
- model: process.env.OPENAI_BASE_URL || CHATBOT_CONSTANTS.DEFAULT_MODEL,
+ 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),
topP: Number(process.env.OPENAI_TOP_P || "0.95"),
@@ -66,8 +66,7 @@ export class LLMService {
});
const botMessage =
- completion.choices[0]?.message?.content ||
- "متأسفم، نمیتوانم پاسخی تولید کنم. لطفاً سوال خود را دوباره مطرح کنید. 🤖";
+ completion.choices[0]?.message?.content || "متأسفم، نمیتوانم پاسخی تولید کنم. لطفاً سوال خود را دوباره مطرح کنید. 🤖";
// Calculate token usage from OpenAI response
const tokensUsed = (completion.usage?.total_tokens || 0) + this.estimateTokens(systemInstruction);
diff --git a/test-chatbot-socket.html b/test-chatbot-socket.html
new file mode 100644
index 0000000..8ad4fd1
--- /dev/null
+++ b/test-chatbot-socket.html
@@ -0,0 +1,293 @@
+
+
+
+
+
+ Chatbot Socket.IO Test
+
+
+
+
+
+
Chatbot Socket.IO Test Client
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test-chatbot-socket.js b/test-chatbot-socket.js
new file mode 100644
index 0000000..e7e3f5c
--- /dev/null
+++ b/test-chatbot-socket.js
@@ -0,0 +1,99 @@
+// Test script for ChatbotGateway Socket.IO connection
+// Run with: node test-chatbot-socket.js
+
+const io = require("socket.io-client");
+
+// Connect to the chatbot gateway
+// The path option matches the path configured in ChatbotGateway
+const socket = io("http://localhost:4000", {
+ path: "/ws-chatbot",
+ transports: ["websocket"],
+ // Optional: Add token for authenticated connection
+ // query: {
+ // token: "your-jwt-token-here"
+ // }
+});
+
+socket.on("connect", () => {
+ console.log("✅ Connected to ChatbotGateway!");
+ console.log("Socket ID:", socket.id);
+
+ // Test: Create a session
+ console.log("\n📤 Creating session...");
+ socket.emit("create_session");
+});
+
+socket.on("authenticated", (data) => {
+ console.log("✅ Authenticated:", data);
+});
+
+socket.on("unauthorized", (data) => {
+ console.log("❌ Unauthorized:", data);
+});
+
+socket.on("session_created", (data) => {
+ console.log("✅ Session created:", JSON.stringify(data, null, 2));
+
+ // Test: Join the session
+ if (data.data && data.data.id) {
+ console.log("\n📤 Joining session:", data.data.id);
+ socket.emit("join_chat", data.data.id);
+ }
+});
+
+socket.on("chat_joined", (data) => {
+ console.log("✅ Joined chat:", JSON.stringify(data, null, 2));
+
+ // Test: Send a message
+ if (data.data && data.data.id) {
+ console.log("\n📤 Sending test message...");
+ socket.emit("send_message", {
+ sessionId: data.data.id,
+ content: "Hello, chatbot!",
+ });
+ }
+});
+
+socket.on("message_received", (data) => {
+ console.log("📨 Message received:", JSON.stringify(data, null, 2));
+});
+
+socket.on("bot_response_start", (data) => {
+ console.log("🤖 Bot response started:", JSON.stringify(data, null, 2));
+});
+
+socket.on("bot_response_chunk", (data) => {
+ process.stdout.write(data.data?.chunk || "");
+});
+
+socket.on("bot_response_end", (data) => {
+ console.log("\n✅ Bot response completed:", JSON.stringify(data, null, 2));
+});
+
+socket.on("bot_response", (data) => {
+ console.log("🤖 Bot response:", JSON.stringify(data, null, 2));
+});
+
+socket.on("error", (data) => {
+ console.log("❌ Error:", JSON.stringify(data, null, 2));
+});
+
+socket.on("session_error", (data) => {
+ console.log("❌ Session error:", JSON.stringify(data, null, 2));
+});
+
+socket.on("message_error", (data) => {
+ console.log("❌ Message error:", JSON.stringify(data, null, 2));
+});
+
+socket.on("disconnect", (reason) => {
+ console.log("❌ Disconnected:", reason);
+});
+
+socket.on("connect_error", (error) => {
+ console.log("❌ Connection error:", error.message);
+});
+
+// Keep the script running
+process.stdin.resume();
+