khoj 1.24.2.dev33__tar.gz → 1.26.1__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.24.2.dev33 → khoj-1.26.1}/PKG-INFO +19 -14
- {khoj-1.24.2.dev33 → khoj-1.26.1}/README.md +17 -12
- {khoj-1.24.2.dev33 → khoj-1.26.1}/pyproject.toml +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/configure.py +13 -4
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/adapters/__init__.py +132 -34
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/admin.py +18 -1
- khoj-1.26.1/src/khoj/database/migrations/0068_alter_agent_output_modes.py +24 -0
- khoj-1.26.1/src/khoj/database/migrations/0069_webscraper_serverchatsettings_web_scraper.py +89 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/models/__init__.py +78 -2
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/404/index.html +1 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/1603-fa3ee48860b9dc5c.js +1 -0
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/7762-79f2205740622b5c.js +1 -0
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/chunks/9417-29502e39c3e7d60c.js → khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/9417-46ed3aaa639c85ef.js +1 -1
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/chunks/9479-7eed36fc954ef804.js → khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/9479-ea776e73f549090c.js +1 -1
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/chunks/app/agents/layout-e71c8e913cccf792.js → khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/agents/layout-75636ab3a413fa8e.js +1 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/agents/page-88aa3042711107b7.js +1 -0
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/chunks/app/chat/layout-8102549127db3067.js → khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/chat/layout-96fcf62857bf8f30.js +1 -1
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/chunks/app/layout-f3e40d346da53112.js → khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/layout-d0f0a9067427fb20.js +1 -1
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/chunks/app/settings/layout-6f9314b0d7a26046.js → khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/settings/layout-a8f33dfe92f997fb.js +1 -1
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-39f03f9e32399f0f.js → khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-2df56074e42adaa0.js +1 -1
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/chunks/webpack-2651a68f46ac3cb7.js → khoj-1.26.1/src/khoj/interface/compiled/_next/static/chunks/webpack-c0cd5a6afb1f0798.js +1 -1
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/css/467a524c75e7d7c0.css +1 -0
- khoj-1.26.1/src/khoj/interface/compiled/_next/static/css/b9a6bf04305d98d7.css +25 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/agents/index.html +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/agents/index.txt +2 -2
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/automations/index.html +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/automations/index.txt +2 -2
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/chat/index.html +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/chat/index.txt +2 -2
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/factchecker/index.html +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/factchecker/index.txt +2 -2
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/index.html +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/index.txt +2 -2
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/search/index.html +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/search/index.txt +2 -2
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/settings/index.html +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/settings/index.txt +3 -3
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/share/chat/index.html +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/share/chat/index.txt +2 -2
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/icons/agents.svg +1 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/icons/automation.svg +1 -0
- khoj-1.26.1/src/khoj/interface/web/assets/icons/chat.svg +24 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/login.html +11 -22
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/images/image_to_entries.py +2 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/google/utils.py +4 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/prompts.py +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/embeddings.py +1 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/image/generate.py +1 -2
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/tools/online_search.py +135 -42
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/api.py +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/api_agents.py +4 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/api_chat.py +40 -513
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/api_model.py +1 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/auth.py +9 -1
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/helpers.py +58 -58
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/subscription.py +18 -4
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/search_type/text_search.py +7 -2
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/helpers.py +50 -5
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/initialization.py +0 -3
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/chunks/1269-2e52d48e7d0e5c61.js +0 -1
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/chunks/1603-67a89278e2c5dbe6.js +0 -1
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/chunks/app/agents/page-25b91e88abb7f976.js +0 -1
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/css/1538cedb321e3a97.css +0 -1
- khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/css/7a2b0a2d7c3d86eb.css +0 -25
- {khoj-1.24.2.dev33 → khoj-1.26.1}/.gitignore +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/LICENSE +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/app/README.md +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/app/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/app/asgi.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/app/settings.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/app/urls.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/apps.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/management/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/management/commands/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/management/commands/change_generated_images_url.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/management/commands/convert_images_png_to_webp.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0001_khojuser.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0002_googleuser.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0003_vector_extension.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0004_content_types_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0005_embeddings_corpus_id.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0006_embeddingsdates.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0007_add_conversation.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0008_alter_conversation_conversation_log.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0009_khojapiuser.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0010_chatmodeloptions_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0010_rename_embeddings_entry_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0011_merge_20231102_0138.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0012_entry_file_source.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0013_subscription.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0014_alter_googleuser_picture.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0015_alter_subscription_user.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0016_alter_subscription_renewal_date.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0017_searchmodel.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0018_searchmodelconfig_delete_searchmodel.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0019_alter_googleuser_family_name_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0020_reflectivequestion.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0021_speechtotextmodeloptions_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0022_texttoimagemodelconfig.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0023_usersearchmodelconfig.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0024_alter_entry_embeddings.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0025_clientapplication_khojuser_phone_number_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0025_searchmodelconfig_embeddings_inference_endpoint_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0026_searchmodelconfig_cross_encoder_inference_endpoint_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0027_merge_20240118_1324.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0028_khojuser_verified_phone_number.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0029_userrequests.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0030_conversation_slug_and_title.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0031_agent_conversation_agent.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0031_alter_googleuser_locale.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0032_merge_20240322_0427.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0033_rename_tuning_agent_personality.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0034_alter_chatmodeloptions_chat_model.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0035_processlock.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0036_alter_processlock_name.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0036_delete_offlinechatprocessorconversationconfig.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0036_publicconversation.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0037_chatmodeloptions_openai_config_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0037_searchmodelconfig_bi_encoder_docs_encode_config_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0038_merge_20240425_0857.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0038_merge_20240426_1640.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0039_merge_20240501_0301.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0040_alter_processlock_name.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0040_merge_20240504_1010.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0041_merge_20240505_1234.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0042_serverchatsettings.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0043_alter_chatmodeloptions_model_type.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0044_conversation_file_filters.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0045_fileobject.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0046_khojuser_email_verification_code_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0047_alter_entry_file_type.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0048_voicemodeloption_uservoicemodelconfig.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0049_datastore.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0049_texttoimagemodelconfig_api_key_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0050_alter_processlock_name.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0051_merge_20240702_1220.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0052_alter_searchmodelconfig_bi_encoder_docs_encode_config_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0053_agent_style_color_agent_style_icon.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0054_alter_agent_style_color.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0055_alter_agent_style_icon.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0056_chatmodeloptions_vision_enabled.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0056_searchmodelconfig_cross_encoder_model_config.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0057_merge_20240816_1409.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0057_remove_serverchatsettings_default_model_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0058_alter_chatmodeloptions_chat_model.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0059_searchmodelconfig_bi_encoder_confidence_threshold.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0060_merge_20240905_1828.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0061_alter_chatmodeloptions_model_type.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0061_alter_texttoimagemodelconfig_model_type.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0062_merge_20240913_0222.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0063_conversation_temp_id.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0064_remove_conversation_temp_id_alter_conversation_id.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0065_remove_agent_avatar_remove_agent_public_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0066_remove_agent_tools_agent_input_tools_and_more.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/0067_alter_agent_style_icon.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/migrations/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/database/tests.py +0 -0
- {khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/lHwFhwhZGEZT4IMv1TNBH → khoj-1.26.1/src/khoj/interface/compiled/_next/static/K1DjEvR838A-wSpSmyfVM}/_buildManifest.js +0 -0
- {khoj-1.24.2.dev33/src/khoj/interface/compiled/_next/static/lHwFhwhZGEZT4IMv1TNBH → khoj-1.26.1/src/khoj/interface/compiled/_next/static/K1DjEvR838A-wSpSmyfVM}/_ssgManifest.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/121-7024f479c297aef0.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/2697-a38d01981ad3bdf8.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/3062-71ed4b46ac2bb87c.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/3110-ef2cacd1b8d79ad8.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/3678-ef0d20e267e9f010.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/4051-2cf66369d6ca0f1d.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/4086-2c74808ba38a5a0f.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/4504-1629487c8bc82203.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/477-ec86e93db10571c1.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/51-e8f5bdb69b5ea421.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/6297-d1c842ed3f714ab0.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/7023-a5bf5744d19b3bd3.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/9001-3b27af6d5f21df44.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/9178-899fe9a6b754ecfe.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/app/_not-found/page-07ff4ab42b07845e.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/app/automations/layout-27c28e923c9b1ff0.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/app/automations/page-5480731341f34450.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/app/chat/page-702057ccbcf27881.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/app/factchecker/layout-7b30c541c05fb904.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/app/factchecker/page-e7b34316ec6f44de.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/app/page-10a5aad6e04f3cf8.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/app/search/layout-3720f1362310bebb.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/app/search/page-d56541c746fded7d.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/app/settings/page-e044a999468a7c5d.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/app/share/chat/page-fbbd66a4d4633438.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/d3ac728e-a9e3522eef9b6b28.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/fd9d1056-2b978342deb60015.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/main-app-6d6ee3495efe03d4.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/main-f84cd3c1873cd842.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/pages/_app-f870474a17b7f2fd.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/css/2272c73fc7a3b571.css +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/css/2de69f0be774c768.css +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/css/3e1f1fdd70775091.css +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/css/553f9cdcc7a2bcd6.css +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/css/592ca99f5122e75a.css +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/css/5a400c87d295e68a.css +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/css/c808691c459e3887.css +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/0e790e04fd40ad16-s.p.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/4221e1667cd19c7d-s.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/6c276159aa0eb14b-s.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/6cc0b9500e4f9168-s.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/9d9319a7a2ac39c6-s.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.1608a09b.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.4aafdb68.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_AMS-Regular.a79f1c31.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.b6770918.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.cce5b8ec.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Bold.ec17d132.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.07ef19e7.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.55fac258.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Caligraphic-Regular.dad44a7f.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.9f256b85.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.b18f59e1.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Bold.d42a5579.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.7c187121.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.d3c882a6.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Fraktur-Regular.ed38e79f.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.b74a1a8b.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.c3fb5ac2.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Bold.d181c465.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.6f2bb1df.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.70d8b0a5.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-BoldItalic.e3f82f9d.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.47373d1e.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.8916142b.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Italic.9024d815.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.0462f03b.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.7f51fe03.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Main-Regular.b7f8fe9b.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.572d331f.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.a879cf83.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-BoldItalic.f1035d8d.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.5295ba48.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.939bc644.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Math-Italic.f28c23ac.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.8c5b5494.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.94e1e8dc.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Bold.bf59d231.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.3b1e59b3.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.7c9bc82b.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Italic.b4c20c84.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.74048478.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.ba21ed5f.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_SansSerif-Regular.d4d7ba48.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.03e9641d.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.07505710.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Script-Regular.fe9cbbe1.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.e1e279cb.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.eae34984.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size1-Regular.fabc004a.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.57727022.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.5916a24f.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size2-Regular.d6b476ec.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.9acaf01c.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.a144ef58.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size3-Regular.b4230e7e.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.10d95fd3.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.7a996c9d.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Size4-Regular.fbccdabe.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.6258592b.woff +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.a8709e36.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/KaTeX_Typewriter-Regular.d97aaf4a.ttf +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/a75c8ea86756d52d-s.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/abce7c400ca31a51-s.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/f759c939737fb668-s.woff2 +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/globe.98e105ca.webp +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/agents.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/assets/icons/khoj_lantern.ico +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/assets/icons/khoj_lantern_128x128.png +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/assets/icons/khoj_lantern_256x256.png +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/assets/icons/khoj_lantern_logomarktype_1200x630.png +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/assets/samples/desktop-browse-draw-sample.png +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/assets/samples/desktop-plain-chat-sample.png +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/automation.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/chat.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/close.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/copy-button-success.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/copy-button.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/khoj.webmanifest +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/logo.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/send.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/share.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/thumbs-down.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/compiled/thumbs-up.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/email/feedback.html +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/email/magic_link.html +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/email/task.html +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/email/welcome.html +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/icons/favicon-128x128.ico +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/icons/github.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/icons/khoj-logo-sideways-200.png +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/icons/khoj-logo-sideways-500.png +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/icons/khoj-logo-sideways.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/icons/khoj.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/icons/logotype.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/icons/search.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/icons/sync.svg +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/khoj.css +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/assets/utils.js +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/base_config.html +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/content_source_github_input.html +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/interface/web/utils.html +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/main.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/manage.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/migrations/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/migrations/migrate_offline_chat_default_model.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/migrations/migrate_offline_chat_default_model_2.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/migrations/migrate_offline_chat_schema.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/migrations/migrate_offline_model.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/migrations/migrate_processor_config_openai.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/migrations/migrate_server_pg.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/migrations/migrate_version.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/docx/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/docx/docx_to_entries.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/github/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/github/github_to_entries.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/images/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/markdown/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/markdown/markdown_to_entries.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/notion/notion_to_entries.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/org_mode/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/org_mode/org_to_entries.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/org_mode/orgnode.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/pdf/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/pdf/pdf_to_entries.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/plaintext/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/plaintext/plaintext_to_entries.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/content/text_to_entries.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/anthropic/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/anthropic/anthropic_chat.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/anthropic/utils.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/google/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/google/gemini_chat.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/offline/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/offline/chat_model.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/offline/utils.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/offline/whisper.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/openai/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/openai/gpt.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/openai/utils.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/openai/whisper.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/conversation/utils.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/speech/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/speech/text_to_speech.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/processor/tools/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/api_content.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/api_phone.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/email.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/notion.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/storage.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/twilio.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/routers/web_client.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/search_filter/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/search_filter/base_filter.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/search_filter/date_filter.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/search_filter/file_filter.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/search_filter/word_filter.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/search_type/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/__init__.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/cli.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/config.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/constants.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/fs_syncer.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/jsonl.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/models.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/rawconfig.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/state.py +0 -0
- {khoj-1.24.2.dev33 → khoj-1.26.1}/src/khoj/utils/yaml.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: khoj
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.26.1
|
4
4
|
Summary: Your Second Brain
|
5
5
|
Project-URL: Homepage, https://khoj.dev
|
6
6
|
Project-URL: Documentation, https://docs.khoj.dev
|
@@ -32,7 +32,7 @@ Requires-Dist: dateparser>=1.1.1
|
|
32
32
|
Requires-Dist: defusedxml==0.7.1
|
33
33
|
Requires-Dist: django-apscheduler==0.6.2
|
34
34
|
Requires-Dist: django-phonenumber-field==7.3.0
|
35
|
-
Requires-Dist: django==5.0.
|
35
|
+
Requires-Dist: django==5.0.9
|
36
36
|
Requires-Dist: docx2txt==0.8
|
37
37
|
Requires-Dist: einops==0.8.0
|
38
38
|
Requires-Dist: fastapi>=0.110.0
|
@@ -103,14 +103,14 @@ Description-Content-Type: text/markdown
|
|
103
103
|
<div align="center">
|
104
104
|
|
105
105
|
[](https://github.com/khoj-ai/khoj/actions/workflows/test.yml)
|
106
|
-
[](https://github.com/khoj-ai/khoj/pkgs/container/khoj)
|
107
107
|
[](https://pypi.org/project/khoj/)
|
108
|
-
](https://discord.gg/BDgyabRM6e)
|
109
109
|
|
110
110
|
</div>
|
111
111
|
|
112
112
|
<div align="center">
|
113
|
-
<b>
|
113
|
+
<b>Your AI second brain</b>
|
114
114
|
</div>
|
115
115
|
|
116
116
|
<br />
|
@@ -119,11 +119,13 @@ Description-Content-Type: text/markdown
|
|
119
119
|
|
120
120
|
[📑 Docs](https://docs.khoj.dev)
|
121
121
|
<span> • </span>
|
122
|
-
[
|
122
|
+
[🌐 Web](https://khoj.dev)
|
123
|
+
<span> • </span>
|
124
|
+
[🔥 App](https://app.khoj.dev)
|
123
125
|
<span> • </span>
|
124
126
|
[💬 Discord](https://discord.gg/BDgyabRM6e)
|
125
127
|
<span> • </span>
|
126
|
-
[
|
128
|
+
[✍🏽 Blog](https://blog.khoj.dev)
|
127
129
|
|
128
130
|
</div>
|
129
131
|
|
@@ -131,14 +133,17 @@ Description-Content-Type: text/markdown
|
|
131
133
|
|
132
134
|
***
|
133
135
|
|
134
|
-
[Khoj](https://khoj.dev) is a personal
|
135
|
-
|
136
|
-
-
|
137
|
-
-
|
138
|
-
-
|
139
|
-
- Create
|
140
|
-
-
|
136
|
+
[Khoj](https://khoj.dev) is a personal AI app to extend your capabilities. It smoothly scales up from an on-device personal AI to a cloud-scale enterprise AI.
|
137
|
+
|
138
|
+
- Chat with any local or online LLM (e.g llama3, qwen, gemma, mistral, gpt, claude, gemini).
|
139
|
+
- Get answers from the internet and your docs (including image, pdf, markdown, org-mode, word, notion files).
|
140
|
+
- Access it from your Browser, Obsidian, Emacs, Desktop, Phone or Whatsapp.
|
141
|
+
- Create agents with custom knowledge, persona, chat model and tools to take on any role.
|
142
|
+
- Automate away repetitive research. Get personal newsletters and smart notifications delivered to your inbox.
|
143
|
+
- Find relevant docs quickly and easily using our advanced semantic search.
|
144
|
+
- Generate images, talk out loud, play your messages.
|
141
145
|
- Khoj is open-source, self-hostable. Always.
|
146
|
+
- Run it privately on [your computer](https://docs.khoj.dev/get-started/setup) or try it on our [cloud app](https://app.khoj.dev).
|
142
147
|
|
143
148
|
***
|
144
149
|
|
@@ -3,14 +3,14 @@
|
|
3
3
|
<div align="center">
|
4
4
|
|
5
5
|
[](https://github.com/khoj-ai/khoj/actions/workflows/test.yml)
|
6
|
-
[](https://github.com/khoj-ai/khoj/pkgs/container/khoj)
|
7
7
|
[](https://pypi.org/project/khoj/)
|
8
|
-
](https://discord.gg/BDgyabRM6e)
|
9
9
|
|
10
10
|
</div>
|
11
11
|
|
12
12
|
<div align="center">
|
13
|
-
<b>
|
13
|
+
<b>Your AI second brain</b>
|
14
14
|
</div>
|
15
15
|
|
16
16
|
<br />
|
@@ -19,11 +19,13 @@
|
|
19
19
|
|
20
20
|
[📑 Docs](https://docs.khoj.dev)
|
21
21
|
<span> • </span>
|
22
|
-
[
|
22
|
+
[🌐 Web](https://khoj.dev)
|
23
|
+
<span> • </span>
|
24
|
+
[🔥 App](https://app.khoj.dev)
|
23
25
|
<span> • </span>
|
24
26
|
[💬 Discord](https://discord.gg/BDgyabRM6e)
|
25
27
|
<span> • </span>
|
26
|
-
[
|
28
|
+
[✍🏽 Blog](https://blog.khoj.dev)
|
27
29
|
|
28
30
|
</div>
|
29
31
|
|
@@ -31,14 +33,17 @@
|
|
31
33
|
|
32
34
|
***
|
33
35
|
|
34
|
-
[Khoj](https://khoj.dev) is a personal
|
35
|
-
|
36
|
-
-
|
37
|
-
-
|
38
|
-
-
|
39
|
-
- Create
|
40
|
-
-
|
36
|
+
[Khoj](https://khoj.dev) is a personal AI app to extend your capabilities. It smoothly scales up from an on-device personal AI to a cloud-scale enterprise AI.
|
37
|
+
|
38
|
+
- Chat with any local or online LLM (e.g llama3, qwen, gemma, mistral, gpt, claude, gemini).
|
39
|
+
- Get answers from the internet and your docs (including image, pdf, markdown, org-mode, word, notion files).
|
40
|
+
- Access it from your Browser, Obsidian, Emacs, Desktop, Phone or Whatsapp.
|
41
|
+
- Create agents with custom knowledge, persona, chat model and tools to take on any role.
|
42
|
+
- Automate away repetitive research. Get personal newsletters and smart notifications delivered to your inbox.
|
43
|
+
- Find relevant docs quickly and easily using our advanced semantic search.
|
44
|
+
- Generate images, talk out loud, play your messages.
|
41
45
|
- Khoj is open-source, self-hostable. Always.
|
46
|
+
- Run it privately on [your computer](https://docs.khoj.dev/get-started/setup) or try it on our [cloud app](https://app.khoj.dev).
|
42
47
|
|
43
48
|
***
|
44
49
|
|
@@ -42,6 +42,7 @@ from khoj.database.adapters import (
|
|
42
42
|
from khoj.database.models import ClientApplication, KhojUser, ProcessLock, Subscription
|
43
43
|
from khoj.processor.embeddings import CrossEncoderModel, EmbeddingsModel
|
44
44
|
from khoj.routers.api_content import configure_content, configure_search
|
45
|
+
from khoj.routers.helpers import update_telemetry_state
|
45
46
|
from khoj.routers.twilio import is_twilio_enabled
|
46
47
|
from khoj.utils import constants, state
|
47
48
|
from khoj.utils.config import SearchType
|
@@ -165,7 +166,15 @@ class UserAuthenticationBackend(AuthenticationBackend):
|
|
165
166
|
|
166
167
|
create_if_not_exists = request.query_params.get("create_if_not_exists")
|
167
168
|
if create_if_not_exists:
|
168
|
-
user = await aget_or_create_user_by_phone_number(phone_number)
|
169
|
+
user, is_new = await aget_or_create_user_by_phone_number(phone_number)
|
170
|
+
if user and is_new:
|
171
|
+
update_telemetry_state(
|
172
|
+
request=request,
|
173
|
+
telemetry_type="api",
|
174
|
+
api="create_user",
|
175
|
+
metadata={"user_id": str(user.uuid)},
|
176
|
+
)
|
177
|
+
logger.log(logging.INFO, f"🥳 New User Created: {user.uuid}")
|
169
178
|
else:
|
170
179
|
user = await aget_user_by_phone_number(phone_number)
|
171
180
|
|
@@ -244,7 +253,7 @@ def configure_server(
|
|
244
253
|
|
245
254
|
state.SearchType = configure_search_types()
|
246
255
|
state.search_models = configure_search(state.search_models, state.config.search_type)
|
247
|
-
setup_default_agent()
|
256
|
+
setup_default_agent(user)
|
248
257
|
|
249
258
|
message = "📡 Telemetry disabled" if telemetry_disabled(state.config.app) else "📡 Telemetry enabled"
|
250
259
|
logger.info(message)
|
@@ -256,8 +265,8 @@ def configure_server(
|
|
256
265
|
raise e
|
257
266
|
|
258
267
|
|
259
|
-
def setup_default_agent():
|
260
|
-
AgentAdapters.create_default_agent()
|
268
|
+
def setup_default_agent(user: KhojUser):
|
269
|
+
AgentAdapters.create_default_agent(user)
|
261
270
|
|
262
271
|
|
263
272
|
def initialize_content(regenerate: bool, search_type: Optional[SearchType] = None, user: KhojUser = None):
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import json
|
2
2
|
import logging
|
3
3
|
import math
|
4
|
+
import os
|
4
5
|
import random
|
5
6
|
import re
|
6
7
|
import secrets
|
@@ -10,7 +11,6 @@ from enum import Enum
|
|
10
11
|
from typing import Callable, Iterable, List, Optional, Type
|
11
12
|
|
12
13
|
import cron_descriptor
|
13
|
-
import django
|
14
14
|
from apscheduler.job import Job
|
15
15
|
from asgiref.sync import sync_to_async
|
16
16
|
from django.contrib.sessions.backends.db import SessionStore
|
@@ -52,6 +52,7 @@ from khoj.database.models import (
|
|
52
52
|
UserTextToImageModelConfig,
|
53
53
|
UserVoiceModelConfig,
|
54
54
|
VoiceModelOption,
|
55
|
+
WebScraper,
|
55
56
|
)
|
56
57
|
from khoj.processor.conversation import prompts
|
57
58
|
from khoj.search_filter.date_filter import DateFilter
|
@@ -59,7 +60,12 @@ from khoj.search_filter.file_filter import FileFilter
|
|
59
60
|
from khoj.search_filter.word_filter import WordFilter
|
60
61
|
from khoj.utils import state
|
61
62
|
from khoj.utils.config import OfflineChatProcessorModel
|
62
|
-
from khoj.utils.helpers import
|
63
|
+
from khoj.utils.helpers import (
|
64
|
+
generate_random_name,
|
65
|
+
in_debug_mode,
|
66
|
+
is_none_or_empty,
|
67
|
+
timer,
|
68
|
+
)
|
63
69
|
|
64
70
|
logger = logging.getLogger(__name__)
|
65
71
|
|
@@ -113,13 +119,15 @@ async def get_or_create_user(token: dict) -> KhojUser:
|
|
113
119
|
return user
|
114
120
|
|
115
121
|
|
116
|
-
async def aget_or_create_user_by_phone_number(phone_number: str) -> KhojUser:
|
122
|
+
async def aget_or_create_user_by_phone_number(phone_number: str) -> tuple[KhojUser, bool]:
|
123
|
+
is_new = False
|
117
124
|
if is_none_or_empty(phone_number):
|
118
|
-
return None
|
125
|
+
return None, is_new
|
119
126
|
user = await aget_user_by_phone_number(phone_number)
|
120
127
|
if not user:
|
121
128
|
user = await acreate_user_by_phone_number(phone_number)
|
122
|
-
|
129
|
+
is_new = True
|
130
|
+
return user, is_new
|
123
131
|
|
124
132
|
|
125
133
|
async def aset_user_phone_number(user: KhojUser, phone_number: str) -> KhojUser:
|
@@ -165,8 +173,10 @@ async def acreate_user_by_phone_number(phone_number: str) -> KhojUser:
|
|
165
173
|
return user
|
166
174
|
|
167
175
|
|
168
|
-
async def aget_or_create_user_by_email(email: str) -> KhojUser:
|
169
|
-
user,
|
176
|
+
async def aget_or_create_user_by_email(email: str) -> tuple[KhojUser, bool]:
|
177
|
+
user, is_new = await KhojUser.objects.filter(email=email).aupdate_or_create(
|
178
|
+
defaults={"username": email, "email": email}
|
179
|
+
)
|
170
180
|
await user.asave()
|
171
181
|
|
172
182
|
if user:
|
@@ -177,7 +187,7 @@ async def aget_or_create_user_by_email(email: str) -> KhojUser:
|
|
177
187
|
if not user_subscription:
|
178
188
|
await Subscription.objects.acreate(user=user, type="trial")
|
179
189
|
|
180
|
-
return user
|
190
|
+
return user, is_new
|
181
191
|
|
182
192
|
|
183
193
|
async def aget_user_validated_by_email_verification_code(code: str) -> KhojUser:
|
@@ -248,9 +258,9 @@ def get_user_subscription(email: str) -> Optional[Subscription]:
|
|
248
258
|
|
249
259
|
async def set_user_subscription(
|
250
260
|
email: str, is_recurring=None, renewal_date=None, type="standard"
|
251
|
-
) -> Optional[Subscription]:
|
261
|
+
) -> tuple[Optional[Subscription], bool]:
|
252
262
|
# Get or create the user object and their subscription
|
253
|
-
user = await aget_or_create_user_by_email(email)
|
263
|
+
user, is_new = await aget_or_create_user_by_email(email)
|
254
264
|
user_subscription = await Subscription.objects.filter(user=user).afirst()
|
255
265
|
|
256
266
|
# Update the user subscription state
|
@@ -262,7 +272,7 @@ async def set_user_subscription(
|
|
262
272
|
elif renewal_date is not None:
|
263
273
|
user_subscription.renewal_date = renewal_date
|
264
274
|
await user_subscription.asave()
|
265
|
-
return user_subscription
|
275
|
+
return user_subscription, is_new
|
266
276
|
|
267
277
|
|
268
278
|
def subscription_to_state(subscription: Subscription) -> str:
|
@@ -643,8 +653,8 @@ class AgentAdapters:
|
|
643
653
|
return Agent.objects.filter(name=AgentAdapters.DEFAULT_AGENT_NAME).first()
|
644
654
|
|
645
655
|
@staticmethod
|
646
|
-
def create_default_agent():
|
647
|
-
default_conversation_config = ConversationAdapters.get_default_conversation_config()
|
656
|
+
def create_default_agent(user: KhojUser):
|
657
|
+
default_conversation_config = ConversationAdapters.get_default_conversation_config(user)
|
648
658
|
if default_conversation_config is None:
|
649
659
|
logger.info("No default conversation config found, skipping default agent creation")
|
650
660
|
return None
|
@@ -692,10 +702,12 @@ class AgentAdapters:
|
|
692
702
|
files: List[str],
|
693
703
|
input_tools: List[str],
|
694
704
|
output_modes: List[str],
|
705
|
+
slug: Optional[str] = None,
|
695
706
|
):
|
696
707
|
chat_model_option = await ChatModelOptions.objects.filter(chat_model=chat_model).afirst()
|
697
708
|
|
698
|
-
|
709
|
+
# Slug will be None for new agents, which will trigger a new agent creation with a generated, immutable slug
|
710
|
+
agent, created = await Agent.objects.filter(slug=slug, creator=user).aupdate_or_create(
|
699
711
|
defaults={
|
700
712
|
"name": name,
|
701
713
|
"creator": user,
|
@@ -933,21 +945,21 @@ class ConversationAdapters:
|
|
933
945
|
def get_conversation_config(user: KhojUser):
|
934
946
|
subscribed = is_user_subscribed(user)
|
935
947
|
if not subscribed:
|
936
|
-
return ConversationAdapters.get_default_conversation_config()
|
948
|
+
return ConversationAdapters.get_default_conversation_config(user)
|
937
949
|
config = UserConversationConfig.objects.filter(user=user).first()
|
938
950
|
if config:
|
939
951
|
return config.setting
|
940
|
-
return ConversationAdapters.get_advanced_conversation_config()
|
952
|
+
return ConversationAdapters.get_advanced_conversation_config(user)
|
941
953
|
|
942
954
|
@staticmethod
|
943
955
|
async def aget_conversation_config(user: KhojUser):
|
944
956
|
subscribed = await ais_user_subscribed(user)
|
945
957
|
if not subscribed:
|
946
|
-
return await ConversationAdapters.aget_default_conversation_config()
|
958
|
+
return await ConversationAdapters.aget_default_conversation_config(user)
|
947
959
|
config = await UserConversationConfig.objects.filter(user=user).prefetch_related("setting").afirst()
|
948
960
|
if config:
|
949
961
|
return config.setting
|
950
|
-
return ConversationAdapters.aget_advanced_conversation_config()
|
962
|
+
return ConversationAdapters.aget_advanced_conversation_config(user)
|
951
963
|
|
952
964
|
@staticmethod
|
953
965
|
async def aget_voice_model_config(user: KhojUser) -> Optional[VoiceModelOption]:
|
@@ -968,40 +980,126 @@ class ConversationAdapters:
|
|
968
980
|
return VoiceModelOption.objects.first()
|
969
981
|
|
970
982
|
@staticmethod
|
971
|
-
def get_default_conversation_config():
|
983
|
+
def get_default_conversation_config(user: KhojUser = None):
|
984
|
+
"""Get default conversation config. Prefer chat model by server admin > user > first created chat model"""
|
985
|
+
# Get the server chat settings
|
972
986
|
server_chat_settings = ServerChatSettings.objects.first()
|
973
|
-
if server_chat_settings is None
|
974
|
-
return
|
975
|
-
|
987
|
+
if server_chat_settings is not None and server_chat_settings.chat_default is not None:
|
988
|
+
return server_chat_settings.chat_default
|
989
|
+
|
990
|
+
# Get the user's chat settings, if the server chat settings are not set
|
991
|
+
user_chat_settings = UserConversationConfig.objects.filter(user=user).first() if user else None
|
992
|
+
if user_chat_settings is not None and user_chat_settings.setting is not None:
|
993
|
+
return user_chat_settings.setting
|
994
|
+
|
995
|
+
# Get the first chat model if even the user chat settings are not set
|
996
|
+
return ChatModelOptions.objects.filter().first()
|
976
997
|
|
977
998
|
@staticmethod
|
978
|
-
async def aget_default_conversation_config():
|
999
|
+
async def aget_default_conversation_config(user: KhojUser = None):
|
1000
|
+
"""Get default conversation config. Prefer chat model by server admin > user > first created chat model"""
|
1001
|
+
# Get the server chat settings
|
979
1002
|
server_chat_settings: ServerChatSettings = (
|
980
1003
|
await ServerChatSettings.objects.filter()
|
981
1004
|
.prefetch_related("chat_default", "chat_default__openai_config")
|
982
1005
|
.afirst()
|
983
1006
|
)
|
984
|
-
if server_chat_settings is None
|
985
|
-
return
|
986
|
-
|
1007
|
+
if server_chat_settings is not None and server_chat_settings.chat_default is not None:
|
1008
|
+
return server_chat_settings.chat_default
|
1009
|
+
|
1010
|
+
# Get the user's chat settings, if the server chat settings are not set
|
1011
|
+
user_chat_settings = (
|
1012
|
+
(await UserConversationConfig.objects.filter(user=user).prefetch_related("setting__openai_config").afirst())
|
1013
|
+
if user
|
1014
|
+
else None
|
1015
|
+
)
|
1016
|
+
if user_chat_settings is not None and user_chat_settings.setting is not None:
|
1017
|
+
return user_chat_settings.setting
|
1018
|
+
|
1019
|
+
# Get the first chat model if even the user chat settings are not set
|
1020
|
+
return await ChatModelOptions.objects.filter().prefetch_related("openai_config").afirst()
|
987
1021
|
|
988
1022
|
@staticmethod
|
989
|
-
def get_advanced_conversation_config():
|
1023
|
+
def get_advanced_conversation_config(user: KhojUser):
|
990
1024
|
server_chat_settings = ServerChatSettings.objects.first()
|
991
|
-
if server_chat_settings is None
|
992
|
-
return
|
993
|
-
return
|
1025
|
+
if server_chat_settings is not None and server_chat_settings.chat_advanced is not None:
|
1026
|
+
return server_chat_settings.chat_advanced
|
1027
|
+
return ConversationAdapters.get_default_conversation_config(user)
|
994
1028
|
|
995
1029
|
@staticmethod
|
996
|
-
async def aget_advanced_conversation_config():
|
1030
|
+
async def aget_advanced_conversation_config(user: KhojUser = None):
|
997
1031
|
server_chat_settings: ServerChatSettings = (
|
998
1032
|
await ServerChatSettings.objects.filter()
|
999
1033
|
.prefetch_related("chat_advanced", "chat_advanced__openai_config")
|
1000
1034
|
.afirst()
|
1001
1035
|
)
|
1002
|
-
if server_chat_settings is None
|
1003
|
-
return
|
1004
|
-
return
|
1036
|
+
if server_chat_settings is not None and server_chat_settings.chat_advanced is not None:
|
1037
|
+
return server_chat_settings.chat_advanced
|
1038
|
+
return await ConversationAdapters.aget_default_conversation_config(user)
|
1039
|
+
|
1040
|
+
@staticmethod
|
1041
|
+
async def aget_server_webscraper():
|
1042
|
+
server_chat_settings = await ServerChatSettings.objects.filter().prefetch_related("web_scraper").afirst()
|
1043
|
+
if server_chat_settings is not None and server_chat_settings.web_scraper is not None:
|
1044
|
+
return server_chat_settings.web_scraper
|
1045
|
+
return None
|
1046
|
+
|
1047
|
+
@staticmethod
|
1048
|
+
async def aget_enabled_webscrapers() -> list[WebScraper]:
|
1049
|
+
enabled_scrapers: list[WebScraper] = []
|
1050
|
+
server_webscraper = await ConversationAdapters.aget_server_webscraper()
|
1051
|
+
if server_webscraper:
|
1052
|
+
# Only use the webscraper set in the server chat settings
|
1053
|
+
enabled_scrapers = [server_webscraper]
|
1054
|
+
if not enabled_scrapers:
|
1055
|
+
# Use the enabled web scrapers, ordered by priority, until get web page content
|
1056
|
+
enabled_scrapers = [scraper async for scraper in WebScraper.objects.all().order_by("priority").aiterator()]
|
1057
|
+
if not enabled_scrapers:
|
1058
|
+
# Use scrapers enabled via environment variables
|
1059
|
+
if os.getenv("FIRECRAWL_API_KEY"):
|
1060
|
+
api_url = os.getenv("FIRECRAWL_API_URL", "https://api.firecrawl.dev")
|
1061
|
+
enabled_scrapers.append(
|
1062
|
+
WebScraper(
|
1063
|
+
type=WebScraper.WebScraperType.FIRECRAWL,
|
1064
|
+
name=WebScraper.WebScraperType.FIRECRAWL.capitalize(),
|
1065
|
+
api_key=os.getenv("FIRECRAWL_API_KEY"),
|
1066
|
+
api_url=api_url,
|
1067
|
+
)
|
1068
|
+
)
|
1069
|
+
if os.getenv("OLOSTEP_API_KEY"):
|
1070
|
+
api_url = os.getenv("OLOSTEP_API_URL", "https://agent.olostep.com/olostep-p2p-incomingAPI")
|
1071
|
+
enabled_scrapers.append(
|
1072
|
+
WebScraper(
|
1073
|
+
type=WebScraper.WebScraperType.OLOSTEP,
|
1074
|
+
name=WebScraper.WebScraperType.OLOSTEP.capitalize(),
|
1075
|
+
api_key=os.getenv("OLOSTEP_API_KEY"),
|
1076
|
+
api_url=api_url,
|
1077
|
+
)
|
1078
|
+
)
|
1079
|
+
# Jina is the default fallback scrapers to use as it does not require an API key
|
1080
|
+
api_url = os.getenv("JINA_READER_API_URL", "https://r.jina.ai/")
|
1081
|
+
enabled_scrapers.append(
|
1082
|
+
WebScraper(
|
1083
|
+
type=WebScraper.WebScraperType.JINA,
|
1084
|
+
name=WebScraper.WebScraperType.JINA.capitalize(),
|
1085
|
+
api_key=os.getenv("JINA_API_KEY"),
|
1086
|
+
api_url=api_url,
|
1087
|
+
)
|
1088
|
+
)
|
1089
|
+
|
1090
|
+
# Only enable the direct web page scraper by default in self-hosted single user setups.
|
1091
|
+
# Useful for reading webpages on your intranet.
|
1092
|
+
if state.anonymous_mode or in_debug_mode():
|
1093
|
+
enabled_scrapers.append(
|
1094
|
+
WebScraper(
|
1095
|
+
type=WebScraper.WebScraperType.DIRECT,
|
1096
|
+
name=WebScraper.WebScraperType.DIRECT.capitalize(),
|
1097
|
+
api_key=None,
|
1098
|
+
api_url=None,
|
1099
|
+
)
|
1100
|
+
)
|
1101
|
+
|
1102
|
+
return enabled_scrapers
|
1005
1103
|
|
1006
1104
|
@staticmethod
|
1007
1105
|
def create_conversation_from_public_conversation(
|
@@ -31,6 +31,7 @@ from khoj.database.models import (
|
|
31
31
|
UserSearchModelConfig,
|
32
32
|
UserVoiceModelConfig,
|
33
33
|
VoiceModelOption,
|
34
|
+
WebScraper,
|
34
35
|
)
|
35
36
|
from khoj.utils.helpers import ImageIntentType
|
36
37
|
|
@@ -69,10 +70,11 @@ class KhojUserAdmin(UserAdmin):
|
|
69
70
|
"id",
|
70
71
|
"email",
|
71
72
|
"username",
|
73
|
+
"phone_number",
|
72
74
|
"is_active",
|
75
|
+
"uuid",
|
73
76
|
"is_staff",
|
74
77
|
"is_superuser",
|
75
|
-
"phone_number",
|
76
78
|
)
|
77
79
|
search_fields = ("email", "username", "phone_number", "uuid")
|
78
80
|
filter_horizontal = ("groups", "user_permissions")
|
@@ -197,7 +199,22 @@ class ServerChatSettingsAdmin(admin.ModelAdmin):
|
|
197
199
|
list_display = (
|
198
200
|
"chat_default",
|
199
201
|
"chat_advanced",
|
202
|
+
"web_scraper",
|
203
|
+
)
|
204
|
+
|
205
|
+
|
206
|
+
@admin.register(WebScraper)
|
207
|
+
class WebScraperAdmin(admin.ModelAdmin):
|
208
|
+
list_display = (
|
209
|
+
"priority",
|
210
|
+
"name",
|
211
|
+
"type",
|
212
|
+
"api_key",
|
213
|
+
"api_url",
|
214
|
+
"created_at",
|
200
215
|
)
|
216
|
+
search_fields = ("name", "api_key", "api_url", "type")
|
217
|
+
ordering = ("priority",)
|
201
218
|
|
202
219
|
|
203
220
|
@admin.register(Conversation)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Generated by Django 5.0.8 on 2024-10-17 18:13
|
2
|
+
|
3
|
+
import django.contrib.postgres.fields
|
4
|
+
from django.db import migrations, models
|
5
|
+
|
6
|
+
|
7
|
+
class Migration(migrations.Migration):
|
8
|
+
dependencies = [
|
9
|
+
("database", "0067_alter_agent_style_icon"),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.AlterField(
|
14
|
+
model_name="agent",
|
15
|
+
name="output_modes",
|
16
|
+
field=django.contrib.postgres.fields.ArrayField(
|
17
|
+
base_field=models.CharField(
|
18
|
+
choices=[("text", "Text"), ("image", "Image"), ("automation", "Automation")], max_length=200
|
19
|
+
),
|
20
|
+
default=list,
|
21
|
+
size=None,
|
22
|
+
),
|
23
|
+
),
|
24
|
+
]
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# Generated by Django 5.0.8 on 2024-10-18 00:41
|
2
|
+
|
3
|
+
import django.db.models.deletion
|
4
|
+
from django.db import migrations, models
|
5
|
+
|
6
|
+
|
7
|
+
class Migration(migrations.Migration):
|
8
|
+
dependencies = [
|
9
|
+
("database", "0068_alter_agent_output_modes"),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.CreateModel(
|
14
|
+
name="WebScraper",
|
15
|
+
fields=[
|
16
|
+
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
17
|
+
("created_at", models.DateTimeField(auto_now_add=True)),
|
18
|
+
("updated_at", models.DateTimeField(auto_now=True)),
|
19
|
+
(
|
20
|
+
"name",
|
21
|
+
models.CharField(
|
22
|
+
blank=True,
|
23
|
+
default=None,
|
24
|
+
help_text="Friendly name. If not set, it will be set to the type of the scraper.",
|
25
|
+
max_length=200,
|
26
|
+
null=True,
|
27
|
+
unique=True,
|
28
|
+
),
|
29
|
+
),
|
30
|
+
(
|
31
|
+
"type",
|
32
|
+
models.CharField(
|
33
|
+
choices=[
|
34
|
+
("Firecrawl", "Firecrawl"),
|
35
|
+
("Olostep", "Olostep"),
|
36
|
+
("Jina", "Jina"),
|
37
|
+
("Direct", "Direct"),
|
38
|
+
],
|
39
|
+
default="Jina",
|
40
|
+
max_length=20,
|
41
|
+
),
|
42
|
+
),
|
43
|
+
(
|
44
|
+
"api_key",
|
45
|
+
models.CharField(
|
46
|
+
blank=True,
|
47
|
+
default=None,
|
48
|
+
help_text="API key of the web scraper. Only set if scraper service requires an API key. Default is set from env var.",
|
49
|
+
max_length=200,
|
50
|
+
null=True,
|
51
|
+
),
|
52
|
+
),
|
53
|
+
(
|
54
|
+
"api_url",
|
55
|
+
models.URLField(
|
56
|
+
blank=True,
|
57
|
+
default=None,
|
58
|
+
help_text="API URL of the web scraper. Only set if scraper service on non-default URL.",
|
59
|
+
null=True,
|
60
|
+
),
|
61
|
+
),
|
62
|
+
(
|
63
|
+
"priority",
|
64
|
+
models.IntegerField(
|
65
|
+
blank=True,
|
66
|
+
default=None,
|
67
|
+
help_text="Priority of the web scraper. Lower numbers run first.",
|
68
|
+
null=True,
|
69
|
+
unique=True,
|
70
|
+
),
|
71
|
+
),
|
72
|
+
],
|
73
|
+
options={
|
74
|
+
"abstract": False,
|
75
|
+
},
|
76
|
+
),
|
77
|
+
migrations.AddField(
|
78
|
+
model_name="serverchatsettings",
|
79
|
+
name="web_scraper",
|
80
|
+
field=models.ForeignKey(
|
81
|
+
blank=True,
|
82
|
+
default=None,
|
83
|
+
null=True,
|
84
|
+
on_delete=django.db.models.deletion.CASCADE,
|
85
|
+
related_name="web_scraper",
|
86
|
+
to="database.webscraper",
|
87
|
+
),
|
88
|
+
),
|
89
|
+
]
|