khoj 1.25.1.dev2__py3-none-any.whl → 1.25.1.dev9__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 (53) hide show
  1. khoj/configure.py +3 -3
  2. khoj/database/adapters/__init__.py +41 -17
  3. khoj/interface/compiled/404/index.html +1 -1
  4. khoj/interface/compiled/_next/static/chunks/7762-79f2205740622b5c.js +1 -0
  5. khoj/interface/compiled/_next/static/chunks/app/agents/page-b406d166301c4c7d.js +1 -0
  6. khoj/interface/compiled/_next/static/chunks/app/automations/{page-5480731341f34450.js → page-2edc21f30819def4.js} +1 -1
  7. khoj/interface/compiled/_next/static/chunks/app/chat/{page-702057ccbcf27881.js → page-4309c98e6dc497dd.js} +1 -1
  8. khoj/interface/compiled/_next/static/chunks/app/factchecker/{page-e7b34316ec6f44de.js → page-f2c83e3a87a28657.js} +1 -1
  9. khoj/interface/compiled/_next/static/chunks/app/{page-10a5aad6e04f3cf8.js → page-ab9beb5a26e396f7.js} +1 -1
  10. khoj/interface/compiled/_next/static/chunks/app/search/{page-d56541c746fded7d.js → page-b807caebd7f278c7.js} +1 -1
  11. khoj/interface/compiled/_next/static/chunks/app/settings/{page-e044a999468a7c5d.js → page-2932356ad11c2f7b.js} +1 -1
  12. khoj/interface/compiled/_next/static/chunks/app/share/chat/{page-fbbd66a4d4633438.js → page-a736a0826570af2b.js} +1 -1
  13. khoj/interface/compiled/_next/static/chunks/{webpack-ace3bded0dbc790e.js → webpack-462819dcfa6a1e2b.js} +1 -1
  14. khoj/interface/compiled/_next/static/css/4cae6c0e5c72fb2d.css +1 -0
  15. khoj/interface/compiled/_next/static/css/b1094827d745306b.css +1 -0
  16. khoj/interface/compiled/agents/index.html +1 -1
  17. khoj/interface/compiled/agents/index.txt +2 -2
  18. khoj/interface/compiled/automations/index.html +1 -1
  19. khoj/interface/compiled/automations/index.txt +2 -2
  20. khoj/interface/compiled/chat/index.html +1 -1
  21. khoj/interface/compiled/chat/index.txt +2 -2
  22. khoj/interface/compiled/factchecker/index.html +1 -1
  23. khoj/interface/compiled/factchecker/index.txt +2 -2
  24. khoj/interface/compiled/index.html +1 -1
  25. khoj/interface/compiled/index.txt +2 -2
  26. khoj/interface/compiled/search/index.html +1 -1
  27. khoj/interface/compiled/search/index.txt +2 -2
  28. khoj/interface/compiled/settings/index.html +1 -1
  29. khoj/interface/compiled/settings/index.txt +2 -2
  30. khoj/interface/compiled/share/chat/index.html +1 -1
  31. khoj/interface/compiled/share/chat/index.txt +2 -2
  32. khoj/processor/image/generate.py +1 -2
  33. khoj/processor/tools/online_search.py +4 -4
  34. khoj/routers/api.py +1 -1
  35. khoj/routers/api_agents.py +4 -1
  36. khoj/routers/api_chat.py +8 -10
  37. khoj/routers/api_model.py +1 -1
  38. khoj/routers/helpers.py +47 -49
  39. khoj/utils/initialization.py +0 -3
  40. {khoj-1.25.1.dev2.dist-info → khoj-1.25.1.dev9.dist-info}/METADATA +18 -13
  41. {khoj-1.25.1.dev2.dist-info → khoj-1.25.1.dev9.dist-info}/RECORD +49 -49
  42. khoj/interface/compiled/_next/static/chunks/1269-2e52d48e7d0e5c61.js +0 -1
  43. khoj/interface/compiled/_next/static/chunks/app/agents/page-ad81f5e84372667b.js +0 -1
  44. khoj/interface/compiled/_next/static/css/2de69f0be774c768.css +0 -1
  45. khoj/interface/compiled/_next/static/css/592ca99f5122e75a.css +0 -1
  46. /khoj/interface/compiled/_next/static/chunks/{9178-899fe9a6b754ecfe.js → 9178-f208a3e6404714a9.js} +0 -0
  47. /khoj/interface/compiled/_next/static/chunks/{9417-29502e39c3e7d60c.js → 9417-1d158bf46d3a0dc9.js} +0 -0
  48. /khoj/interface/compiled/_next/static/chunks/{9479-7eed36fc954ef804.js → 9479-563e4d61f91d5a7c.js} +0 -0
  49. /khoj/interface/compiled/_next/static/{GCWJ9zQV9mIpv2rrghzda → jRL5xyceUdI0nvEyCkgqF}/_buildManifest.js +0 -0
  50. /khoj/interface/compiled/_next/static/{GCWJ9zQV9mIpv2rrghzda → jRL5xyceUdI0nvEyCkgqF}/_ssgManifest.js +0 -0
  51. {khoj-1.25.1.dev2.dist-info → khoj-1.25.1.dev9.dist-info}/WHEEL +0 -0
  52. {khoj-1.25.1.dev2.dist-info → khoj-1.25.1.dev9.dist-info}/entry_points.txt +0 -0
  53. {khoj-1.25.1.dev2.dist-info → khoj-1.25.1.dev9.dist-info}/licenses/LICENSE +0 -0
khoj/routers/helpers.py CHANGED
@@ -39,6 +39,7 @@ from khoj.database.adapters import (
39
39
  AutomationAdapters,
40
40
  ConversationAdapters,
41
41
  EntryAdapters,
42
+ ais_user_subscribed,
42
43
  create_khoj_token,
43
44
  get_khoj_tokens,
44
45
  get_user_name,
@@ -119,20 +120,20 @@ def is_query_empty(query: str) -> bool:
119
120
  return is_none_or_empty(query.strip())
120
121
 
121
122
 
122
- def validate_conversation_config():
123
- default_config = ConversationAdapters.get_default_conversation_config()
123
+ def validate_conversation_config(user: KhojUser):
124
+ default_config = ConversationAdapters.get_default_conversation_config(user)
124
125
 
125
126
  if default_config is None:
126
- raise HTTPException(status_code=500, detail="Contact the server administrator to set a default chat model.")
127
+ raise HTTPException(status_code=500, detail="Contact the server administrator to add a chat model.")
127
128
 
128
129
  if default_config.model_type == "openai" and not default_config.openai_config:
129
- raise HTTPException(status_code=500, detail="Contact the server administrator to set a default chat model.")
130
+ raise HTTPException(status_code=500, detail="Contact the server administrator to add a chat model.")
130
131
 
131
132
 
132
133
  async def is_ready_to_chat(user: KhojUser):
133
- user_conversation_config = (await ConversationAdapters.aget_user_conversation_config(user)) or (
134
- await ConversationAdapters.aget_default_conversation_config()
135
- )
134
+ user_conversation_config = await ConversationAdapters.aget_user_conversation_config(user)
135
+ if user_conversation_config == None:
136
+ user_conversation_config = await ConversationAdapters.aget_default_conversation_config()
136
137
 
137
138
  if user_conversation_config and user_conversation_config.model_type == ChatModelOptions.ModelType.OFFLINE:
138
139
  chat_model = user_conversation_config.chat_model
@@ -246,19 +247,19 @@ async def agenerate_chat_response(*args):
246
247
  return await loop.run_in_executor(executor, generate_chat_response, *args)
247
248
 
248
249
 
249
- async def acreate_title_from_query(query: str) -> str:
250
+ async def acreate_title_from_query(query: str, user: KhojUser = None) -> str:
250
251
  """
251
252
  Create a title from the given query
252
253
  """
253
254
  title_generation_prompt = prompts.subject_generation.format(query=query)
254
255
 
255
256
  with timer("Chat actor: Generate title from query", logger):
256
- response = await send_message_to_model_wrapper(title_generation_prompt)
257
+ response = await send_message_to_model_wrapper(title_generation_prompt, user=user)
257
258
 
258
259
  return response.strip()
259
260
 
260
261
 
261
- async def acheck_if_safe_prompt(system_prompt: str) -> Tuple[bool, str]:
262
+ async def acheck_if_safe_prompt(system_prompt: str, user: KhojUser = None) -> Tuple[bool, str]:
262
263
  """
263
264
  Check if the system prompt is safe to use
264
265
  """
@@ -267,7 +268,7 @@ async def acheck_if_safe_prompt(system_prompt: str) -> Tuple[bool, str]:
267
268
  reason = ""
268
269
 
269
270
  with timer("Chat actor: Check if safe prompt", logger):
270
- response = await send_message_to_model_wrapper(safe_prompt_check)
271
+ response = await send_message_to_model_wrapper(safe_prompt_check, user=user)
271
272
 
272
273
  response = response.strip()
273
274
  try:
@@ -288,7 +289,7 @@ async def aget_relevant_information_sources(
288
289
  query: str,
289
290
  conversation_history: dict,
290
291
  is_task: bool,
291
- subscribed: bool,
292
+ user: KhojUser,
292
293
  uploaded_image_url: str = None,
293
294
  agent: Agent = None,
294
295
  ):
@@ -326,7 +327,7 @@ async def aget_relevant_information_sources(
326
327
  response = await send_message_to_model_wrapper(
327
328
  relevant_tools_prompt,
328
329
  response_type="json_object",
329
- subscribed=subscribed,
330
+ user=user,
330
331
  )
331
332
 
332
333
  try:
@@ -362,7 +363,12 @@ async def aget_relevant_information_sources(
362
363
 
363
364
 
364
365
  async def aget_relevant_output_modes(
365
- query: str, conversation_history: dict, is_task: bool = False, uploaded_image_url: str = None, agent: Agent = None
366
+ query: str,
367
+ conversation_history: dict,
368
+ is_task: bool = False,
369
+ user: KhojUser = None,
370
+ uploaded_image_url: str = None,
371
+ agent: Agent = None,
366
372
  ):
367
373
  """
368
374
  Given a query, determine which of the available tools the agent should use in order to answer appropriately.
@@ -398,7 +404,7 @@ async def aget_relevant_output_modes(
398
404
  )
399
405
 
400
406
  with timer("Chat actor: Infer output mode for chat response", logger):
401
- response = await send_message_to_model_wrapper(relevant_mode_prompt, response_type="json_object")
407
+ response = await send_message_to_model_wrapper(relevant_mode_prompt, response_type="json_object", user=user)
402
408
 
403
409
  try:
404
410
  response = response.strip()
@@ -453,7 +459,7 @@ async def infer_webpage_urls(
453
459
 
454
460
  with timer("Chat actor: Infer webpage urls to read", logger):
455
461
  response = await send_message_to_model_wrapper(
456
- online_queries_prompt, uploaded_image_url=uploaded_image_url, response_type="json_object"
462
+ online_queries_prompt, uploaded_image_url=uploaded_image_url, response_type="json_object", user=user
457
463
  )
458
464
 
459
465
  # Validate that the response is a non-empty, JSON-serializable list of URLs
@@ -499,7 +505,7 @@ async def generate_online_subqueries(
499
505
 
500
506
  with timer("Chat actor: Generate online search subqueries", logger):
501
507
  response = await send_message_to_model_wrapper(
502
- online_queries_prompt, uploaded_image_url=uploaded_image_url, response_type="json_object"
508
+ online_queries_prompt, uploaded_image_url=uploaded_image_url, response_type="json_object", user=user
503
509
  )
504
510
 
505
511
  # Validate that the response is a non-empty, JSON-serializable list
@@ -517,7 +523,9 @@ async def generate_online_subqueries(
517
523
  return [q]
518
524
 
519
525
 
520
- async def schedule_query(q: str, conversation_history: dict, uploaded_image_url: str = None) -> Tuple[str, ...]:
526
+ async def schedule_query(
527
+ q: str, conversation_history: dict, user: KhojUser, uploaded_image_url: str = None
528
+ ) -> Tuple[str, ...]:
521
529
  """
522
530
  Schedule the date, time to run the query. Assume the server timezone is UTC.
523
531
  """
@@ -529,7 +537,7 @@ async def schedule_query(q: str, conversation_history: dict, uploaded_image_url:
529
537
  )
530
538
 
531
539
  raw_response = await send_message_to_model_wrapper(
532
- crontime_prompt, uploaded_image_url=uploaded_image_url, response_type="json_object"
540
+ crontime_prompt, uploaded_image_url=uploaded_image_url, response_type="json_object", user=user
533
541
  )
534
542
 
535
543
  # Validate that the response is a non-empty, JSON-serializable list
@@ -543,7 +551,7 @@ async def schedule_query(q: str, conversation_history: dict, uploaded_image_url:
543
551
  raise AssertionError(f"Invalid response for scheduling query: {raw_response}")
544
552
 
545
553
 
546
- async def extract_relevant_info(q: str, corpus: str, subscribed: bool, agent: Agent = None) -> Union[str, None]:
554
+ async def extract_relevant_info(q: str, corpus: str, user: KhojUser = None, agent: Agent = None) -> Union[str, None]:
547
555
  """
548
556
  Extract relevant information for a given query from the target corpus
549
557
  """
@@ -561,14 +569,11 @@ async def extract_relevant_info(q: str, corpus: str, subscribed: bool, agent: Ag
561
569
  personality_context=personality_context,
562
570
  )
563
571
 
564
- chat_model: ChatModelOptions = await ConversationAdapters.aget_default_conversation_config()
565
-
566
572
  with timer("Chat actor: Extract relevant information from data", logger):
567
573
  response = await send_message_to_model_wrapper(
568
574
  extract_relevant_information,
569
575
  prompts.system_prompt_extract_relevant_information,
570
- chat_model_option=chat_model,
571
- subscribed=subscribed,
576
+ user=user,
572
577
  )
573
578
  return response.strip()
574
579
 
@@ -577,8 +582,8 @@ async def extract_relevant_summary(
577
582
  q: str,
578
583
  corpus: str,
579
584
  conversation_history: dict,
580
- subscribed: bool = False,
581
585
  uploaded_image_url: str = None,
586
+ user: KhojUser = None,
582
587
  agent: Agent = None,
583
588
  ) -> Union[str, None]:
584
589
  """
@@ -601,14 +606,11 @@ async def extract_relevant_summary(
601
606
  personality_context=personality_context,
602
607
  )
603
608
 
604
- chat_model: ChatModelOptions = await ConversationAdapters.aget_default_conversation_config()
605
-
606
609
  with timer("Chat actor: Extract relevant information from data", logger):
607
610
  response = await send_message_to_model_wrapper(
608
611
  extract_relevant_information,
609
612
  prompts.system_prompt_extract_relevant_summary,
610
- chat_model_option=chat_model,
611
- subscribed=subscribed,
613
+ user=user,
612
614
  uploaded_image_url=uploaded_image_url,
613
615
  )
614
616
  return response.strip()
@@ -621,8 +623,8 @@ async def generate_better_image_prompt(
621
623
  note_references: List[Dict[str, Any]],
622
624
  online_results: Optional[dict] = None,
623
625
  model_type: Optional[str] = None,
624
- subscribed: bool = False,
625
626
  uploaded_image_url: Optional[str] = None,
627
+ user: KhojUser = None,
626
628
  agent: Agent = None,
627
629
  ) -> str:
628
630
  """
@@ -672,12 +674,8 @@ async def generate_better_image_prompt(
672
674
  personality_context=personality_context,
673
675
  )
674
676
 
675
- chat_model: ChatModelOptions = await ConversationAdapters.aget_default_conversation_config()
676
-
677
677
  with timer("Chat actor: Generate contextual image prompt", logger):
678
- response = await send_message_to_model_wrapper(
679
- image_prompt, chat_model_option=chat_model, subscribed=subscribed, uploaded_image_url=uploaded_image_url
680
- )
678
+ response = await send_message_to_model_wrapper(image_prompt, uploaded_image_url=uploaded_image_url, user=user)
681
679
  response = response.strip()
682
680
  if response.startswith(('"', "'")) and response.endswith(('"', "'")):
683
681
  response = response[1:-1]
@@ -689,14 +687,10 @@ async def send_message_to_model_wrapper(
689
687
  message: str,
690
688
  system_message: str = "",
691
689
  response_type: str = "text",
692
- chat_model_option: ChatModelOptions = None,
693
- subscribed: bool = False,
690
+ user: KhojUser = None,
694
691
  uploaded_image_url: str = None,
695
692
  ):
696
- conversation_config: ChatModelOptions = (
697
- chat_model_option or await ConversationAdapters.aget_default_conversation_config()
698
- )
699
-
693
+ conversation_config: ChatModelOptions = await ConversationAdapters.aget_default_conversation_config(user)
700
694
  vision_available = conversation_config.vision_enabled
701
695
  if not vision_available and uploaded_image_url:
702
696
  vision_enabled_config = await ConversationAdapters.aget_vision_enabled_config()
@@ -704,6 +698,7 @@ async def send_message_to_model_wrapper(
704
698
  conversation_config = vision_enabled_config
705
699
  vision_available = True
706
700
 
701
+ subscribed = await ais_user_subscribed(user)
707
702
  chat_model = conversation_config.chat_model
708
703
  max_tokens = (
709
704
  conversation_config.subscribed_max_prompt_size
@@ -802,8 +797,9 @@ def send_message_to_model_wrapper_sync(
802
797
  message: str,
803
798
  system_message: str = "",
804
799
  response_type: str = "text",
800
+ user: KhojUser = None,
805
801
  ):
806
- conversation_config: ChatModelOptions = ConversationAdapters.get_default_conversation_config()
802
+ conversation_config: ChatModelOptions = ConversationAdapters.get_default_conversation_config(user)
807
803
 
808
804
  if conversation_config is None:
809
805
  raise HTTPException(status_code=500, detail="Contact the server administrator to set a default chat model.")
@@ -1182,7 +1178,7 @@ class CommonQueryParamsClass:
1182
1178
  CommonQueryParams = Annotated[CommonQueryParamsClass, Depends()]
1183
1179
 
1184
1180
 
1185
- def should_notify(original_query: str, executed_query: str, ai_response: str) -> bool:
1181
+ def should_notify(original_query: str, executed_query: str, ai_response: str, user: KhojUser) -> bool:
1186
1182
  """
1187
1183
  Decide whether to notify the user of the AI response.
1188
1184
  Default to notifying the user for now.
@@ -1199,7 +1195,7 @@ def should_notify(original_query: str, executed_query: str, ai_response: str) ->
1199
1195
  with timer("Chat actor: Decide to notify user of automation response", logger):
1200
1196
  try:
1201
1197
  # TODO Replace with async call so we don't have to maintain a sync version
1202
- response = send_message_to_model_wrapper_sync(to_notify_or_not)
1198
+ response = send_message_to_model_wrapper_sync(to_notify_or_not, user)
1203
1199
  should_notify_result = "no" not in response.lower()
1204
1200
  logger.info(f'Decided to {"not " if not should_notify_result else ""}notify user of automation response.')
1205
1201
  return should_notify_result
@@ -1291,7 +1287,9 @@ def scheduled_chat(
1291
1287
  ai_response = raw_response.text
1292
1288
 
1293
1289
  # Notify user if the AI response is satisfactory
1294
- if should_notify(original_query=scheduling_request, executed_query=cleaned_query, ai_response=ai_response):
1290
+ if should_notify(
1291
+ original_query=scheduling_request, executed_query=cleaned_query, ai_response=ai_response, user=user
1292
+ ):
1295
1293
  if is_resend_enabled():
1296
1294
  send_task_email(user.get_short_name(), user.email, cleaned_query, ai_response, subject, is_image)
1297
1295
  else:
@@ -1301,7 +1299,7 @@ def scheduled_chat(
1301
1299
  async def create_automation(
1302
1300
  q: str, timezone: str, user: KhojUser, calling_url: URL, meta_log: dict = {}, conversation_id: str = None
1303
1301
  ):
1304
- crontime, query_to_run, subject = await schedule_query(q, meta_log)
1302
+ crontime, query_to_run, subject = await schedule_query(q, meta_log, user)
1305
1303
  job = await schedule_automation(query_to_run, subject, crontime, timezone, q, user, calling_url, conversation_id)
1306
1304
  return job, crontime, query_to_run, subject
1307
1305
 
@@ -1495,9 +1493,9 @@ def get_user_config(user: KhojUser, request: Request, is_detailed: bool = False)
1495
1493
  current_notion_config = get_user_notion_config(user)
1496
1494
  notion_token = current_notion_config.token if current_notion_config else ""
1497
1495
 
1498
- selected_chat_model_config = (
1499
- ConversationAdapters.get_conversation_config(user) or ConversationAdapters.get_default_conversation_config()
1500
- )
1496
+ selected_chat_model_config = ConversationAdapters.get_conversation_config(
1497
+ user
1498
+ ) or ConversationAdapters.get_default_conversation_config(user)
1501
1499
  chat_models = ConversationAdapters.get_conversation_processor_options().all()
1502
1500
  chat_model_options = list()
1503
1501
  for chat_model in chat_models:
@@ -129,9 +129,6 @@ def initialization(interactive: bool = True):
129
129
  if user_chat_model_name and ChatModelOptions.objects.filter(chat_model=user_chat_model_name).exists():
130
130
  default_chat_model_name = user_chat_model_name
131
131
 
132
- # Create a server chat settings object with the default chat model
133
- default_chat_model = ChatModelOptions.objects.filter(chat_model=default_chat_model_name).first()
134
- ServerChatSettings.objects.create(chat_default=default_chat_model)
135
132
  logger.info("🗣️ Chat model configuration complete")
136
133
 
137
134
  # Set up offline speech to text model
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: khoj
3
- Version: 1.25.1.dev2
3
+ Version: 1.25.1.dev9
4
4
  Summary: Your Second Brain
5
5
  Project-URL: Homepage, https://khoj.dev
6
6
  Project-URL: Documentation, https://docs.khoj.dev
@@ -103,14 +103,14 @@ Description-Content-Type: text/markdown
103
103
  <div align="center">
104
104
 
105
105
  [![test](https://github.com/khoj-ai/khoj/actions/workflows/test.yml/badge.svg)](https://github.com/khoj-ai/khoj/actions/workflows/test.yml)
106
- [![dockerize](https://github.com/khoj-ai/khoj/actions/workflows/dockerize.yml/badge.svg)](https://github.com/khoj-ai/khoj/pkgs/container/khoj)
106
+ [![docker](https://github.com/khoj-ai/khoj/actions/workflows/dockerize.yml/badge.svg)](https://github.com/khoj-ai/khoj/pkgs/container/khoj)
107
107
  [![pypi](https://github.com/khoj-ai/khoj/actions/workflows/pypi.yml/badge.svg)](https://pypi.org/project/khoj/)
108
- ![Discord](https://img.shields.io/discord/1112065956647284756?style=plastic&label=discord)
108
+ [![discord](https://img.shields.io/discord/1112065956647284756?style=plastic&label=discord)](https://discord.gg/BDgyabRM6e)
109
109
 
110
110
  </div>
111
111
 
112
112
  <div align="center">
113
- <b>The open-source, personal AI for your digital brain</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>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
122
- [🏮 App](https://khoj.dev)
122
+ [🌐 Web](https://khoj.dev)
123
+ <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
124
+ [🔥 App](https://app.khoj.dev)
123
125
  <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
124
126
  [💬 Discord](https://discord.gg/BDgyabRM6e)
125
127
  <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
126
- [📚 Blog](https://blog.khoj.dev)
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, open-source AI application for you to extend your capabilities.
135
- - Share your documents to extend your digital brain.
136
- - Access the internet, getting fresh information.
137
- - You can share pdf, markdown, org-mode, notion files and github repositories.
138
- - Fast, accurate semantic search on top of your docs.
139
- - Create images, talk out loud, play your messages.
140
- - Available Desktop, Emacs, Obsidian, Web and Whatsapp.
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
+ - Build agents with custom knowledge bases and tools.
142
+ - Create automations to get personal newsletters and smart notifications.
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
 
@@ -1,5 +1,5 @@
1
1
  khoj/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- khoj/configure.py,sha256=JBJ-a4GWP87UuU6b92GnG8mOgUx4Jx3Llh8ZD0_7rR4,17477
2
+ khoj/configure.py,sha256=Gh0F5xBswYBhmPxNJoUN7hRc6NmfzeVZNCwKHpP9DmA,17499
3
3
  khoj/main.py,sha256=9YMJEaKlVin5hxU0TcVH5X1CP6wX9HE8Z7qWSxNGPd0,8161
4
4
  khoj/manage.py,sha256=njo6uLxGaMamTPesHjFEOIBJbpIUrz39e1V59zKj544,664
5
5
  khoj/app/README.md,sha256=PSQjKCdpU2hgszLVF8yEhV7TWhbEEb-1aYLTRuuAsKI,2832
@@ -11,7 +11,7 @@ khoj/database/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  khoj/database/admin.py,sha256=ZKywmGF3q_YdPtoTVUCCpxZ_zYm3d3bhGRzSf9wi7FM,9218
12
12
  khoj/database/apps.py,sha256=pM4tkX5Odw4YW_hLLKK8Nd5kqGddf1en0oMCea44RZw,153
13
13
  khoj/database/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
14
- khoj/database/adapters/__init__.py,sha256=di1qp0SVoApNx85shJ_1BR30UUoUf4IN3NtDazKAdcs,59298
14
+ khoj/database/adapters/__init__.py,sha256=jyCTuz0ZqB0ZjI9MnckDg_REu2dgzyexNjxN5qt3e9Y,60746
15
15
  khoj/database/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  khoj/database/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  khoj/database/management/commands/change_generated_images_url.py,sha256=w52FwRlyOL4YRpp9O6jJUjSIuGLxVhaS2w1D7gtQgOE,2644
@@ -103,19 +103,16 @@ khoj/interface/compiled/chat.svg,sha256=l2JoYRRgk201adTTdvJ-buKUrc0WGfsudix5xEvt
103
103
  khoj/interface/compiled/close.svg,sha256=hQ2iFLkNzHk0_iyTrSbwnWAeXYlgA-c2Eof2Iqh76n4,417
104
104
  khoj/interface/compiled/copy-button-success.svg,sha256=byqWAYD3Pn9IOXRjOKudJ-TJbP2UESbQGvtLWazNGjY,829
105
105
  khoj/interface/compiled/copy-button.svg,sha256=05bKM2eRxksfBlAPT7yMaoNJEk85bZCxQg67EVrPeHo,669
106
- khoj/interface/compiled/index.html,sha256=s5rIkqwfOA22LzefgHQIOTr6De2X_u50OBJGAnUdY7c,11791
107
- khoj/interface/compiled/index.txt,sha256=XLA_xZduf5ERhKql6yqa9QzvpacUBGuRzMBuZNDN_kE,5479
106
+ khoj/interface/compiled/index.html,sha256=gOsdN1b5odhOic_tzic6RCSf75_he6VxDUIKnjMZYuc,11791
107
+ khoj/interface/compiled/index.txt,sha256=mlmmIGKQ2uKmSCvJY9gywW7IYM3CL9am-fqhkjwsVDM,5479
108
108
  khoj/interface/compiled/khoj.webmanifest,sha256=lsknYkvEdMbRTOUYKXPM_8krN2gamJmM4u3qj8u9lrU,1682
109
109
  khoj/interface/compiled/logo.svg,sha256=_QCKVYM4WT2Qhcf7aVFImjq_s5CwjynGXYAOgI7yf8w,8059
110
110
  khoj/interface/compiled/send.svg,sha256=VdavOWkVddcwcGcld6pdfmwfz7S91M-9O28cfeiKJkM,635
111
111
  khoj/interface/compiled/share.svg,sha256=91lwo75PvMDrgocuZQab6EQ62CxRbubh9Bhw7CWMKbg,1221
112
112
  khoj/interface/compiled/thumbs-down.svg,sha256=JGNl-DwoRmH2XFMPWwFFklmoYtKxaQbkLE3nuYKe8ZY,1019
113
113
  khoj/interface/compiled/thumbs-up.svg,sha256=yS1wxTRtiztkN-6nZciLoYQUB_KTYNPV8xFRwH2TQFw,1036
114
- khoj/interface/compiled/404/index.html,sha256=LhcpwCz2gSDu2tFmeQzCWTk7byXzt6qtVXNbnhTxWLg,12051
115
- khoj/interface/compiled/_next/static/GCWJ9zQV9mIpv2rrghzda/_buildManifest.js,sha256=6I9QUstNpJnhe3leR2Daw0pSXwzcbBscv6h2jmmPpms,224
116
- khoj/interface/compiled/_next/static/GCWJ9zQV9mIpv2rrghzda/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
114
+ khoj/interface/compiled/404/index.html,sha256=miwYcZlsYm_pGU08xKe_VrqRc6A9oeYodpukhol_o7E,12051
117
115
  khoj/interface/compiled/_next/static/chunks/121-7024f479c297aef0.js,sha256=CcRT2AArGYTo7Orl5w69nrnMqdI_EmyEP_YqIj3FU1c,20952
118
- khoj/interface/compiled/_next/static/chunks/1269-2e52d48e7d0e5c61.js,sha256=8iWbeeo_pCFEivsCeLB8dCtO2mMw8Z3LqWi2g5bE-OA,33828
119
116
  khoj/interface/compiled/_next/static/chunks/1603-67a89278e2c5dbe6.js,sha256=2ZLMR7DmmkCjtMyIwUy2FrHXh8fAmEEdlzhjr4Zll3k,71252
120
117
  khoj/interface/compiled/_next/static/chunks/2697-a38d01981ad3bdf8.js,sha256=bPajH6RHGusfrF6IlxIsLLwnIwMIPeZfsFzJ_oS-UCI,7511
121
118
  khoj/interface/compiled/_next/static/chunks/3062-71ed4b46ac2bb87c.js,sha256=847h3nNxc8t4GOW20GIAp8c5kquVPEQ7EZurPzGySo0,258667
@@ -128,45 +125,48 @@ khoj/interface/compiled/_next/static/chunks/477-ec86e93db10571c1.js,sha256=MSiRe
128
125
  khoj/interface/compiled/_next/static/chunks/51-e8f5bdb69b5ea421.js,sha256=djNz3mrp61T3Ixalz5DatfDHULsVY5eO2Vp6cQqgPmI,106523
129
126
  khoj/interface/compiled/_next/static/chunks/6297-d1c842ed3f714ab0.js,sha256=4nzZ2umR-q6wQ-8L4RSivWXKV_SE1dWoN9qA1I9lCRI,25675
130
127
  khoj/interface/compiled/_next/static/chunks/7023-a5bf5744d19b3bd3.js,sha256=TBJA7dTnI8nymtbljKuZzo2hbStXWR-P8Qkl57k2Tw8,123898
128
+ khoj/interface/compiled/_next/static/chunks/7762-79f2205740622b5c.js,sha256=DOPdP09qQbmaPZhirSEh6YqTkC7afirl0Pzu3v3A9Pg,35789
131
129
  khoj/interface/compiled/_next/static/chunks/9001-3b27af6d5f21df44.js,sha256=ran2mMGTO2kiAJebRGMyfyAu4Sdjw-WobS_m6g-qjz8,34223
132
- khoj/interface/compiled/_next/static/chunks/9178-899fe9a6b754ecfe.js,sha256=AkZ8mx8fdZKFZxR0wXVkQ_0hkcd8NYbNoSSF8sthUSY,17798
133
- khoj/interface/compiled/_next/static/chunks/9417-29502e39c3e7d60c.js,sha256=RCdrdKyvMQRMyVnZPALFw_EU0IMNvl3x0DN4_1XzJig,19473
134
- khoj/interface/compiled/_next/static/chunks/9479-7eed36fc954ef804.js,sha256=c4VtkdNKRyB4nl1tAEqPKQHOJUEzcsQ8shdC4y2YFI8,22261
130
+ khoj/interface/compiled/_next/static/chunks/9178-f208a3e6404714a9.js,sha256=AkZ8mx8fdZKFZxR0wXVkQ_0hkcd8NYbNoSSF8sthUSY,17798
131
+ khoj/interface/compiled/_next/static/chunks/9417-1d158bf46d3a0dc9.js,sha256=RCdrdKyvMQRMyVnZPALFw_EU0IMNvl3x0DN4_1XzJig,19473
132
+ khoj/interface/compiled/_next/static/chunks/9479-563e4d61f91d5a7c.js,sha256=c4VtkdNKRyB4nl1tAEqPKQHOJUEzcsQ8shdC4y2YFI8,22261
135
133
  khoj/interface/compiled/_next/static/chunks/d3ac728e-a9e3522eef9b6b28.js,sha256=wK1TsLdl56xtbQG6HMRDpylzTOYXQaAnnn2xobFnX40,267216
136
134
  khoj/interface/compiled/_next/static/chunks/fd9d1056-2b978342deb60015.js,sha256=2lquiZSfbI-gX4j4TW4JSMLL_D5ShqwydgWpFyXrTy8,172834
137
135
  khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js,sha256=sFFnSyDnFoOc61lP-EtTzTyf-zGA78ejDyMgPFMDw2Q,140001
138
136
  khoj/interface/compiled/_next/static/chunks/main-app-6d6ee3495efe03d4.js,sha256=i52E7sWOcSq1G8eYZL3mtTxbUbwRNxcAbSWQ6uWpMsY,475
139
137
  khoj/interface/compiled/_next/static/chunks/main-f84cd3c1873cd842.js,sha256=jKg2A4pPMmEAQmrA10rACH3daS8XXJeMnGOz1AsTkdI,111099
140
138
  khoj/interface/compiled/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js,sha256=6QPOwdWeAVe8x-SsiDrm-Ga6u2DkqgG5SFqglrlyIgA,91381
141
- khoj/interface/compiled/_next/static/chunks/webpack-ace3bded0dbc790e.js,sha256=ugTXYuOOO--WF0R2ktNULpdEBvcHQCiw7ue1MuxAd3w,3724
139
+ khoj/interface/compiled/_next/static/chunks/webpack-462819dcfa6a1e2b.js,sha256=vbT05-BLLjNcDVVfzQ6pvyNsZPWRDQElsedALV9iKR0,3721
142
140
  khoj/interface/compiled/_next/static/chunks/app/layout-f3e40d346da53112.js,sha256=nekGSUVbvB81OfqGgJa2UoDmbxPhNwFwtc4o11O_1jI,442
143
- khoj/interface/compiled/_next/static/chunks/app/page-10a5aad6e04f3cf8.js,sha256=eugKXd0nrJGg9NbfmNmUrkCxT-w5opawTRxpheHICQ4,28641
141
+ khoj/interface/compiled/_next/static/chunks/app/page-ab9beb5a26e396f7.js,sha256=5WWAXDHF6ru8mqlFH1ndBvFGXKrGCYaDxqUe07NXpYU,28640
144
142
  khoj/interface/compiled/_next/static/chunks/app/_not-found/page-07ff4ab42b07845e.js,sha256=3mCUnxfMxyK44eqk21TVBrC6u--WSbvx31fTmQuOvMQ,1755
145
143
  khoj/interface/compiled/_next/static/chunks/app/agents/layout-e71c8e913cccf792.js,sha256=VyIMrkvntFObMzXF-elNtngJ8mBdjg8XrOGfboJ2f_4,372
146
- khoj/interface/compiled/_next/static/chunks/app/agents/page-ad81f5e84372667b.js,sha256=q4DPb5unHYiEu6-0FLjf2IWkcQG1IE8VXtFvopAI79A,37117
144
+ khoj/interface/compiled/_next/static/chunks/app/agents/page-b406d166301c4c7d.js,sha256=ufct_clm3WUOTtgHGhuCEAlxSXPwIINbEhewBIcxaMk,38456
147
145
  khoj/interface/compiled/_next/static/chunks/app/automations/layout-27c28e923c9b1ff0.js,sha256=d2vJ_lVB0pfeFXNUPzHAe1ca5NzdNowHPh___SPqugM,5143
148
- khoj/interface/compiled/_next/static/chunks/app/automations/page-5480731341f34450.js,sha256=PgsFxtYymaDBMcJR31xPXLp4HX--uFJt6OAES95jM8k,35441
146
+ khoj/interface/compiled/_next/static/chunks/app/automations/page-2edc21f30819def4.js,sha256=pnJPDfAQE1chtGwy2R-LjqTDjO2NDhB5oqHY-PrpM9w,35445
149
147
  khoj/interface/compiled/_next/static/chunks/app/chat/layout-8102549127db3067.js,sha256=YIoA3fqOBt8nKWw5iQAwA_avg2t1Q5Afn65IA5PBOz4,374
150
- khoj/interface/compiled/_next/static/chunks/app/chat/page-702057ccbcf27881.js,sha256=Fge4qq3mFhPk0-tI5ts5JsJErlfjmlgHwbEugyVyAnk,5666
148
+ khoj/interface/compiled/_next/static/chunks/app/chat/page-4309c98e6dc497dd.js,sha256=NDDd6prYx3TWNmxqoM1xuuyEAyr-FzjYbvVMYzJTacA,5665
151
149
  khoj/interface/compiled/_next/static/chunks/app/factchecker/layout-7b30c541c05fb904.js,sha256=yub2AuBKHKSCqrHRFnkZv9JXLmLJLOB99iiaD3DtZQM,170
152
- khoj/interface/compiled/_next/static/chunks/app/factchecker/page-e7b34316ec6f44de.js,sha256=DPWy4Lh773zmhmrgEu8TPTI-r5DfZDeaoIOUGPKhi18,14032
150
+ khoj/interface/compiled/_next/static/chunks/app/factchecker/page-f2c83e3a87a28657.js,sha256=F3nwoxhW_X_0hZhOReXsYyRlsyNr3UL56RzLZ4f1G7c,14031
153
151
  khoj/interface/compiled/_next/static/chunks/app/search/layout-3720f1362310bebb.js,sha256=Smpa4MQaw5ItashtspsDKsOvRa6sOXH_lv4jIfWIbNI,170
154
- khoj/interface/compiled/_next/static/chunks/app/search/page-d56541c746fded7d.js,sha256=4uRb6Ns9ichFXH7kBmbFLa7g8KgSgUsKFEYXEQqx9CQ,6958
152
+ khoj/interface/compiled/_next/static/chunks/app/search/page-b807caebd7f278c7.js,sha256=PnkBAhTn1TBoFSPOj49YCIrXb4C_gMZHqQvVqJRRY5o,6957
155
153
  khoj/interface/compiled/_next/static/chunks/app/settings/layout-6f9314b0d7a26046.js,sha256=ikl3vCXnp81sa24uPSuRbgvgDtpHGWfhxEs4OAOYXIM,5347
156
- khoj/interface/compiled/_next/static/chunks/app/settings/page-e044a999468a7c5d.js,sha256=PgBPWWlZyx65XgxrttZlHREESMDt44ICdrrZiO5gH9M,31848
154
+ khoj/interface/compiled/_next/static/chunks/app/settings/page-2932356ad11c2f7b.js,sha256=olfGLDUYwy0dqj-xn0qmg6dOGeJCHL5NlTdWBvUTrNo,31847
157
155
  khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-39f03f9e32399f0f.js,sha256=ClS8wrj6HOsRL4VX8DMiqX_MlQDsi_3CA-AQt4m7vuA,373
158
- khoj/interface/compiled/_next/static/chunks/app/share/chat/page-fbbd66a4d4633438.js,sha256=NfaF2T_Do-HHf0aFKmWqMUIQIXBJDzFiyxInUV7ulgw,4820
156
+ khoj/interface/compiled/_next/static/chunks/app/share/chat/page-a736a0826570af2b.js,sha256=WO_Mu1am1K-CCeQVSk4ACLlTL9BM3hJigiO8ZKWueu0,4819
159
157
  khoj/interface/compiled/_next/static/chunks/pages/_app-f870474a17b7f2fd.js,sha256=eqdFPAN_XFyMUzZ9qwFk-_rhMWZrU7lgNVt1foVUANo,286
160
158
  khoj/interface/compiled/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js,sha256=vjERjtMAbVk-19LyPf1Jc-H6TMcrSznSz6brzNqbqf8,253
161
159
  khoj/interface/compiled/_next/static/css/1538cedb321e3a97.css,sha256=-qLZhPN-wA3kcrVODVTaG1sN0pmuzRCqNH12gs5_qYc,2569
162
160
  khoj/interface/compiled/_next/static/css/2272c73fc7a3b571.css,sha256=1fHKFd8zLOHosAHx-kxv4b9lVSqHag_E71WkV3dXx2Y,26940
163
- khoj/interface/compiled/_next/static/css/2de69f0be774c768.css,sha256=E00JnHdJVDT2Ai0dxE6VRD0odoBTLEyeQW48rlv5zH4,7849
164
161
  khoj/interface/compiled/_next/static/css/3e1f1fdd70775091.css,sha256=HT70_NVRMtV5IPc5k9JBGrVirjDZ3tyap7mEPXjQlGM,1634
162
+ khoj/interface/compiled/_next/static/css/4cae6c0e5c72fb2d.css,sha256=3CjTMmtMrm_MYt1ywtUh2MHEjSLSl356SQLl4hdBuYw,534
165
163
  khoj/interface/compiled/_next/static/css/553f9cdcc7a2bcd6.css,sha256=JpjOOwmqP9Hba-w_8Lx9jWW0ZD0kD3wR0HvdPGDyUPo,2134
166
- khoj/interface/compiled/_next/static/css/592ca99f5122e75a.css,sha256=BSqRkeb9vBh0phx5GkAlZirTFZintbyggGaUkuOBfaU,914
167
164
  khoj/interface/compiled/_next/static/css/5a400c87d295e68a.css,sha256=ojDUPJ9fJpEo9DzTAsEa-k1cg7Bef-nSTfpszMiqknQ,17711
165
+ khoj/interface/compiled/_next/static/css/b1094827d745306b.css,sha256=V0sHPHjBYSs52KIYPjg5FTCsMpDucVQwUM1f7ThsLQw,8229
168
166
  khoj/interface/compiled/_next/static/css/b9a6bf04305d98d7.css,sha256=NfTj8QxZYyhwgCdImGQBYwhxnvByYhtK9LhVooVBqHA,1882291
169
167
  khoj/interface/compiled/_next/static/css/c808691c459e3887.css,sha256=Xj1SLFCKntSIqZSDCMg2MnzZowIiKFtqPT3KxrT4i94,1857
168
+ khoj/interface/compiled/_next/static/jRL5xyceUdI0nvEyCkgqF/_buildManifest.js,sha256=6I9QUstNpJnhe3leR2Daw0pSXwzcbBscv6h2jmmPpms,224
169
+ khoj/interface/compiled/_next/static/jRL5xyceUdI0nvEyCkgqF/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
170
170
  khoj/interface/compiled/_next/static/media/0e790e04fd40ad16-s.p.woff2,sha256=41ewITd0G1ZAoB62BTHMW58a1q8Hl6vSbTQkkHP7EbI,39372
171
171
  khoj/interface/compiled/_next/static/media/4221e1667cd19c7d-s.woff2,sha256=_Y3g0keA8P6nZnFfm_VO5o2Sne1iST3v9xz4fBo3fwM,75532
172
172
  khoj/interface/compiled/_next/static/media/6c276159aa0eb14b-s.woff2,sha256=i9Ibzi_O7y5KpImujj2rEdOZf96lpNYxYzVvCryW5Uc,140408
@@ -239,8 +239,8 @@ khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp,sha256=M2AW_HLpBn
239
239
  khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp,sha256=BBeRPBZkxY3-aKkMnYv5TSkxmbeMbyUH4VRIPfrWg1E,137406
240
240
  khoj/interface/compiled/_next/static/media/globe.98e105ca.webp,sha256=g3ofb8-W9GM75zIhlvQhaS8I2py9TtrovOKR3_7Jf04,514
241
241
  khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp,sha256=I_N7Yke3IOoS-0CC6XD8o0IUWG8PdPbrHmf6lpgWlZY,1380
242
- khoj/interface/compiled/agents/index.html,sha256=dTRiXzZLSJD0IgkJumSbuamRTm97Aq2jUelw3q3YtCg,12830
243
- khoj/interface/compiled/agents/index.txt,sha256=IayM8ARVcY3xLFm3o2w1mIN3NgUGPJQqZq7K2H9FEqY,6126
242
+ khoj/interface/compiled/agents/index.html,sha256=87ianvVZHO937ctj9nxL6HceEF16WaGPsOpg3x6wspY,12522
243
+ khoj/interface/compiled/agents/index.txt,sha256=EuZDom6jAbm4EASD32x0JPcDxBKBJW6v-vdZLlEoZ7I,5993
244
244
  khoj/interface/compiled/assets/icons/khoj_lantern.ico,sha256=eggu-B_v3z1R53EjOFhIqqPnICBGdoaw1xnc0NrzHck,174144
245
245
  khoj/interface/compiled/assets/icons/khoj_lantern_128x128.png,sha256=aTxivDb3CYyThkVZWz8A19xl_dNut5DbkXhODWF3A9Q,5640
246
246
  khoj/interface/compiled/assets/icons/khoj_lantern_256x256.png,sha256=xPCMLHiaL7lYOdQLZrKwWE-Qjn5ZaysSZB0ScYv4UZU,12312
@@ -251,18 +251,18 @@ khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png,sha256=i
251
251
  khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png,sha256=Dd4fPwtFl6BWqnHjeb1mCK_ND0hhHsWtx8sNE7EiMuE,406179
252
252
  khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png,sha256=DEDaNRCkfEWUeh3kYZWIQDTVK1a6KKnYdwj5ZWisN_Q,82985
253
253
  khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png,sha256=Ma3blirRmq3X4oYSsDbbT7MDn29rymDrjwmUfA9BMuM,236285
254
- khoj/interface/compiled/automations/index.html,sha256=Hit_ZUh55hExLqxiTThPlWgSkUkqoREAmNumF2DMsII,30624
255
- khoj/interface/compiled/automations/index.txt,sha256=awojlSR9x66n-a3rh8cVfz68PKLRTKUgCEMOa_Fqxno,5494
256
- khoj/interface/compiled/chat/index.html,sha256=ON5vetb7Zvt3cx04TUVR1k9Hqv2Gr1JTTr_PfEr3Wkk,13724
257
- khoj/interface/compiled/chat/index.txt,sha256=lhHFR7g85_N0mpsR2-YTC4CeFPtmbsLCP588opENEuI,6486
258
- khoj/interface/compiled/factchecker/index.html,sha256=1T6itcq9JHfMOYJjKJl_ltEl6xmvYCvBaul4EcnRZBU,29973
259
- khoj/interface/compiled/factchecker/index.txt,sha256=RvgBKzUOKI91vD34nx1JMQ3bmh4dGV3g5iWxZDozLJk,5788
260
- khoj/interface/compiled/search/index.html,sha256=KOhhrBDnSjGzVYZqyEYlBymQus3RKYbOv9bDUdKheJ8,30161
261
- khoj/interface/compiled/search/index.txt,sha256=yzeU8Nd5UcK8oyVHCV7D4y2KRjaBIiBz8rkUVS5Vc_w,5256
262
- khoj/interface/compiled/settings/index.html,sha256=PBKcXXj7-AnrSnahOj_m1pnPsarGKngz0frcj1iMfUc,12831
263
- khoj/interface/compiled/settings/index.txt,sha256=eZQb2fJV_9GOmvOh43eoU1xMQpFYlNf6WP2iOdr_xJ0,6078
264
- khoj/interface/compiled/share/chat/index.html,sha256=ZDGaOaxowEkBFNiKzQeFoQyDZPdVAD9rwI060tl-nsI,15049
265
- khoj/interface/compiled/share/chat/index.txt,sha256=vz17-XLUhyfJWwUpj7fJ5rPUtHE_Y-S7HPALFX4BhU0,7297
254
+ khoj/interface/compiled/automations/index.html,sha256=j6sniU5wCDeUdHQ3sBDmC2TwjEB-eSWWmUpv2qdqNto,30932
255
+ khoj/interface/compiled/automations/index.txt,sha256=lBgQlV5N2kClZXuxK7D_esoku7mIlXbBFVp1oGAw4jU,5627
256
+ khoj/interface/compiled/chat/index.html,sha256=1XV_TxxYEq4PqTcnIUilNsyJ4WSDrlF0YRb0AjrHZYo,13724
257
+ khoj/interface/compiled/chat/index.txt,sha256=0hbb_EIIOMS_amZLyn1xr5tAUxfngFwfjLRmSuWF32w,6486
258
+ khoj/interface/compiled/factchecker/index.html,sha256=l7reIgTRRMcjtlsh6XsQn6ZzcXa2mALABqwzOmzPvYQ,29973
259
+ khoj/interface/compiled/factchecker/index.txt,sha256=MMRQicVLENLzAo026nRHEbfc8B0aodiyKzWaaQBOK5o,5788
260
+ khoj/interface/compiled/search/index.html,sha256=UGM5XtA7zt99RCxFRWJcX_i8dcs2VtiiWRTS9ai2qHo,30161
261
+ khoj/interface/compiled/search/index.txt,sha256=fJ2oX4t9EHYStAAWsMEmFWJnF_Ue10PlFfvk3yz4sDU,5256
262
+ khoj/interface/compiled/settings/index.html,sha256=dGk596yk_C1wjV7-eCIRuvbAE2JlwaTA48qI1mt3yt4,12831
263
+ khoj/interface/compiled/settings/index.txt,sha256=1g2OfQGXiNc6JQPIFbAvKS3jQJx59VR1Mc1n15tiwBM,6078
264
+ khoj/interface/compiled/share/chat/index.html,sha256=HIymOk8opqnNKr2gXZnThRrS7eu6PSh8zA3rWNJAnK8,15049
265
+ khoj/interface/compiled/share/chat/index.txt,sha256=v4rBFYyiFKAQt30uGgGggkGhQv5LlPAQq4rS2n5BvJY,7297
266
266
  khoj/interface/email/feedback.html,sha256=xksuPFamx4hGWyTTxZKRgX_eiYQQEuv-eK9Xmkt-nwU,1216
267
267
  khoj/interface/email/magic_link.html,sha256=EoGKQucfPj3xQrWXhSZAzPFOYCHF_ZX94TWCd1XHl1M,941
268
268
  khoj/interface/email/task.html,sha256=tY7a0gzVeQ2lSQNu7WyXR_s7VYeWTrxWEj1iHVuoVE4,2813
@@ -329,21 +329,21 @@ khoj/processor/conversation/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
329
329
  khoj/processor/conversation/openai/gpt.py,sha256=j4z1zvDli_pYEs7rJiJp8nu3AWzqpo_kvaDnLFC8Q-E,7806
330
330
  khoj/processor/conversation/openai/utils.py,sha256=tGRUauPfrRGPQ7W_9-lBxpRLld8EWzMuRiTY9EptFgY,5313
331
331
  khoj/processor/conversation/openai/whisper.py,sha256=zoEeK1LNCg_tzP4xzYi5vRPzNPGuDGzpkrkG7d1LUn4,447
332
- khoj/processor/image/generate.py,sha256=U1aEK8-09ZS4J-pBRRltgEOV-ZTw3Y4vRunxUCkQe3k,9003
332
+ khoj/processor/image/generate.py,sha256=sY0mYhFubeZqZ02KGBdAXGskTeCIsADwwf715tNVXvc,8961
333
333
  khoj/processor/speech/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
334
334
  khoj/processor/speech/text_to_speech.py,sha256=Q7sapi5Hv6woXOumtrGqR0t6izZrFBkWXFOGrHM6dJ4,1929
335
335
  khoj/processor/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
336
- khoj/processor/tools/online_search.py,sha256=xViS7wWRysTMun0p7DeM-313mYzkw4fsuTOPManfrv8,10353
336
+ khoj/processor/tools/online_search.py,sha256=1F7z_73Vk75MHvYYGyLT5G-VB7vNHLxmRrgVdJOIJ14,10314
337
337
  khoj/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
338
- khoj/routers/api.py,sha256=qTXRV40GTqvk7IIVNxPBAMi56C47IqiXdp013LWLkFg,27586
339
- khoj/routers/api_agents.py,sha256=ntG5CDbYDxTrxCh5T_dPhh-PQhG-mtmgg_Qa0cMXAW4,8808
340
- khoj/routers/api_chat.py,sha256=neW5S7H2qKe1CI1LvRHYxwpNGCiCSgX5mKFTM-zJ-Qg,60571
338
+ khoj/routers/api.py,sha256=rf31Pfs6mEA_SHXWNzjUHoFrIZJwiwN9hebRQ3Evq8Y,27590
339
+ khoj/routers/api_agents.py,sha256=1rmFp6rnvf3JxL0VS7X5awEvartYieBHjEWNJNnObvQ,8877
340
+ khoj/routers/api_chat.py,sha256=-wEF0fR0i5bYJLJCAHuuuh37xlRo7rZsaL9jACebTBs,60500
341
341
  khoj/routers/api_content.py,sha256=lWunOwVWYvnl1ue_D81g9ZSwBc0UxHmBIrdJoVPxN_A,17900
342
- khoj/routers/api_model.py,sha256=5m7JWwgd9jILiLivRu7NEyY2E-tUkqoEkGg6j6uM1g0,4646
342
+ khoj/routers/api_model.py,sha256=CR6aMVwgbh6dZEq1NZEeUBRVMMZubBQHTWAu6uzckf8,4650
343
343
  khoj/routers/api_phone.py,sha256=p9yfc4WeMHDC0hg3aQk60a2VBy8rZPdEnz9wdJ7DzkU,2208
344
344
  khoj/routers/auth.py,sha256=d3wzcysoYBQkPeqc1-gX8EnE7I_roVirMp5uzxOgobs,6560
345
345
  khoj/routers/email.py,sha256=SGYNPQvfcvYeHf70F0YqpY0FLMRElF2ZekROXdwGI18,3821
346
- khoj/routers/helpers.py,sha256=yWjuxFIpawWVVlf0veNmNyiEqA77CjnaK9fzq9peNds,68098
346
+ khoj/routers/helpers.py,sha256=2MH0MllE1ZtqpVN9Y-yQeKuZtCs7gJNg124U30DYAJQ,67927
347
347
  khoj/routers/notion.py,sha256=Lp67xP9rVgpAF9BQoGTjZFcVdF1HYtvPP0kjq6uurKU,2802
348
348
  khoj/routers/storage.py,sha256=tJrwhFRVWv0MHv7V7huMc1Diwm-putZSwnZXJ3tqT_c,2338
349
349
  khoj/routers/subscription.py,sha256=JsKYS00Z2QXlXTobP1vU8T5cN5SE2PYp50CGDAQXofU,4699
@@ -362,14 +362,14 @@ khoj/utils/config.py,sha256=aiOkH0je8A30DAGYTHMRePrgJonFv_i07_7CdhhhcdA,1805
362
362
  khoj/utils/constants.py,sha256=UwE7U9bNsfeqTb0K2lcdXdAscM4-7uuVoR3KbZS03Pg,1216
363
363
  khoj/utils/fs_syncer.py,sha256=bQgcbYYC3x11RyCqI_kUzzqGpcKTodGgdT-3OTQsXqw,9977
364
364
  khoj/utils/helpers.py,sha256=4DR3kWn5wrgrZRPAWNg1GB4JJdAvuqwJcIyzPwphes0,15976
365
- khoj/utils/initialization.py,sha256=wlGtgThdRx77trd8H83Cp0cxAtkel0789eyFoF7iToA,10315
365
+ khoj/utils/initialization.py,sha256=TjA2ZImYKI-J1tEBE_0TaOLnVQidVV5GDEFBOPq8aik,10048
366
366
  khoj/utils/jsonl.py,sha256=0Ac_COqr8sLCXntzZtquxuCEVRM2c3yKeDRGhgOBRpQ,1192
367
367
  khoj/utils/models.py,sha256=Q5tcC9-z25sCiub048fLnvZ6_IIO1bcPNxt5payekk0,2009
368
368
  khoj/utils/rawconfig.py,sha256=kURDuk7x0MDtniGLU4x1IsvU4UIBS-V9dSM4GD8X-LY,4274
369
369
  khoj/utils/state.py,sha256=x4GTewP1YhOA6c_32N4wOjnV-3AA3xG_qbY1-wC2Uxc,1559
370
370
  khoj/utils/yaml.py,sha256=H0mfw0ZvBFUvFmCQn8pWkfxdmIebsrSykza7D8Wv6wQ,1430
371
- khoj-1.25.1.dev2.dist-info/METADATA,sha256=zF7jM2h5IzxTsNA7j0DBdVi81Y4YI5CrL5nyjRrv55U,6495
372
- khoj-1.25.1.dev2.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
373
- khoj-1.25.1.dev2.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
374
- khoj-1.25.1.dev2.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
375
- khoj-1.25.1.dev2.dist-info/RECORD,,
371
+ khoj-1.25.1.dev9.dist-info/METADATA,sha256=Zvw0UpF3HBGTwa6xIrGeD3fNpZi9dz9FYSG3dtRtjuw,6951
372
+ khoj-1.25.1.dev9.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
373
+ khoj-1.25.1.dev9.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
374
+ khoj-1.25.1.dev9.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
375
+ khoj-1.25.1.dev9.dist-info/RECORD,,