khoj 1.40.1.dev18__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/{2327-50940053d8852cae.js → 2327-64e90eab8ee88c9c.js} +1 -1
- khoj/interface/compiled/_next/static/chunks/{8515-010dd769c584b672.js → 8515-f305779d95dd5780.js} +1 -1
- khoj/interface/compiled/_next/static/chunks/app/agents/layout-4e2a134ec26aa606.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/agents/{page-c9ceb9b94e24b94a.js → page-ceeb9a91edea74ce.js} +1 -1
- khoj/interface/compiled/_next/static/chunks/app/automations/{page-3dc59a0df3827dc7.js → page-e3cb78747ab98cc7.js} +1 -1
- khoj/interface/compiled/_next/static/chunks/app/chat/layout-ad4d1792ab1a4108.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/chat/{page-ff3211ac7a5a1f48.js → page-5174ed911079ee57.js} +1 -1
- khoj/interface/compiled/_next/static/chunks/app/{page-38f1f125d7aeb4c7.js → page-a4053e1bb578b2ce.js} +1 -1
- khoj/interface/compiled/_next/static/chunks/app/search/layout-c02531d586972d7d.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/search/{page-26d4492fb1200e0e.js → page-8973da2f4c076fe1.js} +1 -1
- khoj/interface/compiled/_next/static/chunks/app/settings/{page-bf1a4e488b29fceb.js → page-375136dbb400525b.js} +1 -1
- khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-e8e5db7830bf3f47.js +1 -0
- khoj/interface/compiled/_next/static/chunks/app/share/chat/{page-a1f10c96366c3a4f.js → page-384b54fc953b18f2.js} +1 -1
- khoj/interface/compiled/_next/static/chunks/{webpack-2707657083ef5456.js → webpack-21f76f7f59582bc7.js} +1 -1
- khoj/interface/compiled/_next/static/css/37a73b87f02df402.css +1 -0
- khoj/interface/compiled/_next/static/css/f29752d6e1be7624.css +1 -0
- khoj/interface/compiled/_next/static/css/{0db53bacf81896f5.css → fca983d49c3dd1a3.css} +1 -1
- khoj/interface/compiled/agents/index.html +2 -2
- khoj/interface/compiled/agents/index.txt +2 -2
- 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 +2 -2
- khoj/interface/compiled/index.html +2 -2
- khoj/interface/compiled/index.txt +2 -2
- khoj/interface/compiled/search/index.html +2 -2
- khoj/interface/compiled/search/index.txt +2 -2
- khoj/interface/compiled/settings/index.html +2 -2
- khoj/interface/compiled/settings/index.txt +4 -4
- khoj/interface/compiled/share/chat/index.html +2 -2
- khoj/interface/compiled/share/chat/index.txt +2 -2
- 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 +52 -71
- khoj/processor/conversation/utils.py +2 -38
- khoj/routers/api.py +1 -3
- khoj/routers/api_chat.py +19 -16
- khoj/routers/helpers.py +13 -23
- khoj/routers/research.py +1 -2
- khoj/utils/helpers.py +56 -0
- {khoj-1.40.1.dev18.dist-info → khoj-1.40.1.dev27.dist-info}/METADATA +1 -1
- {khoj-1.40.1.dev18.dist-info → khoj-1.40.1.dev27.dist-info}/RECORD +59 -59
- khoj/interface/compiled/_next/static/chunks/app/agents/layout-e49165209d2e406c.js +0 -1
- khoj/interface/compiled/_next/static/chunks/app/chat/layout-d5ae861e1ade9d08.js +0 -1
- khoj/interface/compiled/_next/static/chunks/app/search/layout-f5881c7ae3ba0795.js +0 -1
- khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-64a53f8ec4afa6b3.js +0 -1
- khoj/interface/compiled/_next/static/css/bb7ea98028b368f3.css +0 -1
- khoj/interface/compiled/_next/static/css/ee66643a6a5bf71c.css +0 -1
- /khoj/interface/compiled/_next/static/chunks/{1915-1943ee8a628b893c.js → 1915-ab4353eaca76f690.js} +0 -0
- /khoj/interface/compiled/_next/static/chunks/{2117-5a41630a2bd2eae8.js → 2117-1c18aa2098982bf9.js} +0 -0
- /khoj/interface/compiled/_next/static/chunks/{4363-e6ac2203564d1a3b.js → 4363-4efaf12abe696251.js} +0 -0
- /khoj/interface/compiled/_next/static/chunks/{4447-e038b251d626c340.js → 4447-5d44807c40355b1a.js} +0 -0
- /khoj/interface/compiled/_next/static/chunks/{8667-8136f74e9a086fca.js → 8667-adbe6017a66cef10.js} +0 -0
- /khoj/interface/compiled/_next/static/chunks/{9259-640fdd77408475df.js → 9259-d8bcd9da9e80c81e.js} +0 -0
- /khoj/interface/compiled/_next/static/{_n7QmqkwoEnXgFtkxOxET → jpAPJYOTptFnVVNIEkfa8}/_buildManifest.js +0 -0
- /khoj/interface/compiled/_next/static/{_n7QmqkwoEnXgFtkxOxET → jpAPJYOTptFnVVNIEkfa8}/_ssgManifest.js +0 -0
- {khoj-1.40.1.dev18.dist-info → khoj-1.40.1.dev27.dist-info}/WHEEL +0 -0
- {khoj-1.40.1.dev18.dist-info → khoj-1.40.1.dev27.dist-info}/entry_points.txt +0 -0
- {khoj-1.40.1.dev18.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.py
CHANGED
@@ -352,7 +352,7 @@ def set_user_name(
|
|
352
352
|
|
353
353
|
|
354
354
|
async def extract_references_and_questions(
|
355
|
-
|
355
|
+
user: KhojUser,
|
356
356
|
meta_log: dict,
|
357
357
|
q: str,
|
358
358
|
n: int,
|
@@ -367,8 +367,6 @@ async def extract_references_and_questions(
|
|
367
367
|
query_files: str = None,
|
368
368
|
tracer: dict = {},
|
369
369
|
):
|
370
|
-
user = request.user.object if request.user.is_authenticated else None
|
371
|
-
|
372
370
|
# Initialize Variables
|
373
371
|
compiled_references: List[dict[str, str]] = []
|
374
372
|
inferred_queries: List[str] = []
|
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,
|
@@ -889,7 +888,6 @@ async def chat(
|
|
889
888
|
|
890
889
|
if conversation_commands == [ConversationCommand.Research]:
|
891
890
|
async for research_result in execute_information_collection(
|
892
|
-
request=request,
|
893
891
|
user=user,
|
894
892
|
query=defiltered_query,
|
895
893
|
conversation_id=conversation_id,
|
@@ -1000,7 +998,7 @@ async def chat(
|
|
1000
998
|
return
|
1001
999
|
|
1002
1000
|
llm_response = construct_automation_created_message(automation, crontime, query_to_run, subject)
|
1003
|
-
await
|
1001
|
+
await save_to_conversation_log(
|
1004
1002
|
q,
|
1005
1003
|
llm_response,
|
1006
1004
|
user,
|
@@ -1025,7 +1023,7 @@ async def chat(
|
|
1025
1023
|
if not ConversationCommand.Research in conversation_commands:
|
1026
1024
|
try:
|
1027
1025
|
async for result in extract_references_and_questions(
|
1028
|
-
|
1026
|
+
user,
|
1029
1027
|
meta_log,
|
1030
1028
|
q,
|
1031
1029
|
(n or 7),
|
@@ -1309,26 +1307,31 @@ async def chat(
|
|
1309
1307
|
yield result
|
1310
1308
|
|
1311
1309
|
continue_stream = True
|
1312
|
-
|
1313
|
-
|
1310
|
+
async for item in llm_response:
|
1311
|
+
# Should not happen with async generator, end is signaled by loop exit. Skip.
|
1314
1312
|
if item is None:
|
1315
|
-
|
1316
|
-
yield result
|
1317
|
-
# Send Usage Metadata once llm interactions are complete
|
1318
|
-
async for event in send_event(ChatEvent.USAGE, tracer.get("usage")):
|
1319
|
-
yield event
|
1320
|
-
async for result in send_event(ChatEvent.END_RESPONSE, ""):
|
1321
|
-
yield result
|
1322
|
-
logger.debug("Finished streaming response")
|
1323
|
-
return
|
1313
|
+
continue
|
1324
1314
|
if not connection_alive or not continue_stream:
|
1315
|
+
# Drain the generator if disconnected but keep processing internally
|
1325
1316
|
continue
|
1326
1317
|
try:
|
1327
1318
|
async for result in send_event(ChatEvent.MESSAGE, f"{item}"):
|
1328
1319
|
yield result
|
1329
1320
|
except Exception as e:
|
1330
1321
|
continue_stream = False
|
1331
|
-
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")
|
1332
1335
|
|
1333
1336
|
## Stream Text Response
|
1334
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/routers/research.py
CHANGED
@@ -193,7 +193,6 @@ async def apick_next_tool(
|
|
193
193
|
|
194
194
|
|
195
195
|
async def execute_information_collection(
|
196
|
-
request: Request,
|
197
196
|
user: KhojUser,
|
198
197
|
query: str,
|
199
198
|
conversation_id: str,
|
@@ -251,7 +250,7 @@ async def execute_information_collection(
|
|
251
250
|
c["query"] for iteration in previous_iterations if iteration.context for c in iteration.context
|
252
251
|
}
|
253
252
|
async for result in extract_references_and_questions(
|
254
|
-
|
253
|
+
user,
|
255
254
|
construct_tool_chat_history(previous_iterations, ConversationCommand.Notes),
|
256
255
|
this_iteration.query,
|
257
256
|
7,
|
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,25 +129,23 @@ 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/_n7QmqkwoEnXgFtkxOxET/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
|
142
|
-
khoj/interface/compiled/_next/static/_n7QmqkwoEnXgFtkxOxET/_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
|
146
|
-
khoj/interface/compiled/_next/static/chunks/1915-
|
144
|
+
khoj/interface/compiled/_next/static/chunks/1915-ab4353eaca76f690.js,sha256=qArqL3leavWRcZkX4ZuWgemtKnmV6c-_yrNtMu_8SeY,11277
|
147
145
|
khoj/interface/compiled/_next/static/chunks/2069.f060659791c0c484.js,sha256=C_oat_BkZcLOHsyJlNN_5I55fB7ee1zkkZ9FT5zOzn4,186
|
148
|
-
khoj/interface/compiled/_next/static/chunks/2117-
|
146
|
+
khoj/interface/compiled/_next/static/chunks/2117-1c18aa2098982bf9.js,sha256=3KtUs1Aeno0OfsXZ2ymJ0d5HXwO2_Osq2uGIIGiDagI,123994
|
149
147
|
khoj/interface/compiled/_next/static/chunks/2170.45431769330fa5b7.js,sha256=C7Puu9x18DhdR5Sh8XXvTzPdP_HTK6WhsJDNW-NoB7o,24019
|
150
|
-
khoj/interface/compiled/_next/static/chunks/2327-
|
148
|
+
khoj/interface/compiled/_next/static/chunks/2327-64e90eab8ee88c9c.js,sha256=l3HfWbVdqcHXJ1_QGfIA6Lm6dqdXP_bsdwgXXlxsg88,127282
|
151
149
|
khoj/interface/compiled/_next/static/chunks/3237.c4754f02f1a388cb.js,sha256=Z5iOEX0mPj-5tuoU4Bq_IjpAlyc4MURKlBoaExsULTk,177
|
152
150
|
khoj/interface/compiled/_next/static/chunks/3305.1fc7297ba154ee95.js,sha256=mfrpv-asuYmBmbqIh1p3UnPMAxg2pKlxE3Rzmth8O6s,37266
|
153
151
|
khoj/interface/compiled/_next/static/chunks/3332.6313db5217bb1b67.js,sha256=4lNF9JhPQdTX2xDojGOvvanM0Y0VScwM3kmF4p0RHFg,3776
|
@@ -156,9 +154,9 @@ khoj/interface/compiled/_next/static/chunks/3460.39c2b9b6a3898384.js,sha256=gehY
|
|
156
154
|
khoj/interface/compiled/_next/static/chunks/4299.2aaa569416cfc208.js,sha256=3HJ8OvB9BDJW0-qCBd1eUmChoBAxaCX6R81ftWZ1CHw,21659
|
157
155
|
khoj/interface/compiled/_next/static/chunks/4327.238d15c09a039b8b.js,sha256=mZa4Oyltc9JrokqnalRTjzcvWgX4S3i3REXiHzRYH1o,296536
|
158
156
|
khoj/interface/compiled/_next/static/chunks/4357-d86d3401f6f6f802.js,sha256=KDM1m01Fz-vcAMfxQfYPO6SEZJVK7z4241JOCEvou6Y,45442
|
159
|
-
khoj/interface/compiled/_next/static/chunks/4363-
|
157
|
+
khoj/interface/compiled/_next/static/chunks/4363-4efaf12abe696251.js,sha256=YFO-i3X2LrX9c4MgYY1kPsoRBaqVUkmfAKI62Rz2BVI,468054
|
160
158
|
khoj/interface/compiled/_next/static/chunks/4415.e0c0da5eedae4dd7.js,sha256=DEf8HPEstDFvBflOU0j0ilYHlVJilGcGsLgUx524FZQ,25544
|
161
|
-
khoj/interface/compiled/_next/static/chunks/4447-
|
159
|
+
khoj/interface/compiled/_next/static/chunks/4447-5d44807c40355b1a.js,sha256=Uw8IrcKmVR3wba-FB9maP9i9l_kAYg59r8PN1T_ipQE,19621
|
162
160
|
khoj/interface/compiled/_next/static/chunks/4609-33aa487dff03a9fd.js,sha256=1M6QAfVZa2g2Q4jXRdSI1wjrZ4G9yKjINJt8qyTKm1A,24698
|
163
161
|
khoj/interface/compiled/_next/static/chunks/4610.a1e7f40a759ed2aa.js,sha256=b5JDRPyQv2MsibYoK2TDT76LMAoDTRzFM-fa81mJxow,14102
|
164
162
|
khoj/interface/compiled/_next/static/chunks/4650.41f041da0ad365ad.js,sha256=EZeckNrMc3ZUX_LexPgaeusEq-dGBNEPm7nc5nvb4OM,33902
|
@@ -186,13 +184,13 @@ khoj/interface/compiled/_next/static/chunks/7890.f681eb1d1f83bea2.js,sha256=xd1q
|
|
186
184
|
khoj/interface/compiled/_next/static/chunks/7953.f6fc335a23efb959.js,sha256=8XInVs3uzJAMGBndN2k4BeJNHmgZOembNuoyPe9Z7Oo,412
|
187
185
|
khoj/interface/compiled/_next/static/chunks/8254.3145a4fbdcfdca46.js,sha256=sur8InabGfvh1HqNQhwBssc1tCPae_WKQ-efoYU1Q8A,412
|
188
186
|
khoj/interface/compiled/_next/static/chunks/8400.c95e4e79bcd79a56.js,sha256=3SlFozKtF4DYQYPT3hB5M7VEm3e_W71kC19JgADz-3k,19864
|
189
|
-
khoj/interface/compiled/_next/static/chunks/8515-
|
190
|
-
khoj/interface/compiled/_next/static/chunks/8667-
|
187
|
+
khoj/interface/compiled/_next/static/chunks/8515-f305779d95dd5780.js,sha256=QyTarawMADcAup6ipG9JMVnvkbkoYh0Ury2EWkflZ3o,1619194
|
188
|
+
khoj/interface/compiled/_next/static/chunks/8667-adbe6017a66cef10.js,sha256=kyiAVJTylsiOPFTb63uZn_pMlk4pYhDYt_N7xL76PTM,7214
|
191
189
|
khoj/interface/compiled/_next/static/chunks/8673.be44c4d9e4f1d084.js,sha256=jiE4xU-TbkVC4R60SIgxwdo31T9mbdVBVuhP4H60i94,18629
|
192
190
|
khoj/interface/compiled/_next/static/chunks/8698.a088118fef40d302.js,sha256=mrK-3ZahVSF7sZij3l-PyXKxp-ccXU9orykXDc7YzsM,180
|
193
191
|
khoj/interface/compiled/_next/static/chunks/9022.33974a513a281fd2.js,sha256=6NmDzRbI0NyTisUT04sq9M0czUqvlwZoV4E7Onp-55Q,57192
|
194
192
|
khoj/interface/compiled/_next/static/chunks/90542734.9e6e44b1b45b30fe.js,sha256=5Ivye3p3HC-Ekf-bIPdnvmg_JtYLkCqyRPWtciOmuuo,413716
|
195
|
-
khoj/interface/compiled/_next/static/chunks/9259-
|
193
|
+
khoj/interface/compiled/_next/static/chunks/9259-d8bcd9da9e80c81e.js,sha256=lZJF9qq4_MeSRsHeNPNcxkqh2vhBfag5iAxg6krHA9g,34848
|
196
194
|
khoj/interface/compiled/_next/static/chunks/9334-b22127fe2d39bc60.js,sha256=_TPWqSCbf86Ig1vIEDRLXzloZujDoxpoEWhRPUf6b5U,29065
|
197
195
|
khoj/interface/compiled/_next/static/chunks/9433.b1b5f5d050c43e3c.js,sha256=kMVC0Gg95UqjfQXpGvi-WUSg_kYp0SN7CTPTHxHxDBk,144858
|
198
196
|
khoj/interface/compiled/_next/static/chunks/94ca1967.1b3402358e0e1255.js,sha256=WJXEIy24FD6PNQePg-uahendJMNc03GgnVveitFeshI,1174524
|
@@ -205,32 +203,34 @@ 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
|
-
khoj/interface/compiled/_next/static/chunks/app/page-
|
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-
|
213
|
-
khoj/interface/compiled/_next/static/chunks/app/agents/page-
|
210
|
+
khoj/interface/compiled/_next/static/chunks/app/agents/layout-4e2a134ec26aa606.js,sha256=B3HJ6CKzJccEIOk54Erl1FtKUxGJq2p-ch932X1vjwE,180
|
211
|
+
khoj/interface/compiled/_next/static/chunks/app/agents/page-ceeb9a91edea74ce.js,sha256=kvQaR_nbiCgH5koDFYD4fkceNsScyMVdwvVufMH0Ax8,18314
|
214
212
|
khoj/interface/compiled/_next/static/chunks/app/automations/layout-7f5c33a70e46b3af.js,sha256=s2wHeQ-ai9rKyU9EjOGY1Yo51L4ZEkjLtML85BqN3Zc,5143
|
215
|
-
khoj/interface/compiled/_next/static/chunks/app/automations/page-
|
216
|
-
khoj/interface/compiled/_next/static/chunks/app/chat/layout-
|
217
|
-
khoj/interface/compiled/_next/static/chunks/app/chat/page-
|
218
|
-
khoj/interface/compiled/_next/static/chunks/app/search/layout-
|
219
|
-
khoj/interface/compiled/_next/static/chunks/app/search/page-
|
213
|
+
khoj/interface/compiled/_next/static/chunks/app/automations/page-e3cb78747ab98cc7.js,sha256=CKuBpLxbzqBbCgJ2zbiuDf8Z1UGwEOA3hgnuZEjvpgA,34831
|
214
|
+
khoj/interface/compiled/_next/static/chunks/app/chat/layout-ad4d1792ab1a4108.js,sha256=g815zvSZenVssWcOYjyqAOPDjTCa359nqspXeIsXQ5A,180
|
215
|
+
khoj/interface/compiled/_next/static/chunks/app/chat/page-5174ed911079ee57.js,sha256=p2ym9VzIKWnP9xW-AcgFJTdp68dj7kJadJNYntYje2Q,28538
|
216
|
+
khoj/interface/compiled/_next/static/chunks/app/search/layout-c02531d586972d7d.js,sha256=VQACqzXZcJUaa3W_0wHsrdLP22pj8yqeAOGBQfVnQxw,180
|
217
|
+
khoj/interface/compiled/_next/static/chunks/app/search/page-8973da2f4c076fe1.js,sha256=fD2_a9jptevkZ7Jda0FUp5kTINLef8NXqojbD3cCmJY,32714
|
220
218
|
khoj/interface/compiled/_next/static/chunks/app/settings/layout-8a22f370d3eaeed3.js,sha256=dIfmM5C_Al-Zh_uqaJmniSxjXbu3LqPzrEw4SQ7vs0I,6132
|
221
|
-
khoj/interface/compiled/_next/static/chunks/app/settings/page-
|
222
|
-
khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-
|
223
|
-
khoj/interface/compiled/_next/static/chunks/app/share/chat/page-
|
219
|
+
khoj/interface/compiled/_next/static/chunks/app/settings/page-375136dbb400525b.js,sha256=iAbQGhrtD48JgSFqhl92QZK-qgN2WRRQDoVb_qlxCuo,27893
|
220
|
+
khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-e8e5db7830bf3f47.js,sha256=rcoit2AQboqPwZMTVlVhz1AbyHRJOs-xNMTdYonejCU,180
|
221
|
+
khoj/interface/compiled/_next/static/chunks/app/share/chat/page-384b54fc953b18f2.js,sha256=jpxu_SEQWxeLOPVvCZJ4vtrMlBEdEYvdGzn5Lhhk9SI,5563
|
224
222
|
khoj/interface/compiled/_next/static/chunks/pages/_app-3c9ca398d360b709.js,sha256=UqtikLsCsOWtDUJOW6Tuk9P-bV1V3MhYd3ghrQuEmfs,286
|
225
223
|
khoj/interface/compiled/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js,sha256=w_It3VzKT8O1M3CrJ_hZHsaU7M7dq3EAaVG8KvJ-fhU,253
|
226
|
-
khoj/interface/compiled/_next/static/css/
|
224
|
+
khoj/interface/compiled/_next/static/css/37a73b87f02df402.css,sha256=hp0vlekKu0K2eITR5YIqFmLHQPqV3JETFnRd_-Uh0mk,165
|
227
225
|
khoj/interface/compiled/_next/static/css/76c658ee459140a9.css,sha256=7tI24VB66ZUsAPUxRdQhboopun0AXLUnF64uv9RkC08,1833
|
228
226
|
khoj/interface/compiled/_next/static/css/7889a30fe9c83846.css,sha256=IUkZhkx4GpYOIhN-EJw9T1DqGMO3Wa3mNpUwaOBuZoY,7204
|
229
227
|
khoj/interface/compiled/_next/static/css/9c223d337a984468.css,sha256=F5o-qiwJl16uCWiDADWkkIIk5PNxKjvHz5068EptHps,3075687
|
230
|
-
khoj/interface/compiled/_next/static/css/bb7ea98028b368f3.css,sha256=PBwues3rUFWl02xEnWqKbRFK59SkQUCqYuV45ZedG4U,3318
|
231
228
|
khoj/interface/compiled/_next/static/css/e4eb883b5265d372.css,sha256=6LaW-lQ_ZpgOJNWYwU1Q1egXZ1aqJDEuRj66oRCIU_E,17748
|
232
229
|
khoj/interface/compiled/_next/static/css/ea5485b3f3859a5a.css,sha256=tn6qi2xSLTWhtzDUE8UlC8iipH9QGV6A9oGj1ap-Sk4,1659
|
233
|
-
khoj/interface/compiled/_next/static/css/
|
230
|
+
khoj/interface/compiled/_next/static/css/f29752d6e1be7624.css,sha256=mLPRnYpBFaVhTMJ3CFou5_lrwLJs2mhBlAjNY2lrRYs,6354
|
231
|
+
khoj/interface/compiled/_next/static/css/fca983d49c3dd1a3.css,sha256=3F1qPtz6PQG-gIpo8h3rAfxreAc2Uvxy8F_G2e78EsM,30452
|
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
|
@@ -408,18 +408,18 @@ khoj/processor/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
408
408
|
khoj/processor/tools/online_search.py,sha256=BjmT5M9oSdWViiEoLXqPECg_2w_z6MLz0CcdREb9h-0,24699
|
409
409
|
khoj/processor/tools/run_code.py,sha256=DtenheSYbRu_iw82pHSVGJGKJqfMT69dNZ_lCLqCV1s,12416
|
410
410
|
khoj/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
411
|
-
khoj/routers/api.py,sha256=
|
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
|
-
khoj/routers/research.py,sha256=
|
422
|
+
khoj/routers/research.py,sha256=NXOkwvO4Yn4k1fIfkicklToW4JqfCloJspNgQ3xO9Dg,18702
|
423
423
|
khoj/routers/storage.py,sha256=lao0DvsF49QleZvOdjKM98RU2cGfCJDBb7WeoI7Rr3I,2172
|
424
424
|
khoj/routers/twilio.py,sha256=MLsuCm4--ETvr3sLxbF0CL_ehlg_l2rKBSLR2Qh2Xls,1081
|
425
425
|
khoj/routers/web_client.py,sha256=_vyfDaHZZjNoI2LwGNQFRiFmGLkNcgYJe7dOr3mrxH8,4386
|
@@ -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,,
|