khoj 1.42.4.dev1__py3-none-any.whl → 1.42.5__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 (33) hide show
  1. khoj/database/models/__init__.py +1 -1
  2. khoj/interface/compiled/404/index.html +2 -2
  3. khoj/interface/compiled/_next/static/chunks/app/agents/layout-e00fb81dca656a10.js +1 -0
  4. khoj/interface/compiled/_next/static/chunks/app/chat/layout-33934fc2d6ae6838.js +1 -0
  5. khoj/interface/compiled/_next/static/chunks/{webpack-66805ff7f301c13a.js → webpack-251ab2e9af8ab027.js} +1 -1
  6. khoj/interface/compiled/_next/static/css/{c34713c98384ee87.css → 821d0d60b0b6871d.css} +1 -1
  7. khoj/interface/compiled/agents/index.html +2 -2
  8. khoj/interface/compiled/agents/index.txt +1 -1
  9. khoj/interface/compiled/automations/index.html +2 -2
  10. khoj/interface/compiled/automations/index.txt +1 -1
  11. khoj/interface/compiled/chat/index.html +2 -2
  12. khoj/interface/compiled/chat/index.txt +1 -1
  13. khoj/interface/compiled/index.html +2 -2
  14. khoj/interface/compiled/index.txt +1 -1
  15. khoj/interface/compiled/search/index.html +2 -2
  16. khoj/interface/compiled/search/index.txt +1 -1
  17. khoj/interface/compiled/settings/index.html +2 -2
  18. khoj/interface/compiled/settings/index.txt +1 -1
  19. khoj/interface/compiled/share/chat/index.html +2 -2
  20. khoj/interface/compiled/share/chat/index.txt +1 -1
  21. khoj/processor/conversation/google/utils.py +24 -9
  22. khoj/processor/conversation/openai/utils.py +71 -36
  23. khoj/processor/conversation/utils.py +23 -9
  24. khoj/utils/constants.py +7 -6
  25. {khoj-1.42.4.dev1.dist-info → khoj-1.42.5.dist-info}/METADATA +2 -2
  26. {khoj-1.42.4.dev1.dist-info → khoj-1.42.5.dist-info}/RECORD +31 -31
  27. khoj/interface/compiled/_next/static/chunks/app/agents/layout-4e2a134ec26aa606.js +0 -1
  28. khoj/interface/compiled/_next/static/chunks/app/chat/layout-ad4d1792ab1a4108.js +0 -1
  29. /khoj/interface/compiled/_next/static/{YzN1Uv2RYxwjHlNYy9Loa → MWhgVtY-8crq6-DVyhyo-}/_buildManifest.js +0 -0
  30. /khoj/interface/compiled/_next/static/{YzN1Uv2RYxwjHlNYy9Loa → MWhgVtY-8crq6-DVyhyo-}/_ssgManifest.js +0 -0
  31. {khoj-1.42.4.dev1.dist-info → khoj-1.42.5.dist-info}/WHEEL +0 -0
  32. {khoj-1.42.4.dev1.dist-info → khoj-1.42.5.dist-info}/entry_points.txt +0 -0
  33. {khoj-1.42.4.dev1.dist-info → khoj-1.42.5.dist-info}/licenses/LICENSE +0 -0
@@ -14,6 +14,7 @@ from openai.lib.streaming.chat import (
14
14
  ChatCompletionStreamEvent,
15
15
  ContentDeltaEvent,
16
16
  )
17
+ from openai.types.chat.chat_completion import ChatCompletion
17
18
  from openai.types.chat.chat_completion_chunk import (
18
19
  ChatCompletionChunk,
19
20
  Choice,
@@ -78,7 +79,11 @@ def completion_with_backoff(
78
79
  client = get_openai_client(openai_api_key, api_base_url)
79
80
  openai_clients[client_key] = client
80
81
 
82
+ stream = not is_non_streaming_model(model_name, api_base_url)
81
83
  stream_processor = default_stream_processor
84
+ if stream:
85
+ model_kwargs["stream_options"] = {"include_usage": True}
86
+
82
87
  formatted_messages = format_message_for_api(messages, api_base_url)
83
88
 
84
89
  # Tune reasoning models arguments
@@ -109,23 +114,33 @@ def completion_with_backoff(
109
114
  add_qwen_no_think_tag(formatted_messages)
110
115
 
111
116
  read_timeout = 300 if is_local_api(api_base_url) else 60
112
- model_kwargs["stream_options"] = {"include_usage": True}
113
117
  if os.getenv("KHOJ_LLM_SEED"):
114
118
  model_kwargs["seed"] = int(os.getenv("KHOJ_LLM_SEED"))
115
119
 
116
120
  aggregated_response = ""
117
- with client.beta.chat.completions.stream(
118
- messages=formatted_messages, # type: ignore
119
- model=model_name,
120
- temperature=temperature,
121
- timeout=httpx.Timeout(30, read=read_timeout),
122
- **model_kwargs,
123
- ) as chat:
124
- for chunk in stream_processor(chat):
125
- if chunk.type == "content.delta":
126
- aggregated_response += chunk.delta
127
- elif chunk.type == "thought.delta":
128
- pass
121
+ if stream:
122
+ with client.beta.chat.completions.stream(
123
+ messages=formatted_messages, # type: ignore
124
+ model=model_name,
125
+ temperature=temperature,
126
+ timeout=httpx.Timeout(30, read=read_timeout),
127
+ **model_kwargs,
128
+ ) as chat:
129
+ for chunk in stream_processor(chat):
130
+ if chunk.type == "content.delta":
131
+ aggregated_response += chunk.delta
132
+ elif chunk.type == "thought.delta":
133
+ pass
134
+ else:
135
+ # Non-streaming chat completion
136
+ chunk = client.beta.chat.completions.parse(
137
+ messages=formatted_messages, # type: ignore
138
+ model=model_name,
139
+ temperature=temperature,
140
+ timeout=httpx.Timeout(30, read=read_timeout),
141
+ **model_kwargs,
142
+ )
143
+ aggregated_response = chunk.choices[0].message.content
129
144
 
130
145
  # Calculate cost of chat
131
146
  input_tokens = chunk.usage.prompt_tokens if hasattr(chunk, "usage") and chunk.usage else 0
@@ -182,7 +197,13 @@ async def chat_completion_with_backoff(
182
197
  client = get_openai_async_client(openai_api_key, api_base_url)
183
198
  openai_async_clients[client_key] = client
184
199
 
200
+ stream = not is_non_streaming_model(model_name, api_base_url)
185
201
  stream_processor = adefault_stream_processor
202
+ if stream:
203
+ model_kwargs["stream_options"] = {"include_usage": True}
204
+ else:
205
+ model_kwargs.pop("stream_options", None)
206
+
186
207
  formatted_messages = format_message_for_api(messages, api_base_url)
187
208
 
188
209
  # Configure thinking for openai reasoning models
@@ -228,9 +249,7 @@ async def chat_completion_with_backoff(
228
249
  if not deepthought:
229
250
  add_qwen_no_think_tag(formatted_messages)
230
251
 
231
- stream = True
232
252
  read_timeout = 300 if is_local_api(api_base_url) else 60
233
- model_kwargs["stream_options"] = {"include_usage": True}
234
253
  if os.getenv("KHOJ_LLM_SEED"):
235
254
  model_kwargs["seed"] = int(os.getenv("KHOJ_LLM_SEED"))
236
255
 
@@ -238,7 +257,7 @@ async def chat_completion_with_backoff(
238
257
  final_chunk = None
239
258
  response_started = False
240
259
  start_time = perf_counter()
241
- chat_stream: openai.AsyncStream[ChatCompletionChunk] = await client.chat.completions.create(
260
+ response: openai.AsyncStream[ChatCompletionChunk] | ChatCompletion = await client.chat.completions.create(
242
261
  messages=formatted_messages, # type: ignore
243
262
  model=model_name,
244
263
  stream=stream,
@@ -246,26 +265,34 @@ async def chat_completion_with_backoff(
246
265
  timeout=httpx.Timeout(30, read=read_timeout),
247
266
  **model_kwargs,
248
267
  )
249
- async for chunk in stream_processor(chat_stream):
250
- # Log the time taken to start response
251
- if not response_started:
252
- response_started = True
253
- logger.info(f"First response took: {perf_counter() - start_time:.3f} seconds")
254
- # Keep track of the last chunk for usage data
255
- final_chunk = chunk
256
- # Skip empty chunks
257
- if len(chunk.choices) == 0:
258
- continue
259
- # Handle streamed response chunk
260
- response_chunk: ResponseWithThought = None
261
- response_delta = chunk.choices[0].delta
262
- if response_delta.content:
263
- response_chunk = ResponseWithThought(response=response_delta.content)
264
- aggregated_response += response_chunk.response
265
- elif response_delta.thought:
266
- response_chunk = ResponseWithThought(thought=response_delta.thought)
267
- if response_chunk:
268
- yield response_chunk
268
+ if not stream:
269
+ # If not streaming, we can return the response directly
270
+ if len(response.choices) == 0 or not response.choices[0].message:
271
+ raise ValueError("No response by model.")
272
+ aggregated_response = response.choices[0].message.content
273
+ final_chunk = response
274
+ yield ResponseWithThought(response=aggregated_response)
275
+ else:
276
+ async for chunk in stream_processor(response):
277
+ # Log the time taken to start response
278
+ if not response_started:
279
+ response_started = True
280
+ logger.info(f"First response took: {perf_counter() - start_time:.3f} seconds")
281
+ # Keep track of the last chunk for usage data
282
+ final_chunk = chunk
283
+ # Skip empty chunks
284
+ if len(chunk.choices) == 0:
285
+ continue
286
+ # Handle streamed response chunk
287
+ response_chunk: ResponseWithThought = None
288
+ response_delta = chunk.choices[0].delta
289
+ if response_delta.content:
290
+ response_chunk = ResponseWithThought(response=response_delta.content)
291
+ aggregated_response += response_chunk.response
292
+ elif response_delta.thought:
293
+ response_chunk = ResponseWithThought(thought=response_delta.thought)
294
+ if response_chunk:
295
+ yield response_chunk
269
296
 
270
297
  # Calculate cost of chat after stream finishes
271
298
  input_tokens, output_tokens, cost = 0, 0, 0
@@ -354,6 +381,14 @@ def is_openai_reasoning_model(model_name: str, api_base_url: str = None) -> bool
354
381
  return model_name.startswith("o") and is_openai_api(api_base_url)
355
382
 
356
383
 
384
+ def is_non_streaming_model(model_name: str, api_base_url: str = None) -> bool:
385
+ """
386
+ Check if model response should not be streamed.
387
+ """
388
+ # Some OpenAI models requires biometrics to stream. Avoid streaming their responses.
389
+ return model_name in ["o3", "o3-pro"] and is_openai_api(api_base_url)
390
+
391
+
357
392
  def is_twitter_reasoning_model(model_name: str, api_base_url: str = None) -> bool:
358
393
  """
359
394
  Check if the model is a Twitter reasoning model
@@ -20,7 +20,7 @@ import yaml
20
20
  from langchain_core.messages.chat import ChatMessage
21
21
  from llama_cpp import LlamaTokenizer
22
22
  from llama_cpp.llama import Llama
23
- from pydantic import BaseModel
23
+ from pydantic import BaseModel, ConfigDict, ValidationError, create_model
24
24
  from transformers import AutoTokenizer, PreTrainedTokenizer, PreTrainedTokenizerFast
25
25
 
26
26
  from khoj.database.adapters import ConversationAdapters
@@ -62,14 +62,15 @@ model_to_prompt_size = {
62
62
  "gpt-4.1": 60000,
63
63
  "gpt-4.1-mini": 120000,
64
64
  "gpt-4.1-nano": 120000,
65
- "o1": 20000,
66
- "o3": 30000,
67
- "o1-mini": 60000,
68
- "o3-mini": 60000,
69
- "o4-mini": 60000,
65
+ "o1-mini": 90000,
66
+ "o1": 30000,
67
+ "o3-mini": 90000,
68
+ "o3": 60000,
69
+ "o3-pro": 30000,
70
+ "o4-mini": 90000,
70
71
  # Google Models
71
- "gemini-2.5-flash-preview-04-17": 120000,
72
- "gemini-2.5-pro-preview-03-25": 60000,
72
+ "gemini-2.5-flash-preview-05-20": 120000,
73
+ "gemini-2.5-pro-preview-06-05": 60000,
73
74
  "gemini-2.0-flash": 120000,
74
75
  "gemini-2.0-flash-lite": 120000,
75
76
  "gemini-1.5-flash": 120000,
@@ -361,7 +362,6 @@ def message_to_log(
361
362
  """Create json logs from messages, metadata for conversation log"""
362
363
  default_khoj_message_metadata = {
363
364
  "intent": {"type": "remember", "memory-type": "notes", "query": user_message},
364
- "trigger-emotion": "calm",
365
365
  }
366
366
  khoj_response_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
367
367
 
@@ -376,6 +376,20 @@ def message_to_log(
376
376
  khoj_log = merge_dicts(khoj_message_metadata, default_khoj_message_metadata)
377
377
  khoj_log = merge_dicts({"message": chat_response, "by": "khoj", "created": khoj_response_time}, khoj_log)
378
378
 
379
+ # Validate message logs
380
+ # Only validates top-level fields, not nested fields, defined in ChatMessageModel
381
+ class StrictChatMessageModel(ChatMessageModel):
382
+ model_config = ConfigDict(extra="forbid", strict=True)
383
+
384
+ try:
385
+ StrictChatMessageModel(**human_log)
386
+ except ValidationError as e:
387
+ logger.error(f"Validation error in user chat message: {e}\nUser Message: {human_log}\n")
388
+ try:
389
+ StrictChatMessageModel(**khoj_log)
390
+ except ValidationError as e:
391
+ logger.error(f"Validation error in khoj chat message: {e}\nKhoj Message: {khoj_log}\n")
392
+
379
393
  human_message = ChatMessageModel(**human_log)
380
394
  khoj_message = ChatMessageModel(**khoj_log)
381
395
  chat_history.extend([human_message, khoj_message])
khoj/utils/constants.py CHANGED
@@ -17,8 +17,8 @@ default_offline_chat_models = [
17
17
  "bartowski/gemma-2-2b-it-GGUF",
18
18
  "bartowski/Qwen2.5-14B-Instruct-GGUF",
19
19
  ]
20
- default_openai_chat_models = ["gpt-4o-mini", "gpt-4.1"]
21
- default_gemini_chat_models = ["gemini-2.0-flash", "gemini-2.5-flash-preview-05-20", "gemini-2.5-pro-preview-05-06"]
20
+ default_openai_chat_models = ["gpt-4o-mini", "gpt-4.1", "o3", "o4-mini"]
21
+ default_gemini_chat_models = ["gemini-2.0-flash", "gemini-2.5-flash-preview-05-20", "gemini-2.5-pro-preview-06-05"]
22
22
  default_anthropic_chat_models = ["claude-sonnet-4-0", "claude-3-5-haiku-latest"]
23
23
 
24
24
  empty_config = {
@@ -41,10 +41,11 @@ model_to_cost: Dict[str, Dict[str, float]] = {
41
41
  "gpt-4.1": {"input": 2.00, "output": 8.00},
42
42
  "gpt-4.1-mini": {"input": 0.40, "output": 1.60},
43
43
  "gpt-4.1-nano": {"input": 0.10, "output": 0.40},
44
- "o1": {"input": 15.0, "output": 60.00},
45
- "o3": {"input": 10.0, "output": 40.00},
46
44
  "o1-mini": {"input": 3.0, "output": 12.0},
45
+ "o1": {"input": 15.0, "output": 60.00},
47
46
  "o3-mini": {"input": 1.10, "output": 4.40},
47
+ "o3": {"input": 2.0, "output": 8.00},
48
+ "o3-pro": {"input": 20.0, "output": 80.00},
48
49
  "o4-mini": {"input": 1.10, "output": 4.40},
49
50
  # Gemini Pricing: https://ai.google.dev/pricing
50
51
  "gemini-1.5-flash": {"input": 0.075, "output": 0.30},
@@ -53,8 +54,8 @@ model_to_cost: Dict[str, Dict[str, float]] = {
53
54
  "gemini-1.5-pro-002": {"input": 1.25, "output": 5.00},
54
55
  "gemini-2.0-flash": {"input": 0.10, "output": 0.40},
55
56
  "gemini-2.0-flash-lite": {"input": 0.0075, "output": 0.30},
56
- "gemini-2.5-flash-preview-04-17": {"input": 0.15, "output": 0.60, "thought": 3.50},
57
- "gemini-2.5-pro-preview-03-25": {"input": 1.25, "output": 10.0},
57
+ "gemini-2.5-flash-preview-05-20": {"input": 0.15, "output": 0.60, "thought": 3.50},
58
+ "gemini-2.5-pro-preview-06-05": {"input": 1.25, "output": 10.0},
58
59
  # Anthropic Pricing: https://www.anthropic.com/pricing#anthropic-api
59
60
  "claude-3-5-haiku-20241022": {"input": 1.0, "output": 5.0, "cache_read": 0.08, "cache_write": 1.0},
60
61
  "claude-3-5-haiku@20241022": {"input": 1.0, "output": 5.0, "cache_read": 0.08, "cache_write": 1.0},
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: khoj
3
- Version: 1.42.4.dev1
3
+ Version: 1.42.5
4
4
  Summary: Your Second Brain
5
5
  Project-URL: Homepage, https://khoj.dev
6
6
  Project-URL: Documentation, https://docs.khoj.dev
@@ -53,7 +53,7 @@ Requires-Dist: magika~=0.5.1
53
53
  Requires-Dist: markdown-it-py~=3.0.0
54
54
  Requires-Dist: markdownify~=0.11.6
55
55
  Requires-Dist: openai-whisper>=20231117
56
- Requires-Dist: openai>=1.0.0
56
+ Requires-Dist: openai>=1.86.0
57
57
  Requires-Dist: pgvector==0.2.4
58
58
  Requires-Dist: phonenumbers==8.13.27
59
59
  Requires-Dist: pillow~=10.0.0
@@ -123,24 +123,24 @@ khoj/database/migrations/0088_ratelimitrecord.py,sha256=CxlkfbA8eTO57pv0AvJYfGRp
123
123
  khoj/database/migrations/0089_chatmodel_price_tier_and_more.py,sha256=EJ1Yf6MMzhGMwJOS3AECaU6ks4NfRW0utyDa7lreNwQ,1211
124
124
  khoj/database/migrations/0090_alter_khojuser_uuid.py,sha256=2h9v-DiuqFuZKpAyWYwueqZkBHvxZbm-_guRjNaZzxg,3802
125
125
  khoj/database/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
- khoj/database/models/__init__.py,sha256=K7KiZXBmWpJtDzWd-QHPLXwKYDBCbSCuzs9NP3BS8Wk,31227
126
+ khoj/database/models/__init__.py,sha256=9pMdW8Quz_RQhWzyUbwuWQwr0gNvJHBJQ00xotQ4Ej0,31220
127
127
  khoj/interface/compiled/agents.svg,sha256=yFCRwIM-Qawa0C5ggAo3ekb-Q1ElmotBOKIGhtfIQqM,1722
128
128
  khoj/interface/compiled/automation.svg,sha256=o7L2XYwJWRSMvl8h6TBv6Pt28RTRVMHqF04EPY0AFj0,1467
129
129
  khoj/interface/compiled/chat.svg,sha256=l2JoYRRgk201adTTdvJ-buKUrc0WGfsudix5xEvtM3A,2424
130
130
  khoj/interface/compiled/close.svg,sha256=hQ2iFLkNzHk0_iyTrSbwnWAeXYlgA-c2Eof2Iqh76n4,417
131
131
  khoj/interface/compiled/copy-button-success.svg,sha256=byqWAYD3Pn9IOXRjOKudJ-TJbP2UESbQGvtLWazNGjY,829
132
132
  khoj/interface/compiled/copy-button.svg,sha256=05bKM2eRxksfBlAPT7yMaoNJEk85bZCxQg67EVrPeHo,669
133
- khoj/interface/compiled/index.html,sha256=VKhPb8dSqbXfblqSM_gYPjPxjxcICf0aAyqJpNwU3HE,53043
134
- khoj/interface/compiled/index.txt,sha256=uHumpzcUlRRziNutNE3GGRUxhfdyGTi8vssVIMEAyeA,7616
133
+ khoj/interface/compiled/index.html,sha256=jUMN2qbi9Jy2usrwUYpxq1LYZKRqH9g5-JkDm51AbwM,53043
134
+ khoj/interface/compiled/index.txt,sha256=ytWRdzzNqyHseJ9Os2J1Z2vf8cyWAr2eBScHbck0Bgg,7616
135
135
  khoj/interface/compiled/khoj.webmanifest,sha256=9wOK2BMS6xH5NKd2eaUgTLg9WepIxB2K2U33KU89LD8,2543
136
136
  khoj/interface/compiled/logo.svg,sha256=_QCKVYM4WT2Qhcf7aVFImjq_s5CwjynGXYAOgI7yf8w,8059
137
137
  khoj/interface/compiled/send.svg,sha256=VdavOWkVddcwcGcld6pdfmwfz7S91M-9O28cfeiKJkM,635
138
138
  khoj/interface/compiled/share.svg,sha256=91lwo75PvMDrgocuZQab6EQ62CxRbubh9Bhw7CWMKbg,1221
139
139
  khoj/interface/compiled/thumbs-down.svg,sha256=JGNl-DwoRmH2XFMPWwFFklmoYtKxaQbkLE3nuYKe8ZY,1019
140
140
  khoj/interface/compiled/thumbs-up.svg,sha256=yS1wxTRtiztkN-6nZciLoYQUB_KTYNPV8xFRwH2TQFw,1036
141
- khoj/interface/compiled/404/index.html,sha256=pwQAEOpUTeMaPUSpXp9cHANMDwNPqBGFwmur0LoZ1g0,17097
142
- khoj/interface/compiled/_next/static/YzN1Uv2RYxwjHlNYy9Loa/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
143
- khoj/interface/compiled/_next/static/YzN1Uv2RYxwjHlNYy9Loa/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
141
+ khoj/interface/compiled/404/index.html,sha256=gvYb2IR3Ux1avixaHFT25_3FWLJ3K7_Kg5NXIZET3tY,17097
142
+ khoj/interface/compiled/_next/static/MWhgVtY-8crq6-DVyhyo-/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
143
+ khoj/interface/compiled/_next/static/MWhgVtY-8crq6-DVyhyo-/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
144
144
  khoj/interface/compiled/_next/static/chunks/1243.ea2826fb35adb15a.js,sha256=Y6ceAwyTH4HSGDvBRoBB-RVXRCzGGr8NSPcspYF5OM8,182
145
145
  khoj/interface/compiled/_next/static/chunks/133.392ae90c3b2a67f2.js,sha256=IK-mb9ZlF6uJUdU8AuXsppc99tFL8svJvZtKNZGNtcY,411
146
146
  khoj/interface/compiled/_next/static/chunks/1592.b069bdb7aaddd2eb.js,sha256=VUaP2gjX3W9tA9pOH_VIPG_2BIg7Wk1AICrfU5iHgrk,71096
@@ -206,15 +206,15 @@ khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js,sha256
206
206
  khoj/interface/compiled/_next/static/chunks/main-63d6432f34cdf74b.js,sha256=bXVce22CrDNgnPypCNcoRkRMzcxj0OXFhFE1ZTZDgjo,111290
207
207
  khoj/interface/compiled/_next/static/chunks/main-app-de1f09df97a3cfc7.js,sha256=bqnztujKItXfFBzQlaBmDZyfJpQt_M93CXOuchJfpD0,471
208
208
  khoj/interface/compiled/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
209
- khoj/interface/compiled/_next/static/chunks/webpack-66805ff7f301c13a.js,sha256=lGdIULweaiJyeuVjLWvYVt__Nv3HTgBSy80oxE08KOI,4891
209
+ khoj/interface/compiled/_next/static/chunks/webpack-251ab2e9af8ab027.js,sha256=1cVQvn95Emyrq83a1MV11F1wHUU136qFTlcYJEP44xI,4891
210
210
  khoj/interface/compiled/_next/static/chunks/app/layout-baa6e7974e560a7a.js,sha256=7JZS2Pr995Lwu3FeQpAvheLS1Bn5w5HOFsecV2_kyQA,3880
211
211
  khoj/interface/compiled/_next/static/chunks/app/page-45ae5e99e8a61821.js,sha256=ZDK-miJC4A1jLRIqhS-v7mXdalHRyY0Eizo22f7xsUg,31218
212
212
  khoj/interface/compiled/_next/static/chunks/app/_not-found/page-0ec97c4970898f2d.js,sha256=zElhiTkdu2JqrEvJ8Lrxh4HCyfLmPllBHHWOuDtrVlw,1755
213
- khoj/interface/compiled/_next/static/chunks/app/agents/layout-4e2a134ec26aa606.js,sha256=B3HJ6CKzJccEIOk54Erl1FtKUxGJq2p-ch932X1vjwE,180
213
+ khoj/interface/compiled/_next/static/chunks/app/agents/layout-e00fb81dca656a10.js,sha256=Prg_1BSPDnJDTXEx-Ai9RtlK0nesPWDFIVFFCMuVUiw,180
214
214
  khoj/interface/compiled/_next/static/chunks/app/agents/page-2fac1d5ac7192e73.js,sha256=pATgYmEwvudjV7rOL1P6t-KSk5dpq5hw-MenPZ7017Y,18314
215
215
  khoj/interface/compiled/_next/static/chunks/app/automations/layout-7f5c33a70e46b3af.js,sha256=s2wHeQ-ai9rKyU9EjOGY1Yo51L4ZEkjLtML85BqN3Zc,5143
216
216
  khoj/interface/compiled/_next/static/chunks/app/automations/page-ef89ac958e78aa81.js,sha256=IrNnuUQYH0cMgS3OddjPADIYL-JXwPh18LfqAGjAfrA,34830
217
- khoj/interface/compiled/_next/static/chunks/app/chat/layout-ad4d1792ab1a4108.js,sha256=g815zvSZenVssWcOYjyqAOPDjTCa359nqspXeIsXQ5A,180
217
+ khoj/interface/compiled/_next/static/chunks/app/chat/layout-33934fc2d6ae6838.js,sha256=zKdgnv4zZCkeNWFODWPJKYB3VjkTq4X5LtTCs0sqxaQ,180
218
218
  khoj/interface/compiled/_next/static/chunks/app/chat/page-0b8cd503b9723fd3.js,sha256=_WTmkjdTwRV2Wrnquo98ygehPAVBjT9WBbTy5TjHHRY,29132
219
219
  khoj/interface/compiled/_next/static/chunks/app/search/layout-c02531d586972d7d.js,sha256=VQACqzXZcJUaa3W_0wHsrdLP22pj8yqeAOGBQfVnQxw,180
220
220
  khoj/interface/compiled/_next/static/chunks/app/search/page-afb5e7ed13d221c1.js,sha256=y7Fap-jyzRv5j9diCscAi-E5bQaGh5OFlma1OeaJ5c4,32714
@@ -228,8 +228,8 @@ khoj/interface/compiled/_next/static/css/37a73b87f02df402.css,sha256=hp0vlekKu0K
228
228
  khoj/interface/compiled/_next/static/css/7017ee76c2f2cd87.css,sha256=crgwDRN7r35lT_QXQDaW3_i48PPhIekfbPdHBz3IIv4,3075782
229
229
  khoj/interface/compiled/_next/static/css/76c658ee459140a9.css,sha256=7tI24VB66ZUsAPUxRdQhboopun0AXLUnF64uv9RkC08,1833
230
230
  khoj/interface/compiled/_next/static/css/7889a30fe9c83846.css,sha256=IUkZhkx4GpYOIhN-EJw9T1DqGMO3Wa3mNpUwaOBuZoY,7204
231
+ khoj/interface/compiled/_next/static/css/821d0d60b0b6871d.css,sha256=340fHdvynnjkHvFJSnn04hPiqt7zUmLvse1uAwLoxXQ,9831
231
232
  khoj/interface/compiled/_next/static/css/9a460202d29476e5.css,sha256=a_XgoX4KgZtVmEy4mQGNNsub734BSan37_XgE6I5mQk,30494
232
- khoj/interface/compiled/_next/static/css/c34713c98384ee87.css,sha256=uypGqyDrKf-9vcU_Rf9as1XLvMSMDDfKQjmHnLaixfM,9831
233
233
  khoj/interface/compiled/_next/static/css/e4eb883b5265d372.css,sha256=6LaW-lQ_ZpgOJNWYwU1Q1egXZ1aqJDEuRj66oRCIU_E,17748
234
234
  khoj/interface/compiled/_next/static/css/ea5485b3f3859a5a.css,sha256=tn6qi2xSLTWhtzDUE8UlC8iipH9QGV6A9oGj1ap-Sk4,1659
235
235
  khoj/interface/compiled/_next/static/media/1d8a05b60287ae6c-s.p.woff2,sha256=IzKBwB_bpSGvO7C9aRv29Js-jAbZPRDI-D-P4H2P918,14508
@@ -309,8 +309,8 @@ khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp,sha256=M2AW_HLpBn
309
309
  khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp,sha256=BBeRPBZkxY3-aKkMnYv5TSkxmbeMbyUH4VRIPfrWg1E,137406
310
310
  khoj/interface/compiled/_next/static/media/globe.98e105ca.webp,sha256=g3ofb8-W9GM75zIhlvQhaS8I2py9TtrovOKR3_7Jf04,514
311
311
  khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp,sha256=I_N7Yke3IOoS-0CC6XD8o0IUWG8PdPbrHmf6lpgWlZY,1380
312
- khoj/interface/compiled/agents/index.html,sha256=bzvljlWiaFhsA7D3X68EQYnCfVTeM03ujKmGqh7eycs,16224
313
- khoj/interface/compiled/agents/index.txt,sha256=tp_YwQ8SKHPFeXozT9L1AD3wvsmvB8d4GeH7ijXR76o,7220
312
+ khoj/interface/compiled/agents/index.html,sha256=MMffKj0K8i6mfZkX3QXTFHwZQ5z7GsdvPktkuMW-z6M,16224
313
+ khoj/interface/compiled/agents/index.txt,sha256=jIl4NggQhk8wUQatJy6u80_y1m7DctpnHkdG3GT2WGw,7220
314
314
  khoj/interface/compiled/assets/icons/khoj_lantern.ico,sha256=eggu-B_v3z1R53EjOFhIqqPnICBGdoaw1xnc0NrzHck,174144
315
315
  khoj/interface/compiled/assets/icons/khoj_lantern.svg,sha256=I_8XP5X84gEOoCRhCRKOQn_GKZrz3SUBXct7WxHvY7c,8767
316
316
  khoj/interface/compiled/assets/icons/khoj_lantern_1200x1200.png,sha256=xDx0bbD-WMflgg8zck9oPIIuTIvywtuED2k7CjSQS4w,66194
@@ -325,16 +325,16 @@ khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png,sha256=i
325
325
  khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png,sha256=Dd4fPwtFl6BWqnHjeb1mCK_ND0hhHsWtx8sNE7EiMuE,406179
326
326
  khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png,sha256=DEDaNRCkfEWUeh3kYZWIQDTVK1a6KKnYdwj5ZWisN_Q,82985
327
327
  khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png,sha256=Ma3blirRmq3X4oYSsDbbT7MDn29rymDrjwmUfA9BMuM,236285
328
- khoj/interface/compiled/automations/index.html,sha256=qZAguXv_7PnJKRbb10QLRuD2E02CPOUQxVtbPNd-kG0,54094
329
- khoj/interface/compiled/automations/index.txt,sha256=322ZQDGg_mTK6sqV-cMqQ5n9RBPzBJw0LuXXr9QiiY0,7449
330
- khoj/interface/compiled/chat/index.html,sha256=OAm6TpL5qvCjk55D0y0RUbk66JY_PhFd8DvZV7vtceo,53222
331
- khoj/interface/compiled/chat/index.txt,sha256=XFba-4HpjGC9jgaPGwNMozsJVdCAHq0g1pT3InUTxms,7858
332
- khoj/interface/compiled/search/index.html,sha256=Zb_FQ_GB8a5aOomG8aVRV9pP5eaTbXZQEfH046yb6pA,55304
333
- khoj/interface/compiled/search/index.txt,sha256=jrKv5je5tSbWX1WIhTNrvfTMo-QM2UkYmPrkQ7x1FHA,6567
334
- khoj/interface/compiled/settings/index.html,sha256=w3XvuymZ0U5mgMARdAkWR-m7D68Jgaf7uVcnG1onogo,52743
335
- khoj/interface/compiled/settings/index.txt,sha256=xdtswnC6_8cA2Nu6FuuAx2r2KJw7jEzafVDIS69wJ-Q,7703
336
- khoj/interface/compiled/share/chat/index.html,sha256=VS6E_p3w8fEiRqt8QlMl_hRoe90Sn0OSty_LPr97m5A,53802
337
- khoj/interface/compiled/share/chat/index.txt,sha256=6bS7mcW6aazmr4Dm_m1jc3rijyissVVjekhn_da9ZPk,8320
328
+ khoj/interface/compiled/automations/index.html,sha256=YqkN1gCaBwea_vCSJnj9OfJ7BCUxStySXer_me5Ws3w,54094
329
+ khoj/interface/compiled/automations/index.txt,sha256=wG8pT0Aw_c2kh24QvbsNlWaF6GEhtg_x4Drd_Dbg6_Q,7449
330
+ khoj/interface/compiled/chat/index.html,sha256=gzrvKZ5WnyLudqvVVOPV3B0d9QeacrOVSXCj8OFnqwI,53222
331
+ khoj/interface/compiled/chat/index.txt,sha256=zxI_zCooSRszZnfMU9rjPoVebUwRL8gy_FjSwbMZGak,7858
332
+ khoj/interface/compiled/search/index.html,sha256=ZqHQ_MNap_73Q6Z41EupvEMAvFnpHylvXeYqjDcxlj8,55304
333
+ khoj/interface/compiled/search/index.txt,sha256=AMNEhe5o90jftTlLi0epAw7CJvzA61p_QhcbDZuEMQw,6567
334
+ khoj/interface/compiled/settings/index.html,sha256=5EK9Fjm0CSVnlVXi6Melws6ry33Rec_n85oDNhCFYfk,52743
335
+ khoj/interface/compiled/settings/index.txt,sha256=7Ewg5RftA5FtEJJ2ocqutyuU_YYBLCe-Uxd7-GRphNc,7703
336
+ khoj/interface/compiled/share/chat/index.html,sha256=nDiEBxTUM_cVPNEwZrrvBnjIZofglnmEtUwOYzBGEqc,53802
337
+ khoj/interface/compiled/share/chat/index.txt,sha256=EI9MGmN9HhYP5oLAYSGUG93oTG8iYrA6izPSsLfiD-M,8320
338
338
  khoj/interface/email/feedback.html,sha256=xksuPFamx4hGWyTTxZKRgX_eiYQQEuv-eK9Xmkt-nwU,1216
339
339
  khoj/interface/email/magic_link.html,sha256=372ESbTPKM9acekuZcOIKOw6kBl-KikFg_L9MOHqJkg,2094
340
340
  khoj/interface/email/task.html,sha256=tY7a0gzVeQ2lSQNu7WyXR_s7VYeWTrxWEj1iHVuoVE4,2813
@@ -387,20 +387,20 @@ khoj/processor/content/plaintext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
387
387
  khoj/processor/content/plaintext/plaintext_to_entries.py,sha256=wFZwK_zIc7gWbRtO9sOHo9KvfhGAzL9psX_nKWYFduo,4975
388
388
  khoj/processor/conversation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
389
389
  khoj/processor/conversation/prompts.py,sha256=XkLuA8npw4gdfXQqBJqn-13uJd1xoGtnzOsnobFrw5g,54523
390
- khoj/processor/conversation/utils.py,sha256=oZn_gVKEgLHdyJGGZ-YeT3v79nttOlhf0ZoOIUzNOgc,43791
390
+ khoj/processor/conversation/utils.py,sha256=DZtxhdnBK1woXuVnEZ5MewSRWJm-MtZZemvbcj_QJG4,44415
391
391
  khoj/processor/conversation/anthropic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
392
392
  khoj/processor/conversation/anthropic/anthropic_chat.py,sha256=7QnT5no46slRahe3UlCEmPMVb7LrIcth0pkjVneaq0g,5290
393
393
  khoj/processor/conversation/anthropic/utils.py,sha256=1-hwqMSVgQ5295LhcjKxMmDjDsAKLJC8YCh-D03wEMA,16765
394
394
  khoj/processor/conversation/google/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
395
395
  khoj/processor/conversation/google/gemini_chat.py,sha256=L8a4NYstCGQlax_HHaeaqlu_qs6pITeCX7sD5BDeEC0,5659
396
- khoj/processor/conversation/google/utils.py,sha256=FmK09N4zp0uGv2AVdHnJBzKKb9kr6wG1cJOelI9zraY,16269
396
+ khoj/processor/conversation/google/utils.py,sha256=jBb3SbPoqm91I7T987TKjGugvGVd11kPi4rEs6d6K5Y,16802
397
397
  khoj/processor/conversation/offline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
398
398
  khoj/processor/conversation/offline/chat_model.py,sha256=lD2sIGEKBuF9AZSyU2UUHAZHeTyE6v1B2-qUoVoSiXg,8579
399
399
  khoj/processor/conversation/offline/utils.py,sha256=51McImxl6u1qgRYvMt7uzsgLGSLq5SMFy74ymlNjIcc,3033
400
400
  khoj/processor/conversation/offline/whisper.py,sha256=DJI-8y8DULO2cQ49m2VOvRyIZ2TxBypc15gM8O3HuMI,470
401
401
  khoj/processor/conversation/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
402
402
  khoj/processor/conversation/openai/gpt.py,sha256=_i0greQTSxLL5wOCqBot6cIPtdhtBL_y8fZsn8lRmYc,7174
403
- khoj/processor/conversation/openai/utils.py,sha256=WcT6vIYS3bUJ7aVSXpmCYJaD2qS2zvV3upSnz741QXM,27402
403
+ khoj/processor/conversation/openai/utils.py,sha256=jQpOvAcnxI3dMFlnMkPU5xJVRI8g28_qxMv2AVl99GI,28909
404
404
  khoj/processor/conversation/openai/whisper.py,sha256=zoEeK1LNCg_tzP4xzYi5vRPzNPGuDGzpkrkG7d1LUn4,447
405
405
  khoj/processor/image/generate.py,sha256=Om57Gz7_I0GgfYONNd2OoGOMbAE-QvUTInkWNKqMXM4,10566
406
406
  khoj/processor/operator/README.md,sha256=QaV00W1IB7i8ZrvhNkpjmFMVDtORFt-OASieRQGE_UE,2308
@@ -447,7 +447,7 @@ khoj/search_type/text_search.py,sha256=PZzJVCXpeBM795SIqiAKXAxgnCp1NIRiVikm040r1
447
447
  khoj/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
448
448
  khoj/utils/cli.py,sha256=fI1XQYMtJzLGOKQZQ5XxFOrC8sGjK3Alnteg5U62rWI,3882
449
449
  khoj/utils/config.py,sha256=aiOkH0je8A30DAGYTHMRePrgJonFv_i07_7CdhhhcdA,1805
450
- khoj/utils/constants.py,sha256=hh4C7At_N0da3P0Dn2OJXKpbdpeZGfY5M1FFuDRI7qg,4226
450
+ khoj/utils/constants.py,sha256=ObF_spY4OkHK6D1mGeeFOaVBsg81XktD2LQsrSV65Mo,4289
451
451
  khoj/utils/fs_syncer.py,sha256=5nqwAZqRk3Nwhkwd8y4IomTPZQmW32GwAqyMzal5KyY,9996
452
452
  khoj/utils/helpers.py,sha256=h-H3ioGB5PIYLBr-SmUjmNBIkN5-YDXsoK5B1DvI3i4,32005
453
453
  khoj/utils/initialization.py,sha256=5eULsvGQv_Kp9bMfrHP8T_QFPjurIFyfq3-rVMWiGa4,15066
@@ -456,8 +456,8 @@ khoj/utils/models.py,sha256=Q5tcC9-z25sCiub048fLnvZ6_IIO1bcPNxt5payekk0,2009
456
456
  khoj/utils/rawconfig.py,sha256=ASl_h3Ivaa_4lD4kCA0uZsMRgSYCjrgGUPm-Hw1jkLk,5083
457
457
  khoj/utils/state.py,sha256=s_GFWOqRzpEDx0eCPStuzBTK2VEw-qgRpH0aiEdGnDo,1791
458
458
  khoj/utils/yaml.py,sha256=qy1Tkc61rDMesBw_Cyx2vOR6H-Hngcsm5kYfjwQBwkE,1543
459
- khoj-1.42.4.dev1.dist-info/METADATA,sha256=Akrx-XkLRf43fvx5eKViuPTdOtrKB2sSKlEBR6EKuCY,8972
460
- khoj-1.42.4.dev1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
461
- khoj-1.42.4.dev1.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
462
- khoj-1.42.4.dev1.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
463
- khoj-1.42.4.dev1.dist-info/RECORD,,
459
+ khoj-1.42.5.dist-info/METADATA,sha256=CACxl2M7plAMCtzCMwl3LZpR-65eRVVcYeOBh0MdpqE,8968
460
+ khoj-1.42.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
461
+ khoj-1.42.5.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
462
+ khoj-1.42.5.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
463
+ khoj-1.42.5.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8459,3317,7138,244],{63521:function(){}},function(n){n.O(0,[2971,2117,1744],function(){return n(n.s=63521)}),_N_E=n.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3317,8459,7138,244],{63521:function(){}},function(n){n.O(0,[2971,2117,1744],function(){return n(n.s=63521)}),_N_E=n.O()}]);