khoj 1.26.1__tar.gz → 1.26.5.dev35__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.
- {khoj-1.26.1 → khoj-1.26.5.dev35}/PKG-INFO +2 -2
- {khoj-1.26.1 → khoj-1.26.5.dev35}/pyproject.toml +1 -1
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/configure.py +3 -3
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/adapters/__init__.py +68 -35
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/admin.py +2 -0
- khoj-1.26.5.dev35/src/khoj/database/management/commands/change_default_model.py +182 -0
- khoj-1.26.5.dev35/src/khoj/database/migrations/0070_alter_agent_input_tools_alter_agent_output_modes.py +46 -0
- khoj-1.26.5.dev35/src/khoj/database/migrations/0071_subscription_enabled_trial_at_and_more.py +32 -0
- khoj-1.26.5.dev35/src/khoj/database/migrations/0072_entry_search_model.py +24 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/models/__init__.py +10 -3
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/404/index.html +1 -1
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/1210.132a7e1910006bbb.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/1279-f37ee4a388ebf544.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/1459.690bf20e7d7b7090.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/1603-b9d95833e0e025e8.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/1970-1d6d0c1b00b4f343.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/2697-61fcba89fd87eab4.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/3423-8e9c420574a9fbe3.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/394-6bcb8c429f168f21.js +3 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/4602-8eeb4b76385ad159.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/5512-94c7c2bbcf58c19d.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/7113-f2e114d7034a0835.js +1 -0
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/3678-ef0d20e267e9f010.js → khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/7883-b1305ec254213afe.js +2 -2
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/4086-2c74808ba38a5a0f.js → khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/8840-b8d7b9f0923c6651.js +1 -1
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/9417-759984ad62caa3dc.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/9479-4b443fdcc99141c9.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/94ca1967.5584df65931cfe83.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/964ecbae.ea4eab2a3a835ffe.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/app/agents/page-adbf3cd470da248f.js +1 -0
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/automations/page-5480731341f34450.js → khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/app/automations/page-d3edae545a1b5393.js +1 -1
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/app/chat/page-460d262a3ef77503.js +1 -0
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/factchecker/page-e7b34316ec6f44de.js → khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/app/factchecker/page-c8e5bd563a8155eb.js +1 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/page-10a5aad6e04f3cf8.js → khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/app/page-337bba1c554d0742.js +1 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/search/page-d56541c746fded7d.js → khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/app/search/page-a5c277eff207959e.js +1 -1
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/app/settings/page-60097571dd9f9d37.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/page-97c4e60105009649.js +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/chunks/webpack-35c06f544e18305f.js +1 -0
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/css/c808691c459e3887.css → khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/css/3cf13271869a4aeb.css +1 -1
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/css/4cae6c0e5c72fb2d.css +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/css/76d55eb435962b19.css +25 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/css/afd3d45cc65d55d8.css +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/agents/index.html +1 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/agents/index.txt +2 -2
- khoj-1.26.5.dev35/src/khoj/interface/compiled/automations/index.html +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/automations/index.txt +8 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/chat/index.html +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/chat/index.txt +7 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/factchecker/index.html +1 -1
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/factchecker/index.txt +2 -2
- khoj-1.26.5.dev35/src/khoj/interface/compiled/index.html +1 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/index.txt +2 -2
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/search/index.html +1 -1
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/search/index.txt +2 -2
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/settings/index.html +1 -1
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/settings/index.txt +2 -2
- khoj-1.26.5.dev35/src/khoj/interface/compiled/share/chat/index.html +1 -0
- khoj-1.26.5.dev35/src/khoj/interface/compiled/share/chat/index.txt +7 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/pdf/pdf_to_entries.py +1 -1
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/text_to_entries.py +4 -2
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/google/gemini_chat.py +28 -13
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/google/utils.py +34 -12
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/openai/gpt.py +4 -4
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/prompts.py +144 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/utils.py +22 -13
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/image/generate.py +5 -5
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/tools/online_search.py +4 -4
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/api.py +16 -6
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/api_agents.py +41 -20
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/api_chat.py +86 -47
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/api_model.py +0 -33
- khoj-1.26.1/src/khoj/routers/subscription.py → khoj-1.26.5.dev35/src/khoj/routers/api_subscription.py +21 -3
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/auth.py +2 -2
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/helpers.py +235 -39
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/web_client.py +0 -11
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/search_type/text_search.py +6 -2
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/helpers.py +7 -3
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/121-7024f479c297aef0.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/1603-fa3ee48860b9dc5c.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/2697-a38d01981ad3bdf8.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/4051-2cf66369d6ca0f1d.js +0 -3
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/477-ec86e93db10571c1.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/51-e8f5bdb69b5ea421.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/7762-79f2205740622b5c.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/9178-899fe9a6b754ecfe.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/9417-46ed3aaa639c85ef.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/9479-ea776e73f549090c.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/agents/page-88aa3042711107b7.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/chat/page-702057ccbcf27881.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/settings/page-e044a999468a7c5d.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/page-fbbd66a4d4633438.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/webpack-c0cd5a6afb1f0798.js +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/css/2de69f0be774c768.css +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/css/3e1f1fdd70775091.css +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/css/b9a6bf04305d98d7.css +0 -25
- khoj-1.26.1/src/khoj/interface/compiled/agents/index.html +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/automations/index.html +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/automations/index.txt +0 -8
- khoj-1.26.1/src/khoj/interface/compiled/chat/index.html +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/chat/index.txt +0 -7
- khoj-1.26.1/src/khoj/interface/compiled/index.html +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/share/chat/index.html +0 -1
- khoj-1.26.1/src/khoj/interface/compiled/share/chat/index.txt +0 -7
- {khoj-1.26.1 → khoj-1.26.5.dev35}/.gitignore +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/LICENSE +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/README.md +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/app/README.md +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/app/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/app/asgi.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/app/settings.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/app/urls.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/apps.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/management/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/management/commands/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/management/commands/change_generated_images_url.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/management/commands/convert_images_png_to_webp.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0001_khojuser.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0002_googleuser.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0003_vector_extension.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0004_content_types_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0005_embeddings_corpus_id.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0006_embeddingsdates.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0007_add_conversation.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0008_alter_conversation_conversation_log.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0009_khojapiuser.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0010_chatmodeloptions_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0010_rename_embeddings_entry_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0011_merge_20231102_0138.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0012_entry_file_source.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0013_subscription.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0014_alter_googleuser_picture.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0015_alter_subscription_user.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0016_alter_subscription_renewal_date.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0017_searchmodel.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0018_searchmodelconfig_delete_searchmodel.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0019_alter_googleuser_family_name_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0020_reflectivequestion.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0021_speechtotextmodeloptions_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0022_texttoimagemodelconfig.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0023_usersearchmodelconfig.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0024_alter_entry_embeddings.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0025_clientapplication_khojuser_phone_number_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0025_searchmodelconfig_embeddings_inference_endpoint_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0026_searchmodelconfig_cross_encoder_inference_endpoint_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0027_merge_20240118_1324.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0028_khojuser_verified_phone_number.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0029_userrequests.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0030_conversation_slug_and_title.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0031_agent_conversation_agent.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0031_alter_googleuser_locale.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0032_merge_20240322_0427.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0033_rename_tuning_agent_personality.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0034_alter_chatmodeloptions_chat_model.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0035_processlock.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0036_alter_processlock_name.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0036_delete_offlinechatprocessorconversationconfig.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0036_publicconversation.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0037_chatmodeloptions_openai_config_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0037_searchmodelconfig_bi_encoder_docs_encode_config_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0038_merge_20240425_0857.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0038_merge_20240426_1640.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0039_merge_20240501_0301.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0040_alter_processlock_name.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0040_merge_20240504_1010.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0041_merge_20240505_1234.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0042_serverchatsettings.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0043_alter_chatmodeloptions_model_type.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0044_conversation_file_filters.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0045_fileobject.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0046_khojuser_email_verification_code_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0047_alter_entry_file_type.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0048_voicemodeloption_uservoicemodelconfig.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0049_datastore.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0049_texttoimagemodelconfig_api_key_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0050_alter_processlock_name.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0051_merge_20240702_1220.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0052_alter_searchmodelconfig_bi_encoder_docs_encode_config_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0053_agent_style_color_agent_style_icon.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0054_alter_agent_style_color.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0055_alter_agent_style_icon.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0056_chatmodeloptions_vision_enabled.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0056_searchmodelconfig_cross_encoder_model_config.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0057_merge_20240816_1409.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0057_remove_serverchatsettings_default_model_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0058_alter_chatmodeloptions_chat_model.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0059_searchmodelconfig_bi_encoder_confidence_threshold.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0060_merge_20240905_1828.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0061_alter_chatmodeloptions_model_type.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0061_alter_texttoimagemodelconfig_model_type.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0062_merge_20240913_0222.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0063_conversation_temp_id.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0064_remove_conversation_temp_id_alter_conversation_id.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0065_remove_agent_avatar_remove_agent_public_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0066_remove_agent_tools_agent_input_tools_and_more.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0067_alter_agent_style_icon.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0068_alter_agent_output_modes.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/0069_webscraper_serverchatsettings_web_scraper.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/migrations/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/database/tests.py +0 -0
- {khoj-1.26.1/src/khoj/interface/compiled/_next/static/K1DjEvR838A-wSpSmyfVM → khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/GH1Wb7mTB8D7ZsHW6iRF6}/_buildManifest.js +0 -0
- {khoj-1.26.1/src/khoj/interface/compiled/_next/static/K1DjEvR838A-wSpSmyfVM → khoj-1.26.5.dev35/src/khoj/interface/compiled/_next/static/GH1Wb7mTB8D7ZsHW6iRF6}/_ssgManifest.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/3062-71ed4b46ac2bb87c.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/3110-ef2cacd1b8d79ad8.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/4504-1629487c8bc82203.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/6297-d1c842ed3f714ab0.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/7023-a5bf5744d19b3bd3.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/9001-3b27af6d5f21df44.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/app/_not-found/page-07ff4ab42b07845e.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/app/agents/layout-75636ab3a413fa8e.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/app/automations/layout-27c28e923c9b1ff0.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/app/chat/layout-96fcf62857bf8f30.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/app/factchecker/layout-7b30c541c05fb904.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/app/layout-d0f0a9067427fb20.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/app/search/layout-3720f1362310bebb.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/app/settings/layout-a8f33dfe92f997fb.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-2df56074e42adaa0.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/d3ac728e-a9e3522eef9b6b28.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/fd9d1056-2b978342deb60015.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/main-app-6d6ee3495efe03d4.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/main-f84cd3c1873cd842.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/pages/_app-f870474a17b7f2fd.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/css/2272c73fc7a3b571.css +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/css/467a524c75e7d7c0.css +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/css/553f9cdcc7a2bcd6.css +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/css/592ca99f5122e75a.css +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/css/5a400c87d295e68a.css +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/0e790e04fd40ad16-s.p.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/4221e1667cd19c7d-s.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/6c276159aa0eb14b-s.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/6cc0b9500e4f9168-s.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/9d9319a7a2ac39c6-s.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.1608a09b.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.4aafdb68.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.a79f1c31.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.b6770918.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.cce5b8ec.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.ec17d132.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.07ef19e7.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.55fac258.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.dad44a7f.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.9f256b85.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.b18f59e1.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.d42a5579.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.7c187121.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.d3c882a6.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.ed38e79f.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.b74a1a8b.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.c3fb5ac2.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.d181c465.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.6f2bb1df.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.70d8b0a5.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.e3f82f9d.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.47373d1e.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.8916142b.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.9024d815.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.0462f03b.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.7f51fe03.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.b7f8fe9b.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.572d331f.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.a879cf83.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.f1035d8d.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.5295ba48.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.939bc644.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.f28c23ac.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.8c5b5494.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.94e1e8dc.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.bf59d231.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.3b1e59b3.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.7c9bc82b.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.b4c20c84.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.74048478.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.ba21ed5f.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.d4d7ba48.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.03e9641d.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.07505710.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.fe9cbbe1.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.e1e279cb.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.eae34984.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.fabc004a.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.57727022.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.5916a24f.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.d6b476ec.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.9acaf01c.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.a144ef58.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.b4230e7e.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.10d95fd3.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.7a996c9d.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.fbccdabe.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.6258592b.woff +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.a8709e36.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.d97aaf4a.ttf +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/a75c8ea86756d52d-s.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/abce7c400ca31a51-s.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/f759c939737fb668-s.woff2 +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/globe.98e105ca.webp +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/agents.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/assets/icons/khoj_lantern.ico +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/assets/icons/khoj_lantern_128x128.png +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/assets/icons/khoj_lantern_256x256.png +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/assets/icons/khoj_lantern_logomarktype_1200x630.png +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/assets/samples/desktop-browse-draw-sample.png +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/assets/samples/desktop-plain-chat-sample.png +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/automation.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/chat.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/close.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/copy-button-success.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/copy-button.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/khoj.webmanifest +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/logo.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/send.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/share.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/thumbs-down.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/compiled/thumbs-up.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/email/feedback.html +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/email/magic_link.html +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/email/task.html +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/email/welcome.html +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/agents.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/automation.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/chat.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/favicon-128x128.ico +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/github.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/khoj-logo-sideways-200.png +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/khoj-logo-sideways-500.png +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/khoj-logo-sideways.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/khoj.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/logotype.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/search.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/icons/sync.svg +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/khoj.css +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/assets/utils.js +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/base_config.html +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/content_source_github_input.html +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/login.html +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/interface/web/utils.html +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/main.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/manage.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/migrations/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/migrations/migrate_offline_chat_default_model.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/migrations/migrate_offline_chat_default_model_2.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/migrations/migrate_offline_chat_schema.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/migrations/migrate_offline_model.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/migrations/migrate_processor_config_openai.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/migrations/migrate_server_pg.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/migrations/migrate_version.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/docx/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/docx/docx_to_entries.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/github/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/github/github_to_entries.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/images/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/images/image_to_entries.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/markdown/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/markdown/markdown_to_entries.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/notion/notion_to_entries.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/org_mode/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/org_mode/org_to_entries.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/org_mode/orgnode.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/pdf/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/plaintext/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/content/plaintext/plaintext_to_entries.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/anthropic/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/anthropic/anthropic_chat.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/anthropic/utils.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/google/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/offline/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/offline/chat_model.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/offline/utils.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/offline/whisper.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/openai/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/openai/utils.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/conversation/openai/whisper.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/embeddings.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/speech/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/speech/text_to_speech.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/processor/tools/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/api_content.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/api_phone.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/email.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/notion.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/storage.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/routers/twilio.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/search_filter/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/search_filter/base_filter.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/search_filter/date_filter.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/search_filter/file_filter.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/search_filter/word_filter.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/search_type/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/__init__.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/cli.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/config.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/constants.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/fs_syncer.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/initialization.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/jsonl.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/models.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/rawconfig.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/state.py +0 -0
- {khoj-1.26.1 → khoj-1.26.5.dev35}/src/khoj/utils/yaml.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: khoj
|
3
|
-
Version: 1.26.
|
3
|
+
Version: 1.26.5.dev35
|
4
4
|
Summary: Your Second Brain
|
5
5
|
Project-URL: Homepage, https://khoj.dev
|
6
6
|
Project-URL: Documentation, https://docs.khoj.dev
|
@@ -56,7 +56,7 @@ Requires-Dist: pillow~=10.0.0
|
|
56
56
|
Requires-Dist: psutil>=5.8.0
|
57
57
|
Requires-Dist: psycopg2-binary==2.9.9
|
58
58
|
Requires-Dist: pydantic[email]>=2.0.0
|
59
|
-
Requires-Dist: pymupdf
|
59
|
+
Requires-Dist: pymupdf==1.24.11
|
60
60
|
Requires-Dist: python-multipart>=0.0.7
|
61
61
|
Requires-Dist: pytz~=2024.1
|
62
62
|
Requires-Dist: pyyaml~=6.0
|
@@ -108,7 +108,7 @@ class UserAuthenticationBackend(AuthenticationBackend):
|
|
108
108
|
password="default",
|
109
109
|
)
|
110
110
|
renewal_date = make_aware(datetime.strptime("2100-04-01", "%Y-%m-%d"))
|
111
|
-
Subscription.objects.create(user=default_user, type=
|
111
|
+
Subscription.objects.create(user=default_user, type=Subscription.Type.STANDARD, renewal_date=renewal_date)
|
112
112
|
|
113
113
|
async def authenticate(self, request: HTTPConnection):
|
114
114
|
current_user = request.session.get("user")
|
@@ -172,7 +172,7 @@ class UserAuthenticationBackend(AuthenticationBackend):
|
|
172
172
|
request=request,
|
173
173
|
telemetry_type="api",
|
174
174
|
api="create_user",
|
175
|
-
metadata={"
|
175
|
+
metadata={"server_id": str(user.uuid)},
|
176
176
|
)
|
177
177
|
logger.log(logging.INFO, f"🥳 New User Created: {user.uuid}")
|
178
178
|
else:
|
@@ -312,7 +312,7 @@ def configure_routes(app):
|
|
312
312
|
logger.info("🔑 Enabled Authentication")
|
313
313
|
|
314
314
|
if state.billing_enabled:
|
315
|
-
from khoj.routers.
|
315
|
+
from khoj.routers.api_subscription import subscription_router
|
316
316
|
|
317
317
|
app.include_router(subscription_router, prefix="/api/subscription")
|
318
318
|
logger.info("💳 Enabled Billing")
|
@@ -70,6 +70,9 @@ from khoj.utils.helpers import (
|
|
70
70
|
logger = logging.getLogger(__name__)
|
71
71
|
|
72
72
|
|
73
|
+
LENGTH_OF_FREE_TRIAL = 7 #
|
74
|
+
|
75
|
+
|
73
76
|
class SubscriptionState(Enum):
|
74
77
|
TRIAL = "trial"
|
75
78
|
SUBSCRIBED = "subscribed"
|
@@ -168,7 +171,7 @@ async def acreate_user_by_phone_number(phone_number: str) -> KhojUser:
|
|
168
171
|
)
|
169
172
|
await user.asave()
|
170
173
|
|
171
|
-
await Subscription.objects.acreate(user=user, type=
|
174
|
+
await Subscription.objects.acreate(user=user, type=Subscription.Type.STANDARD)
|
172
175
|
|
173
176
|
return user
|
174
177
|
|
@@ -185,11 +188,29 @@ async def aget_or_create_user_by_email(email: str) -> tuple[KhojUser, bool]:
|
|
185
188
|
|
186
189
|
user_subscription = await Subscription.objects.filter(user=user).afirst()
|
187
190
|
if not user_subscription:
|
188
|
-
await Subscription.objects.acreate(user=user, type=
|
191
|
+
await Subscription.objects.acreate(user=user, type=Subscription.Type.STANDARD)
|
189
192
|
|
190
193
|
return user, is_new
|
191
194
|
|
192
195
|
|
196
|
+
async def astart_trial_subscription(user: KhojUser) -> Subscription:
|
197
|
+
subscription = await Subscription.objects.filter(user=user).afirst()
|
198
|
+
if not subscription:
|
199
|
+
raise HTTPException(status_code=400, detail="User does not have a subscription")
|
200
|
+
|
201
|
+
if subscription.type == Subscription.Type.TRIAL:
|
202
|
+
raise HTTPException(status_code=400, detail="User already has a trial subscription")
|
203
|
+
|
204
|
+
if subscription.enabled_trial_at:
|
205
|
+
raise HTTPException(status_code=400, detail="User already has a trial subscription")
|
206
|
+
|
207
|
+
subscription.type = Subscription.Type.TRIAL
|
208
|
+
subscription.enabled_trial_at = datetime.now(tz=timezone.utc)
|
209
|
+
subscription.renewal_date = datetime.now(tz=timezone.utc) + timedelta(days=LENGTH_OF_FREE_TRIAL)
|
210
|
+
await subscription.asave()
|
211
|
+
return subscription
|
212
|
+
|
213
|
+
|
193
214
|
async def aget_user_validated_by_email_verification_code(code: str) -> KhojUser:
|
194
215
|
user = await KhojUser.objects.filter(email_verification_code=code).afirst()
|
195
216
|
if not user:
|
@@ -221,7 +242,7 @@ async def create_user_by_google_token(token: dict) -> KhojUser:
|
|
221
242
|
user=user,
|
222
243
|
)
|
223
244
|
|
224
|
-
await Subscription.objects.acreate(user=user, type=
|
245
|
+
await Subscription.objects.acreate(user=user, type=Subscription.Type.STANDARD)
|
225
246
|
|
226
247
|
return user
|
227
248
|
|
@@ -279,16 +300,15 @@ def subscription_to_state(subscription: Subscription) -> str:
|
|
279
300
|
if not subscription:
|
280
301
|
return SubscriptionState.INVALID.value
|
281
302
|
elif subscription.type == Subscription.Type.TRIAL:
|
282
|
-
#
|
283
|
-
if datetime.now(tz=timezone.utc)
|
303
|
+
# Check if the trial has expired
|
304
|
+
if datetime.now(tz=timezone.utc) > subscription.renewal_date:
|
284
305
|
return SubscriptionState.EXPIRED.value
|
285
|
-
|
286
306
|
return SubscriptionState.TRIAL.value
|
287
|
-
elif subscription.is_recurring and subscription.renewal_date
|
307
|
+
elif subscription.is_recurring and subscription.renewal_date > datetime.now(tz=timezone.utc):
|
288
308
|
return SubscriptionState.SUBSCRIBED.value
|
289
309
|
elif not subscription.is_recurring and subscription.renewal_date is None:
|
290
310
|
return SubscriptionState.EXPIRED.value
|
291
|
-
elif not subscription.is_recurring and subscription.renewal_date
|
311
|
+
elif not subscription.is_recurring and subscription.renewal_date > datetime.now(tz=timezone.utc):
|
292
312
|
return SubscriptionState.UNSUBSCRIBED.value
|
293
313
|
elif not subscription.is_recurring and subscription.renewal_date < datetime.now(tz=timezone.utc):
|
294
314
|
return SubscriptionState.EXPIRED.value
|
@@ -446,18 +466,26 @@ async def set_user_github_config(user: KhojUser, pat_token: str, repos: list):
|
|
446
466
|
return config
|
447
467
|
|
448
468
|
|
449
|
-
def
|
450
|
-
|
451
|
-
return UserSearchModelConfig.objects.filter(user=user).first().setting
|
469
|
+
def get_default_search_model() -> SearchModelConfig:
|
470
|
+
default_search_model = SearchModelConfig.objects.filter(name="default").first()
|
452
471
|
|
453
|
-
if
|
454
|
-
return
|
472
|
+
if default_search_model:
|
473
|
+
return default_search_model
|
455
474
|
else:
|
456
475
|
SearchModelConfig.objects.create()
|
457
476
|
|
458
477
|
return SearchModelConfig.objects.first()
|
459
478
|
|
460
479
|
|
480
|
+
def get_user_default_search_model(user: KhojUser = None) -> SearchModelConfig:
|
481
|
+
if user:
|
482
|
+
user_search_model = UserSearchModelConfig.objects.filter(user=user).first()
|
483
|
+
if user_search_model:
|
484
|
+
return user_search_model.setting
|
485
|
+
|
486
|
+
return get_default_search_model()
|
487
|
+
|
488
|
+
|
461
489
|
def get_or_create_search_models():
|
462
490
|
search_models = SearchModelConfig.objects.all()
|
463
491
|
if search_models.count() == 0:
|
@@ -467,21 +495,6 @@ def get_or_create_search_models():
|
|
467
495
|
return search_models
|
468
496
|
|
469
497
|
|
470
|
-
async def aset_user_search_model(user: KhojUser, search_model_config_id: int):
|
471
|
-
config = await SearchModelConfig.objects.filter(id=search_model_config_id).afirst()
|
472
|
-
if not config:
|
473
|
-
return None
|
474
|
-
new_config, _ = await UserSearchModelConfig.objects.aupdate_or_create(user=user, defaults={"setting": config})
|
475
|
-
return new_config
|
476
|
-
|
477
|
-
|
478
|
-
async def aget_user_search_model(user: KhojUser):
|
479
|
-
config = await UserSearchModelConfig.objects.filter(user=user).prefetch_related("setting").afirst()
|
480
|
-
if not config:
|
481
|
-
return None
|
482
|
-
return config.setting
|
483
|
-
|
484
|
-
|
485
498
|
class ProcessLockAdapters:
|
486
499
|
@staticmethod
|
487
500
|
def get_process_lock(process_name: str):
|
@@ -622,6 +635,8 @@ class AgentAdapters:
|
|
622
635
|
@staticmethod
|
623
636
|
def get_all_accessible_agents(user: KhojUser = None):
|
624
637
|
public_query = Q(privacy_level=Agent.PrivacyLevel.PUBLIC)
|
638
|
+
# TODO Update this to allow any public agent that's officially approved once that experience is launched
|
639
|
+
public_query &= Q(managed_by_admin=True)
|
625
640
|
if user:
|
626
641
|
return (
|
627
642
|
Agent.objects.filter(public_query | Q(creator=user))
|
@@ -640,6 +655,16 @@ class AgentAdapters:
|
|
640
655
|
agents = await sync_to_async(AgentAdapters.get_all_accessible_agents)(user)
|
641
656
|
return await sync_to_async(list)(agents)
|
642
657
|
|
658
|
+
@staticmethod
|
659
|
+
async def ais_agent_accessible(agent: Agent, user: KhojUser) -> bool:
|
660
|
+
if agent.privacy_level == Agent.PrivacyLevel.PUBLIC:
|
661
|
+
return True
|
662
|
+
if agent.creator == user:
|
663
|
+
return True
|
664
|
+
if agent.privacy_level == Agent.PrivacyLevel.PROTECTED:
|
665
|
+
return True
|
666
|
+
return False
|
667
|
+
|
643
668
|
@staticmethod
|
644
669
|
def get_conversation_agent_by_id(agent_id: int):
|
645
670
|
agent = Agent.objects.filter(id=agent_id).first()
|
@@ -1463,12 +1488,15 @@ class EntryAdapters:
|
|
1463
1488
|
file_filters = EntryAdapters.file_filter.get_filter_terms(query)
|
1464
1489
|
date_filters = EntryAdapters.date_filter.get_query_date_range(query)
|
1465
1490
|
|
1466
|
-
|
1491
|
+
owner_filter = Q()
|
1492
|
+
|
1493
|
+
if user != None:
|
1494
|
+
owner_filter = Q(user=user)
|
1467
1495
|
if agent != None:
|
1468
|
-
|
1496
|
+
owner_filter |= Q(agent=agent)
|
1469
1497
|
|
1470
1498
|
if len(word_filters) == 0 and len(file_filters) == 0 and len(date_filters) == 0:
|
1471
|
-
return Entry.objects.filter(
|
1499
|
+
return Entry.objects.filter(owner_filter)
|
1472
1500
|
|
1473
1501
|
for term in word_filters:
|
1474
1502
|
if term.startswith("+"):
|
@@ -1504,7 +1532,7 @@ class EntryAdapters:
|
|
1504
1532
|
formatted_max_date = date.fromtimestamp(max_date).strftime("%Y-%m-%d")
|
1505
1533
|
q_filter_terms &= Q(embeddings_dates__date__lte=formatted_max_date)
|
1506
1534
|
|
1507
|
-
relevant_entries = Entry.objects.filter(
|
1535
|
+
relevant_entries = Entry.objects.filter(owner_filter).filter(q_filter_terms)
|
1508
1536
|
if file_type_filter:
|
1509
1537
|
relevant_entries = relevant_entries.filter(file_type=file_type_filter)
|
1510
1538
|
return relevant_entries
|
@@ -1519,13 +1547,18 @@ class EntryAdapters:
|
|
1519
1547
|
max_distance: float = math.inf,
|
1520
1548
|
agent: Agent = None,
|
1521
1549
|
):
|
1522
|
-
|
1550
|
+
owner_filter = Q()
|
1523
1551
|
|
1552
|
+
if user != None:
|
1553
|
+
owner_filter = Q(user=user)
|
1524
1554
|
if agent != None:
|
1525
|
-
|
1555
|
+
owner_filter |= Q(agent=agent)
|
1556
|
+
|
1557
|
+
if owner_filter == Q():
|
1558
|
+
return Entry.objects.none()
|
1526
1559
|
|
1527
1560
|
relevant_entries = EntryAdapters.apply_filters(user, raw_query, file_type_filter, agent)
|
1528
|
-
relevant_entries = relevant_entries.filter(
|
1561
|
+
relevant_entries = relevant_entries.filter(owner_filter).annotate(
|
1529
1562
|
distance=CosineDistance("embeddings", embeddings)
|
1530
1563
|
)
|
1531
1564
|
relevant_entries = relevant_entries.filter(distance__lte=max_distance)
|
@@ -126,6 +126,7 @@ class EntryAdmin(admin.ModelAdmin):
|
|
126
126
|
"created_at",
|
127
127
|
"updated_at",
|
128
128
|
"user",
|
129
|
+
"agent",
|
129
130
|
"file_source",
|
130
131
|
"file_type",
|
131
132
|
"file_name",
|
@@ -135,6 +136,7 @@ class EntryAdmin(admin.ModelAdmin):
|
|
135
136
|
list_filter = (
|
136
137
|
"file_type",
|
137
138
|
"user__email",
|
139
|
+
"search_model__name",
|
138
140
|
)
|
139
141
|
ordering = ("-created_at",)
|
140
142
|
|
@@ -0,0 +1,182 @@
|
|
1
|
+
import logging
|
2
|
+
from typing import List
|
3
|
+
|
4
|
+
from django.core.management.base import BaseCommand
|
5
|
+
from django.db import transaction
|
6
|
+
from django.db.models import Count, Q
|
7
|
+
from tqdm import tqdm
|
8
|
+
|
9
|
+
from khoj.database.adapters import get_default_search_model
|
10
|
+
from khoj.database.models import (
|
11
|
+
Agent,
|
12
|
+
Entry,
|
13
|
+
KhojUser,
|
14
|
+
SearchModelConfig,
|
15
|
+
UserSearchModelConfig,
|
16
|
+
)
|
17
|
+
from khoj.processor.embeddings import EmbeddingsModel
|
18
|
+
|
19
|
+
logging.basicConfig(level=logging.INFO)
|
20
|
+
logger = logging.getLogger(__name__)
|
21
|
+
|
22
|
+
|
23
|
+
class Command(BaseCommand):
|
24
|
+
help = "Convert all existing Entry objects to use a new default Search model."
|
25
|
+
|
26
|
+
def add_arguments(self, parser):
|
27
|
+
# Pass default SearchModelConfig ID
|
28
|
+
parser.add_argument(
|
29
|
+
"--search_model_id",
|
30
|
+
action="store",
|
31
|
+
help="ID of the SearchModelConfig object to set as the default search model for all existing Entry objects and UserSearchModelConfig objects.",
|
32
|
+
required=True,
|
33
|
+
)
|
34
|
+
|
35
|
+
# Set the apply flag to apply the new default Search model to all existing Entry objects and UserSearchModelConfig objects.
|
36
|
+
parser.add_argument(
|
37
|
+
"--apply",
|
38
|
+
action="store_true",
|
39
|
+
help="Apply the new default Search model to all existing Entry objects and UserSearchModelConfig objects. Otherwise, only display the number of Entry objects and UserSearchModelConfig objects that will be affected.",
|
40
|
+
)
|
41
|
+
|
42
|
+
def handle(self, *args, **options):
|
43
|
+
@transaction.atomic
|
44
|
+
def regenerate_entries(entry_filter: Q, embeddings_model: EmbeddingsModel, search_model: SearchModelConfig):
|
45
|
+
entries = Entry.objects.filter(entry_filter).all()
|
46
|
+
compiled_entries = [entry.compiled for entry in entries]
|
47
|
+
updated_entries: List[Entry] = []
|
48
|
+
try:
|
49
|
+
embeddings = embeddings_model.embed_documents(compiled_entries)
|
50
|
+
|
51
|
+
except Exception as e:
|
52
|
+
logger.error(f"Error embedding documents: {e}")
|
53
|
+
return
|
54
|
+
|
55
|
+
for i, entry in enumerate(tqdm(entries)):
|
56
|
+
entry.embeddings = embeddings[i]
|
57
|
+
entry.search_model_id = search_model.id
|
58
|
+
updated_entries.append(entry)
|
59
|
+
|
60
|
+
Entry.objects.bulk_update(updated_entries, ["embeddings", "search_model_id", "file_path"])
|
61
|
+
|
62
|
+
search_model_config_id = options.get("search_model_id")
|
63
|
+
apply = options.get("apply")
|
64
|
+
|
65
|
+
logger.info(f"SearchModelConfig ID: {search_model_config_id}")
|
66
|
+
logger.info(f"Apply: {apply}")
|
67
|
+
|
68
|
+
embeddings_model = dict()
|
69
|
+
|
70
|
+
search_models = SearchModelConfig.objects.all()
|
71
|
+
for model in search_models:
|
72
|
+
embeddings_model.update(
|
73
|
+
{
|
74
|
+
model.name: EmbeddingsModel(
|
75
|
+
model.bi_encoder,
|
76
|
+
model.embeddings_inference_endpoint,
|
77
|
+
model.embeddings_inference_endpoint_api_key,
|
78
|
+
query_encode_kwargs=model.bi_encoder_query_encode_config,
|
79
|
+
docs_encode_kwargs=model.bi_encoder_docs_encode_config,
|
80
|
+
model_kwargs=model.bi_encoder_model_config,
|
81
|
+
)
|
82
|
+
}
|
83
|
+
)
|
84
|
+
|
85
|
+
new_default_search_model_config = SearchModelConfig.objects.get(id=search_model_config_id)
|
86
|
+
logger.info(f"New default Search model: {new_default_search_model_config}")
|
87
|
+
user_search_model_configs_to_update = UserSearchModelConfig.objects.exclude(
|
88
|
+
setting_id=search_model_config_id
|
89
|
+
).all()
|
90
|
+
logger.info(f"Number of UserSearchModelConfig objects to update: {user_search_model_configs_to_update.count()}")
|
91
|
+
|
92
|
+
for user_config in user_search_model_configs_to_update:
|
93
|
+
affected_user = user_config.user
|
94
|
+
entry_filter = Q(user=affected_user)
|
95
|
+
relevant_entries = Entry.objects.filter(entry_filter).all()
|
96
|
+
logger.info(f"Number of Entry objects to update for user {affected_user}: {relevant_entries.count()}")
|
97
|
+
|
98
|
+
if apply:
|
99
|
+
try:
|
100
|
+
regenerate_entries(
|
101
|
+
entry_filter,
|
102
|
+
embeddings_model[new_default_search_model_config.name],
|
103
|
+
new_default_search_model_config,
|
104
|
+
)
|
105
|
+
user_config.setting = new_default_search_model_config
|
106
|
+
user_config.save()
|
107
|
+
|
108
|
+
logger.info(
|
109
|
+
f"Updated UserSearchModelConfig object for user {affected_user} to use the new default Search model."
|
110
|
+
)
|
111
|
+
logger.info(
|
112
|
+
f"Updated {relevant_entries.count()} Entry objects for user {affected_user} to use the new default Search model."
|
113
|
+
)
|
114
|
+
|
115
|
+
except Exception as e:
|
116
|
+
logger.error(f"Error embedding documents: {e}")
|
117
|
+
|
118
|
+
logger.info("----")
|
119
|
+
|
120
|
+
# There are also plenty of users who have indexed documents without explicitly creating a UserSearchModelConfig object. You would have to migrate these users as well, if the default is different from search_model_config_id.
|
121
|
+
current_default = get_default_search_model()
|
122
|
+
if current_default.id != new_default_search_model_config.id:
|
123
|
+
users_without_user_search_model_config = KhojUser.objects.annotate(
|
124
|
+
user_search_model_config_count=Count("usersearchmodelconfig")
|
125
|
+
).filter(user_search_model_config_count=0)
|
126
|
+
|
127
|
+
logger.info(f"Number of User objects to update: {users_without_user_search_model_config.count()}")
|
128
|
+
for user in users_without_user_search_model_config:
|
129
|
+
entry_filter = Q(user=user)
|
130
|
+
relevant_entries = Entry.objects.filter(entry_filter).all()
|
131
|
+
logger.info(f"Number of Entry objects to update for user {user}: {relevant_entries.count()}")
|
132
|
+
|
133
|
+
if apply:
|
134
|
+
try:
|
135
|
+
regenerate_entries(
|
136
|
+
entry_filter,
|
137
|
+
embeddings_model[new_default_search_model_config.name],
|
138
|
+
new_default_search_model_config,
|
139
|
+
)
|
140
|
+
|
141
|
+
UserSearchModelConfig.objects.create(user=user, setting=new_default_search_model_config)
|
142
|
+
|
143
|
+
logger.info(
|
144
|
+
f"Created UserSearchModelConfig object for user {user} to use the new default Search model."
|
145
|
+
)
|
146
|
+
logger.info(
|
147
|
+
f"Updated {relevant_entries.count()} Entry objects for user {user} to use the new default Search model."
|
148
|
+
)
|
149
|
+
except Exception as e:
|
150
|
+
logger.error(f"Error embedding documents: {e}")
|
151
|
+
else:
|
152
|
+
logger.info("Default is the same as search_model_config_id.")
|
153
|
+
|
154
|
+
all_agents = Agent.objects.all()
|
155
|
+
logger.info(f"Number of Agent objects to update: {all_agents.count()}")
|
156
|
+
for agent in all_agents:
|
157
|
+
entry_filter = Q(agent=agent)
|
158
|
+
relevant_entries = Entry.objects.filter(entry_filter).all()
|
159
|
+
logger.info(f"Number of Entry objects to update for agent {agent}: {relevant_entries.count()}")
|
160
|
+
|
161
|
+
if apply:
|
162
|
+
try:
|
163
|
+
regenerate_entries(
|
164
|
+
entry_filter,
|
165
|
+
embeddings_model[new_default_search_model_config.name],
|
166
|
+
new_default_search_model_config,
|
167
|
+
)
|
168
|
+
logger.info(
|
169
|
+
f"Updated {relevant_entries.count()} Entry objects for agent {agent} to use the new default Search model."
|
170
|
+
)
|
171
|
+
except Exception as e:
|
172
|
+
logger.error(f"Error embedding documents: {e}")
|
173
|
+
if apply and current_default.id != new_default_search_model_config.id:
|
174
|
+
# Get the existing default SearchModelConfig object and update its name
|
175
|
+
current_default.name = f"prev_default_{current_default.id}"
|
176
|
+
current_default.save()
|
177
|
+
|
178
|
+
# Update the new default SearchModelConfig object's name
|
179
|
+
new_default_search_model_config.name = "default"
|
180
|
+
new_default_search_model_config.save()
|
181
|
+
if not apply:
|
182
|
+
logger.info("Run the command with the --apply flag to apply the new default Search model.")
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# Generated by Django 5.0.8 on 2024-10-21 05:16
|
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", "0069_webscraper_serverchatsettings_web_scraper"),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.AlterField(
|
14
|
+
model_name="agent",
|
15
|
+
name="input_tools",
|
16
|
+
field=django.contrib.postgres.fields.ArrayField(
|
17
|
+
base_field=models.CharField(
|
18
|
+
choices=[
|
19
|
+
("general", "General"),
|
20
|
+
("online", "Online"),
|
21
|
+
("notes", "Notes"),
|
22
|
+
("summarize", "Summarize"),
|
23
|
+
("webpage", "Webpage"),
|
24
|
+
],
|
25
|
+
max_length=200,
|
26
|
+
),
|
27
|
+
blank=True,
|
28
|
+
default=list,
|
29
|
+
null=True,
|
30
|
+
size=None,
|
31
|
+
),
|
32
|
+
),
|
33
|
+
migrations.AlterField(
|
34
|
+
model_name="agent",
|
35
|
+
name="output_modes",
|
36
|
+
field=django.contrib.postgres.fields.ArrayField(
|
37
|
+
base_field=models.CharField(
|
38
|
+
choices=[("text", "Text"), ("image", "Image"), ("automation", "Automation")], max_length=200
|
39
|
+
),
|
40
|
+
blank=True,
|
41
|
+
default=list,
|
42
|
+
null=True,
|
43
|
+
size=None,
|
44
|
+
),
|
45
|
+
),
|
46
|
+
]
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Generated by Django 5.0.8 on 2024-10-20 19:24
|
2
|
+
|
3
|
+
from django.db import migrations, models
|
4
|
+
|
5
|
+
|
6
|
+
def set_enabled_trial_at(apps, schema_editor):
|
7
|
+
Subscription = apps.get_model("database", "Subscription")
|
8
|
+
for subscription in Subscription.objects.all():
|
9
|
+
subscription.enabled_trial_at = subscription.created_at
|
10
|
+
subscription.save()
|
11
|
+
|
12
|
+
|
13
|
+
class Migration(migrations.Migration):
|
14
|
+
dependencies = [
|
15
|
+
("database", "0070_alter_agent_input_tools_alter_agent_output_modes"),
|
16
|
+
]
|
17
|
+
|
18
|
+
operations = [
|
19
|
+
migrations.AddField(
|
20
|
+
model_name="subscription",
|
21
|
+
name="enabled_trial_at",
|
22
|
+
field=models.DateTimeField(blank=True, default=None, null=True),
|
23
|
+
),
|
24
|
+
migrations.AlterField(
|
25
|
+
model_name="subscription",
|
26
|
+
name="type",
|
27
|
+
field=models.CharField(
|
28
|
+
choices=[("trial", "Trial"), ("standard", "Standard")], default="standard", max_length=20
|
29
|
+
),
|
30
|
+
),
|
31
|
+
migrations.RunPython(set_enabled_trial_at),
|
32
|
+
]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Generated by Django 5.0.8 on 2024-10-21 21:09
|
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", "0071_subscription_enabled_trial_at_and_more"),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.AddField(
|
14
|
+
model_name="entry",
|
15
|
+
name="search_model",
|
16
|
+
field=models.ForeignKey(
|
17
|
+
blank=True,
|
18
|
+
default=None,
|
19
|
+
null=True,
|
20
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
21
|
+
to="database.searchmodelconfig",
|
22
|
+
),
|
23
|
+
),
|
24
|
+
]
|
@@ -73,9 +73,10 @@ class Subscription(BaseModel):
|
|
73
73
|
STANDARD = "standard"
|
74
74
|
|
75
75
|
user = models.OneToOneField(KhojUser, on_delete=models.CASCADE, related_name="subscription")
|
76
|
-
type = models.CharField(max_length=20, choices=Type.choices, default=Type.
|
76
|
+
type = models.CharField(max_length=20, choices=Type.choices, default=Type.STANDARD)
|
77
77
|
is_recurring = models.BooleanField(default=False)
|
78
78
|
renewal_date = models.DateTimeField(null=True, default=None, blank=True)
|
79
|
+
enabled_trial_at = models.DateTimeField(null=True, default=None, blank=True)
|
79
80
|
|
80
81
|
|
81
82
|
class OpenAIProcessorConversationConfig(BaseModel):
|
@@ -180,8 +181,12 @@ class Agent(BaseModel):
|
|
180
181
|
) # Creator will only be null when the agents are managed by admin
|
181
182
|
name = models.CharField(max_length=200)
|
182
183
|
personality = models.TextField()
|
183
|
-
input_tools = ArrayField(
|
184
|
-
|
184
|
+
input_tools = ArrayField(
|
185
|
+
models.CharField(max_length=200, choices=InputToolOptions.choices), default=list, null=True, blank=True
|
186
|
+
)
|
187
|
+
output_modes = ArrayField(
|
188
|
+
models.CharField(max_length=200, choices=OutputModeOptions.choices), default=list, null=True, blank=True
|
189
|
+
)
|
185
190
|
managed_by_admin = models.BooleanField(default=False)
|
186
191
|
chat_model = models.ForeignKey(ChatModelOptions, on_delete=models.CASCADE)
|
187
192
|
slug = models.CharField(max_length=200, unique=True)
|
@@ -444,6 +449,7 @@ class UserVoiceModelConfig(BaseModel):
|
|
444
449
|
setting = models.ForeignKey(VoiceModelOption, on_delete=models.CASCADE, default=None, null=True, blank=True)
|
445
450
|
|
446
451
|
|
452
|
+
# TODO Delete this model once all users have been migrated to the server's default settings
|
447
453
|
class UserSearchModelConfig(BaseModel):
|
448
454
|
user = models.OneToOneField(KhojUser, on_delete=models.CASCADE)
|
449
455
|
setting = models.ForeignKey(SearchModelConfig, on_delete=models.CASCADE)
|
@@ -530,6 +536,7 @@ class Entry(BaseModel):
|
|
530
536
|
url = models.URLField(max_length=400, default=None, null=True, blank=True)
|
531
537
|
hashed_value = models.CharField(max_length=100)
|
532
538
|
corpus_id = models.UUIDField(default=uuid.uuid4, editable=False)
|
539
|
+
search_model = models.ForeignKey(SearchModelConfig, on_delete=models.SET_NULL, default=None, null=True, blank=True)
|
533
540
|
|
534
541
|
def save(self, *args, **kwargs):
|
535
542
|
if self.user and self.agent:
|