khoj 1.25.1.dev14__tar.gz → 1.25.1.dev33__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/PKG-INFO +4 -4
  2. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/README.md +2 -2
  3. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/pyproject.toml +1 -1
  4. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/adapters/__init__.py +72 -2
  5. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/admin.py +16 -0
  6. khoj-1.25.1.dev33/src/khoj/database/migrations/0068_alter_agent_output_modes.py +24 -0
  7. khoj-1.25.1.dev33/src/khoj/database/migrations/0069_webscraper_serverchatsettings_web_scraper.py +89 -0
  8. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/models/__init__.py +78 -2
  9. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/404/index.html +1 -1
  10. khoj-1.25.1.dev33/src/khoj/interface/compiled/_next/static/chunks/1603-fa3ee48860b9dc5c.js +1 -0
  11. khoj-1.25.1.dev14/src/khoj/interface/compiled/_next/static/chunks/webpack-3875a06385370d08.js → khoj-1.25.1.dev33/src/khoj/interface/compiled/_next/static/chunks/webpack-61a553b6ff44f97c.js +1 -1
  12. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/agents/index.html +1 -1
  13. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/agents/index.txt +2 -2
  14. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/automations/index.html +1 -1
  15. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/automations/index.txt +2 -2
  16. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/chat/index.html +1 -1
  17. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/chat/index.txt +2 -2
  18. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/factchecker/index.html +1 -1
  19. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/factchecker/index.txt +2 -2
  20. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/index.html +1 -1
  21. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/index.txt +2 -2
  22. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/search/index.html +1 -1
  23. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/search/index.txt +2 -2
  24. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/settings/index.html +1 -1
  25. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/settings/index.txt +2 -2
  26. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/share/chat/index.html +1 -1
  27. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/share/chat/index.txt +2 -2
  28. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/icons/agents.svg +1 -0
  29. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/icons/automation.svg +1 -0
  30. khoj-1.25.1.dev33/src/khoj/interface/web/assets/icons/chat.svg +24 -0
  31. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/login.html +11 -22
  32. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/embeddings.py +1 -0
  33. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/tools/online_search.py +135 -40
  34. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/api_chat.py +38 -27
  35. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/helpers.py +12 -11
  36. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/search_type/text_search.py +7 -2
  37. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/helpers.py +48 -5
  38. khoj-1.25.1.dev14/src/khoj/interface/compiled/_next/static/chunks/1603-67a89278e2c5dbe6.js +0 -1
  39. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/.gitignore +0 -0
  40. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/LICENSE +0 -0
  41. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/__init__.py +0 -0
  42. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/app/README.md +0 -0
  43. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/app/__init__.py +0 -0
  44. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/app/asgi.py +0 -0
  45. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/app/settings.py +0 -0
  46. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/app/urls.py +0 -0
  47. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/configure.py +0 -0
  48. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/__init__.py +0 -0
  49. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/apps.py +0 -0
  50. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/management/__init__.py +0 -0
  51. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/management/commands/__init__.py +0 -0
  52. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/management/commands/change_generated_images_url.py +0 -0
  53. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/management/commands/convert_images_png_to_webp.py +0 -0
  54. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0001_khojuser.py +0 -0
  55. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0002_googleuser.py +0 -0
  56. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0003_vector_extension.py +0 -0
  57. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0004_content_types_and_more.py +0 -0
  58. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0005_embeddings_corpus_id.py +0 -0
  59. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0006_embeddingsdates.py +0 -0
  60. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0007_add_conversation.py +0 -0
  61. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0008_alter_conversation_conversation_log.py +0 -0
  62. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0009_khojapiuser.py +0 -0
  63. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0010_chatmodeloptions_and_more.py +0 -0
  64. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0010_rename_embeddings_entry_and_more.py +0 -0
  65. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0011_merge_20231102_0138.py +0 -0
  66. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0012_entry_file_source.py +0 -0
  67. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0013_subscription.py +0 -0
  68. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0014_alter_googleuser_picture.py +0 -0
  69. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0015_alter_subscription_user.py +0 -0
  70. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0016_alter_subscription_renewal_date.py +0 -0
  71. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0017_searchmodel.py +0 -0
  72. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0018_searchmodelconfig_delete_searchmodel.py +0 -0
  73. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0019_alter_googleuser_family_name_and_more.py +0 -0
  74. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0020_reflectivequestion.py +0 -0
  75. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0021_speechtotextmodeloptions_and_more.py +0 -0
  76. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0022_texttoimagemodelconfig.py +0 -0
  77. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0023_usersearchmodelconfig.py +0 -0
  78. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0024_alter_entry_embeddings.py +0 -0
  79. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0025_clientapplication_khojuser_phone_number_and_more.py +0 -0
  80. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0025_searchmodelconfig_embeddings_inference_endpoint_and_more.py +0 -0
  81. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0026_searchmodelconfig_cross_encoder_inference_endpoint_and_more.py +0 -0
  82. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0027_merge_20240118_1324.py +0 -0
  83. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0028_khojuser_verified_phone_number.py +0 -0
  84. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0029_userrequests.py +0 -0
  85. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0030_conversation_slug_and_title.py +0 -0
  86. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0031_agent_conversation_agent.py +0 -0
  87. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0031_alter_googleuser_locale.py +0 -0
  88. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0032_merge_20240322_0427.py +0 -0
  89. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0033_rename_tuning_agent_personality.py +0 -0
  90. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0034_alter_chatmodeloptions_chat_model.py +0 -0
  91. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0035_processlock.py +0 -0
  92. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0036_alter_processlock_name.py +0 -0
  93. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0036_delete_offlinechatprocessorconversationconfig.py +0 -0
  94. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0036_publicconversation.py +0 -0
  95. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0037_chatmodeloptions_openai_config_and_more.py +0 -0
  96. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0037_searchmodelconfig_bi_encoder_docs_encode_config_and_more.py +0 -0
  97. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0038_merge_20240425_0857.py +0 -0
  98. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0038_merge_20240426_1640.py +0 -0
  99. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0039_merge_20240501_0301.py +0 -0
  100. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0040_alter_processlock_name.py +0 -0
  101. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0040_merge_20240504_1010.py +0 -0
  102. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0041_merge_20240505_1234.py +0 -0
  103. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0042_serverchatsettings.py +0 -0
  104. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0043_alter_chatmodeloptions_model_type.py +0 -0
  105. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0044_conversation_file_filters.py +0 -0
  106. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0045_fileobject.py +0 -0
  107. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0046_khojuser_email_verification_code_and_more.py +0 -0
  108. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0047_alter_entry_file_type.py +0 -0
  109. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0048_voicemodeloption_uservoicemodelconfig.py +0 -0
  110. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0049_datastore.py +0 -0
  111. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0049_texttoimagemodelconfig_api_key_and_more.py +0 -0
  112. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0050_alter_processlock_name.py +0 -0
  113. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0051_merge_20240702_1220.py +0 -0
  114. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0052_alter_searchmodelconfig_bi_encoder_docs_encode_config_and_more.py +0 -0
  115. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0053_agent_style_color_agent_style_icon.py +0 -0
  116. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0054_alter_agent_style_color.py +0 -0
  117. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0055_alter_agent_style_icon.py +0 -0
  118. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0056_chatmodeloptions_vision_enabled.py +0 -0
  119. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0056_searchmodelconfig_cross_encoder_model_config.py +0 -0
  120. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0057_merge_20240816_1409.py +0 -0
  121. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0057_remove_serverchatsettings_default_model_and_more.py +0 -0
  122. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0058_alter_chatmodeloptions_chat_model.py +0 -0
  123. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0059_searchmodelconfig_bi_encoder_confidence_threshold.py +0 -0
  124. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0060_merge_20240905_1828.py +0 -0
  125. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0061_alter_chatmodeloptions_model_type.py +0 -0
  126. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0061_alter_texttoimagemodelconfig_model_type.py +0 -0
  127. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0062_merge_20240913_0222.py +0 -0
  128. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0063_conversation_temp_id.py +0 -0
  129. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0064_remove_conversation_temp_id_alter_conversation_id.py +0 -0
  130. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0065_remove_agent_avatar_remove_agent_public_and_more.py +0 -0
  131. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0066_remove_agent_tools_agent_input_tools_and_more.py +0 -0
  132. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/0067_alter_agent_style_icon.py +0 -0
  133. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/migrations/__init__.py +0 -0
  134. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/database/tests.py +0 -0
  135. {khoj-1.25.1.dev14/src/khoj/interface/compiled/_next/static/y6sFTl0gpqdS79jlpmIvx → khoj-1.25.1.dev33/src/khoj/interface/compiled/_next/static/NaOqImuryddEYz7a7MQ6j}/_buildManifest.js +0 -0
  136. {khoj-1.25.1.dev14/src/khoj/interface/compiled/_next/static/y6sFTl0gpqdS79jlpmIvx → khoj-1.25.1.dev33/src/khoj/interface/compiled/_next/static/NaOqImuryddEYz7a7MQ6j}/_ssgManifest.js +0 -0
  137. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/121-7024f479c297aef0.js +0 -0
  138. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/2697-a38d01981ad3bdf8.js +0 -0
  139. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/3062-71ed4b46ac2bb87c.js +0 -0
  140. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/3110-ef2cacd1b8d79ad8.js +0 -0
  141. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/3678-ef0d20e267e9f010.js +0 -0
  142. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/4051-2cf66369d6ca0f1d.js +0 -0
  143. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/4086-2c74808ba38a5a0f.js +0 -0
  144. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/4504-1629487c8bc82203.js +0 -0
  145. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/477-ec86e93db10571c1.js +0 -0
  146. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/51-e8f5bdb69b5ea421.js +0 -0
  147. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/6297-d1c842ed3f714ab0.js +0 -0
  148. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/7023-a5bf5744d19b3bd3.js +0 -0
  149. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/7762-79f2205740622b5c.js +0 -0
  150. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/9001-3b27af6d5f21df44.js +0 -0
  151. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/9178-f208a3e6404714a9.js +0 -0
  152. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/9417-1d158bf46d3a0dc9.js +0 -0
  153. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/9479-563e4d61f91d5a7c.js +0 -0
  154. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/_not-found/page-07ff4ab42b07845e.js +0 -0
  155. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/agents/layout-75636ab3a413fa8e.js +0 -0
  156. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/agents/page-b406d166301c4c7d.js +0 -0
  157. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/automations/layout-27c28e923c9b1ff0.js +0 -0
  158. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/automations/page-2edc21f30819def4.js +0 -0
  159. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/chat/layout-96fcf62857bf8f30.js +0 -0
  160. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/chat/page-4309c98e6dc497dd.js +0 -0
  161. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/factchecker/layout-7b30c541c05fb904.js +0 -0
  162. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/factchecker/page-f2c83e3a87a28657.js +0 -0
  163. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/layout-d0f0a9067427fb20.js +0 -0
  164. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/page-ab9beb5a26e396f7.js +0 -0
  165. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/search/layout-3720f1362310bebb.js +0 -0
  166. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/search/page-b807caebd7f278c7.js +0 -0
  167. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/settings/layout-a8f33dfe92f997fb.js +0 -0
  168. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/settings/page-2932356ad11c2f7b.js +0 -0
  169. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-2df56074e42adaa0.js +0 -0
  170. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/page-a736a0826570af2b.js +0 -0
  171. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/d3ac728e-a9e3522eef9b6b28.js +0 -0
  172. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/fd9d1056-2b978342deb60015.js +0 -0
  173. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js +0 -0
  174. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/main-app-6d6ee3495efe03d4.js +0 -0
  175. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/main-f84cd3c1873cd842.js +0 -0
  176. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/pages/_app-f870474a17b7f2fd.js +0 -0
  177. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js +0 -0
  178. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
  179. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/css/2272c73fc7a3b571.css +0 -0
  180. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/css/3e1f1fdd70775091.css +0 -0
  181. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/css/467a524c75e7d7c0.css +0 -0
  182. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/css/4cae6c0e5c72fb2d.css +0 -0
  183. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/css/553f9cdcc7a2bcd6.css +0 -0
  184. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/css/5a400c87d295e68a.css +0 -0
  185. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/css/b1094827d745306b.css +0 -0
  186. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/css/b9a6bf04305d98d7.css +0 -0
  187. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/css/c808691c459e3887.css +0 -0
  188. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/0e790e04fd40ad16-s.p.woff2 +0 -0
  189. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/4221e1667cd19c7d-s.woff2 +0 -0
  190. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/6c276159aa0eb14b-s.woff2 +0 -0
  191. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/6cc0b9500e4f9168-s.woff2 +0 -0
  192. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/9d9319a7a2ac39c6-s.woff2 +0 -0
  193. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.1608a09b.woff +0 -0
  194. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.4aafdb68.ttf +0 -0
  195. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.a79f1c31.woff2 +0 -0
  196. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.b6770918.woff +0 -0
  197. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.cce5b8ec.ttf +0 -0
  198. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.ec17d132.woff2 +0 -0
  199. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.07ef19e7.ttf +0 -0
  200. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.55fac258.woff2 +0 -0
  201. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.dad44a7f.woff +0 -0
  202. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.9f256b85.woff +0 -0
  203. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.b18f59e1.ttf +0 -0
  204. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.d42a5579.woff2 +0 -0
  205. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.7c187121.woff +0 -0
  206. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.d3c882a6.woff2 +0 -0
  207. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.ed38e79f.ttf +0 -0
  208. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.b74a1a8b.ttf +0 -0
  209. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.c3fb5ac2.woff2 +0 -0
  210. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.d181c465.woff +0 -0
  211. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.6f2bb1df.woff2 +0 -0
  212. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.70d8b0a5.ttf +0 -0
  213. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.e3f82f9d.woff +0 -0
  214. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.47373d1e.ttf +0 -0
  215. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.8916142b.woff2 +0 -0
  216. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.9024d815.woff +0 -0
  217. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.0462f03b.woff2 +0 -0
  218. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.7f51fe03.woff +0 -0
  219. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.b7f8fe9b.ttf +0 -0
  220. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.572d331f.woff2 +0 -0
  221. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.a879cf83.ttf +0 -0
  222. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.f1035d8d.woff +0 -0
  223. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.5295ba48.woff +0 -0
  224. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.939bc644.ttf +0 -0
  225. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.f28c23ac.woff2 +0 -0
  226. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.8c5b5494.woff2 +0 -0
  227. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.94e1e8dc.ttf +0 -0
  228. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.bf59d231.woff +0 -0
  229. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.3b1e59b3.woff2 +0 -0
  230. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.7c9bc82b.woff +0 -0
  231. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.b4c20c84.ttf +0 -0
  232. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.74048478.woff +0 -0
  233. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.ba21ed5f.woff2 +0 -0
  234. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.d4d7ba48.ttf +0 -0
  235. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.03e9641d.woff2 +0 -0
  236. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.07505710.woff +0 -0
  237. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.fe9cbbe1.ttf +0 -0
  238. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.e1e279cb.woff +0 -0
  239. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.eae34984.woff2 +0 -0
  240. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.fabc004a.ttf +0 -0
  241. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.57727022.woff +0 -0
  242. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.5916a24f.woff2 +0 -0
  243. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.d6b476ec.ttf +0 -0
  244. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.9acaf01c.woff +0 -0
  245. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.a144ef58.ttf +0 -0
  246. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.b4230e7e.woff2 +0 -0
  247. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.10d95fd3.woff2 +0 -0
  248. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.7a996c9d.woff +0 -0
  249. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.fbccdabe.ttf +0 -0
  250. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.6258592b.woff +0 -0
  251. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.a8709e36.woff2 +0 -0
  252. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.d97aaf4a.ttf +0 -0
  253. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/a75c8ea86756d52d-s.woff2 +0 -0
  254. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/abce7c400ca31a51-s.woff2 +0 -0
  255. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/f759c939737fb668-s.woff2 +0 -0
  256. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp +0 -0
  257. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp +0 -0
  258. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/globe.98e105ca.webp +0 -0
  259. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp +0 -0
  260. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/agents.svg +0 -0
  261. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/assets/icons/khoj_lantern.ico +0 -0
  262. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/assets/icons/khoj_lantern_128x128.png +0 -0
  263. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/assets/icons/khoj_lantern_256x256.png +0 -0
  264. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/assets/icons/khoj_lantern_logomarktype_1200x630.png +0 -0
  265. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/assets/samples/desktop-browse-draw-sample.png +0 -0
  266. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/assets/samples/desktop-plain-chat-sample.png +0 -0
  267. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png +0 -0
  268. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png +0 -0
  269. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png +0 -0
  270. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png +0 -0
  271. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/automation.svg +0 -0
  272. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/chat.svg +0 -0
  273. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/close.svg +0 -0
  274. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/copy-button-success.svg +0 -0
  275. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/copy-button.svg +0 -0
  276. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/khoj.webmanifest +0 -0
  277. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/logo.svg +0 -0
  278. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/send.svg +0 -0
  279. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/share.svg +0 -0
  280. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/thumbs-down.svg +0 -0
  281. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/compiled/thumbs-up.svg +0 -0
  282. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/email/feedback.html +0 -0
  283. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/email/magic_link.html +0 -0
  284. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/email/task.html +0 -0
  285. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/email/welcome.html +0 -0
  286. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/icons/favicon-128x128.ico +0 -0
  287. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/icons/github.svg +0 -0
  288. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/icons/khoj-logo-sideways-200.png +0 -0
  289. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/icons/khoj-logo-sideways-500.png +0 -0
  290. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/icons/khoj-logo-sideways.svg +0 -0
  291. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/icons/khoj.svg +0 -0
  292. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/icons/logotype.svg +0 -0
  293. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/icons/search.svg +0 -0
  294. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/icons/sync.svg +0 -0
  295. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/khoj.css +0 -0
  296. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/assets/utils.js +0 -0
  297. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/base_config.html +0 -0
  298. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/content_source_github_input.html +0 -0
  299. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/interface/web/utils.html +0 -0
  300. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/main.py +0 -0
  301. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/manage.py +0 -0
  302. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/migrations/__init__.py +0 -0
  303. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/migrations/migrate_offline_chat_default_model.py +0 -0
  304. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/migrations/migrate_offline_chat_default_model_2.py +0 -0
  305. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/migrations/migrate_offline_chat_schema.py +0 -0
  306. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/migrations/migrate_offline_model.py +0 -0
  307. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/migrations/migrate_processor_config_openai.py +0 -0
  308. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/migrations/migrate_server_pg.py +0 -0
  309. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/migrations/migrate_version.py +0 -0
  310. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/__init__.py +0 -0
  311. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/__init__.py +0 -0
  312. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/docx/__init__.py +0 -0
  313. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/docx/docx_to_entries.py +0 -0
  314. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/github/__init__.py +0 -0
  315. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/github/github_to_entries.py +0 -0
  316. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/images/__init__.py +0 -0
  317. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/images/image_to_entries.py +0 -0
  318. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/markdown/__init__.py +0 -0
  319. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/markdown/markdown_to_entries.py +0 -0
  320. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/notion/notion_to_entries.py +0 -0
  321. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/org_mode/__init__.py +0 -0
  322. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/org_mode/org_to_entries.py +0 -0
  323. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/org_mode/orgnode.py +0 -0
  324. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/pdf/__init__.py +0 -0
  325. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/pdf/pdf_to_entries.py +0 -0
  326. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/plaintext/__init__.py +0 -0
  327. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/plaintext/plaintext_to_entries.py +0 -0
  328. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/content/text_to_entries.py +0 -0
  329. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/__init__.py +0 -0
  330. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/anthropic/__init__.py +0 -0
  331. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/anthropic/anthropic_chat.py +0 -0
  332. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/anthropic/utils.py +0 -0
  333. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/google/__init__.py +0 -0
  334. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/google/gemini_chat.py +0 -0
  335. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/google/utils.py +0 -0
  336. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/offline/__init__.py +0 -0
  337. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/offline/chat_model.py +0 -0
  338. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/offline/utils.py +0 -0
  339. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/offline/whisper.py +0 -0
  340. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/openai/__init__.py +0 -0
  341. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/openai/gpt.py +0 -0
  342. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/openai/utils.py +0 -0
  343. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/openai/whisper.py +0 -0
  344. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/prompts.py +0 -0
  345. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/conversation/utils.py +0 -0
  346. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/image/generate.py +0 -0
  347. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/speech/__init__.py +0 -0
  348. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/speech/text_to_speech.py +0 -0
  349. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/processor/tools/__init__.py +0 -0
  350. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/__init__.py +0 -0
  351. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/api.py +0 -0
  352. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/api_agents.py +0 -0
  353. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/api_content.py +0 -0
  354. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/api_model.py +0 -0
  355. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/api_phone.py +0 -0
  356. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/auth.py +0 -0
  357. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/email.py +0 -0
  358. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/notion.py +0 -0
  359. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/storage.py +0 -0
  360. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/subscription.py +0 -0
  361. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/twilio.py +0 -0
  362. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/routers/web_client.py +0 -0
  363. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/search_filter/__init__.py +0 -0
  364. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/search_filter/base_filter.py +0 -0
  365. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/search_filter/date_filter.py +0 -0
  366. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/search_filter/file_filter.py +0 -0
  367. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/search_filter/word_filter.py +0 -0
  368. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/search_type/__init__.py +0 -0
  369. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/__init__.py +0 -0
  370. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/cli.py +0 -0
  371. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/config.py +0 -0
  372. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/constants.py +0 -0
  373. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/fs_syncer.py +0 -0
  374. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/initialization.py +0 -0
  375. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/jsonl.py +0 -0
  376. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/models.py +0 -0
  377. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/rawconfig.py +0 -0
  378. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/state.py +0 -0
  379. {khoj-1.25.1.dev14 → khoj-1.25.1.dev33}/src/khoj/utils/yaml.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: khoj
3
- Version: 1.25.1.dev14
3
+ Version: 1.25.1.dev33
4
4
  Summary: Your Second Brain
5
5
  Project-URL: Homepage, https://khoj.dev
6
6
  Project-URL: Documentation, https://docs.khoj.dev
@@ -32,7 +32,7 @@ Requires-Dist: dateparser>=1.1.1
32
32
  Requires-Dist: defusedxml==0.7.1
33
33
  Requires-Dist: django-apscheduler==0.6.2
34
34
  Requires-Dist: django-phonenumber-field==7.3.0
35
- Requires-Dist: django==5.0.8
35
+ Requires-Dist: django==5.0.9
36
36
  Requires-Dist: docx2txt==0.8
37
37
  Requires-Dist: einops==0.8.0
38
38
  Requires-Dist: fastapi>=0.110.0
@@ -138,8 +138,8 @@ Description-Content-Type: text/markdown
138
138
  - Chat with any local or online LLM (e.g llama3, qwen, gemma, mistral, gpt, claude, gemini).
139
139
  - Get answers from the internet and your docs (including image, pdf, markdown, org-mode, word, notion files).
140
140
  - Access it from your Browser, Obsidian, Emacs, Desktop, Phone or Whatsapp.
141
- - Build agents with custom knowledge bases and tools.
142
- - Create automations to get personal newsletters and smart notifications.
141
+ - Create agents with custom knowledge, persona, chat model and tools to take on any role.
142
+ - Automate away repetitive research. Get personal newsletters and smart notifications delivered to your inbox.
143
143
  - Find relevant docs quickly and easily using our advanced semantic search.
144
144
  - Generate images, talk out loud, play your messages.
145
145
  - Khoj is open-source, self-hostable. Always.
@@ -38,8 +38,8 @@
38
38
  - Chat with any local or online LLM (e.g llama3, qwen, gemma, mistral, gpt, claude, gemini).
39
39
  - Get answers from the internet and your docs (including image, pdf, markdown, org-mode, word, notion files).
40
40
  - Access it from your Browser, Obsidian, Emacs, Desktop, Phone or Whatsapp.
41
- - Build agents with custom knowledge bases and tools.
42
- - Create automations to get personal newsletters and smart notifications.
41
+ - Create agents with custom knowledge, persona, chat model and tools to take on any role.
42
+ - Automate away repetitive research. Get personal newsletters and smart notifications delivered to your inbox.
43
43
  - Find relevant docs quickly and easily using our advanced semantic search.
44
44
  - Generate images, talk out loud, play your messages.
45
45
  - Khoj is open-source, self-hostable. Always.
@@ -63,7 +63,7 @@ dependencies = [
63
63
  "tenacity == 8.3.0",
64
64
  "anyio == 3.7.1",
65
65
  "pymupdf >= 1.23.5",
66
- "django == 5.0.8",
66
+ "django == 5.0.9",
67
67
  "authlib == 1.2.1",
68
68
  "llama-cpp-python == 0.2.88",
69
69
  "itsdangerous == 2.1.2",
@@ -1,6 +1,7 @@
1
1
  import json
2
2
  import logging
3
3
  import math
4
+ import os
4
5
  import random
5
6
  import re
6
7
  import secrets
@@ -10,7 +11,6 @@ from enum import Enum
10
11
  from typing import Callable, Iterable, List, Optional, Type
11
12
 
12
13
  import cron_descriptor
13
- import django
14
14
  from apscheduler.job import Job
15
15
  from asgiref.sync import sync_to_async
16
16
  from django.contrib.sessions.backends.db import SessionStore
@@ -52,6 +52,7 @@ from khoj.database.models import (
52
52
  UserTextToImageModelConfig,
53
53
  UserVoiceModelConfig,
54
54
  VoiceModelOption,
55
+ WebScraper,
55
56
  )
56
57
  from khoj.processor.conversation import prompts
57
58
  from khoj.search_filter.date_filter import DateFilter
@@ -59,7 +60,12 @@ from khoj.search_filter.file_filter import FileFilter
59
60
  from khoj.search_filter.word_filter import WordFilter
60
61
  from khoj.utils import state
61
62
  from khoj.utils.config import OfflineChatProcessorModel
62
- from khoj.utils.helpers import generate_random_name, is_none_or_empty, timer
63
+ from khoj.utils.helpers import (
64
+ generate_random_name,
65
+ in_debug_mode,
66
+ is_none_or_empty,
67
+ timer,
68
+ )
63
69
 
64
70
  logger = logging.getLogger(__name__)
65
71
 
@@ -1031,6 +1037,70 @@ class ConversationAdapters:
1031
1037
  return server_chat_settings.chat_advanced
1032
1038
  return await ConversationAdapters.aget_default_conversation_config(user)
1033
1039
 
1040
+ @staticmethod
1041
+ async def aget_server_webscraper():
1042
+ server_chat_settings = await ServerChatSettings.objects.filter().prefetch_related("web_scraper").afirst()
1043
+ if server_chat_settings is not None and server_chat_settings.web_scraper is not None:
1044
+ return server_chat_settings.web_scraper
1045
+ return None
1046
+
1047
+ @staticmethod
1048
+ async def aget_enabled_webscrapers() -> list[WebScraper]:
1049
+ enabled_scrapers: list[WebScraper] = []
1050
+ server_webscraper = await ConversationAdapters.aget_server_webscraper()
1051
+ if server_webscraper:
1052
+ # Only use the webscraper set in the server chat settings
1053
+ enabled_scrapers = [server_webscraper]
1054
+ if not enabled_scrapers:
1055
+ # Use the enabled web scrapers, ordered by priority, until get web page content
1056
+ enabled_scrapers = [scraper async for scraper in WebScraper.objects.all().order_by("priority").aiterator()]
1057
+ if not enabled_scrapers:
1058
+ # Use scrapers enabled via environment variables
1059
+ if os.getenv("FIRECRAWL_API_KEY"):
1060
+ api_url = os.getenv("FIRECRAWL_API_URL", "https://api.firecrawl.dev")
1061
+ enabled_scrapers.append(
1062
+ WebScraper(
1063
+ type=WebScraper.WebScraperType.FIRECRAWL,
1064
+ name=WebScraper.WebScraperType.FIRECRAWL.capitalize(),
1065
+ api_key=os.getenv("FIRECRAWL_API_KEY"),
1066
+ api_url=api_url,
1067
+ )
1068
+ )
1069
+ if os.getenv("OLOSTEP_API_KEY"):
1070
+ api_url = os.getenv("OLOSTEP_API_URL", "https://agent.olostep.com/olostep-p2p-incomingAPI")
1071
+ enabled_scrapers.append(
1072
+ WebScraper(
1073
+ type=WebScraper.WebScraperType.OLOSTEP,
1074
+ name=WebScraper.WebScraperType.OLOSTEP.capitalize(),
1075
+ api_key=os.getenv("OLOSTEP_API_KEY"),
1076
+ api_url=api_url,
1077
+ )
1078
+ )
1079
+ # Jina is the default fallback scrapers to use as it does not require an API key
1080
+ api_url = os.getenv("JINA_READER_API_URL", "https://r.jina.ai/")
1081
+ enabled_scrapers.append(
1082
+ WebScraper(
1083
+ type=WebScraper.WebScraperType.JINA,
1084
+ name=WebScraper.WebScraperType.JINA.capitalize(),
1085
+ api_key=os.getenv("JINA_API_KEY"),
1086
+ api_url=api_url,
1087
+ )
1088
+ )
1089
+
1090
+ # Only enable the direct web page scraper by default in self-hosted single user setups.
1091
+ # Useful for reading webpages on your intranet.
1092
+ if state.anonymous_mode or in_debug_mode():
1093
+ enabled_scrapers.append(
1094
+ WebScraper(
1095
+ type=WebScraper.WebScraperType.DIRECT,
1096
+ name=WebScraper.WebScraperType.DIRECT.capitalize(),
1097
+ api_key=None,
1098
+ api_url=None,
1099
+ )
1100
+ )
1101
+
1102
+ return enabled_scrapers
1103
+
1034
1104
  @staticmethod
1035
1105
  def create_conversation_from_public_conversation(
1036
1106
  user: KhojUser, public_conversation: PublicConversation, client_app: ClientApplication
@@ -31,6 +31,7 @@ from khoj.database.models import (
31
31
  UserSearchModelConfig,
32
32
  UserVoiceModelConfig,
33
33
  VoiceModelOption,
34
+ WebScraper,
34
35
  )
35
36
  from khoj.utils.helpers import ImageIntentType
36
37
 
@@ -198,9 +199,24 @@ class ServerChatSettingsAdmin(admin.ModelAdmin):
198
199
  list_display = (
199
200
  "chat_default",
200
201
  "chat_advanced",
202
+ "web_scraper",
201
203
  )
202
204
 
203
205
 
206
+ @admin.register(WebScraper)
207
+ class WebScraperAdmin(admin.ModelAdmin):
208
+ list_display = (
209
+ "priority",
210
+ "name",
211
+ "type",
212
+ "api_key",
213
+ "api_url",
214
+ "created_at",
215
+ )
216
+ search_fields = ("name", "api_key", "api_url", "type")
217
+ ordering = ("priority",)
218
+
219
+
204
220
  @admin.register(Conversation)
205
221
  class ConversationAdmin(admin.ModelAdmin):
206
222
  list_display = (
@@ -0,0 +1,24 @@
1
+ # Generated by Django 5.0.8 on 2024-10-17 18:13
2
+
3
+ import django.contrib.postgres.fields
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+ dependencies = [
9
+ ("database", "0067_alter_agent_style_icon"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="agent",
15
+ name="output_modes",
16
+ field=django.contrib.postgres.fields.ArrayField(
17
+ base_field=models.CharField(
18
+ choices=[("text", "Text"), ("image", "Image"), ("automation", "Automation")], max_length=200
19
+ ),
20
+ default=list,
21
+ size=None,
22
+ ),
23
+ ),
24
+ ]
@@ -0,0 +1,89 @@
1
+ # Generated by Django 5.0.8 on 2024-10-18 00:41
2
+
3
+ import django.db.models.deletion
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+ dependencies = [
9
+ ("database", "0068_alter_agent_output_modes"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.CreateModel(
14
+ name="WebScraper",
15
+ fields=[
16
+ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
17
+ ("created_at", models.DateTimeField(auto_now_add=True)),
18
+ ("updated_at", models.DateTimeField(auto_now=True)),
19
+ (
20
+ "name",
21
+ models.CharField(
22
+ blank=True,
23
+ default=None,
24
+ help_text="Friendly name. If not set, it will be set to the type of the scraper.",
25
+ max_length=200,
26
+ null=True,
27
+ unique=True,
28
+ ),
29
+ ),
30
+ (
31
+ "type",
32
+ models.CharField(
33
+ choices=[
34
+ ("Firecrawl", "Firecrawl"),
35
+ ("Olostep", "Olostep"),
36
+ ("Jina", "Jina"),
37
+ ("Direct", "Direct"),
38
+ ],
39
+ default="Jina",
40
+ max_length=20,
41
+ ),
42
+ ),
43
+ (
44
+ "api_key",
45
+ models.CharField(
46
+ blank=True,
47
+ default=None,
48
+ help_text="API key of the web scraper. Only set if scraper service requires an API key. Default is set from env var.",
49
+ max_length=200,
50
+ null=True,
51
+ ),
52
+ ),
53
+ (
54
+ "api_url",
55
+ models.URLField(
56
+ blank=True,
57
+ default=None,
58
+ help_text="API URL of the web scraper. Only set if scraper service on non-default URL.",
59
+ null=True,
60
+ ),
61
+ ),
62
+ (
63
+ "priority",
64
+ models.IntegerField(
65
+ blank=True,
66
+ default=None,
67
+ help_text="Priority of the web scraper. Lower numbers run first.",
68
+ null=True,
69
+ unique=True,
70
+ ),
71
+ ),
72
+ ],
73
+ options={
74
+ "abstract": False,
75
+ },
76
+ ),
77
+ migrations.AddField(
78
+ model_name="serverchatsettings",
79
+ name="web_scraper",
80
+ field=models.ForeignKey(
81
+ blank=True,
82
+ default=None,
83
+ null=True,
84
+ on_delete=django.db.models.deletion.CASCADE,
85
+ related_name="web_scraper",
86
+ to="database.webscraper",
87
+ ),
88
+ ),
89
+ ]
@@ -1,3 +1,4 @@
1
+ import os
1
2
  import re
2
3
  import uuid
3
4
  from random import choice
@@ -11,8 +12,6 @@ from django.dispatch import receiver
11
12
  from pgvector.django import VectorField
12
13
  from phonenumber_field.modelfields import PhoneNumberField
13
14
 
14
- from khoj.utils.helpers import ConversationCommand
15
-
16
15
 
17
16
  class BaseModel(models.Model):
18
17
  created_at = models.DateTimeField(auto_now_add=True)
@@ -174,6 +173,7 @@ class Agent(BaseModel):
174
173
  # These map to various ConversationCommand types
175
174
  TEXT = "text"
176
175
  IMAGE = "image"
176
+ AUTOMATION = "automation"
177
177
 
178
178
  creator = models.ForeignKey(
179
179
  KhojUser, on_delete=models.CASCADE, default=None, null=True, blank=True
@@ -243,6 +243,79 @@ class GithubRepoConfig(BaseModel):
243
243
  github_config = models.ForeignKey(GithubConfig, on_delete=models.CASCADE, related_name="githubrepoconfig")
244
244
 
245
245
 
246
+ class WebScraper(BaseModel):
247
+ class WebScraperType(models.TextChoices):
248
+ FIRECRAWL = "Firecrawl"
249
+ OLOSTEP = "Olostep"
250
+ JINA = "Jina"
251
+ DIRECT = "Direct"
252
+
253
+ name = models.CharField(
254
+ max_length=200,
255
+ default=None,
256
+ null=True,
257
+ blank=True,
258
+ unique=True,
259
+ help_text="Friendly name. If not set, it will be set to the type of the scraper.",
260
+ )
261
+ type = models.CharField(max_length=20, choices=WebScraperType.choices, default=WebScraperType.JINA)
262
+ api_key = models.CharField(
263
+ max_length=200,
264
+ default=None,
265
+ null=True,
266
+ blank=True,
267
+ help_text="API key of the web scraper. Only set if scraper service requires an API key. Default is set from env var.",
268
+ )
269
+ api_url = models.URLField(
270
+ max_length=200,
271
+ default=None,
272
+ null=True,
273
+ blank=True,
274
+ help_text="API URL of the web scraper. Only set if scraper service on non-default URL.",
275
+ )
276
+ priority = models.IntegerField(
277
+ default=None,
278
+ null=True,
279
+ blank=True,
280
+ unique=True,
281
+ help_text="Priority of the web scraper. Lower numbers run first.",
282
+ )
283
+
284
+ def clean(self):
285
+ error = {}
286
+ if self.name is None:
287
+ self.name = self.type.capitalize()
288
+ if self.api_url is None:
289
+ if self.type == self.WebScraperType.FIRECRAWL:
290
+ self.api_url = os.getenv("FIRECRAWL_API_URL", "https://api.firecrawl.dev")
291
+ elif self.type == self.WebScraperType.OLOSTEP:
292
+ self.api_url = os.getenv("OLOSTEP_API_URL", "https://agent.olostep.com/olostep-p2p-incomingAPI")
293
+ elif self.type == self.WebScraperType.JINA:
294
+ self.api_url = os.getenv("JINA_READER_API_URL", "https://r.jina.ai/")
295
+ if self.api_key is None:
296
+ if self.type == self.WebScraperType.FIRECRAWL:
297
+ self.api_key = os.getenv("FIRECRAWL_API_KEY")
298
+ if not self.api_key and self.api_url == "https://api.firecrawl.dev":
299
+ error["api_key"] = "Set API key to use default Firecrawl. Get API key from https://firecrawl.dev."
300
+ elif self.type == self.WebScraperType.OLOSTEP:
301
+ self.api_key = os.getenv("OLOSTEP_API_KEY")
302
+ if self.api_key is None:
303
+ error["api_key"] = "Set API key to use Olostep. Get API key from https://olostep.com/."
304
+ elif self.type == self.WebScraperType.JINA:
305
+ self.api_key = os.getenv("JINA_API_KEY")
306
+ if error:
307
+ raise ValidationError(error)
308
+
309
+ def save(self, *args, **kwargs):
310
+ self.clean()
311
+
312
+ if self.priority is None:
313
+ max_priority = WebScraper.objects.aggregate(models.Max("priority"))["priority__max"]
314
+ self.priority = max_priority + 1 if max_priority else 1
315
+
316
+ super().save(*args, **kwargs)
317
+
318
+
246
319
  class ServerChatSettings(BaseModel):
247
320
  chat_default = models.ForeignKey(
248
321
  ChatModelOptions, on_delete=models.CASCADE, default=None, null=True, blank=True, related_name="chat_default"
@@ -250,6 +323,9 @@ class ServerChatSettings(BaseModel):
250
323
  chat_advanced = models.ForeignKey(
251
324
  ChatModelOptions, on_delete=models.CASCADE, default=None, null=True, blank=True, related_name="chat_advanced"
252
325
  )
326
+ web_scraper = models.ForeignKey(
327
+ WebScraper, on_delete=models.CASCADE, default=None, null=True, blank=True, related_name="web_scraper"
328
+ )
253
329
 
254
330
 
255
331
  class LocalOrgConfig(BaseModel):
@@ -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/b9a6bf04305d98d7.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-3875a06385370d08.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><meta name="robots" content="noindex"/><meta http-equiv="Content-Security-Policy" content="default-src &#x27;self&#x27; https://assets.khoj.dev; media-src * blob:; script-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; &#x27;unsafe-eval&#x27;; connect-src &#x27;self&#x27; blob: https://ipapi.co/json ws://localhost:42110; style-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; https://fonts.googleapis.com; img-src &#x27;self&#x27; data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src &#x27;self&#x27; https://assets.khoj.dev https://fonts.gstatic.com; child-src &#x27;none&#x27;; object-src &#x27;none&#x27;;"/><title>404: This page could not be found.</title><title>Khoj AI - Home</title><meta name="description" content="Your Second Brain."/><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"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>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)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-3875a06385370d08.js" async=""></script><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/b9a6bf04305d98d7.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"4:I[95751,[],\"\"]\n6:I[39275,[],\"\"]\n7:I[61343,[],\"\"]\nd:I[76130,[],\"\"]\n8:{\"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\"}\n9:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\na:{\"display\":\"inline-block\"}\nb:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\ne:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L4\",null,{\"buildId\":\"y6sFTl0gpqdS79jlpmIvx\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\",\"\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L5\",[[\"$\",\"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.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",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/b9a6bf04305d98d7.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\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"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\":\"$9\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$a\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$b\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lc\"],\"globalErrorComponent\":\"$d\",\"missingSlots\":\"$We\"}]\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Khoj AI - Home\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Your Second Brain.\"}],[\"$\",\"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,"5: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/b9a6bf04305d98d7.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-61a553b6ff44f97c.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><meta name="robots" content="noindex"/><meta http-equiv="Content-Security-Policy" content="default-src &#x27;self&#x27; https://assets.khoj.dev; media-src * blob:; script-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; &#x27;unsafe-eval&#x27;; connect-src &#x27;self&#x27; blob: https://ipapi.co/json ws://localhost:42110; style-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; https://fonts.googleapis.com; img-src &#x27;self&#x27; data: blob: https://*.khoj.dev https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src &#x27;self&#x27; https://assets.khoj.dev https://fonts.gstatic.com; child-src &#x27;none&#x27;; object-src &#x27;none&#x27;;"/><title>404: This page could not be found.</title><title>Khoj AI - Home</title><meta name="description" content="Your Second Brain."/><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"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>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)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-61a553b6ff44f97c.js" async=""></script><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/b9a6bf04305d98d7.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"4:I[95751,[],\"\"]\n6:I[39275,[],\"\"]\n7:I[61343,[],\"\"]\nd:I[76130,[],\"\"]\n8:{\"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\"}\n9:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\na:{\"display\":\"inline-block\"}\nb:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\ne:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L4\",null,{\"buildId\":\"NaOqImuryddEYz7a7MQ6j\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\",\"\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L5\",[[\"$\",\"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.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",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/b9a6bf04305d98d7.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\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"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\":\"$9\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$a\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$b\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lc\"],\"globalErrorComponent\":\"$d\",\"missingSlots\":\"$We\"}]\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Khoj AI - Home\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Your Second Brain.\"}],[\"$\",\"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,"5:null\n"])</script></body></html>