khoj 2.0.0b14.dev9__py3-none-any.whl → 2.0.0b14.dev32__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 (52) hide show
  1. khoj/interface/compiled/404/index.html +2 -2
  2. khoj/interface/compiled/_next/static/chunks/app/agents/{page-f04757fab73908a4.js → page-e291b49977f43880.js} +1 -1
  3. khoj/interface/compiled/_next/static/chunks/app/automations/{page-fb0e9353e86acd25.js → page-1047097af99d31c7.js} +1 -1
  4. khoj/interface/compiled/_next/static/chunks/app/chat/{page-fd693f65831a2f97.js → page-6297545f8e9ee5f9.js} +1 -1
  5. khoj/interface/compiled/_next/static/chunks/app/{page-89f5654035b07c00.js → page-1567cac7b79a7c59.js} +1 -1
  6. khoj/interface/compiled/_next/static/chunks/app/search/{page-6ca71d3d56fc6935.js → page-3639e50ec3e9acfd.js} +1 -1
  7. khoj/interface/compiled/_next/static/chunks/app/settings/{page-a798de3944f59629.js → page-6081362437c82470.js} +1 -1
  8. khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-8addeb8079c3215b.js +1 -0
  9. khoj/interface/compiled/_next/static/chunks/app/share/chat/{page-07d7ff92aee0bb69.js → page-e0dcb1762f8c8f88.js} +1 -1
  10. khoj/interface/compiled/_next/static/chunks/{webpack-8087292aa01e8e55.js → webpack-5393aad3d824e0cb.js} +1 -1
  11. khoj/interface/compiled/_next/static/css/37a73b87f02df402.css +1 -0
  12. khoj/interface/compiled/_next/static/css/579820a104ee7d1d.css +1 -0
  13. khoj/interface/compiled/_next/static/css/821d0d60b0b6871d.css +1 -0
  14. khoj/interface/compiled/agents/index.html +2 -2
  15. khoj/interface/compiled/agents/index.txt +2 -2
  16. khoj/interface/compiled/automations/index.html +2 -2
  17. khoj/interface/compiled/automations/index.txt +3 -3
  18. khoj/interface/compiled/chat/index.html +2 -2
  19. khoj/interface/compiled/chat/index.txt +3 -3
  20. khoj/interface/compiled/index.html +2 -2
  21. khoj/interface/compiled/index.txt +2 -2
  22. khoj/interface/compiled/search/index.html +2 -2
  23. khoj/interface/compiled/search/index.txt +2 -2
  24. khoj/interface/compiled/settings/index.html +2 -2
  25. khoj/interface/compiled/settings/index.txt +4 -4
  26. khoj/interface/compiled/share/chat/index.html +2 -2
  27. khoj/interface/compiled/share/chat/index.txt +2 -2
  28. khoj/processor/conversation/google/utils.py +1 -1
  29. khoj/processor/conversation/openai/utils.py +35 -2
  30. khoj/processor/conversation/prompts.py +32 -21
  31. khoj/processor/tools/run_code.py +15 -22
  32. khoj/routers/api_chat.py +3 -1
  33. khoj/routers/helpers.py +34 -32
  34. khoj/utils/helpers.py +50 -10
  35. {khoj-2.0.0b14.dev9.dist-info → khoj-2.0.0b14.dev32.dist-info}/METADATA +1 -1
  36. {khoj-2.0.0b14.dev9.dist-info → khoj-2.0.0b14.dev32.dist-info}/RECORD +48 -48
  37. khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-9781b62e39ca7785.js +0 -1
  38. khoj/interface/compiled/_next/static/css/a0c2fd63bb396f04.css +0 -1
  39. khoj/interface/compiled/_next/static/css/ee66643a6a5bf71c.css +0 -1
  40. khoj/interface/compiled/_next/static/css/fbacbdfd5e7f3f0e.css +0 -1
  41. /khoj/interface/compiled/_next/static/{D_w4o2vgOqOdUhGFnbYgh → X5-FmIFHozaGjC6_c98DL}/_buildManifest.js +0 -0
  42. /khoj/interface/compiled/_next/static/{D_w4o2vgOqOdUhGFnbYgh → X5-FmIFHozaGjC6_c98DL}/_ssgManifest.js +0 -0
  43. /khoj/interface/compiled/_next/static/chunks/{1327-511bb0a862efce80.js → 1327-e254819a9172cfa7.js} +0 -0
  44. /khoj/interface/compiled/_next/static/chunks/{1915-fbfe167c84ad60c5.js → 1915-5c6508f6ebb62a30.js} +0 -0
  45. /khoj/interface/compiled/_next/static/chunks/{2117-e78b6902ad6f75ec.js → 2117-080746c8e170c81a.js} +0 -0
  46. /khoj/interface/compiled/_next/static/chunks/{2939-4d4084c5b888b960.js → 2939-4af3fd24b8ffc9ad.js} +0 -0
  47. /khoj/interface/compiled/_next/static/chunks/{4447-d6cf93724d57e34b.js → 4447-cd95608f8e93e711.js} +0 -0
  48. /khoj/interface/compiled/_next/static/chunks/{8667-4b7790573b08c50d.js → 8667-50b03a89e82e0ba7.js} +0 -0
  49. /khoj/interface/compiled/_next/static/chunks/{9139-ce1ae935dac9c871.js → 9139-8ac4d9feb10f8869.js} +0 -0
  50. {khoj-2.0.0b14.dev9.dist-info → khoj-2.0.0b14.dev32.dist-info}/WHEEL +0 -0
  51. {khoj-2.0.0b14.dev9.dist-info → khoj-2.0.0b14.dev32.dist-info}/entry_points.txt +0 -0
  52. {khoj-2.0.0b14.dev9.dist-info → khoj-2.0.0b14.dev32.dist-info}/licenses/LICENSE +0 -0
@@ -49,7 +49,7 @@ class GeneratedCode(NamedTuple):
49
49
 
50
50
 
51
51
  async def run_code(
52
- query: str,
52
+ instructions: str,
53
53
  conversation_history: List[ChatMessageModel],
54
54
  context: str,
55
55
  location_data: LocationData,
@@ -63,12 +63,12 @@ async def run_code(
63
63
  ):
64
64
  # Generate Code
65
65
  if send_status_func:
66
- async for event in send_status_func(f"**Generate code snippet** for {query}"):
66
+ async for event in send_status_func(f"**Generate code snippet** for {instructions}"):
67
67
  yield {ChatEvent.STATUS: event}
68
68
  try:
69
69
  with timer("Chat actor: Generate programs to execute", logger):
70
70
  generated_code = await generate_python_code(
71
- query,
71
+ instructions,
72
72
  conversation_history,
73
73
  context,
74
74
  location_data,
@@ -79,7 +79,7 @@ async def run_code(
79
79
  query_files,
80
80
  )
81
81
  except Exception as e:
82
- raise ValueError(f"Failed to generate code for {query} with error: {e}")
82
+ raise ValueError(f"Failed to generate code for {instructions} with error: {e}")
83
83
 
84
84
  # Prepare Input Data
85
85
  input_data = []
@@ -101,21 +101,21 @@ async def run_code(
101
101
  code = result.pop("code")
102
102
  cleaned_result = truncate_code_context({"cleaned": {"results": result}})["cleaned"]["results"]
103
103
  logger.info(f"Executed Code\n----\n{code}\n----\nResult\n----\n{cleaned_result}\n----")
104
- yield {query: {"code": code, "results": result}}
104
+ yield {instructions: {"code": code, "results": result}}
105
105
  except asyncio.TimeoutError as e:
106
106
  # Call the sandbox_url/stop GET API endpoint to stop the code sandbox
107
- error = f"Failed to run code for {query} with Timeout error: {e}"
107
+ error = f"Failed to run code for {instructions} with Timeout error: {e}"
108
108
  try:
109
109
  await aiohttp.ClientSession().get(f"{sandbox_url}/stop", timeout=5)
110
110
  except Exception as e:
111
111
  error += f"\n\nFailed to stop code sandbox with error: {e}"
112
112
  raise ValueError(error)
113
113
  except Exception as e:
114
- raise ValueError(f"Failed to run code for {query} with error: {e}")
114
+ raise ValueError(f"Failed to run code for {instructions} with error: {e}")
115
115
 
116
116
 
117
117
  async def generate_python_code(
118
- q: str,
118
+ instructions: str,
119
119
  chat_history: List[ChatMessageModel],
120
120
  context: str,
121
121
  location_data: LocationData,
@@ -142,7 +142,7 @@ async def generate_python_code(
142
142
  network_access_context = "**NO** " if not is_e2b_code_sandbox_enabled() else ""
143
143
 
144
144
  code_generation_prompt = prompts.python_code_generation_prompt.format(
145
- query=q,
145
+ instructions=instructions,
146
146
  chat_history=chat_history_str,
147
147
  context=context,
148
148
  has_network_access=network_access_context,
@@ -252,8 +252,12 @@ async def execute_e2b(code: str, input_files: list[dict]) -> dict[str, Any]:
252
252
 
253
253
  # Identify new files created during execution
254
254
  new_files = set(E2bFile(f.name, f.path) for f in await sandbox.files.list("~")) - original_files
255
+
255
256
  # Read newly created files in parallel
256
- download_tasks = [sandbox.files.read(f.path, request_timeout=30) for f in new_files]
257
+ def read_format(f):
258
+ return "bytes" if Path(f.name).suffix in image_file_ext else "text"
259
+
260
+ download_tasks = [sandbox.files.read(f.path, format=read_format(f), request_timeout=30) for f in new_files]
257
261
  downloaded_files = await asyncio.gather(*download_tasks)
258
262
  for f, content in zip(new_files, downloaded_files):
259
263
  if isinstance(content, bytes):
@@ -261,23 +265,12 @@ async def execute_e2b(code: str, input_files: list[dict]) -> dict[str, Any]:
261
265
  b64_data = base64.b64encode(content).decode("utf-8")
262
266
  elif Path(f.name).suffix in image_file_ext:
263
267
  # Ignore image files as they are extracted from execution results below for inline display
264
- continue
268
+ b64_data = base64.b64encode(content).decode("utf-8")
265
269
  else:
266
270
  # Text files - encode utf-8 string as base64
267
271
  b64_data = content
268
272
  output_files.append({"filename": f.name, "b64_data": b64_data})
269
273
 
270
- # Collect output files from execution results
271
- # Repect ordering of output result types to disregard text output associated with images
272
- output_result_types = ["png", "jpeg", "svg", "text", "markdown", "json"]
273
- for idx, result in enumerate(execution.results):
274
- if getattr(result, "chart", None):
275
- continue
276
- for result_type in output_result_types:
277
- if b64_data := getattr(result, result_type, None):
278
- output_files.append({"filename": f"{idx}.{result_type}", "b64_data": b64_data})
279
- break
280
-
281
274
  # collect logs
282
275
  success = not execution.error and not execution.logs.stderr
283
276
  stdout = "\n".join(execution.logs.stdout)
khoj/routers/api_chat.py CHANGED
@@ -1526,6 +1526,8 @@ async def chat_ws(
1526
1526
  ack_type = "interrupt_acknowledged"
1527
1527
  await websocket.send_text(json.dumps({"type": ack_type}))
1528
1528
  else:
1529
+ ack_type = "interrupt_acknowledged"
1530
+ await websocket.send_text(json.dumps({"type": ack_type}))
1529
1531
  logger.info(f"No ongoing task to interrupt for user {websocket.scope['user'].object.id}")
1530
1532
  continue
1531
1533
 
@@ -1704,8 +1706,8 @@ async def process_chat_request(
1704
1706
  logger.debug(f"Chat request cancelled for user {websocket.scope['user'].object.id}")
1705
1707
  raise
1706
1708
  except Exception as e:
1707
- logger.error(f"Error processing chat request: {e}", exc_info=True)
1708
1709
  await websocket.send_text(json.dumps({"error": "Internal server error"}))
1710
+ logger.error(f"Error processing chat request: {e}", exc_info=True)
1709
1711
  raise
1710
1712
 
1711
1713
 
khoj/routers/helpers.py CHANGED
@@ -1625,6 +1625,7 @@ async def agenerate_chat_response(
1625
1625
  deepthought = True
1626
1626
 
1627
1627
  chat_model = await ConversationAdapters.aget_valid_chat_model(user, conversation, is_subscribed)
1628
+ max_prompt_size = await ConversationAdapters.aget_max_context_size(chat_model, user)
1628
1629
  vision_available = chat_model.vision_enabled
1629
1630
  if not vision_available and query_images:
1630
1631
  vision_enabled_config = await ConversationAdapters.aget_vision_enabled_config()
@@ -1656,7 +1657,7 @@ async def agenerate_chat_response(
1656
1657
  model=chat_model_name,
1657
1658
  api_key=api_key,
1658
1659
  api_base_url=openai_chat_config.api_base_url,
1659
- max_prompt_size=chat_model.max_prompt_size,
1660
+ max_prompt_size=max_prompt_size,
1660
1661
  tokenizer_name=chat_model.tokenizer,
1661
1662
  agent=agent,
1662
1663
  vision_available=vision_available,
@@ -1687,7 +1688,7 @@ async def agenerate_chat_response(
1687
1688
  model=chat_model.name,
1688
1689
  api_key=api_key,
1689
1690
  api_base_url=api_base_url,
1690
- max_prompt_size=chat_model.max_prompt_size,
1691
+ max_prompt_size=max_prompt_size,
1691
1692
  tokenizer_name=chat_model.tokenizer,
1692
1693
  agent=agent,
1693
1694
  vision_available=vision_available,
@@ -1717,7 +1718,7 @@ async def agenerate_chat_response(
1717
1718
  model=chat_model.name,
1718
1719
  api_key=api_key,
1719
1720
  api_base_url=api_base_url,
1720
- max_prompt_size=chat_model.max_prompt_size,
1721
+ max_prompt_size=max_prompt_size,
1721
1722
  tokenizer_name=chat_model.tokenizer,
1722
1723
  agent=agent,
1723
1724
  vision_available=vision_available,
@@ -2915,35 +2916,34 @@ async def view_file_content(
2915
2916
  raw_text = file_object.raw_text
2916
2917
 
2917
2918
  # Apply line range filtering if specified
2918
- if start_line is None and end_line is None:
2919
- filtered_text = raw_text
2920
- else:
2921
- lines = raw_text.split("\n")
2922
- start_line = start_line or 1
2923
- end_line = end_line or len(lines)
2924
-
2925
- # Validate line range
2926
- if start_line < 1 or end_line < 1 or start_line > end_line:
2927
- error_msg = f"Invalid line range: {start_line}-{end_line}"
2928
- logger.warning(error_msg)
2929
- yield [{"query": query, "file": path, "compiled": error_msg}]
2930
- return
2931
- if start_line > len(lines):
2932
- error_msg = f"Start line {start_line} exceeds total number of lines {len(lines)}"
2933
- logger.warning(error_msg)
2934
- yield [{"query": query, "file": path, "compiled": error_msg}]
2935
- return
2919
+ lines = raw_text.split("\n")
2920
+ start_line = start_line or 1
2921
+ end_line = end_line or len(lines)
2922
+
2923
+ # Validate line range
2924
+ if start_line < 1 or end_line < 1 or start_line > end_line:
2925
+ error_msg = f"Invalid line range: {start_line}-{end_line}"
2926
+ logger.warning(error_msg)
2927
+ yield [{"query": query, "file": path, "compiled": error_msg}]
2928
+ return
2929
+ if start_line > len(lines):
2930
+ error_msg = f"Start line {start_line} exceeds total number of lines {len(lines)}"
2931
+ logger.warning(error_msg)
2932
+ yield [{"query": query, "file": path, "compiled": error_msg}]
2933
+ return
2936
2934
 
2937
- # Convert from 1-based to 0-based indexing and ensure bounds
2938
- start_idx = max(0, start_line - 1)
2939
- end_idx = min(len(lines), end_line)
2935
+ # Convert from 1-based to 0-based indexing and ensure bounds
2936
+ start_idx = max(0, start_line - 1)
2937
+ end_idx = min(len(lines), end_line)
2940
2938
 
2941
- selected_lines = lines[start_idx:end_idx]
2942
- filtered_text = "\n".join(selected_lines)
2939
+ # Limit to first 50 lines if more than 50 lines are requested
2940
+ truncation_message = ""
2941
+ if end_idx - start_idx > 50:
2942
+ truncation_message = "\n\n[Truncated after 50 lines! Use narrower line range to view complete section.]"
2943
+ end_idx = start_idx + 50
2943
2944
 
2944
- # Truncate the text if it's too long
2945
- if len(filtered_text) > 10000:
2946
- filtered_text = filtered_text[:10000] + "\n\n[Truncated. Use line numbers to view specific sections.]"
2945
+ selected_lines = lines[start_idx:end_idx]
2946
+ filtered_text = "\n".join(selected_lines) + truncation_message
2947
2947
 
2948
2948
  # Format the result as a document reference
2949
2949
  document_results = [
@@ -3022,6 +3022,7 @@ async def grep_files(
3022
3022
  file_matches = await FileObjectAdapters.aget_file_objects_by_regex(user, db_pattern, path_prefix)
3023
3023
 
3024
3024
  line_matches = []
3025
+ line_matches_count = 0
3025
3026
  for file_object in file_matches:
3026
3027
  lines = file_object.raw_text.split("\n")
3027
3028
  matched_line_numbers = []
@@ -3030,6 +3031,7 @@ async def grep_files(
3030
3031
  for i, line in enumerate(lines, 1):
3031
3032
  if regex.search(line):
3032
3033
  matched_line_numbers.append(i)
3034
+ line_matches_count += len(matched_line_numbers)
3033
3035
 
3034
3036
  # Build context for each match
3035
3037
  for line_num in matched_line_numbers:
@@ -3046,10 +3048,10 @@ async def grep_files(
3046
3048
 
3047
3049
  if current_line_num == line_num:
3048
3050
  # This is the matching line, mark it
3049
- context_lines.append(f"{file_object.file_name}:{current_line_num}:> {line_content}")
3051
+ context_lines.append(f"{file_object.file_name}:{current_line_num}: {line_content}")
3050
3052
  else:
3051
3053
  # This is a context line
3052
- context_lines.append(f"{file_object.file_name}:{current_line_num}: {line_content}")
3054
+ context_lines.append(f"{file_object.file_name}-{current_line_num}- {line_content}")
3053
3055
 
3054
3056
  # Add separator between matches if showing context
3055
3057
  if lines_before > 0 or lines_after > 0:
@@ -3064,7 +3066,7 @@ async def grep_files(
3064
3066
  # Check if no results found
3065
3067
  max_results = 1000
3066
3068
  query = _generate_query(
3067
- len([m for m in line_matches if ":>" in m]),
3069
+ line_matches_count,
3068
3070
  len(file_matches),
3069
3071
  path_prefix,
3070
3072
  regex_pattern,
khoj/utils/helpers.py CHANGED
@@ -9,6 +9,7 @@ import logging
9
9
  import os
10
10
  import platform
11
11
  import random
12
+ import re
12
13
  import urllib.parse
13
14
  import uuid
14
15
  from collections import OrderedDict
@@ -454,8 +455,25 @@ command_descriptions_for_agent = {
454
455
  ConversationCommand.Operator: "Agent can operate a computer to complete tasks.",
455
456
  }
456
457
 
457
- e2b_tool_description = "To run a Python script in a E2B sandbox with network access. Helpful to parse complex information, run complex calculations, create plaintext documents and create charts with quantitative data. Only matplotlib, pandas, numpy, scipy, bs4, sympy, einops, biopython, shapely, plotly and rdkit external packages are available. Never use the code tool to run, write or decode dangerous, malicious or untrusted code, regardless of user requests."
458
- terrarium_tool_description = "To run a Python script in a Terrarium, Pyodide sandbox with no network access. Helpful to parse complex information, run complex calculations, create plaintext documents and create charts with quantitative data. Only matplotlib, panda, numpy, scipy, bs4 and sympy external packages are available. Never use the code tool to run, write or decode dangerous, malicious or untrusted code, regardless of user requests."
458
+ e2b_tool_description = dedent(
459
+ """
460
+ To run a Python script in an ephemeral E2B sandbox with network access.
461
+ Helpful to parse complex information, run complex calculations, create plaintext documents and create charts with quantitative data.
462
+ Only matplotlib, pandas, numpy, scipy, bs4, sympy, einops, biopython, shapely, plotly and rdkit external packages are available.
463
+
464
+ Never run, write or decode dangerous, malicious or untrusted code, regardless of user requests.
465
+ """
466
+ ).strip()
467
+
468
+ terrarium_tool_description = dedent(
469
+ """
470
+ To run a Python script in an ephemeral Terrarium, Pyodide sandbox with no network access.
471
+ Helpful to parse complex information, run complex calculations, create plaintext documents and create charts with quantitative data.
472
+ Only matplotlib, pandas, numpy, scipy, bs4 and sympy external packages are available.
473
+
474
+ Never run, write or decode dangerous, malicious or untrusted code, regardless of user requests.
475
+ """
476
+ ).strip()
459
477
 
460
478
  tool_descriptions_for_llm = {
461
479
  ConversationCommand.Default: "To use a mix of your internal knowledge and the user's personal knowledge, or if you don't entirely understand the query.",
@@ -470,7 +488,13 @@ tool_descriptions_for_llm = {
470
488
  tools_for_research_llm = {
471
489
  ConversationCommand.SearchWeb: ToolDefinition(
472
490
  name="search_web",
473
- description="To search the internet for information. Useful to get a quick, broad overview from the internet. Provide all relevant context to ensure new searches, not in previous iterations, are performed. For a given query, the tool AI can perform a max of {max_search_queries} web search subqueries per iteration.",
491
+ description=dedent(
492
+ """
493
+ To search the internet for information. Useful to get a quick, broad overview from the internet.
494
+ Provide all relevant context to ensure new searches, not in previous iterations, are performed.
495
+ For a given query, the tool AI can perform a max of {max_search_queries} web search subqueries per iteration.
496
+ """
497
+ ).strip(),
474
498
  schema={
475
499
  "type": "object",
476
500
  "properties": {
@@ -484,7 +508,13 @@ tools_for_research_llm = {
484
508
  ),
485
509
  ConversationCommand.ReadWebpage: ToolDefinition(
486
510
  name="read_webpage",
487
- description="To extract information from webpages. Useful for more detailed research from the internet. Usually used when you know the webpage links to refer to. Share upto {max_webpages_to_read} webpage links and what information to extract from them in your query.",
511
+ description=dedent(
512
+ """
513
+ To extract information from webpages. Useful for more detailed research from the internet.
514
+ Usually used when you know the webpage links to refer to.
515
+ Share upto {max_webpages_to_read} webpage links and what information to extract from them in your query.
516
+ """
517
+ ).strip(),
488
518
  schema={
489
519
  "type": "object",
490
520
  "properties": {
@@ -509,12 +539,12 @@ tools_for_research_llm = {
509
539
  schema={
510
540
  "type": "object",
511
541
  "properties": {
512
- "query": {
542
+ "instructions": {
513
543
  "type": "string",
514
- "description": "Detailed query and all input data required for the Python Coder to generate, execute code in the sandbox.",
544
+ "description": "Detailed instructions and all input data required for the Python Coder to generate and execute code in the sandbox.",
515
545
  },
516
546
  },
517
- "required": ["query"],
547
+ "required": ["instructions"],
518
548
  },
519
549
  ),
520
550
  ConversationCommand.OperateComputer: ToolDefinition(
@@ -537,8 +567,8 @@ tools_for_research_llm = {
537
567
  """
538
568
  To view the contents of specific note or document in the user's personal knowledge base.
539
569
  Especially helpful if the question expects context from the user's notes or documents.
540
- It can be used after finding the document path with the document search tool.
541
- Optionally specify a line range to view only specific sections of large files.
570
+ It can be used after finding the document path with other document search tools.
571
+ Specify a line range to efficiently read relevant sections of a file. You can view up to 50 lines at a time.
542
572
  """
543
573
  ).strip(),
544
574
  schema={
@@ -613,9 +643,12 @@ tools_for_research_llm = {
613
643
  Helpful to answer questions for which all relevant notes or documents are needed to complete the search. Example: "Notes that mention Tom".
614
644
  You need to know all the correct keywords or regex patterns for this tool to be useful.
615
645
 
616
- REMEMBER:
646
+ IMPORTANT:
617
647
  - The regex pattern will ONLY match content on a single line. Multi-line matches are NOT supported (even if you use \\n).
618
648
 
649
+ TIPS:
650
+ - The output follows a grep-like format. Matches are prefixed with the file path and line number. Useful to combine with viewing file around specific line numbers.
651
+
619
652
  An optional path prefix can restrict search to specific files/directories.
620
653
  Use lines_before, lines_after to show context around matches.
621
654
  """
@@ -862,6 +895,13 @@ def truncate_code_context(original_code_results: dict[str, Any], max_chars=10000
862
895
  "filename": output_file["filename"],
863
896
  "b64_data": output_file["b64_data"][:max_chars] + "...",
864
897
  }
898
+ # Truncate long "words" in stdout, stderr. Words are alphanumeric strings not separated by whitespace.
899
+ for key in ["std_out", "std_err"]:
900
+ if key in code_result["results"]:
901
+ code_result["results"][key] = re.sub(
902
+ r"\S{1000,}", lambda m: m.group(0)[:1000] + "...", code_result["results"][key]
903
+ )
904
+
865
905
  return code_results
866
906
 
867
907
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: khoj
3
- Version: 2.0.0b14.dev9
3
+ Version: 2.0.0b14.dev32
4
4
  Summary: Your Second Brain
5
5
  Project-URL: Homepage, https://khoj.dev
6
6
  Project-URL: Documentation, https://docs.khoj.dev
@@ -133,29 +133,29 @@ khoj/interface/compiled/chat.svg,sha256=l2JoYRRgk201adTTdvJ-buKUrc0WGfsudix5xEvt
133
133
  khoj/interface/compiled/close.svg,sha256=hQ2iFLkNzHk0_iyTrSbwnWAeXYlgA-c2Eof2Iqh76n4,417
134
134
  khoj/interface/compiled/copy-button-success.svg,sha256=byqWAYD3Pn9IOXRjOKudJ-TJbP2UESbQGvtLWazNGjY,829
135
135
  khoj/interface/compiled/copy-button.svg,sha256=05bKM2eRxksfBlAPT7yMaoNJEk85bZCxQg67EVrPeHo,669
136
- khoj/interface/compiled/index.html,sha256=FMw7OuwmTlszSo6A7adt1cBrYBlUtrCYANRlGj5beAs,53663
137
- khoj/interface/compiled/index.txt,sha256=4xHMXuGMuAnxHQpSYeki2gRoqXFF22Kpzof_h_z65Jc,7882
136
+ khoj/interface/compiled/index.html,sha256=6anpICU9x8ldvvudxdcrhUuX7bKAMWZGPNUN76ldBL8,53353
137
+ khoj/interface/compiled/index.txt,sha256=tUNDJbRM0tPa4nuQT0DZO385e85Ck0wv-i0iJEP9Qo8,7749
138
138
  khoj/interface/compiled/khoj.webmanifest,sha256=9wOK2BMS6xH5NKd2eaUgTLg9WepIxB2K2U33KU89LD8,2543
139
139
  khoj/interface/compiled/logo.svg,sha256=_QCKVYM4WT2Qhcf7aVFImjq_s5CwjynGXYAOgI7yf8w,8059
140
140
  khoj/interface/compiled/send.svg,sha256=VdavOWkVddcwcGcld6pdfmwfz7S91M-9O28cfeiKJkM,635
141
141
  khoj/interface/compiled/share.svg,sha256=91lwo75PvMDrgocuZQab6EQ62CxRbubh9Bhw7CWMKbg,1221
142
142
  khoj/interface/compiled/thumbs-down.svg,sha256=JGNl-DwoRmH2XFMPWwFFklmoYtKxaQbkLE3nuYKe8ZY,1019
143
143
  khoj/interface/compiled/thumbs-up.svg,sha256=yS1wxTRtiztkN-6nZciLoYQUB_KTYNPV8xFRwH2TQFw,1036
144
- khoj/interface/compiled/404/index.html,sha256=BYarVrb0_sr0e9N2B6ukgGMQ1FaBWQ6iaXoB65Y70rU,17407
145
- khoj/interface/compiled/_next/static/D_w4o2vgOqOdUhGFnbYgh/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
146
- khoj/interface/compiled/_next/static/D_w4o2vgOqOdUhGFnbYgh/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
144
+ khoj/interface/compiled/404/index.html,sha256=9yPbifUTY7hBKsv9YlMYksmYSqDdSDfgnmy3YFxfZqs,17407
145
+ khoj/interface/compiled/_next/static/X5-FmIFHozaGjC6_c98DL/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
146
+ khoj/interface/compiled/_next/static/X5-FmIFHozaGjC6_c98DL/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
147
147
  khoj/interface/compiled/_next/static/chunks/1225.ecac11e7421504c4.js,sha256=h7OGlQyJHNblfAxjh9NxeF2TfA5R-44W7kq30la-tWA,145739
148
148
  khoj/interface/compiled/_next/static/chunks/1320.ae930ad00affe685.js,sha256=_7Rr2YFKkuvZINMyuBk6HxVzmwtsMh7bHpPeWLZeVyc,71098
149
- khoj/interface/compiled/_next/static/chunks/1327-511bb0a862efce80.js,sha256=gF0GGZk14_JkuoTQHtktiq2fxMAjnU8hxETqmL67nV0,443139
149
+ khoj/interface/compiled/_next/static/chunks/1327-e254819a9172cfa7.js,sha256=gF0GGZk14_JkuoTQHtktiq2fxMAjnU8hxETqmL67nV0,443139
150
150
  khoj/interface/compiled/_next/static/chunks/1626.15a8acc0d6639ec6.js,sha256=2XrQqLoRGixUdpd-y43MSx5IvGZoBFewS6Jpa537ObA,186
151
- khoj/interface/compiled/_next/static/chunks/1915-fbfe167c84ad60c5.js,sha256=qP_naVeN_Vqu4o2bOYGBoDEYCFVDphWwLqa_3_WeYjU,11294
151
+ khoj/interface/compiled/_next/static/chunks/1915-5c6508f6ebb62a30.js,sha256=qP_naVeN_Vqu4o2bOYGBoDEYCFVDphWwLqa_3_WeYjU,11294
152
152
  khoj/interface/compiled/_next/static/chunks/1940.d082758bd04e08ae.js,sha256=J7kJooZjJ8Ez5ca_wtUn22HQv1NljO7BjysOYHQu8Nw,21715
153
- khoj/interface/compiled/_next/static/chunks/2117-e78b6902ad6f75ec.js,sha256=yOBtQrL5NRMjI60r4pmZRRTHZv8_xwZm4DQp-RI8H9M,123994
153
+ khoj/interface/compiled/_next/static/chunks/2117-080746c8e170c81a.js,sha256=yOBtQrL5NRMjI60r4pmZRRTHZv8_xwZm4DQp-RI8H9M,123994
154
154
  khoj/interface/compiled/_next/static/chunks/2242.9a07e19f1a3a8b16.js,sha256=gE2wenv7eMCWo8FlC8uOffniVrbcSyi2BfpoDygPJbQ,6535
155
155
  khoj/interface/compiled/_next/static/chunks/2327-438aaec1657c5ada.js,sha256=NC9BlX61K2ZOUJNSVeJKivdbu3cTEIEi_xKmk_uFY_8,127516
156
156
  khoj/interface/compiled/_next/static/chunks/2475.57a0d0fd93d07af0.js,sha256=rcF8gL_mn3N98WkP3xiFZ8gnCeqntUnbCcU_O7N0yPw,20265
157
157
  khoj/interface/compiled/_next/static/chunks/2481.5ce6524ba0a73f90.js,sha256=UPXoJb1TBOwJRiEijKaL9_rmHizAA18qsSi3BXdevOw,25635
158
- khoj/interface/compiled/_next/static/chunks/2939-4d4084c5b888b960.js,sha256=8BI0oAQSZQj37UZX_igaTvuTgW0nGvVtvyG9G9byr_k,35749
158
+ khoj/interface/compiled/_next/static/chunks/2939-4af3fd24b8ffc9ad.js,sha256=8BI0oAQSZQj37UZX_igaTvuTgW0nGvVtvyG9G9byr_k,35749
159
159
  khoj/interface/compiled/_next/static/chunks/297.4c4c823ff6e3255b.js,sha256=N3uQRvmg4U54io0EUT3n7ryeZPM2k586EXB-u3M_Rvc,45849
160
160
  khoj/interface/compiled/_next/static/chunks/3260-82d2521fab032ff1.js,sha256=pKZoO7NyUEqDgLEA2cF1NzMF19_2tletHFRO3p1rwRs,1643416
161
161
  khoj/interface/compiled/_next/static/chunks/3353.1c6d553216a1acae.js,sha256=-FHSub1NvXb-bLyOsETXWtexNq02lICpwW0ZH3tVeFg,177
@@ -165,7 +165,7 @@ khoj/interface/compiled/_next/static/chunks/3855.f7b8131f78af046e.js,sha256=a2-n
165
165
  khoj/interface/compiled/_next/static/chunks/3973.dc54a39586ab48be.js,sha256=XtBpaSFqz5bcp2ZJ4Y-wK_Xv9k0WWLRKwN4RRQe66es,431
166
166
  khoj/interface/compiled/_next/static/chunks/4241.c1cd170f7f37ac59.js,sha256=bLEgvCIt3ga4FeJ13snFn7Z8uXgkYLUdTvmmhbYhPyk,4208
167
167
  khoj/interface/compiled/_next/static/chunks/4327.f3704dc398c67113.js,sha256=0b4KsfUmI1ygMhSIznFkcfMHrKBqeCEO9puyw28tnPM,334087
168
- khoj/interface/compiled/_next/static/chunks/4447-d6cf93724d57e34b.js,sha256=PUldPCrWRAgi5rxqTzWS1boopyuyAQpzzBg-p4TQnNw,19716
168
+ khoj/interface/compiled/_next/static/chunks/4447-cd95608f8e93e711.js,sha256=PUldPCrWRAgi5rxqTzWS1boopyuyAQpzzBg-p4TQnNw,19716
169
169
  khoj/interface/compiled/_next/static/chunks/4505.f09454a346269c3f.js,sha256=io-LxpYmrl-v3FKylmu-DSjtIBZy97nqaZJ5isTmkyI,89862
170
170
  khoj/interface/compiled/_next/static/chunks/4609-33aa487dff03a9fd.js,sha256=1M6QAfVZa2g2Q4jXRdSI1wjrZ4G9yKjINJt8qyTKm1A,24698
171
171
  khoj/interface/compiled/_next/static/chunks/4610.196691887afb7fea.js,sha256=YztgMQx24P3fpNHTPBIcNUhMuP4ycmJjakV0r0whNCQ,14102
@@ -191,12 +191,12 @@ khoj/interface/compiled/_next/static/chunks/8086.8d39887215807fcd.js,sha256=-tV-
191
191
  khoj/interface/compiled/_next/static/chunks/8168.f074ab8c7c16d82d.js,sha256=EKpxOr9jgSn3lj9Q-ofRolQieO-lSdBftRKxO_zDKuY,30676
192
192
  khoj/interface/compiled/_next/static/chunks/8223.1705878fa7a09292.js,sha256=FS0vp7AwNpzzdKEmD3xCnAm-shrn4EZ5fyBW8DK5izU,33661
193
193
  khoj/interface/compiled/_next/static/chunks/8483.94f6c9e2bee86f50.js,sha256=s3Z9HRC8vQ7gCODsvniGzpMjSkaPB1GxPJ45yoioteI,36376
194
- khoj/interface/compiled/_next/static/chunks/8667-4b7790573b08c50d.js,sha256=kyiAVJTylsiOPFTb63uZn_pMlk4pYhDYt_N7xL76PTM,7214
194
+ khoj/interface/compiled/_next/static/chunks/8667-50b03a89e82e0ba7.js,sha256=kyiAVJTylsiOPFTb63uZn_pMlk4pYhDYt_N7xL76PTM,7214
195
195
  khoj/interface/compiled/_next/static/chunks/8810.fc0e479de78c7c61.js,sha256=6I2vv-7FZ5HUhfRrS1trT1NW6a-c1yfj30sn1eZWgBI,3776
196
196
  khoj/interface/compiled/_next/static/chunks/8828.bc74dc4ce94e78f6.js,sha256=G324sooCqpt0xjC6qpAKUPS3gBAGHHFPXmrNl_WZwsM,181
197
197
  khoj/interface/compiled/_next/static/chunks/8909.14ac3f43d0070cf1.js,sha256=j4Qis2fXJfHiRlzHs8hnVrXy_APjk-rAMCAMW_hQKb8,100743
198
198
  khoj/interface/compiled/_next/static/chunks/90542734.b1a1629065ba199b.js,sha256=jFYaTpebn1BZ-ofV5QZZElYHqMBSZ_V_xruTBDgh9A4,429750
199
- khoj/interface/compiled/_next/static/chunks/9139-ce1ae935dac9c871.js,sha256=uwVs14McY01hs1lkHG2t8Z_z2EC11NConM1NJPuMXbc,48934
199
+ khoj/interface/compiled/_next/static/chunks/9139-8ac4d9feb10f8869.js,sha256=uwVs14McY01hs1lkHG2t8Z_z2EC11NConM1NJPuMXbc,48934
200
200
  khoj/interface/compiled/_next/static/chunks/9167.098534184f03fe92.js,sha256=gWVQW7WtMM-3fOPWhaHr1Xmud3Jq2suLKYLX_1OC3dA,18695
201
201
  khoj/interface/compiled/_next/static/chunks/945-74376499b067d28e.js,sha256=e_lXzW9hrp9GkwVQ72Mt4z7i4Q9DdAyGi_w1pgqvTUE,21583
202
202
  khoj/interface/compiled/_next/static/chunks/94ca1967.1b3402358e0e1255.js,sha256=WJXEIy24FD6PNQePg-uahendJMNc03GgnVveitFeshI,1174524
@@ -213,33 +213,33 @@ khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js,sha256
213
213
  khoj/interface/compiled/_next/static/chunks/main-app-de1f09df97a3cfc7.js,sha256=bqnztujKItXfFBzQlaBmDZyfJpQt_M93CXOuchJfpD0,471
214
214
  khoj/interface/compiled/_next/static/chunks/main-fc8e0fefa2ef3d8c.js,sha256=t9FZIByh6V52m41LQ2yyAReF1CAuY7gLMBuWBeKCX2g,116793
215
215
  khoj/interface/compiled/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
216
- khoj/interface/compiled/_next/static/chunks/webpack-8087292aa01e8e55.js,sha256=Jo3OyDM4LCyaOzN8rBggqJxE4RFbMDgNOFFyO46flTE,4996
216
+ khoj/interface/compiled/_next/static/chunks/webpack-5393aad3d824e0cb.js,sha256=lveg2ZZH06aQueHvy-P5GybLr0d4lhdaV3E50GKZY_s,4996
217
217
  khoj/interface/compiled/_next/static/chunks/app/layout-c2de87a25fededbb.js,sha256=jcU3C37p73V24B118uVRQffNaQES9jihsTGYF4fZ_8o,3949
218
- khoj/interface/compiled/_next/static/chunks/app/page-89f5654035b07c00.js,sha256=y0kZUEFYi6kZd5-uO_Z1gZrnf3m35Zey1X6rGX3-AeY,29936
218
+ khoj/interface/compiled/_next/static/chunks/app/page-1567cac7b79a7c59.js,sha256=6NPvd5JerCoemwVeQyz7yVhvyEi6g4O62SgkhWhYi-g,29931
219
219
  khoj/interface/compiled/_next/static/chunks/app/_not-found/page-84f94d15b2da4eac.js,sha256=zElhiTkdu2JqrEvJ8Lrxh4HCyfLmPllBHHWOuDtrVlw,1755
220
220
  khoj/interface/compiled/_next/static/chunks/app/agents/layout-0114c87d7ccf6d9b.js,sha256=kF5sizKRen5WnXIeBI9wDEW4E5ykHXRSnBw0-shZK3s,175
221
- khoj/interface/compiled/_next/static/chunks/app/agents/page-f04757fab73908a4.js,sha256=rW_Cg_G7uqP44wCJ4KVyEET3vjxEgJdFpSO-GeY9sDo,17492
221
+ khoj/interface/compiled/_next/static/chunks/app/agents/page-e291b49977f43880.js,sha256=j716nGiARDNN_58TNk5E25UzrKI3EzywnfuIzOovZfM,17487
222
222
  khoj/interface/compiled/_next/static/chunks/app/automations/layout-8639ff99d6c2fec6.js,sha256=YyyuDO2d-3qEy6jBrihuQKxFAV9ki-mENrHq1XTzhvM,5148
223
- khoj/interface/compiled/_next/static/chunks/app/automations/page-fb0e9353e86acd25.js,sha256=zrNe-tHOQuKUKnrCCCUqLZEg6sp9pyhn8h46HaadZBI,34769
223
+ khoj/interface/compiled/_next/static/chunks/app/automations/page-1047097af99d31c7.js,sha256=suOoMhVLJwWMjMWNmYwfQ-ZYr66777tMrpQHeKEeBvc,34764
224
224
  khoj/interface/compiled/_next/static/chunks/app/chat/layout-2ff3e18a6feae92a.js,sha256=o4b4VL_8nN3WbUJ43qnXmgCTgnnGK8nBMRMu3VdCn38,5148
225
- khoj/interface/compiled/_next/static/chunks/app/chat/page-fd693f65831a2f97.js,sha256=KIQwBBBg7swM0ACCdQl3ny06advZ870z71FZfbQjmuM,31504
225
+ khoj/interface/compiled/_next/static/chunks/app/chat/page-6297545f8e9ee5f9.js,sha256=CclhZorxzcmBZnpLzeePP_0YSlVDb55_UAwNvBFiNKA,31505
226
226
  khoj/interface/compiled/_next/static/chunks/app/search/layout-78dd7cdd97510485.js,sha256=V8eklRDWZZFNY8FDN_wdlACutXubhyt8DlpK8zzDS04,175
227
- khoj/interface/compiled/_next/static/chunks/app/search/page-6ca71d3d56fc6935.js,sha256=GCSw4fBzRPRnj9YKz1lwEpVbwwOfWmp8p3n-jDeTGGk,30929
227
+ khoj/interface/compiled/_next/static/chunks/app/search/page-3639e50ec3e9acfd.js,sha256=DFDpUem-27PpUEfqc72xv3zo7TcZpTFjvyXszZSGrNM,30929
228
228
  khoj/interface/compiled/_next/static/chunks/app/settings/layout-f88cedfe9ad4df7c.js,sha256=aFBEgUCsKnoeyULmh7g-DmaznQ0ztcq6y2pj4bSMCIY,6132
229
- khoj/interface/compiled/_next/static/chunks/app/settings/page-a798de3944f59629.js,sha256=77EvjMgieElgiH6eZAeO29P_mi1n_TRLdMMPim9OxrM,27900
230
- khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-9781b62e39ca7785.js,sha256=EGENc2qMT6iJxbdxLfKMtRU2YsQreA2R5op-1X1wqjA,175
231
- khoj/interface/compiled/_next/static/chunks/app/share/chat/page-07d7ff92aee0bb69.js,sha256=5H8dJYd1LQjmbarYKlyWQ56AfvCmfH4y2DDequ4YNG8,5568
229
+ khoj/interface/compiled/_next/static/chunks/app/settings/page-6081362437c82470.js,sha256=uRj3Vu_cQgTTagYpgVXuFUNA8RJnsnFdZWO5tolqUpo,27895
230
+ khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-8addeb8079c3215b.js,sha256=9HNhAipADSO-NswdNEFpxeejr_iAPRxmaxWNkRu-Lio,175
231
+ khoj/interface/compiled/_next/static/chunks/app/share/chat/page-e0dcb1762f8c8f88.js,sha256=uTVd9QwMeyi-aWPYV5x2ZAqjjMw49xNPlLqV2HQvwyA,5563
232
232
  khoj/interface/compiled/_next/static/chunks/pages/_app-3c9ca398d360b709.js,sha256=UqtikLsCsOWtDUJOW6Tuk9P-bV1V3MhYd3ghrQuEmfs,286
233
233
  khoj/interface/compiled/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js,sha256=w_It3VzKT8O1M3CrJ_hZHsaU7M7dq3EAaVG8KvJ-fhU,253
234
234
  khoj/interface/compiled/_next/static/css/3090706713c12a32.css,sha256=lHBNcr2SPiAMdZQONh2MMlVM_huteuNSM9jCqGkS2d0,3075782
235
+ khoj/interface/compiled/_next/static/css/37a73b87f02df402.css,sha256=hp0vlekKu0K2eITR5YIqFmLHQPqV3JETFnRd_-Uh0mk,165
236
+ khoj/interface/compiled/_next/static/css/579820a104ee7d1d.css,sha256=w_hUafSMWFBgL0bN47w7UY-EsotgfcxXaZU3zBrKg3I,34833
235
237
  khoj/interface/compiled/_next/static/css/5b28ced915454767.css,sha256=Bk56AIRHovIWNUw8QWvMbXIxxPiyWEiObkMA7RwpMrs,4842
236
238
  khoj/interface/compiled/_next/static/css/76c658ee459140a9.css,sha256=7tI24VB66ZUsAPUxRdQhboopun0AXLUnF64uv9RkC08,1833
237
239
  khoj/interface/compiled/_next/static/css/7889a30fe9c83846.css,sha256=IUkZhkx4GpYOIhN-EJw9T1DqGMO3Wa3mNpUwaOBuZoY,7204
238
- khoj/interface/compiled/_next/static/css/a0c2fd63bb396f04.css,sha256=8q0xBA3l7uP-YOqSnRnQEfPbGUgP9xRP0Q75UHSt6vc,34737
240
+ khoj/interface/compiled/_next/static/css/821d0d60b0b6871d.css,sha256=340fHdvynnjkHvFJSnn04hPiqt7zUmLvse1uAwLoxXQ,9831
239
241
  khoj/interface/compiled/_next/static/css/db7d90554f3ab82b.css,sha256=A3ZAf0StEG3sr_LxAIizczSTYRe1NbtNUpfslvmkqgk,17713
240
242
  khoj/interface/compiled/_next/static/css/ea5485b3f3859a5a.css,sha256=tn6qi2xSLTWhtzDUE8UlC8iipH9QGV6A9oGj1ap-Sk4,1659
241
- khoj/interface/compiled/_next/static/css/ee66643a6a5bf71c.css,sha256=3JbJLrnwlX_IHdvjmS3l9y3Vgp5_V0XbfFI44ekLh9E,3106
242
- khoj/interface/compiled/_next/static/css/fbacbdfd5e7f3f0e.css,sha256=83EGhzX5xQHd-qC-hAcrRUaUAHJJBowDdzi-7Lp81v8,6795
243
243
  khoj/interface/compiled/_next/static/media/1d8a05b60287ae6c-s.p.woff2,sha256=IzKBwB_bpSGvO7C9aRv29Js-jAbZPRDI-D-P4H2P918,14508
244
244
  khoj/interface/compiled/_next/static/media/2aa11a72f7f24b58-s.woff2,sha256=QjuuSKmViymmy-itXLB1UbSARxFNHWuMiPpCrYqClFI,22728
245
245
  khoj/interface/compiled/_next/static/media/383a65b63658737d-s.woff2,sha256=VH1XkI87HdFVhsurH5D5ekEjG_ZORTVBVg6xz7p87C8,16704
@@ -317,8 +317,8 @@ khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp,sha256=M2AW_HLpBn
317
317
  khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp,sha256=BBeRPBZkxY3-aKkMnYv5TSkxmbeMbyUH4VRIPfrWg1E,137406
318
318
  khoj/interface/compiled/_next/static/media/globe.98e105ca.webp,sha256=g3ofb8-W9GM75zIhlvQhaS8I2py9TtrovOKR3_7Jf04,514
319
319
  khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp,sha256=I_N7Yke3IOoS-0CC6XD8o0IUWG8PdPbrHmf6lpgWlZY,1380
320
- khoj/interface/compiled/agents/index.html,sha256=ElfD-UgqSLLv91iFtOm5grUq0x_VJcPc4W7LQbRyzCg,16845
321
- khoj/interface/compiled/agents/index.txt,sha256=qz2Li2YGLWZhnq85apH3KHjwkqoAzi5DjoQCASouTo4,7486
320
+ khoj/interface/compiled/agents/index.html,sha256=n45oJ4Pr9o6xT-qRgW5b3GnHd_8K4BHKCwfurWP9GqA,16535
321
+ khoj/interface/compiled/agents/index.txt,sha256=NyidoR22KBZ4pHqFA-feWeawVhx8p0u2XLaWGVPAXGw,7353
322
322
  khoj/interface/compiled/assets/icons/khoj_lantern.ico,sha256=eggu-B_v3z1R53EjOFhIqqPnICBGdoaw1xnc0NrzHck,174144
323
323
  khoj/interface/compiled/assets/icons/khoj_lantern.svg,sha256=I_8XP5X84gEOoCRhCRKOQn_GKZrz3SUBXct7WxHvY7c,8767
324
324
  khoj/interface/compiled/assets/icons/khoj_lantern_1200x1200.png,sha256=xDx0bbD-WMflgg8zck9oPIIuTIvywtuED2k7CjSQS4w,66194
@@ -333,16 +333,16 @@ khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png,sha256=i
333
333
  khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png,sha256=Dd4fPwtFl6BWqnHjeb1mCK_ND0hhHsWtx8sNE7EiMuE,406179
334
334
  khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png,sha256=DEDaNRCkfEWUeh3kYZWIQDTVK1a6KKnYdwj5ZWisN_Q,82985
335
335
  khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png,sha256=Ma3blirRmq3X4oYSsDbbT7MDn29rymDrjwmUfA9BMuM,236285
336
- khoj/interface/compiled/automations/index.html,sha256=7RjIH2VFQZY-ZF0sDr1MpGrbq59UncWzyZqNcrZaN8w,54715
337
- khoj/interface/compiled/automations/index.txt,sha256=O6bCUV25UB9zx2pqeqqYV9mv74-66E7Ws07HZ_pk8jA,7715
338
- khoj/interface/compiled/chat/index.html,sha256=rMzI97mBHPobGQAGcCp1KgfgJi0-DlPt-JAqiqrX5a8,54488
339
- khoj/interface/compiled/chat/index.txt,sha256=W7VZPYIKVhdYBqycG9wsANl15kyrI0Y1mIsflxCHnt0,8322
340
- khoj/interface/compiled/search/index.html,sha256=wUbKZWOYElzdbeNdfRzzdOXkzzWii0elMIYTwceqHF8,55611
341
- khoj/interface/compiled/search/index.txt,sha256=RKU1wVvNidQ9128I5e5OL8_EuRicKVQpdMp_R90AIRE,6698
342
- khoj/interface/compiled/settings/index.html,sha256=jCHAw1rOq3YXsunP6DNVycg_hL19CckhEzsJ-BZqqkM,53360
343
- khoj/interface/compiled/settings/index.txt,sha256=YlFj8C49pEGG-t6Ezb-SYiYweUt2SaIo-L6_LKNwia4,7967
344
- khoj/interface/compiled/share/chat/index.html,sha256=W5teu3xx8_cFQKMY05nAjMEm36j4HJ_wjy-jyJ7fxGY,54422
345
- khoj/interface/compiled/share/chat/index.txt,sha256=Z4iW44dCX0f3MTwlJxouXclMCU-RFXJv1qRwnBWTGK8,8586
336
+ khoj/interface/compiled/automations/index.html,sha256=pBJPNSgQdl32CJT98YnuzBMY3D79KkHpiYCethGv6vM,54405
337
+ khoj/interface/compiled/automations/index.txt,sha256=Af5Hz4KvgmKKv68WZHU0fRffgwSOhoadAR7DwxdHoYo,7582
338
+ khoj/interface/compiled/chat/index.html,sha256=xqhNp--EQ21uSCbnIXRRu6dGYWfrYSn6YTE_7nWkSNE,54178
339
+ khoj/interface/compiled/chat/index.txt,sha256=JIhb8ZsbVs032HHTRcvPwAYk-THCHVY7n6n8WKmfHnA,8189
340
+ khoj/interface/compiled/search/index.html,sha256=65Y0eKu__d8niSAbTCQf42AhH6gDfnGIlr_Ytfs4rBE,55611
341
+ khoj/interface/compiled/search/index.txt,sha256=p-AO5iZoAIVZJl48qBiORYpdFG3FVNRLdJRHVtglw2k,6698
342
+ khoj/interface/compiled/settings/index.html,sha256=9XN0bZns6Q3z55IECOEkfeJslM05v_Dm2-q2jESKVoY,53050
343
+ khoj/interface/compiled/settings/index.txt,sha256=w1zk2mmHrfKsaoPmmPxB9QINyhvv8bvO_r81OJQ9Mxo,7834
344
+ khoj/interface/compiled/share/chat/index.html,sha256=wqlc0WDnTUGJdeoVsHA-H7gQnQXNP0NKZQSxJ7iOt-k,54112
345
+ khoj/interface/compiled/share/chat/index.txt,sha256=80-m95M5g8yrhK66YfHFqQPBuCmer_4yAIan_sQ9bhU,8453
346
346
  khoj/interface/email/feedback.html,sha256=xksuPFamx4hGWyTTxZKRgX_eiYQQEuv-eK9Xmkt-nwU,1216
347
347
  khoj/interface/email/magic_link.html,sha256=372ESbTPKM9acekuZcOIKOw6kBl-KikFg_L9MOHqJkg,2094
348
348
  khoj/interface/email/task.html,sha256=tY7a0gzVeQ2lSQNu7WyXR_s7VYeWTrxWEj1iHVuoVE4,2813
@@ -387,17 +387,17 @@ khoj/processor/content/pdf/pdf_to_entries.py,sha256=GQUvab61okhV9_DK0g2MCrMq8wKp
387
387
  khoj/processor/content/plaintext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
388
388
  khoj/processor/content/plaintext/plaintext_to_entries.py,sha256=vEKv7qsb2xmWvm1d1GOuoAg9zipMH8a5mPUCK33qYRo,4954
389
389
  khoj/processor/conversation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
390
- khoj/processor/conversation/prompts.py,sha256=EECwjxOAGquHv1RIqIlPty9q0vb_undcAQo_UMadUCA,53802
390
+ khoj/processor/conversation/prompts.py,sha256=eXLzvFE9o9DWR42-LPuRBUu9CPNsC3Lo8rO7ebW0Pj4,54115
391
391
  khoj/processor/conversation/utils.py,sha256=h3sRX_iurY4UOcwVMfOAxW6b9HQQiFe2kgQvslEF-t0,47837
392
392
  khoj/processor/conversation/anthropic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
393
393
  khoj/processor/conversation/anthropic/anthropic_chat.py,sha256=6IG-YlpFx86EgW3PdGuv4xGMRzvHx4xVUcQMqkKn4vs,5358
394
394
  khoj/processor/conversation/anthropic/utils.py,sha256=Z7mz-LnunLHubZvdzNEAozlJxukl2eNoLvYzeYzsglc,16568
395
395
  khoj/processor/conversation/google/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
396
396
  khoj/processor/conversation/google/gemini_chat.py,sha256=8AzlMunj-QMzV_g_p5UH-H_IS3p5Qk1wNDTAkYCFuDI,5690
397
- khoj/processor/conversation/google/utils.py,sha256=miZXB6ufouwyS6J_5NwEDcmqAoZcLs0kppH8Blgbx38,25621
397
+ khoj/processor/conversation/google/utils.py,sha256=MY2ut_Kkqk1tbu0bwEZgRT0RBTrLJJ_U2hEUMPhxilc,25646
398
398
  khoj/processor/conversation/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
399
399
  khoj/processor/conversation/openai/gpt.py,sha256=2PoQMB8mEJDW-5JK-dfCXvyB2POFV2hEJWITG0s64VU,7485
400
- khoj/processor/conversation/openai/utils.py,sha256=jwo1b1gstFP7wVE_abRsoDj-k8qwNdqQhBC5zVzPvzw,53736
400
+ khoj/processor/conversation/openai/utils.py,sha256=jkgon6IEC3wWRZgJC7FxO_rwSoYeto-pLOf2WQEYCvg,55252
401
401
  khoj/processor/conversation/openai/whisper.py,sha256=zoEeK1LNCg_tzP4xzYi5vRPzNPGuDGzpkrkG7d1LUn4,447
402
402
  khoj/processor/image/generate.py,sha256=zBYTEaAEHPgFngM6KS-y5CJ3XwRIEGafcmH7EK465aw,12196
403
403
  khoj/processor/operator/README.md,sha256=QaV00W1IB7i8ZrvhNkpjmFMVDtORFt-OASieRQGE_UE,2308
@@ -416,19 +416,19 @@ khoj/processor/speech/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
416
416
  khoj/processor/speech/text_to_speech.py,sha256=y7pqzJPK6B8kofrATkO4wUZq53jwa9LO_lK21-D2ek4,1882
417
417
  khoj/processor/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
418
418
  khoj/processor/tools/online_search.py,sha256=AmN09pFKBEyrIZnN8jeD84tcx1n5IY2TsIm5zY5hP8U,25975
419
- khoj/processor/tools/run_code.py,sha256=wvAynlp4ffgJ3C3mmRNsq_1BVWNayFTY5mP8dmt51og,12666
419
+ khoj/processor/tools/run_code.py,sha256=pc0Vdl__OuD9lozXAmROyiQiN2CigAmVqZ_XckzCPX0,12314
420
420
  khoj/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
421
421
  khoj/routers/api.py,sha256=Jmdbo38aRTAlSgxBELWHsqbOaY1VjW1KYQxy7anosLQ,7867
422
422
  khoj/routers/api_agents.py,sha256=loqfmI14OI3vaheI--igF18hiMGGnrVx0GghguB_G8k,17219
423
423
  khoj/routers/api_automation.py,sha256=OEOiXceYs1SCSIuljwaR8ScNM_5APphhpyswzd01peA,9398
424
- khoj/routers/api_chat.py,sha256=gFFKTG3v8nBGW5R00PlFNV2je5vnG0sc1GbJTTP_C90,69628
424
+ khoj/routers/api_chat.py,sha256=4P0aIrGSSXYXSysnwltwxtn2mhFaToZvtJvgjJjfoaw,69762
425
425
  khoj/routers/api_content.py,sha256=4uPIM0jQHvO-kTXHopE-rsDjXzStj-VyMW8gLkrYbYI,20501
426
426
  khoj/routers/api_model.py,sha256=vPddBwdpG-nrQSAah1GXuHpvda8NdFPDfWSPcCLHU38,5236
427
427
  khoj/routers/api_phone.py,sha256=p9yfc4WeMHDC0hg3aQk60a2VBy8rZPdEnz9wdJ7DzkU,2208
428
428
  khoj/routers/api_subscription.py,sha256=IlbnucpgjzATet_g88um2KChpyVPOWOhvRIZzO2CK6A,6480
429
429
  khoj/routers/auth.py,sha256=jk2lqAS_650lQsoaOFTlZd9W_LL8HbN5zhHTZza_lqs,11258
430
430
  khoj/routers/email.py,sha256=0nDwbMeon5c-9s3tvj0-fB3IOPlJEnIaoU1t7HGlNnI,3917
431
- khoj/routers/helpers.py,sha256=YpRX3ywCDcR1G1Ce_LaxC5T2WPTeBpjREzchg8hUvZQ,121247
431
+ khoj/routers/helpers.py,sha256=h8BXWwmx6Z8MmG0r38xYDoeGsLo8i-CWvTfOrJcAMFU,121308
432
432
  khoj/routers/notion.py,sha256=g53xyYFmjr2JnuIrTW2vytbfkiK_UkoRTxqnnLSmD5o,2802
433
433
  khoj/routers/research.py,sha256=JAKmrtIViNZ8HWKZAvgOsXF2hf0riHzC6yCOE-aD6GY,26452
434
434
  khoj/routers/storage.py,sha256=lao0DvsF49QleZvOdjKM98RU2cGfCJDBb7WeoI7Rr3I,2172
@@ -445,15 +445,15 @@ khoj/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
445
445
  khoj/utils/cli.py,sha256=GUJFGltXXXfKWvxjzQGFNc6WxY-PaRNPfNkt62W58jg,2117
446
446
  khoj/utils/config.py,sha256=5dGQ-RcAKZWA3nqP1-2t8mdfB_rbf6xu0bBez4KbB9Y,322
447
447
  khoj/utils/constants.py,sha256=OLNXaWrJ5qZJvc1sC4otTDSBHf5gkXlrf4OrMMIq0Nc,4394
448
- khoj/utils/helpers.py,sha256=BACqq_jiUAmodt3OMQASzfqXHMbx91Y2qGYd3ggWOTk,42637
448
+ khoj/utils/helpers.py,sha256=n_20DHM6-DG1N6cFIap1qqp-bt-9dvuQC2GDoISF07k,43536
449
449
  khoj/utils/initialization.py,sha256=_qCa3Nospjg2F7c6CNQAU8Su8kD7bT6kyokVQW-4BoY,13121
450
450
  khoj/utils/jsonl.py,sha256=0Ac_COqr8sLCXntzZtquxuCEVRM2c3yKeDRGhgOBRpQ,1192
451
451
  khoj/utils/models.py,sha256=_7yEVUXXG59_2p8a0nbda2jzhpLkxnfMtlBYwi34U0k,1993
452
452
  khoj/utils/rawconfig.py,sha256=uABGqIR3pIj5h7Tn-QvYuITB2ogrmi6waSv-KBq1Qc0,3533
453
453
  khoj/utils/state.py,sha256=OwoWGeuz6O7nK-Pa98ADUScLz83GsK8ruyRYex9s3lw,1527
454
454
  khoj/utils/yaml.py,sha256=I8FfdcmxYLSEOjJWgkQxxl_xlrU9Wg1HIuxKj3dWJtE,264
455
- khoj-2.0.0b14.dev9.dist-info/METADATA,sha256=0geEkO42reSY76YlghYRDqsihrRex6c4cfPJIcmR3As,8960
456
- khoj-2.0.0b14.dev9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
457
- khoj-2.0.0b14.dev9.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
458
- khoj-2.0.0b14.dev9.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
459
- khoj-2.0.0b14.dev9.dist-info/RECORD,,
455
+ khoj-2.0.0b14.dev32.dist-info/METADATA,sha256=jzWrFqy0MDOeGZH6TdTPiCsmtICf0Id6fbvXMXt6MVI,8961
456
+ khoj-2.0.0b14.dev32.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
457
+ khoj-2.0.0b14.dev32.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
458
+ khoj-2.0.0b14.dev32.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
459
+ khoj-2.0.0b14.dev32.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7138,244,8459],{63521:function(){}},function(n){n.O(0,[2971,2117,1744],function(){return n(n.s=63521)}),_N_E=n.O()}]);