khoj 1.27.2.dev13__py3-none-any.whl → 1.27.2.dev29__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 (43) hide show
  1. khoj/database/adapters/__init__.py +5 -0
  2. khoj/interface/compiled/404/index.html +1 -1
  3. khoj/interface/compiled/_next/static/chunks/1603-5138bb7c8035d9a6.js +1 -0
  4. khoj/interface/compiled/_next/static/chunks/{webpack-70a1cd2ad6a1952c.js → webpack-2b720658ccc746f2.js} +1 -1
  5. khoj/interface/compiled/agents/index.html +1 -1
  6. khoj/interface/compiled/agents/index.txt +2 -2
  7. khoj/interface/compiled/automations/index.html +1 -1
  8. khoj/interface/compiled/automations/index.txt +2 -2
  9. khoj/interface/compiled/chat/index.html +1 -1
  10. khoj/interface/compiled/chat/index.txt +2 -2
  11. khoj/interface/compiled/factchecker/index.html +1 -1
  12. khoj/interface/compiled/factchecker/index.txt +2 -2
  13. khoj/interface/compiled/index.html +1 -1
  14. khoj/interface/compiled/index.txt +2 -2
  15. khoj/interface/compiled/search/index.html +1 -1
  16. khoj/interface/compiled/search/index.txt +2 -2
  17. khoj/interface/compiled/settings/index.html +1 -1
  18. khoj/interface/compiled/settings/index.txt +2 -2
  19. khoj/interface/compiled/share/chat/index.html +1 -1
  20. khoj/interface/compiled/share/chat/index.txt +2 -2
  21. khoj/processor/conversation/anthropic/anthropic_chat.py +6 -1
  22. khoj/processor/conversation/anthropic/utils.py +25 -5
  23. khoj/processor/conversation/google/gemini_chat.py +8 -2
  24. khoj/processor/conversation/google/utils.py +34 -10
  25. khoj/processor/conversation/offline/chat_model.py +31 -7
  26. khoj/processor/conversation/openai/gpt.py +14 -2
  27. khoj/processor/conversation/openai/utils.py +43 -9
  28. khoj/processor/conversation/prompts.py +0 -16
  29. khoj/processor/conversation/utils.py +168 -1
  30. khoj/processor/image/generate.py +2 -0
  31. khoj/processor/tools/online_search.py +14 -5
  32. khoj/routers/api.py +5 -0
  33. khoj/routers/api_chat.py +23 -2
  34. khoj/routers/helpers.py +65 -13
  35. khoj/utils/helpers.py +1 -1
  36. {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/METADATA +2 -1
  37. {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/RECORD +42 -42
  38. khoj/interface/compiled/_next/static/chunks/1603-b9d95833e0e025e8.js +0 -1
  39. /khoj/interface/compiled/_next/static/{rYy0jmrIYv76V-iyorQim → atzIseFarmC7TIwq2BgHC}/_buildManifest.js +0 -0
  40. /khoj/interface/compiled/_next/static/{rYy0jmrIYv76V-iyorQim → atzIseFarmC7TIwq2BgHC}/_ssgManifest.js +0 -0
  41. {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/WHEEL +0 -0
  42. {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/entry_points.txt +0 -0
  43. {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/licenses/LICENSE +0 -0
khoj/routers/helpers.py CHANGED
@@ -301,6 +301,7 @@ async def aget_relevant_information_sources(
301
301
  user: KhojUser,
302
302
  query_images: List[str] = None,
303
303
  agent: Agent = None,
304
+ tracer: dict = {},
304
305
  ):
305
306
  """
306
307
  Given a query, determine which of the available tools the agent should use in order to answer appropriately.
@@ -337,6 +338,7 @@ async def aget_relevant_information_sources(
337
338
  relevant_tools_prompt,
338
339
  response_type="json_object",
339
340
  user=user,
341
+ tracer=tracer,
340
342
  )
341
343
 
342
344
  try:
@@ -378,6 +380,7 @@ async def aget_relevant_output_modes(
378
380
  user: KhojUser = None,
379
381
  query_images: List[str] = None,
380
382
  agent: Agent = None,
383
+ tracer: dict = {},
381
384
  ):
382
385
  """
383
386
  Given a query, determine which of the available tools the agent should use in order to answer appropriately.
@@ -413,7 +416,9 @@ async def aget_relevant_output_modes(
413
416
  )
414
417
 
415
418
  with timer("Chat actor: Infer output mode for chat response", logger):
416
- response = await send_message_to_model_wrapper(relevant_mode_prompt, response_type="json_object", user=user)
419
+ response = await send_message_to_model_wrapper(
420
+ relevant_mode_prompt, response_type="json_object", user=user, tracer=tracer
421
+ )
417
422
 
418
423
  try:
419
424
  response = response.strip()
@@ -444,6 +449,7 @@ async def infer_webpage_urls(
444
449
  user: KhojUser,
445
450
  query_images: List[str] = None,
446
451
  agent: Agent = None,
452
+ tracer: dict = {},
447
453
  ) -> List[str]:
448
454
  """
449
455
  Infer webpage links from the given query
@@ -468,7 +474,11 @@ async def infer_webpage_urls(
468
474
 
469
475
  with timer("Chat actor: Infer webpage urls to read", logger):
470
476
  response = await send_message_to_model_wrapper(
471
- online_queries_prompt, query_images=query_images, response_type="json_object", user=user
477
+ online_queries_prompt,
478
+ query_images=query_images,
479
+ response_type="json_object",
480
+ user=user,
481
+ tracer=tracer,
472
482
  )
473
483
 
474
484
  # Validate that the response is a non-empty, JSON-serializable list of URLs
@@ -490,6 +500,7 @@ async def generate_online_subqueries(
490
500
  user: KhojUser,
491
501
  query_images: List[str] = None,
492
502
  agent: Agent = None,
503
+ tracer: dict = {},
493
504
  ) -> List[str]:
494
505
  """
495
506
  Generate subqueries from the given query
@@ -514,7 +525,11 @@ async def generate_online_subqueries(
514
525
 
515
526
  with timer("Chat actor: Generate online search subqueries", logger):
516
527
  response = await send_message_to_model_wrapper(
517
- online_queries_prompt, query_images=query_images, response_type="json_object", user=user
528
+ online_queries_prompt,
529
+ query_images=query_images,
530
+ response_type="json_object",
531
+ user=user,
532
+ tracer=tracer,
518
533
  )
519
534
 
520
535
  # Validate that the response is a non-empty, JSON-serializable list
@@ -533,7 +548,7 @@ async def generate_online_subqueries(
533
548
 
534
549
 
535
550
  async def schedule_query(
536
- q: str, conversation_history: dict, user: KhojUser, query_images: List[str] = None
551
+ q: str, conversation_history: dict, user: KhojUser, query_images: List[str] = None, tracer: dict = {}
537
552
  ) -> Tuple[str, ...]:
538
553
  """
539
554
  Schedule the date, time to run the query. Assume the server timezone is UTC.
@@ -546,7 +561,7 @@ async def schedule_query(
546
561
  )
547
562
 
548
563
  raw_response = await send_message_to_model_wrapper(
549
- crontime_prompt, query_images=query_images, response_type="json_object", user=user
564
+ crontime_prompt, query_images=query_images, response_type="json_object", user=user, tracer=tracer
550
565
  )
551
566
 
552
567
  # Validate that the response is a non-empty, JSON-serializable list
@@ -561,7 +576,7 @@ async def schedule_query(
561
576
 
562
577
 
563
578
  async def extract_relevant_info(
564
- qs: set[str], corpus: str, user: KhojUser = None, agent: Agent = None
579
+ qs: set[str], corpus: str, user: KhojUser = None, agent: Agent = None, tracer: dict = {}
565
580
  ) -> Union[str, None]:
566
581
  """
567
582
  Extract relevant information for a given query from the target corpus
@@ -584,6 +599,7 @@ async def extract_relevant_info(
584
599
  extract_relevant_information,
585
600
  prompts.system_prompt_extract_relevant_information,
586
601
  user=user,
602
+ tracer=tracer,
587
603
  )
588
604
  return response.strip()
589
605
 
@@ -595,6 +611,7 @@ async def extract_relevant_summary(
595
611
  query_images: List[str] = None,
596
612
  user: KhojUser = None,
597
613
  agent: Agent = None,
614
+ tracer: dict = {},
598
615
  ) -> Union[str, None]:
599
616
  """
600
617
  Extract relevant information for a given query from the target corpus
@@ -622,6 +639,7 @@ async def extract_relevant_summary(
622
639
  prompts.system_prompt_extract_relevant_summary,
623
640
  user=user,
624
641
  query_images=query_images,
642
+ tracer=tracer,
625
643
  )
626
644
  return response.strip()
627
645
 
@@ -636,6 +654,7 @@ async def generate_excalidraw_diagram(
636
654
  user: KhojUser = None,
637
655
  agent: Agent = None,
638
656
  send_status_func: Optional[Callable] = None,
657
+ tracer: dict = {},
639
658
  ):
640
659
  if send_status_func:
641
660
  async for event in send_status_func("**Enhancing the Diagramming Prompt**"):
@@ -650,6 +669,7 @@ async def generate_excalidraw_diagram(
650
669
  query_images=query_images,
651
670
  user=user,
652
671
  agent=agent,
672
+ tracer=tracer,
653
673
  )
654
674
 
655
675
  if send_status_func:
@@ -660,6 +680,7 @@ async def generate_excalidraw_diagram(
660
680
  q=better_diagram_description_prompt,
661
681
  user=user,
662
682
  agent=agent,
683
+ tracer=tracer,
663
684
  )
664
685
 
665
686
  yield better_diagram_description_prompt, excalidraw_diagram_description
@@ -674,6 +695,7 @@ async def generate_better_diagram_description(
674
695
  query_images: List[str] = None,
675
696
  user: KhojUser = None,
676
697
  agent: Agent = None,
698
+ tracer: dict = {},
677
699
  ) -> str:
678
700
  """
679
701
  Generate a diagram description from the given query and context
@@ -711,7 +733,7 @@ async def generate_better_diagram_description(
711
733
 
712
734
  with timer("Chat actor: Generate better diagram description", logger):
713
735
  response = await send_message_to_model_wrapper(
714
- improve_diagram_description_prompt, query_images=query_images, user=user
736
+ improve_diagram_description_prompt, query_images=query_images, user=user, tracer=tracer
715
737
  )
716
738
  response = response.strip()
717
739
  if response.startswith(('"', "'")) and response.endswith(('"', "'")):
@@ -724,6 +746,7 @@ async def generate_excalidraw_diagram_from_description(
724
746
  q: str,
725
747
  user: KhojUser = None,
726
748
  agent: Agent = None,
749
+ tracer: dict = {},
727
750
  ) -> str:
728
751
  personality_context = (
729
752
  prompts.personality_context.format(personality=agent.personality) if agent and agent.personality else ""
@@ -735,7 +758,9 @@ async def generate_excalidraw_diagram_from_description(
735
758
  )
736
759
 
737
760
  with timer("Chat actor: Generate excalidraw diagram", logger):
738
- raw_response = await send_message_to_model_wrapper(message=excalidraw_diagram_generation, user=user)
761
+ raw_response = await send_message_to_model_wrapper(
762
+ message=excalidraw_diagram_generation, user=user, tracer=tracer
763
+ )
739
764
  raw_response = raw_response.strip()
740
765
  raw_response = remove_json_codeblock(raw_response)
741
766
  response: Dict[str, str] = json.loads(raw_response)
@@ -756,6 +781,7 @@ async def generate_better_image_prompt(
756
781
  query_images: Optional[List[str]] = None,
757
782
  user: KhojUser = None,
758
783
  agent: Agent = None,
784
+ tracer: dict = {},
759
785
  ) -> str:
760
786
  """
761
787
  Generate a better image prompt from the given query
@@ -802,7 +828,9 @@ async def generate_better_image_prompt(
802
828
  )
803
829
 
804
830
  with timer("Chat actor: Generate contextual image prompt", logger):
805
- response = await send_message_to_model_wrapper(image_prompt, query_images=query_images, user=user)
831
+ response = await send_message_to_model_wrapper(
832
+ image_prompt, query_images=query_images, user=user, tracer=tracer
833
+ )
806
834
  response = response.strip()
807
835
  if response.startswith(('"', "'")) and response.endswith(('"', "'")):
808
836
  response = response[1:-1]
@@ -816,6 +844,7 @@ async def send_message_to_model_wrapper(
816
844
  response_type: str = "text",
817
845
  user: KhojUser = None,
818
846
  query_images: List[str] = None,
847
+ tracer: dict = {},
819
848
  ):
820
849
  conversation_config: ChatModelOptions = await ConversationAdapters.aget_default_conversation_config(user)
821
850
  vision_available = conversation_config.vision_enabled
@@ -862,6 +891,7 @@ async def send_message_to_model_wrapper(
862
891
  max_prompt_size=max_tokens,
863
892
  streaming=False,
864
893
  response_type=response_type,
894
+ tracer=tracer,
865
895
  )
866
896
 
867
897
  elif model_type == ChatModelOptions.ModelType.OPENAI:
@@ -885,6 +915,7 @@ async def send_message_to_model_wrapper(
885
915
  model=chat_model,
886
916
  response_type=response_type,
887
917
  api_base_url=api_base_url,
918
+ tracer=tracer,
888
919
  )
889
920
  elif model_type == ChatModelOptions.ModelType.ANTHROPIC:
890
921
  api_key = conversation_config.openai_config.api_key
@@ -903,6 +934,7 @@ async def send_message_to_model_wrapper(
903
934
  messages=truncated_messages,
904
935
  api_key=api_key,
905
936
  model=chat_model,
937
+ tracer=tracer,
906
938
  )
907
939
  elif model_type == ChatModelOptions.ModelType.GOOGLE:
908
940
  api_key = conversation_config.openai_config.api_key
@@ -918,7 +950,7 @@ async def send_message_to_model_wrapper(
918
950
  )
919
951
 
920
952
  return gemini_send_message_to_model(
921
- messages=truncated_messages, api_key=api_key, model=chat_model, response_type=response_type
953
+ messages=truncated_messages, api_key=api_key, model=chat_model, response_type=response_type, tracer=tracer
922
954
  )
923
955
  else:
924
956
  raise HTTPException(status_code=500, detail="Invalid conversation config")
@@ -929,6 +961,7 @@ def send_message_to_model_wrapper_sync(
929
961
  system_message: str = "",
930
962
  response_type: str = "text",
931
963
  user: KhojUser = None,
964
+ tracer: dict = {},
932
965
  ):
933
966
  conversation_config: ChatModelOptions = ConversationAdapters.get_default_conversation_config(user)
934
967
 
@@ -961,6 +994,7 @@ def send_message_to_model_wrapper_sync(
961
994
  max_prompt_size=max_tokens,
962
995
  streaming=False,
963
996
  response_type=response_type,
997
+ tracer=tracer,
964
998
  )
965
999
 
966
1000
  elif conversation_config.model_type == ChatModelOptions.ModelType.OPENAI:
@@ -975,7 +1009,11 @@ def send_message_to_model_wrapper_sync(
975
1009
  )
976
1010
 
977
1011
  openai_response = send_message_to_model(
978
- messages=truncated_messages, api_key=api_key, model=chat_model, response_type=response_type
1012
+ messages=truncated_messages,
1013
+ api_key=api_key,
1014
+ model=chat_model,
1015
+ response_type=response_type,
1016
+ tracer=tracer,
979
1017
  )
980
1018
 
981
1019
  return openai_response
@@ -995,6 +1033,7 @@ def send_message_to_model_wrapper_sync(
995
1033
  messages=truncated_messages,
996
1034
  api_key=api_key,
997
1035
  model=chat_model,
1036
+ tracer=tracer,
998
1037
  )
999
1038
 
1000
1039
  elif conversation_config.model_type == ChatModelOptions.ModelType.GOOGLE:
@@ -1013,6 +1052,7 @@ def send_message_to_model_wrapper_sync(
1013
1052
  api_key=api_key,
1014
1053
  model=chat_model,
1015
1054
  response_type=response_type,
1055
+ tracer=tracer,
1016
1056
  )
1017
1057
  else:
1018
1058
  raise HTTPException(status_code=500, detail="Invalid conversation config")
@@ -1032,6 +1072,7 @@ def generate_chat_response(
1032
1072
  location_data: LocationData = None,
1033
1073
  user_name: Optional[str] = None,
1034
1074
  query_images: Optional[List[str]] = None,
1075
+ tracer: dict = {},
1035
1076
  ) -> Tuple[Union[ThreadedGenerator, Iterator[str]], Dict[str, str]]:
1036
1077
  # Initialize Variables
1037
1078
  chat_response = None
@@ -1051,6 +1092,7 @@ def generate_chat_response(
1051
1092
  client_application=client_application,
1052
1093
  conversation_id=conversation_id,
1053
1094
  query_images=query_images,
1095
+ tracer=tracer,
1054
1096
  )
1055
1097
 
1056
1098
  conversation_config = ConversationAdapters.get_valid_conversation_config(user, conversation)
@@ -1077,6 +1119,7 @@ def generate_chat_response(
1077
1119
  location_data=location_data,
1078
1120
  user_name=user_name,
1079
1121
  agent=agent,
1122
+ tracer=tracer,
1080
1123
  )
1081
1124
 
1082
1125
  elif conversation_config.model_type == ChatModelOptions.ModelType.OPENAI:
@@ -1100,6 +1143,7 @@ def generate_chat_response(
1100
1143
  user_name=user_name,
1101
1144
  agent=agent,
1102
1145
  vision_available=vision_available,
1146
+ tracer=tracer,
1103
1147
  )
1104
1148
 
1105
1149
  elif conversation_config.model_type == ChatModelOptions.ModelType.ANTHROPIC:
@@ -1120,6 +1164,7 @@ def generate_chat_response(
1120
1164
  user_name=user_name,
1121
1165
  agent=agent,
1122
1166
  vision_available=vision_available,
1167
+ tracer=tracer,
1123
1168
  )
1124
1169
  elif conversation_config.model_type == ChatModelOptions.ModelType.GOOGLE:
1125
1170
  api_key = conversation_config.openai_config.api_key
@@ -1139,6 +1184,7 @@ def generate_chat_response(
1139
1184
  user_name=user_name,
1140
1185
  agent=agent,
1141
1186
  vision_available=vision_available,
1187
+ tracer=tracer,
1142
1188
  )
1143
1189
 
1144
1190
  metadata.update({"chat_model": conversation_config.chat_model})
@@ -1495,9 +1541,15 @@ def scheduled_chat(
1495
1541
 
1496
1542
 
1497
1543
  async def create_automation(
1498
- q: str, timezone: str, user: KhojUser, calling_url: URL, meta_log: dict = {}, conversation_id: str = None
1544
+ q: str,
1545
+ timezone: str,
1546
+ user: KhojUser,
1547
+ calling_url: URL,
1548
+ meta_log: dict = {},
1549
+ conversation_id: str = None,
1550
+ tracer: dict = {},
1499
1551
  ):
1500
- crontime, query_to_run, subject = await schedule_query(q, meta_log, user)
1552
+ crontime, query_to_run, subject = await schedule_query(q, meta_log, user, tracer=tracer)
1501
1553
  job = await schedule_automation(query_to_run, subject, crontime, timezone, q, user, calling_url, conversation_id)
1502
1554
  return job, crontime, query_to_run, subject
1503
1555
 
khoj/utils/helpers.py CHANGED
@@ -355,7 +355,7 @@ mode_descriptions_for_llm = {
355
355
  ConversationCommand.Image: "Use this if you are confident the user is requesting you to create a new picture based on their description.",
356
356
  ConversationCommand.Automation: "Use this if you are confident the user is requesting a response at a scheduled date, time and frequency",
357
357
  ConversationCommand.Text: "Use this if a normal text response would be sufficient for accurately responding to the query.",
358
- ConversationCommand.Diagram: "Use this if the user is requesting a visual representation that requires primitives like lines, rectangles, and text.",
358
+ ConversationCommand.Diagram: "Use this if the user is requesting a diagram or visual representation that requires primitives like lines, rectangles, and text.",
359
359
  }
360
360
 
361
361
  mode_descriptions_for_agent = {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: khoj
3
- Version: 1.27.2.dev13
3
+ Version: 1.27.2.dev29
4
4
  Summary: Your Second Brain
5
5
  Project-URL: Homepage, https://khoj.dev
6
6
  Project-URL: Documentation, https://docs.khoj.dev
@@ -78,6 +78,7 @@ Requires-Dist: black>=23.1.0; extra == 'dev'
78
78
  Requires-Dist: boto3>=1.34.57; extra == 'dev'
79
79
  Requires-Dist: factory-boy>=3.2.1; extra == 'dev'
80
80
  Requires-Dist: freezegun>=1.2.0; extra == 'dev'
81
+ Requires-Dist: gitpython~=3.1.43; extra == 'dev'
81
82
  Requires-Dist: google-auth==2.23.3; extra == 'dev'
82
83
  Requires-Dist: gunicorn==22.0.0; extra == 'dev'
83
84
  Requires-Dist: mypy>=1.0.1; extra == 'dev'
@@ -11,7 +11,7 @@ khoj/database/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  khoj/database/admin.py,sha256=4QoMRRyfvc834Qg4Z8KMZ3MW3cbsTqtElpkwnP3oyz4,9618
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=L73cOYaedwkMNg-Lv8aYTzOVjKbIGPCiRVGpYx32krc,65131
14
+ khoj/database/adapters/__init__.py,sha256=5fmHFvrnSf635UiBLx-gMvLseStd8P8pVf4Wbz6TqlQ,65410
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_default_model.py,sha256=Jsxxc9xSZPHECaftZRvVyaPVGxIxTC0wxYXgK3wEtew,8731
@@ -109,19 +109,21 @@ khoj/interface/compiled/chat.svg,sha256=l2JoYRRgk201adTTdvJ-buKUrc0WGfsudix5xEvt
109
109
  khoj/interface/compiled/close.svg,sha256=hQ2iFLkNzHk0_iyTrSbwnWAeXYlgA-c2Eof2Iqh76n4,417
110
110
  khoj/interface/compiled/copy-button-success.svg,sha256=byqWAYD3Pn9IOXRjOKudJ-TJbP2UESbQGvtLWazNGjY,829
111
111
  khoj/interface/compiled/copy-button.svg,sha256=05bKM2eRxksfBlAPT7yMaoNJEk85bZCxQg67EVrPeHo,669
112
- khoj/interface/compiled/index.html,sha256=jgIvOrxggnlVHrgmKDhfEoCsXuyL73mjncEIIw4w-ok,12184
113
- khoj/interface/compiled/index.txt,sha256=bMFdj4TBme0ExSiJWS6oyqRsboxPvwqFL-2Mxjj75X4,5625
112
+ khoj/interface/compiled/index.html,sha256=zeMBzT52CCWu1eJ7QOIcsoVtwRsHEDM-fEL5OY8qQN8,12184
113
+ khoj/interface/compiled/index.txt,sha256=vYAKtGX03fG9BRQMuJkUajQ8RyzFhAsAkU09m3RuGEg,5625
114
114
  khoj/interface/compiled/khoj.webmanifest,sha256=lsknYkvEdMbRTOUYKXPM_8krN2gamJmM4u3qj8u9lrU,1682
115
115
  khoj/interface/compiled/logo.svg,sha256=_QCKVYM4WT2Qhcf7aVFImjq_s5CwjynGXYAOgI7yf8w,8059
116
116
  khoj/interface/compiled/send.svg,sha256=VdavOWkVddcwcGcld6pdfmwfz7S91M-9O28cfeiKJkM,635
117
117
  khoj/interface/compiled/share.svg,sha256=91lwo75PvMDrgocuZQab6EQ62CxRbubh9Bhw7CWMKbg,1221
118
118
  khoj/interface/compiled/thumbs-down.svg,sha256=JGNl-DwoRmH2XFMPWwFFklmoYtKxaQbkLE3nuYKe8ZY,1019
119
119
  khoj/interface/compiled/thumbs-up.svg,sha256=yS1wxTRtiztkN-6nZciLoYQUB_KTYNPV8xFRwH2TQFw,1036
120
- khoj/interface/compiled/404/index.html,sha256=xzxLOQUDfcQ7kC_ONBl0ZB40Q5vwMhoS-e7Aj6PF_NM,12051
120
+ khoj/interface/compiled/404/index.html,sha256=218RBU1PinqzVadcgfGWBJ4LAHnkG3XuqX9UqhDsrFU,12051
121
+ khoj/interface/compiled/_next/static/atzIseFarmC7TIwq2BgHC/_buildManifest.js,sha256=6I9QUstNpJnhe3leR2Daw0pSXwzcbBscv6h2jmmPpms,224
122
+ khoj/interface/compiled/_next/static/atzIseFarmC7TIwq2BgHC/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
121
123
  khoj/interface/compiled/_next/static/chunks/1210.132a7e1910006bbb.js,sha256=2dJueIfOg5qlQdanOM9HrgwcfrUXCD57bfd8Iv7iJcU,2104
122
124
  khoj/interface/compiled/_next/static/chunks/1279-f37ee4a388ebf544.js,sha256=U_1WaocOdgJ4HZB8tRx_izzYGD1EZlCohC1uLCffCWc,45582
123
125
  khoj/interface/compiled/_next/static/chunks/1459.690bf20e7d7b7090.js,sha256=z-ruZPxF_Z3ef_WOThd9Ox36AMhxaW3znizVivNnA34,34239
124
- khoj/interface/compiled/_next/static/chunks/1603-b9d95833e0e025e8.js,sha256=bewoFif2zocxT9G-vxZvuyAFIN201YpJ8jBpSjREIOo,71609
126
+ khoj/interface/compiled/_next/static/chunks/1603-5138bb7c8035d9a6.js,sha256=6Ft5oo9M3VACg5p6bmqmALqRsh0kfhqvH3_oWa6t3Ps,72053
125
127
  khoj/interface/compiled/_next/static/chunks/1970-60c96aed937a4928.js,sha256=6cdvTgAJqyyihAHrhAN0Ht8yA-Y6ERdj99lLIveswZg,29835
126
128
  khoj/interface/compiled/_next/static/chunks/2697-61fcba89fd87eab4.js,sha256=zPnrqFOi2Hvli7WScWqgktXmBOy1gpC-g6UZwGY2hDg,7652
127
129
  khoj/interface/compiled/_next/static/chunks/3062-71ed4b46ac2bb87c.js,sha256=847h3nNxc8t4GOW20GIAp8c5kquVPEQ7EZurPzGySo0,258667
@@ -147,7 +149,7 @@ khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js,sha256
147
149
  khoj/interface/compiled/_next/static/chunks/main-app-6d6ee3495efe03d4.js,sha256=i52E7sWOcSq1G8eYZL3mtTxbUbwRNxcAbSWQ6uWpMsY,475
148
150
  khoj/interface/compiled/_next/static/chunks/main-f84cd3c1873cd842.js,sha256=jKg2A4pPMmEAQmrA10rACH3daS8XXJeMnGOz1AsTkdI,111099
149
151
  khoj/interface/compiled/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js,sha256=6QPOwdWeAVe8x-SsiDrm-Ga6u2DkqgG5SFqglrlyIgA,91381
150
- khoj/interface/compiled/_next/static/chunks/webpack-70a1cd2ad6a1952c.js,sha256=hdqCdjGFux87TPXpHL5XZkYG-UfYQKPtYO75pypUqdc,4065
152
+ khoj/interface/compiled/_next/static/chunks/webpack-2b720658ccc746f2.js,sha256=yOA_yjWC8b6vFS23_H4lVBG6EBjuVoqh-7sehox1XtU,4065
151
153
  khoj/interface/compiled/_next/static/chunks/app/layout-d0f0a9067427fb20.js,sha256=ilPUPuMQt_2D48lC5c6AYeXT7J28ElR_Ym6VtjQwCO0,442
152
154
  khoj/interface/compiled/_next/static/chunks/app/page-4dc472cf6d674004.js,sha256=opMZKInlBotS4PCcuL2Zh01Kyh_bfGBuTFK362EZT5M,29540
153
155
  khoj/interface/compiled/_next/static/chunks/app/_not-found/page-07ff4ab42b07845e.js,sha256=3mCUnxfMxyK44eqk21TVBrC6u--WSbvx31fTmQuOvMQ,1755
@@ -248,10 +250,8 @@ khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp,sha256=M2AW_HLpBn
248
250
  khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp,sha256=BBeRPBZkxY3-aKkMnYv5TSkxmbeMbyUH4VRIPfrWg1E,137406
249
251
  khoj/interface/compiled/_next/static/media/globe.98e105ca.webp,sha256=g3ofb8-W9GM75zIhlvQhaS8I2py9TtrovOKR3_7Jf04,514
250
252
  khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp,sha256=I_N7Yke3IOoS-0CC6XD8o0IUWG8PdPbrHmf6lpgWlZY,1380
251
- khoj/interface/compiled/_next/static/rYy0jmrIYv76V-iyorQim/_buildManifest.js,sha256=6I9QUstNpJnhe3leR2Daw0pSXwzcbBscv6h2jmmPpms,224
252
- khoj/interface/compiled/_next/static/rYy0jmrIYv76V-iyorQim/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
253
- khoj/interface/compiled/agents/index.html,sha256=ktNiUviirEMnzeOdYdgDiMf4i0oZOIxDnPgu8kXba3s,12658
254
- khoj/interface/compiled/agents/index.txt,sha256=sPvRuefbS-vdnX5sSo_hQi7PQd3e3wro6xHx2XTSVHs,6045
253
+ khoj/interface/compiled/agents/index.html,sha256=NHu3X0J3bv5VG9JkyrnR_oqONDQp1TEks4bdH3IUiWo,12658
254
+ khoj/interface/compiled/agents/index.txt,sha256=8hcJfot9m6D437jzHm2eQgMzOzSvuMQ-FgcxPmqv22k,6045
255
255
  khoj/interface/compiled/assets/icons/khoj_lantern.ico,sha256=eggu-B_v3z1R53EjOFhIqqPnICBGdoaw1xnc0NrzHck,174144
256
256
  khoj/interface/compiled/assets/icons/khoj_lantern_128x128.png,sha256=aTxivDb3CYyThkVZWz8A19xl_dNut5DbkXhODWF3A9Q,5640
257
257
  khoj/interface/compiled/assets/icons/khoj_lantern_256x256.png,sha256=xPCMLHiaL7lYOdQLZrKwWE-Qjn5ZaysSZB0ScYv4UZU,12312
@@ -262,18 +262,18 @@ khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png,sha256=i
262
262
  khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png,sha256=Dd4fPwtFl6BWqnHjeb1mCK_ND0hhHsWtx8sNE7EiMuE,406179
263
263
  khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png,sha256=DEDaNRCkfEWUeh3kYZWIQDTVK1a6KKnYdwj5ZWisN_Q,82985
264
264
  khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png,sha256=Ma3blirRmq3X4oYSsDbbT7MDn29rymDrjwmUfA9BMuM,236285
265
- khoj/interface/compiled/automations/index.html,sha256=BfaMJPAXvr8oe3RYtInlZbfAZ7f-8NR5cw8RUn2_4p4,30941
266
- khoj/interface/compiled/automations/index.txt,sha256=EODb0MmrXW0m-2a_veYLfbPTInlAcIU06EGW7EQyShk,5633
267
- khoj/interface/compiled/chat/index.html,sha256=tNiNQ6ZOv9XBty5lGvoCYXZSqu_XY4BBUCYMJdmv94A,13987
268
- khoj/interface/compiled/chat/index.txt,sha256=2wqsZXsafDPQkQIdAbr57hJE2Pdu2WauaCsNBSxtP9M,6636
269
- khoj/interface/compiled/factchecker/index.html,sha256=tQia7kQLDT5Ny1yQ6LFb__j9lyX9zmU7ZAuaRikOYH0,29973
270
- khoj/interface/compiled/factchecker/index.txt,sha256=CjQXD1kaTvjWgFlf6shpZsjdmB0OuZPxEjtrPEOOilU,5788
271
- khoj/interface/compiled/search/index.html,sha256=WViMILkt0ZURejOkiSmCpNyjSQdXd_N_HiCEHfNwlxM,30161
272
- khoj/interface/compiled/search/index.txt,sha256=Rr1f4362aJXnCj-o59ZPzawyjGcMyd61yH0k8tpZv-s,5256
273
- khoj/interface/compiled/settings/index.html,sha256=m-sCTcI8KqOJ0IUXtDyZ7NYUETFUHoW44YUaAdf_LzM,12831
274
- khoj/interface/compiled/settings/index.txt,sha256=-dKRHRAJPMIE3R0iORjX6K7JT1lpi_8kgwrjiEIhljY,6078
275
- khoj/interface/compiled/share/chat/index.html,sha256=vhDiyHgqEZo9tD88Wk6-5ADJcfIsloRT0WIwKD0sjfI,15312
276
- khoj/interface/compiled/share/chat/index.txt,sha256=k8kcbpSP2FLiijyX1h-1ffLw_XXFbqjmgwsliwXWlDw,7447
265
+ khoj/interface/compiled/automations/index.html,sha256=440A47WQfnxYTHcnbbOL7N9FQEKrSoDTGvS5kjpb558,30941
266
+ khoj/interface/compiled/automations/index.txt,sha256=OT7svGWm94pSkARPBRsIGdGIO3WYf17KnYIjLdlsd0E,5633
267
+ khoj/interface/compiled/chat/index.html,sha256=Btv8LJiGiJZ4cwUNYyxMmNGrSnF_yvFQ0Hom93EU1tc,13987
268
+ khoj/interface/compiled/chat/index.txt,sha256=bECTqWBh9Y0PjRDjPbr7cZjhh1drm0RAlmLgIIHaQq4,6636
269
+ khoj/interface/compiled/factchecker/index.html,sha256=C39EkiLYgXJRM9LArVqYFE518CdN2_Xm0xsDHIxqkaI,29973
270
+ khoj/interface/compiled/factchecker/index.txt,sha256=biez4I3MNs2YOf7DBgQLFnBUYFCry51IVC7019XAGB4,5788
271
+ khoj/interface/compiled/search/index.html,sha256=ED3ZlxgIY6h9VeRE5ZtEINsEFNYvuR460ZgRDZT3b7Y,30161
272
+ khoj/interface/compiled/search/index.txt,sha256=bbzW83fqvL6Aldznk2f0OGpawEAbqGqTGfYP3XSBKr0,5256
273
+ khoj/interface/compiled/settings/index.html,sha256=m_EOvvUSq-65XipvZiuZUoUuxwVJKyUmsj9suf54hp0,12831
274
+ khoj/interface/compiled/settings/index.txt,sha256=mdR4p40KbgDqtJ47vDpsVwLc2EsyLWpAn3oAd0veFVs,6078
275
+ khoj/interface/compiled/share/chat/index.html,sha256=LvXMnO_4Gg2MOg2XHZDO7-PVh4Q6vsnecrTqZW5p7rs,15312
276
+ khoj/interface/compiled/share/chat/index.txt,sha256=RUvPxLDr2wKFRLVA6rhz220qgYV017n2MFzmlPsaGUg,7447
277
277
  khoj/interface/email/feedback.html,sha256=xksuPFamx4hGWyTTxZKRgX_eiYQQEuv-eK9Xmkt-nwU,1216
278
278
  khoj/interface/email/magic_link.html,sha256=EoGKQucfPj3xQrWXhSZAzPFOYCHF_ZX94TWCd1XHl1M,941
279
279
  khoj/interface/email/task.html,sha256=tY7a0gzVeQ2lSQNu7WyXR_s7VYeWTrxWEj1iHVuoVE4,2813
@@ -325,38 +325,38 @@ khoj/processor/content/pdf/pdf_to_entries.py,sha256=kROQUGqHs6J8Xi2rEHVgkc_iLMcS
325
325
  khoj/processor/content/plaintext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
326
326
  khoj/processor/content/plaintext/plaintext_to_entries.py,sha256=97i7Cm0DTY7jW4iqKOT_oVc2ooa_XhQ8iImsljp1Kek,4994
327
327
  khoj/processor/conversation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
328
- khoj/processor/conversation/prompts.py,sha256=OYUwclon-nLZ_mHeA2H46eVBBqstN5hVkMoWUUUQ8uk,41211
329
- khoj/processor/conversation/utils.py,sha256=0SNDJ4qZ06c2wOqGrJjgol9VX9Oywu0Bt0SYjxy4Alg,14355
328
+ khoj/processor/conversation/prompts.py,sha256=15lA_w_JVXQJwm59sVl2TUYywzCc3dFy69cHVtnLFb0,40932
329
+ khoj/processor/conversation/utils.py,sha256=d6nHGRoJHFWIMrE-3KteOAWQ5XJqeGhXIYb8dsiOc8A,20388
330
330
  khoj/processor/conversation/anthropic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
331
- khoj/processor/conversation/anthropic/anthropic_chat.py,sha256=Nr9ON7Zrc-GBR1HKZvDlpXUDGsZvYKK6V7m3mbIeoME,8079
332
- khoj/processor/conversation/anthropic/utils.py,sha256=kqNadU07M5XU5oe9_Qn4ZmPvhAHCxq9kdbUYthklhdU,5652
331
+ khoj/processor/conversation/anthropic/anthropic_chat.py,sha256=1KVQMPvb3EBxeKj6e_BxcO9L1Ow5Rh5xoJ2SKOpBIYs,8205
332
+ khoj/processor/conversation/anthropic/utils.py,sha256=1QRNgG-ATWqVPHcumYecOLS20bLV0HRPcmkL_DzJUkI,6336
333
333
  khoj/processor/conversation/google/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
334
- khoj/processor/conversation/google/gemini_chat.py,sha256=zLqjpyRSmAkpEYEdRMDipM5-KakKrzabd58eXNHm0j0,8310
335
- khoj/processor/conversation/google/utils.py,sha256=73GsIUVC22DItey-rreMVXD26puw8yLpu6hq7RTHdvg,9490
334
+ khoj/processor/conversation/google/gemini_chat.py,sha256=lYLFMMur7gJuz3IUmrviPLaGXhOznleVBmk2PW-LfUo,8426
335
+ khoj/processor/conversation/google/utils.py,sha256=fJmzmk_BG2fPpiw827t5E-VuRRVD2Cb7ujIS78D2Q2w,10165
336
336
  khoj/processor/conversation/offline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
337
- khoj/processor/conversation/offline/chat_model.py,sha256=3S6OjYm5sQaxsOoYIIT5W9f2LuDsdeZNbFG0fZFYqXo,9751
337
+ khoj/processor/conversation/offline/chat_model.py,sha256=BUpm5a-RwfR1_RPmPoUjM78JbrAucv9DgqcHADuiAbY,10571
338
338
  khoj/processor/conversation/offline/utils.py,sha256=51McImxl6u1qgRYvMt7uzsgLGSLq5SMFy74ymlNjIcc,3033
339
339
  khoj/processor/conversation/offline/whisper.py,sha256=DJI-8y8DULO2cQ49m2VOvRyIZ2TxBypc15gM8O3HuMI,470
340
340
  khoj/processor/conversation/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
341
- khoj/processor/conversation/openai/gpt.py,sha256=y7gMAigfei_tTQHThNBV-91Yb956ha6lnvYNhc6aDJI,7721
342
- khoj/processor/conversation/openai/utils.py,sha256=tGRUauPfrRGPQ7W_9-lBxpRLld8EWzMuRiTY9EptFgY,5313
341
+ khoj/processor/conversation/openai/gpt.py,sha256=cboRE8Z7aETZMWlIOtqFSdw8gflTlnx2-AhZ3i9TnKI,7902
342
+ khoj/processor/conversation/openai/utils.py,sha256=s2s35q-pmvilb-PyqdCsPPVlV1tlWMSQNoCHPDFtXeI,6232
343
343
  khoj/processor/conversation/openai/whisper.py,sha256=zoEeK1LNCg_tzP4xzYi5vRPzNPGuDGzpkrkG7d1LUn4,447
344
- khoj/processor/image/generate.py,sha256=AeHvIf6VKl9C2kfXc_VdyxTFluOOpIJn_76wOA1k5zg,9012
344
+ khoj/processor/image/generate.py,sha256=sSviN4d5jPCayEqVY-VgePf1bac9ljbpAJ3_g1rijZA,9058
345
345
  khoj/processor/speech/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
346
346
  khoj/processor/speech/text_to_speech.py,sha256=Q7sapi5Hv6woXOumtrGqR0t6izZrFBkWXFOGrHM6dJ4,1929
347
347
  khoj/processor/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
348
- khoj/processor/tools/online_search.py,sha256=jqKvcvRyeWsBaRBKtRmNQHVoL_dhJs4C0K8yJrDhSK8,14299
348
+ khoj/processor/tools/online_search.py,sha256=vslmNXfvK3_b9WmsnQP6oGHti3Cd8JKZNdHCbtU60cA,14491
349
349
  khoj/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
350
- khoj/routers/api.py,sha256=cMSvMtpLYvX3JBIAduREFQf0gj4YPdzY2T4PqzxBwBQ,28050
350
+ khoj/routers/api.py,sha256=a2vCEYTEHCOMRiXbZxwy3KHCP7nQ0AWnodo86hjWvVc,28197
351
351
  khoj/routers/api_agents.py,sha256=4T0osmOGFmYC-BhdAkT5HpT2zaktlL7Agj47-To-jxo,9773
352
- khoj/routers/api_chat.py,sha256=nP-V4QTf946YcU6iBIaMCVHkzhklyeizFc2nd6rbU0o,42120
352
+ khoj/routers/api_chat.py,sha256=HkdKqfaBDwqidzQmvJQ7cBJQyE5uxjjL0kBqMlQKK74,42754
353
353
  khoj/routers/api_content.py,sha256=lWunOwVWYvnl1ue_D81g9ZSwBc0UxHmBIrdJoVPxN_A,17900
354
354
  khoj/routers/api_model.py,sha256=KDsxNwHspC94eTcv6l3ehr773EOvgc670UnZLE1WZ4o,3642
355
355
  khoj/routers/api_phone.py,sha256=p9yfc4WeMHDC0hg3aQk60a2VBy8rZPdEnz9wdJ7DzkU,2208
356
356
  khoj/routers/api_subscription.py,sha256=sR5_XxQ4e_1hk3K4g0i3S8PZeULP23lnGtrWnfjhNDI,5307
357
357
  khoj/routers/auth.py,sha256=HO54PR-BkWA_iJIktEobUrObcXVYG-00jpnIcEVdR5s,6564
358
358
  khoj/routers/email.py,sha256=SGYNPQvfcvYeHf70F0YqpY0FLMRElF2ZekROXdwGI18,3821
359
- khoj/routers/helpers.py,sha256=FOIIfljds6p_4fJpWb21EabfQRUlJdS3HuHoYT5ytYo,75015
359
+ khoj/routers/helpers.py,sha256=GAA3GSB-T7fvq5-75_4YQCIbpq2Tp7tL5xzlDrhHQ6M,76172
360
360
  khoj/routers/notion.py,sha256=Lp67xP9rVgpAF9BQoGTjZFcVdF1HYtvPP0kjq6uurKU,2802
361
361
  khoj/routers/storage.py,sha256=tJrwhFRVWv0MHv7V7huMc1Diwm-putZSwnZXJ3tqT_c,2338
362
362
  khoj/routers/twilio.py,sha256=MLsuCm4--ETvr3sLxbF0CL_ehlg_l2rKBSLR2Qh2Xls,1081
@@ -373,15 +373,15 @@ khoj/utils/cli.py,sha256=AgO3rO-bN5oI71sIReGxrJXPeXEH80fnCIsyVlZYgjI,3695
373
373
  khoj/utils/config.py,sha256=aiOkH0je8A30DAGYTHMRePrgJonFv_i07_7CdhhhcdA,1805
374
374
  khoj/utils/constants.py,sha256=UwE7U9bNsfeqTb0K2lcdXdAscM4-7uuVoR3KbZS03Pg,1216
375
375
  khoj/utils/fs_syncer.py,sha256=bQgcbYYC3x11RyCqI_kUzzqGpcKTodGgdT-3OTQsXqw,9977
376
- khoj/utils/helpers.py,sha256=Ez_7KK4JhATSvrYxmjakwTy5XUF_ooPI4bmi2_AvfyI,18006
376
+ khoj/utils/helpers.py,sha256=z46vG59Qa06CaVyzGtJfh-TU6iC5FktDYpS_hUmD0-I,18017
377
377
  khoj/utils/initialization.py,sha256=TjA2ZImYKI-J1tEBE_0TaOLnVQidVV5GDEFBOPq8aik,10048
378
378
  khoj/utils/jsonl.py,sha256=0Ac_COqr8sLCXntzZtquxuCEVRM2c3yKeDRGhgOBRpQ,1192
379
379
  khoj/utils/models.py,sha256=Q5tcC9-z25sCiub048fLnvZ6_IIO1bcPNxt5payekk0,2009
380
380
  khoj/utils/rawconfig.py,sha256=kURDuk7x0MDtniGLU4x1IsvU4UIBS-V9dSM4GD8X-LY,4274
381
381
  khoj/utils/state.py,sha256=x4GTewP1YhOA6c_32N4wOjnV-3AA3xG_qbY1-wC2Uxc,1559
382
382
  khoj/utils/yaml.py,sha256=H0mfw0ZvBFUvFmCQn8pWkfxdmIebsrSykza7D8Wv6wQ,1430
383
- khoj-1.27.2.dev13.dist-info/METADATA,sha256=zFgZf8deG5oDeg4NVzULEiOMBlsnVeYAj25V1w1CgmU,7026
384
- khoj-1.27.2.dev13.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
385
- khoj-1.27.2.dev13.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
386
- khoj-1.27.2.dev13.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
387
- khoj-1.27.2.dev13.dist-info/RECORD,,
383
+ khoj-1.27.2.dev29.dist-info/METADATA,sha256=PA_Ka4v7h0CWPJCF-Jq8ytt7nLudre09NqKpt19yPfk,7075
384
+ khoj-1.27.2.dev29.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
385
+ khoj-1.27.2.dev29.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
386
+ khoj-1.27.2.dev29.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
387
+ khoj-1.27.2.dev29.dist-info/RECORD,,