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.
- khoj/database/adapters/__init__.py +5 -0
- khoj/interface/compiled/404/index.html +1 -1
- khoj/interface/compiled/_next/static/chunks/1603-5138bb7c8035d9a6.js +1 -0
- khoj/interface/compiled/_next/static/chunks/{webpack-70a1cd2ad6a1952c.js → webpack-2b720658ccc746f2.js} +1 -1
- khoj/interface/compiled/agents/index.html +1 -1
- khoj/interface/compiled/agents/index.txt +2 -2
- khoj/interface/compiled/automations/index.html +1 -1
- khoj/interface/compiled/automations/index.txt +2 -2
- khoj/interface/compiled/chat/index.html +1 -1
- khoj/interface/compiled/chat/index.txt +2 -2
- khoj/interface/compiled/factchecker/index.html +1 -1
- khoj/interface/compiled/factchecker/index.txt +2 -2
- khoj/interface/compiled/index.html +1 -1
- khoj/interface/compiled/index.txt +2 -2
- khoj/interface/compiled/search/index.html +1 -1
- khoj/interface/compiled/search/index.txt +2 -2
- khoj/interface/compiled/settings/index.html +1 -1
- khoj/interface/compiled/settings/index.txt +2 -2
- khoj/interface/compiled/share/chat/index.html +1 -1
- khoj/interface/compiled/share/chat/index.txt +2 -2
- khoj/processor/conversation/anthropic/anthropic_chat.py +6 -1
- khoj/processor/conversation/anthropic/utils.py +25 -5
- khoj/processor/conversation/google/gemini_chat.py +8 -2
- khoj/processor/conversation/google/utils.py +34 -10
- khoj/processor/conversation/offline/chat_model.py +31 -7
- khoj/processor/conversation/openai/gpt.py +14 -2
- khoj/processor/conversation/openai/utils.py +43 -9
- khoj/processor/conversation/prompts.py +0 -16
- khoj/processor/conversation/utils.py +168 -1
- khoj/processor/image/generate.py +2 -0
- khoj/processor/tools/online_search.py +14 -5
- khoj/routers/api.py +5 -0
- khoj/routers/api_chat.py +23 -2
- khoj/routers/helpers.py +65 -13
- khoj/utils/helpers.py +1 -1
- {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/METADATA +2 -1
- {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/RECORD +42 -42
- khoj/interface/compiled/_next/static/chunks/1603-b9d95833e0e025e8.js +0 -1
- /khoj/interface/compiled/_next/static/{rYy0jmrIYv76V-iyorQim → atzIseFarmC7TIwq2BgHC}/_buildManifest.js +0 -0
- /khoj/interface/compiled/_next/static/{rYy0jmrIYv76V-iyorQim → atzIseFarmC7TIwq2BgHC}/_ssgManifest.js +0 -0
- {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/WHEEL +0 -0
- {khoj-1.27.2.dev13.dist-info → khoj-1.27.2.dev29.dist-info}/entry_points.txt +0 -0
- {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(
|
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,
|
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,
|
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(
|
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(
|
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,
|
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,
|
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.
|
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=
|
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=
|
113
|
-
khoj/interface/compiled/index.txt,sha256=
|
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=
|
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-
|
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-
|
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/
|
252
|
-
khoj/interface/compiled/
|
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=
|
266
|
-
khoj/interface/compiled/automations/index.txt,sha256=
|
267
|
-
khoj/interface/compiled/chat/index.html,sha256=
|
268
|
-
khoj/interface/compiled/chat/index.txt,sha256=
|
269
|
-
khoj/interface/compiled/factchecker/index.html,sha256=
|
270
|
-
khoj/interface/compiled/factchecker/index.txt,sha256=
|
271
|
-
khoj/interface/compiled/search/index.html,sha256=
|
272
|
-
khoj/interface/compiled/search/index.txt,sha256=
|
273
|
-
khoj/interface/compiled/settings/index.html,sha256=
|
274
|
-
khoj/interface/compiled/settings/index.txt,sha256
|
275
|
-
khoj/interface/compiled/share/chat/index.html,sha256=
|
276
|
-
khoj/interface/compiled/share/chat/index.txt,sha256=
|
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=
|
329
|
-
khoj/processor/conversation/utils.py,sha256=
|
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=
|
332
|
-
khoj/processor/conversation/anthropic/utils.py,sha256=
|
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=
|
335
|
-
khoj/processor/conversation/google/utils.py,sha256=
|
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=
|
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=
|
342
|
-
khoj/processor/conversation/openai/utils.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
384
|
-
khoj-1.27.2.
|
385
|
-
khoj-1.27.2.
|
386
|
-
khoj-1.27.2.
|
387
|
-
khoj-1.27.2.
|
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,,
|