khoj 1.41.1.dev13__py3-none-any.whl → 1.41.1.dev17__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. khoj/interface/compiled/404/index.html +2 -2
  2. khoj/interface/compiled/_next/static/chunks/app/agents/layout-1b6273baddb72146.js +1 -0
  3. khoj/interface/compiled/_next/static/chunks/app/chat/{page-922f9300d560eb57.js → page-6d3c70ba02f93a3b.js} +1 -1
  4. khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-e8e5db7830bf3f47.js +1 -0
  5. khoj/interface/compiled/_next/static/chunks/{webpack-2be8c7eaf9dcbafa.js → webpack-6d1377b465662784.js} +1 -1
  6. khoj/interface/compiled/agents/index.html +2 -2
  7. khoj/interface/compiled/agents/index.txt +1 -1
  8. khoj/interface/compiled/automations/index.html +2 -2
  9. khoj/interface/compiled/automations/index.txt +1 -1
  10. khoj/interface/compiled/chat/index.html +2 -2
  11. khoj/interface/compiled/chat/index.txt +2 -2
  12. khoj/interface/compiled/index.html +2 -2
  13. khoj/interface/compiled/index.txt +1 -1
  14. khoj/interface/compiled/search/index.html +2 -2
  15. khoj/interface/compiled/search/index.txt +1 -1
  16. khoj/interface/compiled/settings/index.html +2 -2
  17. khoj/interface/compiled/settings/index.txt +1 -1
  18. khoj/interface/compiled/share/chat/index.html +2 -2
  19. khoj/interface/compiled/share/chat/index.txt +1 -1
  20. khoj/routers/api_chat.py +62 -20
  21. khoj/routers/helpers.py +51 -117
  22. khoj/routers/research.py +7 -0
  23. khoj/utils/constants.py +1 -1
  24. {khoj-1.41.1.dev13.dist-info → khoj-1.41.1.dev17.dist-info}/METADATA +1 -1
  25. {khoj-1.41.1.dev13.dist-info → khoj-1.41.1.dev17.dist-info}/RECORD +30 -30
  26. khoj/interface/compiled/_next/static/chunks/app/agents/layout-2e626327abfbe612.js +0 -1
  27. khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-6fb51c5c80f8ec67.js +0 -1
  28. /khoj/interface/compiled/_next/static/{gqVxQWvYNrAEdTnRw5akR → Vvhjk0Y7Ramhq_aCVNPne}/_buildManifest.js +0 -0
  29. /khoj/interface/compiled/_next/static/{gqVxQWvYNrAEdTnRw5akR → Vvhjk0Y7Ramhq_aCVNPne}/_ssgManifest.js +0 -0
  30. {khoj-1.41.1.dev13.dist-info → khoj-1.41.1.dev17.dist-info}/WHEEL +0 -0
  31. {khoj-1.41.1.dev13.dist-info → khoj-1.41.1.dev17.dist-info}/entry_points.txt +0 -0
  32. {khoj-1.41.1.dev13.dist-info → khoj-1.41.1.dev17.dist-info}/licenses/LICENSE +0 -0
khoj/routers/helpers.py CHANGED
@@ -1152,6 +1152,7 @@ async def send_message_to_model_wrapper(
1152
1152
  query_images: List[str] = None,
1153
1153
  context: str = "",
1154
1154
  query_files: str = None,
1155
+ conversation_log: dict = {},
1155
1156
  agent_chat_model: ChatModel = None,
1156
1157
  tracer: dict = {},
1157
1158
  ):
@@ -1166,35 +1167,41 @@ async def send_message_to_model_wrapper(
1166
1167
  if vision_available and query_images:
1167
1168
  logger.info(f"Using {chat_model.name} model to understand {len(query_images)} images.")
1168
1169
 
1169
- subscribed = await ais_user_subscribed(user)
1170
- chat_model_name = chat_model.name
1170
+ subscribed = await ais_user_subscribed(user) if user else False
1171
1171
  max_tokens = (
1172
1172
  chat_model.subscribed_max_prompt_size
1173
1173
  if subscribed and chat_model.subscribed_max_prompt_size
1174
1174
  else chat_model.max_prompt_size
1175
1175
  )
1176
+ chat_model_name = chat_model.name
1176
1177
  tokenizer = chat_model.tokenizer
1177
1178
  model_type = chat_model.model_type
1178
1179
  vision_available = chat_model.vision_enabled
1180
+ api_key = chat_model.ai_model_api.api_key
1181
+ api_base_url = chat_model.ai_model_api.api_base_url
1182
+ loaded_model = None
1179
1183
 
1180
1184
  if model_type == ChatModel.ModelType.OFFLINE:
1181
1185
  if state.offline_chat_processor_config is None or state.offline_chat_processor_config.loaded_model is None:
1182
1186
  state.offline_chat_processor_config = OfflineChatProcessorModel(chat_model_name, max_tokens)
1183
-
1184
1187
  loaded_model = state.offline_chat_processor_config.loaded_model
1185
- truncated_messages = generate_chatml_messages_with_context(
1186
- user_message=query,
1187
- context_message=context,
1188
- system_message=system_message,
1189
- model_name=chat_model_name,
1190
- loaded_model=loaded_model,
1191
- tokenizer_name=tokenizer,
1192
- max_prompt_size=max_tokens,
1193
- vision_enabled=vision_available,
1194
- model_type=chat_model.model_type,
1195
- query_files=query_files,
1196
- )
1197
1188
 
1189
+ truncated_messages = generate_chatml_messages_with_context(
1190
+ user_message=query,
1191
+ context_message=context,
1192
+ system_message=system_message,
1193
+ conversation_log=conversation_log,
1194
+ model_name=chat_model_name,
1195
+ loaded_model=loaded_model,
1196
+ tokenizer_name=tokenizer,
1197
+ max_prompt_size=max_tokens,
1198
+ vision_enabled=vision_available,
1199
+ query_images=query_images,
1200
+ model_type=model_type,
1201
+ query_files=query_files,
1202
+ )
1203
+
1204
+ if model_type == ChatModel.ModelType.OFFLINE:
1198
1205
  return send_message_to_model_offline(
1199
1206
  messages=truncated_messages,
1200
1207
  loaded_model=loaded_model,
@@ -1206,22 +1213,6 @@ async def send_message_to_model_wrapper(
1206
1213
  )
1207
1214
 
1208
1215
  elif model_type == ChatModel.ModelType.OPENAI:
1209
- openai_chat_config = chat_model.ai_model_api
1210
- api_key = openai_chat_config.api_key
1211
- api_base_url = openai_chat_config.api_base_url
1212
- truncated_messages = generate_chatml_messages_with_context(
1213
- user_message=query,
1214
- context_message=context,
1215
- system_message=system_message,
1216
- model_name=chat_model_name,
1217
- max_prompt_size=max_tokens,
1218
- tokenizer_name=tokenizer,
1219
- vision_enabled=vision_available,
1220
- query_images=query_images,
1221
- model_type=chat_model.model_type,
1222
- query_files=query_files,
1223
- )
1224
-
1225
1216
  return send_message_to_model(
1226
1217
  messages=truncated_messages,
1227
1218
  api_key=api_key,
@@ -1233,21 +1224,6 @@ async def send_message_to_model_wrapper(
1233
1224
  tracer=tracer,
1234
1225
  )
1235
1226
  elif model_type == ChatModel.ModelType.ANTHROPIC:
1236
- api_key = chat_model.ai_model_api.api_key
1237
- api_base_url = chat_model.ai_model_api.api_base_url
1238
- truncated_messages = generate_chatml_messages_with_context(
1239
- user_message=query,
1240
- context_message=context,
1241
- system_message=system_message,
1242
- model_name=chat_model_name,
1243
- max_prompt_size=max_tokens,
1244
- tokenizer_name=tokenizer,
1245
- vision_enabled=vision_available,
1246
- query_images=query_images,
1247
- model_type=chat_model.model_type,
1248
- query_files=query_files,
1249
- )
1250
-
1251
1227
  return anthropic_send_message_to_model(
1252
1228
  messages=truncated_messages,
1253
1229
  api_key=api_key,
@@ -1258,21 +1234,6 @@ async def send_message_to_model_wrapper(
1258
1234
  tracer=tracer,
1259
1235
  )
1260
1236
  elif model_type == ChatModel.ModelType.GOOGLE:
1261
- api_key = chat_model.ai_model_api.api_key
1262
- api_base_url = chat_model.ai_model_api.api_base_url
1263
- truncated_messages = generate_chatml_messages_with_context(
1264
- user_message=query,
1265
- context_message=context,
1266
- system_message=system_message,
1267
- model_name=chat_model_name,
1268
- max_prompt_size=max_tokens,
1269
- tokenizer_name=tokenizer,
1270
- vision_enabled=vision_available,
1271
- query_images=query_images,
1272
- model_type=chat_model.model_type,
1273
- query_files=query_files,
1274
- )
1275
-
1276
1237
  return gemini_send_message_to_model(
1277
1238
  messages=truncated_messages,
1278
1239
  api_key=api_key,
@@ -1295,6 +1256,7 @@ def send_message_to_model_wrapper_sync(
1295
1256
  user: KhojUser = None,
1296
1257
  query_images: List[str] = None,
1297
1258
  query_files: str = "",
1259
+ conversation_log: dict = {},
1298
1260
  tracer: dict = {},
1299
1261
  ):
1300
1262
  chat_model: ChatModel = ConversationAdapters.get_default_chat_model(user)
@@ -1302,27 +1264,38 @@ def send_message_to_model_wrapper_sync(
1302
1264
  if chat_model is None:
1303
1265
  raise HTTPException(status_code=500, detail="Contact the server administrator to set a default chat model.")
1304
1266
 
1267
+ subscribed = ais_user_subscribed(user) if user else False
1268
+ max_tokens = (
1269
+ chat_model.subscribed_max_prompt_size
1270
+ if subscribed and chat_model.subscribed_max_prompt_size
1271
+ else chat_model.max_prompt_size
1272
+ )
1305
1273
  chat_model_name = chat_model.name
1306
- max_tokens = chat_model.max_prompt_size
1274
+ model_type = chat_model.model_type
1307
1275
  vision_available = chat_model.vision_enabled
1276
+ api_key = chat_model.ai_model_api.api_key
1277
+ api_base_url = chat_model.ai_model_api.api_base_url
1278
+ loaded_model = None
1308
1279
 
1309
- if chat_model.model_type == ChatModel.ModelType.OFFLINE:
1280
+ if model_type == ChatModel.ModelType.OFFLINE:
1310
1281
  if state.offline_chat_processor_config is None or state.offline_chat_processor_config.loaded_model is None:
1311
1282
  state.offline_chat_processor_config = OfflineChatProcessorModel(chat_model_name, max_tokens)
1312
-
1313
1283
  loaded_model = state.offline_chat_processor_config.loaded_model
1314
- truncated_messages = generate_chatml_messages_with_context(
1315
- user_message=message,
1316
- system_message=system_message,
1317
- model_name=chat_model_name,
1318
- loaded_model=loaded_model,
1319
- max_prompt_size=max_tokens,
1320
- vision_enabled=vision_available,
1321
- model_type=chat_model.model_type,
1322
- query_images=query_images,
1323
- query_files=query_files,
1324
- )
1325
1284
 
1285
+ truncated_messages = generate_chatml_messages_with_context(
1286
+ user_message=message,
1287
+ system_message=system_message,
1288
+ conversation_log=conversation_log,
1289
+ model_name=chat_model_name,
1290
+ loaded_model=loaded_model,
1291
+ max_prompt_size=max_tokens,
1292
+ vision_enabled=vision_available,
1293
+ model_type=model_type,
1294
+ query_images=query_images,
1295
+ query_files=query_files,
1296
+ )
1297
+
1298
+ if model_type == ChatModel.ModelType.OFFLINE:
1326
1299
  return send_message_to_model_offline(
1327
1300
  messages=truncated_messages,
1328
1301
  loaded_model=loaded_model,
@@ -1333,20 +1306,7 @@ def send_message_to_model_wrapper_sync(
1333
1306
  tracer=tracer,
1334
1307
  )
1335
1308
 
1336
- elif chat_model.model_type == ChatModel.ModelType.OPENAI:
1337
- api_key = chat_model.ai_model_api.api_key
1338
- api_base_url = chat_model.ai_model_api.api_base_url
1339
- truncated_messages = generate_chatml_messages_with_context(
1340
- user_message=message,
1341
- system_message=system_message,
1342
- model_name=chat_model_name,
1343
- max_prompt_size=max_tokens,
1344
- vision_enabled=vision_available,
1345
- model_type=chat_model.model_type,
1346
- query_images=query_images,
1347
- query_files=query_files,
1348
- )
1349
-
1309
+ elif model_type == ChatModel.ModelType.OPENAI:
1350
1310
  return send_message_to_model(
1351
1311
  messages=truncated_messages,
1352
1312
  api_key=api_key,
@@ -1357,20 +1317,7 @@ def send_message_to_model_wrapper_sync(
1357
1317
  tracer=tracer,
1358
1318
  )
1359
1319
 
1360
- elif chat_model.model_type == ChatModel.ModelType.ANTHROPIC:
1361
- api_key = chat_model.ai_model_api.api_key
1362
- api_base_url = chat_model.ai_model_api.api_base_url
1363
- truncated_messages = generate_chatml_messages_with_context(
1364
- user_message=message,
1365
- system_message=system_message,
1366
- model_name=chat_model_name,
1367
- max_prompt_size=max_tokens,
1368
- vision_enabled=vision_available,
1369
- model_type=chat_model.model_type,
1370
- query_images=query_images,
1371
- query_files=query_files,
1372
- )
1373
-
1320
+ elif model_type == ChatModel.ModelType.ANTHROPIC:
1374
1321
  return anthropic_send_message_to_model(
1375
1322
  messages=truncated_messages,
1376
1323
  api_key=api_key,
@@ -1380,20 +1327,7 @@ def send_message_to_model_wrapper_sync(
1380
1327
  tracer=tracer,
1381
1328
  )
1382
1329
 
1383
- elif chat_model.model_type == ChatModel.ModelType.GOOGLE:
1384
- api_key = chat_model.ai_model_api.api_key
1385
- api_base_url = chat_model.ai_model_api.api_base_url
1386
- truncated_messages = generate_chatml_messages_with_context(
1387
- user_message=message,
1388
- system_message=system_message,
1389
- model_name=chat_model_name,
1390
- max_prompt_size=max_tokens,
1391
- vision_enabled=vision_available,
1392
- model_type=chat_model.model_type,
1393
- query_images=query_images,
1394
- query_files=query_files,
1395
- )
1396
-
1330
+ elif model_type == ChatModel.ModelType.GOOGLE:
1397
1331
  return gemini_send_message_to_model(
1398
1332
  messages=truncated_messages,
1399
1333
  api_key=api_key,
khoj/routers/research.py CHANGED
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  import logging
2
3
  import os
3
4
  from datetime import datetime
@@ -205,11 +206,17 @@ async def execute_information_collection(
205
206
  file_filters: List[str] = [],
206
207
  tracer: dict = {},
207
208
  query_files: str = None,
209
+ cancellation_event: Optional[asyncio.Event] = None,
208
210
  ):
209
211
  current_iteration = 0
210
212
  MAX_ITERATIONS = int(os.getenv("KHOJ_RESEARCH_ITERATIONS", 5))
211
213
  previous_iterations: List[InformationCollectionIteration] = []
212
214
  while current_iteration < MAX_ITERATIONS:
215
+ # Check for cancellation at the start of each iteration
216
+ if cancellation_event and cancellation_event.is_set():
217
+ logger.debug(f"User {user} disconnected client. Research cancelled.")
218
+ break
219
+
213
220
  online_results: Dict = dict()
214
221
  code_results: Dict = dict()
215
222
  document_results: List[Dict[str, str]] = []
khoj/utils/constants.py CHANGED
@@ -18,7 +18,7 @@ default_offline_chat_models = [
18
18
  "bartowski/Qwen2.5-14B-Instruct-GGUF",
19
19
  ]
20
20
  default_openai_chat_models = ["gpt-4o-mini", "gpt-4.1"]
21
- default_gemini_chat_models = ["gemini-2.5-flash-preview-04-17", "gemini-2.5-pro-preview-03-25"]
21
+ default_gemini_chat_models = ["gemini-2.0-flash", "gemini-2.5-flash-preview-04-17", "gemini-2.5-pro-preview-03-25"]
22
22
  default_anthropic_chat_models = ["claude-3-7-sonnet-latest", "claude-3-5-haiku-latest"]
23
23
 
24
24
  empty_config = {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: khoj
3
- Version: 1.41.1.dev13
3
+ Version: 1.41.1.dev17
4
4
  Summary: Your Second Brain
5
5
  Project-URL: Homepage, https://khoj.dev
6
6
  Project-URL: Documentation, https://docs.khoj.dev
@@ -129,15 +129,17 @@ 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=Cxs8AUSjW0L9veS02paymO2jpv5qI9tLSitcEnHpM2E,53043
133
- khoj/interface/compiled/index.txt,sha256=DaYAXGNPbxKe-t-njIoJfmVR0sQridWNg40avHnEcXU,7616
132
+ khoj/interface/compiled/index.html,sha256=cBgIbBmnyr9grMZAwtnbnbo6NgCerPovkBBk2cheCcw,53043
133
+ khoj/interface/compiled/index.txt,sha256=T9dfRdsTb4LRsJ77t07kw3UznSumlzqA3USLjphKZtY,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=S14-XrDLR-wmL9usDp5cEVGKNje8e1pa7L9pK0g295E,17097
140
+ khoj/interface/compiled/404/index.html,sha256=VoPsEEwvqzgtiJ5SnjEznZsCXa56pPNR99JZPYpdQrQ,17097
141
+ khoj/interface/compiled/_next/static/Vvhjk0Y7Ramhq_aCVNPne/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
142
+ khoj/interface/compiled/_next/static/Vvhjk0Y7Ramhq_aCVNPne/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
141
143
  khoj/interface/compiled/_next/static/chunks/1243.ea2826fb35adb15a.js,sha256=Y6ceAwyTH4HSGDvBRoBB-RVXRCzGGr8NSPcspYF5OM8,182
142
144
  khoj/interface/compiled/_next/static/chunks/133.392ae90c3b2a67f2.js,sha256=IK-mb9ZlF6uJUdU8AuXsppc99tFL8svJvZtKNZGNtcY,411
143
145
  khoj/interface/compiled/_next/static/chunks/1592.b069bdb7aaddd2eb.js,sha256=VUaP2gjX3W9tA9pOH_VIPG_2BIg7Wk1AICrfU5iHgrk,71096
@@ -203,21 +205,21 @@ khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js,sha256
203
205
  khoj/interface/compiled/_next/static/chunks/main-876327ac335776ab.js,sha256=JkQUmA9vh1B4VVGF5dbZ8Kun0AnIVUbZr5IBK90T4Zs,111290
204
206
  khoj/interface/compiled/_next/static/chunks/main-app-de1f09df97a3cfc7.js,sha256=bqnztujKItXfFBzQlaBmDZyfJpQt_M93CXOuchJfpD0,471
205
207
  khoj/interface/compiled/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
206
- khoj/interface/compiled/_next/static/chunks/webpack-2be8c7eaf9dcbafa.js,sha256=cFYgbZ1a2uZD_9L1wQfEiOf0usb7PARAiIr2nn9sNT0,4888
208
+ khoj/interface/compiled/_next/static/chunks/webpack-6d1377b465662784.js,sha256=yiKRCY86eIlc6BGJeh6dF3lPkrNZG8--3R1olQ3-FGA,4888
207
209
  khoj/interface/compiled/_next/static/chunks/app/layout-baa6e7974e560a7a.js,sha256=7JZS2Pr995Lwu3FeQpAvheLS1Bn5w5HOFsecV2_kyQA,3880
208
210
  khoj/interface/compiled/_next/static/chunks/app/page-bde9dd79a8cc9b0e.js,sha256=9oHZ64uHWPdU6i9gpwYDiOcH9FXo8IwXUk7-e00tIqU,31217
209
211
  khoj/interface/compiled/_next/static/chunks/app/_not-found/page-0ec97c4970898f2d.js,sha256=zElhiTkdu2JqrEvJ8Lrxh4HCyfLmPllBHHWOuDtrVlw,1755
210
- khoj/interface/compiled/_next/static/chunks/app/agents/layout-2e626327abfbe612.js,sha256=MRpYohoLXBuN_YiOs8yao6iYHhsEApC_TlJl1mWMgR0,180
212
+ khoj/interface/compiled/_next/static/chunks/app/agents/layout-1b6273baddb72146.js,sha256=mLo7avyr3x2HXbQwaL5vwu7szO_576TnQdOXdtinRI8,180
211
213
  khoj/interface/compiled/_next/static/chunks/app/agents/page-ceeb9a91edea74ce.js,sha256=kvQaR_nbiCgH5koDFYD4fkceNsScyMVdwvVufMH0Ax8,18314
212
214
  khoj/interface/compiled/_next/static/chunks/app/automations/layout-7f5c33a70e46b3af.js,sha256=s2wHeQ-ai9rKyU9EjOGY1Yo51L4ZEkjLtML85BqN3Zc,5143
213
215
  khoj/interface/compiled/_next/static/chunks/app/automations/page-e3cb78747ab98cc7.js,sha256=CKuBpLxbzqBbCgJ2zbiuDf8Z1UGwEOA3hgnuZEjvpgA,34831
214
216
  khoj/interface/compiled/_next/static/chunks/app/chat/layout-ad4d1792ab1a4108.js,sha256=g815zvSZenVssWcOYjyqAOPDjTCa359nqspXeIsXQ5A,180
215
- khoj/interface/compiled/_next/static/chunks/app/chat/page-922f9300d560eb57.js,sha256=IIucyMwc0PYppbRusIMWLoXsPfjbLVG4IHAWNjXTByQ,28542
217
+ khoj/interface/compiled/_next/static/chunks/app/chat/page-6d3c70ba02f93a3b.js,sha256=82Dwcs0ZhlTYvER3cXpof83dYsC46nOunNKYIZ9_8rQ,28546
216
218
  khoj/interface/compiled/_next/static/chunks/app/search/layout-4505b79deb734a30.js,sha256=HPQfR8XLd1MObIR-vRu0kAWYesDP3yGGTA7jyORnrX4,180
217
219
  khoj/interface/compiled/_next/static/chunks/app/search/page-8973da2f4c076fe1.js,sha256=fD2_a9jptevkZ7Jda0FUp5kTINLef8NXqojbD3cCmJY,32714
218
220
  khoj/interface/compiled/_next/static/chunks/app/settings/layout-8a22f370d3eaeed3.js,sha256=dIfmM5C_Al-Zh_uqaJmniSxjXbu3LqPzrEw4SQ7vs0I,6132
219
221
  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-6fb51c5c80f8ec67.js,sha256=MRWVUV6hiulN_DJo7uyZvW0HaMGGqoq6fdGK_jt4kJE,180
222
+ khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-e8e5db7830bf3f47.js,sha256=rcoit2AQboqPwZMTVlVhz1AbyHRJOs-xNMTdYonejCU,180
221
223
  khoj/interface/compiled/_next/static/chunks/app/share/chat/page-442bbe50b75beda4.js,sha256=rb1wcH3i0Nt4ziMaCd50czU6dCQbwygYngkBZZ7V7JU,5557
222
224
  khoj/interface/compiled/_next/static/chunks/pages/_app-3c9ca398d360b709.js,sha256=UqtikLsCsOWtDUJOW6Tuk9P-bV1V3MhYd3ghrQuEmfs,286
223
225
  khoj/interface/compiled/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js,sha256=w_It3VzKT8O1M3CrJ_hZHsaU7M7dq3EAaVG8KvJ-fhU,253
@@ -229,8 +231,6 @@ khoj/interface/compiled/_next/static/css/9c223d337a984468.css,sha256=F5o-qiwJl16
229
231
  khoj/interface/compiled/_next/static/css/e4eb883b5265d372.css,sha256=6LaW-lQ_ZpgOJNWYwU1Q1egXZ1aqJDEuRj66oRCIU_E,17748
230
232
  khoj/interface/compiled/_next/static/css/ea5485b3f3859a5a.css,sha256=tn6qi2xSLTWhtzDUE8UlC8iipH9QGV6A9oGj1ap-Sk4,1659
231
233
  khoj/interface/compiled/_next/static/css/f29752d6e1be7624.css,sha256=mLPRnYpBFaVhTMJ3CFou5_lrwLJs2mhBlAjNY2lrRYs,6354
232
- khoj/interface/compiled/_next/static/gqVxQWvYNrAEdTnRw5akR/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
233
- khoj/interface/compiled/_next/static/gqVxQWvYNrAEdTnRw5akR/_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=Fj2MeT6jb5GCReAfB3XC2wdSjRwPhK57XsFnxEGT-vA,16224
312
- khoj/interface/compiled/agents/index.txt,sha256=kP5jJUvFDmUIDYj-0RrbZebFJcwOrJdXbkaNzP9HdoA,7220
311
+ khoj/interface/compiled/agents/index.html,sha256=WBaUDh_H2ASaNBgLIpaF15oBtzj2_m3rveYJ_YdgBvc,16224
312
+ khoj/interface/compiled/agents/index.txt,sha256=1EwR6PC8vtF-S8KF4EcuB_P9JuIwZtJnQ3SjbG4gXGU,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=Ucupp--TosGZfdSpVYm6jQhd05a16C948Sr0S1v5k3s,54094
328
- khoj/interface/compiled/automations/index.txt,sha256=o60am49RS16xdfALnafAu3H5l9jAwjpRptVlE8hMfCI,7449
329
- khoj/interface/compiled/chat/index.html,sha256=6L13IfbqFI5BTpmF2ZOtWxoHVp_wmNY6ANRfEcktFqk,53532
330
- khoj/interface/compiled/chat/index.txt,sha256=hOyQB2glIq2NwbLVIjxHijdl-cq0r3qASwcoVX8hnjI,7991
331
- khoj/interface/compiled/search/index.html,sha256=ZHeTobx0Wku1tbgVh7X_vr2zQHRajW_LDSO8wz5g5VQ,55304
332
- khoj/interface/compiled/search/index.txt,sha256=sNGSyMv3c2WiqFNTBRDt1hhc9rJIINjg_Iz0JadTFD4,6567
333
- khoj/interface/compiled/settings/index.html,sha256=KnpDwwf_sle1FoLUG5ydlHdZ3zTkj_8-EpF-LzpP-AM,52743
334
- khoj/interface/compiled/settings/index.txt,sha256=taYCGUklljpskk3U3ehFD371fJBql2krVbNEfz2xKns,7703
335
- khoj/interface/compiled/share/chat/index.html,sha256=z_Q0j0NpMxAJ9irMkR2ImMii3FYgTaM_VbP91izjgbw,53492
336
- khoj/interface/compiled/share/chat/index.txt,sha256=MiUNN2wn7DTMBOpk3IgzbvIhfUukdvRpztFv7ssvWOc,8187
327
+ khoj/interface/compiled/automations/index.html,sha256=YTcG55ruvPyZ4xg3DdgMIB1l6RLOkP0qKjo_wCV_suQ,54094
328
+ khoj/interface/compiled/automations/index.txt,sha256=2tqU6SRa7Kq6o_jC7CwxIryF1gR3yKKC7eR34oK03qk,7449
329
+ khoj/interface/compiled/chat/index.html,sha256=cNttMQKNgAXChylDCZZv0qMfc9auJKJtrWztIP_nd6A,53532
330
+ khoj/interface/compiled/chat/index.txt,sha256=P2zp0PDrRz9cWMcQXLW4g3CLDCSdlIbNhTTetMxVsko,7991
331
+ khoj/interface/compiled/search/index.html,sha256=cWHjA9LmUA6pflXd1aH_IQPDK_rEuETXgGZ7U_krFMQ,55304
332
+ khoj/interface/compiled/search/index.txt,sha256=NWYHRZQ7gvy9USj_MNZIC-qiz42GwG1rNgvEuS5bRHo,6567
333
+ khoj/interface/compiled/settings/index.html,sha256=rkTlXovpB-OjXU_rt0ENonIo1BxlXfVD-e23vxNWZsk,52743
334
+ khoj/interface/compiled/settings/index.txt,sha256=ro5Bnoxp0JNrVdo1u0BZVVWBChAA7h66Vhq24C7Klr0,7703
335
+ khoj/interface/compiled/share/chat/index.html,sha256=XoGKvSpJ6JCvUDl-U3YIiFz5SGv-M0qMZuA0jAZBSx0,53492
336
+ khoj/interface/compiled/share/chat/index.txt,sha256=QkoJIVCHA5PLqhLbyRhxdjtcSJ-64vRAtVjweWYsu5Q,8187
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
@@ -410,16 +410,16 @@ 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=HyODnwImte4jJ_H42ifMmChczBVk6m27zQ-gNO90l14,53634
413
+ khoj/routers/api_chat.py,sha256=whMgXkoPglwjpBiAt5OvMn2PiKCZ1fJCBRrVNRTYryc,55545
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=Bz9qMJHCutmmBrtrYFe7B1KYUXVHDH1Y024Qyrj9GC4,99201
420
+ khoj/routers/helpers.py,sha256=BjnZZV29Foc-i6EMgAZBx5mtpBEUXwcGEDXWfn-Kp2U,96493
421
421
  khoj/routers/notion.py,sha256=g53xyYFmjr2JnuIrTW2vytbfkiK_UkoRTxqnnLSmD5o,2802
422
- khoj/routers/research.py,sha256=NXOkwvO4Yn4k1fIfkicklToW4JqfCloJspNgQ3xO9Dg,18702
422
+ khoj/routers/research.py,sha256=SNxBM-6kWqixWyFlzHvZYHcHVHk_FTi_MQYipX_SaBw,19001
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
@@ -433,7 +433,7 @@ khoj/search_type/text_search.py,sha256=PZzJVCXpeBM795SIqiAKXAxgnCp1NIRiVikm040r1
433
433
  khoj/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
434
434
  khoj/utils/cli.py,sha256=fI1XQYMtJzLGOKQZQ5XxFOrC8sGjK3Alnteg5U62rWI,3882
435
435
  khoj/utils/config.py,sha256=aiOkH0je8A30DAGYTHMRePrgJonFv_i07_7CdhhhcdA,1805
436
- khoj/utils/constants.py,sha256=o1rf10pwHFyhaVSiyKcf5SMTn_Z9PUtAvUa2qlZDLRE,3536
436
+ khoj/utils/constants.py,sha256=QbIAaAl_RgE7PSryVvdaWb4hBaCAhskEG2o_Agrzz34,3556
437
437
  khoj/utils/fs_syncer.py,sha256=5nqwAZqRk3Nwhkwd8y4IomTPZQmW32GwAqyMzal5KyY,9996
438
438
  khoj/utils/helpers.py,sha256=D_mxXuXqwumEGFpjj1_B5fTz25rjbOPLCMFnzAkYots,29719
439
439
  khoj/utils/initialization.py,sha256=R-bM8D0QbY8g2R5o-8DsfRAnUPHIu3crPWNdg5wkaCs,15022
@@ -442,8 +442,8 @@ 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.41.1.dev13.dist-info/METADATA,sha256=NS_ve9RJaYGtM34yrHxSaK7P5a99a63U_GJ1Lstkj0k,8633
446
- khoj-1.41.1.dev13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
447
- khoj-1.41.1.dev13.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
448
- khoj-1.41.1.dev13.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
449
- khoj-1.41.1.dev13.dist-info/RECORD,,
445
+ khoj-1.41.1.dev17.dist-info/METADATA,sha256=MBqXybnOo_8cOfC2PZQK8slHsFGzt4Rr5vVBzaA8iyY,8633
446
+ khoj-1.41.1.dev17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
447
+ khoj-1.41.1.dev17.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
448
+ khoj-1.41.1.dev17.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
449
+ khoj-1.41.1.dev17.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8459,7138,244,3317],{63521:function(){}},function(n){n.O(0,[2971,2117,1744],function(){return n(n.s=63521)}),_N_E=n.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7138,8459,244,3317],{63521:function(){}},function(n){n.O(0,[2971,2117,1744],function(){return n(n.s=63521)}),_N_E=n.O()}]);