Nat TaylorBlog, AI, Product Management & Tinkering

Test Drive: Open WebUI

Published on .

Today I’m test driving Open WebUI, “an extensible, self-hosted AI interface that adapts to your workflow, all while operating entirely offline.” My task will be to get healthy habit recommendations based on my daily physical activity. The process is:

  1. Takeout for Google Fit activity
  2. pip install open-webui
  3. run the application
  4. Connect to ollama server
  5. Attach file to chat
  6. Chat

Installation was a breeze. I chose to run without auth like this WEBUI_AUTH=False bash -c 'open-webui serve' and pretty soon I could access http://0.0.0.0:8080/. There’s A LOT of bells and whistles, but it also JustWorks™️ out of the box. In my case I had to upgrade my ancient ollama server to support Llama3 and download a model, then it was ready. Out of the box, the results were hilariously bad, but it was not the fault of Open WebUI.

I enabled the memories function and uploaded a document, and I saw this log so I can tell that it did some vector search-inating

INFO:     127.0.0.1:56217 - "POST /api/v1/memories/query HTTP/1.1" 200 OK
INFO  [open_webui.apps.retrieval.utils] query_doc:result ids=[['12e38778-2ce6-47dd-b840-c784631d7668', 'e3a04233-062e-45a3-8449-c3172a863aac', '5dda050f-71b5-4e03-9025-330eb55c5890']] documents=[['Date: 2015-03-22\nMove Minutes count: \nCalories (kcal): \nDistance (m): \nHeart Points: \nHeart Minutes: \nAverage heart rate (bpm): \nMax heart rate (bpm): \nMin heart rate (bpm): \nLow latitude (deg): \nLow longitude (deg): \nHigh latitude (deg): \nHigh longitude (deg): \nAverage speed (m/s): \nMax speed (m/s): \nMin speed (m/s): \nStep count: 314\nAverage weight (kg): \nMax weight (kg): \nMin weight (kg): \nBiking duration (ms): \nInactive duration (ms): 86400000\nWalking duration (ms): \nRunning duration (ms): \nAerobics duration (ms): \nBasketball duration (ms): \nCalisthenics duration (ms): \nCircuit training duration (ms): \nRowing machine duration (ms): \nJogging duration (ms): \nSkateboarding duration (ms): \nSkiing duration (ms): \nWindsurfing duration (ms): \nYoga duration (ms): \nHigh intensity interval training duration (ms):', 'Date: 2015-04-26\nMove Minutes count: \nCalories (kcal): \nDistance (m): 34.0\nHeart Points: \nHeart Minutes: \nAverage heart rate (bpm): \nMax heart rate (bpm): \nMin heart rate (bpm): \nLow latitude (deg): \nLow longitude (deg): \nHigh latitude (deg): \nHigh longitude (deg): \nAverage speed (m/s): \nMax speed (m/s): \nMin speed (m/s): \nStep count: 1012\nAverage weight (kg): \nMax weight (kg): \nMin weight (kg): \nBiking duration (ms): \nInactive duration (ms): 81776705\nWalking duration (ms): 198432\nRunning duration (ms): \nAerobics duration (ms): \nBasketball duration (ms): \nCalisthenics duration (ms): \nCircuit training duration (ms): \nRowing machine duration (ms): \nJogging duration (ms): \nSkateboarding duration (ms): \nSkiing duration (ms): \nWindsurfing duration (ms): \nYoga duration (ms): \nHigh intensity interval training duration (ms):', 'Date: 2015-04-11\nMove Minutes count: \nCalories (kcal): \nDistance (m): 234.0\nHeart Points: \nHeart Minutes: \nAverage heart rate (bpm): \nMax heart rate (bpm): \nMin heart rate (bpm): \nLow latitude (deg): \nLow longitude (deg): \nHigh latitude (deg): \nHigh longitude (deg): \nAverage speed (m/s): \nMax speed (m/s): \nMin speed (m/s): \nStep count: 3219\nAverage weight (kg): \nMax weight (kg): \nMin weight (kg): \nBiking duration (ms): \nInactive duration (ms): 79612625\nWalking duration (ms): 2045556\nRunning duration (ms): \nAerobics duration (ms): \nBasketball duration (ms): \nCalisthenics duration (ms): \nCircuit training duration (ms): \nRowing machine duration (ms): \nJogging duration (ms): \nSkateboarding duration (ms): \nSkiing duration (ms): \nWindsurfing duration (ms): \nYoga duration (ms): \nHigh intensity interval training duration (ms):']] metadatas=[[{'file_id': '1be5798a-e2aa-4655-a4c6-db27169dbc66', 'hash': 'dbfea8707f7d5b09c55b85cd6dd7040efb6e33c9c5c8729a69299bd115de2603', 'name': 'Daily activity metrics.csv', 'row': 118, 'source': '/Users/ntaylor/.pyenv/versions/3.11.0/lib/python3.11/site-packages/open_webui/data/uploads/1be5798a-e2aa-4655-a4c6-db27169dbc66_Daily activity metrics.csv', 'start_index': 0}, {'file_id': '1be5798a-e2aa-4655-a4c6-db27169dbc66', 'hash': 'dbfea8707f7d5b09c55b85cd6dd7040efb6e33c9c5c8729a69299bd115de2603', 'name': 'Daily activity metrics.csv', 'row': 153, 'source': '/Users/ntaylor/.pyenv/versions/3.11.0/lib/python3.11/site-packages/open_webui/data/uploads/1be5798a-e2aa-4655-a4c6-db27169dbc66_Daily activity metrics.csv', 'start_index': 0}, {'file_id': '1be5798a-e2aa-4655-a4c6-db27169dbc66', 'hash': 'dbfea8707f7d5b09c55b85cd6dd7040efb6e33c9c5c8729a69299bd115de2603', 'name': 'Daily activity metrics.csv', 'row': 138, 'source': '/Users/ntaylor/.pyenv/versions/3.11.0/lib/python3.11/site-packages/open_webui/data/uploads/1be5798a-e2aa-4655-a4c6-db27169dbc66_Daily activity metrics.csv', 'start_index': 0}]] distances=[[1.3990525007247925, 1.439004898071289, 1.44204580783844]]

Post Navigation

«
»