khoj 1.24.2.dev19__py3-none-any.whl → 1.24.2.dev33__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.
- khoj/database/adapters/__init__.py +27 -15
- khoj/interface/compiled/404/index.html +1 -1
- khoj/interface/compiled/_next/static/chunks/app/agents/page-25b91e88abb7f976.js +1 -0
- khoj/interface/compiled/_next/static/chunks/{webpack-c4376b110507dd22.js → webpack-2651a68f46ac3cb7.js} +1 -1
- khoj/interface/compiled/agents/index.html +1 -1
- khoj/interface/compiled/agents/index.txt +2 -2
- khoj/interface/compiled/automations/index.html +1 -1
- khoj/interface/compiled/automations/index.txt +1 -1
- khoj/interface/compiled/chat/index.html +1 -1
- khoj/interface/compiled/chat/index.txt +2 -2
- khoj/interface/compiled/factchecker/index.html +1 -1
- khoj/interface/compiled/factchecker/index.txt +2 -2
- khoj/interface/compiled/index.html +1 -1
- khoj/interface/compiled/index.txt +2 -2
- khoj/interface/compiled/search/index.html +1 -1
- khoj/interface/compiled/search/index.txt +2 -2
- khoj/interface/compiled/settings/index.html +1 -1
- khoj/interface/compiled/settings/index.txt +1 -1
- khoj/interface/compiled/share/chat/index.html +1 -1
- khoj/interface/compiled/share/chat/index.txt +2 -2
- khoj/processor/conversation/google/gemini_chat.py +4 -19
- khoj/processor/conversation/google/utils.py +29 -15
- khoj/processor/conversation/prompts.py +14 -3
- khoj/processor/conversation/utils.py +3 -7
- khoj/processor/embeddings.py +5 -3
- khoj/routers/api_chat.py +33 -18
- khoj/routers/helpers.py +11 -3
- khoj/utils/helpers.py +8 -8
- {khoj-1.24.2.dev19.dist-info → khoj-1.24.2.dev33.dist-info}/METADATA +1 -1
- {khoj-1.24.2.dev19.dist-info → khoj-1.24.2.dev33.dist-info}/RECORD +39 -39
- khoj/interface/compiled/_next/static/chunks/app/agents/page-4005bd96041d20f5.js +0 -1
- /khoj/interface/compiled/_next/static/chunks/{9178-f208a3e6404714a9.js → 9178-899fe9a6b754ecfe.js} +0 -0
- /khoj/interface/compiled/_next/static/chunks/{9417-1d158bf46d3a0dc9.js → 9417-29502e39c3e7d60c.js} +0 -0
- /khoj/interface/compiled/_next/static/chunks/{9479-563e4d61f91d5a7c.js → 9479-7eed36fc954ef804.js} +0 -0
- /khoj/interface/compiled/_next/static/chunks/app/{page-421d13f70c505dd9.js → page-10a5aad6e04f3cf8.js} +0 -0
- /khoj/interface/compiled/_next/static/{-g-BSlwy2eTVtQIJDFFXi → lHwFhwhZGEZT4IMv1TNBH}/_buildManifest.js +0 -0
- /khoj/interface/compiled/_next/static/{-g-BSlwy2eTVtQIJDFFXi → lHwFhwhZGEZT4IMv1TNBH}/_ssgManifest.js +0 -0
- {khoj-1.24.2.dev19.dist-info → khoj-1.24.2.dev33.dist-info}/WHEEL +0 -0
- {khoj-1.24.2.dev19.dist-info → khoj-1.24.2.dev33.dist-info}/entry_points.txt +0 -0
- {khoj-1.24.2.dev19.dist-info → khoj-1.24.2.dev33.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/1538cedb321e3a97.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/7a2b0a2d7c3d86eb.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c808691c459e3887.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/2de69f0be774c768.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-c4376b110507dd22.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/4086-2c74808ba38a5a0f.js" async=""></script><script src="/_next/static/chunks/121-7024f479c297aef0.js" async=""></script><script src="/_next/static/chunks/3110-ef2cacd1b8d79ad8.js" async=""></script><script src="/_next/static/chunks/4051-2cf66369d6ca0f1d.js" async=""></script><script src="/_next/static/chunks/1603-67a89278e2c5dbe6.js" async=""></script><script src="/_next/static/chunks/9417-1d158bf46d3a0dc9.js" async=""></script><script src="/_next/static/chunks/9178-f208a3e6404714a9.js" async=""></script><script src="/_next/static/chunks/9479-563e4d61f91d5a7c.js" async=""></script><script src="/_next/static/chunks/2697-a38d01981ad3bdf8.js" async=""></script><script src="/_next/static/chunks/app/share/chat/page-fbbd66a4d4633438.js" async=""></script><meta http-equiv="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';"/><meta http-equiv="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';"/><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_90df87"><html lang="en"><body class="__className_90df87"><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 src="/_next/static/chunks/webpack-c4376b110507dd22.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/1538cedb321e3a97.css\",\"style\"]\n3:HL[\"/_next/static/css/7a2b0a2d7c3d86eb.css\",\"style\"]\n4:HL[\"/_next/static/css/c808691c459e3887.css\",\"style\"]\n5:HL[\"/_next/static/css/2de69f0be774c768.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\",\"4086\",\"static/chunks/4086-2c74808ba38a5a0f.js\",\"121\",\"static/chunks/121-7024f479c297aef0.js\",\"3110\",\"static/chunks/3110-ef2cacd1b8d79ad8.js\",\"4051\",\"static/chunks/4051-2cf66369d6ca0f1d.js\",\"1603\",\"static/chunks/1603-67a89278e2c5dbe6.js\",\"9417\",\"static/chunks/9417-1d158bf46d3a0dc9.js\",\"9178\",\"static/chunks/9178-f208a3e6404714a9.js\",\"9479\",\"static/chunks/9479-563e4d61f91d5a7c.js\",\"2697\",\"static/chunks/2697-a38d01981ad3bdf8.js\",\"3111\",\"static/chunks/app/share/chat/page-fbbd66a4d4633438.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\":\"-g-BSlwy2eTVtQIJDFFXi\",\"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/c808691c459e3887.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/2de69f0be774c768.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_90df87\",\"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\"}]}]]}]],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/1538cedb321e3a97.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/7a2b0a2d7c3d86eb.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_90df87\",\"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/1538cedb321e3a97.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/7a2b0a2d7c3d86eb.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c808691c459e3887.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/2de69f0be774c768.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-2651a68f46ac3cb7.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/4086-2c74808ba38a5a0f.js" async=""></script><script src="/_next/static/chunks/121-7024f479c297aef0.js" async=""></script><script src="/_next/static/chunks/3110-ef2cacd1b8d79ad8.js" async=""></script><script src="/_next/static/chunks/4051-2cf66369d6ca0f1d.js" async=""></script><script src="/_next/static/chunks/1603-67a89278e2c5dbe6.js" async=""></script><script src="/_next/static/chunks/9417-29502e39c3e7d60c.js" async=""></script><script src="/_next/static/chunks/9178-899fe9a6b754ecfe.js" async=""></script><script src="/_next/static/chunks/9479-7eed36fc954ef804.js" async=""></script><script src="/_next/static/chunks/2697-a38d01981ad3bdf8.js" async=""></script><script src="/_next/static/chunks/app/share/chat/page-fbbd66a4d4633438.js" async=""></script><meta http-equiv="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';"/><meta http-equiv="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';"/><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_90df87"><html lang="en"><body class="__className_90df87"><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 src="/_next/static/chunks/webpack-2651a68f46ac3cb7.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/1538cedb321e3a97.css\",\"style\"]\n3:HL[\"/_next/static/css/7a2b0a2d7c3d86eb.css\",\"style\"]\n4:HL[\"/_next/static/css/c808691c459e3887.css\",\"style\"]\n5:HL[\"/_next/static/css/2de69f0be774c768.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\",\"4086\",\"static/chunks/4086-2c74808ba38a5a0f.js\",\"121\",\"static/chunks/121-7024f479c297aef0.js\",\"3110\",\"static/chunks/3110-ef2cacd1b8d79ad8.js\",\"4051\",\"static/chunks/4051-2cf66369d6ca0f1d.js\",\"1603\",\"static/chunks/1603-67a89278e2c5dbe6.js\",\"9417\",\"static/chunks/9417-29502e39c3e7d60c.js\",\"9178\",\"static/chunks/9178-899fe9a6b754ecfe.js\",\"9479\",\"static/chunks/9479-7eed36fc954ef804.js\",\"2697\",\"static/chunks/2697-a38d01981ad3bdf8.js\",\"3111\",\"static/chunks/app/share/chat/page-fbbd66a4d4633438.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\":\"lHwFhwhZGEZT4IMv1TNBH\",\"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/c808691c459e3887.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/2de69f0be774c768.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_90df87\",\"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\"}]}]]}]],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/1538cedb321e3a97.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/7a2b0a2d7c3d86eb.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_90df87\",\"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","4086","static/chunks/4086-2c74808ba38a5a0f.js","121","static/chunks/121-7024f479c297aef0.js","3110","static/chunks/3110-ef2cacd1b8d79ad8.js","4051","static/chunks/4051-2cf66369d6ca0f1d.js","1603","static/chunks/1603-67a89278e2c5dbe6.js","9417","static/chunks/9417-
|
2
|
+
3:I[5506,["3954","static/chunks/d3ac728e-a9e3522eef9b6b28.js","9001","static/chunks/9001-3b27af6d5f21df44.js","3062","static/chunks/3062-71ed4b46ac2bb87c.js","4086","static/chunks/4086-2c74808ba38a5a0f.js","121","static/chunks/121-7024f479c297aef0.js","3110","static/chunks/3110-ef2cacd1b8d79ad8.js","4051","static/chunks/4051-2cf66369d6ca0f1d.js","1603","static/chunks/1603-67a89278e2c5dbe6.js","9417","static/chunks/9417-29502e39c3e7d60c.js","9178","static/chunks/9178-899fe9a6b754ecfe.js","9479","static/chunks/9479-7eed36fc954ef804.js","2697","static/chunks/2697-a38d01981ad3bdf8.js","3111","static/chunks/app/share/chat/page-fbbd66a4d4633438.js"],"default",1]
|
3
3
|
4:I[39275,[],""]
|
4
4
|
5:I[61343,[],""]
|
5
|
-
0:["
|
5
|
+
0:["lHwFhwhZGEZT4IMv1TNBH",[[["",{"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/c808691c459e3887.css","precedence":"next","crossOrigin":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/2de69f0be774c768.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_90df87","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"}]}]]}]],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/1538cedb321e3a97.css","precedence":"next","crossOrigin":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/7a2b0a2d7c3d86eb.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_90df87","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
|
@@ -9,6 +9,7 @@ from langchain.schema import ChatMessage
|
|
9
9
|
from khoj.database.models import Agent, KhojUser
|
10
10
|
from khoj.processor.conversation import prompts
|
11
11
|
from khoj.processor.conversation.google.utils import (
|
12
|
+
format_messages_for_gemini,
|
12
13
|
gemini_chat_completion_with_backoff,
|
13
14
|
gemini_completion_with_backoff,
|
14
15
|
)
|
@@ -79,7 +80,6 @@ def extract_questions_gemini(
|
|
79
80
|
model_name=model,
|
80
81
|
temperature=temperature,
|
81
82
|
api_key=api_key,
|
82
|
-
max_tokens=max_tokens,
|
83
83
|
model_kwargs=model_kwargs,
|
84
84
|
)
|
85
85
|
|
@@ -106,15 +106,7 @@ def gemini_send_message_to_model(messages, api_key, model, response_type="text")
|
|
106
106
|
"""
|
107
107
|
Send message to model
|
108
108
|
"""
|
109
|
-
system_prompt =
|
110
|
-
if len(messages) == 1:
|
111
|
-
messages[0].role = "user"
|
112
|
-
else:
|
113
|
-
system_prompt = ""
|
114
|
-
for message in messages.copy():
|
115
|
-
if message.role == "system":
|
116
|
-
system_prompt += message.content
|
117
|
-
messages.remove(message)
|
109
|
+
messages, system_prompt = format_messages_for_gemini(messages)
|
118
110
|
|
119
111
|
model_kwargs = {}
|
120
112
|
if response_type == "json_object":
|
@@ -164,6 +156,7 @@ def converse_gemini(
|
|
164
156
|
day_of_week=current_date.strftime("%A"),
|
165
157
|
)
|
166
158
|
|
159
|
+
system_prompt += f"{system_prompt}\n\n{prompts.gemini_verbose_language_personality}"
|
167
160
|
if location_data:
|
168
161
|
location_prompt = prompts.user_location.format(location=f"{location_data}")
|
169
162
|
system_prompt = f"{system_prompt}\n{location_prompt}"
|
@@ -196,14 +189,7 @@ def converse_gemini(
|
|
196
189
|
tokenizer_name=tokenizer_name,
|
197
190
|
)
|
198
191
|
|
199
|
-
|
200
|
-
if message.role == "assistant":
|
201
|
-
message.role = "model"
|
202
|
-
|
203
|
-
for message in messages.copy():
|
204
|
-
if message.role == "system":
|
205
|
-
system_prompt += message.content
|
206
|
-
messages.remove(message)
|
192
|
+
messages, system_prompt = format_messages_for_gemini(messages, system_prompt)
|
207
193
|
|
208
194
|
truncated_messages = "\n".join({f"{message.content[:40]}..." for message in messages})
|
209
195
|
logger.debug(f"Conversation Context for Gemini: {truncated_messages}")
|
@@ -218,5 +204,4 @@ def converse_gemini(
|
|
218
204
|
api_key=api_key,
|
219
205
|
system_prompt=system_prompt,
|
220
206
|
completion_func=completion_func,
|
221
|
-
max_prompt_size=max_prompt_size,
|
222
207
|
)
|
@@ -4,15 +4,13 @@ from threading import Thread
|
|
4
4
|
|
5
5
|
import google.generativeai as genai
|
6
6
|
from google.generativeai.types.answer_types import FinishReason
|
7
|
-
from google.generativeai.types.generation_types import
|
8
|
-
GenerateContentResponse,
|
9
|
-
StopCandidateException,
|
10
|
-
)
|
7
|
+
from google.generativeai.types.generation_types import StopCandidateException
|
11
8
|
from google.generativeai.types.safety_types import (
|
12
9
|
HarmBlockThreshold,
|
13
10
|
HarmCategory,
|
14
11
|
HarmProbability,
|
15
12
|
)
|
13
|
+
from langchain.schema import ChatMessage
|
16
14
|
from tenacity import (
|
17
15
|
before_sleep_log,
|
18
16
|
retry,
|
@@ -22,11 +20,12 @@ from tenacity import (
|
|
22
20
|
)
|
23
21
|
|
24
22
|
from khoj.processor.conversation.utils import ThreadedGenerator
|
23
|
+
from khoj.utils.helpers import is_none_or_empty
|
25
24
|
|
26
25
|
logger = logging.getLogger(__name__)
|
27
26
|
|
28
27
|
|
29
|
-
|
28
|
+
MAX_OUTPUT_TOKENS_GEMINI = 8192
|
30
29
|
|
31
30
|
|
32
31
|
@retry(
|
@@ -36,13 +35,12 @@ DEFAULT_MAX_TOKENS_GEMINI = 8192
|
|
36
35
|
reraise=True,
|
37
36
|
)
|
38
37
|
def gemini_completion_with_backoff(
|
39
|
-
messages, system_prompt, model_name, temperature=0, api_key=None, model_kwargs=None
|
38
|
+
messages, system_prompt, model_name, temperature=0, api_key=None, model_kwargs=None
|
40
39
|
) -> str:
|
41
40
|
genai.configure(api_key=api_key)
|
42
|
-
max_tokens = max_tokens or DEFAULT_MAX_TOKENS_GEMINI
|
43
41
|
model_kwargs = model_kwargs or dict()
|
44
42
|
model_kwargs["temperature"] = temperature
|
45
|
-
model_kwargs["max_output_tokens"] =
|
43
|
+
model_kwargs["max_output_tokens"] = MAX_OUTPUT_TOKENS_GEMINI
|
46
44
|
model = genai.GenerativeModel(
|
47
45
|
model_name,
|
48
46
|
generation_config=model_kwargs,
|
@@ -88,28 +86,24 @@ def gemini_chat_completion_with_backoff(
|
|
88
86
|
temperature,
|
89
87
|
api_key,
|
90
88
|
system_prompt,
|
91
|
-
max_prompt_size=None,
|
92
89
|
completion_func=None,
|
93
90
|
model_kwargs=None,
|
94
91
|
):
|
95
92
|
g = ThreadedGenerator(compiled_references, online_results, completion_func=completion_func)
|
96
93
|
t = Thread(
|
97
94
|
target=gemini_llm_thread,
|
98
|
-
args=(g, messages, system_prompt, model_name, temperature, api_key,
|
95
|
+
args=(g, messages, system_prompt, model_name, temperature, api_key, model_kwargs),
|
99
96
|
)
|
100
97
|
t.start()
|
101
98
|
return g
|
102
99
|
|
103
100
|
|
104
|
-
def gemini_llm_thread(
|
105
|
-
g, messages, system_prompt, model_name, temperature, api_key, max_prompt_size=None, model_kwargs=None
|
106
|
-
):
|
101
|
+
def gemini_llm_thread(g, messages, system_prompt, model_name, temperature, api_key, model_kwargs=None):
|
107
102
|
try:
|
108
103
|
genai.configure(api_key=api_key)
|
109
|
-
max_tokens = max_prompt_size or DEFAULT_MAX_TOKENS_GEMINI
|
110
104
|
model_kwargs = model_kwargs or dict()
|
111
105
|
model_kwargs["temperature"] = temperature
|
112
|
-
model_kwargs["max_output_tokens"] =
|
106
|
+
model_kwargs["max_output_tokens"] = MAX_OUTPUT_TOKENS_GEMINI
|
113
107
|
model_kwargs["stop_sequences"] = ["Notes:\n["]
|
114
108
|
model = genai.GenerativeModel(
|
115
109
|
model_name,
|
@@ -190,3 +184,23 @@ def generate_safety_response(safety_ratings):
|
|
190
184
|
return safety_response_choice.format(
|
191
185
|
category=max_safety_category, probability=max_safety_rating.probability.name, discomfort_level=discomfort_level
|
192
186
|
)
|
187
|
+
|
188
|
+
|
189
|
+
def format_messages_for_gemini(messages: list[ChatMessage], system_prompt: str = None) -> tuple[list[str], str]:
|
190
|
+
if len(messages) == 1:
|
191
|
+
messages[0].role = "user"
|
192
|
+
return messages, system_prompt
|
193
|
+
|
194
|
+
for message in messages:
|
195
|
+
if message.role == "assistant":
|
196
|
+
message.role = "model"
|
197
|
+
|
198
|
+
# Extract system message
|
199
|
+
system_prompt = system_prompt or ""
|
200
|
+
for message in messages.copy():
|
201
|
+
if message.role == "system":
|
202
|
+
system_prompt += message.content
|
203
|
+
messages.remove(message)
|
204
|
+
system_prompt = None if is_none_or_empty(system_prompt) else system_prompt
|
205
|
+
|
206
|
+
return messages, system_prompt
|
@@ -45,6 +45,13 @@ Instructions:\n{bio}
|
|
45
45
|
""".strip()
|
46
46
|
)
|
47
47
|
|
48
|
+
# To make Gemini be more verbose and match language of user's query.
|
49
|
+
# Prompt forked from https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models
|
50
|
+
gemini_verbose_language_personality = """
|
51
|
+
All questions should be answered comprehensively with details, unless the user requests a concise response specifically.
|
52
|
+
Respond in the same language as the query.
|
53
|
+
""".strip()
|
54
|
+
|
48
55
|
## General Conversation
|
49
56
|
## --
|
50
57
|
general_conversation = PromptTemplate.from_template(
|
@@ -404,6 +411,10 @@ Tell the user exactly what the document says in response to their query, while a
|
|
404
411
|
extract_relevant_summary = PromptTemplate.from_template(
|
405
412
|
"""
|
406
413
|
{personality_context}
|
414
|
+
|
415
|
+
Conversation History:
|
416
|
+
{chat_history}
|
417
|
+
|
407
418
|
Target Query: {query}
|
408
419
|
|
409
420
|
Document Contents:
|
@@ -415,10 +426,10 @@ Collate only relevant information from the document to answer the target query.
|
|
415
426
|
|
416
427
|
personality_context = PromptTemplate.from_template(
|
417
428
|
"""
|
418
|
-
|
419
|
-
|
429
|
+
Here's some additional context about you:
|
430
|
+
{personality}
|
420
431
|
|
421
|
-
|
432
|
+
"""
|
422
433
|
)
|
423
434
|
|
424
435
|
pick_relevant_output_mode = PromptTemplate.from_template(
|
@@ -223,7 +223,7 @@ def truncate_messages(
|
|
223
223
|
) -> list[ChatMessage]:
|
224
224
|
"""Truncate messages to fit within max prompt size supported by model"""
|
225
225
|
|
226
|
-
default_tokenizer = "
|
226
|
+
default_tokenizer = "gpt-4o"
|
227
227
|
|
228
228
|
try:
|
229
229
|
if loaded_model:
|
@@ -240,13 +240,9 @@ def truncate_messages(
|
|
240
240
|
else:
|
241
241
|
encoder = download_model(model_name).tokenizer()
|
242
242
|
except:
|
243
|
-
|
244
|
-
encoder = state.pretrained_tokenizers[default_tokenizer]
|
245
|
-
else:
|
246
|
-
encoder = AutoTokenizer.from_pretrained(default_tokenizer)
|
247
|
-
state.pretrained_tokenizers[default_tokenizer] = encoder
|
243
|
+
encoder = tiktoken.encoding_for_model(default_tokenizer)
|
248
244
|
logger.debug(
|
249
|
-
f"Fallback to default chat model tokenizer: {
|
245
|
+
f"Fallback to default chat model tokenizer: {default_tokenizer}.\nConfigure tokenizer for model: {model_name} in Khoj settings to improve context stuffing."
|
250
246
|
)
|
251
247
|
|
252
248
|
# Extract system message from messages
|
khoj/processor/embeddings.py
CHANGED
@@ -13,7 +13,7 @@ from tenacity import (
|
|
13
13
|
)
|
14
14
|
from torch import nn
|
15
15
|
|
16
|
-
from khoj.utils.helpers import get_device, merge_dicts
|
16
|
+
from khoj.utils.helpers import get_device, merge_dicts, timer
|
17
17
|
from khoj.utils.rawconfig import SearchResponse
|
18
18
|
|
19
19
|
logger = logging.getLogger(__name__)
|
@@ -37,7 +37,8 @@ class EmbeddingsModel:
|
|
37
37
|
self.model_name = model_name
|
38
38
|
self.inference_endpoint = embeddings_inference_endpoint
|
39
39
|
self.api_key = embeddings_inference_endpoint_api_key
|
40
|
-
|
40
|
+
with timer(f"Loaded embedding model {self.model_name}", logger):
|
41
|
+
self.embeddings_model = SentenceTransformer(self.model_name, **self.model_kwargs)
|
41
42
|
|
42
43
|
def inference_server_enabled(self) -> bool:
|
43
44
|
return self.api_key is not None and self.inference_endpoint is not None
|
@@ -101,7 +102,8 @@ class CrossEncoderModel:
|
|
101
102
|
self.inference_endpoint = cross_encoder_inference_endpoint
|
102
103
|
self.api_key = cross_encoder_inference_endpoint_api_key
|
103
104
|
self.model_kwargs = merge_dicts(model_kwargs, {"device": get_device()})
|
104
|
-
|
105
|
+
with timer(f"Loaded cross-encoder model {self.model_name}", logger):
|
106
|
+
self.cross_encoder_model = CrossEncoder(model_name=self.model_name, **self.model_kwargs)
|
105
107
|
|
106
108
|
def inference_server_enabled(self) -> bool:
|
107
109
|
return self.api_key is not None and self.inference_endpoint is not None
|
khoj/routers/api_chat.py
CHANGED
@@ -209,14 +209,17 @@ def chat_history(
|
|
209
209
|
|
210
210
|
agent_metadata = None
|
211
211
|
if conversation.agent:
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
212
|
+
if conversation.agent.privacy_level == Agent.PrivacyLevel.PRIVATE:
|
213
|
+
conversation.agent = None
|
214
|
+
else:
|
215
|
+
agent_metadata = {
|
216
|
+
"slug": conversation.agent.slug,
|
217
|
+
"name": conversation.agent.name,
|
218
|
+
"isCreator": conversation.agent.creator == user,
|
219
|
+
"color": conversation.agent.style_color,
|
220
|
+
"icon": conversation.agent.style_icon,
|
221
|
+
"persona": conversation.agent.personality,
|
222
|
+
}
|
220
223
|
|
221
224
|
meta_log = conversation.conversation_log
|
222
225
|
meta_log.update(
|
@@ -265,14 +268,17 @@ def get_shared_chat(
|
|
265
268
|
|
266
269
|
agent_metadata = None
|
267
270
|
if conversation.agent:
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
271
|
+
if conversation.agent.privacy_level == Agent.PrivacyLevel.PRIVATE:
|
272
|
+
conversation.agent = None
|
273
|
+
else:
|
274
|
+
agent_metadata = {
|
275
|
+
"slug": conversation.agent.slug,
|
276
|
+
"name": conversation.agent.name,
|
277
|
+
"isCreator": conversation.agent.creator == user,
|
278
|
+
"color": conversation.agent.style_color,
|
279
|
+
"icon": conversation.agent.style_icon,
|
280
|
+
"persona": conversation.agent.personality,
|
281
|
+
}
|
276
282
|
|
277
283
|
meta_log = conversation.conversation_log
|
278
284
|
scrubbed_title = conversation.title if conversation.title else conversation.slug
|
@@ -758,7 +764,12 @@ async def chat(
|
|
758
764
|
yield result
|
759
765
|
|
760
766
|
response = await extract_relevant_summary(
|
761
|
-
q,
|
767
|
+
q,
|
768
|
+
contextual_data,
|
769
|
+
conversation_history=meta_log,
|
770
|
+
subscribed=subscribed,
|
771
|
+
uploaded_image_url=uploaded_image_url,
|
772
|
+
agent=agent,
|
762
773
|
)
|
763
774
|
response_log = str(response)
|
764
775
|
async for result in send_llm_response(response_log):
|
@@ -1238,7 +1249,11 @@ async def get_chat(
|
|
1238
1249
|
yield result
|
1239
1250
|
|
1240
1251
|
response = await extract_relevant_summary(
|
1241
|
-
q,
|
1252
|
+
q,
|
1253
|
+
contextual_data,
|
1254
|
+
conversation_history=meta_log,
|
1255
|
+
subscribed=subscribed,
|
1256
|
+
uploaded_image_url=uploaded_image_url,
|
1242
1257
|
)
|
1243
1258
|
response_log = str(response)
|
1244
1259
|
async for result in send_llm_response(response_log):
|
khoj/routers/helpers.py
CHANGED
@@ -208,7 +208,7 @@ def get_next_url(request: Request) -> str:
|
|
208
208
|
def construct_chat_history(conversation_history: dict, n: int = 4, agent_name="AI") -> str:
|
209
209
|
chat_history = ""
|
210
210
|
for chat in conversation_history.get("chat", [])[-n:]:
|
211
|
-
if chat["by"] == "khoj" and chat["intent"].get("type") in ["remember", "reminder"]:
|
211
|
+
if chat["by"] == "khoj" and chat["intent"].get("type") in ["remember", "reminder", "summarize"]:
|
212
212
|
chat_history += f"User: {chat['intent']['query']}\n"
|
213
213
|
chat_history += f"{agent_name}: {chat['message']}\n"
|
214
214
|
elif chat["by"] == "khoj" and ("text-to-image" in chat["intent"].get("type")):
|
@@ -351,7 +351,7 @@ async def aget_relevant_information_sources(
|
|
351
351
|
if len(agent_tools) == 0:
|
352
352
|
final_response = [ConversationCommand.Default]
|
353
353
|
else:
|
354
|
-
final_response =
|
354
|
+
final_response = [ConversationCommand.General]
|
355
355
|
return final_response
|
356
356
|
except Exception as e:
|
357
357
|
logger.error(f"Invalid response for determining relevant tools: {response}")
|
@@ -574,7 +574,12 @@ async def extract_relevant_info(q: str, corpus: str, subscribed: bool, agent: Ag
|
|
574
574
|
|
575
575
|
|
576
576
|
async def extract_relevant_summary(
|
577
|
-
q: str,
|
577
|
+
q: str,
|
578
|
+
corpus: str,
|
579
|
+
conversation_history: dict,
|
580
|
+
subscribed: bool = False,
|
581
|
+
uploaded_image_url: str = None,
|
582
|
+
agent: Agent = None,
|
578
583
|
) -> Union[str, None]:
|
579
584
|
"""
|
580
585
|
Extract relevant information for a given query from the target corpus
|
@@ -587,8 +592,11 @@ async def extract_relevant_summary(
|
|
587
592
|
prompts.personality_context.format(personality=agent.personality) if agent and agent.personality else ""
|
588
593
|
)
|
589
594
|
|
595
|
+
chat_history = construct_chat_history(conversation_history)
|
596
|
+
|
590
597
|
extract_relevant_information = prompts.extract_relevant_summary.format(
|
591
598
|
query=q,
|
599
|
+
chat_history=chat_history,
|
592
600
|
corpus=corpus.strip(),
|
593
601
|
personality_context=personality_context,
|
594
602
|
)
|
khoj/utils/helpers.py
CHANGED
@@ -321,7 +321,7 @@ command_descriptions = {
|
|
321
321
|
ConversationCommand.Notes: "Only talk about information that is available in your knowledge base.",
|
322
322
|
ConversationCommand.Default: "The default command when no command specified. It intelligently auto-switches between general and notes mode.",
|
323
323
|
ConversationCommand.Online: "Search for information on the internet.",
|
324
|
-
ConversationCommand.Webpage: "Get information from webpage
|
324
|
+
ConversationCommand.Webpage: "Get information from webpage suggested by you.",
|
325
325
|
ConversationCommand.Image: "Generate images by describing your imagination in words.",
|
326
326
|
ConversationCommand.Automation: "Automatically run your query at a specified time or interval.",
|
327
327
|
ConversationCommand.Help: "Get help with how to use or setup Khoj from the documentation",
|
@@ -329,11 +329,11 @@ command_descriptions = {
|
|
329
329
|
}
|
330
330
|
|
331
331
|
command_descriptions_for_agent = {
|
332
|
-
ConversationCommand.General: "
|
333
|
-
ConversationCommand.Notes: "
|
334
|
-
ConversationCommand.Online: "
|
335
|
-
ConversationCommand.Webpage: "
|
336
|
-
ConversationCommand.Summarize: "
|
332
|
+
ConversationCommand.General: "Agent can use the agents knowledge base and general knowledge.",
|
333
|
+
ConversationCommand.Notes: "Agent can search the users knowledge base for information.",
|
334
|
+
ConversationCommand.Online: "Agent can search the internet for information.",
|
335
|
+
ConversationCommand.Webpage: "Agent can read suggested web pages for information.",
|
336
|
+
ConversationCommand.Summarize: "Agent can read an entire document. Agents knowledge base must be a single document.",
|
337
337
|
}
|
338
338
|
|
339
339
|
tool_descriptions_for_llm = {
|
@@ -352,8 +352,8 @@ mode_descriptions_for_llm = {
|
|
352
352
|
}
|
353
353
|
|
354
354
|
mode_descriptions_for_agent = {
|
355
|
-
ConversationCommand.Image: "
|
356
|
-
ConversationCommand.Text: "
|
355
|
+
ConversationCommand.Image: "Agent can generate image in response.",
|
356
|
+
ConversationCommand.Text: "Agent can generate text in response.",
|
357
357
|
}
|
358
358
|
|
359
359
|
|