khoj 1.38.1.dev3__py3-none-any.whl → 1.38.1.dev9__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 (40) hide show
  1. khoj/interface/compiled/404/index.html +2 -2
  2. khoj/interface/compiled/_next/static/chunks/app/agents/{layout-47a59a404205b142.js → layout-5961c3717e1d8813.js} +1 -1
  3. khoj/interface/compiled/_next/static/chunks/app/agents/{page-df5446aa4fb82e1a.js → page-0d31f76257d6ec11.js} +1 -1
  4. khoj/interface/compiled/_next/static/chunks/app/automations/{page-0a44416f9183aec0.js → page-c6180af69fc9c766.js} +1 -1
  5. khoj/interface/compiled/_next/static/chunks/app/chat/{layout-904fbbb3974588da.js → layout-3e25af7224d678a0.js} +1 -1
  6. khoj/interface/compiled/_next/static/chunks/app/chat/{page-d273748c128b0103.js → page-926ee054e844236a.js} +1 -1
  7. khoj/interface/compiled/_next/static/chunks/app/{page-aad371f66ac52191.js → page-df51e61295c4a9b5.js} +1 -1
  8. khoj/interface/compiled/_next/static/chunks/app/search/{layout-d7f7528ff387fba5.js → layout-9ccd090dcc2aa58a.js} +1 -1
  9. khoj/interface/compiled/_next/static/chunks/app/search/{page-1df7b236b30620f7.js → page-098017fa7f6ba0bf.js} +1 -1
  10. khoj/interface/compiled/_next/static/chunks/app/settings/{page-3473bab693ef81b2.js → page-1ff027f4e0a5c468.js} +1 -1
  11. khoj/interface/compiled/_next/static/chunks/app/share/chat/{layout-d090bd23befd0207.js → layout-9cc742afcea0b421.js} +1 -1
  12. khoj/interface/compiled/_next/static/chunks/app/share/chat/{page-33d056fbcb8ec85d.js → page-61f5aa755a5d5612.js} +1 -1
  13. khoj/interface/compiled/_next/static/chunks/{webpack-b5babbc0c315ce8d.js → webpack-c6bde5961098facd.js} +1 -1
  14. khoj/interface/compiled/_next/static/css/{fca983d49c3dd1a3.css → 0db53bacf81896f5.css} +1 -1
  15. khoj/interface/compiled/_next/static/css/bb7ea98028b368f3.css +1 -0
  16. khoj/interface/compiled/_next/static/css/ee66643a6a5bf71c.css +1 -0
  17. khoj/interface/compiled/agents/index.html +2 -2
  18. khoj/interface/compiled/agents/index.txt +3 -3
  19. khoj/interface/compiled/automations/index.html +2 -2
  20. khoj/interface/compiled/automations/index.txt +2 -2
  21. khoj/interface/compiled/chat/index.html +2 -2
  22. khoj/interface/compiled/chat/index.txt +3 -3
  23. khoj/interface/compiled/index.html +2 -2
  24. khoj/interface/compiled/index.txt +2 -2
  25. khoj/interface/compiled/search/index.html +2 -2
  26. khoj/interface/compiled/search/index.txt +3 -3
  27. khoj/interface/compiled/settings/index.html +2 -2
  28. khoj/interface/compiled/settings/index.txt +2 -2
  29. khoj/interface/compiled/share/chat/index.html +2 -2
  30. khoj/interface/compiled/share/chat/index.txt +3 -3
  31. khoj/processor/tools/online_search.py +110 -25
  32. {khoj-1.38.1.dev3.dist-info → khoj-1.38.1.dev9.dist-info}/METADATA +1 -1
  33. {khoj-1.38.1.dev3.dist-info → khoj-1.38.1.dev9.dist-info}/RECORD +38 -38
  34. khoj/interface/compiled/_next/static/css/37a73b87f02df402.css +0 -1
  35. khoj/interface/compiled/_next/static/css/f29752d6e1be7624.css +0 -1
  36. /khoj/interface/compiled/_next/static/{YvH2derieknk8OvRg-Pc- → J5RtRciYC8sK6ywli27r1}/_buildManifest.js +0 -0
  37. /khoj/interface/compiled/_next/static/{YvH2derieknk8OvRg-Pc- → J5RtRciYC8sK6ywli27r1}/_ssgManifest.js +0 -0
  38. {khoj-1.38.1.dev3.dist-info → khoj-1.38.1.dev9.dist-info}/WHEEL +0 -0
  39. {khoj-1.38.1.dev3.dist-info → khoj-1.38.1.dev9.dist-info}/entry_points.txt +0 -0
  40. {khoj-1.38.1.dev3.dist-info → khoj-1.38.1.dev9.dist-info}/licenses/LICENSE +0 -0
@@ -33,11 +33,13 @@ logger = logging.getLogger(__name__)
33
33
  GOOGLE_SEARCH_API_KEY = os.getenv("GOOGLE_SEARCH_API_KEY")
34
34
  GOOGLE_SEARCH_ENGINE_ID = os.getenv("GOOGLE_SEARCH_ENGINE_ID")
35
35
  SERPER_DEV_API_KEY = os.getenv("SERPER_DEV_API_KEY")
36
+ AUTO_READ_WEBPAGE = is_env_var_true("AUTO_READ_WEBPAGE")
36
37
  SERPER_DEV_URL = "https://google.serper.dev/search"
37
38
 
38
39
  JINA_SEARCH_API_URL = "https://s.jina.ai/"
39
40
  JINA_API_KEY = os.getenv("JINA_API_KEY")
40
41
 
42
+ FIRECRAWL_API_KEY = os.getenv("FIRECRAWL_API_KEY")
41
43
  FIRECRAWL_USE_LLM_EXTRACT = is_env_var_true("FIRECRAWL_USE_LLM_EXTRACT")
42
44
 
43
45
  OLOSTEP_QUERY_PARAMS = {
@@ -95,29 +97,44 @@ async def search_online(
95
97
  yield response_dict
96
98
  return
97
99
 
100
+ search_engines = []
101
+ if SERPER_DEV_API_KEY:
102
+ search_engine = "Serper"
103
+ search_engines.append((search_engine, search_with_serper))
98
104
  if GOOGLE_SEARCH_API_KEY and GOOGLE_SEARCH_ENGINE_ID:
99
105
  search_engine = "Google"
100
- search_func = search_with_google
101
- elif SERPER_DEV_API_KEY:
102
- search_engine = "Serper"
103
- search_func = search_with_serper
104
- elif JINA_API_KEY:
106
+ search_engines.append((search_engine, search_with_google))
107
+ if FIRECRAWL_API_KEY:
108
+ search_engine = "Firecrawl"
109
+ search_engines.append((search_engine, search_with_firecrawl))
110
+ if JINA_API_KEY:
105
111
  search_engine = "Jina"
106
- search_func = search_with_jina
107
- else:
108
- search_engine = "Searxng"
109
- search_func = search_with_searxng
112
+ search_engines.append((search_engine, search_with_jina))
113
+ search_engine = "Searxng"
114
+ search_engines.append((search_engine, search_with_searxng))
110
115
 
111
- logger.info(f"🌐 Searching the Internet with {search_engine} for {subqueries}")
116
+ logger.info(f"🌐 Searching the Internet for {subqueries}")
112
117
  if send_status_func:
113
118
  subqueries_str = "\n- " + "\n- ".join(subqueries)
114
119
  async for event in send_status_func(f"**Searching the Internet for**: {subqueries_str}"):
115
120
  yield {ChatEvent.STATUS: event}
116
121
 
117
- with timer(f"Internet searches for {subqueries} took", logger):
118
- search_tasks = [search_func(subquery, location) for subquery in subqueries]
119
- search_results = await asyncio.gather(*search_tasks)
120
- response_dict = {subquery: search_result for subquery, search_result in search_results}
122
+ response_dict = {}
123
+ for search_engine, search_func in search_engines:
124
+ with timer(f"Internet searches with {search_engine} for {subqueries} took", logger):
125
+ try:
126
+ search_tasks = [search_func(subquery, location) for subquery in subqueries]
127
+ search_results = await asyncio.gather(*search_tasks)
128
+ response_dict = {subquery: search_result for subquery, search_result in search_results if search_result}
129
+ if not is_none_or_empty(response_dict):
130
+ break
131
+ except Exception as e:
132
+ logger.error(f"Error searching with {search_engine}: {e}")
133
+ response_dict = {}
134
+
135
+ if not AUTO_READ_WEBPAGE:
136
+ yield response_dict
137
+ return
121
138
 
122
139
  # Gather distinct web pages from organic results for subqueries without an instant answer.
123
140
  webpages: Dict[str, Dict] = {}
@@ -159,6 +176,69 @@ async def search_online(
159
176
  yield response_dict
160
177
 
161
178
 
179
+ async def search_with_firecrawl(query: str, location: LocationData) -> Tuple[str, Dict[str, List[Dict]]]:
180
+ """
181
+ Search using Firecrawl API.
182
+
183
+ Args:
184
+ query: The search query string
185
+ location: Location data for geolocation-based search
186
+
187
+ Returns:
188
+ Tuple containing the original query and a dictionary of search results
189
+ """
190
+ # Set up API endpoint and headers
191
+ firecrawl_api_url = "https://api.firecrawl.dev/v1/search"
192
+ headers = {"Content-Type": "application/json", "Authorization": f"Bearer {FIRECRAWL_API_KEY}"}
193
+
194
+ # Prepare request payload
195
+ country_code = location.country_code.lower() if location and location.country_code else "us"
196
+ payload = {
197
+ "query": query,
198
+ "limit": 10, # Maximum number of results
199
+ "country": country_code,
200
+ "lang": "en",
201
+ "timeout": 10000,
202
+ "scrapeOptions": {},
203
+ }
204
+
205
+ # Add location parameter if available
206
+ if location and location.city:
207
+ payload["location"] = f"{location.city}, {location.region}, {location.country}"
208
+
209
+ async with aiohttp.ClientSession() as session:
210
+ try:
211
+ async with session.post(firecrawl_api_url, headers=headers, json=payload) as response:
212
+ if response.status != 200:
213
+ error_text = await response.text()
214
+ logger.error(f"Firecrawl search failed: {error_text}")
215
+ return query, {}
216
+
217
+ response_json = await response.json()
218
+
219
+ if not response_json.get("success", False):
220
+ logger.error(f"Firecrawl search failed: {response_json.get('warning', 'Unknown error')}")
221
+ return query, {}
222
+
223
+ # Transform Firecrawl response to match the expected format
224
+ organic_results = []
225
+ for item in response_json.get("data", []):
226
+ organic_results.append(
227
+ {
228
+ "title": item["title"],
229
+ "link": item["url"],
230
+ "snippet": item["description"],
231
+ "content": item.get("markdown", None),
232
+ }
233
+ )
234
+
235
+ return query, {"organic": organic_results}
236
+
237
+ except Exception as e:
238
+ logger.error(f"Error searching with Firecrawl: {str(e)}")
239
+ return query, {}
240
+
241
+
162
242
  async def search_with_searxng(query: str, location: LocationData) -> Tuple[str, Dict[str, List[Dict]]]:
163
243
  """Search using local SearXNG instance."""
164
244
  # Use environment variable or default to localhost
@@ -251,9 +331,16 @@ async def search_with_google(query: str, location: LocationData) -> Tuple[str, D
251
331
 
252
332
 
253
333
  async def search_with_serper(query: str, location: LocationData) -> Tuple[str, Dict[str, List[Dict]]]:
334
+ headers = {"X-API-KEY": SERPER_DEV_API_KEY, "Content-Type": "application/json"}
254
335
  country_code = location.country_code.lower() if location and location.country_code else "us"
336
+ max_query_length = 2048
337
+ if len(query) > max_query_length:
338
+ logger.warning(
339
+ f"Truncate online query. Query length {len(query)} exceeds {max_query_length} supported by Serper. Query: {query}"
340
+ )
341
+ query = query[:max_query_length]
342
+
255
343
  payload = json.dumps({"q": query, "gl": country_code})
256
- headers = {"X-API-KEY": SERPER_DEV_API_KEY, "Content-Type": "application/json"}
257
344
 
258
345
  async with aiohttp.ClientSession() as session:
259
346
  async with session.post(SERPER_DEV_URL, headers=headers, data=payload) as response:
@@ -398,16 +485,16 @@ async def read_webpage_with_olostep(web_url: str, api_key: str, api_url: str) ->
398
485
 
399
486
 
400
487
  async def read_webpage_with_jina(web_url: str, api_key: str, api_url: str) -> str:
401
- jina_reader_api_url = f"{api_url}/{web_url}"
402
- headers = {"Accept": "application/json", "X-Timeout": "30"}
488
+ headers = {"Accept": "application/json", "X-Timeout": "30", "X-With-Generated-Alt": "true"}
489
+ data = {"url": web_url}
403
490
  if api_key:
404
491
  headers["Authorization"] = f"Bearer {api_key}"
405
492
 
406
493
  async with aiohttp.ClientSession() as session:
407
- async with session.get(jina_reader_api_url, headers=headers) as response:
494
+ async with session.post(api_url, json=data, headers=headers) as response:
408
495
  response.raise_for_status()
409
- response_json = await response.json()
410
- return response_json["data"]["content"]
496
+ content = await response.text()
497
+ return content
411
498
 
412
499
 
413
500
  async def read_webpage_with_firecrawl(web_url: str, api_key: str, api_url: str) -> str:
@@ -459,10 +546,6 @@ Collate only relevant information from the website to answer the target query an
459
546
 
460
547
 
461
548
  async def search_with_jina(query: str, location: LocationData) -> Tuple[str, Dict[str, List[Dict]]]:
462
- encoded_query = urllib.parse.quote(query)
463
- jina_search_api_url = f"{JINA_SEARCH_API_URL}/{encoded_query}"
464
- headers = {"Accept": "application/json"}
465
-
466
549
  # First check for jina scraper configuration in database
467
550
  default_jina_scraper = (
468
551
  await ServerChatSettings.objects.filter()
@@ -477,13 +560,15 @@ async def search_with_jina(query: str, location: LocationData) -> Tuple[str, Dic
477
560
  jina_scraper = await WebScraper.objects.filter(type=WebScraper.WebScraperType.JINA).afirst()
478
561
 
479
562
  # Get API key from DB scraper config or environment variable
563
+ data = {"q": query}
564
+ headers = {"Accept": "application/json", "X-Respond-With": "no-content"}
480
565
  api_key = jina_scraper.api_key if jina_scraper and jina_scraper.api_key else JINA_API_KEY
481
566
 
482
567
  if api_key:
483
568
  headers["Authorization"] = f"Bearer {api_key}"
484
569
 
485
570
  async with aiohttp.ClientSession() as session:
486
- async with session.get(jina_search_api_url, headers=headers) as response:
571
+ async with session.post(JINA_SEARCH_API_URL, json=data, headers=headers) as response:
487
572
  if response.status != 200:
488
573
  error_text = await response.text()
489
574
  logger.error(f"Jina search failed: {error_text}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: khoj
3
- Version: 1.38.1.dev3
3
+ Version: 1.38.1.dev9
4
4
  Summary: Your Second Brain
5
5
  Project-URL: Homepage, https://khoj.dev
6
6
  Project-URL: Documentation, https://docs.khoj.dev
@@ -127,17 +127,17 @@ khoj/interface/compiled/chat.svg,sha256=l2JoYRRgk201adTTdvJ-buKUrc0WGfsudix5xEvt
127
127
  khoj/interface/compiled/close.svg,sha256=hQ2iFLkNzHk0_iyTrSbwnWAeXYlgA-c2Eof2Iqh76n4,417
128
128
  khoj/interface/compiled/copy-button-success.svg,sha256=byqWAYD3Pn9IOXRjOKudJ-TJbP2UESbQGvtLWazNGjY,829
129
129
  khoj/interface/compiled/copy-button.svg,sha256=05bKM2eRxksfBlAPT7yMaoNJEk85bZCxQg67EVrPeHo,669
130
- khoj/interface/compiled/index.html,sha256=vcHzn3NA8JfES1c6IlnkIpOCJKm5U21s3wtMvp5lyTM,53009
131
- khoj/interface/compiled/index.txt,sha256=RLgZFmrm7jV86-MMk3sPY03iQ35ub9JpCdlgqycKRdY,7584
130
+ khoj/interface/compiled/index.html,sha256=2ApJrMTXtiz4Hn2i03O0QmMHVj4PKfl72_7L4z3BVX0,53319
131
+ khoj/interface/compiled/index.txt,sha256=rLYjeCu_YAMVcZxqNtaCejX-yT7DEphpp5uLxMuNnR8,7717
132
132
  khoj/interface/compiled/khoj.webmanifest,sha256=9wOK2BMS6xH5NKd2eaUgTLg9WepIxB2K2U33KU89LD8,2543
133
133
  khoj/interface/compiled/logo.svg,sha256=_QCKVYM4WT2Qhcf7aVFImjq_s5CwjynGXYAOgI7yf8w,8059
134
134
  khoj/interface/compiled/send.svg,sha256=VdavOWkVddcwcGcld6pdfmwfz7S91M-9O28cfeiKJkM,635
135
135
  khoj/interface/compiled/share.svg,sha256=91lwo75PvMDrgocuZQab6EQ62CxRbubh9Bhw7CWMKbg,1221
136
136
  khoj/interface/compiled/thumbs-down.svg,sha256=JGNl-DwoRmH2XFMPWwFFklmoYtKxaQbkLE3nuYKe8ZY,1019
137
137
  khoj/interface/compiled/thumbs-up.svg,sha256=yS1wxTRtiztkN-6nZciLoYQUB_KTYNPV8xFRwH2TQFw,1036
138
- khoj/interface/compiled/404/index.html,sha256=OaVWToGBIO01gArIXs5tlFCPAuo1UQCPh6ApdHDzLZM,17063
139
- khoj/interface/compiled/_next/static/YvH2derieknk8OvRg-Pc-/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
140
- khoj/interface/compiled/_next/static/YvH2derieknk8OvRg-Pc-/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
138
+ khoj/interface/compiled/404/index.html,sha256=2GJ1AnnESIMyL7cZrWrhsyhPMXGuiNubGApEiMAycYU,17063
139
+ khoj/interface/compiled/_next/static/J5RtRciYC8sK6ywli27r1/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
140
+ khoj/interface/compiled/_next/static/J5RtRciYC8sK6ywli27r1/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
141
141
  khoj/interface/compiled/_next/static/chunks/1160-8e7e42e77145b712.js,sha256=-QFyQbKtlBEXOxl_xK246z8WERbIc88SU1RehiTjcaI,317731
142
142
  khoj/interface/compiled/_next/static/chunks/1243.ea2826fb35adb15a.js,sha256=Y6ceAwyTH4HSGDvBRoBB-RVXRCzGGr8NSPcspYF5OM8,182
143
143
  khoj/interface/compiled/_next/static/chunks/133.392ae90c3b2a67f2.js,sha256=IK-mb9ZlF6uJUdU8AuXsppc99tFL8svJvZtKNZGNtcY,411
@@ -203,32 +203,32 @@ khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js,sha256
203
203
  khoj/interface/compiled/_next/static/chunks/main-876327ac335776ab.js,sha256=JkQUmA9vh1B4VVGF5dbZ8Kun0AnIVUbZr5IBK90T4Zs,111290
204
204
  khoj/interface/compiled/_next/static/chunks/main-app-de1f09df97a3cfc7.js,sha256=bqnztujKItXfFBzQlaBmDZyfJpQt_M93CXOuchJfpD0,471
205
205
  khoj/interface/compiled/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
206
- khoj/interface/compiled/_next/static/chunks/webpack-b5babbc0c315ce8d.js,sha256=87l9PgALLva6jrXqwFLL2J9jG8RxNPn_EWJnXBKjG5c,4891
206
+ khoj/interface/compiled/_next/static/chunks/webpack-c6bde5961098facd.js,sha256=cnc91CGfuR_tfaK_H83C6r2Fp4WZEfCBaruUKRkMRDM,4891
207
207
  khoj/interface/compiled/_next/static/chunks/app/layout-bd8210ff1de491d7.js,sha256=8gTcL8-sV5oa7vJRTxlgOpZvhNrsKomsu75DpVpqfE0,3983
208
- khoj/interface/compiled/_next/static/chunks/app/page-aad371f66ac52191.js,sha256=WYybaSmeeef9dlJmJZNPM0FYBKrtKu0cNT8ZO9sWYnc,31218
208
+ khoj/interface/compiled/_next/static/chunks/app/page-df51e61295c4a9b5.js,sha256=Jtm6XRwe69g_JpU_0cs4VCFWhPWhUagFKfBGZX0I4bo,31223
209
209
  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-47a59a404205b142.js,sha256=JlTz_lpdcTWxbXJ5STs1iOFOXBwSwkWyrUkczyUr0mI,3455
211
- khoj/interface/compiled/_next/static/chunks/app/agents/page-df5446aa4fb82e1a.js,sha256=I_L7ZSMnaB2S_8G4GqkbnjSZH8IPvZV6j9b-3Afr8e8,18314
210
+ khoj/interface/compiled/_next/static/chunks/app/agents/layout-5961c3717e1d8813.js,sha256=aZPuT0zAh0R0UEEYnuECRlf7jwbRPWGNDOalN9hOYZ8,3455
211
+ khoj/interface/compiled/_next/static/chunks/app/agents/page-0d31f76257d6ec11.js,sha256=oWl_zLRFvxZp60jGau8Vi6dvr83y68yyBtEBRjEaF58,18319
212
212
  khoj/interface/compiled/_next/static/chunks/app/automations/layout-7f5c33a70e46b3af.js,sha256=s2wHeQ-ai9rKyU9EjOGY1Yo51L4ZEkjLtML85BqN3Zc,5143
213
- khoj/interface/compiled/_next/static/chunks/app/automations/page-0a44416f9183aec0.js,sha256=kNkQ123aqeoAe5yTaHWdSUMGaK_JJYHYASI3tYTiNbI,34831
214
- khoj/interface/compiled/_next/static/chunks/app/chat/layout-904fbbb3974588da.js,sha256=QNx6UorqNpWPXrNjy7bk0G0WECLHuQhhTiY6ud-p950,3455
215
- khoj/interface/compiled/_next/static/chunks/app/chat/page-d273748c128b0103.js,sha256=dmvRZosKH-SUZ4K8yVQjpzFiVtS3COnSa4oWqWmh76o,28289
216
- khoj/interface/compiled/_next/static/chunks/app/search/layout-d7f7528ff387fba5.js,sha256=gqFAh3XbMePX_EKoABr5uOnxwNLGa-cl5G84h0cGcnM,3455
217
- khoj/interface/compiled/_next/static/chunks/app/search/page-1df7b236b30620f7.js,sha256=pMegRbrl32l9jxn1EvT9u-o877tSZ9jzOq7keoNxeDQ,32714
213
+ khoj/interface/compiled/_next/static/chunks/app/automations/page-c6180af69fc9c766.js,sha256=5UqvUzxfTu8XqS1o9enSFi3jFZ6OmpCIW-Vzvhbb8Pc,34836
214
+ khoj/interface/compiled/_next/static/chunks/app/chat/layout-3e25af7224d678a0.js,sha256=GdLRvoYSJiXx3limcAoEnq5fOiuDey_7d23CZ9b6c1A,3455
215
+ khoj/interface/compiled/_next/static/chunks/app/chat/page-926ee054e844236a.js,sha256=YgxOe-lQsomVqIflMsdH6ciSq1r1mvZQGkg3PeBKTlM,28294
216
+ khoj/interface/compiled/_next/static/chunks/app/search/layout-9ccd090dcc2aa58a.js,sha256=YpMcmZ-rIm4KgkDJr9jncqcoVZodRdiiTNx1iBdN51w,3455
217
+ khoj/interface/compiled/_next/static/chunks/app/search/page-098017fa7f6ba0bf.js,sha256=uP1wUboLrSP3hT2XxW98YvLjmcJnBV26vv0SBkV9dmk,32714
218
218
  khoj/interface/compiled/_next/static/chunks/app/settings/layout-a7262b2bb8c7ae64.js,sha256=lvyfWVLYyJsxhQvh5UWUVUBM71nmq9DdsmmnVfFXCgk,9401
219
- khoj/interface/compiled/_next/static/chunks/app/settings/page-3473bab693ef81b2.js,sha256=NJ-y_h09m915fni0dLftBeDlzkWKP50XbtXbFU-tJZM,30570
220
- khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-d090bd23befd0207.js,sha256=YhBDJH985TnoOYRDbSi79kr7TovwVi6oxYa8JexlsBk,3455
221
- khoj/interface/compiled/_next/static/chunks/app/share/chat/page-33d056fbcb8ec85d.js,sha256=sIZLtgk12BydOeBKLY7MkfLPJgQ_wILvcjln3B79JIg,5563
219
+ khoj/interface/compiled/_next/static/chunks/app/settings/page-1ff027f4e0a5c468.js,sha256=srmYMIrDRYeZ9Md98V-WHuNUoVQMETpD4zt5OEEdpAU,30575
220
+ khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-9cc742afcea0b421.js,sha256=Xuq31gs_tCtfympW0yXKmxvY9rJ-dLv7LoS2NolWuY8,3455
221
+ khoj/interface/compiled/_next/static/chunks/app/share/chat/page-61f5aa755a5d5612.js,sha256=qu9ec8I5uf5cdmgW_uxZvYIg54E4gDGTCdhSbCaxG0s,5568
222
222
  khoj/interface/compiled/_next/static/chunks/pages/_app-3c9ca398d360b709.js,sha256=UqtikLsCsOWtDUJOW6Tuk9P-bV1V3MhYd3ghrQuEmfs,286
223
223
  khoj/interface/compiled/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js,sha256=w_It3VzKT8O1M3CrJ_hZHsaU7M7dq3EAaVG8KvJ-fhU,253
224
+ khoj/interface/compiled/_next/static/css/0db53bacf81896f5.css,sha256=7Kq40hXKsqTnQEz4otvA49gEDms7a0XAFCB0rwrnXQo,30547
224
225
  khoj/interface/compiled/_next/static/css/0ddca54f48cc6850.css,sha256=3ewc3-WlnLVSDnoVwktQjsS7OS1F8GMBKVQM6Anexx0,3075770
225
- khoj/interface/compiled/_next/static/css/37a73b87f02df402.css,sha256=hp0vlekKu0K2eITR5YIqFmLHQPqV3JETFnRd_-Uh0mk,165
226
226
  khoj/interface/compiled/_next/static/css/76c658ee459140a9.css,sha256=7tI24VB66ZUsAPUxRdQhboopun0AXLUnF64uv9RkC08,1833
227
227
  khoj/interface/compiled/_next/static/css/7889a30fe9c83846.css,sha256=IUkZhkx4GpYOIhN-EJw9T1DqGMO3Wa3mNpUwaOBuZoY,7204
228
+ khoj/interface/compiled/_next/static/css/bb7ea98028b368f3.css,sha256=PBwues3rUFWl02xEnWqKbRFK59SkQUCqYuV45ZedG4U,3318
228
229
  khoj/interface/compiled/_next/static/css/e4eb883b5265d372.css,sha256=6LaW-lQ_ZpgOJNWYwU1Q1egXZ1aqJDEuRj66oRCIU_E,17748
229
230
  khoj/interface/compiled/_next/static/css/ea5485b3f3859a5a.css,sha256=tn6qi2xSLTWhtzDUE8UlC8iipH9QGV6A9oGj1ap-Sk4,1659
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
231
+ khoj/interface/compiled/_next/static/css/ee66643a6a5bf71c.css,sha256=3JbJLrnwlX_IHdvjmS3l9y3Vgp5_V0XbfFI44ekLh9E,3106
232
232
  khoj/interface/compiled/_next/static/media/1d8a05b60287ae6c-s.p.woff2,sha256=IzKBwB_bpSGvO7C9aRv29Js-jAbZPRDI-D-P4H2P918,14508
233
233
  khoj/interface/compiled/_next/static/media/2aa11a72f7f24b58-s.woff2,sha256=QjuuSKmViymmy-itXLB1UbSARxFNHWuMiPpCrYqClFI,22728
234
234
  khoj/interface/compiled/_next/static/media/383a65b63658737d-s.woff2,sha256=VH1XkI87HdFVhsurH5D5ekEjG_ZORTVBVg6xz7p87C8,16704
@@ -306,8 +306,8 @@ khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp,sha256=M2AW_HLpBn
306
306
  khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp,sha256=BBeRPBZkxY3-aKkMnYv5TSkxmbeMbyUH4VRIPfrWg1E,137406
307
307
  khoj/interface/compiled/_next/static/media/globe.98e105ca.webp,sha256=g3ofb8-W9GM75zIhlvQhaS8I2py9TtrovOKR3_7Jf04,514
308
308
  khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp,sha256=I_N7Yke3IOoS-0CC6XD8o0IUWG8PdPbrHmf6lpgWlZY,1380
309
- khoj/interface/compiled/agents/index.html,sha256=Jxi9NkENrxwVrnpXJRHDRAo9xbWFxyKL37aT5c0rQJM,19256
310
- khoj/interface/compiled/agents/index.txt,sha256=Nzy0GbeIPNZ5x54jw5Z33Aslgn757UXTAsh34LfiIFQ,8706
309
+ khoj/interface/compiled/agents/index.html,sha256=IdMzF3xKmerLdSAzkq2UUiN23BQkW9FWxaR1sxt3soc,19567
310
+ khoj/interface/compiled/agents/index.txt,sha256=uGYi8KDExSY1eUfJcLXa96Zq678tdsS9IKU3eC5MrqA,8839
311
311
  khoj/interface/compiled/assets/icons/khoj_lantern.ico,sha256=eggu-B_v3z1R53EjOFhIqqPnICBGdoaw1xnc0NrzHck,174144
312
312
  khoj/interface/compiled/assets/icons/khoj_lantern.svg,sha256=I_8XP5X84gEOoCRhCRKOQn_GKZrz3SUBXct7WxHvY7c,8767
313
313
  khoj/interface/compiled/assets/icons/khoj_lantern_1200x1200.png,sha256=xDx0bbD-WMflgg8zck9oPIIuTIvywtuED2k7CjSQS4w,66194
@@ -322,16 +322,16 @@ khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png,sha256=i
322
322
  khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png,sha256=Dd4fPwtFl6BWqnHjeb1mCK_ND0hhHsWtx8sNE7EiMuE,406179
323
323
  khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png,sha256=DEDaNRCkfEWUeh3kYZWIQDTVK1a6KKnYdwj5ZWisN_Q,82985
324
324
  khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png,sha256=Ma3blirRmq3X4oYSsDbbT7MDn29rymDrjwmUfA9BMuM,236285
325
- khoj/interface/compiled/automations/index.html,sha256=pHhqZEAc56LSiE0-3c5XyCHdsIflhntEwHllhsHxCtw,55923
326
- khoj/interface/compiled/automations/index.txt,sha256=GFloKn37PniljhZGkypO9f0kbm76z5zB8yXCrSlpO4A,8303
327
- khoj/interface/compiled/chat/index.html,sha256=kBL6ZOpCet55P5OfdtuiEnEPF3O1FKufJv6wDqiKqS0,56251
328
- khoj/interface/compiled/chat/index.txt,sha256=MNA4dR6kWAPcNVkhXndH4Rk0zaMwv71p1Tr6G2a7ll0,9342
329
- khoj/interface/compiled/search/index.html,sha256=easnpi9oWYIfuj1b1soJPWYqMBkQ9uxUi67zLVip2ws,58213
330
- khoj/interface/compiled/search/index.txt,sha256=YdX5VW2cstFeSK2xpf24aveik0_9QpCaOR9wiBY49HI,7990
331
- khoj/interface/compiled/settings/index.html,sha256=NwuXTEZQ2Vr0R7KUFx2FxRVo2ZLhcI0hVHsFIZttD6c,55947
332
- khoj/interface/compiled/settings/index.txt,sha256=McPmNxiLTayjP-cAvs3wDxPSve5gut2_kYTx-VK6fQM,9431
333
- khoj/interface/compiled/share/chat/index.html,sha256=lpuP53pdA5Tb753Zgh-gMKT0-ayrpckqwC4ZmaNPKGY,56843
334
- khoj/interface/compiled/share/chat/index.txt,sha256=i_DxXVncQ2Lg6L-ys8e5T3NKkm8BhOg4szYrl6zT9Vk,9810
325
+ khoj/interface/compiled/automations/index.html,sha256=HMWmDIvgSYeMMnpWl-hyaYzvMnkxumbGk_E0hf8qJ9c,56234
326
+ khoj/interface/compiled/automations/index.txt,sha256=YiP_DfS0EPpfIQktQyyQNoD9XPxaoUWWE5UK_fVUKUk,8436
327
+ khoj/interface/compiled/chat/index.html,sha256=1epRLhenqtcgRNAeqq8DydrYRclZWy2Yr7SHA4antZs,56561
328
+ khoj/interface/compiled/chat/index.txt,sha256=2o54GmWz_jyAFMFoo0WiNLlHE6dIIpXYYyH--tEvt-I,9475
329
+ khoj/interface/compiled/search/index.html,sha256=d2Rn_FPxP_N3v4c1EijcbvFkGuhe4HZhBaE-a1wxrls,58213
330
+ khoj/interface/compiled/search/index.txt,sha256=rGq2MzEHp0oEA2P6VtI4DhDBjhLZhMyQ6Z3DqCw12OI,7990
331
+ khoj/interface/compiled/settings/index.html,sha256=YphTNE7WuNpVaDgBaGkQSZ496WT90BGqSZEMxSRQr70,56257
332
+ khoj/interface/compiled/settings/index.txt,sha256=FEpkSjg-deknIvUt2vzzxtEaSiFesxiFZkiNpRCgH6g,9564
333
+ khoj/interface/compiled/share/chat/index.html,sha256=JYNnZ4mgn8sAYD0cj4LgCrDLTg6UGFfbykBEYeL6Mes,57153
334
+ khoj/interface/compiled/share/chat/index.txt,sha256=eEAYGsreJGUgIRKi7wC5uqupwBhUbAPS8IElcKvk2ck,9943
335
335
  khoj/interface/email/feedback.html,sha256=xksuPFamx4hGWyTTxZKRgX_eiYQQEuv-eK9Xmkt-nwU,1216
336
336
  khoj/interface/email/magic_link.html,sha256=372ESbTPKM9acekuZcOIKOw6kBl-KikFg_L9MOHqJkg,2094
337
337
  khoj/interface/email/task.html,sha256=tY7a0gzVeQ2lSQNu7WyXR_s7VYeWTrxWEj1iHVuoVE4,2813
@@ -403,7 +403,7 @@ khoj/processor/image/generate.py,sha256=FAIIsr8TIHxWxK-INNK4jJOOswBxQFyi_G4tI8NN
403
403
  khoj/processor/speech/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
404
404
  khoj/processor/speech/text_to_speech.py,sha256=Q7sapi5Hv6woXOumtrGqR0t6izZrFBkWXFOGrHM6dJ4,1929
405
405
  khoj/processor/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
406
- khoj/processor/tools/online_search.py,sha256=FZ6uUfzXG9fIKjk2FXQGBG0F7qp7hiaFZVxAa2z--Mg,21294
406
+ khoj/processor/tools/online_search.py,sha256=NkKitJZ5cx4N8Vsnt2pahFWJXoUa5wtcZSMHl_SgrXo,24689
407
407
  khoj/processor/tools/run_code.py,sha256=TuGSp-WYUas0dSK19a96SPfC423F2vvkZDwwPJm67IY,12159
408
408
  khoj/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
409
409
  khoj/routers/api.py,sha256=1sAJN5KvssFph7AcoFSJmQDlveOgyy530E9Bb-rJUTk,29491
@@ -440,8 +440,8 @@ khoj/utils/models.py,sha256=Q5tcC9-z25sCiub048fLnvZ6_IIO1bcPNxt5payekk0,2009
440
440
  khoj/utils/rawconfig.py,sha256=wfZTk-Aifb-_q9Yh-NPfh9LlLTioYG-yBqrasgvo4pc,5045
441
441
  khoj/utils/state.py,sha256=axjZhnby8L3bY-N1VVoWgBH1RpFGK6U3_ZeNo1Kt7hs,1679
442
442
  khoj/utils/yaml.py,sha256=qy1Tkc61rDMesBw_Cyx2vOR6H-Hngcsm5kYfjwQBwkE,1543
443
- khoj-1.38.1.dev3.dist-info/METADATA,sha256=0VRD86vKA2zojKYsfoNxvuNkbwqY97dsxvQEbh658vA,7838
444
- khoj-1.38.1.dev3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
445
- khoj-1.38.1.dev3.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
446
- khoj-1.38.1.dev3.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
447
- khoj-1.38.1.dev3.dist-info/RECORD,,
443
+ khoj-1.38.1.dev9.dist-info/METADATA,sha256=k8U3hl1CvMfZzSpu30NMQJe0eTnimiaNTlj_V5ERFjA,7838
444
+ khoj-1.38.1.dev9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
445
+ khoj-1.38.1.dev9.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
446
+ khoj-1.38.1.dev9.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
447
+ khoj-1.38.1.dev9.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- div.search_searchLayout__fP3m0{display:grid;grid-template-columns:1fr;gap:1rem;height:100%}@media screen and (max-width:768px){div.search_searchLayout__fP3m0{gap:0}}
@@ -1 +0,0 @@
1
- div.agents_titleBar__FzYbY{padding:16px 0;text-align:left}.agents_agentPersonality__o0Ysz p{white-space:inherit;overflow:hidden;height:77px;line-height:1.5}div.agents_agentPersonality__o0Ysz{text-align:left;grid-column:span 3;overflow:hidden}div.agents_pageLayout__gR3S3{max-width:60vw;margin:auto auto 2rem}button.agents_infoButton__NqI7E{border:none;background-color:transparent!important;text-align:left;font-family:inherit;font-size:medium}div.agents_agentList__XVx4A{display:grid;gap:20px;padding-top:30px;margin-right:auto;grid-auto-flow:row;grid-template-columns:1fr 1fr;margin-left:auto}@media only screen and (max-width:768px){div.agents_agentList__XVx4A{width:100%;padding:0;margin-right:auto;margin-left:auto;grid-template-columns:1fr}div.agents_pageLayout__gR3S3{max-width:90vw}}div.chatInputArea_actualInputArea__Ha6cN{display:grid;grid-template-columns:auto 1fr auto auto}.loginPrompt_gsiMaterialButton__8QVFH{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-webkit-appearance:none;background-image:none;border-radius:20px;box-sizing:border-box;color:#1f1f1f;cursor:pointer;font-family:Roboto,arial,sans-serif;font-size:14px;height:40px;letter-spacing:.25px;outline:none;overflow:hidden;padding:0;position:relative;text-align:center;transition:background-color .218s,border-color .218s,box-shadow .218s;vertical-align:middle;white-space:nowrap;width:40px;max-width:400px;min-width:-moz-min-content;min-width:min-content}.loginPrompt_gsiMaterialButton__8QVFH .loginPrompt_gsiMaterialButtonIcon__6TSC5{height:100%;min-width:20px;width:100%;margin:0;padding:9px}.loginPrompt_gsiMaterialButton__8QVFH .loginPrompt_gsiMaterialButtonContentWrapper__9tahB{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;height:100%;justify-content:space-between;position:relative;width:100%}.loginPrompt_gsiMaterialButton__8QVFH .loginPrompt_gsiMaterialButtonContents__3_YcB{flex-grow:1;font-family:Roboto,arial,sans-serif;font-weight:500;overflow:hidden;text-overflow:ellipsis;vertical-align:top}.loginPrompt_gsiMaterialButton__8QVFH .loginPrompt_gsiMaterialButtonState__CDGQm{transition:opacity .218s;bottom:0;left:0;opacity:0;position:absolute;right:0;top:0}.loginPrompt_gsiMaterialButton__8QVFH:disabled{cursor:default;background-color:#ffffff61;border-color:#1f1f1f1f}.loginPrompt_gsiMaterialButton__8QVFH:disabled .loginPrompt_gsiMaterialButtonContents__3_YcB,.loginPrompt_gsiMaterialButton__8QVFH:disabled .loginPrompt_gsiMaterialButtonIcon__6TSC5{opacity:38%}.loginPrompt_gsiMaterialButton__8QVFH:not(:disabled):active .loginPrompt_gsiMaterialButton-State__mAfCZ,.loginPrompt_gsiMaterialButton__8QVFH:not(:disabled):focus .loginPrompt_gsiMaterialButtonState__CDGQm{background-color:#303030;opacity:12%}.loginPrompt_gsiMaterialButton__8QVFH:not(:disabled):hover{box-shadow:0 1px 2px 0 rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15)}.loginPrompt_gsiMaterialButton__8QVFH:not(:disabled):hover .loginPrompt_gsiMaterialButtonState__CDGQm{background-color:#303030;opacity:8%}div.sidePanel_session__EeNjH{padding:.5rem;margin-bottom:.25rem;border-radius:.5rem;cursor:pointer;max-width:14rem;font-size:medium;display:grid;grid-template-columns:minmax(auto,400px) 1fr;gap:0}div.sidePanel_compressed__CUgIn{grid-template-columns:minmax(12rem,100%) 1fr 1fr}div.sidePanel_sessionHover__cf_VO,div.sidePanel_session__EeNjH:hover{background-color:hsla(var(--popover))}div.sidePanel_session__EeNjH:hover{color:hsla(var(--popover-foreground))}div.sidePanel_session__EeNjH a{text-decoration:none}button.sidePanel_button__NzdN_{border:none;outline:none;background-color:transparent;cursor:pointer;color:var(--main-text-color);width:24px}button.sidePanel_showMoreButton__nDt4Z{border-radius:.5rem;padding:8px}div.sidePanel_panel__9offQ{display:flex;flex-direction:column;padding:1rem;overflow-y:auto;max-width:auto;transition:background-color .5s}div.sidePanel_expanded__aHnYV{gap:1rem;background-color:hsla(var(--muted));height:100%}div.sidePanel_collapsed__ewO3e{display:grid;grid-template-columns:1fr;height:-moz-fit-content;height:fit-content;padding:1rem 0 0 1rem}p.sidePanel_session__EeNjH{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-align:left;font-size:small}p.sidePanel_compressed__CUgIn{width:11rem}p.sidePanel_expanded__aHnYV{max-width:20rem}div.sidePanel_header__NCT_v{display:grid;grid-template-columns:1fr auto}div.sidePanel_profile__pfAJU{display:grid;grid-template-columns:auto 1fr;gap:1rem;align-items:center;margin-top:auto}div.sidePanel_panelWrapper__cDMvb{display:grid;grid-template-rows:1fr auto auto;height:100%}div.sidePanel_modalSessionsList___u3aa{position:fixed;top:0;left:0;width:100%;height:100%;background-color:hsla(var(--frosted-background-color));z-index:1;display:flex;justify-content:center;align-items:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}div.sidePanel_modalSessionsList___u3aa div.sidePanel_content__z60YO{max-width:80%;max-height:80%;background-color:hsla(var(--frosted-background-color));overflow:auto;padding:20px;border-radius:10px}div.sidePanel_modalSessionsList___u3aa div.sidePanel_session__EeNjH{max-width:100%;text-overflow:ellipsis}@media screen and (max-width:768px){div.sidePanel_panel__9offQ{padding:.25rem;width:100%}div.sidePanel_expanded__aHnYV{z-index:1}div.sidePanel_singleReference__vmXZr{padding:4px}div.sidePanel_panelWrapper__cDMvb{width:100%;padding:0 1rem}div.sidePanel_session__EeNjH.sidePanel_compressed__CUgIn{max-width:100%;display:grid;grid-template-columns:70vw auto;justify-content:space-between}div.sidePanel_session__EeNjH{max-width:100%;grid-template-columns:minmax(auto,70vw) 1fr}}.agentCard_agentPersonality__MmRlN p{white-space:inherit;overflow:hidden;height:77px;line-height:1.5}div.agentCard_agentPersonality__MmRlN{text-align:left;grid-column:span 3;overflow:hidden}button.agentCard_infoButton__heh_w{border:none;background-color:transparent!important;text-align:left;font-family:inherit;font-size:medium}div.automations_automationsLayout__Atoh_{display:grid;grid-template-columns:1fr 1fr;gap:1rem}div.automations_automationCard__BKidA{display:grid;grid-template-rows:auto 1fr auto}div.automations_pageLayout__OaoYA{max-width:60vw;margin:auto auto 2rem}@media screen and (max-width:768px){div.automations_automationsLayout__Atoh_{grid-template-columns:1fr}div.automations_pageLayout__OaoYA{max-width:90vw}}