khoj 1.27.2.dev13__py3-none-any.whl → 1.27.2.dev29__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. khoj/database/adapters/__init__.py +5 -0
  2. khoj/interface/compiled/404/index.html +1 -1
  3. khoj/interface/compiled/_next/static/chunks/1603-5138bb7c8035d9a6.js +1 -0
  4. khoj/interface/compiled/_next/static/chunks/{webpack-70a1cd2ad6a1952c.js → webpack-2b720658ccc746f2.js} +1 -1
  5. khoj/interface/compiled/agents/index.html +1 -1
  6. khoj/interface/compiled/agents/index.txt +2 -2
  7. khoj/interface/compiled/automations/index.html +1 -1
  8. khoj/interface/compiled/automations/index.txt +2 -2
  9. khoj/interface/compiled/chat/index.html +1 -1
  10. khoj/interface/compiled/chat/index.txt +2 -2
  11. khoj/interface/compiled/factchecker/index.html +1 -1
  12. khoj/interface/compiled/factchecker/index.txt +2 -2
  13. khoj/interface/compiled/index.html +1 -1
  14. khoj/interface/compiled/index.txt +2 -2
  15. khoj/interface/compiled/search/index.html +1 -1
  16. khoj/interface/compiled/search/index.txt +2 -2
  17. khoj/interface/compiled/settings/index.html +1 -1
  18. khoj/interface/compiled/settings/index.txt +2 -2
  19. khoj/interface/compiled/share/chat/index.html +1 -1
  20. khoj/interface/compiled/share/chat/index.txt +2 -2
  21. khoj/processor/conversation/anthropic/anthropic_chat.py +6 -1
  22. khoj/processor/conversation/anthropic/utils.py +25 -5
  23. khoj/processor/conversation/google/gemini_chat.py +8 -2
  24. khoj/processor/conversation/google/utils.py +34 -10
  25. khoj/processor/conversation/offline/chat_model.py +31 -7
  26. khoj/processor/conversation/openai/gpt.py +14 -2
  27. khoj/processor/conversation/openai/utils.py +43 -9
  28. khoj/processor/conversation/prompts.py +0 -16
  29. khoj/processor/conversation/utils.py +168 -1
  30. khoj/processor/image/generate.py +2 -0
  31. khoj/processor/tools/online_search.py +14 -5
  32. khoj/routers/api.py +5 -0
  33. khoj/routers/api_chat.py +23 -2
  34. khoj/routers/helpers.py +65 -13
  35. khoj/utils/helpers.py +1 -1
  36. {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/METADATA +2 -1
  37. {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/RECORD +42 -42
  38. khoj/interface/compiled/_next/static/chunks/1603-b9d95833e0e025e8.js +0 -1
  39. /khoj/interface/compiled/_next/static/{rYy0jmrIYv76V-iyorQim → atzIseFarmC7TIwq2BgHC}/_buildManifest.js +0 -0
  40. /khoj/interface/compiled/_next/static/{rYy0jmrIYv76V-iyorQim → atzIseFarmC7TIwq2BgHC}/_ssgManifest.js +0 -0
  41. {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/WHEEL +0 -0
  42. {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/entry_points.txt +0 -0
  43. {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/licenses/LICENSE +0 -0
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/0e790e04fd40ad16-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/467a524c75e7d7c0.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/76d55eb435962b19.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/3cf13271869a4aeb.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/ddcc0cf73e062476.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/2272c73fc7a3b571.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-70a1cd2ad6a1952c.js"/><script src="/_next/static/chunks/fd9d1056-2b978342deb60015.js" async=""></script><script src="/_next/static/chunks/7023-a5bf5744d19b3bd3.js" async=""></script><script src="/_next/static/chunks/main-app-6d6ee3495efe03d4.js" async=""></script><script src="/_next/static/chunks/d3ac728e-a9e3522eef9b6b28.js" async=""></script><script src="/_next/static/chunks/9001-3b27af6d5f21df44.js" async=""></script><script src="/_next/static/chunks/3062-71ed4b46ac2bb87c.js" async=""></script><script src="/_next/static/chunks/8840-b8d7b9f0923c6651.js" async=""></script><script src="/_next/static/chunks/7113-f2e114d7034a0835.js" async=""></script><script src="/_next/static/chunks/3110-ef2cacd1b8d79ad8.js" async=""></script><script src="/_next/static/chunks/394-6bcb8c429f168f21.js" async=""></script><script src="/_next/static/chunks/1603-b9d95833e0e025e8.js" async=""></script><script src="/_next/static/chunks/9417-2ca87207387fc790.js" async=""></script><script src="/_next/static/chunks/3423-0b533af8bf6ac218.js" async=""></script><script src="/_next/static/chunks/9479-ff7d8c4dae2014d1.js" async=""></script><script src="/_next/static/chunks/2697-61fcba89fd87eab4.js" async=""></script><script src="/_next/static/chunks/app/share/chat/page-eb9e282691858f2e.js" async=""></script><meta http-equiv="Content-Security-Policy" content="default-src &#x27;self&#x27; https://assets.khoj.dev; media-src * blob:; script-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; &#x27;unsafe-eval&#x27;; connect-src &#x27;self&#x27; blob: https://ipapi.co/json ws://localhost:42110; style-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; https://fonts.googleapis.com; img-src &#x27;self&#x27; data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src &#x27;self&#x27; https://assets.khoj.dev https://fonts.gstatic.com; child-src &#x27;none&#x27;; object-src &#x27;none&#x27;;"/><meta http-equiv="Content-Security-Policy" content="default-src &#x27;self&#x27; https://assets.khoj.dev; script-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; &#x27;unsafe-eval&#x27;; connect-src &#x27;self&#x27; blob: https://ipapi.co/json ws://localhost:42110; style-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; https://fonts.googleapis.com; img-src &#x27;self&#x27; data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src &#x27;self&#x27; https://assets.khoj.dev https://fonts.gstatic.com; child-src &#x27;none&#x27;; object-src &#x27;none&#x27;;"/><title>Khoj AI - Chat</title><meta name="description" content="Use this page to view a chat with Khoj AI."/><link rel="manifest" href="/static/khoj.webmanifest" crossorigin="use-credentials"/><meta property="og:title" content="Khoj AI - Home"/><meta property="og:description" content="Your Second Brain."/><meta property="og:url" content="https://app.khoj.dev/"/><meta property="og:site_name" content="Khoj AI"/><meta property="og:image" content="https://assets.khoj.dev/khoj_lantern_256x256.png"/><meta property="og:image:width" content="256"/><meta property="og:image:height" content="256"/><meta property="og:image" content="https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Khoj AI - Home"/><meta name="twitter:description" content="Your Second Brain."/><meta name="twitter:image" content="https://assets.khoj.dev/khoj_lantern_256x256.png"/><meta name="twitter:image:width" content="256"/><meta name="twitter:image:height" content="256"/><meta name="twitter:image" content="https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png"/><meta name="twitter:image:width" content="1200"/><meta name="twitter:image:height" content="630"/><link rel="icon" href="/static/assets/icons/khoj_lantern.ico"/><link rel="apple-touch-icon" href="/static/assets/icons/khoj_lantern_256x256.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js" noModule=""></script></head><body class="__className_e594dd"><html lang="en"><body class="__className_e594dd"><div class="bg-background opacity-50 flex items-center justify-center h-screen"><div>Loading<!-- --> <span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="inline animate-spin h-5 w-5"><path d="M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"></path></svg></span></div></div><script>window.EXCALIDRAW_ASSET_PATH = 'https://assets.khoj.dev/@excalidraw/excalidraw/dist/';</script><script src="/_next/static/chunks/webpack-70a1cd2ad6a1952c.js" async=""></script></body></html><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/0e790e04fd40ad16-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/467a524c75e7d7c0.css\",\"style\"]\n3:HL[\"/_next/static/css/76d55eb435962b19.css\",\"style\"]\n4:HL[\"/_next/static/css/3cf13271869a4aeb.css\",\"style\"]\n5:HL[\"/_next/static/css/ddcc0cf73e062476.css\",\"style\"]\n6:HL[\"/_next/static/css/2272c73fc7a3b571.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"7:I[95751,[],\"\"]\n9:I[66513,[],\"ClientPageRoot\"]\na:I[5506,[\"3954\",\"static/chunks/d3ac728e-a9e3522eef9b6b28.js\",\"9001\",\"static/chunks/9001-3b27af6d5f21df44.js\",\"3062\",\"static/chunks/3062-71ed4b46ac2bb87c.js\",\"8840\",\"static/chunks/8840-b8d7b9f0923c6651.js\",\"7113\",\"static/chunks/7113-f2e114d7034a0835.js\",\"3110\",\"static/chunks/3110-ef2cacd1b8d79ad8.js\",\"394\",\"static/chunks/394-6bcb8c429f168f21.js\",\"1603\",\"static/chunks/1603-b9d95833e0e025e8.js\",\"9417\",\"static/chunks/9417-2ca87207387fc790.js\",\"3423\",\"static/chunks/3423-0b533af8bf6ac218.js\",\"9479\",\"static/chunks/9479-ff7d8c4dae2014d1.js\",\"2697\",\"static/chunks/2697-61fcba89fd87eab4.js\",\"3111\",\"static/chunks/app/share/chat/page-eb9e282691858f2e.js\"],\"default\",1]\nb:I[39275,[],\"\"]\nc:I[61343,[],\"\"]\ne:I[76130,[],\"\"]\nf:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L7\",null,{\"buildId\":\"rYy0jmrIYv76V-iyorQim\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"share\",\"chat\",\"\"],\"initialTree\":[\"\",{\"children\":[\"share\",{\"children\":[\"chat\",{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"share\",{\"children\":[\"chat\",{\"children\":[\"__PAGE__\",{},[[\"$L8\",[\"$\",\"$L9\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$a\"}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/3cf13271869a4aeb.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ddcc0cf73e062476.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/2272c73fc7a3b571.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]]],null],null]},[[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"meta\",null,{\"httpEquiv\":\"Content-Security-Policy\",\"content\":\"default-src 'self' https://assets.khoj.dev; script-src 'self' https://assets.khoj.dev 'unsafe-inline' 'unsafe-eval'; connect-src 'self' blob: https://ipapi.co/json ws://localhost:42110; style-src 'self' https://assets.khoj.dev 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src 'self' https://assets.khoj.dev https://fonts.gstatic.com; child-src 'none'; object-src 'none';\"}],[\"$\",\"body\",null,{\"className\":\"__className_e594dd\",\"children\":[[\"$\",\"$Lb\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"share\",\"children\",\"chat\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lc\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"window.EXCALIDRAW_ASSET_PATH = 'https://assets.khoj.dev/@excalidraw/excalidraw/dist/';\"}}]]}]]}]],null],null]},[null,[\"$\",\"$Lb\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"share\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lc\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/467a524c75e7d7c0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/76d55eb435962b19.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"meta\",null,{\"httpEquiv\":\"Content-Security-Policy\",\"content\":\"default-src 'self' https://assets.khoj.dev; media-src * blob:; script-src 'self' https://assets.khoj.dev 'unsafe-inline' 'unsafe-eval'; connect-src 'self' blob: https://ipapi.co/json ws://localhost:42110; style-src 'self' https://assets.khoj.dev 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src 'self' https://assets.khoj.dev https://fonts.gstatic.com; child-src 'none'; object-src 'none';\"}],[\"$\",\"body\",null,{\"className\":\"__className_e594dd\",\"children\":[\"$\",\"$Lb\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lc\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$Ld\"],\"globalErrorComponent\":\"$e\",\"missingSlots\":\"$Wf\"}]\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Khoj AI - Chat\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Use this page to view a chat with Khoj AI.\"}],[\"$\",\"link\",\"4\",{\"rel\":\"manifest\",\"href\":\"/static/khoj.webmanifest\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"Khoj AI - Home\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"Your Second Brain.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://app.khoj.dev/\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:site_name\",\"content\":\"Khoj AI\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image:width\",\"content\":\"256\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:image:height\",\"content\":\"256\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:title\",\"content\":\"Khoj AI - Home\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:description\",\"content\":\"Your Second Brain.\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:image:width\",\"content\":\"256\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:image:height\",\"content\":\"256\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"25\",{\"rel\":\"icon\",\"href\":\"/static/assets/icons/khoj_lantern.ico\"}],[\"$\",\"link\",\"26\",{\"rel\":\"apple-touch-icon\",\"href\":\"/static/assets/icons/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"27\",{\"name\":\"next-size-adjust\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/0e790e04fd40ad16-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/467a524c75e7d7c0.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/76d55eb435962b19.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/3cf13271869a4aeb.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/ddcc0cf73e062476.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/2272c73fc7a3b571.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2b720658ccc746f2.js"/><script src="/_next/static/chunks/fd9d1056-2b978342deb60015.js" async=""></script><script src="/_next/static/chunks/7023-a5bf5744d19b3bd3.js" async=""></script><script src="/_next/static/chunks/main-app-6d6ee3495efe03d4.js" async=""></script><script src="/_next/static/chunks/d3ac728e-a9e3522eef9b6b28.js" async=""></script><script src="/_next/static/chunks/9001-3b27af6d5f21df44.js" async=""></script><script src="/_next/static/chunks/3062-71ed4b46ac2bb87c.js" async=""></script><script src="/_next/static/chunks/8840-b8d7b9f0923c6651.js" async=""></script><script src="/_next/static/chunks/7113-f2e114d7034a0835.js" async=""></script><script src="/_next/static/chunks/3110-ef2cacd1b8d79ad8.js" async=""></script><script src="/_next/static/chunks/394-6bcb8c429f168f21.js" async=""></script><script src="/_next/static/chunks/1603-5138bb7c8035d9a6.js" async=""></script><script src="/_next/static/chunks/9417-2ca87207387fc790.js" async=""></script><script src="/_next/static/chunks/3423-0b533af8bf6ac218.js" async=""></script><script src="/_next/static/chunks/9479-ff7d8c4dae2014d1.js" async=""></script><script src="/_next/static/chunks/2697-61fcba89fd87eab4.js" async=""></script><script src="/_next/static/chunks/app/share/chat/page-eb9e282691858f2e.js" async=""></script><meta http-equiv="Content-Security-Policy" content="default-src &#x27;self&#x27; https://assets.khoj.dev; media-src * blob:; script-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; &#x27;unsafe-eval&#x27;; connect-src &#x27;self&#x27; blob: https://ipapi.co/json ws://localhost:42110; style-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; https://fonts.googleapis.com; img-src &#x27;self&#x27; data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src &#x27;self&#x27; https://assets.khoj.dev https://fonts.gstatic.com; child-src &#x27;none&#x27;; object-src &#x27;none&#x27;;"/><meta http-equiv="Content-Security-Policy" content="default-src &#x27;self&#x27; https://assets.khoj.dev; script-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; &#x27;unsafe-eval&#x27;; connect-src &#x27;self&#x27; blob: https://ipapi.co/json ws://localhost:42110; style-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; https://fonts.googleapis.com; img-src &#x27;self&#x27; data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src &#x27;self&#x27; https://assets.khoj.dev https://fonts.gstatic.com; child-src &#x27;none&#x27;; object-src &#x27;none&#x27;;"/><title>Khoj AI - Chat</title><meta name="description" content="Use this page to view a chat with Khoj AI."/><link rel="manifest" href="/static/khoj.webmanifest" crossorigin="use-credentials"/><meta property="og:title" content="Khoj AI - Home"/><meta property="og:description" content="Your Second Brain."/><meta property="og:url" content="https://app.khoj.dev/"/><meta property="og:site_name" content="Khoj AI"/><meta property="og:image" content="https://assets.khoj.dev/khoj_lantern_256x256.png"/><meta property="og:image:width" content="256"/><meta property="og:image:height" content="256"/><meta property="og:image" content="https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Khoj AI - Home"/><meta name="twitter:description" content="Your Second Brain."/><meta name="twitter:image" content="https://assets.khoj.dev/khoj_lantern_256x256.png"/><meta name="twitter:image:width" content="256"/><meta name="twitter:image:height" content="256"/><meta name="twitter:image" content="https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png"/><meta name="twitter:image:width" content="1200"/><meta name="twitter:image:height" content="630"/><link rel="icon" href="/static/assets/icons/khoj_lantern.ico"/><link rel="apple-touch-icon" href="/static/assets/icons/khoj_lantern_256x256.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js" noModule=""></script></head><body class="__className_e594dd"><html lang="en"><body class="__className_e594dd"><div class="bg-background opacity-50 flex items-center justify-center h-screen"><div>Loading<!-- --> <span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="inline animate-spin h-5 w-5"><path d="M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"></path></svg></span></div></div><script>window.EXCALIDRAW_ASSET_PATH = 'https://assets.khoj.dev/@excalidraw/excalidraw/dist/';</script><script src="/_next/static/chunks/webpack-2b720658ccc746f2.js" async=""></script></body></html><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/0e790e04fd40ad16-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/467a524c75e7d7c0.css\",\"style\"]\n3:HL[\"/_next/static/css/76d55eb435962b19.css\",\"style\"]\n4:HL[\"/_next/static/css/3cf13271869a4aeb.css\",\"style\"]\n5:HL[\"/_next/static/css/ddcc0cf73e062476.css\",\"style\"]\n6:HL[\"/_next/static/css/2272c73fc7a3b571.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"7:I[95751,[],\"\"]\n9:I[66513,[],\"ClientPageRoot\"]\na:I[5506,[\"3954\",\"static/chunks/d3ac728e-a9e3522eef9b6b28.js\",\"9001\",\"static/chunks/9001-3b27af6d5f21df44.js\",\"3062\",\"static/chunks/3062-71ed4b46ac2bb87c.js\",\"8840\",\"static/chunks/8840-b8d7b9f0923c6651.js\",\"7113\",\"static/chunks/7113-f2e114d7034a0835.js\",\"3110\",\"static/chunks/3110-ef2cacd1b8d79ad8.js\",\"394\",\"static/chunks/394-6bcb8c429f168f21.js\",\"1603\",\"static/chunks/1603-5138bb7c8035d9a6.js\",\"9417\",\"static/chunks/9417-2ca87207387fc790.js\",\"3423\",\"static/chunks/3423-0b533af8bf6ac218.js\",\"9479\",\"static/chunks/9479-ff7d8c4dae2014d1.js\",\"2697\",\"static/chunks/2697-61fcba89fd87eab4.js\",\"3111\",\"static/chunks/app/share/chat/page-eb9e282691858f2e.js\"],\"default\",1]\nb:I[39275,[],\"\"]\nc:I[61343,[],\"\"]\ne:I[76130,[],\"\"]\nf:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L7\",null,{\"buildId\":\"atzIseFarmC7TIwq2BgHC\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"share\",\"chat\",\"\"],\"initialTree\":[\"\",{\"children\":[\"share\",{\"children\":[\"chat\",{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"share\",{\"children\":[\"chat\",{\"children\":[\"__PAGE__\",{},[[\"$L8\",[\"$\",\"$L9\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$a\"}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/3cf13271869a4aeb.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ddcc0cf73e062476.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/2272c73fc7a3b571.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]]],null],null]},[[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"meta\",null,{\"httpEquiv\":\"Content-Security-Policy\",\"content\":\"default-src 'self' https://assets.khoj.dev; script-src 'self' https://assets.khoj.dev 'unsafe-inline' 'unsafe-eval'; connect-src 'self' blob: https://ipapi.co/json ws://localhost:42110; style-src 'self' https://assets.khoj.dev 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src 'self' https://assets.khoj.dev https://fonts.gstatic.com; child-src 'none'; object-src 'none';\"}],[\"$\",\"body\",null,{\"className\":\"__className_e594dd\",\"children\":[[\"$\",\"$Lb\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"share\",\"children\",\"chat\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lc\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"window.EXCALIDRAW_ASSET_PATH = 'https://assets.khoj.dev/@excalidraw/excalidraw/dist/';\"}}]]}]]}]],null],null]},[null,[\"$\",\"$Lb\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"share\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lc\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/467a524c75e7d7c0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/76d55eb435962b19.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"meta\",null,{\"httpEquiv\":\"Content-Security-Policy\",\"content\":\"default-src 'self' https://assets.khoj.dev; media-src * blob:; script-src 'self' https://assets.khoj.dev 'unsafe-inline' 'unsafe-eval'; connect-src 'self' blob: https://ipapi.co/json ws://localhost:42110; style-src 'self' https://assets.khoj.dev 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src 'self' https://assets.khoj.dev https://fonts.gstatic.com; child-src 'none'; object-src 'none';\"}],[\"$\",\"body\",null,{\"className\":\"__className_e594dd\",\"children\":[\"$\",\"$Lb\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lc\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$Ld\"],\"globalErrorComponent\":\"$e\",\"missingSlots\":\"$Wf\"}]\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Khoj AI - Chat\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Use this page to view a chat with Khoj AI.\"}],[\"$\",\"link\",\"4\",{\"rel\":\"manifest\",\"href\":\"/static/khoj.webmanifest\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"Khoj AI - Home\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"Your Second Brain.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://app.khoj.dev/\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:site_name\",\"content\":\"Khoj AI\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image:width\",\"content\":\"256\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:image:height\",\"content\":\"256\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:title\",\"content\":\"Khoj AI - Home\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:description\",\"content\":\"Your Second Brain.\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:image:width\",\"content\":\"256\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:image:height\",\"content\":\"256\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"25\",{\"rel\":\"icon\",\"href\":\"/static/assets/icons/khoj_lantern.ico\"}],[\"$\",\"link\",\"26\",{\"rel\":\"apple-touch-icon\",\"href\":\"/static/assets/icons/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"27\",{\"name\":\"next-size-adjust\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\n"])</script></body></html>
@@ -1,7 +1,7 @@
1
1
  2:I[66513,[],"ClientPageRoot"]
2
- 3:I[5506,["3954","static/chunks/d3ac728e-a9e3522eef9b6b28.js","9001","static/chunks/9001-3b27af6d5f21df44.js","3062","static/chunks/3062-71ed4b46ac2bb87c.js","8840","static/chunks/8840-b8d7b9f0923c6651.js","7113","static/chunks/7113-f2e114d7034a0835.js","3110","static/chunks/3110-ef2cacd1b8d79ad8.js","394","static/chunks/394-6bcb8c429f168f21.js","1603","static/chunks/1603-b9d95833e0e025e8.js","9417","static/chunks/9417-2ca87207387fc790.js","3423","static/chunks/3423-0b533af8bf6ac218.js","9479","static/chunks/9479-ff7d8c4dae2014d1.js","2697","static/chunks/2697-61fcba89fd87eab4.js","3111","static/chunks/app/share/chat/page-eb9e282691858f2e.js"],"default",1]
2
+ 3:I[5506,["3954","static/chunks/d3ac728e-a9e3522eef9b6b28.js","9001","static/chunks/9001-3b27af6d5f21df44.js","3062","static/chunks/3062-71ed4b46ac2bb87c.js","8840","static/chunks/8840-b8d7b9f0923c6651.js","7113","static/chunks/7113-f2e114d7034a0835.js","3110","static/chunks/3110-ef2cacd1b8d79ad8.js","394","static/chunks/394-6bcb8c429f168f21.js","1603","static/chunks/1603-5138bb7c8035d9a6.js","9417","static/chunks/9417-2ca87207387fc790.js","3423","static/chunks/3423-0b533af8bf6ac218.js","9479","static/chunks/9479-ff7d8c4dae2014d1.js","2697","static/chunks/2697-61fcba89fd87eab4.js","3111","static/chunks/app/share/chat/page-eb9e282691858f2e.js"],"default",1]
3
3
  4:I[39275,[],""]
4
4
  5:I[61343,[],""]
5
- 0:["rYy0jmrIYv76V-iyorQim",[[["",{"children":["share",{"children":["chat",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",{"children":["share",{"children":["chat",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/3cf13271869a4aeb.css","precedence":"next","crossOrigin":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/ddcc0cf73e062476.css","precedence":"next","crossOrigin":"$undefined"}],["$","link","2",{"rel":"stylesheet","href":"/_next/static/css/2272c73fc7a3b571.css","precedence":"next","crossOrigin":"$undefined"}]]],null],null]},[[null,["$","html",null,{"lang":"en","children":[["$","meta",null,{"httpEquiv":"Content-Security-Policy","content":"default-src 'self' https://assets.khoj.dev; script-src 'self' https://assets.khoj.dev 'unsafe-inline' 'unsafe-eval'; connect-src 'self' blob: https://ipapi.co/json ws://localhost:42110; style-src 'self' https://assets.khoj.dev 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src 'self' https://assets.khoj.dev https://fonts.gstatic.com; child-src 'none'; object-src 'none';"}],["$","body",null,{"className":"__className_e594dd","children":[["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","share","children","chat","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}],["$","script",null,{"dangerouslySetInnerHTML":{"__html":"window.EXCALIDRAW_ASSET_PATH = 'https://assets.khoj.dev/@excalidraw/excalidraw/dist/';"}}]]}]]}]],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","share","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/467a524c75e7d7c0.css","precedence":"next","crossOrigin":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/76d55eb435962b19.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":[["$","meta",null,{"httpEquiv":"Content-Security-Policy","content":"default-src 'self' https://assets.khoj.dev; media-src * blob:; script-src 'self' https://assets.khoj.dev 'unsafe-inline' 'unsafe-eval'; connect-src 'self' blob: https://ipapi.co/json ws://localhost:42110; style-src 'self' https://assets.khoj.dev 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src 'self' https://assets.khoj.dev https://fonts.gstatic.com; child-src 'none'; object-src 'none';"}],["$","body",null,{"className":"__className_e594dd","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]]}]],null],null],["$L6",null]]]]
5
+ 0:["atzIseFarmC7TIwq2BgHC",[[["",{"children":["share",{"children":["chat",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",{"children":["share",{"children":["chat",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/3cf13271869a4aeb.css","precedence":"next","crossOrigin":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/ddcc0cf73e062476.css","precedence":"next","crossOrigin":"$undefined"}],["$","link","2",{"rel":"stylesheet","href":"/_next/static/css/2272c73fc7a3b571.css","precedence":"next","crossOrigin":"$undefined"}]]],null],null]},[[null,["$","html",null,{"lang":"en","children":[["$","meta",null,{"httpEquiv":"Content-Security-Policy","content":"default-src 'self' https://assets.khoj.dev; script-src 'self' https://assets.khoj.dev 'unsafe-inline' 'unsafe-eval'; connect-src 'self' blob: https://ipapi.co/json ws://localhost:42110; style-src 'self' https://assets.khoj.dev 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src 'self' https://assets.khoj.dev https://fonts.gstatic.com; child-src 'none'; object-src 'none';"}],["$","body",null,{"className":"__className_e594dd","children":[["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","share","children","chat","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}],["$","script",null,{"dangerouslySetInnerHTML":{"__html":"window.EXCALIDRAW_ASSET_PATH = 'https://assets.khoj.dev/@excalidraw/excalidraw/dist/';"}}]]}]]}]],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","share","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/467a524c75e7d7c0.css","precedence":"next","crossOrigin":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/76d55eb435962b19.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":[["$","meta",null,{"httpEquiv":"Content-Security-Policy","content":"default-src 'self' https://assets.khoj.dev; media-src * blob:; script-src 'self' https://assets.khoj.dev 'unsafe-inline' 'unsafe-eval'; connect-src 'self' blob: https://ipapi.co/json ws://localhost:42110; style-src 'self' https://assets.khoj.dev 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src 'self' https://assets.khoj.dev https://fonts.gstatic.com; child-src 'none'; object-src 'none';"}],["$","body",null,{"className":"__className_e594dd","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]]}]],null],null],["$L6",null]]]]
6
6
  6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Khoj AI - Chat"}],["$","meta","3",{"name":"description","content":"Use this page to view a chat with Khoj AI."}],["$","link","4",{"rel":"manifest","href":"/static/khoj.webmanifest","crossOrigin":"use-credentials"}],["$","meta","5",{"property":"og:title","content":"Khoj AI - Home"}],["$","meta","6",{"property":"og:description","content":"Your Second Brain."}],["$","meta","7",{"property":"og:url","content":"https://app.khoj.dev/"}],["$","meta","8",{"property":"og:site_name","content":"Khoj AI"}],["$","meta","9",{"property":"og:image","content":"https://assets.khoj.dev/khoj_lantern_256x256.png"}],["$","meta","10",{"property":"og:image:width","content":"256"}],["$","meta","11",{"property":"og:image:height","content":"256"}],["$","meta","12",{"property":"og:image","content":"https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png"}],["$","meta","13",{"property":"og:image:width","content":"1200"}],["$","meta","14",{"property":"og:image:height","content":"630"}],["$","meta","15",{"property":"og:type","content":"website"}],["$","meta","16",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","17",{"name":"twitter:title","content":"Khoj AI - Home"}],["$","meta","18",{"name":"twitter:description","content":"Your Second Brain."}],["$","meta","19",{"name":"twitter:image","content":"https://assets.khoj.dev/khoj_lantern_256x256.png"}],["$","meta","20",{"name":"twitter:image:width","content":"256"}],["$","meta","21",{"name":"twitter:image:height","content":"256"}],["$","meta","22",{"name":"twitter:image","content":"https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png"}],["$","meta","23",{"name":"twitter:image:width","content":"1200"}],["$","meta","24",{"name":"twitter:image:height","content":"630"}],["$","link","25",{"rel":"icon","href":"/static/assets/icons/khoj_lantern.ico"}],["$","link","26",{"rel":"apple-touch-icon","href":"/static/assets/icons/khoj_lantern_256x256.png"}],["$","meta","27",{"name":"next-size-adjust"}]]
7
7
  1:null
@@ -34,6 +34,7 @@ def extract_questions_anthropic(
34
34
  query_images: Optional[list[str]] = None,
35
35
  vision_enabled: bool = False,
36
36
  personality_context: Optional[str] = None,
37
+ tracer: dict = {},
37
38
  ):
38
39
  """
39
40
  Infer search queries to retrieve relevant notes to answer user query
@@ -89,6 +90,7 @@ def extract_questions_anthropic(
89
90
  model_name=model,
90
91
  temperature=temperature,
91
92
  api_key=api_key,
93
+ tracer=tracer,
92
94
  )
93
95
 
94
96
  # Extract, Clean Message from Claude's Response
@@ -110,7 +112,7 @@ def extract_questions_anthropic(
110
112
  return questions
111
113
 
112
114
 
113
- def anthropic_send_message_to_model(messages, api_key, model):
115
+ def anthropic_send_message_to_model(messages, api_key, model, tracer={}):
114
116
  """
115
117
  Send message to model
116
118
  """
@@ -122,6 +124,7 @@ def anthropic_send_message_to_model(messages, api_key, model):
122
124
  system_prompt=system_prompt,
123
125
  model_name=model,
124
126
  api_key=api_key,
127
+ tracer=tracer,
125
128
  )
126
129
 
127
130
 
@@ -141,6 +144,7 @@ def converse_anthropic(
141
144
  agent: Agent = None,
142
145
  query_images: Optional[list[str]] = None,
143
146
  vision_available: bool = False,
147
+ tracer: dict = {},
144
148
  ):
145
149
  """
146
150
  Converse with user using Anthropic's Claude
@@ -213,4 +217,5 @@ def converse_anthropic(
213
217
  system_prompt=system_prompt,
214
218
  completion_func=completion_func,
215
219
  max_prompt_size=max_prompt_size,
220
+ tracer=tracer,
216
221
  )
@@ -12,8 +12,13 @@ from tenacity import (
12
12
  wait_random_exponential,
13
13
  )
14
14
 
15
- from khoj.processor.conversation.utils import ThreadedGenerator, get_image_from_url
16
- from khoj.utils.helpers import is_none_or_empty
15
+ from khoj.processor.conversation.utils import (
16
+ ThreadedGenerator,
17
+ commit_conversation_trace,
18
+ get_image_from_url,
19
+ )
20
+ from khoj.utils import state
21
+ from khoj.utils.helpers import in_debug_mode, is_none_or_empty
17
22
 
18
23
  logger = logging.getLogger(__name__)
19
24
 
@@ -30,7 +35,7 @@ DEFAULT_MAX_TOKENS_ANTHROPIC = 3000
30
35
  reraise=True,
31
36
  )
32
37
  def anthropic_completion_with_backoff(
33
- messages, system_prompt, model_name, temperature=0, api_key=None, model_kwargs=None, max_tokens=None
38
+ messages, system_prompt, model_name, temperature=0, api_key=None, model_kwargs=None, max_tokens=None, tracer={}
34
39
  ) -> str:
35
40
  if api_key not in anthropic_clients:
36
41
  client: anthropic.Anthropic = anthropic.Anthropic(api_key=api_key)
@@ -58,6 +63,12 @@ def anthropic_completion_with_backoff(
58
63
  for text in stream.text_stream:
59
64
  aggregated_response += text
60
65
 
66
+ # Save conversation trace
67
+ tracer["chat_model"] = model_name
68
+ tracer["temperature"] = temperature
69
+ if in_debug_mode() or state.verbose > 1:
70
+ commit_conversation_trace(messages, aggregated_response, tracer)
71
+
61
72
  return aggregated_response
62
73
 
63
74
 
@@ -78,18 +89,19 @@ def anthropic_chat_completion_with_backoff(
78
89
  max_prompt_size=None,
79
90
  completion_func=None,
80
91
  model_kwargs=None,
92
+ tracer={},
81
93
  ):
82
94
  g = ThreadedGenerator(compiled_references, online_results, completion_func=completion_func)
83
95
  t = Thread(
84
96
  target=anthropic_llm_thread,
85
- args=(g, messages, system_prompt, model_name, temperature, api_key, max_prompt_size, model_kwargs),
97
+ args=(g, messages, system_prompt, model_name, temperature, api_key, max_prompt_size, model_kwargs, tracer),
86
98
  )
87
99
  t.start()
88
100
  return g
89
101
 
90
102
 
91
103
  def anthropic_llm_thread(
92
- g, messages, system_prompt, model_name, temperature, api_key, max_prompt_size=None, model_kwargs=None
104
+ g, messages, system_prompt, model_name, temperature, api_key, max_prompt_size=None, model_kwargs=None, tracer={}
93
105
  ):
94
106
  try:
95
107
  if api_key not in anthropic_clients:
@@ -102,6 +114,7 @@ def anthropic_llm_thread(
102
114
  anthropic.types.MessageParam(role=message.role, content=message.content) for message in messages
103
115
  ]
104
116
 
117
+ aggregated_response = ""
105
118
  with client.messages.stream(
106
119
  messages=formatted_messages,
107
120
  model=model_name, # type: ignore
@@ -112,7 +125,14 @@ def anthropic_llm_thread(
112
125
  **(model_kwargs or dict()),
113
126
  ) as stream:
114
127
  for text in stream.text_stream:
128
+ aggregated_response += text
115
129
  g.send(text)
130
+
131
+ # Save conversation trace
132
+ tracer["chat_model"] = model_name
133
+ tracer["temperature"] = temperature
134
+ if in_debug_mode() or state.verbose > 1:
135
+ commit_conversation_trace(messages, aggregated_response, tracer)
116
136
  except Exception as e:
117
137
  logger.error(f"Error in anthropic_llm_thread: {e}", exc_info=True)
118
138
  finally:
@@ -35,6 +35,7 @@ def extract_questions_gemini(
35
35
  query_images: Optional[list[str]] = None,
36
36
  vision_enabled: bool = False,
37
37
  personality_context: Optional[str] = None,
38
+ tracer: dict = {},
38
39
  ):
39
40
  """
40
41
  Infer search queries to retrieve relevant notes to answer user query
@@ -85,7 +86,7 @@ def extract_questions_gemini(
85
86
  messages = [ChatMessage(content=prompt, role="user"), ChatMessage(content=system_prompt, role="system")]
86
87
 
87
88
  response = gemini_send_message_to_model(
88
- messages, api_key, model, response_type="json_object", temperature=temperature
89
+ messages, api_key, model, response_type="json_object", temperature=temperature, tracer=tracer
89
90
  )
90
91
 
91
92
  # Extract, Clean Message from Gemini's Response
@@ -107,7 +108,9 @@ def extract_questions_gemini(
107
108
  return questions
108
109
 
109
110
 
110
- def gemini_send_message_to_model(messages, api_key, model, response_type="text", temperature=0, model_kwargs=None):
111
+ def gemini_send_message_to_model(
112
+ messages, api_key, model, response_type="text", temperature=0, model_kwargs=None, tracer={}
113
+ ):
111
114
  """
112
115
  Send message to model
113
116
  """
@@ -125,6 +128,7 @@ def gemini_send_message_to_model(messages, api_key, model, response_type="text",
125
128
  api_key=api_key,
126
129
  temperature=temperature,
127
130
  model_kwargs=model_kwargs,
131
+ tracer=tracer,
128
132
  )
129
133
 
130
134
 
@@ -145,6 +149,7 @@ def converse_gemini(
145
149
  agent: Agent = None,
146
150
  query_images: Optional[list[str]] = None,
147
151
  vision_available: bool = False,
152
+ tracer={},
148
153
  ):
149
154
  """
150
155
  Converse with user using Google's Gemini
@@ -217,4 +222,5 @@ def converse_gemini(
217
222
  api_key=api_key,
218
223
  system_prompt=system_prompt,
219
224
  completion_func=completion_func,
225
+ tracer=tracer,
220
226
  )
@@ -19,8 +19,13 @@ from tenacity import (
19
19
  wait_random_exponential,
20
20
  )
21
21
 
22
- from khoj.processor.conversation.utils import ThreadedGenerator, get_image_from_url
23
- from khoj.utils.helpers import is_none_or_empty
22
+ from khoj.processor.conversation.utils import (
23
+ ThreadedGenerator,
24
+ commit_conversation_trace,
25
+ get_image_from_url,
26
+ )
27
+ from khoj.utils import state
28
+ from khoj.utils.helpers import in_debug_mode, is_none_or_empty
24
29
 
25
30
  logger = logging.getLogger(__name__)
26
31
 
@@ -35,7 +40,7 @@ MAX_OUTPUT_TOKENS_GEMINI = 8192
35
40
  reraise=True,
36
41
  )
37
42
  def gemini_completion_with_backoff(
38
- messages, system_prompt, model_name, temperature=0, api_key=None, model_kwargs=None
43
+ messages, system_prompt, model_name, temperature=0, api_key=None, model_kwargs=None, tracer={}
39
44
  ) -> str:
40
45
  genai.configure(api_key=api_key)
41
46
  model_kwargs = model_kwargs or dict()
@@ -60,16 +65,23 @@ def gemini_completion_with_backoff(
60
65
 
61
66
  try:
62
67
  # Generate the response. The last message is considered to be the current prompt
63
- aggregated_response = chat_session.send_message(formatted_messages[-1]["parts"])
64
- return aggregated_response.text
68
+ response = chat_session.send_message(formatted_messages[-1]["parts"])
69
+ response_text = response.text
65
70
  except StopCandidateException as e:
66
- response_message, _ = handle_gemini_response(e.args)
71
+ response_text, _ = handle_gemini_response(e.args)
67
72
  # Respond with reason for stopping
68
73
  logger.warning(
69
- f"LLM Response Prevented for {model_name}: {response_message}.\n"
74
+ f"LLM Response Prevented for {model_name}: {response_text}.\n"
70
75
  + f"Last Message by {messages[-1].role}: {messages[-1].content}"
71
76
  )
72
- return response_message
77
+
78
+ # Save conversation trace
79
+ tracer["chat_model"] = model_name
80
+ tracer["temperature"] = temperature
81
+ if in_debug_mode() or state.verbose > 1:
82
+ commit_conversation_trace(messages, response_text, tracer)
83
+
84
+ return response_text
73
85
 
74
86
 
75
87
  @retry(
@@ -88,17 +100,20 @@ def gemini_chat_completion_with_backoff(
88
100
  system_prompt,
89
101
  completion_func=None,
90
102
  model_kwargs=None,
103
+ tracer: dict = {},
91
104
  ):
92
105
  g = ThreadedGenerator(compiled_references, online_results, completion_func=completion_func)
93
106
  t = Thread(
94
107
  target=gemini_llm_thread,
95
- args=(g, messages, system_prompt, model_name, temperature, api_key, model_kwargs),
108
+ args=(g, messages, system_prompt, model_name, temperature, api_key, model_kwargs, tracer),
96
109
  )
97
110
  t.start()
98
111
  return g
99
112
 
100
113
 
101
- def gemini_llm_thread(g, messages, system_prompt, model_name, temperature, api_key, model_kwargs=None):
114
+ def gemini_llm_thread(
115
+ g, messages, system_prompt, model_name, temperature, api_key, model_kwargs=None, tracer: dict = {}
116
+ ):
102
117
  try:
103
118
  genai.configure(api_key=api_key)
104
119
  model_kwargs = model_kwargs or dict()
@@ -117,16 +132,25 @@ def gemini_llm_thread(g, messages, system_prompt, model_name, temperature, api_k
117
132
  },
118
133
  )
119
134
 
135
+ aggregated_response = ""
120
136
  formatted_messages = [{"role": message.role, "parts": message.content} for message in messages]
137
+
121
138
  # all messages up to the last are considered to be part of the chat history
122
139
  chat_session = model.start_chat(history=formatted_messages[0:-1])
123
140
  # the last message is considered to be the current prompt
124
141
  for chunk in chat_session.send_message(formatted_messages[-1]["parts"], stream=True):
125
142
  message, stopped = handle_gemini_response(chunk.candidates, chunk.prompt_feedback)
126
143
  message = message or chunk.text
144
+ aggregated_response += message
127
145
  g.send(message)
128
146
  if stopped:
129
147
  raise StopCandidateException(message)
148
+
149
+ # Save conversation trace
150
+ tracer["chat_model"] = model_name
151
+ tracer["temperature"] = temperature
152
+ if in_debug_mode() or state.verbose > 1:
153
+ commit_conversation_trace(messages, aggregated_response, tracer)
130
154
  except StopCandidateException as e:
131
155
  logger.warning(
132
156
  f"LLM Response Prevented for {model_name}: {e.args[0]}.\n"
@@ -12,11 +12,12 @@ from khoj.processor.conversation import prompts
12
12
  from khoj.processor.conversation.offline.utils import download_model
13
13
  from khoj.processor.conversation.utils import (
14
14
  ThreadedGenerator,
15
+ commit_conversation_trace,
15
16
  generate_chatml_messages_with_context,
16
17
  )
17
18
  from khoj.utils import state
18
19
  from khoj.utils.constants import empty_escape_sequences
19
- from khoj.utils.helpers import ConversationCommand, is_none_or_empty
20
+ from khoj.utils.helpers import ConversationCommand, in_debug_mode, is_none_or_empty
20
21
  from khoj.utils.rawconfig import LocationData
21
22
 
22
23
  logger = logging.getLogger(__name__)
@@ -34,6 +35,7 @@ def extract_questions_offline(
34
35
  max_prompt_size: int = None,
35
36
  temperature: float = 0.7,
36
37
  personality_context: Optional[str] = None,
38
+ tracer: dict = {},
37
39
  ) -> List[str]:
38
40
  """
39
41
  Infer search queries to retrieve relevant notes to answer user query
@@ -94,6 +96,7 @@ def extract_questions_offline(
94
96
  max_prompt_size=max_prompt_size,
95
97
  temperature=temperature,
96
98
  response_type="json_object",
99
+ tracer=tracer,
97
100
  )
98
101
  finally:
99
102
  state.chat_lock.release()
@@ -146,6 +149,7 @@ def converse_offline(
146
149
  location_data: LocationData = None,
147
150
  user_name: str = None,
148
151
  agent: Agent = None,
152
+ tracer: dict = {},
149
153
  ) -> Union[ThreadedGenerator, Iterator[str]]:
150
154
  """
151
155
  Converse with user using Llama
@@ -153,8 +157,9 @@ def converse_offline(
153
157
  # Initialize Variables
154
158
  assert loaded_model is None or isinstance(loaded_model, Llama), "loaded_model must be of type Llama, if configured"
155
159
  offline_chat_model = loaded_model or download_model(model, max_tokens=max_prompt_size)
156
- compiled_references = "\n\n".join({f"# File: {item['file']}\n## {item['compiled']}\n" for item in references})
160
+ tracer["chat_model"] = model
157
161
 
162
+ compiled_references = "\n\n".join({f"# File: {item['file']}\n## {item['compiled']}\n" for item in references})
158
163
  current_date = datetime.now()
159
164
 
160
165
  if agent and agent.personality:
@@ -215,13 +220,14 @@ def converse_offline(
215
220
  logger.debug(f"Conversation Context for {model}: {truncated_messages}")
216
221
 
217
222
  g = ThreadedGenerator(references, online_results, completion_func=completion_func)
218
- t = Thread(target=llm_thread, args=(g, messages, offline_chat_model, max_prompt_size))
223
+ t = Thread(target=llm_thread, args=(g, messages, offline_chat_model, max_prompt_size, tracer))
219
224
  t.start()
220
225
  return g
221
226
 
222
227
 
223
- def llm_thread(g, messages: List[ChatMessage], model: Any, max_prompt_size: int = None):
228
+ def llm_thread(g, messages: List[ChatMessage], model: Any, max_prompt_size: int = None, tracer: dict = {}):
224
229
  stop_phrases = ["<s>", "INST]", "Notes:"]
230
+ aggregated_response = ""
225
231
 
226
232
  state.chat_lock.acquire()
227
233
  try:
@@ -229,7 +235,14 @@ def llm_thread(g, messages: List[ChatMessage], model: Any, max_prompt_size: int
229
235
  messages, loaded_model=model, stop=stop_phrases, max_prompt_size=max_prompt_size, streaming=True
230
236
  )
231
237
  for response in response_iterator:
232
- g.send(response["choices"][0]["delta"].get("content", ""))
238
+ response_delta = response["choices"][0]["delta"].get("content", "")
239
+ aggregated_response += response_delta
240
+ g.send(response_delta)
241
+
242
+ # Save conversation trace
243
+ if in_debug_mode() or state.verbose > 1:
244
+ commit_conversation_trace(messages, aggregated_response, tracer)
245
+
233
246
  finally:
234
247
  state.chat_lock.release()
235
248
  g.close()
@@ -244,6 +257,7 @@ def send_message_to_model_offline(
244
257
  stop=[],
245
258
  max_prompt_size: int = None,
246
259
  response_type: str = "text",
260
+ tracer: dict = {},
247
261
  ):
248
262
  assert loaded_model is None or isinstance(loaded_model, Llama), "loaded_model must be of type Llama, if configured"
249
263
  offline_chat_model = loaded_model or download_model(model, max_tokens=max_prompt_size)
@@ -251,7 +265,17 @@ def send_message_to_model_offline(
251
265
  response = offline_chat_model.create_chat_completion(
252
266
  messages_dict, stop=stop, stream=streaming, temperature=temperature, response_format={"type": response_type}
253
267
  )
268
+
254
269
  if streaming:
255
270
  return response
256
- else:
257
- return response["choices"][0]["message"].get("content", "")
271
+
272
+ response_text = response["choices"][0]["message"].get("content", "")
273
+
274
+ # Save conversation trace for non-streaming responses
275
+ # Streamed responses need to be saved by the calling function
276
+ tracer["chat_model"] = model
277
+ tracer["temperature"] = temperature
278
+ if in_debug_mode() or state.verbose > 1:
279
+ commit_conversation_trace(messages, response_text, tracer)
280
+
281
+ return response_text
@@ -33,6 +33,7 @@ def extract_questions(
33
33
  query_images: Optional[list[str]] = None,
34
34
  vision_enabled: bool = False,
35
35
  personality_context: Optional[str] = None,
36
+ tracer: dict = {},
36
37
  ):
37
38
  """
38
39
  Infer search queries to retrieve relevant notes to answer user query
@@ -82,7 +83,13 @@ def extract_questions(
82
83
  messages = [ChatMessage(content=prompt, role="user")]
83
84
 
84
85
  response = send_message_to_model(
85
- messages, api_key, model, response_type="json_object", api_base_url=api_base_url, temperature=temperature
86
+ messages,
87
+ api_key,
88
+ model,
89
+ response_type="json_object",
90
+ api_base_url=api_base_url,
91
+ temperature=temperature,
92
+ tracer=tracer,
86
93
  )
87
94
 
88
95
  # Extract, Clean Message from GPT's Response
@@ -103,7 +110,9 @@ def extract_questions(
103
110
  return questions
104
111
 
105
112
 
106
- def send_message_to_model(messages, api_key, model, response_type="text", api_base_url=None, temperature=0):
113
+ def send_message_to_model(
114
+ messages, api_key, model, response_type="text", api_base_url=None, temperature=0, tracer: dict = {}
115
+ ):
107
116
  """
108
117
  Send message to model
109
118
  """
@@ -116,6 +125,7 @@ def send_message_to_model(messages, api_key, model, response_type="text", api_ba
116
125
  temperature=temperature,
117
126
  api_base_url=api_base_url,
118
127
  model_kwargs={"response_format": {"type": response_type}},
128
+ tracer=tracer,
119
129
  )
120
130
 
121
131
 
@@ -137,6 +147,7 @@ def converse(
137
147
  agent: Agent = None,
138
148
  query_images: Optional[list[str]] = None,
139
149
  vision_available: bool = False,
150
+ tracer: dict = {},
140
151
  ):
141
152
  """
142
153
  Converse with user using OpenAI's ChatGPT
@@ -207,4 +218,5 @@ def converse(
207
218
  api_base_url=api_base_url,
208
219
  completion_func=completion_func,
209
220
  model_kwargs={"stop": ["Notes:\n["]},
221
+ tracer=tracer,
210
222
  )