Local KB Guide
Chat with the Local Knowledge Base
Section titled “Chat with the Local Knowledge Base”This guide walks through authentication, session creation, local file upload, ingestion, and prompting.
Prerequisites
Section titled “Prerequisites”- Credentials for a hosted SmartChat RAG API with a
CHAT_USERrole - A pre-configured SmartChat RAG API server
- A PDF file to upload
1. Authenticate
Section titled “1. Authenticate”import requestsimport json
base_url = "<BASE_URL>"
payload = json.dumps({"username": "<USERNAME>", "password": "<PASSWORD>"})headers = {"Content-Type": "application/json"}
response = requests.post(f"{base_url}/api/v1/auth/user", headers=headers, data=payload)headers["Authorization"] = f"Bearer {response.json()['access_token']}"2. Get Default Chat Configuration
Section titled “2. Get Default Chat Configuration”response = requests.get(f"{base_url}/config-manager/api/v1/user/configs", headers=headers)
configs = response.json()default_config = [c for c in configs if c["userGroupId"] == "default"][0]
default_local_config_id = default_config["localKbConfigs"][0]["id"]allowed_llms = default_config["localKbConfigs"][0]["allowed_llms"]3. Upload Files
Section titled “3. Upload Files”import time
file_paths = ["PATH_TO_FILE_1", "PATH_TO_FILE_2"]params = {"kb": "local"}files = [("files", open(fp, "rb")) for fp in file_paths]
response = requests.post(f"{base_url}/file-manager/api/v1/files/", headers=headers, params=params, files=files)
pending_files = response.json()pending_file_ids = [f["fileId"] for f in pending_files]
# Poll until uploadedwhile True: params = {"kb": "local", "fileIds": pending_file_ids} response = requests.get(f"{base_url}/file-manager/api/v1/files/", headers=headers, params=params) files = response.json()
if all(f["status"] in ["uploaded", "duplicated"] for f in files): break if all(f["status"] in ["error", "file_too_large", "file_type_not_supported"] for f in files): raise Exception("Couldn't upload files") time.sleep(2)
uploaded_files = files4. Ingest Files
Section titled “4. Ingest Files”for uploaded_file in uploaded_files: metadata = { "file_id": uploaded_file["fileId"], "user_id": uploaded_file["userId"], "file_name": uploaded_file["fileName"], "file_uri": uploaded_file["fileUri"], } body = { "filePath": uploaded_file["fileUri"], "role": "user", "metadata": metadata, }
requests.post(f"{base_url}/ingest-master/api/v1/task", headers=headers, json=body)
# Poll until ingested while True: params = {"file_path": uploaded_file["fileUri"], "role": "user"} response = requests.post(f"{base_url}/ingest-master/api/v1/tasks/file", headers=headers, params=params) status = response.json()[-1]["status"]
if status == "ingested": break if status == "ingestion_failed": raise Exception("Couldn't ingest file")
ingested_files = uploaded_files5. Create a Chat Session
Section titled “5. Create a Chat Session”body = { "title": "Testing the SmartChat RAG API", "config": { "localConfigId": default_local_config_id, "globalContext": False, "activeFiles": [f["fileId"] for f in ingested_files], "chatModel": allowed_llms[0]["name"], },}response = requests.post(f"{base_url}/chat-session-manager/api/v1/sessions/", headers=headers, json=body)session_id = response.json()["sessionId"]6. Chat
Section titled “6. Chat”body = { "sessionId": session_id, "userPrompt": "Can you summarize the context to me?",}response = requests.post(f"{base_url}/query-pipelines/api/v1/chat", headers=headers, json=body)print(response.json())