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.
- khoj/database/adapters/__init__.py +5 -0
- khoj/interface/compiled/404/index.html +1 -1
- khoj/interface/compiled/_next/static/chunks/1603-5138bb7c8035d9a6.js +1 -0
- khoj/interface/compiled/_next/static/chunks/{webpack-70a1cd2ad6a1952c.js → webpack-2b720658ccc746f2.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 +2 -2
- 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 +2 -2
- khoj/interface/compiled/share/chat/index.html +1 -1
- khoj/interface/compiled/share/chat/index.txt +2 -2
- khoj/processor/conversation/anthropic/anthropic_chat.py +6 -1
- khoj/processor/conversation/anthropic/utils.py +25 -5
- khoj/processor/conversation/google/gemini_chat.py +8 -2
- khoj/processor/conversation/google/utils.py +34 -10
- khoj/processor/conversation/offline/chat_model.py +31 -7
- khoj/processor/conversation/openai/gpt.py +14 -2
- khoj/processor/conversation/openai/utils.py +43 -9
- khoj/processor/conversation/prompts.py +0 -16
- khoj/processor/conversation/utils.py +168 -1
- khoj/processor/image/generate.py +2 -0
- khoj/processor/tools/online_search.py +14 -5
- khoj/routers/api.py +5 -0
- khoj/routers/api_chat.py +23 -2
- khoj/routers/helpers.py +65 -13
- khoj/utils/helpers.py +1 -1
- {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/METADATA +2 -1
- {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/RECORD +42 -42
- khoj/interface/compiled/_next/static/chunks/1603-b9d95833e0e025e8.js +0 -1
- /khoj/interface/compiled/_next/static/{rYy0jmrIYv76V-iyorQim → atzIseFarmC7TIwq2BgHC}/_buildManifest.js +0 -0
- /khoj/interface/compiled/_next/static/{rYy0jmrIYv76V-iyorQim → atzIseFarmC7TIwq2BgHC}/_ssgManifest.js +0 -0
- {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/WHEEL +0 -0
- {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/entry_points.txt +0 -0
- {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 '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_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 '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_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-
|
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:["
|
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
|
16
|
-
|
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(
|
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
|
23
|
-
|
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
|
-
|
64
|
-
|
68
|
+
response = chat_session.send_message(formatted_messages[-1]["parts"])
|
69
|
+
response_text = response.text
|
65
70
|
except StopCandidateException as e:
|
66
|
-
|
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}: {
|
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
|
-
|
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(
|
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
|
-
|
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
|
-
|
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
|
-
|
257
|
-
|
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,
|
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(
|
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
|
)
|