khoj 1.30.7.dev1__tar.gz → 1.30.11.dev70__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 (423) hide show
  1. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/.gitignore +10 -0
  2. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/PKG-INFO +4 -2
  3. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/pyproject.toml +3 -1
  4. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/app/settings.py +21 -0
  5. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/configure.py +3 -3
  6. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/adapters/__init__.py +22 -18
  7. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/admin.py +54 -43
  8. khoj-1.30.11.dev70/src/khoj/database/migrations/0075_migrate_generated_assets_and_validate.py +85 -0
  9. khoj-1.30.11.dev70/src/khoj/database/migrations/0076_rename_openaiprocessorconversationconfig_aimodelapi_and_more.py +26 -0
  10. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/models/__init__.py +195 -42
  11. khoj-1.30.11.dev70/src/khoj/interface/compiled/404/index.html +1 -0
  12. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/1603-3a001fa7cfef13f1.js +1 -0
  13. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/4200-ea75740bb3c6ae60.js +1 -0
  14. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/5538-0ea2d3944ca051e1.js +1 -0
  15. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/agents/layout-1878cc328ea380bd.js +1 -0
  16. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/agents/page-8eead7920b0ff92a.js → khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/agents/page-22cff208006a7f6a.js +1 -1
  17. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/automations/page-d5427acdd9297488.js → khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/automations/page-6ed169c6f570a6e2.js +1 -1
  18. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/chat/layout-9219a85f3477e722.js +1 -0
  19. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/chat/page-c74d897de220df3d.js +1 -0
  20. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/layout-6310c57b674dd6f5.js +1 -0
  21. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/page-f203261ce4fbff86.js → khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/page-25b44557720dc93a.js +1 -1
  22. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/search/layout-2ca475462c0b2176.js +1 -0
  23. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/search/page-faa998c71eb7ca8e.js → khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/search/page-4e3bb682be861aa7.js +1 -1
  24. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/settings/layout-f285795bc3154b8c.js +1 -0
  25. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/settings/page-cbe7f56b1f87d77a.js → khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/settings/page-142e854abace0750.js +1 -1
  26. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-592e8c470f2c2084.js +1 -0
  27. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/page-cd5757199539bbf2.js → khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/page-2518c42e2d59b121.js +1 -1
  28. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/webpack-3ddfe5e225737475.js → khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/chunks/webpack-9a690f9ff465a5d4.js +1 -1
  29. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/css/089de1d8526b96e9.css +1 -0
  30. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/css/5d8d85d3f2e95bae.css → khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/css/3c34171b174cc381.css +3 -3
  31. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/css/23f801d22927d568.css → khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/css/9c4221ae0779cc04.css +1 -1
  32. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/media/1d8a05b60287ae6c-s.p.woff2 +0 -0
  33. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/media/6f22fce21a7c433c-s.woff2 +0 -0
  34. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/media/77c207b095007c34-s.p.woff2 +0 -0
  35. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/media/82ef96de0e8f4d8c-s.p.woff2 +0 -0
  36. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/media/a6ecd16fa044d500-s.p.woff2 +0 -0
  37. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/media/bd82c78e5b7b3fe9-s.p.woff2 +0 -0
  38. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/media/c32c8052c071fc42-s.woff2 +0 -0
  39. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/media/c4250770ab8708b6-s.p.woff2 +0 -0
  40. khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/media/e098aaaecc9cfbb2-s.p.woff2 +0 -0
  41. khoj-1.30.11.dev70/src/khoj/interface/compiled/agents/index.html +1 -0
  42. khoj-1.30.11.dev70/src/khoj/interface/compiled/agents/index.txt +7 -0
  43. khoj-1.30.11.dev70/src/khoj/interface/compiled/assets/icons/khoj_lantern.svg +100 -0
  44. khoj-1.30.11.dev70/src/khoj/interface/compiled/assets/icons/khoj_lantern_1200x1200.png +0 -0
  45. khoj-1.30.11.dev70/src/khoj/interface/compiled/assets/icons/khoj_lantern_128x128_dark.png +0 -0
  46. khoj-1.30.11.dev70/src/khoj/interface/compiled/assets/icons/khoj_lantern_512x512.png +0 -0
  47. khoj-1.30.11.dev70/src/khoj/interface/compiled/automations/index.html +1 -0
  48. khoj-1.30.11.dev70/src/khoj/interface/compiled/automations/index.txt +8 -0
  49. khoj-1.30.11.dev70/src/khoj/interface/compiled/chat/index.html +1 -0
  50. khoj-1.30.11.dev70/src/khoj/interface/compiled/chat/index.txt +7 -0
  51. khoj-1.30.11.dev70/src/khoj/interface/compiled/index.html +1 -0
  52. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/index.txt +2 -2
  53. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/khoj.webmanifest +27 -2
  54. khoj-1.30.11.dev70/src/khoj/interface/compiled/search/index.html +1 -0
  55. khoj-1.30.11.dev70/src/khoj/interface/compiled/search/index.txt +7 -0
  56. khoj-1.30.11.dev70/src/khoj/interface/compiled/settings/index.html +1 -0
  57. khoj-1.30.11.dev70/src/khoj/interface/compiled/settings/index.txt +9 -0
  58. khoj-1.30.11.dev70/src/khoj/interface/compiled/share/chat/index.html +1 -0
  59. khoj-1.30.11.dev70/src/khoj/interface/compiled/share/chat/index.txt +7 -0
  60. khoj-1.30.11.dev70/src/khoj/interface/web/.well-known/assetlinks.json +11 -0
  61. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/migrations/migrate_server_pg.py +3 -9
  62. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/markdown/markdown_to_entries.py +6 -6
  63. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/org_mode/org_to_entries.py +3 -3
  64. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/anthropic/anthropic_chat.py +11 -6
  65. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/google/gemini_chat.py +11 -6
  66. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/offline/chat_model.py +13 -5
  67. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/openai/gpt.py +11 -5
  68. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/openai/utils.py +1 -6
  69. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/prompts.py +48 -18
  70. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/utils.py +127 -27
  71. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/image/generate.py +12 -15
  72. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/tools/run_code.py +2 -4
  73. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/api.py +5 -5
  74. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/api_chat.py +63 -100
  75. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/helpers.py +59 -16
  76. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/research.py +2 -4
  77. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/web_client.py +5 -0
  78. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/constants.py +1 -0
  79. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/helpers.py +5 -5
  80. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/initialization.py +14 -12
  81. khoj-1.30.7.dev1/src/khoj/interface/compiled/404/index.html +0 -1
  82. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/1603-ba5f9f05e92c8412.js +0 -1
  83. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/4752-554a3db270186ce3.js +0 -1
  84. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/5538-e5f3c9f4d67a64b9.js +0 -1
  85. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/agents/layout-e9838b642913a071.js +0 -1
  86. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/chat/layout-b0e7ff4baa3b5265.js +0 -1
  87. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/chat/page-1ea11f1d3a28aa41.js +0 -1
  88. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/layout-86561d2fac35a91a.js +0 -1
  89. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/search/layout-ea6b73fdaf9b24ca.js +0 -1
  90. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/settings/layout-1f4d76a8b09517b1.js +0 -1
  91. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-cf7445cf0326bda3.js +0 -1
  92. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/css/0e9d53dcd7f11342.css +0 -1
  93. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/media/5455839c73f146e7-s.p.woff2 +0 -0
  94. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/media/5984b96ba4822821-s.woff2 +0 -0
  95. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/media/684adc3dde1b03f1-s.woff2 +0 -0
  96. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/media/82e3b9a1bdaf0c26-s.woff2 +0 -0
  97. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/media/8d1ea331386a0db8-s.woff2 +0 -0
  98. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/media/91475f6526542a4f-s.woff2 +0 -0
  99. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/media/b98b13dbc1c3b59c-s.woff2 +0 -0
  100. khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/media/c824d7a20139e39d-s.woff2 +0 -0
  101. khoj-1.30.7.dev1/src/khoj/interface/compiled/agents/index.html +0 -1
  102. khoj-1.30.7.dev1/src/khoj/interface/compiled/agents/index.txt +0 -7
  103. khoj-1.30.7.dev1/src/khoj/interface/compiled/automations/index.html +0 -1
  104. khoj-1.30.7.dev1/src/khoj/interface/compiled/automations/index.txt +0 -8
  105. khoj-1.30.7.dev1/src/khoj/interface/compiled/chat/index.html +0 -1
  106. khoj-1.30.7.dev1/src/khoj/interface/compiled/chat/index.txt +0 -7
  107. khoj-1.30.7.dev1/src/khoj/interface/compiled/index.html +0 -1
  108. khoj-1.30.7.dev1/src/khoj/interface/compiled/search/index.html +0 -1
  109. khoj-1.30.7.dev1/src/khoj/interface/compiled/search/index.txt +0 -7
  110. khoj-1.30.7.dev1/src/khoj/interface/compiled/settings/index.html +0 -1
  111. khoj-1.30.7.dev1/src/khoj/interface/compiled/settings/index.txt +0 -8
  112. khoj-1.30.7.dev1/src/khoj/interface/compiled/share/chat/index.html +0 -1
  113. khoj-1.30.7.dev1/src/khoj/interface/compiled/share/chat/index.txt +0 -7
  114. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/LICENSE +0 -0
  115. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/README.md +0 -0
  116. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/__init__.py +0 -0
  117. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/app/README.md +0 -0
  118. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/app/__init__.py +0 -0
  119. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/app/asgi.py +0 -0
  120. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/app/urls.py +0 -0
  121. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/__init__.py +0 -0
  122. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/apps.py +0 -0
  123. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/management/__init__.py +0 -0
  124. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/management/commands/__init__.py +0 -0
  125. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/management/commands/change_default_model.py +0 -0
  126. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/management/commands/change_generated_images_url.py +0 -0
  127. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/management/commands/convert_images_png_to_webp.py +0 -0
  128. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0001_khojuser.py +0 -0
  129. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0002_googleuser.py +0 -0
  130. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0003_vector_extension.py +0 -0
  131. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0004_content_types_and_more.py +0 -0
  132. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0005_embeddings_corpus_id.py +0 -0
  133. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0006_embeddingsdates.py +0 -0
  134. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0007_add_conversation.py +0 -0
  135. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0008_alter_conversation_conversation_log.py +0 -0
  136. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0009_khojapiuser.py +0 -0
  137. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0010_chatmodeloptions_and_more.py +0 -0
  138. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0010_rename_embeddings_entry_and_more.py +0 -0
  139. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0011_merge_20231102_0138.py +0 -0
  140. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0012_entry_file_source.py +0 -0
  141. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0013_subscription.py +0 -0
  142. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0014_alter_googleuser_picture.py +0 -0
  143. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0015_alter_subscription_user.py +0 -0
  144. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0016_alter_subscription_renewal_date.py +0 -0
  145. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0017_searchmodel.py +0 -0
  146. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0018_searchmodelconfig_delete_searchmodel.py +0 -0
  147. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0019_alter_googleuser_family_name_and_more.py +0 -0
  148. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0020_reflectivequestion.py +0 -0
  149. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0021_speechtotextmodeloptions_and_more.py +0 -0
  150. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0022_texttoimagemodelconfig.py +0 -0
  151. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0023_usersearchmodelconfig.py +0 -0
  152. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0024_alter_entry_embeddings.py +0 -0
  153. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0025_clientapplication_khojuser_phone_number_and_more.py +0 -0
  154. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0025_searchmodelconfig_embeddings_inference_endpoint_and_more.py +0 -0
  155. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0026_searchmodelconfig_cross_encoder_inference_endpoint_and_more.py +0 -0
  156. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0027_merge_20240118_1324.py +0 -0
  157. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0028_khojuser_verified_phone_number.py +0 -0
  158. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0029_userrequests.py +0 -0
  159. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0030_conversation_slug_and_title.py +0 -0
  160. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0031_agent_conversation_agent.py +0 -0
  161. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0031_alter_googleuser_locale.py +0 -0
  162. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0032_merge_20240322_0427.py +0 -0
  163. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0033_rename_tuning_agent_personality.py +0 -0
  164. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0034_alter_chatmodeloptions_chat_model.py +0 -0
  165. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0035_processlock.py +0 -0
  166. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0036_alter_processlock_name.py +0 -0
  167. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0036_delete_offlinechatprocessorconversationconfig.py +0 -0
  168. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0036_publicconversation.py +0 -0
  169. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0037_chatmodeloptions_openai_config_and_more.py +0 -0
  170. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0037_searchmodelconfig_bi_encoder_docs_encode_config_and_more.py +0 -0
  171. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0038_merge_20240425_0857.py +0 -0
  172. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0038_merge_20240426_1640.py +0 -0
  173. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0039_merge_20240501_0301.py +0 -0
  174. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0040_alter_processlock_name.py +0 -0
  175. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0040_merge_20240504_1010.py +0 -0
  176. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0041_merge_20240505_1234.py +0 -0
  177. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0042_serverchatsettings.py +0 -0
  178. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0043_alter_chatmodeloptions_model_type.py +0 -0
  179. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0044_conversation_file_filters.py +0 -0
  180. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0045_fileobject.py +0 -0
  181. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0046_khojuser_email_verification_code_and_more.py +0 -0
  182. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0047_alter_entry_file_type.py +0 -0
  183. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0048_voicemodeloption_uservoicemodelconfig.py +0 -0
  184. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0049_datastore.py +0 -0
  185. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0049_texttoimagemodelconfig_api_key_and_more.py +0 -0
  186. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0050_alter_processlock_name.py +0 -0
  187. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0051_merge_20240702_1220.py +0 -0
  188. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0052_alter_searchmodelconfig_bi_encoder_docs_encode_config_and_more.py +0 -0
  189. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0053_agent_style_color_agent_style_icon.py +0 -0
  190. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0054_alter_agent_style_color.py +0 -0
  191. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0055_alter_agent_style_icon.py +0 -0
  192. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0056_chatmodeloptions_vision_enabled.py +0 -0
  193. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0056_searchmodelconfig_cross_encoder_model_config.py +0 -0
  194. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0057_merge_20240816_1409.py +0 -0
  195. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0057_remove_serverchatsettings_default_model_and_more.py +0 -0
  196. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0058_alter_chatmodeloptions_chat_model.py +0 -0
  197. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0059_searchmodelconfig_bi_encoder_confidence_threshold.py +0 -0
  198. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0060_merge_20240905_1828.py +0 -0
  199. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0061_alter_chatmodeloptions_model_type.py +0 -0
  200. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0061_alter_texttoimagemodelconfig_model_type.py +0 -0
  201. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0062_merge_20240913_0222.py +0 -0
  202. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0063_conversation_temp_id.py +0 -0
  203. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0064_remove_conversation_temp_id_alter_conversation_id.py +0 -0
  204. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0065_remove_agent_avatar_remove_agent_public_and_more.py +0 -0
  205. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0066_remove_agent_tools_agent_input_tools_and_more.py +0 -0
  206. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0067_alter_agent_style_icon.py +0 -0
  207. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0068_alter_agent_output_modes.py +0 -0
  208. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0069_webscraper_serverchatsettings_web_scraper.py +0 -0
  209. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0070_alter_agent_input_tools_alter_agent_output_modes.py +0 -0
  210. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0071_subscription_enabled_trial_at_and_more.py +0 -0
  211. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0072_entry_search_model.py +0 -0
  212. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0073_delete_usersearchmodelconfig.py +0 -0
  213. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/0074_alter_conversation_title.py +0 -0
  214. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/migrations/__init__.py +0 -0
  215. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/database/tests.py +0 -0
  216. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/1210.ef7a0f9a7e43da1d.js +0 -0
  217. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/1279-4cb23143aa2c0228.js +0 -0
  218. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/1459.690bf20e7d7b7090.js +0 -0
  219. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/1970-1b63ac1497b03a10.js +0 -0
  220. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/2646-92ba433951d02d52.js +0 -0
  221. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/3072-be830e4f8412b9d2.js +0 -0
  222. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/3463-081c031e873b7966.js +0 -0
  223. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/3690-51312931ba1eae30.js +0 -0
  224. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/3717-b46079dbe9f55694.js +0 -0
  225. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/4504-62ac13e7d94c52f9.js +0 -0
  226. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/4602-460621c3241e0d13.js +0 -0
  227. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/5512-7cc62049bbe60e11.js +0 -0
  228. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/7023-e8de2bded4df6539.js +0 -0
  229. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/7592-a09c39a38e60634b.js +0 -0
  230. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/8423-1dda16bc56236523.js +0 -0
  231. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/94ca1967.5584df65931cfe83.js +0 -0
  232. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/964ecbae.ea4eab2a3a835ffe.js +0 -0
  233. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/app/_not-found/page-cfba071f5a657256.js +0 -0
  234. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/app/automations/layout-7f1b79a2c67af0b4.js +0 -0
  235. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/d3ac728e-a9e3522eef9b6b28.js +0 -0
  236. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/fd9d1056-2e6c8140e79afc3b.js +0 -0
  237. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js +0 -0
  238. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/main-1ea5c2e0fdef4626.js +0 -0
  239. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/main-app-6d6ee3495efe03d4.js +0 -0
  240. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/pages/_app-f870474a17b7f2fd.js +0 -0
  241. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js +0 -0
  242. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
  243. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/css/1f293605f2871853.css +0 -0
  244. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/css/3cf13271869a4aeb.css +0 -0
  245. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/css/592ca99f5122e75a.css +0 -0
  246. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/css/5a400c87d295e68a.css +0 -0
  247. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/css/80bd6301fc657983.css +0 -0
  248. {khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/RbhxT5Vdl_5Yeyifmso2h → khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/mMme10qkwWYydynPiEyqk}/_buildManifest.js +0 -0
  249. {khoj-1.30.7.dev1/src/khoj/interface/compiled/_next/static/RbhxT5Vdl_5Yeyifmso2h → khoj-1.30.11.dev70/src/khoj/interface/compiled/_next/static/mMme10qkwWYydynPiEyqk}/_ssgManifest.js +0 -0
  250. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.1608a09b.woff +0 -0
  251. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.4aafdb68.ttf +0 -0
  252. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.a79f1c31.woff2 +0 -0
  253. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.b6770918.woff +0 -0
  254. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.cce5b8ec.ttf +0 -0
  255. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.ec17d132.woff2 +0 -0
  256. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.07ef19e7.ttf +0 -0
  257. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.55fac258.woff2 +0 -0
  258. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.dad44a7f.woff +0 -0
  259. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.9f256b85.woff +0 -0
  260. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.b18f59e1.ttf +0 -0
  261. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.d42a5579.woff2 +0 -0
  262. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.7c187121.woff +0 -0
  263. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.d3c882a6.woff2 +0 -0
  264. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.ed38e79f.ttf +0 -0
  265. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.b74a1a8b.ttf +0 -0
  266. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.c3fb5ac2.woff2 +0 -0
  267. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.d181c465.woff +0 -0
  268. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.6f2bb1df.woff2 +0 -0
  269. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.70d8b0a5.ttf +0 -0
  270. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.e3f82f9d.woff +0 -0
  271. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.47373d1e.ttf +0 -0
  272. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.8916142b.woff2 +0 -0
  273. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.9024d815.woff +0 -0
  274. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.0462f03b.woff2 +0 -0
  275. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.7f51fe03.woff +0 -0
  276. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.b7f8fe9b.ttf +0 -0
  277. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.572d331f.woff2 +0 -0
  278. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.a879cf83.ttf +0 -0
  279. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.f1035d8d.woff +0 -0
  280. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.5295ba48.woff +0 -0
  281. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.939bc644.ttf +0 -0
  282. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.f28c23ac.woff2 +0 -0
  283. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.8c5b5494.woff2 +0 -0
  284. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.94e1e8dc.ttf +0 -0
  285. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.bf59d231.woff +0 -0
  286. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.3b1e59b3.woff2 +0 -0
  287. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.7c9bc82b.woff +0 -0
  288. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.b4c20c84.ttf +0 -0
  289. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.74048478.woff +0 -0
  290. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.ba21ed5f.woff2 +0 -0
  291. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.d4d7ba48.ttf +0 -0
  292. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.03e9641d.woff2 +0 -0
  293. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.07505710.woff +0 -0
  294. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.fe9cbbe1.ttf +0 -0
  295. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.e1e279cb.woff +0 -0
  296. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.eae34984.woff2 +0 -0
  297. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.fabc004a.ttf +0 -0
  298. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.57727022.woff +0 -0
  299. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.5916a24f.woff2 +0 -0
  300. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.d6b476ec.ttf +0 -0
  301. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.9acaf01c.woff +0 -0
  302. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.a144ef58.ttf +0 -0
  303. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.b4230e7e.woff2 +0 -0
  304. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.10d95fd3.woff2 +0 -0
  305. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.7a996c9d.woff +0 -0
  306. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.fbccdabe.ttf +0 -0
  307. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.6258592b.woff +0 -0
  308. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.a8709e36.woff2 +0 -0
  309. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.d97aaf4a.ttf +0 -0
  310. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp +0 -0
  311. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp +0 -0
  312. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/globe.98e105ca.webp +0 -0
  313. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp +0 -0
  314. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/agents.svg +0 -0
  315. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/assets/icons/khoj_lantern.ico +0 -0
  316. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/assets/icons/khoj_lantern_128x128.png +0 -0
  317. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/assets/icons/khoj_lantern_256x256.png +0 -0
  318. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/assets/icons/khoj_lantern_logomarktype_1200x630.png +0 -0
  319. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/assets/samples/desktop-browse-draw-sample.png +0 -0
  320. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/assets/samples/desktop-plain-chat-sample.png +0 -0
  321. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png +0 -0
  322. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png +0 -0
  323. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png +0 -0
  324. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png +0 -0
  325. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/automation.svg +0 -0
  326. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/chat.svg +0 -0
  327. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/close.svg +0 -0
  328. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/copy-button-success.svg +0 -0
  329. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/copy-button.svg +0 -0
  330. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/logo.svg +0 -0
  331. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/send.svg +0 -0
  332. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/share.svg +0 -0
  333. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/thumbs-down.svg +0 -0
  334. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/compiled/thumbs-up.svg +0 -0
  335. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/email/feedback.html +0 -0
  336. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/email/magic_link.html +0 -0
  337. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/email/task.html +0 -0
  338. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/email/welcome.html +0 -0
  339. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/icons/agents.svg +0 -0
  340. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/icons/automation.svg +0 -0
  341. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/icons/chat.svg +0 -0
  342. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/icons/github.svg +0 -0
  343. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/icons/khoj-logo-sideways-200.png +0 -0
  344. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/icons/khoj-logo-sideways-500.png +0 -0
  345. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/icons/khoj-logo-sideways.svg +0 -0
  346. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/icons/khoj.svg +0 -0
  347. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/icons/logotype.svg +0 -0
  348. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/icons/search.svg +0 -0
  349. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/icons/sync.svg +0 -0
  350. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/khoj.css +0 -0
  351. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/assets/utils.js +0 -0
  352. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/base_config.html +0 -0
  353. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/content_source_github_input.html +0 -0
  354. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/login.html +0 -0
  355. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/interface/web/utils.html +0 -0
  356. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/main.py +0 -0
  357. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/manage.py +0 -0
  358. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/migrations/__init__.py +0 -0
  359. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/migrations/migrate_offline_chat_default_model.py +0 -0
  360. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/migrations/migrate_offline_chat_default_model_2.py +0 -0
  361. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/migrations/migrate_offline_chat_schema.py +0 -0
  362. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/migrations/migrate_offline_model.py +0 -0
  363. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/migrations/migrate_processor_config_openai.py +0 -0
  364. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/migrations/migrate_version.py +0 -0
  365. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/__init__.py +0 -0
  366. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/__init__.py +0 -0
  367. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/docx/__init__.py +0 -0
  368. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/docx/docx_to_entries.py +0 -0
  369. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/github/__init__.py +0 -0
  370. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/github/github_to_entries.py +0 -0
  371. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/images/__init__.py +0 -0
  372. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/images/image_to_entries.py +0 -0
  373. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/markdown/__init__.py +0 -0
  374. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/notion/notion_to_entries.py +0 -0
  375. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/org_mode/__init__.py +0 -0
  376. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/org_mode/orgnode.py +0 -0
  377. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/pdf/__init__.py +0 -0
  378. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/pdf/pdf_to_entries.py +0 -0
  379. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/plaintext/__init__.py +0 -0
  380. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/plaintext/plaintext_to_entries.py +0 -0
  381. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/content/text_to_entries.py +0 -0
  382. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/__init__.py +0 -0
  383. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/anthropic/__init__.py +0 -0
  384. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/anthropic/utils.py +0 -0
  385. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/google/__init__.py +0 -0
  386. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/google/utils.py +0 -0
  387. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/offline/__init__.py +0 -0
  388. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/offline/utils.py +0 -0
  389. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/offline/whisper.py +0 -0
  390. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/openai/__init__.py +0 -0
  391. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/conversation/openai/whisper.py +0 -0
  392. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/embeddings.py +0 -0
  393. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/speech/__init__.py +0 -0
  394. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/speech/text_to_speech.py +0 -0
  395. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/tools/__init__.py +0 -0
  396. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/processor/tools/online_search.py +0 -0
  397. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/__init__.py +0 -0
  398. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/api_agents.py +0 -0
  399. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/api_content.py +0 -0
  400. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/api_model.py +0 -0
  401. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/api_phone.py +0 -0
  402. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/api_subscription.py +0 -0
  403. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/auth.py +0 -0
  404. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/email.py +0 -0
  405. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/notion.py +0 -0
  406. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/storage.py +0 -0
  407. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/routers/twilio.py +0 -0
  408. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/search_filter/__init__.py +0 -0
  409. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/search_filter/base_filter.py +0 -0
  410. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/search_filter/date_filter.py +0 -0
  411. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/search_filter/file_filter.py +0 -0
  412. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/search_filter/word_filter.py +0 -0
  413. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/search_type/__init__.py +0 -0
  414. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/search_type/text_search.py +0 -0
  415. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/__init__.py +0 -0
  416. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/cli.py +0 -0
  417. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/config.py +0 -0
  418. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/fs_syncer.py +0 -0
  419. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/jsonl.py +0 -0
  420. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/models.py +0 -0
  421. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/rawconfig.py +0 -0
  422. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/state.py +0 -0
  423. {khoj-1.30.7.dev1 → khoj-1.30.11.dev70}/src/khoj/utils/yaml.py +0 -0
@@ -42,3 +42,13 @@ src/interface/obsidian/main.js
42
42
 
43
43
  # obsidian
44
44
  data.json
45
+
46
+ # Android
47
+ src/interface/android/.gradle
48
+ src/interface/android/app/build
49
+ src/interface/android/build
50
+ src/interface/android/*.aab
51
+ src/interface/android/*.apk
52
+ src/interface/android/*.apk.idsig
53
+ src/interface/android/*.keystore
54
+ src/interface/android/local.properties
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: khoj
3
- Version: 1.30.7.dev1
3
+ Version: 1.30.11.dev70
4
4
  Summary: Your Second Brain
5
5
  Project-URL: Homepage, https://khoj.dev
6
6
  Project-URL: Documentation, https://docs.khoj.dev
@@ -31,7 +31,8 @@ Requires-Dist: dateparser>=1.1.1
31
31
  Requires-Dist: defusedxml==0.7.1
32
32
  Requires-Dist: django-apscheduler==0.6.2
33
33
  Requires-Dist: django-phonenumber-field==7.3.0
34
- Requires-Dist: django==5.0.9
34
+ Requires-Dist: django-unfold==0.42.0
35
+ Requires-Dist: django==5.0.10
35
36
  Requires-Dist: docx2txt==0.8
36
37
  Requires-Dist: einops==0.8.0
37
38
  Requires-Dist: fastapi>=0.110.0
@@ -55,6 +56,7 @@ Requires-Dist: pillow~=10.0.0
55
56
  Requires-Dist: psutil>=5.8.0
56
57
  Requires-Dist: psycopg2-binary==2.9.9
57
58
  Requires-Dist: pydantic[email]>=2.0.0
59
+ Requires-Dist: pyjson5==1.6.7
58
60
  Requires-Dist: pymupdf==1.24.11
59
61
  Requires-Dist: python-multipart>=0.0.7
60
62
  Requires-Dist: pytz~=2024.1
@@ -63,7 +63,8 @@ dependencies = [
63
63
  "tenacity == 8.3.0",
64
64
  "anyio == 3.7.1",
65
65
  "pymupdf == 1.24.11",
66
- "django == 5.0.9",
66
+ "django == 5.0.10",
67
+ "django-unfold == 0.42.0",
67
68
  "authlib == 1.2.1",
68
69
  "llama-cpp-python == 0.2.88",
69
70
  "itsdangerous == 2.1.2",
@@ -88,6 +89,7 @@ dependencies = [
88
89
  "anthropic == 0.26.1",
89
90
  "docx2txt == 0.8",
90
91
  "google-generativeai == 0.8.3",
92
+ "pyjson5 == 1.6.7",
91
93
  ]
92
94
  dynamic = ["version"]
93
95
 
@@ -13,6 +13,8 @@ https://docs.djangoproject.com/en/4.2/ref/settings/
13
13
  import os
14
14
  from pathlib import Path
15
15
 
16
+ from django.templatetags.static import static
17
+
16
18
  from khoj.utils.helpers import in_debug_mode, is_env_var_true
17
19
 
18
20
  # Build paths inside the project like this: BASE_DIR / 'subdir'.
@@ -72,6 +74,7 @@ INSTALLED_APPS = [
72
74
  "django.contrib.auth",
73
75
  "django.contrib.contenttypes",
74
76
  "khoj.database.apps.DatabaseConfig",
77
+ "unfold",
75
78
  "django.contrib.admin",
76
79
  "django.contrib.sessions",
77
80
  "django.contrib.messages",
@@ -195,3 +198,21 @@ APSCHEDULER_DATETIME_FORMAT = "N j, Y, f:s a"
195
198
  # that supports multiple background worker processes instead (e.g. Dramatiq, Celery, Django-RQ,
196
199
  # etc. See: https://djangopackages.org/grids/g/workers-queues-tasks/ for popular options).
197
200
  APSCHEDULER_RUN_NOW_TIMEOUT = 240 # Seconds
201
+
202
+ UNFOLD = {
203
+ "SITE_TITLE": "Khoj Admin Panel",
204
+ "SITE_HEADER": "Khoj Admin Panel",
205
+ "SITE_URL": "/",
206
+ "SITE_ICON": {
207
+ "light": lambda request: static("assets/icons/khoj_lantern_128x128.png"),
208
+ "dark": lambda request: static("assets/icons/khoj_lantern_128x128_dark.png"),
209
+ },
210
+ "SITE_FAVICONS": [
211
+ {
212
+ "rel": "icon",
213
+ "sizes": "32x32",
214
+ "type": "image/svg+xml",
215
+ "href": lambda request: static("assets/icons/khoj_lantern.svg"),
216
+ },
217
+ ],
218
+ }
@@ -232,9 +232,9 @@ def configure_server(
232
232
  config = FullConfig()
233
233
  state.config = config
234
234
 
235
- if ConversationAdapters.has_valid_openai_conversation_config():
236
- openai_config = ConversationAdapters.get_openai_conversation_config()
237
- state.openai_client = openai.OpenAI(api_key=openai_config.api_key)
235
+ if ConversationAdapters.has_valid_ai_model_api():
236
+ ai_model_api = ConversationAdapters.get_ai_model_api()
237
+ state.openai_client = openai.OpenAI(api_key=ai_model_api.api_key)
238
238
 
239
239
  # Initialize Search Models from Config and initialize content
240
240
  try:
@@ -35,6 +35,7 @@ from torch import Tensor
35
35
 
36
36
  from khoj.database.models import (
37
37
  Agent,
38
+ AiModelApi,
38
39
  ChatModelOptions,
39
40
  ClientApplication,
40
41
  Conversation,
@@ -46,7 +47,6 @@ from khoj.database.models import (
46
47
  KhojApiUser,
47
48
  KhojUser,
48
49
  NotionConfig,
49
- OpenAIProcessorConversationConfig,
50
50
  ProcessLock,
51
51
  PublicConversation,
52
52
  ReflectiveQuestion,
@@ -224,7 +224,9 @@ async def acreate_user_by_phone_number(phone_number: str) -> KhojUser:
224
224
  )
225
225
  await user.asave()
226
226
 
227
- await Subscription.objects.acreate(user=user, type=Subscription.Type.STANDARD)
227
+ user_subscription = await Subscription.objects.filter(user=user).afirst()
228
+ if not user_subscription:
229
+ await Subscription.objects.acreate(user=user, type=Subscription.Type.STANDARD)
228
230
 
229
231
  return user
230
232
 
@@ -296,7 +298,9 @@ async def create_user_by_google_token(token: dict) -> KhojUser:
296
298
  user=user,
297
299
  )
298
300
 
299
- await Subscription.objects.acreate(user=user, type=Subscription.Type.STANDARD)
301
+ user_subscription = await Subscription.objects.filter(user=user).afirst()
302
+ if not user_subscription:
303
+ await Subscription.objects.acreate(user=user, type=Subscription.Type.STANDARD)
300
304
 
301
305
  return user
302
306
 
@@ -853,7 +857,7 @@ class ConversationAdapters:
853
857
  agent=conversation.agent,
854
858
  conversation_log=conversation.conversation_log,
855
859
  slug=conversation.slug,
856
- title=conversation.title,
860
+ title=conversation.title if conversation.title else conversation.slug,
857
861
  )
858
862
 
859
863
  @staticmethod
@@ -977,7 +981,7 @@ class ConversationAdapters:
977
981
 
978
982
  @staticmethod
979
983
  async def aget_all_conversation_configs():
980
- return await sync_to_async(list)(ChatModelOptions.objects.prefetch_related("openai_config").all())
984
+ return await sync_to_async(list)(ChatModelOptions.objects.prefetch_related("ai_model_api").all())
981
985
 
982
986
  @staticmethod
983
987
  def get_vision_enabled_config():
@@ -996,12 +1000,12 @@ class ConversationAdapters:
996
1000
  return None
997
1001
 
998
1002
  @staticmethod
999
- def get_openai_conversation_config():
1000
- return OpenAIProcessorConversationConfig.objects.filter().first()
1003
+ def get_ai_model_api():
1004
+ return AiModelApi.objects.filter().first()
1001
1005
 
1002
1006
  @staticmethod
1003
- def has_valid_openai_conversation_config():
1004
- return OpenAIProcessorConversationConfig.objects.filter().exists()
1007
+ def has_valid_ai_model_api():
1008
+ return AiModelApi.objects.filter().exists()
1005
1009
 
1006
1010
  @staticmethod
1007
1011
  @arequire_valid_user
@@ -1089,7 +1093,7 @@ class ConversationAdapters:
1089
1093
  server_chat_settings: ServerChatSettings = (
1090
1094
  await ServerChatSettings.objects.filter()
1091
1095
  .prefetch_related(
1092
- "chat_default", "chat_default__openai_config", "chat_advanced", "chat_advanced__openai_config"
1096
+ "chat_default", "chat_default__ai_model_api", "chat_advanced", "chat_advanced__ai_model_api"
1093
1097
  )
1094
1098
  .afirst()
1095
1099
  )
@@ -1105,7 +1109,7 @@ class ConversationAdapters:
1105
1109
 
1106
1110
  # Get the user's chat settings, if the server chat settings are not set
1107
1111
  user_chat_settings = (
1108
- (await UserConversationConfig.objects.filter(user=user).prefetch_related("setting__openai_config").afirst())
1112
+ (await UserConversationConfig.objects.filter(user=user).prefetch_related("setting__ai_model_api").afirst())
1109
1113
  if user
1110
1114
  else None
1111
1115
  )
@@ -1113,7 +1117,7 @@ class ConversationAdapters:
1113
1117
  return user_chat_settings.setting
1114
1118
 
1115
1119
  # Get the first chat model if even the user chat settings are not set
1116
- return await ChatModelOptions.objects.filter().prefetch_related("openai_config").afirst()
1120
+ return await ChatModelOptions.objects.filter().prefetch_related("ai_model_api").afirst()
1117
1121
 
1118
1122
  @staticmethod
1119
1123
  def get_advanced_conversation_config(user: KhojUser):
@@ -1126,7 +1130,7 @@ class ConversationAdapters:
1126
1130
  async def aget_advanced_conversation_config(user: KhojUser = None):
1127
1131
  server_chat_settings: ServerChatSettings = (
1128
1132
  await ServerChatSettings.objects.filter()
1129
- .prefetch_related("chat_advanced", "chat_advanced__openai_config")
1133
+ .prefetch_related("chat_advanced", "chat_advanced__ai_model_api")
1130
1134
  .afirst()
1131
1135
  )
1132
1136
  if server_chat_settings is not None and server_chat_settings.chat_advanced is not None:
@@ -1254,7 +1258,7 @@ class ConversationAdapters:
1254
1258
  @staticmethod
1255
1259
  async def aget_user_conversation_config(user: KhojUser):
1256
1260
  config = (
1257
- await UserConversationConfig.objects.filter(user=user).prefetch_related("setting__openai_config").afirst()
1261
+ await UserConversationConfig.objects.filter(user=user).prefetch_related("setting__ai_model_api").afirst()
1258
1262
  )
1259
1263
  if not config:
1260
1264
  return None
@@ -1309,7 +1313,7 @@ class ConversationAdapters:
1309
1313
  ChatModelOptions.ModelType.OPENAI,
1310
1314
  ChatModelOptions.ModelType.GOOGLE,
1311
1315
  ]
1312
- ) and conversation_config.openai_config:
1316
+ ) and conversation_config.ai_model_api:
1313
1317
  return conversation_config
1314
1318
 
1315
1319
  else:
@@ -1317,7 +1321,7 @@ class ConversationAdapters:
1317
1321
 
1318
1322
  @staticmethod
1319
1323
  async def aget_text_to_image_model_config():
1320
- return await TextToImageModelConfig.objects.filter().prefetch_related("openai_config").afirst()
1324
+ return await TextToImageModelConfig.objects.filter().prefetch_related("ai_model_api").afirst()
1321
1325
 
1322
1326
  @staticmethod
1323
1327
  def get_text_to_image_model_config():
@@ -1339,9 +1343,9 @@ class ConversationAdapters:
1339
1343
 
1340
1344
  @staticmethod
1341
1345
  async def aget_user_text_to_image_model(user: KhojUser) -> Optional[TextToImageModelConfig]:
1342
- # Create a custom queryset for prefetching settings__openai_config, handling null cases
1346
+ # Create a custom queryset for prefetching settings__ai_model_api, handling null cases
1343
1347
  settings_prefetch = Prefetch(
1344
- "setting", queryset=TextToImageModelConfig.objects.prefetch_related("openai_config")
1348
+ "setting", queryset=TextToImageModelConfig.objects.prefetch_related("ai_model_api")
1345
1349
  )
1346
1350
 
1347
1351
  config = await UserTextToImageModelConfig.objects.filter(user=user).prefetch_related(settings_prefetch).afirst()
@@ -1,17 +1,21 @@
1
1
  import csv
2
2
  import json
3
- from datetime import date, datetime, timedelta, timezone
3
+ from datetime import datetime, timedelta
4
4
 
5
5
  from apscheduler.job import Job
6
6
  from django.contrib import admin, messages
7
- from django.contrib.auth.admin import UserAdmin
7
+ from django.contrib.auth.admin import GroupAdmin as BaseGroupAdmin
8
+ from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
9
+ from django.contrib.auth.models import Group
8
10
  from django.http import HttpResponse
9
- from django_apscheduler.admin import DjangoJobAdmin
11
+ from django_apscheduler.admin import DjangoJobAdmin, DjangoJobExecutionAdmin
10
12
  from django_apscheduler.jobstores import DjangoJobStore
11
- from django_apscheduler.models import DjangoJob
13
+ from django_apscheduler.models import DjangoJob, DjangoJobExecution
14
+ from unfold import admin as unfold_admin
12
15
 
13
16
  from khoj.database.models import (
14
17
  Agent,
18
+ AiModelApi,
15
19
  ChatModelOptions,
16
20
  ClientApplication,
17
21
  Conversation,
@@ -19,7 +23,6 @@ from khoj.database.models import (
19
23
  GithubConfig,
20
24
  KhojUser,
21
25
  NotionConfig,
22
- OpenAIProcessorConversationConfig,
23
26
  ProcessLock,
24
27
  ReflectiveQuestion,
25
28
  SearchModelConfig,
@@ -35,10 +38,8 @@ from khoj.database.models import (
35
38
  )
36
39
  from khoj.utils.helpers import ImageIntentType
37
40
 
38
- admin.site.unregister(DjangoJob)
39
-
40
41
 
41
- class KhojDjangoJobAdmin(DjangoJobAdmin):
42
+ class KhojDjangoJobAdmin(DjangoJobAdmin, unfold_admin.ModelAdmin):
42
43
  list_display = (
43
44
  "id",
44
45
  "next_run_time",
@@ -62,10 +63,25 @@ class KhojDjangoJobAdmin(DjangoJobAdmin):
62
63
  return queryset, use_distinct
63
64
 
64
65
 
66
+ class KhojDjangoJobExecutionAdmin(DjangoJobExecutionAdmin, unfold_admin.ModelAdmin):
67
+ pass
68
+
69
+
70
+ admin.site.unregister(DjangoJob)
65
71
  admin.site.register(DjangoJob, KhojDjangoJobAdmin)
72
+ admin.site.unregister(DjangoJobExecution)
73
+ admin.site.register(DjangoJobExecution, KhojDjangoJobExecutionAdmin)
66
74
 
67
75
 
68
- class KhojUserAdmin(UserAdmin):
76
+ class GroupAdmin(BaseGroupAdmin, unfold_admin.ModelAdmin):
77
+ pass
78
+
79
+
80
+ class UserAdmin(BaseUserAdmin, unfold_admin.ModelAdmin):
81
+ pass
82
+
83
+
84
+ class KhojUserAdmin(UserAdmin, unfold_admin.ModelAdmin):
69
85
  class DateJoinedAfterFilter(admin.SimpleListFilter):
70
86
  title = "Joined after"
71
87
  parameter_name = "joined_after"
@@ -137,31 +153,33 @@ class KhojUserAdmin(UserAdmin):
137
153
  get_email_login_url.short_description = "Get email login URL" # type: ignore
138
154
 
139
155
 
156
+ admin.site.unregister(Group)
140
157
  admin.site.register(KhojUser, KhojUserAdmin)
141
158
 
142
- admin.site.register(ProcessLock)
143
- admin.site.register(SpeechToTextModelOptions)
144
- admin.site.register(ReflectiveQuestion)
145
- admin.site.register(ClientApplication)
146
- admin.site.register(GithubConfig)
147
- admin.site.register(NotionConfig)
148
- admin.site.register(UserVoiceModelConfig)
149
- admin.site.register(VoiceModelOption)
150
- admin.site.register(UserRequests)
159
+ admin.site.register(ProcessLock, unfold_admin.ModelAdmin)
160
+ admin.site.register(SpeechToTextModelOptions, unfold_admin.ModelAdmin)
161
+ admin.site.register(ReflectiveQuestion, unfold_admin.ModelAdmin)
162
+ admin.site.register(ClientApplication, unfold_admin.ModelAdmin)
163
+ admin.site.register(GithubConfig, unfold_admin.ModelAdmin)
164
+ admin.site.register(NotionConfig, unfold_admin.ModelAdmin)
165
+ admin.site.register(UserVoiceModelConfig, unfold_admin.ModelAdmin)
166
+ admin.site.register(VoiceModelOption, unfold_admin.ModelAdmin)
167
+ admin.site.register(UserRequests, unfold_admin.ModelAdmin)
151
168
 
152
169
 
153
170
  @admin.register(Agent)
154
- class AgentAdmin(admin.ModelAdmin):
171
+ class AgentAdmin(unfold_admin.ModelAdmin):
155
172
  list_display = (
156
173
  "id",
157
174
  "name",
158
175
  )
159
176
  search_fields = ("id", "name")
177
+ list_filter = ("privacy_level",)
160
178
  ordering = ("-created_at",)
161
179
 
162
180
 
163
181
  @admin.register(Entry)
164
- class EntryAdmin(admin.ModelAdmin):
182
+ class EntryAdmin(unfold_admin.ModelAdmin):
165
183
  list_display = (
166
184
  "id",
167
185
  "created_at",
@@ -183,7 +201,7 @@ class EntryAdmin(admin.ModelAdmin):
183
201
 
184
202
 
185
203
  @admin.register(Subscription)
186
- class KhojUserSubscription(admin.ModelAdmin):
204
+ class KhojUserSubscription(unfold_admin.ModelAdmin):
187
205
  list_display = (
188
206
  "id",
189
207
  "user",
@@ -195,18 +213,18 @@ class KhojUserSubscription(admin.ModelAdmin):
195
213
 
196
214
 
197
215
  @admin.register(ChatModelOptions)
198
- class ChatModelOptionsAdmin(admin.ModelAdmin):
216
+ class ChatModelOptionsAdmin(unfold_admin.ModelAdmin):
199
217
  list_display = (
200
218
  "id",
201
219
  "chat_model",
202
- "model_type",
220
+ "ai_model_api",
203
221
  "max_prompt_size",
204
222
  )
205
- search_fields = ("id", "chat_model", "model_type")
223
+ search_fields = ("id", "chat_model", "ai_model_api__name")
206
224
 
207
225
 
208
226
  @admin.register(TextToImageModelConfig)
209
- class TextToImageModelOptionsAdmin(admin.ModelAdmin):
227
+ class TextToImageModelOptionsAdmin(unfold_admin.ModelAdmin):
210
228
  list_display = (
211
229
  "id",
212
230
  "model_name",
@@ -215,8 +233,8 @@ class TextToImageModelOptionsAdmin(admin.ModelAdmin):
215
233
  search_fields = ("id", "model_name", "model_type")
216
234
 
217
235
 
218
- @admin.register(OpenAIProcessorConversationConfig)
219
- class OpenAIProcessorConversationConfigAdmin(admin.ModelAdmin):
236
+ @admin.register(AiModelApi)
237
+ class AiModelApiAdmin(unfold_admin.ModelAdmin):
220
238
  list_display = (
221
239
  "id",
222
240
  "name",
@@ -227,7 +245,7 @@ class OpenAIProcessorConversationConfigAdmin(admin.ModelAdmin):
227
245
 
228
246
 
229
247
  @admin.register(SearchModelConfig)
230
- class SearchModelConfigAdmin(admin.ModelAdmin):
248
+ class SearchModelConfigAdmin(unfold_admin.ModelAdmin):
231
249
  list_display = (
232
250
  "id",
233
251
  "name",
@@ -238,7 +256,7 @@ class SearchModelConfigAdmin(admin.ModelAdmin):
238
256
 
239
257
 
240
258
  @admin.register(ServerChatSettings)
241
- class ServerChatSettingsAdmin(admin.ModelAdmin):
259
+ class ServerChatSettingsAdmin(unfold_admin.ModelAdmin):
242
260
  list_display = (
243
261
  "chat_default",
244
262
  "chat_advanced",
@@ -247,7 +265,7 @@ class ServerChatSettingsAdmin(admin.ModelAdmin):
247
265
 
248
266
 
249
267
  @admin.register(WebScraper)
250
- class WebScraperAdmin(admin.ModelAdmin):
268
+ class WebScraperAdmin(unfold_admin.ModelAdmin):
251
269
  list_display = (
252
270
  "priority",
253
271
  "name",
@@ -261,7 +279,7 @@ class WebScraperAdmin(admin.ModelAdmin):
261
279
 
262
280
 
263
281
  @admin.register(Conversation)
264
- class ConversationAdmin(admin.ModelAdmin):
282
+ class ConversationAdmin(unfold_admin.ModelAdmin):
265
283
  list_display = (
266
284
  "id",
267
285
  "user",
@@ -270,7 +288,7 @@ class ConversationAdmin(admin.ModelAdmin):
270
288
  "client",
271
289
  )
272
290
  search_fields = ("id", "user__email", "user__username", "client__name")
273
- list_filter = ("agent",)
291
+ list_filter = ("agent", "client", "user")
274
292
  ordering = ("-created_at",)
275
293
 
276
294
  actions = ["export_selected_objects", "export_selected_minimal_objects"]
@@ -286,17 +304,10 @@ class ConversationAdmin(admin.ModelAdmin):
286
304
  modified_log = conversation.conversation_log
287
305
  chat_log = modified_log.get("chat", [])
288
306
  for idx, log in enumerate(chat_log):
289
- if (
290
- log["by"] == "khoj"
291
- and log["intent"]
292
- and log["intent"]["type"]
293
- and (
294
- log["intent"]["type"] == ImageIntentType.TEXT_TO_IMAGE.value
295
- or log["intent"]["type"] == ImageIntentType.TEXT_TO_IMAGE_V3.value
296
- )
297
- ):
298
- log["message"] = "inline image redacted for space"
307
+ if log["by"] == "khoj" and log["images"]:
308
+ log["images"] = ["inline image redacted for space"]
299
309
  chat_log[idx] = log
310
+
300
311
  modified_log["chat"] = chat_log
301
312
 
302
313
  writer.writerow(
@@ -367,7 +378,7 @@ class ConversationAdmin(admin.ModelAdmin):
367
378
 
368
379
 
369
380
  @admin.register(UserConversationConfig)
370
- class UserConversationConfigAdmin(admin.ModelAdmin):
381
+ class UserConversationConfigAdmin(unfold_admin.ModelAdmin):
371
382
  list_display = (
372
383
  "id",
373
384
  "get_user_email",
@@ -0,0 +1,85 @@
1
+ # Made manually by sabaimran for use by Django 5.0.9 on 2024-12-01 16:59
2
+
3
+ from django.db import migrations, models
4
+
5
+ # This script was written alongside when Pydantic validation was added to the Conversation conversation_log field.
6
+
7
+
8
+ def migrate_generated_assets(apps, schema_editor):
9
+ Conversation = apps.get_model("database", "Conversation")
10
+
11
+ # Process conversations in chunks
12
+ for conversation in Conversation.objects.iterator():
13
+ try:
14
+ meta_log = conversation.conversation_log
15
+ modified = False
16
+
17
+ for chat in meta_log.get("chat", []):
18
+ intent_type = chat.get("intent", {}).get("type")
19
+
20
+ if intent_type and chat["by"] == "khoj":
21
+ if intent_type and "text-to-image" in intent_type:
22
+ # Migrate the generated image to the new format
23
+ chat["images"] = [chat.get("message")]
24
+ chat["message"] = chat["intent"]["inferred-queries"][0]
25
+ modified = True
26
+
27
+ if intent_type and "excalidraw" in intent_type:
28
+ # Migrate the generated excalidraw to the new format
29
+ chat["excalidrawDiagram"] = chat.get("message")
30
+ chat["message"] = chat["intent"]["inferred-queries"][0]
31
+ modified = True
32
+
33
+ # Only save if changes were made
34
+ if modified:
35
+ conversation.conversation_log = meta_log
36
+ conversation.save()
37
+
38
+ except Exception as e:
39
+ print(f"Error processing conversation {conversation.id}: {str(e)}")
40
+ continue
41
+
42
+
43
+ def reverse_migration(apps, schema_editor):
44
+ Conversation = apps.get_model("database", "Conversation")
45
+
46
+ # Process conversations in chunks
47
+ for conversation in Conversation.objects.iterator():
48
+ try:
49
+ meta_log = conversation.conversation_log
50
+ modified = False
51
+
52
+ for chat in meta_log.get("chat", []):
53
+ intent_type = chat.get("intent", {}).get("type")
54
+
55
+ if intent_type and chat["by"] == "khoj":
56
+ if intent_type and "text-to-image" in intent_type:
57
+ # Migrate the generated image back to the old format
58
+ chat["message"] = chat.get("images", [])[0]
59
+ chat.pop("images", None)
60
+ modified = True
61
+
62
+ if intent_type and "excalidraw" in intent_type:
63
+ # Migrate the generated excalidraw back to the old format
64
+ chat["message"] = chat.get("excalidrawDiagram")
65
+ chat.pop("excalidrawDiagram", None)
66
+ modified = True
67
+
68
+ # Only save if changes were made
69
+ if modified:
70
+ conversation.conversation_log = meta_log
71
+ conversation.save()
72
+
73
+ except Exception as e:
74
+ print(f"Error processing conversation {conversation.id}: {str(e)}")
75
+ continue
76
+
77
+
78
+ class Migration(migrations.Migration):
79
+ dependencies = [
80
+ ("database", "0074_alter_conversation_title"),
81
+ ]
82
+
83
+ operations = [
84
+ migrations.RunPython(migrate_generated_assets, reverse_migration),
85
+ ]
@@ -0,0 +1,26 @@
1
+ # Generated by Django 5.0.9 on 2024-12-05 09:00
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ dependencies = [
8
+ ("database", "0075_migrate_generated_assets_and_validate"),
9
+ ]
10
+
11
+ operations = [
12
+ migrations.RenameModel(
13
+ old_name="OpenAIProcessorConversationConfig",
14
+ new_name="AiModelApi",
15
+ ),
16
+ migrations.RenameField(
17
+ model_name="chatmodeloptions",
18
+ old_name="openai_config",
19
+ new_name="ai_model_api",
20
+ ),
21
+ migrations.RenameField(
22
+ model_name="texttoimagemodelconfig",
23
+ old_name="openai_config",
24
+ new_name="ai_model_api",
25
+ ),
26
+ ]