khoj 1.41.1.dev97__py3-none-any.whl → 1.41.1.dev107__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 (55) hide show
  1. khoj/database/models/__init__.py +3 -0
  2. khoj/interface/compiled/404/index.html +2 -2
  3. khoj/interface/compiled/_next/static/chunks/5477-b91e9926cfc3095c.js +1 -0
  4. khoj/interface/compiled/_next/static/chunks/app/agents/layout-e49165209d2e406c.js +1 -0
  5. khoj/interface/compiled/_next/static/chunks/app/agents/{page-ceeb9a91edea74ce.js → page-c9ceb9b94e24b94a.js} +1 -1
  6. khoj/interface/compiled/_next/static/chunks/app/automations/{page-e3cb78747ab98cc7.js → page-3dc59a0df3827dc7.js} +1 -1
  7. khoj/interface/compiled/_next/static/chunks/app/chat/layout-d5ae861e1ade9d08.js +1 -0
  8. khoj/interface/compiled/_next/static/chunks/app/chat/{page-7e780dc11eb5e5d3.js → page-2b27c7118d8d5a16.js} +1 -1
  9. khoj/interface/compiled/_next/static/chunks/app/{page-a4053e1bb578b2ce.js → page-38f1f125d7aeb4c7.js} +1 -1
  10. khoj/interface/compiled/_next/static/chunks/app/search/layout-f5881c7ae3ba0795.js +1 -0
  11. khoj/interface/compiled/_next/static/chunks/app/search/{page-8973da2f4c076fe1.js → page-26d4492fb1200e0e.js} +1 -1
  12. khoj/interface/compiled/_next/static/chunks/app/settings/{page-375136dbb400525b.js → page-bf1a4e488b29fceb.js} +1 -1
  13. khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-64a53f8ec4afa6b3.js +1 -0
  14. khoj/interface/compiled/_next/static/chunks/app/share/chat/{page-384b54fc953b18f2.js → page-a1f10c96366c3a4f.js} +1 -1
  15. khoj/interface/compiled/_next/static/chunks/{webpack-21f76f7f59582bc7.js → webpack-c6bde5961098facd.js} +1 -1
  16. khoj/interface/compiled/_next/static/css/{fca983d49c3dd1a3.css → 0db53bacf81896f5.css} +1 -1
  17. khoj/interface/compiled/_next/static/css/bb7ea98028b368f3.css +1 -0
  18. khoj/interface/compiled/_next/static/css/ee66643a6a5bf71c.css +1 -0
  19. khoj/interface/compiled/agents/index.html +2 -2
  20. khoj/interface/compiled/agents/index.txt +2 -2
  21. khoj/interface/compiled/automations/index.html +2 -2
  22. khoj/interface/compiled/automations/index.txt +2 -2
  23. khoj/interface/compiled/chat/index.html +2 -2
  24. khoj/interface/compiled/chat/index.txt +2 -2
  25. khoj/interface/compiled/index.html +2 -2
  26. khoj/interface/compiled/index.txt +2 -2
  27. khoj/interface/compiled/search/index.html +2 -2
  28. khoj/interface/compiled/search/index.txt +2 -2
  29. khoj/interface/compiled/settings/index.html +2 -2
  30. khoj/interface/compiled/settings/index.txt +2 -2
  31. khoj/interface/compiled/share/chat/index.html +2 -2
  32. khoj/interface/compiled/share/chat/index.txt +2 -2
  33. khoj/processor/conversation/anthropic/anthropic_chat.py +1 -1
  34. khoj/processor/conversation/openai/gpt.py +1 -1
  35. khoj/processor/conversation/utils.py +49 -36
  36. khoj/processor/operator/grounding_agent_uitars.py +2 -2
  37. khoj/routers/api_chat.py +96 -25
  38. khoj/routers/api_model.py +3 -3
  39. khoj/routers/helpers.py +7 -3
  40. khoj/routers/research.py +15 -4
  41. khoj/utils/rawconfig.py +1 -0
  42. {khoj-1.41.1.dev97.dist-info → khoj-1.41.1.dev107.dist-info}/METADATA +1 -1
  43. {khoj-1.41.1.dev97.dist-info → khoj-1.41.1.dev107.dist-info}/RECORD +48 -48
  44. khoj/interface/compiled/_next/static/chunks/5477-77ce5c6f468d6c25.js +0 -1
  45. khoj/interface/compiled/_next/static/chunks/app/agents/layout-4e2a134ec26aa606.js +0 -1
  46. khoj/interface/compiled/_next/static/chunks/app/chat/layout-ad4d1792ab1a4108.js +0 -1
  47. khoj/interface/compiled/_next/static/chunks/app/search/layout-c02531d586972d7d.js +0 -1
  48. khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-e8e5db7830bf3f47.js +0 -1
  49. khoj/interface/compiled/_next/static/css/37a73b87f02df402.css +0 -1
  50. khoj/interface/compiled/_next/static/css/f29752d6e1be7624.css +0 -1
  51. /khoj/interface/compiled/_next/static/{o6zlo73DbD2lS92jWHS8o → y_k1yn7bI1CgM5ZfW7jUq}/_buildManifest.js +0 -0
  52. /khoj/interface/compiled/_next/static/{o6zlo73DbD2lS92jWHS8o → y_k1yn7bI1CgM5ZfW7jUq}/_ssgManifest.js +0 -0
  53. {khoj-1.41.1.dev97.dist-info → khoj-1.41.1.dev107.dist-info}/WHEEL +0 -0
  54. {khoj-1.41.1.dev97.dist-info → khoj-1.41.1.dev107.dist-info}/entry_points.txt +0 -0
  55. {khoj-1.41.1.dev97.dist-info → khoj-1.41.1.dev107.dist-info}/licenses/LICENSE +0 -0
khoj/routers/api_chat.py CHANGED
@@ -682,11 +682,13 @@ async def chat(
682
682
  timezone = body.timezone
683
683
  raw_images = body.images
684
684
  raw_query_files = body.files
685
+ interrupt_flag = body.interrupt
685
686
 
686
687
  async def event_generator(q: str, images: list[str]):
687
688
  start_time = time.perf_counter()
688
689
  ttft = None
689
690
  chat_metadata: dict = {}
691
+ conversation = None
690
692
  user: KhojUser = request.user.object
691
693
  is_subscribed = has_required_scope(request, ["premium"])
692
694
  q = unquote(q)
@@ -720,6 +722,20 @@ async def chat(
720
722
  for file in raw_query_files:
721
723
  query_files[file.name] = file.content
722
724
 
725
+ research_results: List[InformationCollectionIteration] = []
726
+ online_results: Dict = dict()
727
+ code_results: Dict = dict()
728
+ operator_results: Dict[str, str] = {}
729
+ compiled_references: List[Any] = []
730
+ inferred_queries: List[Any] = []
731
+ attached_file_context = gather_raw_query_files(query_files)
732
+
733
+ generated_images: List[str] = []
734
+ generated_files: List[FileAttachment] = []
735
+ generated_mermaidjs_diagram: str = None
736
+ generated_asset_results: Dict = dict()
737
+ program_execution_context: List[str] = []
738
+
723
739
  # Create a task to monitor for disconnections
724
740
  disconnect_monitor_task = None
725
741
 
@@ -727,8 +743,34 @@ async def chat(
727
743
  try:
728
744
  msg = await request.receive()
729
745
  if msg["type"] == "http.disconnect":
730
- logger.debug(f"User {user} disconnected from {common.client} client.")
746
+ logger.debug(f"Request cancelled. User {user} disconnected from {common.client} client.")
731
747
  cancellation_event.set()
748
+ # ensure partial chat state saved on interrupt
749
+ # shield the save against task cancellation
750
+ if conversation:
751
+ await asyncio.shield(
752
+ save_to_conversation_log(
753
+ q,
754
+ chat_response="",
755
+ user=user,
756
+ meta_log=meta_log,
757
+ compiled_references=compiled_references,
758
+ online_results=online_results,
759
+ code_results=code_results,
760
+ operator_results=operator_results,
761
+ research_results=research_results,
762
+ inferred_queries=inferred_queries,
763
+ client_application=request.user.client_app,
764
+ conversation_id=conversation_id,
765
+ query_images=uploaded_images,
766
+ train_of_thought=train_of_thought,
767
+ raw_query_files=raw_query_files,
768
+ generated_images=generated_images,
769
+ raw_generated_files=generated_asset_results,
770
+ generated_mermaidjs_diagram=generated_mermaidjs_diagram,
771
+ tracer=tracer,
772
+ )
773
+ )
732
774
  except Exception as e:
733
775
  logger.error(f"Error in disconnect monitor: {e}")
734
776
 
@@ -746,7 +788,6 @@ async def chat(
746
788
  nonlocal ttft, train_of_thought
747
789
  event_delimiter = "␃🔚␗"
748
790
  if cancellation_event.is_set():
749
- logger.debug(f"User {user} disconnected from {common.client} client. Setting cancellation event.")
750
791
  return
751
792
  try:
752
793
  if event_type == ChatEvent.END_LLM_RESPONSE:
@@ -770,9 +811,6 @@ async def chat(
770
811
  yield data
771
812
  elif event_type == ChatEvent.REFERENCES or ChatEvent.METADATA or stream:
772
813
  yield json.dumps({"type": event_type.value, "data": data}, ensure_ascii=False)
773
- except asyncio.CancelledError as e:
774
- if cancellation_event.is_set():
775
- logger.debug(f"Request cancelled. User {user} disconnected from {common.client} client: {e}.")
776
814
  except Exception as e:
777
815
  if not cancellation_event.is_set():
778
816
  logger.error(
@@ -883,21 +921,53 @@ async def chat(
883
921
  user_message_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
884
922
  meta_log = conversation.conversation_log
885
923
 
886
- researched_results = ""
887
- online_results: Dict = dict()
888
- code_results: Dict = dict()
889
- operator_results: Dict[str, str] = {}
890
- generated_asset_results: Dict = dict()
891
- ## Extract Document References
892
- compiled_references: List[Any] = []
893
- inferred_queries: List[Any] = []
894
- file_filters = conversation.file_filters if conversation and conversation.file_filters else []
895
- attached_file_context = gather_raw_query_files(query_files)
924
+ # If interrupt flag is set, wait for the previous turn to be saved before proceeding
925
+ if interrupt_flag:
926
+ max_wait_time = 20.0 # seconds
927
+ wait_interval = 0.3 # seconds
928
+ wait_start = wait_current = time.time()
929
+ while wait_current - wait_start < max_wait_time:
930
+ # Refresh conversation to check if interrupted message saved to DB
931
+ conversation = await ConversationAdapters.aget_conversation_by_user(
932
+ user,
933
+ client_application=request.user.client_app,
934
+ conversation_id=conversation_id,
935
+ )
936
+ if (
937
+ conversation
938
+ and conversation.messages
939
+ and conversation.messages[-1].by == "khoj"
940
+ and not conversation.messages[-1].message
941
+ ):
942
+ logger.info(f"Detected interrupted message save to conversation {conversation_id}.")
943
+ break
944
+ await asyncio.sleep(wait_interval)
945
+ wait_current = time.time()
896
946
 
897
- generated_images: List[str] = []
898
- generated_files: List[FileAttachment] = []
899
- generated_mermaidjs_diagram: str = None
900
- program_execution_context: List[str] = []
947
+ if wait_current - wait_start >= max_wait_time:
948
+ logger.warning(
949
+ f"Timeout waiting to load interrupted context from conversation {conversation_id}. Proceed without previous context."
950
+ )
951
+
952
+ # If interrupted message in DB
953
+ if (
954
+ conversation
955
+ and conversation.messages
956
+ and conversation.messages[-1].by == "khoj"
957
+ and not conversation.messages[-1].message
958
+ ):
959
+ # Populate context from interrupted message
960
+ last_message = conversation.messages[-1]
961
+ online_results = {key: val.model_dump() for key, val in last_message.onlineContext.items() or []}
962
+ code_results = {key: val.model_dump() for key, val in last_message.codeContext.items() or []}
963
+ operator_results = last_message.operatorContext or {}
964
+ compiled_references = [ref.model_dump() for ref in last_message.context or []]
965
+ research_results = [
966
+ InformationCollectionIteration(**iter_dict) for iter_dict in last_message.researchContext or []
967
+ ]
968
+ # Drop the interrupted message from conversation history
969
+ meta_log["chat"].pop()
970
+ logger.info(f"Loaded interrupted partial context from conversation {conversation_id}.")
901
971
 
902
972
  if conversation_commands == [ConversationCommand.Default]:
903
973
  try:
@@ -936,6 +1006,7 @@ async def chat(
936
1006
  return
937
1007
 
938
1008
  defiltered_query = defilter_query(q)
1009
+ file_filters = conversation.file_filters if conversation and conversation.file_filters else []
939
1010
 
940
1011
  if conversation_commands == [ConversationCommand.Research]:
941
1012
  async for research_result in execute_information_collection(
@@ -943,12 +1014,13 @@ async def chat(
943
1014
  query=defiltered_query,
944
1015
  conversation_id=conversation_id,
945
1016
  conversation_history=meta_log,
1017
+ previous_iterations=research_results,
946
1018
  query_images=uploaded_images,
947
1019
  agent=agent,
948
1020
  send_status_func=partial(send_event, ChatEvent.STATUS),
949
1021
  user_name=user_name,
950
1022
  location=location,
951
- file_filters=conversation.file_filters if conversation else [],
1023
+ file_filters=file_filters,
952
1024
  query_files=attached_file_context,
953
1025
  tracer=tracer,
954
1026
  cancellation_event=cancellation_event,
@@ -963,17 +1035,16 @@ async def chat(
963
1035
  compiled_references.extend(research_result.context)
964
1036
  if research_result.operatorContext:
965
1037
  operator_results.update(research_result.operatorContext)
966
- researched_results += research_result.summarizedResult
1038
+ research_results.append(research_result)
967
1039
 
968
1040
  else:
969
1041
  yield research_result
970
1042
 
971
1043
  # researched_results = await extract_relevant_info(q, researched_results, agent)
972
1044
  if state.verbose > 1:
973
- logger.debug(f"Researched Results: {researched_results}")
1045
+ logger.debug(f'Researched Results: {"".join(r.summarizedResult for r in research_results)}')
974
1046
 
975
1047
  used_slash_summarize = conversation_commands == [ConversationCommand.Summarize]
976
- file_filters = conversation.file_filters if conversation else []
977
1048
  # Skip trying to summarize if
978
1049
  if (
979
1050
  # summarization intent was inferred
@@ -1362,7 +1433,7 @@ async def chat(
1362
1433
 
1363
1434
  # Check if the user has disconnected
1364
1435
  if cancellation_event.is_set():
1365
- logger.debug(f"User {user} disconnected from {common.client} client. Stopping LLM response.")
1436
+ logger.debug(f"Stopping LLM response to user {user} on {common.client} client.")
1366
1437
  # Cancel the disconnect monitor task if it is still running
1367
1438
  await cancel_disconnect_monitor()
1368
1439
  return
@@ -1379,13 +1450,13 @@ async def chat(
1379
1450
  online_results,
1380
1451
  code_results,
1381
1452
  operator_results,
1453
+ research_results,
1382
1454
  inferred_queries,
1383
1455
  conversation_commands,
1384
1456
  user,
1385
1457
  request.user.client_app,
1386
1458
  location,
1387
1459
  user_name,
1388
- researched_results,
1389
1460
  uploaded_images,
1390
1461
  train_of_thought,
1391
1462
  attached_file_context,
khoj/routers/api_model.py CHANGED
@@ -72,7 +72,7 @@ async def update_chat_model(
72
72
  if chat_model is None:
73
73
  return Response(status_code=404, content=json.dumps({"status": "error", "message": "Chat model not found"}))
74
74
  if not subscribed and chat_model.price_tier != PriceTier.FREE:
75
- raise Response(
75
+ return Response(
76
76
  status_code=403,
77
77
  content=json.dumps({"status": "error", "message": "Subscribe to switch to this chat model"}),
78
78
  )
@@ -108,7 +108,7 @@ async def update_voice_model(
108
108
  if voice_model is None:
109
109
  return Response(status_code=404, content=json.dumps({"status": "error", "message": "Voice model not found"}))
110
110
  if not subscribed and voice_model.price_tier != PriceTier.FREE:
111
- raise Response(
111
+ return Response(
112
112
  status_code=403,
113
113
  content=json.dumps({"status": "error", "message": "Subscribe to switch to this voice model"}),
114
114
  )
@@ -143,7 +143,7 @@ async def update_paint_model(
143
143
  if image_model is None:
144
144
  return Response(status_code=404, content=json.dumps({"status": "error", "message": "Image model not found"}))
145
145
  if not subscribed and image_model.price_tier != PriceTier.FREE:
146
- raise Response(
146
+ return Response(
147
147
  status_code=403,
148
148
  content=json.dumps({"status": "error", "message": "Subscribe to switch to this image model"}),
149
149
  )
khoj/routers/helpers.py CHANGED
@@ -94,6 +94,7 @@ from khoj.processor.conversation.openai.gpt import (
94
94
  )
95
95
  from khoj.processor.conversation.utils import (
96
96
  ChatEvent,
97
+ InformationCollectionIteration,
97
98
  ResponseWithThought,
98
99
  clean_json,
99
100
  clean_mermaidjs,
@@ -1355,13 +1356,13 @@ async def agenerate_chat_response(
1355
1356
  online_results: Dict[str, Dict] = {},
1356
1357
  code_results: Dict[str, Dict] = {},
1357
1358
  operator_results: Dict[str, str] = {},
1359
+ research_results: List[InformationCollectionIteration] = [],
1358
1360
  inferred_queries: List[str] = [],
1359
1361
  conversation_commands: List[ConversationCommand] = [ConversationCommand.Default],
1360
1362
  user: KhojUser = None,
1361
1363
  client_application: ClientApplication = None,
1362
1364
  location_data: LocationData = None,
1363
1365
  user_name: Optional[str] = None,
1364
- meta_research: str = "",
1365
1366
  query_images: Optional[List[str]] = None,
1366
1367
  train_of_thought: List[Any] = [],
1367
1368
  query_files: str = None,
@@ -1391,6 +1392,7 @@ async def agenerate_chat_response(
1391
1392
  online_results=online_results,
1392
1393
  code_results=code_results,
1393
1394
  operator_results=operator_results,
1395
+ research_results=research_results,
1394
1396
  inferred_queries=inferred_queries,
1395
1397
  client_application=client_application,
1396
1398
  conversation_id=str(conversation.id),
@@ -1405,8 +1407,10 @@ async def agenerate_chat_response(
1405
1407
 
1406
1408
  query_to_run = q
1407
1409
  deepthought = False
1408
- if meta_research:
1409
- query_to_run = f"<query>{q}</query>\n<collected_research>\n{meta_research}\n</collected_research>"
1410
+ if research_results:
1411
+ compiled_research = "".join([r.summarizedResult for r in research_results if r.summarizedResult])
1412
+ if compiled_research:
1413
+ query_to_run = f"<query>{q}</query>\n<collected_research>\n{compiled_research}\n</collected_research>"
1410
1414
  compiled_references = []
1411
1415
  online_results = {}
1412
1416
  code_results = {}
khoj/routers/research.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
  import logging
3
3
  import os
4
+ from copy import deepcopy
4
5
  from datetime import datetime
5
6
  from enum import Enum
6
7
  from typing import Callable, Dict, List, Optional, Type
@@ -141,7 +142,7 @@ async def apick_next_tool(
141
142
  query = f"[placeholder for user attached images]\n{query}"
142
143
 
143
144
  # Construct chat history with user and iteration history with researcher agent for context
144
- previous_iterations_history = construct_iteration_history(query, previous_iterations, prompts.previous_iteration)
145
+ previous_iterations_history = construct_iteration_history(previous_iterations, prompts.previous_iteration, query)
145
146
  iteration_chat_log = {"chat": conversation_history.get("chat", []) + previous_iterations_history}
146
147
 
147
148
  # Plan function execution for the next tool
@@ -212,6 +213,7 @@ async def execute_information_collection(
212
213
  query: str,
213
214
  conversation_id: str,
214
215
  conversation_history: dict,
216
+ previous_iterations: List[InformationCollectionIteration],
215
217
  query_images: List[str],
216
218
  agent: Agent = None,
217
219
  send_status_func: Optional[Callable] = None,
@@ -227,11 +229,20 @@ async def execute_information_collection(
227
229
  max_webpages_to_read = 1
228
230
  current_iteration = 0
229
231
  MAX_ITERATIONS = int(os.getenv("KHOJ_RESEARCH_ITERATIONS", 5))
230
- previous_iterations: List[InformationCollectionIteration] = []
232
+
233
+ # Incorporate previous partial research into current research chat history
234
+ research_conversation_history = deepcopy(conversation_history)
235
+ if current_iteration := len(previous_iterations) > 0:
236
+ logger.info(f"Continuing research with the previous {len(previous_iterations)} iteration results.")
237
+ previous_iterations_history = construct_iteration_history(previous_iterations, prompts.previous_iteration)
238
+ research_conversation_history["chat"] = (
239
+ research_conversation_history.get("chat", []) + previous_iterations_history
240
+ )
241
+
231
242
  while current_iteration < MAX_ITERATIONS:
232
243
  # Check for cancellation at the start of each iteration
233
244
  if cancellation_event and cancellation_event.is_set():
234
- logger.debug(f"User {user} disconnected client. Research cancelled.")
245
+ logger.debug(f"Research cancelled. User {user} disconnected client.")
235
246
  break
236
247
 
237
248
  online_results: Dict = dict()
@@ -243,7 +254,7 @@ async def execute_information_collection(
243
254
 
244
255
  async for result in apick_next_tool(
245
256
  query,
246
- conversation_history,
257
+ research_conversation_history,
247
258
  user,
248
259
  location,
249
260
  user_name,
khoj/utils/rawconfig.py CHANGED
@@ -168,6 +168,7 @@ class ChatRequestBody(BaseModel):
168
168
  images: Optional[list[str]] = None
169
169
  files: Optional[list[FileAttachment]] = []
170
170
  create_new: Optional[bool] = False
171
+ interrupt: Optional[bool] = False
171
172
 
172
173
 
173
174
  class Entry:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: khoj
3
- Version: 1.41.1.dev97
3
+ Version: 1.41.1.dev107
4
4
  Summary: Your Second Brain
5
5
  Project-URL: Homepage, https://khoj.dev
6
6
  Project-URL: Documentation, https://docs.khoj.dev
@@ -122,22 +122,22 @@ khoj/database/migrations/0087_alter_aimodelapi_api_key.py,sha256=CqZ3iqt3CwiCwkD
122
122
  khoj/database/migrations/0088_ratelimitrecord.py,sha256=CxlkfbA8eTO57pv0AvJYfGRp5eOe81iMJgpRoTFGVls,1018
123
123
  khoj/database/migrations/0089_chatmodel_price_tier_and_more.py,sha256=EJ1Yf6MMzhGMwJOS3AECaU6ks4NfRW0utyDa7lreNwQ,1211
124
124
  khoj/database/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
- khoj/database/models/__init__.py,sha256=v0hza7YpBh3j5gcOOnu_tnzQ-u86NDneWbTr9x6st8o,30995
125
+ khoj/database/models/__init__.py,sha256=pWW2G-iOM-yrOPwGWCabBMsof7I-fHAidND_mB7FUGI,31106
126
126
  khoj/interface/compiled/agents.svg,sha256=yFCRwIM-Qawa0C5ggAo3ekb-Q1ElmotBOKIGhtfIQqM,1722
127
127
  khoj/interface/compiled/automation.svg,sha256=o7L2XYwJWRSMvl8h6TBv6Pt28RTRVMHqF04EPY0AFj0,1467
128
128
  khoj/interface/compiled/chat.svg,sha256=l2JoYRRgk201adTTdvJ-buKUrc0WGfsudix5xEvtM3A,2424
129
129
  khoj/interface/compiled/close.svg,sha256=hQ2iFLkNzHk0_iyTrSbwnWAeXYlgA-c2Eof2Iqh76n4,417
130
130
  khoj/interface/compiled/copy-button-success.svg,sha256=byqWAYD3Pn9IOXRjOKudJ-TJbP2UESbQGvtLWazNGjY,829
131
131
  khoj/interface/compiled/copy-button.svg,sha256=05bKM2eRxksfBlAPT7yMaoNJEk85bZCxQg67EVrPeHo,669
132
- khoj/interface/compiled/index.html,sha256=-UonAnnR0puYb34CfbSJdmyOkfZJqg2u74JvOBYUNbA,53043
133
- khoj/interface/compiled/index.txt,sha256=N7oVFIgCcD9AfUuasZqrnXvUl1kdbMljL0mgkWlSLY4,7616
132
+ khoj/interface/compiled/index.html,sha256=1AxzoyGK4_8AvEqJx30UM2jx64hXqp1A2KwXa0LIYzM,53353
133
+ khoj/interface/compiled/index.txt,sha256=Cq3dT2-49ThbCg1uOOYHspG9Hc-Y8NF3z7vhObYcaxA,7749
134
134
  khoj/interface/compiled/khoj.webmanifest,sha256=9wOK2BMS6xH5NKd2eaUgTLg9WepIxB2K2U33KU89LD8,2543
135
135
  khoj/interface/compiled/logo.svg,sha256=_QCKVYM4WT2Qhcf7aVFImjq_s5CwjynGXYAOgI7yf8w,8059
136
136
  khoj/interface/compiled/send.svg,sha256=VdavOWkVddcwcGcld6pdfmwfz7S91M-9O28cfeiKJkM,635
137
137
  khoj/interface/compiled/share.svg,sha256=91lwo75PvMDrgocuZQab6EQ62CxRbubh9Bhw7CWMKbg,1221
138
138
  khoj/interface/compiled/thumbs-down.svg,sha256=JGNl-DwoRmH2XFMPWwFFklmoYtKxaQbkLE3nuYKe8ZY,1019
139
139
  khoj/interface/compiled/thumbs-up.svg,sha256=yS1wxTRtiztkN-6nZciLoYQUB_KTYNPV8xFRwH2TQFw,1036
140
- khoj/interface/compiled/404/index.html,sha256=9VgZ83Vtuw0OaR_ufcvIf3vh-7IobcoX9jWbV9AaqkY,17097
140
+ khoj/interface/compiled/404/index.html,sha256=UDIgi5Bvm8d1RIhX_W3UPGko1vA4FvqOr8Dvrv3pzQA,17097
141
141
  khoj/interface/compiled/_next/static/chunks/1243.ea2826fb35adb15a.js,sha256=Y6ceAwyTH4HSGDvBRoBB-RVXRCzGGr8NSPcspYF5OM8,182
142
142
  khoj/interface/compiled/_next/static/chunks/133.392ae90c3b2a67f2.js,sha256=IK-mb9ZlF6uJUdU8AuXsppc99tFL8svJvZtKNZGNtcY,411
143
143
  khoj/interface/compiled/_next/static/chunks/1592.b069bdb7aaddd2eb.js,sha256=VUaP2gjX3W9tA9pOH_VIPG_2BIg7Wk1AICrfU5iHgrk,71096
@@ -168,7 +168,7 @@ khoj/interface/compiled/_next/static/chunks/5279.85d537880b8041ae.js,sha256=3Vvd
168
168
  khoj/interface/compiled/_next/static/chunks/5402.b9460f1b16b57e92.js,sha256=TFB5N1RYbKelRJXW70T4tT0lEjB3u7RS5lItHOfX-TU,24369
169
169
  khoj/interface/compiled/_next/static/chunks/5427-442f34b514b9fc26.js,sha256=QaxSADflROkzhUDs3OPtt8mpaFIc_3UtBjSS8aTWpzE,31914
170
170
  khoj/interface/compiled/_next/static/chunks/5473-921e17a6177f9729.js,sha256=Xl8sKJ3GbVq0N5RD-rvjZxkN0zHQQw5Ix8jltbMwLhc,46052
171
- khoj/interface/compiled/_next/static/chunks/5477-77ce5c6f468d6c25.js,sha256=PNQSj4uFNd4qGucpaFYVuL6Sp3rVsO2EhFMg4qma354,14591
171
+ khoj/interface/compiled/_next/static/chunks/5477-b91e9926cfc3095c.js,sha256=kxYBij2B8d2jKdR5j0ppma3VGmOoYkQ9dQHVg9-VMvM,14601
172
172
  khoj/interface/compiled/_next/static/chunks/5555.f7cf9795d675de51.js,sha256=uJjZjASQiVGqPR7_Cn3RFZOe9cLnMaOEHYHMyssfyzI,100164
173
173
  khoj/interface/compiled/_next/static/chunks/5621-415bdc6c7b57af11.js,sha256=cvNw0hIbmSGZAp--CTZKvnf4bNjyvAMY5WKsHVNy6cE,24074
174
174
  khoj/interface/compiled/_next/static/chunks/58.f4bd8a3c9d88f5fe.js,sha256=8j1vUdozD7ROLnHcr7k5Z9emrhg2ukJ60e6fRBIymxo,31287
@@ -203,32 +203,32 @@ khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js,sha256
203
203
  khoj/interface/compiled/_next/static/chunks/main-876327ac335776ab.js,sha256=JkQUmA9vh1B4VVGF5dbZ8Kun0AnIVUbZr5IBK90T4Zs,111290
204
204
  khoj/interface/compiled/_next/static/chunks/main-app-de1f09df97a3cfc7.js,sha256=bqnztujKItXfFBzQlaBmDZyfJpQt_M93CXOuchJfpD0,471
205
205
  khoj/interface/compiled/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
206
- khoj/interface/compiled/_next/static/chunks/webpack-21f76f7f59582bc7.js,sha256=9xBFH5H6MJpn48quHaXMnSMEQaTksslm7QCDXX--CL4,4891
206
+ khoj/interface/compiled/_next/static/chunks/webpack-c6bde5961098facd.js,sha256=cnc91CGfuR_tfaK_H83C6r2Fp4WZEfCBaruUKRkMRDM,4891
207
207
  khoj/interface/compiled/_next/static/chunks/app/layout-baa6e7974e560a7a.js,sha256=7JZS2Pr995Lwu3FeQpAvheLS1Bn5w5HOFsecV2_kyQA,3880
208
- khoj/interface/compiled/_next/static/chunks/app/page-a4053e1bb578b2ce.js,sha256=ODjjug1NwixStALsW2Wu6RarPq_KBMnIOoKqKJ8Kapk,31218
208
+ khoj/interface/compiled/_next/static/chunks/app/page-38f1f125d7aeb4c7.js,sha256=zqvrdTNFKHk3LibIMCfpi2DztCy3YpHPQlvk7ogqYdc,31223
209
209
  khoj/interface/compiled/_next/static/chunks/app/_not-found/page-0ec97c4970898f2d.js,sha256=zElhiTkdu2JqrEvJ8Lrxh4HCyfLmPllBHHWOuDtrVlw,1755
210
- khoj/interface/compiled/_next/static/chunks/app/agents/layout-4e2a134ec26aa606.js,sha256=B3HJ6CKzJccEIOk54Erl1FtKUxGJq2p-ch932X1vjwE,180
211
- khoj/interface/compiled/_next/static/chunks/app/agents/page-ceeb9a91edea74ce.js,sha256=kvQaR_nbiCgH5koDFYD4fkceNsScyMVdwvVufMH0Ax8,18314
210
+ khoj/interface/compiled/_next/static/chunks/app/agents/layout-e49165209d2e406c.js,sha256=WFG6nsdtjnYHsKazIx5-xBXemVzEKXfW_U6Q9dnc7CU,180
211
+ khoj/interface/compiled/_next/static/chunks/app/agents/page-c9ceb9b94e24b94a.js,sha256=VtUxhOK9QWUWn2qQ4Q2crOdpoWQNtSIppFog4VqT90M,18319
212
212
  khoj/interface/compiled/_next/static/chunks/app/automations/layout-7f5c33a70e46b3af.js,sha256=s2wHeQ-ai9rKyU9EjOGY1Yo51L4ZEkjLtML85BqN3Zc,5143
213
- khoj/interface/compiled/_next/static/chunks/app/automations/page-e3cb78747ab98cc7.js,sha256=CKuBpLxbzqBbCgJ2zbiuDf8Z1UGwEOA3hgnuZEjvpgA,34831
214
- khoj/interface/compiled/_next/static/chunks/app/chat/layout-ad4d1792ab1a4108.js,sha256=g815zvSZenVssWcOYjyqAOPDjTCa359nqspXeIsXQ5A,180
215
- khoj/interface/compiled/_next/static/chunks/app/chat/page-7e780dc11eb5e5d3.js,sha256=AyLrqaCK4IJIsY2YJXVg9-QSgIMqkcgtuVogEIsB2Kc,28542
216
- khoj/interface/compiled/_next/static/chunks/app/search/layout-c02531d586972d7d.js,sha256=VQACqzXZcJUaa3W_0wHsrdLP22pj8yqeAOGBQfVnQxw,180
217
- khoj/interface/compiled/_next/static/chunks/app/search/page-8973da2f4c076fe1.js,sha256=fD2_a9jptevkZ7Jda0FUp5kTINLef8NXqojbD3cCmJY,32714
213
+ khoj/interface/compiled/_next/static/chunks/app/automations/page-3dc59a0df3827dc7.js,sha256=ITcb5ZxvXH5DMA1_tFb0gilqRfAF6WvU6GP-X9gHq74,34836
214
+ khoj/interface/compiled/_next/static/chunks/app/chat/layout-d5ae861e1ade9d08.js,sha256=oe6TgLOEOch5Nr3Z-DEdMIp3MD5vd0rH7dTp-mdEXYg,180
215
+ khoj/interface/compiled/_next/static/chunks/app/chat/page-2b27c7118d8d5a16.js,sha256=XdqWNGAhETLSIiDCddufPz0qLucrv_rPkjDKySXisjk,28645
216
+ khoj/interface/compiled/_next/static/chunks/app/search/layout-f5881c7ae3ba0795.js,sha256=Bm4Y73ylR-j9_LdKXVUjgLppZJ6JRdLTUgYAsZCOBkQ,180
217
+ khoj/interface/compiled/_next/static/chunks/app/search/page-26d4492fb1200e0e.js,sha256=OMP4Lt2KSMW-H1QmxlwIaK5lX6L50EKWld9ocEK1Txw,32714
218
218
  khoj/interface/compiled/_next/static/chunks/app/settings/layout-8a22f370d3eaeed3.js,sha256=dIfmM5C_Al-Zh_uqaJmniSxjXbu3LqPzrEw4SQ7vs0I,6132
219
- khoj/interface/compiled/_next/static/chunks/app/settings/page-375136dbb400525b.js,sha256=iAbQGhrtD48JgSFqhl92QZK-qgN2WRRQDoVb_qlxCuo,27893
220
- khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-e8e5db7830bf3f47.js,sha256=rcoit2AQboqPwZMTVlVhz1AbyHRJOs-xNMTdYonejCU,180
221
- khoj/interface/compiled/_next/static/chunks/app/share/chat/page-384b54fc953b18f2.js,sha256=jpxu_SEQWxeLOPVvCZJ4vtrMlBEdEYvdGzn5Lhhk9SI,5563
219
+ khoj/interface/compiled/_next/static/chunks/app/settings/page-bf1a4e488b29fceb.js,sha256=G5IbKe1DHQwrjMj12cQJH_QVHR7d0pn1hGsLX50BNnA,27898
220
+ khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-64a53f8ec4afa6b3.js,sha256=vSWDZtrfHaKt9-zHQXCliMs5g3Ivwli2qaH83lo6x_4,180
221
+ khoj/interface/compiled/_next/static/chunks/app/share/chat/page-a1f10c96366c3a4f.js,sha256=d_GXLAPUwQkrvFJ2GlJRV3rG37PGp_qFe6gerxX0MrA,5568
222
222
  khoj/interface/compiled/_next/static/chunks/pages/_app-3c9ca398d360b709.js,sha256=UqtikLsCsOWtDUJOW6Tuk9P-bV1V3MhYd3ghrQuEmfs,286
223
223
  khoj/interface/compiled/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js,sha256=w_It3VzKT8O1M3CrJ_hZHsaU7M7dq3EAaVG8KvJ-fhU,253
224
- khoj/interface/compiled/_next/static/css/37a73b87f02df402.css,sha256=hp0vlekKu0K2eITR5YIqFmLHQPqV3JETFnRd_-Uh0mk,165
224
+ khoj/interface/compiled/_next/static/css/0db53bacf81896f5.css,sha256=7Kq40hXKsqTnQEz4otvA49gEDms7a0XAFCB0rwrnXQo,30547
225
225
  khoj/interface/compiled/_next/static/css/76c658ee459140a9.css,sha256=7tI24VB66ZUsAPUxRdQhboopun0AXLUnF64uv9RkC08,1833
226
226
  khoj/interface/compiled/_next/static/css/7889a30fe9c83846.css,sha256=IUkZhkx4GpYOIhN-EJw9T1DqGMO3Wa3mNpUwaOBuZoY,7204
227
227
  khoj/interface/compiled/_next/static/css/9c223d337a984468.css,sha256=F5o-qiwJl16uCWiDADWkkIIk5PNxKjvHz5068EptHps,3075687
228
+ khoj/interface/compiled/_next/static/css/bb7ea98028b368f3.css,sha256=PBwues3rUFWl02xEnWqKbRFK59SkQUCqYuV45ZedG4U,3318
228
229
  khoj/interface/compiled/_next/static/css/e4eb883b5265d372.css,sha256=6LaW-lQ_ZpgOJNWYwU1Q1egXZ1aqJDEuRj66oRCIU_E,17748
229
230
  khoj/interface/compiled/_next/static/css/ea5485b3f3859a5a.css,sha256=tn6qi2xSLTWhtzDUE8UlC8iipH9QGV6A9oGj1ap-Sk4,1659
230
- khoj/interface/compiled/_next/static/css/f29752d6e1be7624.css,sha256=mLPRnYpBFaVhTMJ3CFou5_lrwLJs2mhBlAjNY2lrRYs,6354
231
- khoj/interface/compiled/_next/static/css/fca983d49c3dd1a3.css,sha256=3F1qPtz6PQG-gIpo8h3rAfxreAc2Uvxy8F_G2e78EsM,30452
231
+ khoj/interface/compiled/_next/static/css/ee66643a6a5bf71c.css,sha256=3JbJLrnwlX_IHdvjmS3l9y3Vgp5_V0XbfFI44ekLh9E,3106
232
232
  khoj/interface/compiled/_next/static/media/1d8a05b60287ae6c-s.p.woff2,sha256=IzKBwB_bpSGvO7C9aRv29Js-jAbZPRDI-D-P4H2P918,14508
233
233
  khoj/interface/compiled/_next/static/media/2aa11a72f7f24b58-s.woff2,sha256=QjuuSKmViymmy-itXLB1UbSARxFNHWuMiPpCrYqClFI,22728
234
234
  khoj/interface/compiled/_next/static/media/383a65b63658737d-s.woff2,sha256=VH1XkI87HdFVhsurH5D5ekEjG_ZORTVBVg6xz7p87C8,16704
@@ -306,10 +306,10 @@ khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp,sha256=M2AW_HLpBn
306
306
  khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp,sha256=BBeRPBZkxY3-aKkMnYv5TSkxmbeMbyUH4VRIPfrWg1E,137406
307
307
  khoj/interface/compiled/_next/static/media/globe.98e105ca.webp,sha256=g3ofb8-W9GM75zIhlvQhaS8I2py9TtrovOKR3_7Jf04,514
308
308
  khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp,sha256=I_N7Yke3IOoS-0CC6XD8o0IUWG8PdPbrHmf6lpgWlZY,1380
309
- khoj/interface/compiled/_next/static/o6zlo73DbD2lS92jWHS8o/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
310
- khoj/interface/compiled/_next/static/o6zlo73DbD2lS92jWHS8o/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
311
- khoj/interface/compiled/agents/index.html,sha256=6tEJFSimhgj07VbF8wMtGtCxEON0zwEqlT67-7KVtUE,16224
312
- khoj/interface/compiled/agents/index.txt,sha256=PCzz5t75w1JJJ6MNIlBH7zr1ZA0gndvi3Ik9rFaSKlQ,7220
309
+ khoj/interface/compiled/_next/static/y_k1yn7bI1CgM5ZfW7jUq/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
310
+ khoj/interface/compiled/_next/static/y_k1yn7bI1CgM5ZfW7jUq/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
311
+ khoj/interface/compiled/agents/index.html,sha256=-799MhE4fj0M_uziMxl9o37fDQFn2RGaiJmH8BCYXY8,16535
312
+ khoj/interface/compiled/agents/index.txt,sha256=CCkMrbsxUjYCF0_-8Y-x4RChVJQEek2rhRnEYQV8FNI,7353
313
313
  khoj/interface/compiled/assets/icons/khoj_lantern.ico,sha256=eggu-B_v3z1R53EjOFhIqqPnICBGdoaw1xnc0NrzHck,174144
314
314
  khoj/interface/compiled/assets/icons/khoj_lantern.svg,sha256=I_8XP5X84gEOoCRhCRKOQn_GKZrz3SUBXct7WxHvY7c,8767
315
315
  khoj/interface/compiled/assets/icons/khoj_lantern_1200x1200.png,sha256=xDx0bbD-WMflgg8zck9oPIIuTIvywtuED2k7CjSQS4w,66194
@@ -324,16 +324,16 @@ khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png,sha256=i
324
324
  khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png,sha256=Dd4fPwtFl6BWqnHjeb1mCK_ND0hhHsWtx8sNE7EiMuE,406179
325
325
  khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png,sha256=DEDaNRCkfEWUeh3kYZWIQDTVK1a6KKnYdwj5ZWisN_Q,82985
326
326
  khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png,sha256=Ma3blirRmq3X4oYSsDbbT7MDn29rymDrjwmUfA9BMuM,236285
327
- khoj/interface/compiled/automations/index.html,sha256=1IPyhDA-SlzjwmJNyo4ub-FX9asJ4WeF2_Q-P26DcLg,54094
328
- khoj/interface/compiled/automations/index.txt,sha256=LQpRRnN-kKmQilRLF2GEna1lZsdNwCZ6U6ej_cm8fN8,7449
329
- khoj/interface/compiled/chat/index.html,sha256=q_ih2Snh6IM6i1ZJJMSC3AvZDPcPI84wUl4uRlGO1eM,53222
330
- khoj/interface/compiled/chat/index.txt,sha256=X7cWZt5xYa0Dla3uj78vDAS79YY7NGSl6lx93X-VE54,7858
331
- khoj/interface/compiled/search/index.html,sha256=oW2zztspwLC-9vGkyiFZNmpG-FkWk3Jg3Md9qjSymfc,55304
332
- khoj/interface/compiled/search/index.txt,sha256=4mQrJCXK0-FnbfbwJgheoQQFapTCOFAZL1tUXtK2cFc,6567
333
- khoj/interface/compiled/settings/index.html,sha256=OlASOGBStAONeENsPEziymRH7k7fLr7adLmeo-9_624,52743
334
- khoj/interface/compiled/settings/index.txt,sha256=SyTaVXL6DvtDuoGrc5Hmh_WE_BXggZbeZn6tiqo47D0,7703
335
- khoj/interface/compiled/share/chat/index.html,sha256=x0TRvrWXYaVICptxsFCgw9M295FVUXf1SYW0HSdNXSo,53802
336
- khoj/interface/compiled/share/chat/index.txt,sha256=KyUQnzjVtoShYQiGv4n6sPeAi0fFby9l1Mhz2b0mOmQ,8320
327
+ khoj/interface/compiled/automations/index.html,sha256=vv5IkV0b6gUeTd9Y5bRSng56atkN52_AYS6yGRIh1Mo,54405
328
+ khoj/interface/compiled/automations/index.txt,sha256=vNN7bbCPwDEF4SFK9DS7ECe9bhKXrJ-sHxhSE2-z7AQ,7582
329
+ khoj/interface/compiled/chat/index.html,sha256=D9EkCxISHHBCk2b3gWQFlIsa2Dsu2Pfq88D1ucnIIrg,53532
330
+ khoj/interface/compiled/chat/index.txt,sha256=GAFcWkkB5oCbwbxNdl-Nkfx9JJePjuDR5pibaoFlX08,7991
331
+ khoj/interface/compiled/search/index.html,sha256=4NzvbUIxI02sgcjw480llO8U5n6K22Vr3n9GLHS0upg,55304
332
+ khoj/interface/compiled/search/index.txt,sha256=MLF0AoZ_NPuAG8AJi0yPyZcrCoYKxzZ5gOuIaWc8-I0,6567
333
+ khoj/interface/compiled/settings/index.html,sha256=Hevt7ThyfbPutTiMjtBjPDa6NDMDjI-f3dkZqD1tDUM,53053
334
+ khoj/interface/compiled/settings/index.txt,sha256=bMA43IcICTzeojMlpI4dnXzF1DDPikNqgVvFc4E41Z0,7836
335
+ khoj/interface/compiled/share/chat/index.html,sha256=mGZnLC5XFCDHdJhywQZynNYvQsauoIMFN7eAxXt5BzY,54112
336
+ khoj/interface/compiled/share/chat/index.txt,sha256=Jrxa-v023r3Ns0pENdha5RQhqLQPzQ4zBlmMQov7WfY,8453
337
337
  khoj/interface/email/feedback.html,sha256=xksuPFamx4hGWyTTxZKRgX_eiYQQEuv-eK9Xmkt-nwU,1216
338
338
  khoj/interface/email/magic_link.html,sha256=372ESbTPKM9acekuZcOIKOw6kBl-KikFg_L9MOHqJkg,2094
339
339
  khoj/interface/email/task.html,sha256=tY7a0gzVeQ2lSQNu7WyXR_s7VYeWTrxWEj1iHVuoVE4,2813
@@ -386,9 +386,9 @@ khoj/processor/content/plaintext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
386
386
  khoj/processor/content/plaintext/plaintext_to_entries.py,sha256=wFZwK_zIc7gWbRtO9sOHo9KvfhGAzL9psX_nKWYFduo,4975
387
387
  khoj/processor/conversation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
388
388
  khoj/processor/conversation/prompts.py,sha256=78EVB1f3E9O5DQ0t2vnrvJHik_8BOdJHZVL9Vd1A3G8,57907
389
- khoj/processor/conversation/utils.py,sha256=XqNszLVUyQLNEYjPYPqXQL4a2NDUGVK4UAFF4zUt83Q,38562
389
+ khoj/processor/conversation/utils.py,sha256=tlM8pbHD-nw5TBIgjzSnJCoH2-cuVZkKghhpzamOnOg,39237
390
390
  khoj/processor/conversation/anthropic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
391
- khoj/processor/conversation/anthropic/anthropic_chat.py,sha256=ES96gJsluGyQoyCbBEAr_IqRapnviuhCQvip05nmZtA,9702
391
+ khoj/processor/conversation/anthropic/anthropic_chat.py,sha256=-ClTICHgilCiYPzdGTBL5O2iGSyYdOUtlZuDxnqcHgo,9708
392
392
  khoj/processor/conversation/anthropic/utils.py,sha256=h68x7zolymAoQc6fx3Nn3uD7Aql6OuG2HN__SUGZJ5Y,11542
393
393
  khoj/processor/conversation/google/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
394
394
  khoj/processor/conversation/google/gemini_chat.py,sha256=z99jc5_2I5TFXutJNSnn3wi5fmNTuXKNu8KfoENVw60,10218
@@ -398,12 +398,12 @@ khoj/processor/conversation/offline/chat_model.py,sha256=OEwlTH6ODGoC0bcKjaErA4Q
398
398
  khoj/processor/conversation/offline/utils.py,sha256=51McImxl6u1qgRYvMt7uzsgLGSLq5SMFy74ymlNjIcc,3033
399
399
  khoj/processor/conversation/offline/whisper.py,sha256=DJI-8y8DULO2cQ49m2VOvRyIZ2TxBypc15gM8O3HuMI,470
400
400
  khoj/processor/conversation/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
401
- khoj/processor/conversation/openai/gpt.py,sha256=f8mckbcNDgFjW5Iq5rDHs460NTyOvUVCUHtY1tJYSGE,11365
401
+ khoj/processor/conversation/openai/gpt.py,sha256=J3vRvbUsQdC9AdJXDOlWqZRRvmQtYkFarXhQospP1fQ,11371
402
402
  khoj/processor/conversation/openai/utils.py,sha256=Q8QrFdTD34QSdJRiLTdhvqeZfmpgM_F7L6R2DMB8DZQ,25419
403
403
  khoj/processor/conversation/openai/whisper.py,sha256=zoEeK1LNCg_tzP4xzYi5vRPzNPGuDGzpkrkG7d1LUn4,447
404
404
  khoj/processor/image/generate.py,sha256=FAIIsr8TIHxWxK-INNK4jJOOswBxQFyi_G4tI8NNEI8,10571
405
405
  khoj/processor/operator/grounding_agent.py,sha256=vlQPvGJnILpVCSqJ4-54NYtzoW7tZFvL0QNg19XTwh4,15772
406
- khoj/processor/operator/grounding_agent_uitars.py,sha256=LIPi_Hl7OVYEpf-AtDIgEPhFynzv_h2fE0FrVNSSbKI,41573
406
+ khoj/processor/operator/grounding_agent_uitars.py,sha256=6Y7kjlPJG4EH4pB2Kd6pRb654UsGqH6fsU5jkKai9Ds,41593
407
407
  khoj/processor/operator/operate_browser.py,sha256=l3FAqPqcBgiYsrPB2V872q1wdlBwIxzvhXBlWaE5P1c,8091
408
408
  khoj/processor/operator/operator_actions.py,sha256=3HPVcwTf-d-tLd6dUT3zcvq2lTsbmRAzqR6hZZaKnyU,3060
409
409
  khoj/processor/operator/operator_agent_anthropic.py,sha256=ZuUT4WQdOuffA6ny-1hNNUz2e5M3ePWsZE7Rsgvx1CA,19686
@@ -420,16 +420,16 @@ khoj/processor/tools/run_code.py,sha256=rDGX615hhEeRP-e0BSOGKX3jkzDUnk8jD1uy5aoc
420
420
  khoj/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
421
421
  khoj/routers/api.py,sha256=xF108KeC0F9rIspB_M8skZUvDb2ecobFCPgZ5H-Lo6o,29414
422
422
  khoj/routers/api_agents.py,sha256=aEJJnQe1yogSkKO6W3Q8Ukl-xHMnqIAx3jB4M-kGNdY,17043
423
- khoj/routers/api_chat.py,sha256=J_duk9JHODiiuTidKryjBDYPSf0v-EKxWGIcxzEviHI,57760
423
+ khoj/routers/api_chat.py,sha256=scN1h9g4PLPQXAAdEuL7uhkzZGstqtHqFoQ79X_a1Q0,61426
424
424
  khoj/routers/api_content.py,sha256=uLO3eir36rERkhhKU1HOdEv8KTi_z_edT9cHMCZP1W8,24578
425
- khoj/routers/api_model.py,sha256=H4s4TO7omUFi77H56AWjZs9-o_N-Fqq2OnaPHqR8pLM,5251
425
+ khoj/routers/api_model.py,sha256=YxWeCYb32g6h7lixcFeQiMrgdFOxFKnbcgRq0SE5MoQ,5254
426
426
  khoj/routers/api_phone.py,sha256=p9yfc4WeMHDC0hg3aQk60a2VBy8rZPdEnz9wdJ7DzkU,2208
427
427
  khoj/routers/api_subscription.py,sha256=qnbKwA6N1TWK8Aiu1FFLka_JhbPOuwqT262NSHGZDiQ,5569
428
428
  khoj/routers/auth.py,sha256=jk2lqAS_650lQsoaOFTlZd9W_LL8HbN5zhHTZza_lqs,11258
429
429
  khoj/routers/email.py,sha256=wvr6_fpk0RuKcTPC6suI8JDZPLYzJ9hAhz_G41yZytc,3923
430
- khoj/routers/helpers.py,sha256=TjdtBYh_bDSzRBzCoFYSBadyxfzalxT1GpYzTs0D8uQ,97053
430
+ khoj/routers/helpers.py,sha256=Ho1_ZlR4q-ZaCSdBPnVSaGAvPx8IApga1ljSLuTjuH4,97327
431
431
  khoj/routers/notion.py,sha256=g53xyYFmjr2JnuIrTW2vytbfkiK_UkoRTxqnnLSmD5o,2802
432
- khoj/routers/research.py,sha256=xRtl0mHrhdHvGd2cZ0y145k_Qr-Chw-eo0hW-IAb_Zs,22356
432
+ khoj/routers/research.py,sha256=NV5hDvp61tWIrF0hBf5SW537v67Ws8L0HO8mvOb9iwU,22964
433
433
  khoj/routers/storage.py,sha256=lao0DvsF49QleZvOdjKM98RU2cGfCJDBb7WeoI7Rr3I,2172
434
434
  khoj/routers/twilio.py,sha256=MLsuCm4--ETvr3sLxbF0CL_ehlg_l2rKBSLR2Qh2Xls,1081
435
435
  khoj/routers/web_client.py,sha256=_vyfDaHZZjNoI2LwGNQFRiFmGLkNcgYJe7dOr3mrxH8,4386
@@ -449,11 +449,11 @@ khoj/utils/helpers.py,sha256=WvKjmrvH5EGLBays6Ta9RxYBzjC5353bv7pxWF6PDHk,31723
449
449
  khoj/utils/initialization.py,sha256=5eULsvGQv_Kp9bMfrHP8T_QFPjurIFyfq3-rVMWiGa4,15066
450
450
  khoj/utils/jsonl.py,sha256=0Ac_COqr8sLCXntzZtquxuCEVRM2c3yKeDRGhgOBRpQ,1192
451
451
  khoj/utils/models.py,sha256=Q5tcC9-z25sCiub048fLnvZ6_IIO1bcPNxt5payekk0,2009
452
- khoj/utils/rawconfig.py,sha256=wfZTk-Aifb-_q9Yh-NPfh9LlLTioYG-yBqrasgvo4pc,5045
452
+ khoj/utils/rawconfig.py,sha256=ASl_h3Ivaa_4lD4kCA0uZsMRgSYCjrgGUPm-Hw1jkLk,5083
453
453
  khoj/utils/state.py,sha256=s_GFWOqRzpEDx0eCPStuzBTK2VEw-qgRpH0aiEdGnDo,1791
454
454
  khoj/utils/yaml.py,sha256=qy1Tkc61rDMesBw_Cyx2vOR6H-Hngcsm5kYfjwQBwkE,1543
455
- khoj-1.41.1.dev97.dist-info/METADATA,sha256=LBMB9Yj3X8XhE57-eRZ7s8aHIfCBTa6gvWaCbqI0pYg,9068
456
- khoj-1.41.1.dev97.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
457
- khoj-1.41.1.dev97.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
458
- khoj-1.41.1.dev97.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
459
- khoj-1.41.1.dev97.dist-info/RECORD,,
455
+ khoj-1.41.1.dev107.dist-info/METADATA,sha256=jd7MpbdYU5IdITXloEaNj2rFI41XJw3rPyHOxcaHXug,9069
456
+ khoj-1.41.1.dev107.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
457
+ khoj-1.41.1.dev107.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
458
+ khoj-1.41.1.dev107.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
459
+ khoj-1.41.1.dev107.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5477],{5477:function(e,t,a){"use strict";a.d(t,{$:function(){return r},a:function(){return O}});var s,r,n=a(57437),l=a(26442),o=a.n(l),i=a(2265),c=a(18848);a(2446);var d=a(12144),u=a(10107),h=a(19715),f=a(35849),g=a(4203),x=a(51549),m=a(62340),p=a(23518),j=a(37099),b=a(62869),v=a(32759),w=a(57054),y=a(27312),N=a(76818),k=a(81103),C=a(84671),E=a(39535),D=a(14308),S=a(42225),M=a(59199),R=a(7436),T=a(26110),z=a(19378);(s=r||(r={})).MESSAGE="message",s.FILE="file",s.RESEARCH="research";let O=(0,i.forwardRef)((e,t)=>{let[a,s]=(0,i.useState)(""),r=(0,i.useRef)(null),l=(0,i.useRef)(null),O=(0,i.useRef)(null),[A,I]=(0,i.useState)(null),[L,_]=(0,i.useState)(null),[P,F]=(0,i.useState)(!1),[W,U]=(0,i.useState)(null),[$,H]=(0,i.useState)(!1),[J,B]=(0,i.useState)(!1),[K,Y]=(0,i.useState)([]),[Z,X]=(0,i.useState)([]),[q,G]=(0,i.useState)(null),[V,Q]=(0,i.useState)([]),[ee,et]=(0,i.useState)(!1),[ea,es]=(0,i.useState)(null),[er,en]=(0,i.useState)(0),[el,eo]=(0,i.useState)(!1),[ei,ec]=(0,i.useState)(!1),[ed,eu]=(0,i.useState)(e.isResearchModeEnabled||!1);function eh(){if(J&&(B(!1),Y([]),Z.forEach(t=>e.sendImage(t))),!a.trim())return;if(!e.isLoggedIn){U("Hey there, you need to be signed in to send messages to Khoj AI"),H(!0);return}let t=a.trim(),r=e.chatOptionsData&&Object.keys(e.chatOptionsData).some(e=>t.startsWith("/".concat(e)));ed&&!r&&(t="/research ".concat(t)),e.sendMessage(t),G(null),Q([]),s("")}function ef(a){var s,r;if(!e.isLoggedIn){U("Please login to chat with your files"),H(!0);return}let n=["jpg","jpeg","png","webp"],l=[];for(let e=0;e<a.length;e++){let t=a[e],s=t.name.split(".").pop();n.includes(s||"")&&l.push(c.Z.sanitize(URL.createObjectURL(t)))}l.length>0&&(B(!0),Y(e=>[...e,...l]),null==t||null===(r=t.current)||void 0===r||r.focus());let o=Array.from(a).filter(e=>!n.includes(e.name.split(".").pop()||"")),i=o?Array.from(o).concat(Array.from(q||[])):Array.from(q||[]);if(i.length>0){for(let e=0;e<i.length;e++)if(i[e].size>10485760){I("File ".concat(i[e].name," is too large. Please upload files smaller than 10 MB."));return}let t=new DataTransfer;i.forEach(e=>t.items.add(e)),eg(t.files).then(a=>{e.setUploadedFiles(a),G(t.files),Q(a)})}null==t||null===(s=t.current)||void 0===s||s.focus()}async function eg(e){let t=await (0,M.M1)(e);F(!0);try{let e=await fetch("/api/content/convert",{method:"POST",body:t});if(F(!1),!e.ok)throw Error("HTTP error! status: ".concat(e.status));return await e.json()}catch(e){return _("Error converting files. "+e+". Please try again, or contact team@khoj.dev if the issue persists."),console.error("Error converting files:",e),[]}}async function ex(){try{let e=await navigator.mediaDevices.getUserMedia({audio:!0}),t=new MediaRecorder(e,{mimeType:"audio/webm"}),a=[];t.ondataavailable=async e=>{a.push(e.data);let t=new Blob(a,{type:"audio/webm"}),r=new FormData;r.append("file",t);try{let e=await fetch("/api/transcribe",{method:"POST",body:r});if(!e.ok)throw Error("Network response was not ok");let t=await e.json();s(t.text.trim())}catch(e){console.error("Error sending audio to server:",e)}},t.start(1500),t.onstop=async()=>{let e=new Blob(a,{type:"audio/webm"}),r=new FormData;r.append("file",e);try{let e=await fetch("/api/transcribe",{method:"POST",body:r});if(!e.ok)throw Error("Network response was not ok");let a=await e.json();t.stream.getTracks().forEach(e=>e.stop()),es(null),s(a.text.trim())}catch(e){console.error("Error sending audio to server:",e)}},es(t)}catch(e){console.error("Error getting microphone",e)}}return(0,i.useEffect)(()=>{if(P||en(0),P){let e=setInterval(()=>{en(e=>{let t=e+(Math.floor(5*Math.random())+1);return t<100?t:100})},800);return()=>clearInterval(e)}},[P]),(0,i.useEffect)(()=>{var a;void 0!==e.prefillMessage&&(s(e.prefillMessage),null==t||null===(a=t.current)||void 0===a||a.focus())},[e.prefillMessage]),(0,i.useEffect)(()=>{var a,s,r;"message"===e.focus?null==t||null===(a=t.current)||void 0===a||a.focus():"file"===e.focus?null===(s=l.current)||void 0===s||s.focus():"research"===e.focus&&(null===(r=O.current)||void 0===r||r.focus())},[e.focus]),(0,i.useEffect)(()=>{async function e(){K.length>0&&X(await Promise.all(K.map(async e=>{let t=await fetch(e),a=await t.blob();return new Promise(e=>{let t=new FileReader;t.onload=()=>e(t.result),t.readAsDataURL(a)})}))),F(!1)}F(!0),e()},[K]),(0,i.useEffect)(()=>{e.isResearchModeEnabled&&eu(e.isResearchModeEnabled)},[e.isResearchModeEnabled]),(0,i.useEffect)(()=>{!ee&&ea&&ea.stop(),ee&&!ea&&ex()},[ee,ea]),(0,i.useEffect)(()=>{(null==t?void 0:t.current)&&(t.current.style.height="auto",t.current.style.height=Math.max(t.current.scrollHeight-24,64)+"px",a.startsWith("/")&&1===a.split(" ").length?ec(!0):ec(!1))},[a]),(0,n.jsxs)(n.Fragment,{children:[$&&W&&(0,n.jsx)(E.Z,{onOpenChange:H,isMobileWidth:e.isMobileWidth}),P&&(0,n.jsx)(j.aR,{open:P,children:(0,n.jsxs)(j._T,{children:[(0,n.jsx)(j.fY,{children:(0,n.jsx)(j.f$,{children:"Uploading data. Please wait."})}),(0,n.jsx)(j.yT,{children:(0,n.jsx)(v.E,{indicatorColor:"bg-slate-500",className:"w-full h-2 rounded-full",value:er})}),(0,n.jsx)(j.OL,{className:"bg-slate-400 hover:bg-slate-500",onClick:()=>F(!1),children:"Dismiss"})]})}),A&&(0,n.jsx)(j.aR,{open:null!==A,children:(0,n.jsxs)(j._T,{children:[(0,n.jsx)(j.fY,{children:(0,n.jsx)(j.f$,{children:"Data Upload Warning"})}),(0,n.jsx)(j.yT,{children:A}),(0,n.jsx)(j.OL,{className:"bg-slate-400 hover:bg-slate-500",onClick:()=>I(null),children:"Close"})]})}),L&&(0,n.jsx)(j.aR,{open:null!==L,children:(0,n.jsxs)(j._T,{children:[(0,n.jsxs)(j.fY,{children:[(0,n.jsx)(j.f$,{children:"Oh no!"}),(0,n.jsx)(j.yT,{children:"Something went wrong while uploading your data"})]}),(0,n.jsx)(j.yT,{children:L}),(0,n.jsx)(j.OL,{className:"bg-slate-400 hover:bg-slate-500",onClick:()=>_(null),children:"Close"})]})}),ei&&(0,n.jsx)("div",{className:"flex justify-center text-center",children:(0,n.jsxs)(w.J2,{open:ei,onOpenChange:ec,children:[(0,n.jsx)(y.xo,{className:"flex justify-center text-center"}),(0,n.jsx)(w.yk,{onOpenAutoFocus:e=>e.preventDefault(),className:"".concat(e.isMobileWidth?"w-[100vw]":"w-full"," rounded-md"),side:"bottom",align:"center",sideOffset:e.conversationId?0:80,alignOffset:0,children:(0,n.jsxs)(p.mY,{className:"max-w-full",children:[(0,n.jsx)(p.sZ,{placeholder:"Type a command or search...",value:a,className:"hidden"}),(0,n.jsxs)(p.e8,{children:[(0,n.jsx)(p.rb,{children:"No matching commands."}),(0,n.jsx)(p.fu,{heading:"Agent Tools",children:e.chatOptionsData&&Object.entries(e.chatOptionsData).map(e=>{let[t,a]=e;return(0,n.jsx)(p.di,{className:"text-md",onSelect:()=>{s("/".concat(t," "))},children:(0,n.jsxs)("div",{className:"grid grid-cols-1 gap-1",children:[(0,n.jsxs)("div",{className:"font-bold flex items-center",children:[(0,S.vH)(t,"h-4 w-4 mr-2"),"/",t]}),(0,n.jsx)("div",{children:a})]})},t)})}),(0,n.jsx)(p.zz,{})]})]})})]})}),(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 overflow-x-auto",children:[J&&K.map((e,t)=>(0,n.jsxs)("div",{className:"relative flex-shrink-0 pb-3 pt-2 group",children:[(0,n.jsx)("img",{src:e,alt:"img-".concat(t),className:"w-auto h-16 object-cover rounded-xl"}),(0,n.jsx)(b.z,{variant:"ghost",size:"icon",className:"absolute -top-0 -right-2 h-5 w-5 rounded-full bg-neutral-200 dark:bg-neutral-600 hover:bg-neutral-300 dark:hover:bg-neutral-500 opacity-0 group-hover:opacity-100 transition-opacity",onClick:()=>{Y(e=>e.filter((e,a)=>a!==t)),X(e=>e.filter((e,a)=>a!==t)),1===K.length&&B(!1)},children:(0,n.jsx)(d.X,{className:"h-3 w-3"})})]},t)),V&&Array.from(V).map((t,a)=>(0,n.jsxs)(T.Vq,{children:[(0,n.jsx)(T.hg,{asChild:!0,children:(0,n.jsxs)("div",{className:"relative flex-shrink-0 p-2 group",children:[(0,n.jsx)("div",{className:"w-auto h-16 object-cover rounded-xl ".concat(e.agentColor?(0,C.tp)(e.agentColor):"bg-orange-300 hover:bg-orange-500"," bg-opacity-15"),children:(0,n.jsxs)("div",{className:"flex p-2 flex-col justify-start items-start h-full",children:[(0,n.jsx)("span",{className:"text-sm font-bold text-neutral-500 dark:text-neutral-400 text-ellipsis truncate max-w-[200px] break-words",children:t.name}),(0,n.jsxs)("span",{className:"flex items-center gap-1",children:[(0,S.Le)(t.file_type),(0,n.jsx)("span",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:(0,R.xq)(t.size)})]})]})}),(0,n.jsx)(b.z,{variant:"ghost",size:"icon",className:"absolute -top-0 -right-2 h-5 w-5 rounded-full bg-neutral-200 dark:bg-neutral-600 hover:bg-neutral-300 dark:hover:bg-neutral-500 opacity-0 group-hover:opacity-100 transition-opacity",onClick:()=>{G(a=>{let s=t.name;if(!a)return null;let r=Array.from(a).filter(e=>e.name!==s),n=new DataTransfer;r.forEach(e=>n.items.add(e));let l=V.filter(e=>e.name!==s);return e.setUploadedFiles(l),Q(l),n.files})},children:(0,n.jsx)(d.X,{className:"h-3 w-3"})})]},a)}),(0,n.jsxs)(T.cZ,{children:[(0,n.jsx)(T.fK,{children:(0,n.jsx)(T.$N,{children:t.name})}),(0,n.jsx)(T.Be,{children:(0,n.jsx)(z.x,{className:"h-72 w-full rounded-md",children:t.content})})]})]},a))]}),(0,n.jsxs)("div",{className:"".concat(o().actualInputArea," justify-between dark:bg-neutral-700 relative ").concat(el&&"animate-pulse"),onDragOver:function(e){e.preventDefault(),eo(!0)},onDragLeave:function(e){e.preventDefault(),eo(!1)},onDrop:function(e){e.preventDefault(),eo(!1),e.dataTransfer.files&&ef(e.dataTransfer.files)},children:[(0,n.jsx)("input",{type:"file",accept:".pdf,.doc,.docx,.txt,.md,.org,.jpg,.jpeg,.png,.webp,.py,.tsx,.js,.json,.html,.css,.ipynb",multiple:!0,ref:r,onChange:function(e){e.target.files&&ef(e.target.files)},style:{display:"none"}}),(0,n.jsx)("div",{className:"flex items-center",children:(0,n.jsx)(k.pn,{children:(0,n.jsxs)(k.u,{children:[(0,n.jsx)(k.aJ,{asChild:!0,children:(0,n.jsx)(b.z,{variant:"ghost",className:"!bg-none p-0 m-2 h-auto text-3xl rounded-full text-gray-300 hover:text-gray-500",disabled:e.sendDisabled||!e.isLoggedIn,onClick:function(){r.current&&r.current.click()},ref:l,children:(0,n.jsx)(u.p,{className:"w-8 h-8"})})}),(0,n.jsx)(k._v,{children:"Attach a PDF, plain text file, or image"})]})})}),(0,n.jsx)("div",{className:"flex-grow flex flex-col w-full gap-1.5 relative",children:(0,n.jsx)(N.g,{ref:t,className:"border-none focus:border-none\n focus:outline-none focus-visible:ring-transparent\n w-full h-16 min-h-16 max-h-[128px] md:py-4 rounded-lg resize-none dark:bg-neutral-700\n ".concat(e.isMobileWidth?"text-md":"text-lg"),placeholder:"Type / to see a list of commands",id:"message",autoFocus:!0,value:a,onKeyDown:t=>{"Enter"!==t.key||t.shiftKey||e.isMobileWidth||e.sendDisabled||(B(!1),Y([]),t.preventDefault(),eh())},onChange:e=>s(e.target.value),disabled:ee})}),(0,n.jsxs)("div",{className:"flex items-end pb-2",children:[ee?(0,n.jsx)(k.pn,{children:(0,n.jsxs)(k.u,{children:[(0,n.jsx)(k.aJ,{asChild:!0,children:(0,n.jsx)(b.z,{variant:"default",className:"".concat(!ee&&"hidden"," ").concat(e.agentColor?(0,C.tp)(e.agentColor):"bg-orange-300 hover:bg-orange-500"," rounded-full p-1 m-2 h-auto text-3xl transition transform md:hover:-translate-y-1"),onClick:()=>{et(!ee)},disabled:e.sendDisabled||!e.isLoggedIn,children:(0,n.jsx)(h.d,{weight:"fill",className:"w-6 h-6"})})}),(0,n.jsx)(k._v,{children:"Click to stop recording and transcribe your voice."})]})}):ea?(0,n.jsx)(D.l,{}):(0,n.jsx)(k.pn,{children:(0,n.jsxs)(k.u,{children:[(0,n.jsx)(k.aJ,{asChild:!0,children:e.sendDisabled?(0,n.jsx)(b.z,{variant:"default",className:"".concat(e.agentColor?(0,C.tp)(e.agentColor):"bg-orange-300 hover:bg-orange-500"," rounded-full p-1 m-2 h-auto text-3xl transition transform md:hover:-translate-y-1"),onClick:()=>{e.setTriggeredAbort(!0)},children:(0,n.jsx)(h.d,{weight:"fill",className:"w-6 h-6"})}):(0,n.jsx)(b.z,{variant:"default",className:"".concat(!a||ee||"hidden"," ").concat(e.agentColor?(0,C.tp)(e.agentColor):"bg-orange-300 hover:bg-orange-500"," rounded-full p-1 m-2 h-auto text-3xl transition transform md:hover:-translate-y-1"),disabled:e.sendDisabled||!e.isLoggedIn,onClick:()=>{s("Listening..."),et(!ee)},children:(0,n.jsx)(f.P,{weight:"fill",className:"w-6 h-6"})})}),(0,n.jsx)(k._v,{children:e.sendDisabled?"Click here to stop the streaming.":"Click to transcribe your message with voice."})]})}),(0,n.jsx)(b.z,{className:"".concat((!a||ee||e.sendDisabled)&&"hidden"," ").concat(e.agentColor?(0,C.tp)(e.agentColor):"bg-orange-300 hover:bg-orange-500"," rounded-full p-1 m-2 h-auto text-3xl transition transform md:hover:-translate-y-1"),disabled:e.sendDisabled||!e.isLoggedIn,onClick:eh,children:(0,n.jsx)(g.a,{className:"w-6 h-6",weight:"bold"})})]})]}),(0,n.jsx)(k.pn,{children:(0,n.jsxs)(k.u,{children:[(0,n.jsx)(k.aJ,{asChild:!0,children:(0,n.jsxs)(b.z,{variant:"ghost",className:"float-right justify-center gap-1 flex items-center p-1.5 mr-2 h-fit",disabled:e.sendDisabled||!e.isLoggedIn,ref:O,onClick:()=>{var e;eu(!ed),null==t||null===(e=t.current)||void 0===e||e.focus()},children:[(0,n.jsx)("span",{className:"text-muted-foreground text-sm",children:"Research Mode"}),ed?(0,n.jsx)(x.W,{weight:"fill",className:"w-6 h-6 inline-block ".concat(e.agentColor?(0,C.oz)(e.agentColor):(0,C.oz)("orange")," rounded-full")}):(0,n.jsx)(m.$,{weight:"fill",className:"w-6 h-6 inline-block ".concat((0,C.oz)("gray")," rounded-full")})]})}),(0,n.jsx)(k._v,{className:"text-xs",children:"Research Mode allows you to get more deeply researched, detailed responses. Response times may be longer."})]})})]})]})});O.displayName="ChatInputArea"},32759:function(e,t,a){"use strict";a.d(t,{E:function(){return o}});var s=a(57437),r=a(2265),n=a(60610),l=a(94508);let o=r.forwardRef((e,t)=>{let{className:a,value:r,indicatorColor:o,...i}=e;return(0,s.jsx)(n.fC,{ref:t,className:(0,l.cn)("relative h-4 w-full overflow-hidden rounded-full bg-secondary",a),...i,children:(0,s.jsx)(n.z$,{className:"h-full w-full flex-1 bg-primary transition-all ".concat(o),style:{transform:"translateX(-".concat(100-(r||0),"%)")}})})});o.displayName=n.fC.displayName},76818:function(e,t,a){"use strict";a.d(t,{g:function(){return l}});var s=a(57437),r=a(2265),n=a(94508);let l=r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)("textarea",{className:(0,n.cn)("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",a),ref:t,...r})});l.displayName="Textarea"},26442:function(e){e.exports={actualInputArea:"chatInputArea_actualInputArea__Ha6cN"}}}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8459,3317,7138,244],{63521:function(){}},function(n){n.O(0,[2971,2117,1744],function(){return n(n.s=63521)}),_N_E=n.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3317,8459,7138,244],{63521:function(){}},function(n){n.O(0,[2971,2117,1744],function(){return n(n.s=63521)}),_N_E=n.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[244,8459,3317,7138],{63521:function(){}},function(n){n.O(0,[2971,2117,1744],function(){return n(n.s=63521)}),_N_E=n.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7138,8459,3317,244],{63521:function(){}},function(n){n.O(0,[2971,2117,1744],function(){return n(n.s=63521)}),_N_E=n.O()}]);