khoj 2.0.0b13.dev23__py3-none-any.whl → 2.0.0b14__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- khoj/database/admin.py +2 -2
- khoj/interface/compiled/404/index.html +2 -2
- khoj/interface/compiled/_next/static/chunks/9808-c0742b05e1ef29ba.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/agents/layout-0114c87d7ccf6d9b.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/automations/layout-8639ff99d6c2fec6.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/automations/{page-198b26df6e09bbb0.js → page-1047097af99d31c7.js} +1 -1
- khoj/interface/compiled/_next/static/chunks/app/chat/layout-2ff3e18a6feae92a.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/chat/page-ac7ed0a1aff1b145.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/search/layout-78dd7cdd97510485.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-8addeb8079c3215b.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/share/chat/{page-e0dcb1762f8c8f88.js → page-819c6536c15e3d31.js} +1 -1
- khoj/interface/compiled/_next/static/css/5c7a72bad47e50b3.css +25 -0
- khoj/interface/compiled/_next/static/css/{c34713c98384ee87.css → 821d0d60b0b6871d.css} +1 -1
- khoj/interface/compiled/_next/static/css/ecea704005ba630c.css +1 -0
- khoj/interface/compiled/agents/index.html +2 -2
- khoj/interface/compiled/agents/index.txt +1 -1
- khoj/interface/compiled/automations/index.html +2 -2
- khoj/interface/compiled/automations/index.txt +3 -3
- khoj/interface/compiled/chat/index.html +2 -2
- khoj/interface/compiled/chat/index.txt +5 -4
- khoj/interface/compiled/index.html +2 -2
- khoj/interface/compiled/index.txt +1 -1
- khoj/interface/compiled/search/index.html +2 -2
- khoj/interface/compiled/search/index.txt +1 -1
- khoj/interface/compiled/settings/index.html +2 -2
- khoj/interface/compiled/settings/index.txt +1 -1
- khoj/interface/compiled/share/chat/index.html +2 -2
- khoj/interface/compiled/share/chat/index.txt +2 -2
- khoj/processor/conversation/google/gemini_chat.py +1 -1
- khoj/processor/conversation/google/utils.py +62 -19
- khoj/processor/conversation/openai/utils.py +58 -22
- khoj/processor/conversation/prompts.py +37 -25
- khoj/processor/conversation/utils.py +2 -1
- khoj/processor/tools/run_code.py +15 -22
- khoj/routers/api_chat.py +8 -3
- khoj/routers/api_content.py +1 -1
- khoj/routers/helpers.py +44 -38
- khoj/routers/research.py +7 -5
- khoj/utils/constants.py +6 -1
- khoj/utils/helpers.py +55 -15
- {khoj-2.0.0b13.dev23.dist-info → khoj-2.0.0b14.dist-info}/METADATA +1 -1
- {khoj-2.0.0b13.dev23.dist-info → khoj-2.0.0b14.dist-info}/RECORD +47 -47
- khoj/interface/compiled/_next/static/chunks/7127-97b83757db125ba6.js +0 -1
- khoj/interface/compiled/_next/static/chunks/app/agents/layout-e00fb81dca656a10.js +0 -1
- khoj/interface/compiled/_next/static/chunks/app/automations/layout-63603d2cb33279f7.js +0 -1
- khoj/interface/compiled/_next/static/chunks/app/chat/layout-33934fc2d6ae6838.js +0 -1
- khoj/interface/compiled/_next/static/chunks/app/chat/page-dfcc1e8e2ad62873.js +0 -1
- khoj/interface/compiled/_next/static/chunks/app/search/layout-c02531d586972d7d.js +0 -1
- khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-e8e5db7830bf3f47.js +0 -1
- khoj/interface/compiled/_next/static/css/23b26df423cd8a9c.css +0 -1
- khoj/interface/compiled/_next/static/css/3090706713c12a32.css +0 -25
- /khoj/interface/compiled/_next/static/{Q7tm150g44Fs4H1CGytNf → Qn_2XyeVWxjaIRks7rzM-}/_buildManifest.js +0 -0
- /khoj/interface/compiled/_next/static/{Q7tm150g44Fs4H1CGytNf → Qn_2XyeVWxjaIRks7rzM-}/_ssgManifest.js +0 -0
- {khoj-2.0.0b13.dev23.dist-info → khoj-2.0.0b14.dist-info}/WHEEL +0 -0
- {khoj-2.0.0b13.dev23.dist-info → khoj-2.0.0b14.dist-info}/entry_points.txt +0 -0
- {khoj-2.0.0b13.dev23.dist-info → khoj-2.0.0b14.dist-info}/licenses/LICENSE +0 -0
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=
|
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=
|
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=
|
1721
|
+
max_prompt_size=max_prompt_size,
|
1721
1722
|
tokenizer_name=chat_model.tokenizer,
|
1722
1723
|
agent=agent,
|
1723
1724
|
vision_available=vision_available,
|
@@ -2738,7 +2739,9 @@ def configure_content(
|
|
2738
2739
|
|
2739
2740
|
try:
|
2740
2741
|
# Initialize Org Notes Search
|
2741
|
-
if (search_type == state.SearchType.All.value or search_type == state.SearchType.Org.value) and files
|
2742
|
+
if (search_type == state.SearchType.All.value or search_type == state.SearchType.Org.value) and files.get(
|
2743
|
+
"org"
|
2744
|
+
):
|
2742
2745
|
logger.info("🦄 Setting up search for orgmode notes")
|
2743
2746
|
# Extract Entries, Generate Notes Embeddings
|
2744
2747
|
text_search.setup(
|
@@ -2753,9 +2756,9 @@ def configure_content(
|
|
2753
2756
|
|
2754
2757
|
try:
|
2755
2758
|
# Initialize Markdown Search
|
2756
|
-
if (search_type == state.SearchType.All.value or search_type == state.SearchType.Markdown.value) and files
|
2759
|
+
if (search_type == state.SearchType.All.value or search_type == state.SearchType.Markdown.value) and files.get(
|
2757
2760
|
"markdown"
|
2758
|
-
|
2761
|
+
):
|
2759
2762
|
logger.info("💎 Setting up search for markdown notes")
|
2760
2763
|
# Extract Entries, Generate Markdown Embeddings
|
2761
2764
|
text_search.setup(
|
@@ -2771,7 +2774,9 @@ def configure_content(
|
|
2771
2774
|
|
2772
2775
|
try:
|
2773
2776
|
# Initialize PDF Search
|
2774
|
-
if (search_type == state.SearchType.All.value or search_type == state.SearchType.Pdf.value) and files
|
2777
|
+
if (search_type == state.SearchType.All.value or search_type == state.SearchType.Pdf.value) and files.get(
|
2778
|
+
"pdf"
|
2779
|
+
):
|
2775
2780
|
logger.info("🖨️ Setting up search for pdf")
|
2776
2781
|
# Extract Entries, Generate PDF Embeddings
|
2777
2782
|
text_search.setup(
|
@@ -2787,9 +2792,9 @@ def configure_content(
|
|
2787
2792
|
|
2788
2793
|
try:
|
2789
2794
|
# Initialize Plaintext Search
|
2790
|
-
if (search_type == state.SearchType.All.value or search_type == state.SearchType.Plaintext.value) and files
|
2795
|
+
if (search_type == state.SearchType.All.value or search_type == state.SearchType.Plaintext.value) and files.get(
|
2791
2796
|
"plaintext"
|
2792
|
-
|
2797
|
+
):
|
2793
2798
|
logger.info("📄 Setting up search for plaintext")
|
2794
2799
|
# Extract Entries, Generate Plaintext Embeddings
|
2795
2800
|
text_search.setup(
|
@@ -2915,35 +2920,34 @@ async def view_file_content(
|
|
2915
2920
|
raw_text = file_object.raw_text
|
2916
2921
|
|
2917
2922
|
# Apply line range filtering if specified
|
2918
|
-
|
2919
|
-
|
2920
|
-
|
2921
|
-
|
2922
|
-
|
2923
|
-
|
2924
|
-
|
2925
|
-
|
2926
|
-
|
2927
|
-
|
2928
|
-
|
2929
|
-
|
2930
|
-
|
2931
|
-
|
2932
|
-
|
2933
|
-
logger.warning(error_msg)
|
2934
|
-
yield [{"query": query, "file": path, "compiled": error_msg}]
|
2935
|
-
return
|
2923
|
+
lines = raw_text.split("\n")
|
2924
|
+
start_line = start_line or 1
|
2925
|
+
end_line = end_line or len(lines)
|
2926
|
+
|
2927
|
+
# Validate line range
|
2928
|
+
if start_line < 1 or end_line < 1 or start_line > end_line:
|
2929
|
+
error_msg = f"Invalid line range: {start_line}-{end_line}"
|
2930
|
+
logger.warning(error_msg)
|
2931
|
+
yield [{"query": query, "file": path, "compiled": error_msg}]
|
2932
|
+
return
|
2933
|
+
if start_line > len(lines):
|
2934
|
+
error_msg = f"Start line {start_line} exceeds total number of lines {len(lines)}"
|
2935
|
+
logger.warning(error_msg)
|
2936
|
+
yield [{"query": query, "file": path, "compiled": error_msg}]
|
2937
|
+
return
|
2936
2938
|
|
2937
|
-
|
2938
|
-
|
2939
|
-
|
2939
|
+
# Convert from 1-based to 0-based indexing and ensure bounds
|
2940
|
+
start_idx = max(0, start_line - 1)
|
2941
|
+
end_idx = min(len(lines), end_line)
|
2940
2942
|
|
2941
|
-
|
2942
|
-
|
2943
|
+
# Limit to first 50 lines if more than 50 lines are requested
|
2944
|
+
truncation_message = ""
|
2945
|
+
if end_idx - start_idx > 50:
|
2946
|
+
truncation_message = "\n\n[Truncated after 50 lines! Use narrower line range to view complete section.]"
|
2947
|
+
end_idx = start_idx + 50
|
2943
2948
|
|
2944
|
-
|
2945
|
-
|
2946
|
-
filtered_text = filtered_text[:10000] + "\n\n[Truncated. Use line numbers to view specific sections.]"
|
2949
|
+
selected_lines = lines[start_idx:end_idx]
|
2950
|
+
filtered_text = "\n".join(selected_lines) + truncation_message
|
2947
2951
|
|
2948
2952
|
# Format the result as a document reference
|
2949
2953
|
document_results = [
|
@@ -3022,6 +3026,7 @@ async def grep_files(
|
|
3022
3026
|
file_matches = await FileObjectAdapters.aget_file_objects_by_regex(user, db_pattern, path_prefix)
|
3023
3027
|
|
3024
3028
|
line_matches = []
|
3029
|
+
line_matches_count = 0
|
3025
3030
|
for file_object in file_matches:
|
3026
3031
|
lines = file_object.raw_text.split("\n")
|
3027
3032
|
matched_line_numbers = []
|
@@ -3030,6 +3035,7 @@ async def grep_files(
|
|
3030
3035
|
for i, line in enumerate(lines, 1):
|
3031
3036
|
if regex.search(line):
|
3032
3037
|
matched_line_numbers.append(i)
|
3038
|
+
line_matches_count += len(matched_line_numbers)
|
3033
3039
|
|
3034
3040
|
# Build context for each match
|
3035
3041
|
for line_num in matched_line_numbers:
|
@@ -3046,10 +3052,10 @@ async def grep_files(
|
|
3046
3052
|
|
3047
3053
|
if current_line_num == line_num:
|
3048
3054
|
# This is the matching line, mark it
|
3049
|
-
context_lines.append(f"{file_object.file_name}:{current_line_num}
|
3055
|
+
context_lines.append(f"{file_object.file_name}:{current_line_num}: {line_content}")
|
3050
3056
|
else:
|
3051
3057
|
# This is a context line
|
3052
|
-
context_lines.append(f"{file_object.file_name}
|
3058
|
+
context_lines.append(f"{file_object.file_name}-{current_line_num}- {line_content}")
|
3053
3059
|
|
3054
3060
|
# Add separator between matches if showing context
|
3055
3061
|
if lines_before > 0 or lines_after > 0:
|
@@ -3064,7 +3070,7 @@ async def grep_files(
|
|
3064
3070
|
# Check if no results found
|
3065
3071
|
max_results = 1000
|
3066
3072
|
query = _generate_query(
|
3067
|
-
|
3073
|
+
line_matches_count,
|
3068
3074
|
len(file_matches),
|
3069
3075
|
path_prefix,
|
3070
3076
|
regex_pattern,
|
khoj/routers/research.py
CHANGED
@@ -100,7 +100,7 @@ async def apick_next_tool(
|
|
100
100
|
ConversationCommand.Notes.value: [tool.value for tool in document_research_tools],
|
101
101
|
ConversationCommand.Webpage.value: [ConversationCommand.ReadWebpage.value],
|
102
102
|
ConversationCommand.Online.value: [ConversationCommand.SearchWeb.value],
|
103
|
-
ConversationCommand.Code.value: [ConversationCommand.
|
103
|
+
ConversationCommand.Code.value: [ConversationCommand.PythonCoder.value],
|
104
104
|
ConversationCommand.Operator.value: [ConversationCommand.OperateComputer.value],
|
105
105
|
}
|
106
106
|
for input_tool, research_tools in input_tools_to_research_tools.items():
|
@@ -197,7 +197,7 @@ async def apick_next_tool(
|
|
197
197
|
if i.warning is None and isinstance(i.query, ToolCall)
|
198
198
|
}
|
199
199
|
if (parsed_response.name, dict_to_tuple(parsed_response.args)) in previous_tool_query_combinations:
|
200
|
-
warning = "Repeated tool, query combination detected.
|
200
|
+
warning = f"Repeated tool, query combination detected. You've already called {parsed_response.name} with args: {parsed_response.args}. Try something different."
|
201
201
|
# Only send client status updates if we'll execute this iteration and model has thoughts to share.
|
202
202
|
elif send_status_func and not is_none_or_empty(response.thought):
|
203
203
|
async for event in send_status_func(response.thought):
|
@@ -412,11 +412,13 @@ async def research(
|
|
412
412
|
this_iteration.warning = f"Error reading webpages: {e}"
|
413
413
|
logger.error(this_iteration.warning, exc_info=True)
|
414
414
|
|
415
|
-
elif this_iteration.query.name == ConversationCommand.
|
415
|
+
elif this_iteration.query.name == ConversationCommand.PythonCoder:
|
416
416
|
try:
|
417
417
|
async for result in run_code(
|
418
418
|
**this_iteration.query.args,
|
419
|
-
conversation_history=construct_tool_chat_history(
|
419
|
+
conversation_history=construct_tool_chat_history(
|
420
|
+
previous_iterations, ConversationCommand.PythonCoder
|
421
|
+
),
|
420
422
|
context="",
|
421
423
|
location_data=location,
|
422
424
|
user=user,
|
@@ -433,7 +435,7 @@ async def research(
|
|
433
435
|
this_iteration.codeContext = code_results
|
434
436
|
async for result in send_status_func(f"**Ran code snippets**: {len(this_iteration.codeContext)}"):
|
435
437
|
yield result
|
436
|
-
except ValueError as e:
|
438
|
+
except (ValueError, TypeError) as e:
|
437
439
|
this_iteration.warning = f"Error running code: {e}"
|
438
440
|
logger.warning(this_iteration.warning, exc_info=True)
|
439
441
|
|
khoj/utils/constants.py
CHANGED
@@ -11,7 +11,7 @@ app_env_filepath = "~/.khoj/env"
|
|
11
11
|
telemetry_server = "https://khoj.beta.haletic.com/v1/telemetry"
|
12
12
|
content_directory = "~/.khoj/content/"
|
13
13
|
default_openai_chat_models = ["gpt-4o-mini", "gpt-4.1", "o3", "o4-mini"]
|
14
|
-
default_gemini_chat_models = ["gemini-2.0-flash", "gemini-2.5-flash
|
14
|
+
default_gemini_chat_models = ["gemini-2.0-flash", "gemini-2.5-flash", "gemini-2.5-pro", "gemini-2.5-flash-lite"]
|
15
15
|
default_anthropic_chat_models = ["claude-sonnet-4-0", "claude-3-5-haiku-latest"]
|
16
16
|
|
17
17
|
empty_config = {
|
@@ -50,6 +50,7 @@ model_to_cost: Dict[str, Dict[str, float]] = {
|
|
50
50
|
"gemini-1.5-pro-002": {"input": 1.25, "output": 5.00},
|
51
51
|
"gemini-2.0-flash": {"input": 0.10, "output": 0.40},
|
52
52
|
"gemini-2.0-flash-lite": {"input": 0.0075, "output": 0.30},
|
53
|
+
"gemini-2.5-flash-lite": {"input": 0.10, "output": 0.40},
|
53
54
|
"gemini-2.5-flash": {"input": 0.30, "output": 2.50},
|
54
55
|
"gemini-2.5-pro": {"input": 1.25, "output": 10.0},
|
55
56
|
# Anthropic Pricing: https://www.anthropic.com/pricing#anthropic-api
|
@@ -71,4 +72,8 @@ model_to_cost: Dict[str, Dict[str, float]] = {
|
|
71
72
|
"grok-3-latest": {"input": 3.0, "output": 15.0},
|
72
73
|
"grok-3-mini": {"input": 0.30, "output": 0.50},
|
73
74
|
"grok-3-mini-latest": {"input": 0.30, "output": 0.50},
|
75
|
+
# Groq pricing
|
76
|
+
"moonshotai/kimi-k2-instruct": {"input": 1.00, "output": 3.00},
|
77
|
+
"openai/gpt-oss-120b": {"input": 0.15, "output": 0.75},
|
78
|
+
"openai/gpt-oss-20b": {"input": 0.10, "output": 0.50},
|
74
79
|
}
|
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
|
@@ -427,7 +428,7 @@ class ConversationCommand(str, Enum):
|
|
427
428
|
SemanticSearchFiles = "semantic_search_files"
|
428
429
|
SearchWeb = "search_web"
|
429
430
|
ReadWebpage = "read_webpage"
|
430
|
-
|
431
|
+
PythonCoder = "run_code"
|
431
432
|
OperateComputer = "operate_computer"
|
432
433
|
|
433
434
|
|
@@ -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 =
|
458
|
-
|
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=
|
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=
|
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": {
|
@@ -503,18 +533,18 @@ tools_for_research_llm = {
|
|
503
533
|
"required": ["urls", "query"],
|
504
534
|
},
|
505
535
|
),
|
506
|
-
ConversationCommand.
|
507
|
-
name="
|
508
|
-
description=e2b_tool_description if is_e2b_code_sandbox_enabled() else terrarium_tool_description,
|
536
|
+
ConversationCommand.PythonCoder: ToolDefinition(
|
537
|
+
name="python_coder",
|
538
|
+
description="Ask them " + e2b_tool_description if is_e2b_code_sandbox_enabled() else terrarium_tool_description,
|
509
539
|
schema={
|
510
540
|
"type": "object",
|
511
541
|
"properties": {
|
512
|
-
"
|
542
|
+
"instructions": {
|
513
543
|
"type": "string",
|
514
|
-
"description": "Detailed
|
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": ["
|
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
|
541
|
-
|
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={
|
@@ -588,7 +618,7 @@ tools_for_research_llm = {
|
|
588
618
|
description=dedent(
|
589
619
|
"""
|
590
620
|
To have the tool AI semantic search through the user's knowledge base.
|
591
|
-
Helpful to answer questions for which finding some relevant notes or documents can
|
621
|
+
Helpful to answer questions for which finding some relevant notes or documents can be useful. Example: "When was Tom born?"
|
592
622
|
This tool AI cannot find all relevant notes or documents, only a subset of them.
|
593
623
|
It is a good starting point to find keywords, discover similar topics or related concepts and some relevant notes or documents.
|
594
624
|
For a given query, the tool AI can perform a maximum of {max_search_queries} semantic search subqueries per iteration.
|
@@ -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
|
-
|
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
|
|
@@ -8,7 +8,7 @@ khoj/app/asgi.py,sha256=soh3C1xazlgHt_bDgKzrfzo2TKXbNYJsckcXNEgTip8,388
|
|
8
8
|
khoj/app/settings.py,sha256=8ESyAioroVUEVYR--8vEJUJf0X8TtVtrk-0ZSohij1k,9005
|
9
9
|
khoj/app/urls.py,sha256=CcIcBEUB6gGUp4lmTCzX2kHLZ7WiinCXmFBIoRV0eyk,870
|
10
10
|
khoj/database/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
|
-
khoj/database/admin.py,sha256=
|
11
|
+
khoj/database/admin.py,sha256=cZl1yE9gu2YjHkB1iB1qubylOAa9KHbyGtwPcjR4ERg,13256
|
12
12
|
khoj/database/apps.py,sha256=pM4tkX5Odw4YW_hLLKK8Nd5kqGddf1en0oMCea44RZw,153
|
13
13
|
khoj/database/tests.py,sha256=qWDvA9ZhVCQ1rPbkoFify7o_fDirXMUdYMxF12q3WIM,26
|
14
14
|
khoj/database/adapters/__init__.py,sha256=7umgKmnh-h91YjOEjCCcfMq-pdvZmEFr8PiN5qQCM8Y,82631
|
@@ -133,17 +133,17 @@ 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=
|
137
|
-
khoj/interface/compiled/index.txt,sha256=
|
136
|
+
khoj/interface/compiled/index.html,sha256=sNjBa5ZppZfhxqm4U3hNcpm27NzOsRwhHaNwbV0ZNuo,53353
|
137
|
+
khoj/interface/compiled/index.txt,sha256=PEKa6Jae4U_SnoNHf84aQ0WzYWKu4-ek7BJO229dBA0,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=
|
145
|
-
khoj/interface/compiled/_next/static/
|
146
|
-
khoj/interface/compiled/_next/static/
|
144
|
+
khoj/interface/compiled/404/index.html,sha256=PMlf-mo1SMUr-EsKJDtZdCtu7ULu32IYvKt7SP_G2gE,17407
|
145
|
+
khoj/interface/compiled/_next/static/Qn_2XyeVWxjaIRks7rzM-/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
|
146
|
+
khoj/interface/compiled/_next/static/Qn_2XyeVWxjaIRks7rzM-/_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
149
|
khoj/interface/compiled/_next/static/chunks/1327-e254819a9172cfa7.js,sha256=gF0GGZk14_JkuoTQHtktiq2fxMAjnU8hxETqmL67nV0,443139
|
@@ -179,7 +179,6 @@ khoj/interface/compiled/_next/static/chunks/584.d7ce3505f169b706.js,sha256=CDrxO
|
|
179
179
|
khoj/interface/compiled/_next/static/chunks/6240.34f7c1fa692edd61.js,sha256=pBbYPG21QsQ6UjMev_R0E2MlgI4HpX0VVAbGD5qJPbI,11499
|
180
180
|
khoj/interface/compiled/_next/static/chunks/6434.e6cd986d690f2cef.js,sha256=fVR1V4ENz1Qeebsoe8N8XNVbcwGBBhdnTJY-157Y0sg,36261
|
181
181
|
khoj/interface/compiled/_next/static/chunks/6d3fe5a5-f9f3c16e0bc0cdf9.js,sha256=D5Zwf2k8bdsZHdA_rHYb1AkjPEzChzE2ikfYjdEcoCw,89810
|
182
|
-
khoj/interface/compiled/_next/static/chunks/7127-97b83757db125ba6.js,sha256=2cUdQbJ6dowD9PJ6t6cdbdDIDpVRqEzA-GYdJlZ-x9M,43504
|
183
182
|
khoj/interface/compiled/_next/static/chunks/7200-93ab0072359b8028.js,sha256=TjO7mJfoHX12ZVRPYbZMnEh_t8hlM-h-gukzuMFXuKg,11416
|
184
183
|
khoj/interface/compiled/_next/static/chunks/7553.f5ad54b1f6e92c49.js,sha256=RG6sFOVYxfl2MvzwJfvTdGQceQ0DNMppZKkywZoeiPk,76986
|
185
184
|
khoj/interface/compiled/_next/static/chunks/7626-1b630f1654172341.js,sha256=b3P38z7c7HhEATw0zwOJsGB7r1rTeLehksMGjgyrK2I,83511
|
@@ -206,6 +205,7 @@ khoj/interface/compiled/_next/static/chunks/9599.ec50b5296c27dae9.js,sha256=s-el
|
|
206
205
|
khoj/interface/compiled/_next/static/chunks/9643.b34248df52ffc77c.js,sha256=nARYR9WXzmfbTlJvd5yq06ebrFYsSgpgSmGZsfV1loo,42177
|
207
206
|
khoj/interface/compiled/_next/static/chunks/964ecbae.d5be7c49c320d695.js,sha256=Dp7-5a_bYiET4lBiy1sTrb1cQnE3_TC0f1EQCD2Coko,1175124
|
208
207
|
khoj/interface/compiled/_next/static/chunks/9747.2fd9065b1435abb1.js,sha256=VJfnI0aioXeyDBCXy4gKNqaA6oz5t4ZfKHGENsqamdM,38655
|
208
|
+
khoj/interface/compiled/_next/static/chunks/9808-c0742b05e1ef29ba.js,sha256=lzERUGUIjh82oBCOFujsqNrhVbsK_kxyThAGFxX3f-c,50100
|
209
209
|
khoj/interface/compiled/_next/static/chunks/9922.98f2b2a9959b4ebe.js,sha256=1rS3hAPdeawf4Q7Zucz8_IKypZzFeAyTOE7yT5KRxaM,11264
|
210
210
|
khoj/interface/compiled/_next/static/chunks/d3ac728e-4c56e7f41db266b7.js,sha256=KH2S98yagVOcqDG836x8mxIFFjrq11AdYodjBurPvmg,268514
|
211
211
|
khoj/interface/compiled/_next/static/chunks/fd9d1056-aa94101ec5388dba.js,sha256=hlytZKRKDEm1va3Ww-mpo2P2lD-5pw78G2KS66tnJ28,172837
|
@@ -217,29 +217,29 @@ khoj/interface/compiled/_next/static/chunks/webpack-5393aad3d824e0cb.js,sha256=l
|
|
217
217
|
khoj/interface/compiled/_next/static/chunks/app/layout-c2de87a25fededbb.js,sha256=jcU3C37p73V24B118uVRQffNaQES9jihsTGYF4fZ_8o,3949
|
218
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
|
-
khoj/interface/compiled/_next/static/chunks/app/agents/layout-
|
220
|
+
khoj/interface/compiled/_next/static/chunks/app/agents/layout-0114c87d7ccf6d9b.js,sha256=kF5sizKRen5WnXIeBI9wDEW4E5ykHXRSnBw0-shZK3s,175
|
221
221
|
khoj/interface/compiled/_next/static/chunks/app/agents/page-e291b49977f43880.js,sha256=j716nGiARDNN_58TNk5E25UzrKI3EzywnfuIzOovZfM,17487
|
222
|
-
khoj/interface/compiled/_next/static/chunks/app/automations/layout-
|
223
|
-
khoj/interface/compiled/_next/static/chunks/app/automations/page-
|
224
|
-
khoj/interface/compiled/_next/static/chunks/app/chat/layout-
|
225
|
-
khoj/interface/compiled/_next/static/chunks/app/chat/page-
|
226
|
-
khoj/interface/compiled/_next/static/chunks/app/search/layout-
|
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-1047097af99d31c7.js,sha256=suOoMhVLJwWMjMWNmYwfQ-ZYr66777tMrpQHeKEeBvc,34764
|
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-ac7ed0a1aff1b145.js,sha256=-jmQIdaqtUU0yXLqaxAWNftI9kaNEA0VKyNKm73dmKk,31512
|
226
|
+
khoj/interface/compiled/_next/static/chunks/app/search/layout-78dd7cdd97510485.js,sha256=V8eklRDWZZFNY8FDN_wdlACutXubhyt8DlpK8zzDS04,175
|
227
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
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-
|
231
|
-
khoj/interface/compiled/_next/static/chunks/app/share/chat/page-
|
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-819c6536c15e3d31.js,sha256=m57T44OudNlebzaSmVHLpkrDxiCPw2CY4zpzBNSVvtY,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
|
-
khoj/interface/compiled/_next/static/css/23b26df423cd8a9c.css,sha256=phmdXegDf59vMIRVETPEUiuioVjJzp09sj3ErX6_nFY,34642
|
235
|
-
khoj/interface/compiled/_next/static/css/3090706713c12a32.css,sha256=lHBNcr2SPiAMdZQONh2MMlVM_huteuNSM9jCqGkS2d0,3075782
|
236
234
|
khoj/interface/compiled/_next/static/css/37a73b87f02df402.css,sha256=hp0vlekKu0K2eITR5YIqFmLHQPqV3JETFnRd_-Uh0mk,165
|
237
235
|
khoj/interface/compiled/_next/static/css/5b28ced915454767.css,sha256=Bk56AIRHovIWNUw8QWvMbXIxxPiyWEiObkMA7RwpMrs,4842
|
236
|
+
khoj/interface/compiled/_next/static/css/5c7a72bad47e50b3.css,sha256=ZMNMhAG3iGhP67OKF9UDm2UF2eyyjtDDEN94lZSXVqM,3076179
|
238
237
|
khoj/interface/compiled/_next/static/css/76c658ee459140a9.css,sha256=7tI24VB66ZUsAPUxRdQhboopun0AXLUnF64uv9RkC08,1833
|
239
238
|
khoj/interface/compiled/_next/static/css/7889a30fe9c83846.css,sha256=IUkZhkx4GpYOIhN-EJw9T1DqGMO3Wa3mNpUwaOBuZoY,7204
|
240
|
-
khoj/interface/compiled/_next/static/css/
|
239
|
+
khoj/interface/compiled/_next/static/css/821d0d60b0b6871d.css,sha256=340fHdvynnjkHvFJSnn04hPiqt7zUmLvse1uAwLoxXQ,9831
|
241
240
|
khoj/interface/compiled/_next/static/css/db7d90554f3ab82b.css,sha256=A3ZAf0StEG3sr_LxAIizczSTYRe1NbtNUpfslvmkqgk,17713
|
242
241
|
khoj/interface/compiled/_next/static/css/ea5485b3f3859a5a.css,sha256=tn6qi2xSLTWhtzDUE8UlC8iipH9QGV6A9oGj1ap-Sk4,1659
|
242
|
+
khoj/interface/compiled/_next/static/css/ecea704005ba630c.css,sha256=HnPHNgGRpsf5vMeaWDKyHdc5gywndymOt-RdB2BOtHE,35898
|
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=
|
321
|
-
khoj/interface/compiled/agents/index.txt,sha256=
|
320
|
+
khoj/interface/compiled/agents/index.html,sha256=0SAg6kLRkvdA3MhaNvRlMGaZbuVQLmnj_F7b5rhRTSU,16535
|
321
|
+
khoj/interface/compiled/agents/index.txt,sha256=fY3a1YDSaSKVfkIwgaYx2s3aJH9X2zkJkBtnk4n50ns,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=
|
337
|
-
khoj/interface/compiled/automations/index.txt,sha256=
|
338
|
-
khoj/interface/compiled/chat/index.html,sha256=
|
339
|
-
khoj/interface/compiled/chat/index.txt,sha256=
|
340
|
-
khoj/interface/compiled/search/index.html,sha256=
|
341
|
-
khoj/interface/compiled/search/index.txt,sha256=
|
342
|
-
khoj/interface/compiled/settings/index.html,sha256=
|
343
|
-
khoj/interface/compiled/settings/index.txt,sha256=
|
344
|
-
khoj/interface/compiled/share/chat/index.html,sha256
|
345
|
-
khoj/interface/compiled/share/chat/index.txt,sha256=
|
336
|
+
khoj/interface/compiled/automations/index.html,sha256=xm_F7WJ7bRy70svc_qxO76hdiQ6aYI4Kl-YrESqfE9A,54405
|
337
|
+
khoj/interface/compiled/automations/index.txt,sha256=FipyVdkRd7OPquY6xgcu1-i-Xm3tdqd40qjrraUy6_U,7582
|
338
|
+
khoj/interface/compiled/chat/index.html,sha256=2f71H0pYklsmqOcZk-yhmlSjrB-EGETYS39E8xvXsrw,54178
|
339
|
+
khoj/interface/compiled/chat/index.txt,sha256=s6XXxXZlE_CWhipvyQdNqKfEogcDO65ynsGCA5X88OA,8189
|
340
|
+
khoj/interface/compiled/search/index.html,sha256=ltq0jfobZvA9tpTunaZeK2ttolbx-n0b2paDy9X9EZM,55611
|
341
|
+
khoj/interface/compiled/search/index.txt,sha256=C0qnuRCpJEPhO4x3Fkk7KEvMQnFyn2DSAdKwSu4uTy8,6698
|
342
|
+
khoj/interface/compiled/settings/index.html,sha256=zw0aOMzqjoRqfceEKH8MVFT5xr-adaLOAOZs-KOIUtc,53050
|
343
|
+
khoj/interface/compiled/settings/index.txt,sha256=zxVU_RHNYvWtWN7sdmhFqURpAiPNF64vK9F0ezrwOzI,7834
|
344
|
+
khoj/interface/compiled/share/chat/index.html,sha256=-hcF4V7UVRhPBXvuDMxFfTurzN3wDZ3dXR9Bn8Z8ukQ,54112
|
345
|
+
khoj/interface/compiled/share/chat/index.txt,sha256=OHssyNvGIpBEmcfbT8iPHjUGbTtIeGFS1rbuSxxMjlQ,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=
|
391
|
-
khoj/processor/conversation/utils.py,sha256=
|
390
|
+
khoj/processor/conversation/prompts.py,sha256=eXLzvFE9o9DWR42-LPuRBUu9CPNsC3Lo8rO7ebW0Pj4,54115
|
391
|
+
khoj/processor/conversation/utils.py,sha256=LPDUdTylMefosYCoR9Cb2WH0y7KIltnwEFLzViQIuxA,47874
|
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
|
-
khoj/processor/conversation/google/gemini_chat.py,sha256=
|
397
|
-
khoj/processor/conversation/google/utils.py,sha256=
|
396
|
+
khoj/processor/conversation/google/gemini_chat.py,sha256=Cf2MdOfW8JZLVbabrMy9KNMF-HVOAj0b62KAw-rPb-Y,5690
|
397
|
+
khoj/processor/conversation/google/utils.py,sha256=JSL5AGZpvq44fZH6gjf23pyf_FFXNd2OKcDzxTEfOQc,25570
|
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=
|
400
|
+
khoj/processor/conversation/openai/utils.py,sha256=RclwpXkAG8SrMsBP33PXA4HrZBxDb1SjoxX5nC3uUIM,55330
|
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,21 +416,21 @@ 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=
|
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=
|
425
|
-
khoj/routers/api_content.py,sha256=
|
424
|
+
khoj/routers/api_chat.py,sha256=4P0aIrGSSXYXSysnwltwxtn2mhFaToZvtJvgjJjfoaw,69762
|
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=
|
431
|
+
khoj/routers/helpers.py,sha256=f3BBwNNxEkWKE0H32-jI3oPY6e7e7Y6R6rRAhBMEbrA,121368
|
432
432
|
khoj/routers/notion.py,sha256=g53xyYFmjr2JnuIrTW2vytbfkiK_UkoRTxqnnLSmD5o,2802
|
433
|
-
khoj/routers/research.py,sha256=
|
433
|
+
khoj/routers/research.py,sha256=JAKmrtIViNZ8HWKZAvgOsXF2hf0riHzC6yCOE-aD6GY,26452
|
434
434
|
khoj/routers/storage.py,sha256=lao0DvsF49QleZvOdjKM98RU2cGfCJDBb7WeoI7Rr3I,2172
|
435
435
|
khoj/routers/twilio.py,sha256=MLsuCm4--ETvr3sLxbF0CL_ehlg_l2rKBSLR2Qh2Xls,1081
|
436
436
|
khoj/routers/web_client.py,sha256=ArYv1yM04Lb3KOrDHzruf_rClVq1PEyBkdZ_e1W49_A,4573
|
@@ -444,16 +444,16 @@ khoj/search_type/text_search.py,sha256=wbvQgEs5tFbkZwZesyHqp-gi46j3GNQa7di6swhXM
|
|
444
444
|
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
|
-
khoj/utils/constants.py,sha256=
|
448
|
-
khoj/utils/helpers.py,sha256=
|
447
|
+
khoj/utils/constants.py,sha256=VbtG0RTX2DFWj2akBkfDcEzOcVavJg1r7pEowso3dzE,4512
|
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.
|
456
|
-
khoj-2.0.
|
457
|
-
khoj-2.0.
|
458
|
-
khoj-2.0.
|
459
|
-
khoj-2.0.
|
455
|
+
khoj-2.0.0b14.dist-info/METADATA,sha256=OSYVjL5ybe1B-pvvbuBtNwQdKexghuN9_elh9rsIExs,8955
|
456
|
+
khoj-2.0.0b14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
457
|
+
khoj-2.0.0b14.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
|
458
|
+
khoj-2.0.0b14.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
459
|
+
khoj-2.0.0b14.dist-info/RECORD,,
|