User Tools

Site Tools


ai-deployment-english

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ai-deployment-english [2026/09/16 13:42] – misaai-deployment-english [2026/09/16 13:57] (current) – [6. End-to-end test] misa
Line 1: Line 1:
-====== Deployment: Local AI Stack (Dental-Billing Assistant) - Part 1: Setup (EN) ======+====== Local AI Stack - Part 1: Base Setup (LM Studio + Open WebUI + ComfyUI) ======
  
-''Goal:'' build the full stack (LM Studio + Open WebUI + ComfyUI) from scratch on Nobara (Fedora-based), x86-64. +''Scope:'' install the three core components on a Nobara system and connect them. Everything runs locally, no cloud access.
-All components run locally - no cloud access.+
  
-===== 0. Prerequisites =====+''Components and their roles:''
  
-|| Requirement || Details || +|| Component || Role || Port || Where it runs || 
-|-----| +|| LM Studio || loads and serves the LLM, provides the lms CLI || 1234 || AppImage on the host || 
-|| GPU || NVIDIA, 16-19 GB VRAM (Qwen3 27B) || +|| Open WebUI || chat interface, user accounts, knowledge base (RAG) || 3000 || Podman container || 
-|| Driver || current NVIDIA driver, CUDA check: ``nvidia-smi'' || +|| ComfyUI || image generation with Z-Image || 8188 || Python venv on the host || 
-|| Podman || ``podman --version'' (Open WebUI runs as a container) || +|| Qwen3 27B (GGUF) || the LLM weights, about 16 GB || - || stored in ~/.lmstudio ||
-|| User || ``rootai``, home ``/home/rootai'' || +
-|| Ports || 1234 (LM Studio), 3000 (Open WebUI), 8188 (ComfyUI) ||+
  
-===== 1. Install LM Studio (AppImage) =====+''Important principle:'' LM Studio and the model live on the host. Open WebUI only talks to LM Studio over the network (port 1234). That means updating or replacing the LM Studio AppImage never breaks the WebUI connection - only the model files in ~/.lmstudio matter, and those are not part of the AppImage.
  
-1. ''Download the AppImage'' into ``/home/rootai/Downloads``.+===== 1. Prerequisites =====
  
-2. Make it executable: +|| Requirement || Details || Check command || 
-    ``chmod +x ~/Downloads/lm-studio-*.AppImage'' +|| GPU || NVIDIA card with 16 to 19 GB VRAM (needed for Qwen3 27B) || nvidia-smi || 
-     +|| NVIDIA driver || current driver, working || nvidia-smi shows card, driver and CUDA version || 
-3. ''Nobara/Fedora compatibility (FUSE):'' if the AppImage does not start: +|| RAM || 32 GB comfortable, 16 GB minimum || free -h || 
-    ``./lm-studio-*.AppImage --appimage-extract`` +|| Disk space || about 25 GB free for model + container + documents || df -h /home || 
-    ``./lm-studio-*/AppRun'' +|| Podman || installed, used for Open WebUI || podman --version || 
-4. ''Load the model:'' LM Studio -> Models -> download ''Qwen3 27B (GGUF)'' (~16 GB). +|| User account || rootai, home directory /home/rootai || whoami || 
-    Models and settings live in ``~/.lmstudio`` - the AppImage itself is replaceable, the data stays. +|| Ports || 1234, 3000, 8188 must be free || sudo lsof -i :1234 -i :3000 -i :8188 ||
-5. ''Link the lms CLI globally'' (symlink to the AppImage): +
-    ``sudo ln -sf /home/rootai/Downloads/lm-studio-*.AppImage /usr/local/bin/lms''+
  
-    Note: after every AppImage update with a new filename, recreate the symlink (see troubleshooting).+If nvidia-smi is not found, install the driver first.
  
-''Test:'' +===== 2. Install LM Studio (AppImage) =====
-    ``lms ls''+
  
-===== 2. Start LM Studio Server + test =====+''Why AppImage:'' it is one self-contained file. Updating later means replacing the file - your models, settings and scripts are not inside it. 
 + 
 +''Step 2.1 - Download:'' 
 + 
 +Download the latest LM Studio AppImage and store it in /home/rootai/Downloads. 
 + 
 +''Step 2.2 - Make it executable:'' 
 + 
 +    chmod +x /home/rootai/Downloads/lm-studio-*.AppImage 
 + 
 +''Step 2.3 - Run it (Nobara/Fedora FUSE workaround):'' 
 + 
 +Fedora-based systems do not enable FUSE for normal users by default, so the AppImage may fail with a FUSE or mount error. If that happens: 
 + 
 +    cd /home/rootai/Downloads 
 +    ./lm-studio-*.AppImage --appimage-extract 
 +    ./lm-studio-*/AppRun 
 + 
 +This unpacks the AppImage into a folder and starts it via AppRun. It behaves exactly like the normal AppImage. 
 + 
 +''Step 2.4 - Load the model:'' 
 + 
 +In LM Studio: Models tab, search for Qwen3 27B, download the GGUF variant (about 16 GB). Models are stored in ~/.lmstudio - this directory survives every AppImage update. 
 + 
 +''Step 2.5 - Link the lms CLI globally:'' 
 + 
 +LM Studio provides the lms command (used by start-ai.sh). Create a stable symlink so scripts do not depend on the exact AppImage filename: 
 + 
 +    sudo ln -sf /home/rootai/Downloads/lm-studio-*.AppImage /usr/local/bin/lms 
 + 
 +''Note:'' after updating LM Studio to a new version (new filename), recreate this symlink - otherwise lms breaks. This is the only update-sensitive part of the whole stack. 
 + 
 +''Step 2.6 - Verify:'' 
 + 
 +    lms ls 
 + 
 +Expected: the command runs and lists the model. 
 + 
 +===== 3. Start the LM Studio Server and test the API ===== 
 + 
 +''Step 3.1 - Start the server:'' 
 + 
 +In LM Studio: Developer tab, set port 1234, click Start Server. (The lms load command below also starts the server automatically.) 
 + 
 +''Step 3.2 - Load the model:''
  
-    # start the server (LM Studio -> Developer -> Start Server, port 1234) 
     lms load qwen/qwen3.8-27b     lms load qwen/qwen3.8-27b
  
-    # API test+Wait until the load finishes (about 16 GB into VRAM, takes a few seconds). 
 + 
 +''Step 3.3 - Test the OpenAI-compatible API:'' 
     curl -s http://127.0.0.1:1234/v1/models     curl -s http://127.0.0.1:1234/v1/models
  
-''Expected:'' JSON list containing ``qwen3.8-27b``.+Expected: JSON output that contains qwen3.8-27b. If this works, the LLM side is done.
  
-===== 3. Open WebUI (Podman container) =====+===== 4. Open WebUI (Podman container) ===== 
 + 
 +''Step 4.1 - Pull the image:''
  
-    # pull the image 
     podman pull ghcr.io/open-webui/open-webui     podman pull ghcr.io/open-webui/open-webui
  
-    # start the container (name: open-webui, port 3000, own data volume)+''Step 4.2 - Create and start the container:'' 
     podman run -d --name open-webui -p 3000:8080 -v open-webui-data:/app/backend/data --restart unless-stopped ghcr.io/open-webui/open-webui     podman run -d --name open-webui -p 3000:8080 -v open-webui-data:/app/backend/data --restart unless-stopped ghcr.io/open-webui/open-webui
  
-''Setup in the browser'' (``http://<server>:3000``):+''Explanation of the flags:''
  
-1. ''LLM connection:'' Settings -> Connections -> OpenAI API +* --name open-webui - fixed name, used by start-ai.sh (podman restart open-webui) 
-    * Base URL: ``http://host.docker.internal:1234/v1'' +* -p 3000:8080 - host port 3000 mapped to container port 8080 
-    * API key: any value (LM Studio does not require one) +* -v open-webui-data:/app/backend/data - all settings, users and knowledge base live in this volume and survive container updates 
-    * Test: model ``qwen3.8-27b'' must appear +* --restart unless-stopped - restart automatically after a reboot 
-2. ''Embedding model:'' Settings -> Models -> set ``nomic-embed-text-v1.5'' as embedding model + 
-3. ''Create user:'' ``artz'' with read access to the knowledge base +''Step 4.3 - Verify it is running:''
-4. ''Important:'' disable the built-in tool ''Ask User'' - otherwise the model asks follow-up questions+
  
-''Test:'' 
     podman ps | grep open-webui     podman ps | grep open-webui
-    curl -s http://127.0.0.1:3000+    curl -sI http://127.0.0.1:3000 | head -1
  
-===== 4. ComfyUI (Z-Image) =====+Expected: an HTTP 200 or 302 line from curl. 
 + 
 +''Step 4.4 - Configure in the browser:'' 
 + 
 +Open http://<server-ip>:3000 and log in as admin, then: 
 + 
 +# Settings, Connections, add OpenAI API 
 +    * Base URL: http://host.docker.internal:1234/v1 
 +    * API key: any non-empty value (LM Studio ignores it) 
 +    * Test: qwen3.8-27b must appear in the model list 
 +    * Why host.docker.internal: from inside the container, localhost points to the container itself, not to the host 
 + 
 +# Settings, Models: set nomic-embed-text-v1.5 as the embedding model (needed for RAG, see Part 2) 
 + 
 + 
 +===== 5. ComfyUI (Z-Image) ===== 
 + 
 +''Step 5.1 - Start in the background with logging:''
  
-''Start (background, log to ~/comfyui.log):'' 
     nohup ~/comfyui-env/bin/python ~/comfyui/main.py --listen --port 8188 >> ~/comfyui.log 2>&1 &     nohup ~/comfyui-env/bin/python ~/comfyui/main.py --listen --port 8188 >> ~/comfyui.log 2>&1 &
  
-''Test:''+''Step 5.2 - Verify:'' 
     curl -s http://127.0.0.1:8188/system_stats     curl -s http://127.0.0.1:8188/system_stats
  
-''Connect in Open WebUI:'' Settings -> Connections -> ComfyUI +Expected: JSON with system statistics. For problems:
-    * URL: ``http://localhost:8188'' +
-    * Model: ''Z-Image'' +
-Log on problems: ``tail -f ~/comfyui.log''+
  
-===== 5. Auto-start on boot =====+    tail -f ~/comfyui.log
  
-Script: ``/home/rootai/start-ai.sh''+''Step 5.3 - Connect in Open WebUI:'' 
 + 
 +Settings, Connections, add ComfyUI: 
 + 
 +* URL: http://host.docker.internal:8188 (same reason as above - Open WebUI runs in a container) 
 +* Model: Z-Image 
 + 
 +===== 6. Auto-start on boot ===== 
 + 
 +''File:'' /home/rootai/start-ai.sh (this is the existing script, unchanged)
  
     #!/bin/bash     #!/bin/bash
-    # wait for system services and the LM Studio server+    # wait for system services and the LM Studio server to come up
     sleep 15     sleep 15
-    # automatically load the Qwen model into LM Studio+ 
 +    # load the Qwen model into LM Studio (also starts the server)
     lms load qwen/qwen3.8-27b     lms load qwen/qwen3.8-27b
-    # give it a few seconds to fully initialize+ 
 +    # give the model a few seconds to fully initialize
     sleep 10     sleep 10
-    # restart Open WebUI+ 
 +    # restart Open WebUI so it reconnects to the LM Studio API
     podman restart open-webui     podman restart open-webui
  
-''Start order matters:'' LM Studio -> load model -> Open WebUI.+''Make it executable:''
  
-===== 6. Final smoke test =====+    chmod +x /home/rootai/start-ai.sh 
 + 
 +''Order matters:'' LM Studio first, then the model, then Open WebUI. 
 + 
 +''After an LM Studio update:'' only step 2.5 (recreate the lms symlink) is needed. The script, the container and the WebUI configuration are untouched. 
 + 
 +===== 7. Final smoke test ===== 
 + 
 +Run all three checks:
  
     # 1. LM Studio API     # 1. LM Studio API
Line 106: Line 180:
     curl -s http://127.0.0.1:8188/system_stats | head -c 100     curl -s http://127.0.0.1:8188/system_stats | head -c 100
  
-1. Browser -> ``http://<server>:3000'' -> login ``artz'' +Then in the browser:
-2. Ask a free question to ``qwen3.8-27b'' -> answer without RAG citations (RAG = Part 2)+
  
-===== 7. Troubleshooting =====+# Open http://<server-ip>:3000, log in as artz 
 +# Start a chat with qwen3.8-27b, ask a simple question without a knowledge base 
 +# Expected: a normal answer, no citations (citations come with RAG, see Part 2)
  
-|| Symptom || Cause || Fix || +===== 8. Troubleshooting =====
-|-----| +
-|| AppImage does not start || FUSE missing (Fedora/Nobara) || use ``--appimage-extract``, then run ``AppRun'' || +
-|| lms: command not found || broken symlink, old filename || ``sudo ln -sf /path/to/new/AppImage /usr/local/bin/lms'' || +
-|| WebUI cannot find the model || wrong base URL || use ``host.docker.internal:1234/v1'', not ``localhost'' || +
-|| Container will not restart || wrong container name || check real name with ``podman ps -a'' || +
-|| Port already in use || stale process || ``sudo lsof -i :1234'' / ``:3000'' / ``:8188'' ||+
  
-====== Deployment: Local AI Stack (Dental-Billing Assistant) - Part 2: RAG Knowledge Base (EN) ======+|| Symptom || Likely cause || Fix || 
 +|| AppImage will not start || FUSE not enabled for the user (Fedora default) || use --appimage-extract and AppRun (step 2.3) || 
 +|| lms: command not found || symlink points to an old AppImage filename || redo step 2.5 with the new path || 
 +|| WebUI cannot find the model || wrong base URL from the container || use http://host.docker.internal:1234/v1, not localhost || 
 +|| podman restart fails || wrong container name || check the real name with podman ps -a || 
 +|| Port already in use || an old process still holds the port || sudo lsof -i :1234 (same for 3000 and 8188), kill the process || 
 +|| Slow first answer after boot || model still loading || wait for the full load, watch the LM Studio status bar ||
  
-''Goal:'' add the 5 billing documents as the knowledge base ''Zahnarztabrechnung'' in Open WebUI and create the model ''Zahn-Abrechnungs-Assistent''. 
  
-===== 1. Set the embedding model (prerequisite) ===== 
  
-RAG does not work without an embedding model.+====== Local AI Stack - Part 2: RAG Knowledge Base (Zahnarztabrechnung) ======
  
-1. Open WebUI -> Settings -> Models +''Scope:'' load the five billing documents into the knowledge base Zahnarztabrechnung, create the model Zahn-Abrechnungs-Assistent, and verify that answers come from the documents with correct sources.
-2. ''Embedding model:'' ``nomic-embed-text-v1.5'' (built-in, no Ollama/LM Studio needed) +
-3. ''Verify:'' the models list shows the embedding model+
  
-''Fallback'' if German retrieval is poor: install ``bge-m3'' via Ollama and set it as the embedding model.+''Prerequisite:'' Part 1 is complete - LM Studio serves qwen3.8-27b on port 1234 and Open WebUI is reachable on port 3000. 
 + 
 +===== 1. Set the embedding model (must be first) ===== 
 + 
 +RAG works in two steps: 
 + 
 +# The document text is split into chunks and converted into vectors (embeddings) by the embedding model. 
 +# At chat time, the question is embedded the same way and the most similar chunks are retrieved and shown as citations. 
 + 
 +Without an embedding model, step one cannot happen and the knowledge base stays empty. 
 + 
 +# Open WebUI, Settings, Models 
 +# Embedding model: set nomic-embed-text-v1.5 (built-in, no Ollama or extra LM Studio model needed) 
 +# Verify: the model list shows the embedding model as active 
 + 
 +''Fallback:'' if German retrieval quality is poor, install bge-m3 via Ollama and switch the embedding model to it.
  
 ===== 2. Prepare the PDFs ===== ===== 2. Prepare the PDFs =====
  
 || # || Document || Source || Note || || # || Document || Source || Note ||
-|-----| +|| 1 || SGB V (full text) || gesetze-im-internet.de || 577 pages, includes unrelated areas (pharmacy, hospital) - see step 2.1 ||
-|| 1 || SGB V (full text) || gesetze-im-internet.de || 577 pages, lots of unrelated material (pharmacy, hospital) - trim to Part 3 (§§ 55-66) if citations show noise ||+
 || 2 || KZBV FZ-Kompendium 2025 || KZBV || statutory co-payments (Festzuschüsse) || || 2 || KZBV FZ-Kompendium 2025 || KZBV || statutory co-payments (Festzuschüsse) ||
 || 3 || GOÄ/GOZ || pkv.de || private fee schedules || || 3 || GOÄ/GOZ || pkv.de || private fee schedules ||
-|| 4 || BEL-Preisliste 2025 || kvzbw.de || - || +|| 4 || BEL-Preisliste 2025 || kvzbw.de || billing positions for dental labs || 
-|| 5 || BEB-Preisliste 2024 || itzgmbh.de || image-based (scanned) - OCR required, see section 3 ||+|| 5 || BEB-Preisliste 2024 || itzgmbh.de || image-based (scanned) - OCR required, see step 3 ||
  
-''Pre-check for each PDF:'' +''Pre-check for every PDF (30 seconds each):''
-    * text can be selected/copied -> OK +
-    * images only -> OCR problem (BEB)+
  
-===== 3. Enable OCR for image-based PDFs (BEB) =====+# Open it in a browser or PDF viewer 
 +# Try to select and copy some text 
 +# If text copies - OK 
 +# If the page shows only an image - OCR problem (this is the BEB file)
  
-''Symptom without OCR:'' BEB citations missing or nonsense, other PDFs work fine.+''Step 2.1 - Trim SGB V (optional, recommended):'' 
 + 
 +The full SGB V is 577 pages and pulls in pharmacy and hospital content that can show up as citations for dental questions. If you see such noise in the answer sources, replace the document with a trimmed version containing only Part 3, sections 55 to 66 (the dental-related chapters), and re-index (delete the old document first). 
 + 
 +===== 3. Enable OCR for the image-based BEB file ===== 
 + 
 +''Symptom without OCR:'' BEB citations are missing or wrong, while all other documents work fine. Reason: the BEB PDF pages are scanned images, so text extraction returns nothing.
  
 ''Fix:'' ''Fix:''
-1. Open WebUI -> Admin -> Settings -> Documents + 
-2. turn ''ON'' the option ''PDF Extract Images (OCR)'' +# Open WebUI, Admin, Settings, Documents 
-3. ''re-upload / re-index the BEB file'' (delete the old document first, otherwise the stale empty index stays)+# Turn ON the option PDF Extract Images (OCR) 
 +# Delete the old BEB entry in the knowledge base (important - otherwise the stale empty index stays) 
 +# Upload the BEB PDF again 
 +# Wait until the status shows processed 
 + 
 +OCR is slower than normal extraction - a larger PDF can take several minutes. That is expected.
  
 ===== 4. Create the knowledge base ===== ===== 4. Create the knowledge base =====
  
-1. Open WebUI -> Knowledge -> Create, ''Name:'' ``Zahnarztabrechnung'' +# Open WebUI, Knowledge, create a new knowledge base 
-2. ''Add documents:'' upload all 5 PDFs +# Name: Zahnarztabrechnung 
-3. wait until every document shows status ''processed'' (no errors) +# Add documents: upload all five PDFs (BEB after the OCR step) 
-4. ''Access:'' user ``artz'' -> Read access on the knowledge base+# Wait until every document shows the status processed, no errors 
 +# Set permissions: user artz, access Read
  
-''Knowledge-base test (no model prompt yet):'' +''Quick test (before the model):'' 
-    * new chat session, attach the ''Zahnarztabrechnung'' KB + 
-    * test question: "What statutory co-payment (Festzuschuss) applies to a crown?" +# New chat session, attach the knowledge base Zahnarztabrechnung 
-    * expected: answer with source citations from the FZ-Kompendium+# Ask: What statutory co-payment applies to a crown? 
 +# Expected: an answer with visible source citations from the FZ-Kompendium 2025
  
 ===== 5. Create the Zahn-Abrechnungs-Assistent model ===== ===== 5. Create the Zahn-Abrechnungs-Assistent model =====
  
-1. Open WebUI -> Settings -> Models -> Create +# Open WebUI, Settings, Models, create 
-2. ''Name:'' ``Zahn-Abrechnungs-Assistent'' +# Name: Zahn-Abrechnungs-Assistent 
-3. ''Base model:'' ``qwen3.8-27b'' (LM Studio) +# Base model: qwen3.8-27b (from LM Studio) 
-4. ''System prompt:''+# Attach the knowledge base Zahnarztabrechnung 
 +# System prompt (German, direct style):
  
-    You are an expert in German dental and dental-technician billing +    Du bist ein Experte fuer die deutsche Zahnarzt- und Zahntechnikerabrechnung 
-    (GOÄ/GOZ, FZ-Kompendium, BEL/BEB, SGB V). Answer strictly on the basis +    (GOA/GOZ, KZBV FZ-Kompendium, BEL und BEB, SGB V).
-    of the documents provided. Give concrete position numbers, prices, the +
-    edition (e.g. BEB 2024, BEL 2025) and the source. If a topic is not +
-    covered in the documents, say so clearly. This is not legal advice.+
  
-5. ''Important:'' disable the built-in tool ''Ask User'' for this model - otherwise it asks follow-up questions ("Which tooth number?") instead of answering from the documents+    Antworte direkt auf Basis der bereitgestellten Dokumente. 
 +    Nenne immer: 
 +    - die konkrete Positionsnummer 
 +    - den Preis 
 +    - die Edition der Preisliste (z. B. BEB 2024, BEL 2025) 
 +    - das Quelldokument 
 + 
 +    Stelle keine Rueckfragen. Wenn Informationen fehlen, sage das klar, 
 +    statt zu raten. 
 +    Dieses Tool erteilt keine Rechtsberatung. 
 + 
 +# Disable the built-in Ask User tool for this model - this is the most common cause of the model asking "which tooth number?" instead of answering
  
 ===== 6. End-to-end test ===== ===== 6. End-to-end test =====
  
-1. Browser -> ``http://<server>:3000'' -> login ``artz'' +# Browser: http://<server-ip>:3000, log in as artz 
-2. Select model ''Zahn-Abrechnungs-Assistent'' +# Select the model Zahn-Abrechnungs-Assistent 
-3. Sample test questions (German): +# Ask the following questions one by one: 
-    * "Which GOZ position applies for a composite filling on an incisor?" -> expect GOZ 2010 with source + 
-    * "What does a full-ceramic crown cost per BEB?" -> expect BEB position + price + edition 2024 +|| Test question || Expected answer elements || 
-    * "What is the statutory co-payment for inlays?" -> expect FZ-Kompendium 2025 +|| What GOZ position applies for a composite filling on an incisor? || GOZ 2010, price, source || 
-4. ''Checklist per answer:'' +|| What does a full ceramic crown cost per BEB? || BEB position number, price, edition 2024 || 
-    * source citations visible (document + section) +|| What is the statutory co-payment for an inlay? || FZ-Kompendium 2025, amount, source || 
-    * concrete position number + price +|| What BEL position covers a partial denture? || BEL position, price, edition 2025 || 
-    * edition stated (BEB 2024 / BEL 2025 / FZ 2025) + 
-    * for missing info: a clear statement instead of a hallucination+''Checklist for every answer:'' 
 + 
 +* Source citation visible (document name and section) 
 +* Concrete position number and price 
 +* Edition stated (BEB 2024 / BEL 2025 / FZ 2025) 
 +* For missing information: a clear statement instead of a made-up answer
  
 ===== 7. Troubleshooting ===== ===== 7. Troubleshooting =====
  
 || Symptom || Cause || Fix || || Symptom || Cause || Fix ||
-|-----| +|| Answer without sources, content seems made up || RAG not connected to the model || attach the knowledge base to the model and to the chat session || 
-|| Answer without sources, made up || RAG not connected || check model prompt, attach the KB in chat || +|| BEB gives no sensible citations || PDF is image-based, no text layer || enable OCR (step 3), delete and re-upload the document || 
-|| BEB gives no sensible citations || PDF is image-based || enable OCR (section 3), re-index the document || +|| SGB V citations show pharmacy or hospital noise || 577-page full text is too broad || trim to sections 55 to 66 (step 2.1), replace the document, re-index || 
-|| SGB V citations show pharmacy/hospital noise || 577-page full text too broad || trim SGB V to §§ 55-66, replace the document, re-index || +|| Model asks questions instead of answering || built-in Ask User tool active || disable it in the model settings (step 5) || 
-|| Slow answers on large PDFs || index size || normal, cache warms up; optionally check chunk size in Settings || +|| artz cannot see the knowledge base || no permission set || Knowledge, select the base, set Read access for artz || 
-|| Model asks instead of answering || Ask User tool active || disable it in the model settings ||+|| Slow first answer on a large document || indexing and embedding in progress || wait until the document shows processed, then retry || 
 +|| After a re-index, old citations still appear || stale index entry || delete the document from the knowledge base completely before re-uploading ||
ai-deployment-english.1789566170.txt.gz · Last modified: by misa