Spaces:
Running
Running
| { | |
| "info": { | |
| "_postman_id": "a9e8c1b2-f3d4-4e5f-b6a7-c8d9e0f1a2b3", | |
| "name": "NOW GE Web-Chat-Bot 2", | |
| "description": "A comprehensive Postman collection for the Hybrid RAG Chatbot API. It includes endpoints for chat sessions, administrative controls, reporting, and general utilities.\n\n**Setup:**\n1. Import the collection.\n2. Go to the collection's 'Variables' tab.\n3. Ensure `baseUrl` points to your running Flask application (default: http://localhost:5000).\n4. Ensure the credential variables match your `.env` file.", | |
| "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" | |
| }, | |
| "item": [ | |
| { | |
| "name": "Core Chat Flow", | |
| "description": "Contains the primary endpoints for a user's chat session.", | |
| "item": [ | |
| { | |
| "name": "1. Create Session", | |
| "event": [ | |
| { | |
| "listen": "test", | |
| "script": { | |
| "exec": [ | |
| "pm.test(\"Status code is 200 OK\", () => {", | |
| " pm.response.to.have.status(200);", | |
| "});", | |
| "", | |
| "pm.test(\"Response body is valid JSON\", () => {", | |
| " pm.response.to.be.json;", | |
| "});", | |
| "", | |
| "pm.test(\"Session ID is received and set as a collection variable\", () => {", | |
| " const jsonData = pm.response.json();", | |
| " pm.expect(jsonData.session_id).to.be.a('string').and.to.not.be.empty;", | |
| " pm.collectionVariables.set(\"sessionId\", jsonData.session_id);", | |
| " console.log(`Session ID set to: ${jsonData.session_id}`);", | |
| "});" | |
| ], | |
| "type": "text/javascript" | |
| } | |
| } | |
| ], | |
| "request": { | |
| "method": "POST", | |
| "header": [], | |
| "url": { | |
| "raw": "{{baseUrl}}/create-session", | |
| "host": [ | |
| "{{baseUrl}}" | |
| ], | |
| "path": [ | |
| "create-session" | |
| ] | |
| }, | |
| "description": "Initializes a new chat session on the server and returns a unique `session_id`. This ID is required for all subsequent requests in the chat flow and is automatically stored as a collection variable." | |
| }, | |
| "response": [] | |
| }, | |
| { | |
| "name": "2. Send Chat Message", | |
| "event": [ | |
| { | |
| "listen": "test", | |
| "script": { | |
| "exec": [ | |
| "pm.test(\"Status code is 200 OK\", () => {", | |
| " pm.response.to.have.status(200);", | |
| "});", | |
| "", | |
| "pm.test(\"Response body is valid JSON\", () => {", | |
| " pm.response.to.be.json;", | |
| "});", | |
| "", | |
| "pm.test(\"Response contains an 'answer' and a 'source'\", () => {", | |
| " const jsonData = pm.response.json();", | |
| " pm.expect(jsonData.answer).to.be.a('string');", | |
| " pm.expect(jsonData.source).to.be.a('string');", | |
| " pm.expect(jsonData.related_questions).to.be.an('array');", | |
| "});" | |
| ], | |
| "type": "text/javascript" | |
| } | |
| } | |
| ], | |
| "request": { | |
| "method": "POST", | |
| "header": [], | |
| "body": { | |
| "mode": "raw", | |
| "raw": "{\n // The user's question to the chatbot.\n \"query\": \"what is a class k fire?\",\n\n // (Optional) The ID of the user, used for retrieving personalized answers.\n \"user_id\": \"user_postman_007\",\n\n // The session ID obtained from the 'Create Session' request.\n \"session_id\": \"{{sessionId}}\"\n}", | |
| "options": { | |
| "raw": { | |
| "language": "json" | |
| } | |
| } | |
| }, | |
| "url": { | |
| "raw": "{{baseUrl}}/chat-bot", | |
| "host": [ | |
| "{{baseUrl}}" | |
| ], | |
| "path": [ | |
| "chat-bot" | |
| ] | |
| }, | |
| "description": "The main endpoint for interacting with the chatbot. It sends the user's query and the current session ID to get a response from the hybrid RAG system." | |
| }, | |
| "response": [] | |
| }, | |
| { | |
| "name": "3. Clear Session History", | |
| "event": [ | |
| { | |
| "listen": "test", | |
| "script": { | |
| "exec": [ | |
| "pm.test(\"Status code is 200 OK\", () => {", | |
| " pm.response.to.have.status(200);", | |
| "});", | |
| "", | |
| "pm.test(\"Response confirms history was cleared\", () => {", | |
| " const jsonData = pm.response.json();", | |
| " pm.expect(jsonData.message).to.equal(\"History cleared\");", | |
| "});" | |
| ], | |
| "type": "text/javascript" | |
| } | |
| } | |
| ], | |
| "request": { | |
| "method": "POST", | |
| "header": [], | |
| "body": { | |
| "mode": "raw", | |
| "raw": "{\n \"session_id\": \"{{sessionId}}\"\n}", | |
| "options": { | |
| "raw": { | |
| "language": "json" | |
| } | |
| } | |
| }, | |
| "url": { | |
| "raw": "{{baseUrl}}/clear-history", | |
| "host": [ | |
| "{{baseUrl}}" | |
| ], | |
| "path": [ | |
| "clear-history" | |
| ] | |
| }, | |
| "description": "Clears the conversation history for the current session on the server side. This allows for a fresh conversation context without needing to create a new session." | |
| }, | |
| "response": [] | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Admin Endpoints", | |
| "description": "Administrative endpoints for monitoring and managing the application's backend systems. All requests in this folder require Admin Basic Auth.", | |
| "item": [ | |
| { | |
| "name": "Get FAISS RAG Status", | |
| "request": { | |
| "method": "GET", | |
| "header": [], | |
| "url": { | |
| "raw": "{{baseUrl}}/admin/faiss_rag_status", | |
| "host": [ | |
| "{{baseUrl}}" | |
| ], | |
| "path": [ | |
| "admin", | |
| "faiss_rag_status" | |
| ] | |
| }, | |
| "description": "Retrieves the current status of the FAISS RAG system, including the embedding model, LLM model, number of indexed vectors, and list of processed source files." | |
| }, | |
| "response": [] | |
| }, | |
| { | |
| "name": "Rebuild FAISS RAG Index", | |
| "request": { | |
| "method": "POST", | |
| "header": [], | |
| "url": { | |
| "raw": "{{baseUrl}}/admin/rebuild_faiss_index", | |
| "host": [ | |
| "{{baseUrl}}" | |
| ], | |
| "path": [ | |
| "admin", | |
| "rebuild_faiss_index" | |
| ] | |
| }, | |
| "description": "Triggers a full, two-step rebuild of the FAISS knowledge base.\n\n1. **Chunking:** Runs `chunker.py` to extract text from all documents in the `/sources` folder and saves the raw text and chunked JSON.\n2. **Indexing:** Deletes the old FAISS index and builds a new one from the freshly chunked data.\n\n**Note:** This can be a long-running and resource-intensive process, depending on the number and size of source documents." | |
| }, | |
| "response": [] | |
| }, | |
| { | |
| "name": "Get Personal DB Status", | |
| "request": { | |
| "method": "GET", | |
| "header": [], | |
| "url": { | |
| "raw": "{{baseUrl}}/db/status", | |
| "host": [ | |
| "{{baseUrl}}" | |
| ], | |
| "path": [ | |
| "db", | |
| "status" | |
| ] | |
| }, | |
| "description": "Checks the status of the `DatabaseMonitor`, which watches the `database.csv` file for real-time changes to provide personalized answers." | |
| }, | |
| "response": [] | |
| } | |
| ], | |
| "auth": { | |
| "type": "basic", | |
| "basic": [ | |
| { | |
| "key": "password", | |
| "value": "{{adminPassword}}", | |
| "type": "string" | |
| }, | |
| { | |
| "key": "username", | |
| "value": "{{adminUsername}}", | |
| "type": "string" | |
| } | |
| ] | |
| } | |
| }, | |
| { | |
| "name": "Reporting", | |
| "description": "Endpoints for generating and downloading reports. Requires special report credentials.", | |
| "item": [ | |
| { | |
| "name": "Download Chat History Report", | |
| "event": [ | |
| { | |
| "listen": "test", | |
| "script": { | |
| "exec": [ | |
| "pm.test(\"Status code is 200 (OK) or 404 (Not Found)\", () => {", | |
| " pm.expect(pm.response.code).to.be.oneOf([200, 404]);", | |
| "});", | |
| "", | |
| "if (pm.response.code === 200) {", | |
| " pm.test(\"Content-Type header is text/csv\", () => {", | |
| " pm.response.to.have.header(\"Content-Type\", \"text/csv\");", | |
| " });", | |
| " pm.test(\"Content-Disposition header suggests a download\", () => {", | |
| " pm.expect(pm.response.headers.get('Content-Disposition')).to.include('attachment;');", | |
| " });", | |
| "}" | |
| ], | |
| "type": "text/javascript" | |
| } | |
| } | |
| ], | |
| "request": { | |
| "method": "GET", | |
| "header": [], | |
| "url": { | |
| "raw": "{{baseUrl}}/report", | |
| "host": [ | |
| "{{baseUrl}}" | |
| ], | |
| "path": [ | |
| "report" | |
| ] | |
| }, | |
| "description": "Downloads the complete chat history log (`chat_history.csv`) as a CSV file. This endpoint is protected by a different password than the other admin endpoints." | |
| }, | |
| "response": [] | |
| } | |
| ], | |
| "auth": { | |
| "type": "basic", | |
| "basic": [ | |
| { | |
| "key": "password", | |
| "value": "{{reportPassword}}", | |
| "type": "string" | |
| }, | |
| { | |
| "key": "username", | |
| "value": "{{adminUsername}}", | |
| "type": "string" | |
| } | |
| ] | |
| } | |
| }, | |
| { | |
| "name": "Utility", | |
| "description": "General application utility endpoints.", | |
| "item": [ | |
| { | |
| "name": "Get Version", | |
| "event": [ | |
| { | |
| "listen": "test", | |
| "script": { | |
| "exec": [ | |
| "pm.test(\"Status code is 200 OK\", () => {", | |
| " pm.response.to.have.status(200);", | |
| "});", | |
| "", | |
| "pm.test(\"Response contains a 'version' string\", () => {", | |
| " const jsonData = pm.response.json();", | |
| " pm.expect(jsonData.version).to.be.a('string').and.to.not.be.empty;", | |
| "});" | |
| ], | |
| "type": "text/javascript" | |
| } | |
| } | |
| ], | |
| "request": { | |
| "method": "GET", | |
| "header": [], | |
| "url": { | |
| "raw": "{{baseUrl}}/version", | |
| "host": [ | |
| "{{baseUrl}}" | |
| ], | |
| "path": [ | |
| "version" | |
| ] | |
| }, | |
| "description": "Retrieves the current version string of the running application." | |
| }, | |
| "response": [] | |
| }, | |
| { | |
| "name": "Load Chat Interface (Index)", | |
| "request": { | |
| "method": "GET", | |
| "header": [], | |
| "url": { | |
| "raw": "{{baseUrl}}/", | |
| "host": [ | |
| "{{baseUrl}}" | |
| ], | |
| "path": [ | |
| "" | |
| ] | |
| }, | |
| "description": "Accesses the root URL to load the `chat-bot.html` front-end interface, if it exists in the `templates` folder." | |
| }, | |
| "response": [] | |
| } | |
| ] | |
| } | |
| ], | |
| "variable": [ | |
| { | |
| "key": "baseUrl", | |
| "value": "http://localhost:5000", | |
| "description": "The base URL of the running Flask application. Change the port if necessary." | |
| }, | |
| { | |
| "key": "sessionId", | |
| "value": "", | |
| "description": "This variable is automatically populated by the '1. Create Session' request. Do not edit manually." | |
| }, | |
| { | |
| "key": "adminUsername", | |
| "value": "fleetblox", | |
| "description": "The username for accessing administrative endpoints." | |
| }, | |
| { | |
| "key": "adminPassword", | |
| "value": "fleetblox", | |
| "description": "The password for accessing administrative endpoints." | |
| }, | |
| { | |
| "key": "reportPassword", | |
| "value": "e$$!@2213r423er31", | |
| "description": "The specific password required for downloading the chat history report." | |
| } | |
| ] | |
| } |