khoj 1.35.4.dev2__py3-none-any.whl → 1.35.4.dev53__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. khoj/database/adapters/__init__.py +51 -5
  2. khoj/database/migrations/0081_agent_is_hidden_chatmodel_description_and_more.py +27 -0
  3. khoj/database/migrations/0082_merge_20250121_1842.py +13 -0
  4. khoj/database/migrations/0083_alter_agent_output_modes_alter_agent_personality_and_more.py +71 -0
  5. khoj/database/migrations/0084_alter_agent_input_tools.py +33 -0
  6. khoj/database/migrations/0085_alter_agent_output_modes.py +24 -0
  7. khoj/database/models/__init__.py +8 -6
  8. khoj/interface/compiled/404/index.html +1 -1
  9. khoj/interface/compiled/_next/static/chunks/2327-724a4b8f1591b53b.js +1 -0
  10. khoj/interface/compiled/_next/static/chunks/3224-09c2844a0885a301.js +1 -0
  11. khoj/interface/compiled/_next/static/chunks/4357-73c05a7c905ffc9f.js +1 -0
  12. khoj/interface/compiled/_next/static/chunks/{4610.196691887afb7fea.js → 4610.a1e7f40a759ed2aa.js} +1 -1
  13. khoj/interface/compiled/_next/static/chunks/4986-80ecd055ad138cf6.js +1 -0
  14. khoj/interface/compiled/_next/static/chunks/{5427-0a9a2669cb5cde83.js → 5427-d65c69daf03cc100.js} +1 -1
  15. khoj/interface/compiled/_next/static/chunks/{6434.e6cd986d690f2cef.js → 6434.7afea9648e238ad5.js} +1 -1
  16. khoj/interface/compiled/_next/static/chunks/{6002-7e3115f142731625.js → 8155-ad130153ddcc930f.js} +9 -9
  17. khoj/interface/compiled/_next/static/chunks/849-aa69550db1c243e4.js +20 -0
  18. khoj/interface/compiled/_next/static/chunks/8580-f95d376ed2c5a2cb.js +1 -0
  19. khoj/interface/compiled/_next/static/chunks/app/agents/page-5c32dfc2ab1d37c3.js +1 -0
  20. khoj/interface/compiled/_next/static/chunks/app/automations/{page-e1e5c04c6d1a3b82.js → page-c6dee506ac1ef75c.js} +1 -1
  21. khoj/interface/compiled/_next/static/chunks/app/chat/page-8b64c2ed43be097b.js +1 -0
  22. khoj/interface/compiled/_next/static/chunks/app/page-18c5514c09249e15.js +1 -0
  23. khoj/interface/compiled/_next/static/chunks/app/search/{page-3813b25193b1c9e3.js → page-dfbf62acab34d1f1.js} +1 -1
  24. khoj/interface/compiled/_next/static/chunks/app/settings/page-2a68279b34a434e3.js +1 -0
  25. khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-6d7831aace573049.js +1 -0
  26. khoj/interface/compiled/_next/static/chunks/app/share/chat/page-978928ef05d44a48.js +1 -0
  27. khoj/interface/compiled/_next/static/chunks/{webpack-2c5a3f89bde64271.js → webpack-4b0fb0aafc881a07.js} +1 -1
  28. khoj/interface/compiled/_next/static/css/20ac73cc3d58b75c.css +25 -0
  29. khoj/interface/compiled/_next/static/css/37a73b87f02df402.css +1 -0
  30. khoj/interface/compiled/_next/static/css/{df4b47a2d0d85eae.css → b15666ef52060cd0.css} +1 -1
  31. khoj/interface/compiled/_next/static/css/f29752d6e1be7624.css +1 -0
  32. khoj/interface/compiled/_next/static/css/f29ee25d068f459b.css +1 -0
  33. khoj/interface/compiled/agents/index.html +1 -1
  34. khoj/interface/compiled/agents/index.txt +2 -2
  35. khoj/interface/compiled/automations/index.html +1 -1
  36. khoj/interface/compiled/automations/index.txt +3 -3
  37. khoj/interface/compiled/chat/index.html +1 -1
  38. khoj/interface/compiled/chat/index.txt +2 -2
  39. khoj/interface/compiled/index.html +1 -1
  40. khoj/interface/compiled/index.txt +2 -2
  41. khoj/interface/compiled/search/index.html +1 -1
  42. khoj/interface/compiled/search/index.txt +3 -3
  43. khoj/interface/compiled/settings/index.html +1 -1
  44. khoj/interface/compiled/settings/index.txt +4 -4
  45. khoj/interface/compiled/share/chat/index.html +1 -1
  46. khoj/interface/compiled/share/chat/index.txt +2 -2
  47. khoj/routers/api_agents.py +164 -4
  48. khoj/routers/api_chat.py +22 -5
  49. khoj/routers/api_model.py +14 -7
  50. khoj/routers/helpers.py +47 -5
  51. khoj/utils/helpers.py +14 -5
  52. {khoj-1.35.4.dev2.dist-info → khoj-1.35.4.dev53.dist-info}/METADATA +1 -1
  53. {khoj-1.35.4.dev2.dist-info → khoj-1.35.4.dev53.dist-info}/RECORD +73 -67
  54. khoj/interface/compiled/_next/static/chunks/182-8cd8b17d40e6e989.js +0 -20
  55. khoj/interface/compiled/_next/static/chunks/2327-3b7d77ac1d1c86a2.js +0 -1
  56. khoj/interface/compiled/_next/static/chunks/4270-28ab75d62e71521c.js +0 -1
  57. khoj/interface/compiled/_next/static/chunks/4986-4de8a920c7fcbbc6.js +0 -1
  58. khoj/interface/compiled/_next/static/chunks/9665-1ab5c8c667b74dca.js +0 -1
  59. khoj/interface/compiled/_next/static/chunks/app/agents/page-7e18b67e737c7ddd.js +0 -1
  60. khoj/interface/compiled/_next/static/chunks/app/chat/page-6e4297193657b39b.js +0 -1
  61. khoj/interface/compiled/_next/static/chunks/app/page-71b4596245f4b71d.js +0 -1
  62. khoj/interface/compiled/_next/static/chunks/app/settings/page-9a2c880a5750f2d4.js +0 -1
  63. khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-8b91b8adb4f04450.js +0 -1
  64. khoj/interface/compiled/_next/static/chunks/app/share/chat/page-0276dcbd88d8d132.js +0 -1
  65. khoj/interface/compiled/_next/static/css/bb7ea98028b368f3.css +0 -1
  66. khoj/interface/compiled/_next/static/css/d6f22b1f76448451.css +0 -1
  67. khoj/interface/compiled/_next/static/css/d7448372b4f1e3b8.css +0 -25
  68. khoj/interface/compiled/_next/static/css/eff89937927ce00a.css +0 -1
  69. /khoj/interface/compiled/_next/static/chunks/{1199-3461ffb259e6d98b.js → 1199-80c79778c44ad4ec.js} +0 -0
  70. /khoj/interface/compiled/_next/static/chunks/{1915-605f698f2573cfd4.js → 1915-4b7980a58fb630d6.js} +0 -0
  71. /khoj/interface/compiled/_next/static/chunks/{2117-2a54a27661a71b65.js → 2117-f99825f0a867a42d.js} +0 -0
  72. /khoj/interface/compiled/_next/static/chunks/{2509-299ad8b73ce407dd.js → 2509-79b3ce8040bc0bcf.js} +0 -0
  73. /khoj/interface/compiled/_next/static/chunks/{5473-b1cf56dedac6577a.js → 5473-02d1709b2a3f4a4b.js} +0 -0
  74. /khoj/interface/compiled/_next/static/chunks/{5477-3a4efd2e062e7102.js → 5477-c47515d2934cd866.js} +0 -0
  75. /khoj/interface/compiled/_next/static/chunks/{6244-08fb644d7709f449.js → 6244-4b970139897ef46e.js} +0 -0
  76. /khoj/interface/compiled/_next/static/chunks/{7647-5a935022fa3da0a6.js → 7647-469de84d236fc7fd.js} +0 -0
  77. /khoj/interface/compiled/_next/static/chunks/{8667-d3e5bc726e4ff4e3.js → 8667-adbe6017a66cef10.js} +0 -0
  78. /khoj/interface/compiled/_next/static/chunks/{9259-27d1ff42af9a43e0.js → 9259-5be50737cfe989bc.js} +0 -0
  79. /khoj/interface/compiled/_next/static/chunks/app/_not-found/{page-a834eddae3e235df.js → page-0ec97c4970898f2d.js} +0 -0
  80. /khoj/interface/compiled/_next/static/chunks/app/automations/{layout-0adc73dba7a04c11.js → layout-02f95fa0a48743eb.js} +0 -0
  81. /khoj/interface/compiled/_next/static/chunks/app/search/{layout-acc9eb43c9962ee1.js → layout-596cdc3a5a1a8e46.js} +0 -0
  82. /khoj/interface/compiled/_next/static/chunks/app/settings/{layout-d09d6510a45cd4bd.js → layout-8a22f370d3eaeed3.js} +0 -0
  83. /khoj/interface/compiled/_next/static/chunks/{fd9d1056-f14840e2376aea5a.js → fd9d1056-7454f5bbfcf5bd5b.js} +0 -0
  84. /khoj/interface/compiled/_next/static/{qiv_p9caXoUfGDmSGgKvs → nzUuinMXEsRX86qGdx-yY}/_buildManifest.js +0 -0
  85. /khoj/interface/compiled/_next/static/{qiv_p9caXoUfGDmSGgKvs → nzUuinMXEsRX86qGdx-yY}/_ssgManifest.js +0 -0
  86. {khoj-1.35.4.dev2.dist-info → khoj-1.35.4.dev53.dist-info}/WHEEL +0 -0
  87. {khoj-1.35.4.dev2.dist-info → khoj-1.35.4.dev53.dist-info}/entry_points.txt +0 -0
  88. {khoj-1.35.4.dev2.dist-info → khoj-1.35.4.dev53.dist-info}/licenses/LICENSE +0 -0
@@ -69,6 +69,7 @@ from khoj.search_filter.word_filter import WordFilter
69
69
  from khoj.utils import state
70
70
  from khoj.utils.config import OfflineChatProcessorModel
71
71
  from khoj.utils.helpers import (
72
+ generate_random_internal_agent_name,
72
73
  generate_random_name,
73
74
  in_debug_mode,
74
75
  is_none_or_empty,
@@ -714,9 +715,12 @@ class AgentAdapters:
714
715
  public_query = Q(privacy_level=Agent.PrivacyLevel.PUBLIC)
715
716
  # TODO Update this to allow any public agent that's officially approved once that experience is launched
716
717
  public_query &= Q(managed_by_admin=True)
718
+
719
+ user_query = Q(creator=user)
720
+ user_query &= Q(is_hidden=False)
717
721
  if user:
718
722
  return (
719
- Agent.objects.filter(public_query | Q(creator=user))
723
+ Agent.objects.filter(public_query | user_query)
720
724
  .distinct()
721
725
  .order_by("created_at")
722
726
  .prefetch_related("creator", "chat_model", "fileobject_set")
@@ -803,12 +807,15 @@ class AgentAdapters:
803
807
  privacy_level: str,
804
808
  icon: str,
805
809
  color: str,
806
- chat_model: str,
810
+ chat_model: Optional[str],
807
811
  files: List[str],
808
812
  input_tools: List[str],
809
813
  output_modes: List[str],
810
814
  slug: Optional[str] = None,
815
+ is_hidden: Optional[bool] = False,
811
816
  ):
817
+ if not chat_model:
818
+ chat_model = await ConversationAdapters.aget_default_chat_model(user)
812
819
  chat_model_option = await ChatModel.objects.filter(name=chat_model).afirst()
813
820
 
814
821
  # Slug will be None for new agents, which will trigger a new agent creation with a generated, immutable slug
@@ -823,6 +830,7 @@ class AgentAdapters:
823
830
  "chat_model": chat_model_option,
824
831
  "input_tools": input_tools,
825
832
  "output_modes": output_modes,
833
+ "is_hidden": is_hidden,
826
834
  }
827
835
  )
828
836
 
@@ -859,6 +867,36 @@ class AgentAdapters:
859
867
 
860
868
  return agent
861
869
 
870
+ @staticmethod
871
+ @arequire_valid_user
872
+ async def aupdate_hidden_agent(
873
+ user: KhojUser,
874
+ slug: Optional[str] = None,
875
+ persona: Optional[str] = None,
876
+ chat_model: Optional[str] = None,
877
+ input_tools: Optional[List[str]] = None,
878
+ output_modes: Optional[List[str]] = None,
879
+ existing_agent: Optional[Agent] = None,
880
+ ):
881
+ name = generate_random_internal_agent_name() if not existing_agent else existing_agent.name
882
+
883
+ agent = await AgentAdapters.aupdate_agent(
884
+ user=user,
885
+ name=name,
886
+ personality=persona,
887
+ privacy_level=Agent.PrivacyLevel.PRIVATE,
888
+ icon=Agent.StyleIconTypes.LIGHTBULB,
889
+ color=Agent.StyleColorTypes.BLUE,
890
+ chat_model=chat_model,
891
+ files=[],
892
+ input_tools=input_tools,
893
+ output_modes=output_modes,
894
+ slug=slug,
895
+ is_hidden=True,
896
+ )
897
+
898
+ return agent
899
+
862
900
 
863
901
  class PublicConversationAdapters:
864
902
  @staticmethod
@@ -970,7 +1008,9 @@ class ConversationAdapters:
970
1008
  if create_new:
971
1009
  return await ConversationAdapters.acreate_conversation_session(user, client_application)
972
1010
 
973
- query = Conversation.objects.filter(user=user, client=client_application).prefetch_related("agent")
1011
+ query = Conversation.objects.filter(user=user, client=client_application).prefetch_related(
1012
+ "agent", "agent__chat_model"
1013
+ )
974
1014
 
975
1015
  if conversation_id:
976
1016
  return await query.filter(id=conversation_id).afirst()
@@ -979,7 +1019,7 @@ class ConversationAdapters:
979
1019
 
980
1020
  conversation = await query.order_by("-updated_at").afirst()
981
1021
 
982
- return conversation or await Conversation.objects.prefetch_related("agent").acreate(
1022
+ return conversation or await Conversation.objects.prefetch_related("agent", "agent__chat_model").acreate(
983
1023
  user=user, client=client_application
984
1024
  )
985
1025
 
@@ -1109,7 +1149,7 @@ class ConversationAdapters:
1109
1149
  return ChatModel.objects.filter().first()
1110
1150
 
1111
1151
  @staticmethod
1112
- async def aget_default_chat_model(user: KhojUser = None):
1152
+ async def aget_default_chat_model(user: KhojUser = None, fallback_chat_model: Optional[ChatModel] = None):
1113
1153
  """Get default conversation config. Prefer chat model by server admin > user > first created chat model"""
1114
1154
  # Get the server chat settings
1115
1155
  server_chat_settings: ServerChatSettings = (
@@ -1129,12 +1169,18 @@ class ConversationAdapters:
1129
1169
  if server_chat_settings.chat_default:
1130
1170
  return server_chat_settings.chat_default
1131
1171
 
1172
+ # Revert to an explicit fallback model if the server chat settings are not set
1173
+ if fallback_chat_model:
1174
+ # The chat model may not be full loaded from the db, so explicitly load it here
1175
+ return await ChatModel.objects.filter(id=fallback_chat_model.id).prefetch_related("ai_model_api").afirst()
1176
+
1132
1177
  # Get the user's chat settings, if the server chat settings are not set
1133
1178
  user_chat_settings = (
1134
1179
  (await UserConversationConfig.objects.filter(user=user).prefetch_related("setting__ai_model_api").afirst())
1135
1180
  if user
1136
1181
  else None
1137
1182
  )
1183
+
1138
1184
  if user_chat_settings is not None and user_chat_settings.setting is not None:
1139
1185
  return user_chat_settings.setting
1140
1186
 
@@ -0,0 +1,27 @@
1
+ # Generated by Django 5.0.10 on 2025-01-16 23:59
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ dependencies = [
8
+ ("database", "0080_speechtotextmodeloptions_ai_model_api"),
9
+ ]
10
+
11
+ operations = [
12
+ migrations.AddField(
13
+ model_name="agent",
14
+ name="is_hidden",
15
+ field=models.BooleanField(default=False),
16
+ ),
17
+ migrations.AddField(
18
+ model_name="chatmodel",
19
+ name="description",
20
+ field=models.TextField(blank=True, default=None, null=True),
21
+ ),
22
+ migrations.AddField(
23
+ model_name="chatmodel",
24
+ name="strengths",
25
+ field=models.TextField(blank=True, default=None, null=True),
26
+ ),
27
+ ]
@@ -0,0 +1,13 @@
1
+ # Generated by Django 5.0.10 on 2025-01-21 18:42
2
+ from typing import List
3
+
4
+ from django.db import migrations
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+ dependencies = [
9
+ ("database", "0081_agent_is_hidden_chatmodel_description_and_more"),
10
+ ("database", "0081_merge_20250120_1633"),
11
+ ]
12
+
13
+ operations: List[str] = []
@@ -0,0 +1,71 @@
1
+ # Generated by Django 5.0.10 on 2025-01-24 16:23
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", "0082_merge_20250121_1842"),
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=[("image", "Image"), ("automation", "Automation"), ("diagram", "Diagram")], max_length=200
19
+ ),
20
+ blank=True,
21
+ default=list,
22
+ null=True,
23
+ size=None,
24
+ ),
25
+ ),
26
+ migrations.AlterField(
27
+ model_name="agent",
28
+ name="personality",
29
+ field=models.TextField(blank=True, default=None, null=True),
30
+ ),
31
+ migrations.AlterField(
32
+ model_name="agent",
33
+ name="style_color",
34
+ field=models.CharField(
35
+ choices=[
36
+ ("blue", "Blue"),
37
+ ("green", "Green"),
38
+ ("red", "Red"),
39
+ ("yellow", "Yellow"),
40
+ ("orange", "Orange"),
41
+ ("purple", "Purple"),
42
+ ("pink", "Pink"),
43
+ ("teal", "Teal"),
44
+ ("cyan", "Cyan"),
45
+ ("lime", "Lime"),
46
+ ("indigo", "Indigo"),
47
+ ("fuchsia", "Fuchsia"),
48
+ ("rose", "Rose"),
49
+ ("sky", "Sky"),
50
+ ("amber", "Amber"),
51
+ ("emerald", "Emerald"),
52
+ ],
53
+ default="orange",
54
+ max_length=200,
55
+ ),
56
+ ),
57
+ migrations.AlterField(
58
+ model_name="processlock",
59
+ name="name",
60
+ field=models.CharField(
61
+ choices=[
62
+ ("index_content", "Index Content"),
63
+ ("scheduled_job", "Scheduled Job"),
64
+ ("schedule_leader", "Schedule Leader"),
65
+ ("apply_migrations", "Apply Migrations"),
66
+ ],
67
+ max_length=200,
68
+ unique=True,
69
+ ),
70
+ ),
71
+ ]
@@ -0,0 +1,33 @@
1
+ # Generated by Django 5.0.10 on 2025-01-28 23:35
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", "0083_alter_agent_output_modes_alter_agent_personality_and_more"),
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
+ ("webpage", "Webpage"),
23
+ ("code", "Code"),
24
+ ],
25
+ max_length=200,
26
+ ),
27
+ blank=True,
28
+ default=list,
29
+ null=True,
30
+ size=None,
31
+ ),
32
+ ),
33
+ ]
@@ -0,0 +1,24 @@
1
+ # Generated by Django 5.0.10 on 2025-02-01 20:10
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", "0084_alter_agent_input_tools"),
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(choices=[("image", "Image"), ("diagram", "Diagram")], max_length=200),
18
+ blank=True,
19
+ default=list,
20
+ null=True,
21
+ size=None,
22
+ ),
23
+ ),
24
+ ]
@@ -209,6 +209,8 @@ class ChatModel(DbBaseModel):
209
209
  model_type = models.CharField(max_length=200, choices=ModelType.choices, default=ModelType.OFFLINE)
210
210
  vision_enabled = models.BooleanField(default=False)
211
211
  ai_model_api = models.ForeignKey(AiModelApi, on_delete=models.CASCADE, default=None, null=True, blank=True)
212
+ description = models.TextField(default=None, null=True, blank=True)
213
+ strengths = models.TextField(default=None, null=True, blank=True)
212
214
 
213
215
  def __str__(self):
214
216
  return self.name
@@ -278,20 +280,19 @@ class Agent(DbBaseModel):
278
280
  GENERAL = "general"
279
281
  ONLINE = "online"
280
282
  NOTES = "notes"
281
- SUMMARIZE = "summarize"
282
- WEBPAGE = "webpage"
283
+ WEBPAGE = ("webpage",)
284
+ CODE = "code"
283
285
 
284
286
  class OutputModeOptions(models.TextChoices):
285
287
  # These map to various ConversationCommand types
286
- TEXT = "text"
287
288
  IMAGE = "image"
288
- AUTOMATION = "automation"
289
+ DIAGRAM = "diagram"
289
290
 
290
291
  creator = models.ForeignKey(
291
292
  KhojUser, on_delete=models.CASCADE, default=None, null=True, blank=True
292
293
  ) # Creator will only be null when the agents are managed by admin
293
294
  name = models.CharField(max_length=200)
294
- personality = models.TextField()
295
+ personality = models.TextField(default=None, null=True, blank=True)
295
296
  input_tools = ArrayField(
296
297
  models.CharField(max_length=200, choices=InputToolOptions.choices), default=list, null=True, blank=True
297
298
  )
@@ -301,9 +302,10 @@ class Agent(DbBaseModel):
301
302
  managed_by_admin = models.BooleanField(default=False)
302
303
  chat_model = models.ForeignKey(ChatModel, on_delete=models.CASCADE)
303
304
  slug = models.CharField(max_length=200, unique=True)
304
- style_color = models.CharField(max_length=200, choices=StyleColorTypes.choices, default=StyleColorTypes.BLUE)
305
+ style_color = models.CharField(max_length=200, choices=StyleColorTypes.choices, default=StyleColorTypes.ORANGE)
305
306
  style_icon = models.CharField(max_length=200, choices=StyleIconTypes.choices, default=StyleIconTypes.LIGHTBULB)
306
307
  privacy_level = models.CharField(max_length=30, choices=PrivacyLevel.choices, default=PrivacyLevel.PRIVATE)
308
+ is_hidden = models.BooleanField(default=False)
307
309
 
308
310
  def save(self, *args, **kwargs):
309
311
  is_new = self._state.adding
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="__variable_f36179 __variable_702545"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/1d8a05b60287ae6c-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/77c207b095007c34-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/82ef96de0e8f4d8c-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/a6ecd16fa044d500-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/bd82c78e5b7b3fe9-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/c4250770ab8708b6-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/e098aaaecc9cfbb2-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/089de1d8526b96e9.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/d7448372b4f1e3b8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2c5a3f89bde64271.js"/><script src="/_next/static/chunks/fd9d1056-f14840e2376aea5a.js" async=""></script><script src="/_next/static/chunks/2117-2a54a27661a71b65.js" async=""></script><script src="/_next/static/chunks/main-app-de1f09df97a3cfc7.js" async=""></script><meta name="robots" content="noindex"/><meta http-equiv="Content-Security-Policy" content="default-src &#x27;self&#x27; https://assets.khoj.dev; media-src * blob:; script-src &#x27;self&#x27; https://assets.khoj.dev https://app.chatwoot.com https://accounts.google.com &#x27;unsafe-inline&#x27; &#x27;unsafe-eval&#x27;; connect-src &#x27;self&#x27; blob: https://ipapi.co/json ws://localhost:42110 https://accounts.google.com; style-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; https://fonts.googleapis.com https://accounts.google.com; img-src &#x27;self&#x27; data: blob: https://*.khoj.dev https://accounts.google.com https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src &#x27;self&#x27; https://assets.khoj.dev https://fonts.gstatic.com; frame-src &#x27;self&#x27; https://accounts.google.com https://app.chatwoot.com; child-src &#x27;self&#x27; https://app.chatwoot.com; object-src &#x27;none&#x27;;"/><title>404: This page could not be found.</title><title>Khoj AI - Ask Anything</title><meta name="description" content="Khoj is a personal research assistant. It helps you understand better and create faster."/><link rel="manifest" href="/static/khoj.webmanifest" crossorigin="use-credentials"/><meta name="keywords" content="research assistant, productivity, AI, Khoj, open source, model agnostic, research, productivity tool, personal assistant, personal research assistant, personal productivity assistant"/><meta property="og:title" content="Khoj AI"/><meta property="og:description" content="Khoj is a personal research assistant. It helps you understand better and create faster."/><meta property="og:url" content="https://app.khoj.dev/"/><meta property="og:site_name" content="Khoj AI"/><meta property="og:image" content="https://assets.khoj.dev/khoj_hero.png"/><meta property="og:image:width" content="940"/><meta property="og:image:height" content="525"/><meta property="og:image" content="https://assets.khoj.dev/khoj_lantern_256x256.png"/><meta property="og:image:width" content="256"/><meta property="og:image:height" content="256"/><meta property="og:image" content="https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Khoj AI"/><meta name="twitter:description" content="Khoj is a personal research assistant. It helps you understand better and create faster."/><meta name="twitter:image" content="https://assets.khoj.dev/khoj_hero.png"/><meta name="twitter:image:width" content="940"/><meta name="twitter:image:height" content="525"/><meta name="twitter:image" content="https://assets.khoj.dev/khoj_lantern_256x256.png"/><meta name="twitter:image:width" content="256"/><meta name="twitter:image:height" content="256"/><meta name="twitter:image" content="https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png"/><meta name="twitter:image:width" content="1200"/><meta name="twitter:image:height" content="630"/><link rel="icon" href="/static/assets/icons/khoj_lantern.ico"/><link rel="apple-touch-icon" href="/static/assets/icons/khoj_lantern_256x256.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-2c5a3f89bde64271.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/1d8a05b60287ae6c-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/media/77c207b095007c34-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n3:HL[\"/_next/static/media/82ef96de0e8f4d8c-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n4:HL[\"/_next/static/media/a6ecd16fa044d500-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n5:HL[\"/_next/static/media/bd82c78e5b7b3fe9-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n6:HL[\"/_next/static/media/c4250770ab8708b6-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n7:HL[\"/_next/static/media/e098aaaecc9cfbb2-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n8:HL[\"/_next/static/css/089de1d8526b96e9.css\",\"style\"]\n9:HL[\"/_next/static/css/d7448372b4f1e3b8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"a:I[12846,[],\"\"]\nc:I[4707,[],\"\"]\nd:I[36423,[],\"\"]\n13:I[61060,[],\"\"]\ne:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\nf:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n10:{\"display\":\"inline-block\"}\n11:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\n14:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$La\",null,{\"buildId\":\"qiv_p9caXoUfGDmSGgKvs\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\",\"\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$Lb\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/089de1d8526b96e9.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/d7448372b4f1e3b8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_f36179 __variable_702545\",\"children\":[[\"$\",\"meta\",null,{\"httpEquiv\":\"Content-Security-Policy\",\"content\":\"default-src 'self' https://assets.khoj.dev; media-src * blob:; script-src 'self' https://assets.khoj.dev https://app.chatwoot.com https://accounts.google.com 'unsafe-inline' 'unsafe-eval'; connect-src 'self' blob: https://ipapi.co/json ws://localhost:42110 https://accounts.google.com; style-src 'self' https://assets.khoj.dev 'unsafe-inline' https://fonts.googleapis.com https://accounts.google.com; img-src 'self' data: blob: https://*.khoj.dev https://accounts.google.com https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src 'self' https://assets.khoj.dev https://fonts.gstatic.com; frame-src 'self' https://accounts.google.com https://app.chatwoot.com; child-src 'self' https://app.chatwoot.com; object-src 'none';\"}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$e\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$f\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$10\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$11\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$L12\"],\"globalErrorComponent\":\"$13\",\"missingSlots\":\"$W14\"}]\n"])</script><script>self.__next_f.push([1,"12:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Khoj AI - Ask Anything\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Khoj is a personal research assistant. It helps you understand better and create faster.\"}],[\"$\",\"link\",\"4\",{\"rel\":\"manifest\",\"href\":\"/static/khoj.webmanifest\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"5\",{\"name\":\"keywords\",\"content\":\"research assistant, productivity, AI, Khoj, open source, model agnostic, research, productivity tool, personal assistant, personal research assistant, personal productivity assistant\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:title\",\"content\":\"Khoj AI\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:description\",\"content\":\"Khoj is a personal research assistant. It helps you understand better and create faster.\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:url\",\"content\":\"https://app.khoj.dev/\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:site_name\",\"content\":\"Khoj AI\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image\",\"content\":\"https://assets.khoj.dev/khoj_hero.png\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:image:width\",\"content\":\"940\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image:height\",\"content\":\"525\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:width\",\"content\":\"256\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image:height\",\"content\":\"256\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:title\",\"content\":\"Khoj AI\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:description\",\"content\":\"Khoj is a personal research assistant. It helps you understand better and create faster.\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:image\",\"content\":\"https://assets.khoj.dev/khoj_hero.png\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:image:width\",\"content\":\"940\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:image:height\",\"content\":\"525\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"27\",{\"name\":\"twitter:image:width\",\"content\":\"256\"}],[\"$\",\"meta\",\"28\",{\"name\":\"twitter:image:height\",\"content\":\"256\"}],[\"$\",\"meta\",\"29\",{\"name\":\"twitter:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png\"}],[\"$\",\"meta\",\"30\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"31\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"32\",{\"rel\":\"icon\",\"href\":\"/static/assets/icons/khoj_lantern.ico\"}],[\"$\",\"link\",\"33\",{\"rel\":\"apple-touch-icon\",\"href\":\"/static/assets/icons/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"34\",{\"name\":\"next-size-adjust\"}]]\n"])</script><script>self.__next_f.push([1,"b:null\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="__variable_f36179 __variable_702545"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/1d8a05b60287ae6c-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/77c207b095007c34-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/82ef96de0e8f4d8c-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/a6ecd16fa044d500-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/bd82c78e5b7b3fe9-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/c4250770ab8708b6-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/e098aaaecc9cfbb2-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/089de1d8526b96e9.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/20ac73cc3d58b75c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-4b0fb0aafc881a07.js"/><script src="/_next/static/chunks/fd9d1056-7454f5bbfcf5bd5b.js" async=""></script><script src="/_next/static/chunks/2117-f99825f0a867a42d.js" async=""></script><script src="/_next/static/chunks/main-app-de1f09df97a3cfc7.js" async=""></script><meta name="robots" content="noindex"/><meta http-equiv="Content-Security-Policy" content="default-src &#x27;self&#x27; https://assets.khoj.dev; media-src * blob:; script-src &#x27;self&#x27; https://assets.khoj.dev https://app.chatwoot.com https://accounts.google.com &#x27;unsafe-inline&#x27; &#x27;unsafe-eval&#x27;; connect-src &#x27;self&#x27; blob: https://ipapi.co/json ws://localhost:42110 https://accounts.google.com; style-src &#x27;self&#x27; https://assets.khoj.dev &#x27;unsafe-inline&#x27; https://fonts.googleapis.com https://accounts.google.com; img-src &#x27;self&#x27; data: blob: https://*.khoj.dev https://accounts.google.com https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src &#x27;self&#x27; https://assets.khoj.dev https://fonts.gstatic.com; frame-src &#x27;self&#x27; https://accounts.google.com https://app.chatwoot.com; child-src &#x27;self&#x27; https://app.chatwoot.com; object-src &#x27;none&#x27;;"/><title>404: This page could not be found.</title><title>Khoj AI - Ask Anything</title><meta name="description" content="Khoj is a personal research assistant. It helps you understand better and create faster."/><link rel="manifest" href="/static/khoj.webmanifest" crossorigin="use-credentials"/><meta name="keywords" content="research assistant, productivity, AI, Khoj, open source, model agnostic, research, productivity tool, personal assistant, personal research assistant, personal productivity assistant"/><meta property="og:title" content="Khoj AI"/><meta property="og:description" content="Khoj is a personal research assistant. It helps you understand better and create faster."/><meta property="og:url" content="https://app.khoj.dev/"/><meta property="og:site_name" content="Khoj AI"/><meta property="og:image" content="https://assets.khoj.dev/khoj_hero.png"/><meta property="og:image:width" content="940"/><meta property="og:image:height" content="525"/><meta property="og:image" content="https://assets.khoj.dev/khoj_lantern_256x256.png"/><meta property="og:image:width" content="256"/><meta property="og:image:height" content="256"/><meta property="og:image" content="https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Khoj AI"/><meta name="twitter:description" content="Khoj is a personal research assistant. It helps you understand better and create faster."/><meta name="twitter:image" content="https://assets.khoj.dev/khoj_hero.png"/><meta name="twitter:image:width" content="940"/><meta name="twitter:image:height" content="525"/><meta name="twitter:image" content="https://assets.khoj.dev/khoj_lantern_256x256.png"/><meta name="twitter:image:width" content="256"/><meta name="twitter:image:height" content="256"/><meta name="twitter:image" content="https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png"/><meta name="twitter:image:width" content="1200"/><meta name="twitter:image:height" content="630"/><link rel="icon" href="/static/assets/icons/khoj_lantern.ico"/><link rel="apple-touch-icon" href="/static/assets/icons/khoj_lantern_256x256.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-4b0fb0aafc881a07.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/1d8a05b60287ae6c-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/media/77c207b095007c34-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n3:HL[\"/_next/static/media/82ef96de0e8f4d8c-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n4:HL[\"/_next/static/media/a6ecd16fa044d500-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n5:HL[\"/_next/static/media/bd82c78e5b7b3fe9-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n6:HL[\"/_next/static/media/c4250770ab8708b6-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n7:HL[\"/_next/static/media/e098aaaecc9cfbb2-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n8:HL[\"/_next/static/css/089de1d8526b96e9.css\",\"style\"]\n9:HL[\"/_next/static/css/20ac73cc3d58b75c.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"a:I[12846,[],\"\"]\nc:I[4707,[],\"\"]\nd:I[36423,[],\"\"]\n13:I[61060,[],\"\"]\ne:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\nf:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n10:{\"display\":\"inline-block\"}\n11:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\n14:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$La\",null,{\"buildId\":\"nzUuinMXEsRX86qGdx-yY\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\",\"\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$Lb\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/089de1d8526b96e9.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/20ac73cc3d58b75c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_f36179 __variable_702545\",\"children\":[[\"$\",\"meta\",null,{\"httpEquiv\":\"Content-Security-Policy\",\"content\":\"default-src 'self' https://assets.khoj.dev; media-src * blob:; script-src 'self' https://assets.khoj.dev https://app.chatwoot.com https://accounts.google.com 'unsafe-inline' 'unsafe-eval'; connect-src 'self' blob: https://ipapi.co/json ws://localhost:42110 https://accounts.google.com; style-src 'self' https://assets.khoj.dev 'unsafe-inline' https://fonts.googleapis.com https://accounts.google.com; img-src 'self' data: blob: https://*.khoj.dev https://accounts.google.com https://*.googleusercontent.com https://*.google.com/ https://*.gstatic.com; font-src 'self' https://assets.khoj.dev https://fonts.gstatic.com; frame-src 'self' https://accounts.google.com https://app.chatwoot.com; child-src 'self' https://app.chatwoot.com; object-src 'none';\"}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$e\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$f\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$10\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$11\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$L12\"],\"globalErrorComponent\":\"$13\",\"missingSlots\":\"$W14\"}]\n"])</script><script>self.__next_f.push([1,"12:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Khoj AI - Ask Anything\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Khoj is a personal research assistant. It helps you understand better and create faster.\"}],[\"$\",\"link\",\"4\",{\"rel\":\"manifest\",\"href\":\"/static/khoj.webmanifest\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"5\",{\"name\":\"keywords\",\"content\":\"research assistant, productivity, AI, Khoj, open source, model agnostic, research, productivity tool, personal assistant, personal research assistant, personal productivity assistant\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:title\",\"content\":\"Khoj AI\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:description\",\"content\":\"Khoj is a personal research assistant. It helps you understand better and create faster.\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:url\",\"content\":\"https://app.khoj.dev/\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:site_name\",\"content\":\"Khoj AI\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image\",\"content\":\"https://assets.khoj.dev/khoj_hero.png\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:image:width\",\"content\":\"940\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image:height\",\"content\":\"525\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:width\",\"content\":\"256\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image:height\",\"content\":\"256\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:title\",\"content\":\"Khoj AI\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:description\",\"content\":\"Khoj is a personal research assistant. It helps you understand better and create faster.\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:image\",\"content\":\"https://assets.khoj.dev/khoj_hero.png\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:image:width\",\"content\":\"940\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:image:height\",\"content\":\"525\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"27\",{\"name\":\"twitter:image:width\",\"content\":\"256\"}],[\"$\",\"meta\",\"28\",{\"name\":\"twitter:image:height\",\"content\":\"256\"}],[\"$\",\"meta\",\"29\",{\"name\":\"twitter:image\",\"content\":\"https://assets.khoj.dev/khoj_lantern_logomarktype_1200x630.png\"}],[\"$\",\"meta\",\"30\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"31\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"32\",{\"rel\":\"icon\",\"href\":\"/static/assets/icons/khoj_lantern.ico\"}],[\"$\",\"link\",\"33\",{\"rel\":\"apple-touch-icon\",\"href\":\"/static/assets/icons/khoj_lantern_256x256.png\"}],[\"$\",\"meta\",\"34\",{\"name\":\"next-size-adjust\"}]]\n"])</script><script>self.__next_f.push([1,"b:null\n"])</script></body></html>