khoj 1.40.1.dev20__py3-none-any.whl → 1.40.1.dev27__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- khoj/database/adapters/__init__.py +24 -22
- khoj/interface/compiled/404/index.html +2 -2
- khoj/interface/compiled/_next/static/chunks/app/agents/layout-4e2a134ec26aa606.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/chat/layout-ad4d1792ab1a4108.js +1 -0
- khoj/interface/compiled/_next/static/chunks/{webpack-639e8a9d35bd5e13.js → webpack-21f76f7f59582bc7.js} +1 -1
- 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 +1 -1
- khoj/interface/compiled/chat/index.html +2 -2
- khoj/interface/compiled/chat/index.txt +1 -1
- 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 +1 -1
- khoj/processor/conversation/anthropic/anthropic_chat.py +22 -12
- khoj/processor/conversation/anthropic/utils.py +21 -64
- khoj/processor/conversation/google/gemini_chat.py +22 -12
- khoj/processor/conversation/google/utils.py +26 -64
- khoj/processor/conversation/offline/chat_model.py +86 -35
- khoj/processor/conversation/openai/gpt.py +22 -12
- khoj/processor/conversation/openai/utils.py +50 -70
- khoj/processor/conversation/utils.py +2 -38
- khoj/routers/api_chat.py +18 -14
- khoj/routers/helpers.py +13 -23
- khoj/utils/helpers.py +56 -0
- {khoj-1.40.1.dev20.dist-info → khoj-1.40.1.dev27.dist-info}/METADATA +1 -1
- {khoj-1.40.1.dev20.dist-info → khoj-1.40.1.dev27.dist-info}/RECORD +37 -37
- khoj/interface/compiled/_next/static/chunks/app/agents/layout-e00fb81dca656a10.js +0 -1
- khoj/interface/compiled/_next/static/chunks/app/chat/layout-33934fc2d6ae6838.js +0 -1
- /khoj/interface/compiled/_next/static/{cbPHN2fL-jO8972HjaRbw → jpAPJYOTptFnVVNIEkfa8}/_buildManifest.js +0 -0
- /khoj/interface/compiled/_next/static/{cbPHN2fL-jO8972HjaRbw → jpAPJYOTptFnVVNIEkfa8}/_ssgManifest.js +0 -0
- {khoj-1.40.1.dev20.dist-info → khoj-1.40.1.dev27.dist-info}/WHEEL +0 -0
- {khoj-1.40.1.dev20.dist-info → khoj-1.40.1.dev27.dist-info}/entry_points.txt +0 -0
- {khoj-1.40.1.dev20.dist-info → khoj-1.40.1.dev27.dist-info}/licenses/LICENSE +0 -0
@@ -77,42 +77,6 @@ model_to_prompt_size = {
|
|
77
77
|
model_to_tokenizer: Dict[str, str] = {}
|
78
78
|
|
79
79
|
|
80
|
-
class ThreadedGenerator:
|
81
|
-
def __init__(self, compiled_references, online_results, completion_func=None):
|
82
|
-
self.queue = queue.Queue()
|
83
|
-
self.compiled_references = compiled_references
|
84
|
-
self.online_results = online_results
|
85
|
-
self.completion_func = completion_func
|
86
|
-
self.response = ""
|
87
|
-
self.start_time = perf_counter()
|
88
|
-
|
89
|
-
def __iter__(self):
|
90
|
-
return self
|
91
|
-
|
92
|
-
def __next__(self):
|
93
|
-
item = self.queue.get()
|
94
|
-
if item is StopIteration:
|
95
|
-
time_to_response = perf_counter() - self.start_time
|
96
|
-
logger.info(f"Chat streaming took: {time_to_response:.3f} seconds")
|
97
|
-
if self.completion_func:
|
98
|
-
# The completion func effectively acts as a callback.
|
99
|
-
# It adds the aggregated response to the conversation history.
|
100
|
-
self.completion_func(chat_response=self.response)
|
101
|
-
raise StopIteration
|
102
|
-
return item
|
103
|
-
|
104
|
-
def send(self, data):
|
105
|
-
if self.response == "":
|
106
|
-
time_to_first_response = perf_counter() - self.start_time
|
107
|
-
logger.info(f"First response took: {time_to_first_response:.3f} seconds")
|
108
|
-
|
109
|
-
self.response += data
|
110
|
-
self.queue.put(data)
|
111
|
-
|
112
|
-
def close(self):
|
113
|
-
self.queue.put(StopIteration)
|
114
|
-
|
115
|
-
|
116
80
|
class InformationCollectionIteration:
|
117
81
|
def __init__(
|
118
82
|
self,
|
@@ -254,7 +218,7 @@ def message_to_log(
|
|
254
218
|
return conversation_log
|
255
219
|
|
256
220
|
|
257
|
-
def save_to_conversation_log(
|
221
|
+
async def save_to_conversation_log(
|
258
222
|
q: str,
|
259
223
|
chat_response: str,
|
260
224
|
user: KhojUser,
|
@@ -306,7 +270,7 @@ def save_to_conversation_log(
|
|
306
270
|
khoj_message_metadata=khoj_message_metadata,
|
307
271
|
conversation_log=meta_log.get("chat", []),
|
308
272
|
)
|
309
|
-
ConversationAdapters.save_conversation(
|
273
|
+
await ConversationAdapters.save_conversation(
|
310
274
|
user,
|
311
275
|
{"chat": updated_conversation},
|
312
276
|
client_application=client_application,
|
khoj/routers/api_chat.py
CHANGED
@@ -67,7 +67,6 @@ from khoj.routers.research import (
|
|
67
67
|
from khoj.routers.storage import upload_user_image_to_bucket
|
68
68
|
from khoj.utils import state
|
69
69
|
from khoj.utils.helpers import (
|
70
|
-
AsyncIteratorWrapper,
|
71
70
|
ConversationCommand,
|
72
71
|
command_descriptions,
|
73
72
|
convert_image_to_webp,
|
@@ -999,7 +998,7 @@ async def chat(
|
|
999
998
|
return
|
1000
999
|
|
1001
1000
|
llm_response = construct_automation_created_message(automation, crontime, query_to_run, subject)
|
1002
|
-
await
|
1001
|
+
await save_to_conversation_log(
|
1003
1002
|
q,
|
1004
1003
|
llm_response,
|
1005
1004
|
user,
|
@@ -1308,26 +1307,31 @@ async def chat(
|
|
1308
1307
|
yield result
|
1309
1308
|
|
1310
1309
|
continue_stream = True
|
1311
|
-
|
1312
|
-
|
1310
|
+
async for item in llm_response:
|
1311
|
+
# Should not happen with async generator, end is signaled by loop exit. Skip.
|
1313
1312
|
if item is None:
|
1314
|
-
|
1315
|
-
yield result
|
1316
|
-
# Send Usage Metadata once llm interactions are complete
|
1317
|
-
async for event in send_event(ChatEvent.USAGE, tracer.get("usage")):
|
1318
|
-
yield event
|
1319
|
-
async for result in send_event(ChatEvent.END_RESPONSE, ""):
|
1320
|
-
yield result
|
1321
|
-
logger.debug("Finished streaming response")
|
1322
|
-
return
|
1313
|
+
continue
|
1323
1314
|
if not connection_alive or not continue_stream:
|
1315
|
+
# Drain the generator if disconnected but keep processing internally
|
1324
1316
|
continue
|
1325
1317
|
try:
|
1326
1318
|
async for result in send_event(ChatEvent.MESSAGE, f"{item}"):
|
1327
1319
|
yield result
|
1328
1320
|
except Exception as e:
|
1329
1321
|
continue_stream = False
|
1330
|
-
logger.info(f"User {user} disconnected
|
1322
|
+
logger.info(f"User {user} disconnected or error during streaming. Stopping send: {e}")
|
1323
|
+
|
1324
|
+
# Signal end of LLM response after the loop finishes
|
1325
|
+
if connection_alive:
|
1326
|
+
async for result in send_event(ChatEvent.END_LLM_RESPONSE, ""):
|
1327
|
+
yield result
|
1328
|
+
# Send Usage Metadata once llm interactions are complete
|
1329
|
+
if tracer.get("usage"):
|
1330
|
+
async for event in send_event(ChatEvent.USAGE, tracer.get("usage")):
|
1331
|
+
yield event
|
1332
|
+
async for result in send_event(ChatEvent.END_RESPONSE, ""):
|
1333
|
+
yield result
|
1334
|
+
logger.debug("Finished streaming response")
|
1331
1335
|
|
1332
1336
|
## Stream Text Response
|
1333
1337
|
if stream:
|
khoj/routers/helpers.py
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
import asyncio
|
2
1
|
import base64
|
3
2
|
import hashlib
|
4
3
|
import json
|
@@ -6,9 +5,7 @@ import logging
|
|
6
5
|
import math
|
7
6
|
import os
|
8
7
|
import re
|
9
|
-
from concurrent.futures import ThreadPoolExecutor
|
10
8
|
from datetime import datetime, timedelta, timezone
|
11
|
-
from enum import Enum
|
12
9
|
from functools import partial
|
13
10
|
from random import random
|
14
11
|
from typing import (
|
@@ -17,7 +14,6 @@ from typing import (
|
|
17
14
|
AsyncGenerator,
|
18
15
|
Callable,
|
19
16
|
Dict,
|
20
|
-
Iterator,
|
21
17
|
List,
|
22
18
|
Optional,
|
23
19
|
Set,
|
@@ -97,7 +93,6 @@ from khoj.processor.conversation.openai.gpt import (
|
|
97
93
|
)
|
98
94
|
from khoj.processor.conversation.utils import (
|
99
95
|
ChatEvent,
|
100
|
-
ThreadedGenerator,
|
101
96
|
clean_json,
|
102
97
|
clean_mermaidjs,
|
103
98
|
construct_chat_history,
|
@@ -126,8 +121,6 @@ from khoj.utils.rawconfig import ChatRequestBody, FileAttachment, FileData, Loca
|
|
126
121
|
|
127
122
|
logger = logging.getLogger(__name__)
|
128
123
|
|
129
|
-
executor = ThreadPoolExecutor(max_workers=1)
|
130
|
-
|
131
124
|
|
132
125
|
NOTION_OAUTH_CLIENT_ID = os.getenv("NOTION_OAUTH_CLIENT_ID")
|
133
126
|
NOTION_OAUTH_CLIENT_SECRET = os.getenv("NOTION_OAUTH_CLIENT_SECRET")
|
@@ -262,11 +255,6 @@ def get_conversation_command(query: str) -> ConversationCommand:
|
|
262
255
|
return ConversationCommand.Default
|
263
256
|
|
264
257
|
|
265
|
-
async def agenerate_chat_response(*args):
|
266
|
-
loop = asyncio.get_event_loop()
|
267
|
-
return await loop.run_in_executor(executor, generate_chat_response, *args)
|
268
|
-
|
269
|
-
|
270
258
|
def gather_raw_query_files(
|
271
259
|
query_files: Dict[str, str],
|
272
260
|
):
|
@@ -1418,7 +1406,7 @@ def send_message_to_model_wrapper_sync(
|
|
1418
1406
|
raise HTTPException(status_code=500, detail="Invalid conversation config")
|
1419
1407
|
|
1420
1408
|
|
1421
|
-
def
|
1409
|
+
async def agenerate_chat_response(
|
1422
1410
|
q: str,
|
1423
1411
|
meta_log: dict,
|
1424
1412
|
conversation: Conversation,
|
@@ -1444,13 +1432,14 @@ def generate_chat_response(
|
|
1444
1432
|
generated_asset_results: Dict[str, Dict] = {},
|
1445
1433
|
is_subscribed: bool = False,
|
1446
1434
|
tracer: dict = {},
|
1447
|
-
) -> Tuple[
|
1435
|
+
) -> Tuple[AsyncGenerator[str, None], Dict[str, str]]:
|
1448
1436
|
# Initialize Variables
|
1449
|
-
|
1437
|
+
chat_response_generator = None
|
1450
1438
|
logger.debug(f"Conversation Types: {conversation_commands}")
|
1451
1439
|
|
1452
1440
|
metadata = {}
|
1453
|
-
agent = AgentAdapters.
|
1441
|
+
agent = await AgentAdapters.aget_conversation_agent_by_id(conversation.agent.id) if conversation.agent else None
|
1442
|
+
|
1454
1443
|
try:
|
1455
1444
|
partial_completion = partial(
|
1456
1445
|
save_to_conversation_log,
|
@@ -1481,17 +1470,17 @@ def generate_chat_response(
|
|
1481
1470
|
code_results = {}
|
1482
1471
|
deepthought = True
|
1483
1472
|
|
1484
|
-
chat_model = ConversationAdapters.
|
1473
|
+
chat_model = await ConversationAdapters.aget_valid_chat_model(user, conversation, is_subscribed)
|
1485
1474
|
vision_available = chat_model.vision_enabled
|
1486
1475
|
if not vision_available and query_images:
|
1487
|
-
vision_enabled_config = ConversationAdapters.
|
1476
|
+
vision_enabled_config = await ConversationAdapters.aget_vision_enabled_config()
|
1488
1477
|
if vision_enabled_config:
|
1489
1478
|
chat_model = vision_enabled_config
|
1490
1479
|
vision_available = True
|
1491
1480
|
|
1492
1481
|
if chat_model.model_type == "offline":
|
1493
1482
|
loaded_model = state.offline_chat_processor_config.loaded_model
|
1494
|
-
|
1483
|
+
chat_response_generator = converse_offline(
|
1495
1484
|
user_query=query_to_run,
|
1496
1485
|
references=compiled_references,
|
1497
1486
|
online_results=online_results,
|
@@ -1515,7 +1504,7 @@ def generate_chat_response(
|
|
1515
1504
|
openai_chat_config = chat_model.ai_model_api
|
1516
1505
|
api_key = openai_chat_config.api_key
|
1517
1506
|
chat_model_name = chat_model.name
|
1518
|
-
|
1507
|
+
chat_response_generator = converse_openai(
|
1519
1508
|
compiled_references,
|
1520
1509
|
query_to_run,
|
1521
1510
|
query_images=query_images,
|
@@ -1544,7 +1533,7 @@ def generate_chat_response(
|
|
1544
1533
|
elif chat_model.model_type == ChatModel.ModelType.ANTHROPIC:
|
1545
1534
|
api_key = chat_model.ai_model_api.api_key
|
1546
1535
|
api_base_url = chat_model.ai_model_api.api_base_url
|
1547
|
-
|
1536
|
+
chat_response_generator = converse_anthropic(
|
1548
1537
|
compiled_references,
|
1549
1538
|
query_to_run,
|
1550
1539
|
query_images=query_images,
|
@@ -1572,7 +1561,7 @@ def generate_chat_response(
|
|
1572
1561
|
elif chat_model.model_type == ChatModel.ModelType.GOOGLE:
|
1573
1562
|
api_key = chat_model.ai_model_api.api_key
|
1574
1563
|
api_base_url = chat_model.ai_model_api.api_base_url
|
1575
|
-
|
1564
|
+
chat_response_generator = converse_gemini(
|
1576
1565
|
compiled_references,
|
1577
1566
|
query_to_run,
|
1578
1567
|
online_results,
|
@@ -1604,7 +1593,8 @@ def generate_chat_response(
|
|
1604
1593
|
logger.error(e, exc_info=True)
|
1605
1594
|
raise HTTPException(status_code=500, detail=str(e))
|
1606
1595
|
|
1607
|
-
|
1596
|
+
# Return the generator directly
|
1597
|
+
return chat_response_generator, metadata
|
1608
1598
|
|
1609
1599
|
|
1610
1600
|
class DeleteMessageRequestBody(BaseModel):
|
khoj/utils/helpers.py
CHANGED
@@ -23,6 +23,7 @@ from time import perf_counter
|
|
23
23
|
from typing import TYPE_CHECKING, Any, NamedTuple, Optional, Tuple, Union
|
24
24
|
from urllib.parse import ParseResult, urlparse
|
25
25
|
|
26
|
+
import anthropic
|
26
27
|
import openai
|
27
28
|
import psutil
|
28
29
|
import pyjson5
|
@@ -30,6 +31,7 @@ import requests
|
|
30
31
|
import torch
|
31
32
|
from asgiref.sync import sync_to_async
|
32
33
|
from email_validator import EmailNotValidError, EmailUndeliverableError, validate_email
|
34
|
+
from google import genai
|
33
35
|
from google.auth.credentials import Credentials
|
34
36
|
from google.oauth2 import service_account
|
35
37
|
from magika import Magika
|
@@ -729,6 +731,60 @@ def get_openai_client(api_key: str, api_base_url: str) -> Union[openai.OpenAI, o
|
|
729
731
|
return client
|
730
732
|
|
731
733
|
|
734
|
+
def get_openai_async_client(api_key: str, api_base_url: str) -> Union[openai.AsyncOpenAI, openai.AsyncAzureOpenAI]:
|
735
|
+
"""Get OpenAI or AzureOpenAI client based on the API Base URL"""
|
736
|
+
parsed_url = urlparse(api_base_url)
|
737
|
+
if parsed_url.hostname and parsed_url.hostname.endswith(".openai.azure.com"):
|
738
|
+
client = openai.AsyncAzureOpenAI(
|
739
|
+
api_key=api_key,
|
740
|
+
azure_endpoint=api_base_url,
|
741
|
+
api_version="2024-10-21",
|
742
|
+
)
|
743
|
+
else:
|
744
|
+
client = openai.AsyncOpenAI(
|
745
|
+
api_key=api_key,
|
746
|
+
base_url=api_base_url,
|
747
|
+
)
|
748
|
+
return client
|
749
|
+
|
750
|
+
|
751
|
+
def get_anthropic_client(api_key, api_base_url=None) -> anthropic.Anthropic | anthropic.AnthropicVertex:
|
752
|
+
api_info = get_ai_api_info(api_key, api_base_url)
|
753
|
+
if api_info.api_key:
|
754
|
+
client = anthropic.Anthropic(api_key=api_info.api_key)
|
755
|
+
else:
|
756
|
+
client = anthropic.AnthropicVertex(
|
757
|
+
region=api_info.region,
|
758
|
+
project_id=api_info.project,
|
759
|
+
credentials=api_info.credentials,
|
760
|
+
)
|
761
|
+
return client
|
762
|
+
|
763
|
+
|
764
|
+
def get_anthropic_async_client(api_key, api_base_url=None) -> anthropic.AsyncAnthropic | anthropic.AsyncAnthropicVertex:
|
765
|
+
api_info = get_ai_api_info(api_key, api_base_url)
|
766
|
+
if api_info.api_key:
|
767
|
+
client = anthropic.AsyncAnthropic(api_key=api_info.api_key)
|
768
|
+
else:
|
769
|
+
client = anthropic.AsyncAnthropicVertex(
|
770
|
+
region=api_info.region,
|
771
|
+
project_id=api_info.project,
|
772
|
+
credentials=api_info.credentials,
|
773
|
+
)
|
774
|
+
return client
|
775
|
+
|
776
|
+
|
777
|
+
def get_gemini_client(api_key, api_base_url=None) -> genai.Client:
|
778
|
+
api_info = get_ai_api_info(api_key, api_base_url)
|
779
|
+
return genai.Client(
|
780
|
+
location=api_info.region,
|
781
|
+
project=api_info.project,
|
782
|
+
credentials=api_info.credentials,
|
783
|
+
api_key=api_info.api_key,
|
784
|
+
vertexai=api_info.api_key is None,
|
785
|
+
)
|
786
|
+
|
787
|
+
|
732
788
|
def normalize_email(email: str, check_deliverability=False) -> tuple[str, bool]:
|
733
789
|
"""Normalize, validate and check deliverability of email address"""
|
734
790
|
lower_email = email.lower()
|
@@ -11,7 +11,7 @@ khoj/database/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
11
|
khoj/database/admin.py,sha256=yX_g1CUpEijnufIgTdefUfiakmd3MB3GSYwKfZo-Cms,13206
|
12
12
|
khoj/database/apps.py,sha256=pM4tkX5Odw4YW_hLLKK8Nd5kqGddf1en0oMCea44RZw,153
|
13
13
|
khoj/database/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
|
14
|
-
khoj/database/adapters/__init__.py,sha256=
|
14
|
+
khoj/database/adapters/__init__.py,sha256=t0jRbQRLbRrETOYe7lJ2bZRIP8zKwl_YcaPOtTvstkY,77999
|
15
15
|
khoj/database/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
16
16
|
khoj/database/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
17
|
khoj/database/management/commands/change_default_model.py,sha256=6QXJttG58gpU7vZApQEeEPVNAuhjU2xa6_BwJsfz320,4877
|
@@ -129,17 +129,15 @@ khoj/interface/compiled/chat.svg,sha256=l2JoYRRgk201adTTdvJ-buKUrc0WGfsudix5xEvt
|
|
129
129
|
khoj/interface/compiled/close.svg,sha256=hQ2iFLkNzHk0_iyTrSbwnWAeXYlgA-c2Eof2Iqh76n4,417
|
130
130
|
khoj/interface/compiled/copy-button-success.svg,sha256=byqWAYD3Pn9IOXRjOKudJ-TJbP2UESbQGvtLWazNGjY,829
|
131
131
|
khoj/interface/compiled/copy-button.svg,sha256=05bKM2eRxksfBlAPT7yMaoNJEk85bZCxQg67EVrPeHo,669
|
132
|
-
khoj/interface/compiled/index.html,sha256=
|
133
|
-
khoj/interface/compiled/index.txt,sha256=
|
132
|
+
khoj/interface/compiled/index.html,sha256=OjIdaYjsLDysaZnTFLjXmLpfJAebvVtlK7Nh813f_W4,53043
|
133
|
+
khoj/interface/compiled/index.txt,sha256=K404pzc_5HDKepaHou7G5PFphTV8eYD2BMfC7CjFyrA,7616
|
134
134
|
khoj/interface/compiled/khoj.webmanifest,sha256=9wOK2BMS6xH5NKd2eaUgTLg9WepIxB2K2U33KU89LD8,2543
|
135
135
|
khoj/interface/compiled/logo.svg,sha256=_QCKVYM4WT2Qhcf7aVFImjq_s5CwjynGXYAOgI7yf8w,8059
|
136
136
|
khoj/interface/compiled/send.svg,sha256=VdavOWkVddcwcGcld6pdfmwfz7S91M-9O28cfeiKJkM,635
|
137
137
|
khoj/interface/compiled/share.svg,sha256=91lwo75PvMDrgocuZQab6EQ62CxRbubh9Bhw7CWMKbg,1221
|
138
138
|
khoj/interface/compiled/thumbs-down.svg,sha256=JGNl-DwoRmH2XFMPWwFFklmoYtKxaQbkLE3nuYKe8ZY,1019
|
139
139
|
khoj/interface/compiled/thumbs-up.svg,sha256=yS1wxTRtiztkN-6nZciLoYQUB_KTYNPV8xFRwH2TQFw,1036
|
140
|
-
khoj/interface/compiled/404/index.html,sha256=
|
141
|
-
khoj/interface/compiled/_next/static/cbPHN2fL-jO8972HjaRbw/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
|
142
|
-
khoj/interface/compiled/_next/static/cbPHN2fL-jO8972HjaRbw/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
|
140
|
+
khoj/interface/compiled/404/index.html,sha256=TcnNNjLuKCxAuZSx2r14I4nratVSJuiaAxkyT6qDMK4,17097
|
143
141
|
khoj/interface/compiled/_next/static/chunks/1243.ea2826fb35adb15a.js,sha256=Y6ceAwyTH4HSGDvBRoBB-RVXRCzGGr8NSPcspYF5OM8,182
|
144
142
|
khoj/interface/compiled/_next/static/chunks/133.392ae90c3b2a67f2.js,sha256=IK-mb9ZlF6uJUdU8AuXsppc99tFL8svJvZtKNZGNtcY,411
|
145
143
|
khoj/interface/compiled/_next/static/chunks/1592.b069bdb7aaddd2eb.js,sha256=VUaP2gjX3W9tA9pOH_VIPG_2BIg7Wk1AICrfU5iHgrk,71096
|
@@ -205,15 +203,15 @@ khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js,sha256
|
|
205
203
|
khoj/interface/compiled/_next/static/chunks/main-876327ac335776ab.js,sha256=JkQUmA9vh1B4VVGF5dbZ8Kun0AnIVUbZr5IBK90T4Zs,111290
|
206
204
|
khoj/interface/compiled/_next/static/chunks/main-app-de1f09df97a3cfc7.js,sha256=bqnztujKItXfFBzQlaBmDZyfJpQt_M93CXOuchJfpD0,471
|
207
205
|
khoj/interface/compiled/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
|
208
|
-
khoj/interface/compiled/_next/static/chunks/webpack-
|
206
|
+
khoj/interface/compiled/_next/static/chunks/webpack-21f76f7f59582bc7.js,sha256=9xBFH5H6MJpn48quHaXMnSMEQaTksslm7QCDXX--CL4,4891
|
209
207
|
khoj/interface/compiled/_next/static/chunks/app/layout-baa6e7974e560a7a.js,sha256=7JZS2Pr995Lwu3FeQpAvheLS1Bn5w5HOFsecV2_kyQA,3880
|
210
208
|
khoj/interface/compiled/_next/static/chunks/app/page-a4053e1bb578b2ce.js,sha256=ODjjug1NwixStALsW2Wu6RarPq_KBMnIOoKqKJ8Kapk,31218
|
211
209
|
khoj/interface/compiled/_next/static/chunks/app/_not-found/page-0ec97c4970898f2d.js,sha256=zElhiTkdu2JqrEvJ8Lrxh4HCyfLmPllBHHWOuDtrVlw,1755
|
212
|
-
khoj/interface/compiled/_next/static/chunks/app/agents/layout-
|
210
|
+
khoj/interface/compiled/_next/static/chunks/app/agents/layout-4e2a134ec26aa606.js,sha256=B3HJ6CKzJccEIOk54Erl1FtKUxGJq2p-ch932X1vjwE,180
|
213
211
|
khoj/interface/compiled/_next/static/chunks/app/agents/page-ceeb9a91edea74ce.js,sha256=kvQaR_nbiCgH5koDFYD4fkceNsScyMVdwvVufMH0Ax8,18314
|
214
212
|
khoj/interface/compiled/_next/static/chunks/app/automations/layout-7f5c33a70e46b3af.js,sha256=s2wHeQ-ai9rKyU9EjOGY1Yo51L4ZEkjLtML85BqN3Zc,5143
|
215
213
|
khoj/interface/compiled/_next/static/chunks/app/automations/page-e3cb78747ab98cc7.js,sha256=CKuBpLxbzqBbCgJ2zbiuDf8Z1UGwEOA3hgnuZEjvpgA,34831
|
216
|
-
khoj/interface/compiled/_next/static/chunks/app/chat/layout-
|
214
|
+
khoj/interface/compiled/_next/static/chunks/app/chat/layout-ad4d1792ab1a4108.js,sha256=g815zvSZenVssWcOYjyqAOPDjTCa359nqspXeIsXQ5A,180
|
217
215
|
khoj/interface/compiled/_next/static/chunks/app/chat/page-5174ed911079ee57.js,sha256=p2ym9VzIKWnP9xW-AcgFJTdp68dj7kJadJNYntYje2Q,28538
|
218
216
|
khoj/interface/compiled/_next/static/chunks/app/search/layout-c02531d586972d7d.js,sha256=VQACqzXZcJUaa3W_0wHsrdLP22pj8yqeAOGBQfVnQxw,180
|
219
217
|
khoj/interface/compiled/_next/static/chunks/app/search/page-8973da2f4c076fe1.js,sha256=fD2_a9jptevkZ7Jda0FUp5kTINLef8NXqojbD3cCmJY,32714
|
@@ -231,6 +229,8 @@ khoj/interface/compiled/_next/static/css/e4eb883b5265d372.css,sha256=6LaW-lQ_Zpg
|
|
231
229
|
khoj/interface/compiled/_next/static/css/ea5485b3f3859a5a.css,sha256=tn6qi2xSLTWhtzDUE8UlC8iipH9QGV6A9oGj1ap-Sk4,1659
|
232
230
|
khoj/interface/compiled/_next/static/css/f29752d6e1be7624.css,sha256=mLPRnYpBFaVhTMJ3CFou5_lrwLJs2mhBlAjNY2lrRYs,6354
|
233
231
|
khoj/interface/compiled/_next/static/css/fca983d49c3dd1a3.css,sha256=3F1qPtz6PQG-gIpo8h3rAfxreAc2Uvxy8F_G2e78EsM,30452
|
232
|
+
khoj/interface/compiled/_next/static/jpAPJYOTptFnVVNIEkfa8/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
|
233
|
+
khoj/interface/compiled/_next/static/jpAPJYOTptFnVVNIEkfa8/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
|
234
234
|
khoj/interface/compiled/_next/static/media/1d8a05b60287ae6c-s.p.woff2,sha256=IzKBwB_bpSGvO7C9aRv29Js-jAbZPRDI-D-P4H2P918,14508
|
235
235
|
khoj/interface/compiled/_next/static/media/2aa11a72f7f24b58-s.woff2,sha256=QjuuSKmViymmy-itXLB1UbSARxFNHWuMiPpCrYqClFI,22728
|
236
236
|
khoj/interface/compiled/_next/static/media/383a65b63658737d-s.woff2,sha256=VH1XkI87HdFVhsurH5D5ekEjG_ZORTVBVg6xz7p87C8,16704
|
@@ -308,8 +308,8 @@ khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp,sha256=M2AW_HLpBn
|
|
308
308
|
khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp,sha256=BBeRPBZkxY3-aKkMnYv5TSkxmbeMbyUH4VRIPfrWg1E,137406
|
309
309
|
khoj/interface/compiled/_next/static/media/globe.98e105ca.webp,sha256=g3ofb8-W9GM75zIhlvQhaS8I2py9TtrovOKR3_7Jf04,514
|
310
310
|
khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp,sha256=I_N7Yke3IOoS-0CC6XD8o0IUWG8PdPbrHmf6lpgWlZY,1380
|
311
|
-
khoj/interface/compiled/agents/index.html,sha256=
|
312
|
-
khoj/interface/compiled/agents/index.txt,sha256=
|
311
|
+
khoj/interface/compiled/agents/index.html,sha256=tOUvpyJO3lP80pykSh82plSBkhaR7nUqWk06D5EOUbw,16224
|
312
|
+
khoj/interface/compiled/agents/index.txt,sha256=fc7JJ1sckySwD_ogBnR8m7WUDoqin3Zg6_GAZtTI4XI,7220
|
313
313
|
khoj/interface/compiled/assets/icons/khoj_lantern.ico,sha256=eggu-B_v3z1R53EjOFhIqqPnICBGdoaw1xnc0NrzHck,174144
|
314
314
|
khoj/interface/compiled/assets/icons/khoj_lantern.svg,sha256=I_8XP5X84gEOoCRhCRKOQn_GKZrz3SUBXct7WxHvY7c,8767
|
315
315
|
khoj/interface/compiled/assets/icons/khoj_lantern_1200x1200.png,sha256=xDx0bbD-WMflgg8zck9oPIIuTIvywtuED2k7CjSQS4w,66194
|
@@ -324,16 +324,16 @@ khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png,sha256=i
|
|
324
324
|
khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png,sha256=Dd4fPwtFl6BWqnHjeb1mCK_ND0hhHsWtx8sNE7EiMuE,406179
|
325
325
|
khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png,sha256=DEDaNRCkfEWUeh3kYZWIQDTVK1a6KKnYdwj5ZWisN_Q,82985
|
326
326
|
khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png,sha256=Ma3blirRmq3X4oYSsDbbT7MDn29rymDrjwmUfA9BMuM,236285
|
327
|
-
khoj/interface/compiled/automations/index.html,sha256=
|
328
|
-
khoj/interface/compiled/automations/index.txt,sha256=
|
329
|
-
khoj/interface/compiled/chat/index.html,sha256=
|
330
|
-
khoj/interface/compiled/chat/index.txt,sha256=
|
331
|
-
khoj/interface/compiled/search/index.html,sha256=
|
332
|
-
khoj/interface/compiled/search/index.txt,sha256=
|
333
|
-
khoj/interface/compiled/settings/index.html,sha256=
|
334
|
-
khoj/interface/compiled/settings/index.txt,sha256=
|
335
|
-
khoj/interface/compiled/share/chat/index.html,sha256=
|
336
|
-
khoj/interface/compiled/share/chat/index.txt,sha256=
|
327
|
+
khoj/interface/compiled/automations/index.html,sha256=IoSP3PT-XOTyKegu-fSO0HZRDzhZKrloagm2qnNhVnw,54094
|
328
|
+
khoj/interface/compiled/automations/index.txt,sha256=QsRoiwOTWyX-KygEvXBW7e_UDEcsW7d1rAazo4mL-_o,7449
|
329
|
+
khoj/interface/compiled/chat/index.html,sha256=jLQSzsgr41gFqjC_SZo2mRKbrN8ytf5Hpl6pUejCxj8,53222
|
330
|
+
khoj/interface/compiled/chat/index.txt,sha256=M5_C3zeRxGHRDOgY-iAhGIWirpT32dkr8OSCDLmcdms,7858
|
331
|
+
khoj/interface/compiled/search/index.html,sha256=KTp4S2Dnwkz2A1zAFHF8goq7gbvhIF8a2fBCodrH0F4,55304
|
332
|
+
khoj/interface/compiled/search/index.txt,sha256=p2peP6U9zmKs8Khzg6lMP_4CqPWE30l4LXuO6Hv2Jhw,6567
|
333
|
+
khoj/interface/compiled/settings/index.html,sha256=DfAjEjBdpoYqmXIboj3Wzr1BwXd3g6lwxiuHpKDd4V0,52743
|
334
|
+
khoj/interface/compiled/settings/index.txt,sha256=RARvoCKXaOxGrYCDLhzwFMW0E8h6NjJYNDdGj7FbVBc,7703
|
335
|
+
khoj/interface/compiled/share/chat/index.html,sha256=DaYDdfK9Co_FoCR_EDxADTglGhwP_LUHlomYrPnYvYE,53802
|
336
|
+
khoj/interface/compiled/share/chat/index.txt,sha256=PtVm9rLaWZSJxdu3DC0kkj4Zoyys8A9a9jnjO5uU1tc,8320
|
337
337
|
khoj/interface/email/feedback.html,sha256=xksuPFamx4hGWyTTxZKRgX_eiYQQEuv-eK9Xmkt-nwU,1216
|
338
338
|
khoj/interface/email/magic_link.html,sha256=372ESbTPKM9acekuZcOIKOw6kBl-KikFg_L9MOHqJkg,2094
|
339
339
|
khoj/interface/email/task.html,sha256=tY7a0gzVeQ2lSQNu7WyXR_s7VYeWTrxWEj1iHVuoVE4,2813
|
@@ -386,20 +386,20 @@ khoj/processor/content/plaintext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
|
|
386
386
|
khoj/processor/content/plaintext/plaintext_to_entries.py,sha256=wFZwK_zIc7gWbRtO9sOHo9KvfhGAzL9psX_nKWYFduo,4975
|
387
387
|
khoj/processor/conversation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
388
388
|
khoj/processor/conversation/prompts.py,sha256=7-m6lRCK2iMgABqwJ-z_0LcZYaoVaTUmirrYKf1nOA0,57339
|
389
|
-
khoj/processor/conversation/utils.py,sha256=
|
389
|
+
khoj/processor/conversation/utils.py,sha256=RfJOBKR610e1ImZgDhziyMRant3m4gh2WNRzr1CQyos,32746
|
390
390
|
khoj/processor/conversation/anthropic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
391
|
-
khoj/processor/conversation/anthropic/anthropic_chat.py,sha256=
|
392
|
-
khoj/processor/conversation/anthropic/utils.py,sha256=
|
391
|
+
khoj/processor/conversation/anthropic/anthropic_chat.py,sha256=ZFCMwWaoCnQuWImw02Ht0pIajioZuTMNtSt4eU0aCds,9224
|
392
|
+
khoj/processor/conversation/anthropic/utils.py,sha256=t9xquCGS4vDGC1bxJLcA96sh0QNKYYnf1ieXM4jf5TQ,9194
|
393
393
|
khoj/processor/conversation/google/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
394
|
-
khoj/processor/conversation/google/gemini_chat.py,sha256=
|
395
|
-
khoj/processor/conversation/google/utils.py,sha256=
|
394
|
+
khoj/processor/conversation/google/gemini_chat.py,sha256=QSBhvEZtAd1bWY4dXYi0O7CQ8dG8I_XNceY2fRn7MVc,9821
|
395
|
+
khoj/processor/conversation/google/utils.py,sha256=5-Q1Wby5nDFRzHUDU2ud69gadDlHxKdBsBhdlSOHtAY,14221
|
396
396
|
khoj/processor/conversation/offline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
397
|
-
khoj/processor/conversation/offline/chat_model.py,sha256=
|
397
|
+
khoj/processor/conversation/offline/chat_model.py,sha256=AW0F4spJfenX7wImNFdwG4jwM0F7Z7JB1UP-U_El848,13465
|
398
398
|
khoj/processor/conversation/offline/utils.py,sha256=51McImxl6u1qgRYvMt7uzsgLGSLq5SMFy74ymlNjIcc,3033
|
399
399
|
khoj/processor/conversation/offline/whisper.py,sha256=DJI-8y8DULO2cQ49m2VOvRyIZ2TxBypc15gM8O3HuMI,470
|
400
400
|
khoj/processor/conversation/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
401
|
-
khoj/processor/conversation/openai/gpt.py,sha256=
|
402
|
-
khoj/processor/conversation/openai/utils.py,sha256=
|
401
|
+
khoj/processor/conversation/openai/gpt.py,sha256=Yo6r-dqa0HuLNNHLX8UWd0R436dA5xoKg8FbwyyGq54,10945
|
402
|
+
khoj/processor/conversation/openai/utils.py,sha256=qI0g4ryeq5gXcjADglHIhA243YWXbOw2t3hMDM83hHg,10798
|
403
403
|
khoj/processor/conversation/openai/whisper.py,sha256=zoEeK1LNCg_tzP4xzYi5vRPzNPGuDGzpkrkG7d1LUn4,447
|
404
404
|
khoj/processor/image/generate.py,sha256=FAIIsr8TIHxWxK-INNK4jJOOswBxQFyi_G4tI8NNEI8,10571
|
405
405
|
khoj/processor/speech/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -410,14 +410,14 @@ khoj/processor/tools/run_code.py,sha256=DtenheSYbRu_iw82pHSVGJGKJqfMT69dNZ_lCLqC
|
|
410
410
|
khoj/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
411
411
|
khoj/routers/api.py,sha256=xF108KeC0F9rIspB_M8skZUvDb2ecobFCPgZ5H-Lo6o,29414
|
412
412
|
khoj/routers/api_agents.py,sha256=aEJJnQe1yogSkKO6W3Q8Ukl-xHMnqIAx3jB4M-kGNdY,17043
|
413
|
-
khoj/routers/api_chat.py,sha256=
|
413
|
+
khoj/routers/api_chat.py,sha256=YIQYqOFgO5qIC5ZEfLRZ18iH3diQ2IM59N7xTT8rpOY,52508
|
414
414
|
khoj/routers/api_content.py,sha256=uLO3eir36rERkhhKU1HOdEv8KTi_z_edT9cHMCZP1W8,24578
|
415
415
|
khoj/routers/api_model.py,sha256=H4s4TO7omUFi77H56AWjZs9-o_N-Fqq2OnaPHqR8pLM,5251
|
416
416
|
khoj/routers/api_phone.py,sha256=p9yfc4WeMHDC0hg3aQk60a2VBy8rZPdEnz9wdJ7DzkU,2208
|
417
417
|
khoj/routers/api_subscription.py,sha256=qnbKwA6N1TWK8Aiu1FFLka_JhbPOuwqT262NSHGZDiQ,5569
|
418
418
|
khoj/routers/auth.py,sha256=jk2lqAS_650lQsoaOFTlZd9W_LL8HbN5zhHTZza_lqs,11258
|
419
419
|
khoj/routers/email.py,sha256=wvr6_fpk0RuKcTPC6suI8JDZPLYzJ9hAhz_G41yZytc,3923
|
420
|
-
khoj/routers/helpers.py,sha256=
|
420
|
+
khoj/routers/helpers.py,sha256=hLmjp7cro3IEkkVMtRa1aBvqwg8GaXdOudvF3LPBN0E,99105
|
421
421
|
khoj/routers/notion.py,sha256=g53xyYFmjr2JnuIrTW2vytbfkiK_UkoRTxqnnLSmD5o,2802
|
422
422
|
khoj/routers/research.py,sha256=NXOkwvO4Yn4k1fIfkicklToW4JqfCloJspNgQ3xO9Dg,18702
|
423
423
|
khoj/routers/storage.py,sha256=lao0DvsF49QleZvOdjKM98RU2cGfCJDBb7WeoI7Rr3I,2172
|
@@ -435,15 +435,15 @@ khoj/utils/cli.py,sha256=fI1XQYMtJzLGOKQZQ5XxFOrC8sGjK3Alnteg5U62rWI,3882
|
|
435
435
|
khoj/utils/config.py,sha256=aiOkH0je8A30DAGYTHMRePrgJonFv_i07_7CdhhhcdA,1805
|
436
436
|
khoj/utils/constants.py,sha256=-Ks8dpYDSKLA6Y_cwXLgEtn9-LXDMwnUxDNC2OhZ9W4,3353
|
437
437
|
khoj/utils/fs_syncer.py,sha256=5nqwAZqRk3Nwhkwd8y4IomTPZQmW32GwAqyMzal5KyY,9996
|
438
|
-
khoj/utils/helpers.py,sha256=
|
438
|
+
khoj/utils/helpers.py,sha256=D_mxXuXqwumEGFpjj1_B5fTz25rjbOPLCMFnzAkYots,29719
|
439
439
|
khoj/utils/initialization.py,sha256=R-bM8D0QbY8g2R5o-8DsfRAnUPHIu3crPWNdg5wkaCs,15022
|
440
440
|
khoj/utils/jsonl.py,sha256=0Ac_COqr8sLCXntzZtquxuCEVRM2c3yKeDRGhgOBRpQ,1192
|
441
441
|
khoj/utils/models.py,sha256=Q5tcC9-z25sCiub048fLnvZ6_IIO1bcPNxt5payekk0,2009
|
442
442
|
khoj/utils/rawconfig.py,sha256=wfZTk-Aifb-_q9Yh-NPfh9LlLTioYG-yBqrasgvo4pc,5045
|
443
443
|
khoj/utils/state.py,sha256=axjZhnby8L3bY-N1VVoWgBH1RpFGK6U3_ZeNo1Kt7hs,1679
|
444
444
|
khoj/utils/yaml.py,sha256=qy1Tkc61rDMesBw_Cyx2vOR6H-Hngcsm5kYfjwQBwkE,1543
|
445
|
-
khoj-1.40.1.
|
446
|
-
khoj-1.40.1.
|
447
|
-
khoj-1.40.1.
|
448
|
-
khoj-1.40.1.
|
449
|
-
khoj-1.40.1.
|
445
|
+
khoj-1.40.1.dev27.dist-info/METADATA,sha256=B7j8PHfcTqbRVkkKnb_X56bvwHpBkX5QJPWrQq-7LrM,8403
|
446
|
+
khoj-1.40.1.dev27.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
447
|
+
khoj-1.40.1.dev27.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
|
448
|
+
khoj-1.40.1.dev27.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
449
|
+
khoj-1.40.1.dev27.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8459,3317,244,7138],{63521:function(){}},function(n){n.O(0,[2971,2117,1744],function(){return n(n.s=63521)}),_N_E=n.O()}]);
|
@@ -1 +0,0 @@
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3317,8459,244,7138],{63521:function(){}},function(n){n.O(0,[2971,2117,1744],function(){return n(n.s=63521)}),_N_E=n.O()}]);
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|