khoj 1.30.2.dev11__py3-none-any.whl → 1.30.2.dev20__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 (47) hide show
  1. khoj/interface/compiled/404/index.html +1 -1
  2. khoj/interface/compiled/_next/static/chunks/1210.ef7a0f9a7e43da1d.js +1 -0
  3. khoj/interface/compiled/_next/static/chunks/1603-1407afe510f0145a.js +1 -0
  4. khoj/interface/compiled/_next/static/chunks/app/agents/{page-5f6e0dacc34e33ad.js → page-b086c9b0aa5a3833.js} +1 -1
  5. khoj/interface/compiled/_next/static/chunks/app/automations/{page-60bc7454bc3ea881.js → page-697a2d415e11a872.js} +1 -1
  6. khoj/interface/compiled/_next/static/chunks/app/chat/{page-ac366c9111374312.js → page-461e26fcb7578d39.js} +1 -1
  7. khoj/interface/compiled/_next/static/chunks/app/{page-358154a4436ef316.js → page-4a3c49c5e996cc40.js} +1 -1
  8. khoj/interface/compiled/_next/static/chunks/app/search/{page-64ea1717528979af.js → page-9013658bebfc3d17.js} +1 -1
  9. khoj/interface/compiled/_next/static/chunks/app/settings/{page-17a538580c65e7fe.js → page-41eb536497bb544a.js} +1 -1
  10. khoj/interface/compiled/_next/static/chunks/app/share/chat/{page-47641b3691fb0856.js → page-6a68ac7e227b34e7.js} +1 -1
  11. khoj/interface/compiled/_next/static/chunks/{webpack-1c0a37d7df44bed9.js → webpack-a0662b55edcc1ea3.js} +1 -1
  12. khoj/interface/compiled/_next/static/css/2d097a35da6bfe8d.css +1 -0
  13. khoj/interface/compiled/_next/static/css/592ca99f5122e75a.css +1 -0
  14. khoj/interface/compiled/agents/index.html +1 -1
  15. khoj/interface/compiled/agents/index.txt +2 -2
  16. khoj/interface/compiled/automations/index.html +1 -1
  17. khoj/interface/compiled/automations/index.txt +2 -2
  18. khoj/interface/compiled/chat/index.html +1 -1
  19. khoj/interface/compiled/chat/index.txt +2 -2
  20. khoj/interface/compiled/index.html +1 -1
  21. khoj/interface/compiled/index.txt +2 -2
  22. khoj/interface/compiled/search/index.html +1 -1
  23. khoj/interface/compiled/search/index.txt +2 -2
  24. khoj/interface/compiled/settings/index.html +1 -1
  25. khoj/interface/compiled/settings/index.txt +2 -2
  26. khoj/interface/compiled/share/chat/index.html +1 -1
  27. khoj/interface/compiled/share/chat/index.txt +2 -2
  28. khoj/processor/conversation/anthropic/utils.py +15 -1
  29. khoj/processor/conversation/google/utils.py +12 -1
  30. khoj/processor/conversation/openai/utils.py +33 -17
  31. khoj/processor/conversation/prompts.py +40 -21
  32. khoj/processor/conversation/utils.py +3 -2
  33. khoj/routers/api_chat.py +29 -14
  34. khoj/routers/helpers.py +19 -4
  35. khoj/utils/constants.py +17 -0
  36. khoj/utils/helpers.py +24 -0
  37. {khoj-1.30.2.dev11.dist-info → khoj-1.30.2.dev20.dist-info}/METADATA +1 -1
  38. {khoj-1.30.2.dev11.dist-info → khoj-1.30.2.dev20.dist-info}/RECORD +43 -43
  39. khoj/interface/compiled/_next/static/chunks/1210.132a7e1910006bbb.js +0 -1
  40. khoj/interface/compiled/_next/static/chunks/1603-859ddcf58f3ca639.js +0 -1
  41. khoj/interface/compiled/_next/static/css/2ff098d0815fdbc1.css +0 -1
  42. khoj/interface/compiled/_next/static/css/4cae6c0e5c72fb2d.css +0 -1
  43. /khoj/interface/compiled/_next/static/{ZwZ17DepweYHu7DUF8zml → oPcgzExVhSkog0L9tEf2n}/_buildManifest.js +0 -0
  44. /khoj/interface/compiled/_next/static/{ZwZ17DepweYHu7DUF8zml → oPcgzExVhSkog0L9tEf2n}/_ssgManifest.js +0 -0
  45. {khoj-1.30.2.dev11.dist-info → khoj-1.30.2.dev20.dist-info}/WHEEL +0 -0
  46. {khoj-1.30.2.dev11.dist-info → khoj-1.30.2.dev20.dist-info}/entry_points.txt +0 -0
  47. {khoj-1.30.2.dev11.dist-info → khoj-1.30.2.dev20.dist-info}/licenses/LICENSE +0 -0
khoj/routers/api_chat.py CHANGED
@@ -667,27 +667,37 @@ async def chat(
667
667
  finally:
668
668
  yield event_delimiter
669
669
 
670
- async def send_llm_response(response: str):
670
+ async def send_llm_response(response: str, usage: dict = None):
671
+ # Send Chat Response
671
672
  async for result in send_event(ChatEvent.START_LLM_RESPONSE, ""):
672
673
  yield result
673
674
  async for result in send_event(ChatEvent.MESSAGE, response):
674
675
  yield result
675
676
  async for result in send_event(ChatEvent.END_LLM_RESPONSE, ""):
676
677
  yield result
678
+ # Send Usage Metadata once llm interactions are complete
679
+ if usage:
680
+ async for event in send_event(ChatEvent.USAGE, usage):
681
+ yield event
682
+ async for result in send_event(ChatEvent.END_RESPONSE, ""):
683
+ yield result
677
684
 
678
685
  def collect_telemetry():
679
686
  # Gather chat response telemetry
680
687
  nonlocal chat_metadata
681
688
  latency = time.perf_counter() - start_time
682
689
  cmd_set = set([cmd.value for cmd in conversation_commands])
690
+ cost = (tracer.get("usage", {}) or {}).get("cost", 0)
683
691
  chat_metadata = chat_metadata or {}
684
692
  chat_metadata["conversation_command"] = cmd_set
685
693
  chat_metadata["agent"] = conversation.agent.slug if conversation and conversation.agent else None
686
694
  chat_metadata["latency"] = f"{latency:.3f}"
687
695
  chat_metadata["ttft_latency"] = f"{ttft:.3f}"
696
+ chat_metadata["usage"] = tracer.get("usage")
688
697
 
689
698
  logger.info(f"Chat response time to first token: {ttft:.3f} seconds")
690
699
  logger.info(f"Chat response total time: {latency:.3f} seconds")
700
+ logger.info(f"Chat response cost: ${cost:.5f}")
691
701
  update_telemetry_state(
692
702
  request=request,
693
703
  telemetry_type="api",
@@ -699,7 +709,7 @@ async def chat(
699
709
  )
700
710
 
701
711
  if is_query_empty(q):
702
- async for result in send_llm_response("Please ask your query to get started."):
712
+ async for result in send_llm_response("Please ask your query to get started.", tracer.get("usage")):
703
713
  yield result
704
714
  return
705
715
 
@@ -713,7 +723,7 @@ async def chat(
713
723
  create_new=body.create_new,
714
724
  )
715
725
  if not conversation:
716
- async for result in send_llm_response(f"Conversation {conversation_id} not found"):
726
+ async for result in send_llm_response(f"Conversation {conversation_id} not found", tracer.get("usage")):
717
727
  yield result
718
728
  return
719
729
  conversation_id = conversation.id
@@ -777,7 +787,7 @@ async def chat(
777
787
  await conversation_command_rate_limiter.update_and_check_if_valid(request, cmd)
778
788
  q = q.replace(f"/{cmd.value}", "").strip()
779
789
  except HTTPException as e:
780
- async for result in send_llm_response(str(e.detail)):
790
+ async for result in send_llm_response(str(e.detail), tracer.get("usage")):
781
791
  yield result
782
792
  return
783
793
 
@@ -834,7 +844,7 @@ async def chat(
834
844
  agent_has_entries = await EntryAdapters.aagent_has_entries(agent)
835
845
  if len(file_filters) == 0 and not agent_has_entries:
836
846
  response_log = "No files selected for summarization. Please add files using the section on the left."
837
- async for result in send_llm_response(response_log):
847
+ async for result in send_llm_response(response_log, tracer.get("usage")):
838
848
  yield result
839
849
  else:
840
850
  async for response in generate_summary_from_files(
@@ -853,7 +863,7 @@ async def chat(
853
863
  else:
854
864
  if isinstance(response, str):
855
865
  response_log = response
856
- async for result in send_llm_response(response):
866
+ async for result in send_llm_response(response, tracer.get("usage")):
857
867
  yield result
858
868
 
859
869
  await sync_to_async(save_to_conversation_log)(
@@ -880,7 +890,7 @@ async def chat(
880
890
  conversation_config = await ConversationAdapters.aget_default_conversation_config(user)
881
891
  model_type = conversation_config.model_type
882
892
  formatted_help = help_message.format(model=model_type, version=state.khoj_version, device=get_device())
883
- async for result in send_llm_response(formatted_help):
893
+ async for result in send_llm_response(formatted_help, tracer.get("usage")):
884
894
  yield result
885
895
  return
886
896
  # Adding specification to search online specifically on khoj.dev pages.
@@ -895,7 +905,7 @@ async def chat(
895
905
  except Exception as e:
896
906
  logger.error(f"Error scheduling task {q} for {user.email}: {e}")
897
907
  error_message = f"Unable to create automation. Ensure the automation doesn't already exist."
898
- async for result in send_llm_response(error_message):
908
+ async for result in send_llm_response(error_message, tracer.get("usage")):
899
909
  yield result
900
910
  return
901
911
 
@@ -916,7 +926,7 @@ async def chat(
916
926
  raw_query_files=raw_query_files,
917
927
  tracer=tracer,
918
928
  )
919
- async for result in send_llm_response(llm_response):
929
+ async for result in send_llm_response(llm_response, tracer.get("usage")):
920
930
  yield result
921
931
  return
922
932
 
@@ -963,7 +973,7 @@ async def chat(
963
973
  yield result
964
974
 
965
975
  if conversation_commands == [ConversationCommand.Notes] and not await EntryAdapters.auser_has_entries(user):
966
- async for result in send_llm_response(f"{no_entries_found.format()}"):
976
+ async for result in send_llm_response(f"{no_entries_found.format()}", tracer.get("usage")):
967
977
  yield result
968
978
  return
969
979
 
@@ -1105,7 +1115,7 @@ async def chat(
1105
1115
  "detail": improved_image_prompt,
1106
1116
  "image": None,
1107
1117
  }
1108
- async for result in send_llm_response(json.dumps(content_obj)):
1118
+ async for result in send_llm_response(json.dumps(content_obj), tracer.get("usage")):
1109
1119
  yield result
1110
1120
  return
1111
1121
 
@@ -1132,7 +1142,7 @@ async def chat(
1132
1142
  "inferredQueries": [improved_image_prompt],
1133
1143
  "image": generated_image,
1134
1144
  }
1135
- async for result in send_llm_response(json.dumps(content_obj)):
1145
+ async for result in send_llm_response(json.dumps(content_obj), tracer.get("usage")):
1136
1146
  yield result
1137
1147
  return
1138
1148
 
@@ -1166,7 +1176,7 @@ async def chat(
1166
1176
  diagram_description = excalidraw_diagram_description
1167
1177
  else:
1168
1178
  error_message = "Failed to generate diagram. Please try again later."
1169
- async for result in send_llm_response(error_message):
1179
+ async for result in send_llm_response(error_message, tracer.get("usage")):
1170
1180
  yield result
1171
1181
 
1172
1182
  await sync_to_async(save_to_conversation_log)(
@@ -1213,7 +1223,7 @@ async def chat(
1213
1223
  tracer=tracer,
1214
1224
  )
1215
1225
 
1216
- async for result in send_llm_response(json.dumps(content_obj)):
1226
+ async for result in send_llm_response(json.dumps(content_obj), tracer.get("usage")):
1217
1227
  yield result
1218
1228
  return
1219
1229
 
@@ -1252,6 +1262,11 @@ async def chat(
1252
1262
  if item is None:
1253
1263
  async for result in send_event(ChatEvent.END_LLM_RESPONSE, ""):
1254
1264
  yield result
1265
+ # Send Usage Metadata once llm interactions are complete
1266
+ async for event in send_event(ChatEvent.USAGE, tracer.get("usage")):
1267
+ yield event
1268
+ async for result in send_event(ChatEvent.END_RESPONSE, ""):
1269
+ yield result
1255
1270
  logger.debug("Finished streaming response")
1256
1271
  return
1257
1272
  if not connection_alive or not continue_stream:
khoj/routers/helpers.py CHANGED
@@ -753,7 +753,11 @@ async def generate_excalidraw_diagram(
753
753
  yield None, None
754
754
  return
755
755
 
756
- yield better_diagram_description_prompt, excalidraw_diagram_description
756
+ scratchpad = excalidraw_diagram_description.get("scratchpad")
757
+
758
+ inferred_queries = f"Instruction: {better_diagram_description_prompt}\n\nScratchpad: {scratchpad}"
759
+
760
+ yield inferred_queries, excalidraw_diagram_description.get("elements")
757
761
 
758
762
 
759
763
  async def generate_better_diagram_description(
@@ -822,7 +826,7 @@ async def generate_excalidraw_diagram_from_description(
822
826
  user: KhojUser = None,
823
827
  agent: Agent = None,
824
828
  tracer: dict = {},
825
- ) -> str:
829
+ ) -> Dict[str, Any]:
826
830
  personality_context = (
827
831
  prompts.personality_context.format(personality=agent.personality) if agent and agent.personality else ""
828
832
  )
@@ -838,10 +842,18 @@ async def generate_excalidraw_diagram_from_description(
838
842
  )
839
843
  raw_response = clean_json(raw_response)
840
844
  try:
845
+ # Expect response to have `elements` and `scratchpad` keys
841
846
  response: Dict[str, str] = json.loads(raw_response)
847
+ if (
848
+ not response
849
+ or not isinstance(response, Dict)
850
+ or not response.get("elements")
851
+ or not response.get("scratchpad")
852
+ ):
853
+ raise AssertionError(f"Invalid response for generating Excalidraw diagram: {response}")
842
854
  except Exception:
843
855
  raise AssertionError(f"Invalid response for generating Excalidraw diagram: {raw_response}")
844
- if not response or not isinstance(response, List) or not isinstance(response[0], Dict):
856
+ if not response or not isinstance(response["elements"], List) or not isinstance(response["elements"][0], Dict):
845
857
  # TODO Some additional validation here that it's a valid Excalidraw diagram
846
858
  raise AssertionError(f"Invalid response for improving diagram description: {response}")
847
859
 
@@ -1770,6 +1782,7 @@ Manage your automations [here](/automations).
1770
1782
  class MessageProcessor:
1771
1783
  def __init__(self):
1772
1784
  self.references = {}
1785
+ self.usage = {}
1773
1786
  self.raw_response = ""
1774
1787
 
1775
1788
  def convert_message_chunk_to_json(self, raw_chunk: str) -> Dict[str, Any]:
@@ -1793,6 +1806,8 @@ class MessageProcessor:
1793
1806
  chunk_type = ChatEvent(chunk["type"])
1794
1807
  if chunk_type == ChatEvent.REFERENCES:
1795
1808
  self.references = chunk["data"]
1809
+ elif chunk_type == ChatEvent.USAGE:
1810
+ self.usage = chunk["data"]
1796
1811
  elif chunk_type == ChatEvent.MESSAGE:
1797
1812
  chunk_data = chunk["data"]
1798
1813
  if isinstance(chunk_data, dict):
@@ -1837,7 +1852,7 @@ async def read_chat_stream(response_iterator: AsyncGenerator[str, None]) -> Dict
1837
1852
  if buffer:
1838
1853
  processor.process_message_chunk(buffer)
1839
1854
 
1840
- return {"response": processor.raw_response, "references": processor.references}
1855
+ return {"response": processor.raw_response, "references": processor.references, "usage": processor.usage}
1841
1856
 
1842
1857
 
1843
1858
  def get_user_config(user: KhojUser, request: Request, is_detailed: bool = False):
khoj/utils/constants.py CHANGED
@@ -1,4 +1,5 @@
1
1
  from pathlib import Path
2
+ from typing import Dict
2
3
 
3
4
  app_root_directory = Path(__file__).parent.parent.parent
4
5
  web_directory = app_root_directory / "khoj/interface/web/"
@@ -31,3 +32,19 @@ default_config = {
31
32
  "image": {"encoder": "sentence-transformers/clip-ViT-B-32", "model_directory": "~/.khoj/search/image/"},
32
33
  },
33
34
  }
35
+
36
+ model_to_cost: Dict[str, Dict[str, float]] = {
37
+ # OpenAI Pricing: https://openai.com/api/pricing/
38
+ "gpt-4o": {"input": 2.50, "output": 10.00},
39
+ "gpt-4o-mini": {"input": 0.15, "output": 0.60},
40
+ "o1-preview": {"input": 15.0, "output": 60.00},
41
+ "o1-mini": {"input": 3.0, "output": 12.0},
42
+ # Gemini Pricing: https://ai.google.dev/pricing
43
+ "gemini-1.5-flash": {"input": 0.075, "output": 0.30},
44
+ "gemini-1.5-flash-002": {"input": 0.075, "output": 0.30},
45
+ "gemini-1.5-pro": {"input": 1.25, "output": 5.00},
46
+ "gemini-1.5-pro-002": {"input": 1.25, "output": 5.00},
47
+ # Anthropic Pricing: https://www.anthropic.com/pricing#anthropic-api_
48
+ "claude-3-5-sonnet-20241022": {"input": 3.0, "output": 15.0},
49
+ "claude-3-5-haiku-20241022": {"input": 1.0, "output": 5.0},
50
+ }
khoj/utils/helpers.py CHANGED
@@ -540,3 +540,27 @@ def get_country_code_from_timezone(tz: str) -> str:
540
540
  def get_country_name_from_timezone(tz: str) -> str:
541
541
  """Get country name from timezone"""
542
542
  return country_names.get(get_country_code_from_timezone(tz), "United States")
543
+
544
+
545
+ def get_cost_of_chat_message(model_name: str, input_tokens: int = 0, output_tokens: int = 0, prev_cost: float = 0.0):
546
+ """
547
+ Calculate cost of chat message based on input and output tokens
548
+ """
549
+
550
+ # Calculate cost of input and output tokens. Costs are per million tokens
551
+ input_cost = constants.model_to_cost.get(model_name, {}).get("input", 0) * (input_tokens / 1e6)
552
+ output_cost = constants.model_to_cost.get(model_name, {}).get("output", 0) * (output_tokens / 1e6)
553
+
554
+ return input_cost + output_cost + prev_cost
555
+
556
+
557
+ def get_chat_usage_metrics(model_name: str, input_tokens: int = 0, output_tokens: int = 0, usage: dict = {}):
558
+ """
559
+ Get usage metrics for chat message based on input and output tokens
560
+ """
561
+ prev_usage = usage or {"input_tokens": 0, "output_tokens": 0, "cost": 0.0}
562
+ return {
563
+ "input_tokens": prev_usage["input_tokens"] + input_tokens,
564
+ "output_tokens": prev_usage["output_tokens"] + output_tokens,
565
+ "cost": get_cost_of_chat_message(model_name, input_tokens, output_tokens, prev_cost=prev_usage["cost"]),
566
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: khoj
3
- Version: 1.30.2.dev11
3
+ Version: 1.30.2.dev20
4
4
  Summary: Your Second Brain
5
5
  Project-URL: Homepage, https://khoj.dev
6
6
  Project-URL: Documentation, https://docs.khoj.dev
@@ -111,21 +111,19 @@ khoj/interface/compiled/chat.svg,sha256=l2JoYRRgk201adTTdvJ-buKUrc0WGfsudix5xEvt
111
111
  khoj/interface/compiled/close.svg,sha256=hQ2iFLkNzHk0_iyTrSbwnWAeXYlgA-c2Eof2Iqh76n4,417
112
112
  khoj/interface/compiled/copy-button-success.svg,sha256=byqWAYD3Pn9IOXRjOKudJ-TJbP2UESbQGvtLWazNGjY,829
113
113
  khoj/interface/compiled/copy-button.svg,sha256=05bKM2eRxksfBlAPT7yMaoNJEk85bZCxQg67EVrPeHo,669
114
- khoj/interface/compiled/index.html,sha256=kHGFlSAytdz_ihettvyRzxDCm5Q7we2_TGrQJy6D78c,12153
115
- khoj/interface/compiled/index.txt,sha256=VNt9-xVeVG0h3aFwv398QONKTo-hF5pzJNdacgCnu3I,5609
114
+ khoj/interface/compiled/index.html,sha256=1yeMdWMNSNjZrlFUIX_iBxQwxPauj9Q3U7_rjNGS4vY,12153
115
+ khoj/interface/compiled/index.txt,sha256=o63URVnv2EAOWTfmPY3kZhwZ24t0RuYrSbrV6jJpMqw,5609
116
116
  khoj/interface/compiled/khoj.webmanifest,sha256=lsknYkvEdMbRTOUYKXPM_8krN2gamJmM4u3qj8u9lrU,1682
117
117
  khoj/interface/compiled/logo.svg,sha256=_QCKVYM4WT2Qhcf7aVFImjq_s5CwjynGXYAOgI7yf8w,8059
118
118
  khoj/interface/compiled/send.svg,sha256=VdavOWkVddcwcGcld6pdfmwfz7S91M-9O28cfeiKJkM,635
119
119
  khoj/interface/compiled/share.svg,sha256=91lwo75PvMDrgocuZQab6EQ62CxRbubh9Bhw7CWMKbg,1221
120
120
  khoj/interface/compiled/thumbs-down.svg,sha256=JGNl-DwoRmH2XFMPWwFFklmoYtKxaQbkLE3nuYKe8ZY,1019
121
121
  khoj/interface/compiled/thumbs-up.svg,sha256=yS1wxTRtiztkN-6nZciLoYQUB_KTYNPV8xFRwH2TQFw,1036
122
- khoj/interface/compiled/404/index.html,sha256=lxBtDg1HS0rU1KG8FmHgfbLdw5ALiS-bsRyli69oMK8,12023
123
- khoj/interface/compiled/_next/static/ZwZ17DepweYHu7DUF8zml/_buildManifest.js,sha256=6I9QUstNpJnhe3leR2Daw0pSXwzcbBscv6h2jmmPpms,224
124
- khoj/interface/compiled/_next/static/ZwZ17DepweYHu7DUF8zml/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
125
- khoj/interface/compiled/_next/static/chunks/1210.132a7e1910006bbb.js,sha256=2dJueIfOg5qlQdanOM9HrgwcfrUXCD57bfd8Iv7iJcU,2104
122
+ khoj/interface/compiled/404/index.html,sha256=uakz5UrBwg_sFzj2MMPEu-U3Shr_YbqXd4zoKJ49z_A,12023
123
+ khoj/interface/compiled/_next/static/chunks/1210.ef7a0f9a7e43da1d.js,sha256=yOh1qtmNHPpDd6vR7CJOXSbq8M_slPujdTR_OXxaEYU,2121
126
124
  khoj/interface/compiled/_next/static/chunks/1279-4cb23143aa2c0228.js,sha256=zHMz-ixoNkLNUjN2-C48RGEyMs2mI9wsNRCczXnzIvQ,45616
127
125
  khoj/interface/compiled/_next/static/chunks/1459.690bf20e7d7b7090.js,sha256=z-ruZPxF_Z3ef_WOThd9Ox36AMhxaW3znizVivNnA34,34239
128
- khoj/interface/compiled/_next/static/chunks/1603-859ddcf58f3ca639.js,sha256=qlglDnAg1d0ohxnopVi1HMJa5_jjWc3EmiRvh1fBthQ,73891
126
+ khoj/interface/compiled/_next/static/chunks/1603-1407afe510f0145a.js,sha256=p9EvJACAEa6gwEA9q4hYpwkDuSBoVk1Lvl0PKNVtVHw,73915
129
127
  khoj/interface/compiled/_next/static/chunks/1970-e1935a1d0930a7c5.js,sha256=3hp_EoSjfrivYwGsLAZd22tJdGVnLrld6vV94-ABKU4,29801
130
128
  khoj/interface/compiled/_next/static/chunks/216-b2e4344315b88832.js,sha256=Sz0t6FNM1oJXke42354nmPFREqb14BXDJO4AsqKOtAY,238786
131
129
  khoj/interface/compiled/_next/static/chunks/3072-be830e4f8412b9d2.js,sha256=BBUjJdE8AgmhoF6PA8WPC8d-01ppYgcZpjNyTGeayRE,35457
@@ -150,30 +148,30 @@ khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js,sha256
150
148
  khoj/interface/compiled/_next/static/chunks/main-1ea5c2e0fdef4626.js,sha256=8_u87PGI3PahFbDfGWGvpD-a18J7X7ChUqWIeqxVq7g,111061
151
149
  khoj/interface/compiled/_next/static/chunks/main-app-6d6ee3495efe03d4.js,sha256=i52E7sWOcSq1G8eYZL3mtTxbUbwRNxcAbSWQ6uWpMsY,475
152
150
  khoj/interface/compiled/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js,sha256=6QPOwdWeAVe8x-SsiDrm-Ga6u2DkqgG5SFqglrlyIgA,91381
153
- khoj/interface/compiled/_next/static/chunks/webpack-1c0a37d7df44bed9.js,sha256=rtTruYkplzzuKPSwYJsWRmm9wFhYITR7T_l8ttFFVNM,4039
151
+ khoj/interface/compiled/_next/static/chunks/webpack-a0662b55edcc1ea3.js,sha256=ZY1ZOYet2gTnrSsfr9BM-QUScgRBjiAobGxWGUNT_Cg,4039
154
152
  khoj/interface/compiled/_next/static/chunks/app/layout-86561d2fac35a91a.js,sha256=2EWsyKE2kcC5uDvsOtgG5OP0hHCX8sCph4NqhUU2rCg,442
155
- khoj/interface/compiled/_next/static/chunks/app/page-358154a4436ef316.js,sha256=Ga97xvtlKVsfcv4-sRDynIRzYn2de8xACgQTvdlRhgM,33219
153
+ khoj/interface/compiled/_next/static/chunks/app/page-4a3c49c5e996cc40.js,sha256=6yWpNUFJZtRQ1D8KEtiFHUX6nSnyw_5j5RCLEJykpd4,33219
156
154
  khoj/interface/compiled/_next/static/chunks/app/_not-found/page-cfba071f5a657256.js,sha256=3mCUnxfMxyK44eqk21TVBrC6u--WSbvx31fTmQuOvMQ,1755
157
155
  khoj/interface/compiled/_next/static/chunks/app/agents/layout-e9838b642913a071.js,sha256=w3vWDf7m2_VG7q98_KGAWbCO06RI7iqFYsb4nDqGUDw,372
158
- khoj/interface/compiled/_next/static/chunks/app/agents/page-5f6e0dacc34e33ad.js,sha256=uCUHiD3mUgkGFTW-18qaz8TVRMZkv2elE39HVjOZN7g,11749
156
+ khoj/interface/compiled/_next/static/chunks/app/agents/page-b086c9b0aa5a3833.js,sha256=HgQImDHRNqLWrd1N5uzBcZVu5owQKwvpO-aNoaARpH4,11754
159
157
  khoj/interface/compiled/_next/static/chunks/app/automations/layout-7f1b79a2c67af0b4.js,sha256=MvPp1IfxmpfRaT4XDDpj-l6F4CV-loeGqi315QYXKZw,5143
160
- khoj/interface/compiled/_next/static/chunks/app/automations/page-60bc7454bc3ea881.js,sha256=sCUP_kTOLS7gP8Sodmk5qNbe7LbmQ1uzDBaBJLqZM0I,35348
158
+ khoj/interface/compiled/_next/static/chunks/app/automations/page-697a2d415e11a872.js,sha256=dXCTbZkLZaI12_YIWMgmvjr8kIBvI9GFKe95XC9C4-I,35343
161
159
  khoj/interface/compiled/_next/static/chunks/app/chat/layout-b0e7ff4baa3b5265.js,sha256=a-Qv2nHUrCa1gIs4Qo5txnOlhhQessAdcnAhhjaN3ag,374
162
- khoj/interface/compiled/_next/static/chunks/app/chat/page-ac366c9111374312.js,sha256=qc4PooY23sDkGFgUfY-q0E15NVgjRHxQDyCjuD1EPbg,7069
160
+ khoj/interface/compiled/_next/static/chunks/app/chat/page-461e26fcb7578d39.js,sha256=EDvD-AFs_OBDRGefTi08x9G6WuVsaaM57fn1FQknsz0,7069
163
161
  khoj/interface/compiled/_next/static/chunks/app/search/layout-ea6b73fdaf9b24ca.js,sha256=mBgNUjaTBNgIKOpZj722mh1ojg1CNIYRBPiupStSS6s,165
164
- khoj/interface/compiled/_next/static/chunks/app/search/page-64ea1717528979af.js,sha256=t24n4skHil9A2UZ6UTIBpYgWiUDHCxsR9bLj2FylWRQ,6957
162
+ khoj/interface/compiled/_next/static/chunks/app/search/page-9013658bebfc3d17.js,sha256=ufxcLuHLFf2IoGpU1sBp64ldmX_otBE2HJ22LULJJW8,6957
165
163
  khoj/interface/compiled/_next/static/chunks/app/settings/layout-1f4d76a8b09517b1.js,sha256=gmAaWa1vNym-LKxvESq4b4PRxJ2zi7slSXVTv3aadhE,5347
166
- khoj/interface/compiled/_next/static/chunks/app/settings/page-17a538580c65e7fe.js,sha256=GNQ_niH5sctETn4oZIeA_WcvQOf5PYnu9I7hGXdUXNI,32243
164
+ khoj/interface/compiled/_next/static/chunks/app/settings/page-41eb536497bb544a.js,sha256=JjNA0NKuJ2QiMgKlFOPlfGCvggPl7DzPduRyQrDAqDg,32243
167
165
  khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-cf7445cf0326bda3.js,sha256=W3axh1K4y-pLSXcXogLl4qLKXr5BZLY1uA7JfSWp5TU,373
168
- khoj/interface/compiled/_next/static/chunks/app/share/chat/page-47641b3691fb0856.js,sha256=OA49tyg5-g7R0ZhPaX1GOBfi8QQW3cGr4-dZN_ADN7Q,4374
166
+ khoj/interface/compiled/_next/static/chunks/app/share/chat/page-6a68ac7e227b34e7.js,sha256=4mT5YSFDEsfOZzC2A1l9K19DkAQJUv_gc_is0sgb6so,4374
169
167
  khoj/interface/compiled/_next/static/chunks/pages/_app-f870474a17b7f2fd.js,sha256=eqdFPAN_XFyMUzZ9qwFk-_rhMWZrU7lgNVt1foVUANo,286
170
168
  khoj/interface/compiled/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js,sha256=vjERjtMAbVk-19LyPf1Jc-H6TMcrSznSz6brzNqbqf8,253
171
169
  khoj/interface/compiled/_next/static/css/0e9d53dcd7f11342.css,sha256=52_LSJ59Vwm1p2UpcDXEvq99pTjz2sW4EjF5iKf-dzs,2622
172
170
  khoj/interface/compiled/_next/static/css/1a4038cc4acc8ee4.css,sha256=-DxhDuhlUAQ3m_90PhhOWP5xHO-6ET5j0IhlK7_3cR4,3058882
173
171
  khoj/interface/compiled/_next/static/css/1f293605f2871853.css,sha256=G2b3Wx4e0DRBWSdNU20ivCChZI5HBzvPYUVVIdTRjLc,26590
174
- khoj/interface/compiled/_next/static/css/2ff098d0815fdbc1.css,sha256=F-uRnbKKlMZq5eMcvFZtUOCTgC6n_uNE6fuaHU4CBak,8829
172
+ khoj/interface/compiled/_next/static/css/2d097a35da6bfe8d.css,sha256=Px3pPL_D-UjBJEghSLIchKux1WSch40GQHPv60qZEC8,8449
175
173
  khoj/interface/compiled/_next/static/css/3cf13271869a4aeb.css,sha256=sGjJTeMeN6wbQF4OCPgWYgJmSLLSHyzIH2rSVstWx7k,1857
176
- khoj/interface/compiled/_next/static/css/4cae6c0e5c72fb2d.css,sha256=3CjTMmtMrm_MYt1ywtUh2MHEjSLSl356SQLl4hdBuYw,534
174
+ khoj/interface/compiled/_next/static/css/592ca99f5122e75a.css,sha256=BSqRkeb9vBh0phx5GkAlZirTFZintbyggGaUkuOBfaU,914
177
175
  khoj/interface/compiled/_next/static/css/5a400c87d295e68a.css,sha256=ojDUPJ9fJpEo9DzTAsEa-k1cg7Bef-nSTfpszMiqknQ,17711
178
176
  khoj/interface/compiled/_next/static/css/80bd6301fc657983.css,sha256=T7_aQHcWpQBQLKadauHNzjYGw713FtRNTlUqmJjsL6I,1634
179
177
  khoj/interface/compiled/_next/static/media/5455839c73f146e7-s.p.woff2,sha256=BUeNjYxyX7Bu76aNlJrZtW3PwYgcH-kp8syFdODZoyc,35788
@@ -248,8 +246,10 @@ khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp,sha256=M2AW_HLpBn
248
246
  khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp,sha256=BBeRPBZkxY3-aKkMnYv5TSkxmbeMbyUH4VRIPfrWg1E,137406
249
247
  khoj/interface/compiled/_next/static/media/globe.98e105ca.webp,sha256=g3ofb8-W9GM75zIhlvQhaS8I2py9TtrovOKR3_7Jf04,514
250
248
  khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp,sha256=I_N7Yke3IOoS-0CC6XD8o0IUWG8PdPbrHmf6lpgWlZY,1380
251
- khoj/interface/compiled/agents/index.html,sha256=OAQ1Ce0i1XRPZWlXPlUoa1heiPCXhtKyWcur2GMbFos,12655
252
- khoj/interface/compiled/agents/index.txt,sha256=BavG76-8LBrwNS41LDfWraCQLVS8RWDxOVRnvFDg3Kg,6043
249
+ khoj/interface/compiled/_next/static/oPcgzExVhSkog0L9tEf2n/_buildManifest.js,sha256=6I9QUstNpJnhe3leR2Daw0pSXwzcbBscv6h2jmmPpms,224
250
+ khoj/interface/compiled/_next/static/oPcgzExVhSkog0L9tEf2n/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
251
+ khoj/interface/compiled/agents/index.html,sha256=7TSMxD7JnZ34QJwblpbImlv1V1oCufbTh76E5e-G4h8,12963
252
+ khoj/interface/compiled/agents/index.txt,sha256=fKGky4hjS5kwKkSclmKVUGJuO8eIkpGthnQ82DHXDWQ,6176
253
253
  khoj/interface/compiled/assets/icons/khoj_lantern.ico,sha256=eggu-B_v3z1R53EjOFhIqqPnICBGdoaw1xnc0NrzHck,174144
254
254
  khoj/interface/compiled/assets/icons/khoj_lantern_128x128.png,sha256=aTxivDb3CYyThkVZWz8A19xl_dNut5DbkXhODWF3A9Q,5640
255
255
  khoj/interface/compiled/assets/icons/khoj_lantern_256x256.png,sha256=xPCMLHiaL7lYOdQLZrKwWE-Qjn5ZaysSZB0ScYv4UZU,12312
@@ -260,16 +260,16 @@ khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png,sha256=i
260
260
  khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png,sha256=Dd4fPwtFl6BWqnHjeb1mCK_ND0hhHsWtx8sNE7EiMuE,406179
261
261
  khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png,sha256=DEDaNRCkfEWUeh3kYZWIQDTVK1a6KKnYdwj5ZWisN_Q,82985
262
262
  khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png,sha256=Ma3blirRmq3X4oYSsDbbT7MDn29rymDrjwmUfA9BMuM,236285
263
- khoj/interface/compiled/automations/index.html,sha256=GEK3yyv_fy27vXr5bL4bvP2EVsJtjV7UCZCHZe9PYD0,30938
264
- khoj/interface/compiled/automations/index.txt,sha256=P5XS5sx5kJMd4bjIJF3AIhf4jVkPdIi2uIoe4Ut2v7U,5631
265
- khoj/interface/compiled/chat/index.html,sha256=3XEnk9UPrWyRjBbxAshDR2PNVT-veEbKWNtk3UJe7Ws,13854
266
- khoj/interface/compiled/chat/index.txt,sha256=dYTX-vCUOXX0Nr0VFrJtbh9Dec2YRnBi_Yu198CywOM,6586
267
- khoj/interface/compiled/search/index.html,sha256=Lsj6HD9CVmOTB-BRqLo-imoiEutv6zu9LMZKgrAEfJc,30158
268
- khoj/interface/compiled/search/index.txt,sha256=_v1v623C4GnOSq8squIHP-93ffXzINVsQ0eX7b38ET4,5254
269
- khoj/interface/compiled/settings/index.html,sha256=L5yaSbQPkqQeL1OldIcn0TtwMt8fh7DRks8pV4RjUkw,12828
270
- khoj/interface/compiled/settings/index.txt,sha256=8EBmkEPeqkk5Dy-g8Nz_N_Qxh_OGaNOnc6YRYG9-4E0,6076
271
- khoj/interface/compiled/share/chat/index.html,sha256=_iAO6tdbxtDzoxIQo_DWXEgBFA-wOR4gAdfpJH8Emfg,15151
272
- khoj/interface/compiled/share/chat/index.txt,sha256=2AUueW-0VrGMUXrsTBcGS4suTbaMeihrSzTTVOkA878,7383
263
+ khoj/interface/compiled/automations/index.html,sha256=HJ6QNah77Z0fW1qOsnj40tbhdPGJsV7I96foV5zEKDM,30630
264
+ khoj/interface/compiled/automations/index.txt,sha256=QE3o3S1dUzwZlI_a2Iu1dL3ogg9cQHOQgPYqdC8j7kQ,5498
265
+ khoj/interface/compiled/chat/index.html,sha256=u2MKfINUEDvsXNh6lIm5sYT_gKnwdwM6rxag69q_qpE,13854
266
+ khoj/interface/compiled/chat/index.txt,sha256=T9ljt4sYPNN4I280WQvduDZ0Bts6c85V_ZMOyWxjvpc,6586
267
+ khoj/interface/compiled/search/index.html,sha256=yfRjGDYmaSwHqYWEMjfM69uIlwKQMJ1PmZC9SC-loyU,30158
268
+ khoj/interface/compiled/search/index.txt,sha256=C1agS8OIBIZdSpoRbtUrMT6YwoeYTdn41D5hL5PL5zw,5254
269
+ khoj/interface/compiled/settings/index.html,sha256=GHAPq8HjofiTj95imkaqu1UamFdbHduHb2MQ37KV9fU,12828
270
+ khoj/interface/compiled/settings/index.txt,sha256=sskOBn533nyE7h_Dw8Ncht8kJorvGDyMX9WVJ5c6scs,6076
271
+ khoj/interface/compiled/share/chat/index.html,sha256=Sqf11d4RIhixhowavSDMIo33KR2ktj1K6uosG1y8I4A,15151
272
+ khoj/interface/compiled/share/chat/index.txt,sha256=CdzN68Xu7NI8ONx80_uI2vANhnrAeBLMOGjYA5t3z7w,7383
273
273
  khoj/interface/email/feedback.html,sha256=xksuPFamx4hGWyTTxZKRgX_eiYQQEuv-eK9Xmkt-nwU,1216
274
274
  khoj/interface/email/magic_link.html,sha256=EoGKQucfPj3xQrWXhSZAzPFOYCHF_ZX94TWCd1XHl1M,941
275
275
  khoj/interface/email/task.html,sha256=tY7a0gzVeQ2lSQNu7WyXR_s7VYeWTrxWEj1iHVuoVE4,2813
@@ -320,21 +320,21 @@ khoj/processor/content/pdf/pdf_to_entries.py,sha256=GQUvab61okhV9_DK0g2MCrMq8wKp
320
320
  khoj/processor/content/plaintext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
321
321
  khoj/processor/content/plaintext/plaintext_to_entries.py,sha256=wFZwK_zIc7gWbRtO9sOHo9KvfhGAzL9psX_nKWYFduo,4975
322
322
  khoj/processor/conversation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
323
- khoj/processor/conversation/prompts.py,sha256=WokfQopt1bfaGTi0YYAIxrYDI0aCFYhx05vE0IfGokY,48999
324
- khoj/processor/conversation/utils.py,sha256=ziQT2tlGLLqEbFl1BNZY768nuQ0yrudlXbV1wwwT_98,28501
323
+ khoj/processor/conversation/prompts.py,sha256=nSaaXWNCGk7x3gL2aJrT2N-E640l7te_xfoEUQI3WqE,50150
324
+ khoj/processor/conversation/utils.py,sha256=ZbWD43lgEhiWRo9uDmghkR1VHvMNVhk6RXZ5fKzfl2o,28545
325
325
  khoj/processor/conversation/anthropic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
326
326
  khoj/processor/conversation/anthropic/anthropic_chat.py,sha256=8w7oSTBIxcZa6y03Zo2nuQFa2WMiazwK_qfO2q_O-6c,8618
327
- khoj/processor/conversation/anthropic/utils.py,sha256=6_FnsfLRqjkubkfMVmPTEEBzvMUOAccIz5AHV6B9mU8,6623
327
+ khoj/processor/conversation/anthropic/utils.py,sha256=dMhtKzzPv2-PkuxLpaqKlejrFA0zz_mtin4c12m1jF4,7309
328
328
  khoj/processor/conversation/google/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
329
329
  khoj/processor/conversation/google/gemini_chat.py,sha256=MABG3OAqfz-DDp6sHbkHcyM3VTevPOUV6x3iCB__mcc,8819
330
- khoj/processor/conversation/google/utils.py,sha256=-Z5crXL6-xJraEX4qShbI3Y4PAqKi55PEWiEDPSi-LM,10205
330
+ khoj/processor/conversation/google/utils.py,sha256=HOgnd5JY4lr9dUdYX0_IvUs_c1EY7RxV93CyRoiyJ8k,10833
331
331
  khoj/processor/conversation/offline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
332
332
  khoj/processor/conversation/offline/chat_model.py,sha256=SCkloMOcQlC01yE-mYOU_hF5efpq_sDpaOYK6aYxN_c,10941
333
333
  khoj/processor/conversation/offline/utils.py,sha256=51McImxl6u1qgRYvMt7uzsgLGSLq5SMFy74ymlNjIcc,3033
334
334
  khoj/processor/conversation/offline/whisper.py,sha256=DJI-8y8DULO2cQ49m2VOvRyIZ2TxBypc15gM8O3HuMI,470
335
335
  khoj/processor/conversation/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
336
336
  khoj/processor/conversation/openai/gpt.py,sha256=IYv1PAiO1KaD5hCxWKQfzfSBRYR7seMP_kfofuLrexQ,8104
337
- khoj/processor/conversation/openai/utils.py,sha256=4_hEEYdEUu9f_JvgegTkGOJi8oiznLmIzADpTz0MQ9Q,6398
337
+ khoj/processor/conversation/openai/utils.py,sha256=tCg5I3EiQofxbg-V5Zmqz8HGlVFLGxI046Fl77n_aRE,7576
338
338
  khoj/processor/conversation/openai/whisper.py,sha256=zoEeK1LNCg_tzP4xzYi5vRPzNPGuDGzpkrkG7d1LUn4,447
339
339
  khoj/processor/image/generate.py,sha256=i5J51AwlMZbdlHHov-_MAw9bYgdVYmGgFjCYWDfx02s,9120
340
340
  khoj/processor/speech/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -345,14 +345,14 @@ khoj/processor/tools/run_code.py,sha256=i9ce53dw0y5ZNhPorRNYJieIKw6eyrZQX0ABDrWi
345
345
  khoj/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
346
346
  khoj/routers/api.py,sha256=Z-0MqhlbhxR-palz_Kl3CqsC8O91n-xmgj8JNqQ8lv0,28495
347
347
  khoj/routers/api_agents.py,sha256=vHPruCjlQxGBdm0lcmymEb9-aAELqbOplqh21WwD0DQ,9699
348
- khoj/routers/api_chat.py,sha256=oqyogxzXFqeCmw7fOCmLZuIzZGkxhQUKwvcYX8xcRN4,49297
348
+ khoj/routers/api_chat.py,sha256=hqchX_kKcdeMpOxB2EDftyzk8lsRrUGnTtoN4DqBEoU,50400
349
349
  khoj/routers/api_content.py,sha256=WNlB6lVwRW8hHDthO2HypbpPvqrqt9rTU5oMRNknpMU,21070
350
350
  khoj/routers/api_model.py,sha256=KDsxNwHspC94eTcv6l3ehr773EOvgc670UnZLE1WZ4o,3642
351
351
  khoj/routers/api_phone.py,sha256=p9yfc4WeMHDC0hg3aQk60a2VBy8rZPdEnz9wdJ7DzkU,2208
352
352
  khoj/routers/api_subscription.py,sha256=J6xZNZDdOA71vCfethlPfAyfvRBq4HGCBpbsOZ9CWj0,5333
353
353
  khoj/routers/auth.py,sha256=HO54PR-BkWA_iJIktEobUrObcXVYG-00jpnIcEVdR5s,6564
354
354
  khoj/routers/email.py,sha256=SGYNPQvfcvYeHf70F0YqpY0FLMRElF2ZekROXdwGI18,3821
355
- khoj/routers/helpers.py,sha256=eyd_fihVvNRysPdRj3e2dtoc9B5oZVCLye3SLSSlbN8,81646
355
+ khoj/routers/helpers.py,sha256=PY14ukbc7pzl_8p2j2xySRRg755Ll_QHb2iV64dOlBQ,82368
356
356
  khoj/routers/notion.py,sha256=g53xyYFmjr2JnuIrTW2vytbfkiK_UkoRTxqnnLSmD5o,2802
357
357
  khoj/routers/research.py,sha256=SczFMS9a8_Wxhh3n_Zt9CJ-zZugBDAd_WmiZGFa6RR8,16117
358
358
  khoj/routers/storage.py,sha256=tJrwhFRVWv0MHv7V7huMc1Diwm-putZSwnZXJ3tqT_c,2338
@@ -368,17 +368,17 @@ khoj/search_type/text_search.py,sha256=PZzJVCXpeBM795SIqiAKXAxgnCp1NIRiVikm040r1
368
368
  khoj/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
369
369
  khoj/utils/cli.py,sha256=EA7IvWAInUIll8YFTOpQtqLtCQXwphfHi5rJ2TKAdSQ,3757
370
370
  khoj/utils/config.py,sha256=aiOkH0je8A30DAGYTHMRePrgJonFv_i07_7CdhhhcdA,1805
371
- khoj/utils/constants.py,sha256=vjMu-gVRxrTSlxBb1eAXYfRjqf8NchbiWuxDXtQ4G3c,1257
371
+ khoj/utils/constants.py,sha256=Icw4vD_d0rlk2IXi5oqbLVlUtFQYw8BtV7LEIerimjU,2074
372
372
  khoj/utils/fs_syncer.py,sha256=5nqwAZqRk3Nwhkwd8y4IomTPZQmW32GwAqyMzal5KyY,9996
373
- khoj/utils/helpers.py,sha256=tdwRlkI5IqOr07cxw4zKindR3hSn6cGthPYHSXs2BcU,20239
373
+ khoj/utils/helpers.py,sha256=8Z20fl7EVOHyGCInQzt8DPV-K5dwv-fCogm0u03XOEI,21322
374
374
  khoj/utils/initialization.py,sha256=nJtqPUv52SPA6sPHn0_vs1uSBdDihX25Dvvagu81Xbs,13490
375
375
  khoj/utils/jsonl.py,sha256=0Ac_COqr8sLCXntzZtquxuCEVRM2c3yKeDRGhgOBRpQ,1192
376
376
  khoj/utils/models.py,sha256=Q5tcC9-z25sCiub048fLnvZ6_IIO1bcPNxt5payekk0,2009
377
377
  khoj/utils/rawconfig.py,sha256=bQ_MGbBzYt6ZUIsHUwZjaHKDLh6GQ7h-sENkv3fyVbQ,5028
378
378
  khoj/utils/state.py,sha256=KtUEIKAZdGGN_Qr58RS1pgcywgSafun8YIXx-YEclAY,1645
379
379
  khoj/utils/yaml.py,sha256=qy1Tkc61rDMesBw_Cyx2vOR6H-Hngcsm5kYfjwQBwkE,1543
380
- khoj-1.30.2.dev11.dist-info/METADATA,sha256=q8Jc8XRsugfwlUBAVZbIxfjZ4XhIT1OPHv50bNUPgvM,7120
381
- khoj-1.30.2.dev11.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
382
- khoj-1.30.2.dev11.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
383
- khoj-1.30.2.dev11.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
384
- khoj-1.30.2.dev11.dist-info/RECORD,,
380
+ khoj-1.30.2.dev20.dist-info/METADATA,sha256=OtIaLUAJjWVqkauPEFWBhip0ydB-IFi0Ntbm5Bv9pf8,7120
381
+ khoj-1.30.2.dev20.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
382
+ khoj-1.30.2.dev20.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
383
+ khoj-1.30.2.dev20.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
384
+ khoj-1.30.2.dev20.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1210],{51210:function(e,t,i){i.r(t),i.d(t,{default:function(){return f}});var a=i(57437),l=i(2265),n=i(57818),d=i(60266),r=i(50495),s=i(10077),o=i(46613);let c=(0,n.default)(async()=>(await Promise.resolve().then(i.t.bind(i,60266,23))).Excalidraw,{loadableGenerated:{webpack:()=>[60266]},ssr:!1});function f(e){let[t,i]=(0,l.useState)([]),[n,f]=(0,l.useState)(!1),u=e=>void 0!==e.x&&void 0!==e.y&&void 0!==e.id&&void 0!==e.type;return(0,l.useEffect)(()=>{onkeydown=n?e=>{"Escape"===e.key&&(f(!1),window.dispatchEvent(new Event("resize")))}:null},[n]),(0,l.useEffect)(()=>{let t=[];for(let i of e.data)u(i)&&t.push(i);let a=[];for(let e of t)if("frame"!==e.type){if("arrow"===e.type){let i=t.find(t=>{var i;return t.id===(null===(i=e.start)||void 0===i?void 0:i.id)}),l=t.find(t=>{var i;return t.id===(null===(i=e.end)||void 0===i?void 0:i.id)});i&&l&&a.push(e)}else a.push(e)}for(let e of t)if("frame"===e.type){var l;let t=null===(l=e.children)||void 0===l?void 0:l.map(e=>a.find(t=>t.id===e)),i=null==t?void 0:t.map(e=>null==e?void 0:e.id).filter(e=>void 0!==e);if(void 0===i||0===i.length)continue;a.push({...e,children:i})}i((0,d.convertToExcalidrawElements)(a))},[]),(0,a.jsx)("div",{className:"relative",children:(0,a.jsxs)("div",{className:"".concat(n?"fixed inset-0 bg-black bg-opacity-50 backdrop-blur-sm z-50 flex items-center justify-center":""),children:[(0,a.jsx)(r.z,{onClick:()=>{f(!n),window.dispatchEvent(new Event("resize"))},variant:"outline",className:"".concat(n?"absolute top-2 left-2 z-[60]":""),children:n?(0,a.jsx)(s.f,{className:"h-4 w-4"}):(0,a.jsx)(o.t,{className:"h-4 w-4"})}),(0,a.jsx)("div",{className:"\n ".concat(n?"w-[80vw] h-[80vh]":"w-full h-[500px]","\n bg-white overflow-hidden rounded-lg relative\n "),children:(0,a.jsx)(c,{initialData:{elements:t,appState:{zenModeEnabled:!0},scrollToContent:!0},theme:"dark"===localStorage.getItem("theme")?"dark":"light",validateEmbeddable:!0,renderTopRightUI:(e,t)=>(0,a.jsx)(a.Fragment,{})})})]})})}}}]);