Your AI second brain. Self-hostable. Get answers from the web or your docs. Build custom agents, schedule automations, do deep research. Turn any online or local LLM into your personal, autonomous AI (gpt, claude, gemini, llama, qwen, mistral). Get started - free.
This report presents the forensic synthetic code analysis of khoj-ai/khoj, a Python project with 35,696 GitHub stars. SynthScan v2.0 examined 94,892 lines of code across 398 source files, recording 956 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 16.5 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 956 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/test_online_chat_actors.py | 19 | from khoj.utils.helpers import ConversationCommand | CODE |
| CRITICAL | tests/test_org_to_entries.py | 7 | from khoj.utils.helpers import is_none_or_empty | CODE |
| CRITICAL | tests/helpers.py | 27 | from khoj.utils.helpers import get_absolute_path, is_none_or_empty | CODE |
| CRITICAL | tests/test_agents.py | 11 | from khoj.utils.helpers import get_absolute_path | CODE |
| CRITICAL | src/khoj/configure.py | 57 | from khoj.utils.helpers import is_none_or_empty | CODE |
| CRITICAL | src/khoj/main.py | 18 | from khoj.utils.helpers import in_debug_mode, is_env_var_true | CODE |
| CRITICAL | src/khoj/routers/api_automation.py | 18 | from khoj.utils.helpers import is_none_or_empty | CODE |
| CRITICAL | src/khoj/routers/auth.py | 34 | from khoj.utils.helpers import in_debug_mode | CODE |
| CRITICAL | src/khoj/routers/email.py | 10 | from khoj.utils.helpers import is_none_or_empty | CODE |
| CRITICAL | src/khoj/routers/api_agents.py | 8 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | src/khoj/database/admin.py | 43 | from khoj.utils.helpers import ImageIntentType | CODE |
| CRITICAL | …ase/management/commands/change_generated_images_url.py | 5 | from khoj.utils.helpers import ImageIntentType, is_none_or_empty | CODE |
| CRITICAL | …base/management/commands/convert_images_png_to_webp.py | 8 | from khoj.utils.helpers import ImageIntentType | CODE |
| CRITICAL | src/khoj/database/models/__init__.py | 10 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL⚡ | src/khoj/app/settings.py | 20 | from khoj.utils.helpers import is_env_var_true | CODE |
| CRITICAL | src/khoj/search_type/text_search.py | 16 | from khoj.utils.helpers import get_absolute_path, timer | CODE |
| CRITICAL | src/khoj/processor/content/text_to_entries.py | 21 | from khoj.utils.helpers import batcher, is_none_or_empty, timer | CODE |
| CRITICAL | src/khoj/processor/content/org_mode/org_to_entries.py | 11 | from khoj.utils.helpers import timer | CODE |
| CRITICAL | …oj/processor/content/plaintext/plaintext_to_entries.py | 11 | from khoj.utils.helpers import timer | CODE |
| CRITICAL | src/khoj/processor/content/images/image_to_entries.py | 9 | from khoj.utils.helpers import timer | CODE |
| CRITICAL | …khoj/processor/content/markdown/markdown_to_entries.py | 10 | from khoj.utils.helpers import timer | CODE |
| CRITICAL | src/khoj/processor/content/pdf/pdf_to_entries.py | 10 | from khoj.utils.helpers import timer | CODE |
| CRITICAL | src/khoj/processor/content/notion/notion_to_entries.py | 10 | from khoj.utils.helpers import timer | CODE |
| CRITICAL | src/khoj/processor/content/github/github_to_entries.py | 14 | from khoj.utils.helpers import is_none_or_empty, timer | CODE |
| CRITICAL | src/khoj/processor/content/docx/docx_to_entries.py | 10 | from khoj.utils.helpers import timer | CODE |
| CRITICAL | src/khoj/processor/image/generate.py | 35 | from khoj.utils.helpers import convert_image_to_webp, is_none_or_empty, timer | CODE |
| CRITICAL | …oj/processor/operator/operator_environment_computer.py | 18 | from khoj.utils.helpers import convert_image_to_webp | CODE |
| CRITICAL | src/khoj/processor/operator/operator_agent_base.py | 19 | from khoj.utils.helpers import get_chat_usage_metrics, is_promptrace_enabled | CODE |
| CRITICAL | src/khoj/processor/operator/operator_agent_openai.py | 35 | from khoj.utils.helpers import get_openai_async_client, is_none_or_empty | CODE |
| CRITICAL | src/khoj/processor/operator/__init__.py | 27 | from khoj.utils.helpers import timer | CODE |
| CRITICAL | src/khoj/processor/operator/grounding_agent.py | 26 | from khoj.utils.helpers import get_chat_usage_metrics | CODE |
| CRITICAL | …hoj/processor/operator/operator_environment_browser.py | 14 | from khoj.utils.helpers import convert_image_to_webp | CODE |
| CRITICAL | src/khoj/processor/operator/grounding_agent_uitars.py | 38 | from khoj.utils.helpers import get_chat_usage_metrics | CODE |
| CRITICAL | src/khoj/processor/operator/operator_agent_anthropic.py | 46 | from khoj.utils.helpers import get_anthropic_async_client, is_none_or_empty | CODE |
| CRITICAL | src/khoj/processor/operator/operator_agent_binary.py | 23 | from khoj.utils.helpers import get_openai_async_client, is_none_or_empty | CODE |
| CRITICAL⚡ | src/khoj/processor/conversation/openai/gpt.py | 22 | from khoj.utils.helpers import ToolDefinition | CODE |
| CRITICAL | src/khoj/utils/jsonl.py | 6 | from khoj.utils.helpers import get_absolute_path | CODE |
| CRITICAL | src/khoj/utils/rawconfig.py | 8 | from khoj.utils.helpers import to_snake_case_from_dash | CODE |
| CRITICAL | src/khoj/utils/state.py | 14 | from khoj.utils.helpers import LRU, get_device, is_env_var_true | CODE |
| CRITICAL | src/khoj/search_filter/file_filter.py | 7 | from khoj.utils.helpers import LRU | CODE |
| CRITICAL | src/khoj/search_filter/word_filter.py | 7 | from khoj.utils.helpers import LRU | CODE |
| CRITICAL | src/khoj/search_filter/date_filter.py | 13 | from khoj.utils.helpers import LRU, merge_dicts, timer | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_multiple_users.py | 11 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_multiple_users.py | 24 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_multiple_users.py | 64 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 34 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 54 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 71 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 92 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 107 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 125 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 144 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 163 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 182 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 203 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 231 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 262 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 290 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 327 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 373 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 416 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 446 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 492 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 530 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 551 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 567 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 614 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 638 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 652 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 701 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_actors.py | 744 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_orgnode.py | 7 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_orgnode.py | 29 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_orgnode.py | 53 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_orgnode.py | 88 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_orgnode.py | 216 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_orgnode.py | 240 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_orgnode.py | 265 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_orgnode.py | 313 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_orgnode.py | 115 | # ---------------------------------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/test_orgnode.py | 143 | # ---------------------------------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/test_orgnode.py | 193 | # ---------------------------------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/test_orgnode.py | 289 | # ---------------------------------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/test_orgnode.py | 335 | # ---------------------------------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/test_orgnode.py | 361 | # ---------------------------------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/test_word_filter.py | 13 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_word_filter.py | 28 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_word_filter.py | 43 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_word_filter.py | 56 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_word_filter.py | 69 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_online_chat_director.py | 21 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_online_chat_director.py | 31 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_director.py | 47 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_director.py | 67 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_director.py | 84 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_director.py | 107 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_director.py | 131 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_director.py | 157 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_director.py | 182 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_director.py | 215 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_director.py | 233 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_online_chat_director.py | 251 | # ---------------------------------------------------------------------------------------------------- | COMMENT |
| 62 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 43 | def enable_db_access_for_all_tests(db): | CODE |
| LOW | tests/conftest.py | 171 | def default_openai_chat_model_option(): | CODE |
| LOW | tests/conftest.py | 207 | def chat_client_no_background(search_config, default_user2: KhojUser): | CODE |
| LOW | tests/conftest.py | 212 | def chat_client_with_large_kb(search_config, default_user2: KhojUser): | CODE |
| LOW | tests/conftest.py | 256 | def large_kb_chat_client_builder(search_config, user): | CODE |
| LOW | tests/test_conversation_utils.py | 14 | def test_truncate_message_all_small(self): | CODE |
| LOW | tests/test_conversation_utils.py | 28 | def test_truncate_message_only_oldest_big(self): | CODE |
| LOW | tests/test_conversation_utils.py | 43 | def test_truncate_message_with_image(self): | CODE |
| LOW | tests/test_conversation_utils.py | 64 | def test_truncate_message_with_content_list(self): | CODE |
| LOW | tests/test_conversation_utils.py | 90 | def test_truncate_message_first_large(self): | CODE |
| LOW | tests/test_conversation_utils.py | 112 | def test_truncate_message_large_system_message_first(self): | CODE |
| LOW | tests/test_conversation_utils.py | 134 | def test_truncate_single_large_non_system_message(self): | CODE |
| LOW | tests/test_conversation_utils.py | 155 | def test_truncate_single_large_question(self): | CODE |
| LOW | tests/test_conversation_utils.py | 178 | def test_load_complex_raw_json_string(self): | CODE |
| LOW | tests/test_conversation_utils.py | 189 | def test_load_complex_json_with_python_code(self): | CODE |
| LOW | tests/test_conversation_utils.py | 202 | def test_load_complex_json_inline(self): | CODE |
| LOW | tests/test_pdf_to_entries.py | 9 | def test_single_page_pdf_to_jsonl(): | CODE |
| LOW | tests/test_pdf_to_entries.py | 25 | def test_multi_page_pdf_to_jsonl(): | CODE |
| LOW | tests/test_pdf_to_entries.py | 41 | def test_ocr_page_pdf_to_jsonl(): | CODE |
| LOW | tests/test_file_filter.py | 13 | def test_can_filter_no_file_filter(): | CODE |
| LOW | tests/test_file_filter.py | 25 | def test_can_filter_non_existent_file(): | CODE |
| LOW | tests/test_file_filter.py | 37 | def test_can_filter_single_file_include(): | CODE |
| LOW | tests/test_file_filter.py | 49 | def test_can_filter_single_file_exclude(): | CODE |
| LOW | tests/test_file_filter.py | 61 | def test_can_filter_file_with_regex_match(): | CODE |
| LOW | tests/test_file_filter.py | 73 | def test_can_filter_multiple_file_includes(): | CODE |
| LOW | tests/test_file_filter.py | 85 | def test_get_single_include_file_filter_terms(): | CODE |
| LOW | tests/test_file_filter.py | 97 | def test_get_single_exclude_file_filter_terms(): | CODE |
| LOW | tests/test_file_filter.py | 109 | def test_get_single_include_exclude_file_filter_terms(): | CODE |
| LOW | tests/test_file_filter.py | 121 | def test_get_multiple_include_exclude_file_filter_terms(): | CODE |
| LOW | tests/test_markdown_to_entries.py | 8 | def test_extract_markdown_with_no_headings(tmp_path): | CODE |
| LOW | tests/test_markdown_to_entries.py | 35 | def test_extract_single_markdown_entry(tmp_path): | STRING |
| LOW | tests/test_markdown_to_entries.py | 55 | def test_extract_multiple_markdown_entries(tmp_path): | STRING |
| LOW | tests/test_markdown_to_entries.py | 81 | def test_extract_entries_with_different_level_headings(tmp_path): | STRING |
| LOW | tests/test_markdown_to_entries.py | 104 | def test_extract_entries_with_non_incremental_heading_levels(tmp_path): | STRING |
| LOW | tests/test_markdown_to_entries.py | 129 | def test_extract_entries_with_text_before_headings(tmp_path): | STRING |
| LOW | tests/test_markdown_to_entries.py | 157 | def test_parse_markdown_file_into_single_entry_if_small(tmp_path): | STRING |
| LOW | tests/test_markdown_to_entries.py | 180 | def test_parse_markdown_entry_with_children_as_single_entry_if_small(tmp_path): | STRING |
| LOW | tests/test_markdown_to_entries.py | 213 | def test_line_number_tracking_in_recursive_split(): | STRING |
| LOW | tests/test_multiple_users.py | 66 | def test_different_user_data_not_accessed(client, sample_org_data, default_user: KhojUser): | CODE |
| LOW | tests/test_online_chat_actors.py | 39 | async def test_extract_question_with_date_filter_from_relative_day(chat_client, default_user2): | CODE |
| LOW | tests/test_online_chat_actors.py | 59 | async def test_extract_question_with_date_filter_from_relative_month(chat_client, default_user2): | CODE |
| LOW | tests/test_online_chat_actors.py | 76 | async def test_extract_question_with_date_filter_from_relative_year(chat_client, default_user2): | CODE |
| LOW | tests/test_online_chat_actors.py | 96 | async def test_extract_multiple_explicit_questions_from_message(chat_client, default_user2): | CODE |
| LOW | tests/test_online_chat_actors.py | 111 | async def test_extract_multiple_implicit_questions_from_message(chat_client, default_user2): | CODE |
| LOW | tests/test_online_chat_actors.py | 129 | async def test_generate_search_query_using_question_from_chat_history(chat_client, default_user2): | CODE |
| LOW | tests/test_online_chat_actors.py | 148 | async def test_generate_search_query_using_answer_from_chat_history(chat_client, default_user2): | CODE |
| LOW | tests/test_online_chat_actors.py | 167 | async def test_generate_search_query_using_question_and_answer_from_chat_history(chat_client, default_user2): | CODE |
| LOW | tests/test_online_chat_actors.py | 186 | async def test_chat_with_no_chat_history_or_retrieved_content(): | CODE |
| LOW | tests/test_online_chat_actors.py | 207 | async def test_answer_from_chat_history_and_no_content(): | CODE |
| LOW | tests/test_online_chat_actors.py | 235 | async def test_answer_from_chat_history_and_previously_retrieved_content(): | CODE |
| LOW | tests/test_online_chat_actors.py | 266 | async def test_answer_from_chat_history_and_currently_retrieved_content(): | CODE |
| LOW | tests/test_online_chat_actors.py | 294 | async def test_refuse_answering_unanswerable_question(): | CODE |
| LOW | tests/test_online_chat_actors.py | 331 | async def test_answer_requires_current_date_awareness(): | CODE |
| LOW | tests/test_online_chat_actors.py | 377 | async def test_answer_requires_date_aware_aggregation_across_provided_notes(): | CODE |
| LOW | tests/test_online_chat_actors.py | 420 | async def test_answer_general_question_not_in_chat_history_or_retrieved_content(): | CODE |
| LOW | tests/test_online_chat_actors.py | 450 | async def test_ask_for_clarification_if_not_enough_context_in_question(): | CODE |
| LOW | tests/test_online_chat_actors.py | 496 | async def test_agent_prompt_should_be_used(openai_agent): | CODE |
| LOW | tests/test_online_chat_actors.py | 534 | async def test_websearch_with_operators(chat_client, default_user2): | CODE |
| LOW | tests/test_online_chat_actors.py | 554 | async def test_websearch_khoj_website_for_info_about_khoj(chat_client, default_user2): | CODE |
| LOW | tests/test_online_chat_actors.py | 603 | async def test_select_data_sources_actor_chooses_to_search_notes( | CODE |
| 319 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 335 | except Exception as e: | STRING |
| LOW | tests/helpers.py | 201 | except Exception as e: | STRING |
| LOW | tests/test_agents.py | 398 | except Exception as e: | CODE |
| LOW⚡ | tests/evals/eval.py | 461 | except Exception as e: | CODE |
| LOW | tests/evals/eval.py | 107 | except Exception as e: | CODE |
| LOW | tests/evals/eval.py | 129 | except Exception as e: | CODE |
| LOW | tests/evals/eval.py | 176 | except Exception as e: | CODE |
| LOW | tests/evals/eval.py | 180 | except Exception as e: | CODE |
| LOW | tests/evals/eval.py | 203 | except Exception as e: | CODE |
| LOW | tests/evals/eval.py | 246 | except Exception as e: | CODE |
| MEDIUM | tests/evals/eval.py | 343 | print(f"Error loading and formatting MATH500 dataset: {e}") | STRING |
| LOW | tests/evals/eval.py | 373 | except Exception as e: | CODE |
| LOW | tests/evals/eval.py | 429 | except Exception as e: | CODE |
| LOW | tests/evals/eval.py | 318 | except Exception as e: | STRING |
| LOW | tests/evals/eval.py | 342 | except Exception as e: | STRING |
| LOW | tests/evals/eval.py | 514 | except Exception as e: | STRING |
| LOW | src/khoj/configure.py | 295 | except Exception as e: | CODE |
| LOW | src/khoj/configure.py | 315 | except Exception as e: | CODE |
| LOW | src/khoj/configure.py | 453 | except Exception as e: | CODE |
| LOW | src/khoj/main.py | 115 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_automation.py | 109 | except Exception as e: | CODE |
| LOW | src/khoj/routers/research.py | 138 | except Exception as e: | CODE |
| LOW | src/khoj/routers/research.py | 269 | except Exception as e: | CODE |
| LOW | src/khoj/routers/research.py | 390 | except Exception as e: | CODE |
| LOW | src/khoj/routers/research.py | 430 | except Exception as e: | CODE |
| LOW | src/khoj/routers/research.py | 442 | except Exception: | CODE |
| LOW | src/khoj/routers/research.py | 618 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_chat.py | 157 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_chat.py | 170 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_chat.py | 778 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_chat.py | 862 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_chat.py | 1107 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_chat.py | 1155 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_chat.py | 1194 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_chat.py | 1429 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_chat.py | 1574 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_chat.py | 1719 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api.py | 91 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_content.py | 186 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_content.py | 216 | except Exception as e: | CODE |
| LOW | src/khoj/routers/api_content.py | 596 | except Exception as e: | CODE |
| LOW⚡ | src/khoj/routers/storage.py | 42 | except Exception as e: | CODE |
| LOW | src/khoj/routers/helpers.py | 354 | except Exception: | CODE |
| LOW | src/khoj/routers/helpers.py | 472 | except Exception as e: | CODE |
| LOW | src/khoj/routers/helpers.py | 545 | except Exception: | CODE |
| LOW | src/khoj/routers/helpers.py | 614 | except Exception: | CODE |
| LOW | src/khoj/routers/helpers.py | 643 | except Exception: | CODE |
| LOW | src/khoj/routers/helpers.py | 676 | except Exception: | CODE |
| LOW | src/khoj/routers/helpers.py | 816 | except Exception as e: | CODE |
| LOW | src/khoj/routers/helpers.py | 864 | except Exception as e: | CODE |
| LOW | src/khoj/routers/helpers.py | 979 | except Exception: | CODE |
| LOW | src/khoj/routers/helpers.py | 1033 | except Exception: | CODE |
| LOW | src/khoj/routers/helpers.py | 1283 | except Exception: | CODE |
| LOW | src/khoj/routers/helpers.py | 1480 | except Exception: | CODE |
| LOW | src/khoj/routers/helpers.py | 1713 | except Exception as e: | CODE |
| LOW | src/khoj/routers/helpers.py | 2018 | except Exception as e: | CODE |
| LOW | src/khoj/routers/helpers.py | 2517 | except Exception as e: | CODE |
| LOW | src/khoj/routers/helpers.py | 3049 | except Exception as e: | CODE |
| LOW | src/khoj/routers/helpers.py | 3067 | except Exception as e: | CODE |
| LOW | src/khoj/routers/helpers.py | 3085 | except Exception as e: | CODE |
| 87 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/evals/eval.py | 455 | # Check if extracted answer matches ground truth | COMMENT |
| LOW | scripts/dev_setup.sh | 132 | # Check if any files were modified by prettier | COMMENT |
| LOW | src/khoj/configure.py | 386 | # Check if this is a server error (5xx) that we want to handle | COMMENT |
| LOW | src/khoj/configure.py | 388 | # Check if this is a web route (not API route) | COMMENT |
| LOW | src/khoj/configure.py | 444 | # Check if the value for the field is JSON serializable | COMMENT |
| LOW | src/khoj/configure.py | 484 | # Check if the process lock is still active. If not, create a new process lock. This worker will become the schedule | COMMENT |
| LOW | src/khoj/routers/api_chat.py | 784 | # Check if any interrupt query is received | COMMENT |
| LOW | src/khoj/routers/api_chat.py | 876 | # Check if the client is still connected | COMMENT |
| LOW | src/khoj/routers/api_chat.py | 1373 | # Check if the user has disconnected | COMMENT |
| LOW | src/khoj/routers/api_chat.py | 1434 | # Check if the user has disconnected | COMMENT |
| LOW | src/khoj/routers/api_chat.py | 1523 | # Check if this is an interrupt message | COMMENT |
| LOW | src/khoj/routers/api_chat.py | 1676 | # Check if there's still content to flush | COMMENT |
| LOW | src/khoj/routers/api_chat.py | 1709 | # Check if there's still content to flush | COMMENT |
| LOW | src/khoj/routers/api_subscription.py | 60 | # Check if any subscription item matches the official product ID | COMMENT |
| LOW | src/khoj/routers/helpers.py | 2093 | # Check if the user has exceeded the rate limit | COMMENT |
| LOW | src/khoj/routers/helpers.py | 2128 | # Check if the user has exceeded the rate limit | COMMENT |
| LOW | src/khoj/routers/helpers.py | 2178 | # Check if the user has exceeded the rate limit | COMMENT |
| LOW | src/khoj/routers/helpers.py | 3029 | # Check if client sent any documents of the supported types | COMMENT |
| LOW | src/khoj/routers/helpers.py | 3366 | # Check if no results found | COMMENT |
| LOW | src/khoj/routers/api_agents.py | 454 | # Check if the new persona is safe | COMMENT |
| LOW | …c/khoj/database/management/commands/manage_memories.py | 107 | # Check if user already processed in checkpoint | COMMENT |
| LOW⚡ | src/khoj/database/adapters/__init__.py | 273 | # Check if verification code exists for the user | COMMENT |
| LOW⚡ | src/khoj/database/adapters/__init__.py | 278 | # Check if the code has expired | COMMENT |
| LOW⚡ | src/khoj/database/adapters/__init__.py | 2239 | # Check if user is allowed to retrieve this automation id | COMMENT |
| LOW⚡ | src/khoj/database/adapters/__init__.py | 2242 | # Check if automation with this id exist | COMMENT |
| LOW⚡ | src/khoj/database/adapters/__init__.py | 2252 | # Check if user is allowed to retrieve this automation id | COMMENT |
| LOW⚡ | src/khoj/database/adapters/__init__.py | 2255 | # Check if automation with this id exist | COMMENT |
| LOW | src/khoj/database/adapters/__init__.py | 380 | # Check if the trial has expired | COMMENT |
| LOW | src/khoj/database/adapters/__init__.py | 2196 | # Check if user is allowed to delete this automation id | COMMENT |
| LOW | src/khoj/database/adapters/__init__.py | 2217 | # Check if user is allowed to delete this automation id | COMMENT |
| LOW⚡ | src/khoj/app/settings.py | 28 | # Set KHOJ_DOMAIN to custom domain for production deployments. | COMMENT |
| LOW⚡ | src/khoj/app/settings.py | 31 | # Set KHOJ_ALLOWED_DOMAIN to the i.p or domain of the Khoj service on the internal network. | COMMENT |
| LOW | …oj/processor/content/plaintext/plaintext_to_entries.py | 98 | # Check if raw_filename is a URL. If so, save it as is. If not, convert it to a Path. | COMMENT |
| LOW⚡ | …khoj/processor/content/markdown/markdown_to_entries.py | 161 | # Check if raw_filename is a URL. If so, save it as is. If not, convert it to a Path. | COMMENT |
| LOW | src/khoj/processor/operator/__init__.py | 194 | # Check if termination conditions are met | COMMENT |
| LOW | src/khoj/processor/operator/operator_agent_anthropic.py | 315 | # Check if thinking content exists before appending | COMMENT |
| LOW | src/khoj/processor/operator/operator_agent_binary.py | 250 | # Set summary to last action message | COMMENT |
| LOW | src/khoj/processor/conversation/prompts.py | 920 | # Print results with formatting | COMMENT |
| LOW | src/khoj/processor/conversation/utils.py | 1159 | # Write files and stage them | COMMENT |
| LOW | src/khoj/processor/conversation/utils.py | 191 | if hasattr(msg, "model_dump"): # Check if it's a Pydantic model | CODE |
| LOW | src/khoj/processor/conversation/utils.py | 1057 | response.raise_for_status() # Check if the request was successful | CODE |
| LOW⚡ | src/khoj/processor/conversation/google/utils.py | 417 | # Check if the response was blocked due to safety concerns with the prompt | COMMENT |
| LOW⚡ | src/khoj/processor/conversation/google/utils.py | 425 | # Check if finish reason is empty, therefore generation is in progress | COMMENT |
| LOW⚡ | src/khoj/processor/conversation/google/utils.py | 429 | # Check if the response was blocked due to safety concerns with the generated content | COMMENT |
| LOW⚡ | src/khoj/processor/conversation/google/utils.py | 433 | # Check if the response was stopped due to reaching maximum token limit or other reasons | COMMENT |
| LOW | src/khoj/processor/conversation/openai/utils.py | 1100 | # Check if buffer ends with a prefix of end_tag | COMMENT |
| LOW | src/khoj/processor/conversation/openai/utils.py | 1204 | # Check if buffer ends with a prefix of end_tag | COMMENT |
| LOW | src/khoj/utils/helpers.py | 239 | # Check if the file exists | COMMENT |
| LOW | src/khoj/utils/helpers.py | 1131 | # Check if AI model to be used via GCP Vertex API | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/helpers.py | 32 | CODE | |
| LOW | tests/evals/eval.py | 623 | CODE | |
| LOW | src/khoj/configure.py | 435 | CODE | |
| LOW | src/khoj/routers/research.py | 64 | CODE | |
| LOW | src/khoj/routers/research.py | 277 | CODE | |
| LOW | src/khoj/routers/research.py | 476 | CODE | |
| LOW | src/khoj/routers/api_chat.py | 668 | CODE | |
| LOW | src/khoj/routers/api_chat.py | 1483 | CODE | |
| LOW | src/khoj/routers/api_chat.py | 1584 | CODE | |
| LOW | src/khoj/routers/api_chat.py | 745 | CODE | |
| LOW | src/khoj/routers/api_chat.py | 835 | CODE | |
| LOW | src/khoj/routers/api.py | 110 | CODE | |
| LOW | src/khoj/routers/api_content.py | 467 | CODE | |
| LOW | src/khoj/routers/api_subscription.py | 125 | CODE | |
| LOW | src/khoj/routers/helpers.py | 256 | CODE | |
| LOW | src/khoj/routers/helpers.py | 876 | CODE | |
| LOW | src/khoj/routers/helpers.py | 1118 | CODE | |
| LOW | src/khoj/routers/helpers.py | 1636 | CODE | |
| LOW | src/khoj/routers/helpers.py | 1903 | CODE | |
| LOW | src/khoj/routers/helpers.py | 3268 | CODE | |
| LOW | src/khoj/routers/helpers.py | 2794 | CODE | |
| LOW | …base/management/commands/convert_images_png_to_webp.py | 22 | CODE | |
| LOW | …c/khoj/database/management/commands/manage_memories.py | 187 | CODE | |
| LOW | src/khoj/database/models/__init__.py | 430 | CODE | |
| LOW | src/khoj/database/adapters/__init__.py | 369 | CODE | |
| LOW | src/khoj/database/adapters/__init__.py | 1289 | CODE | |
| LOW | src/khoj/processor/tools/run_code.py | 232 | CODE | |
| LOW | src/khoj/processor/tools/online_search.py | 56 | CODE | |
| LOW | src/khoj/processor/content/text_to_entries.py | 61 | CODE | |
| LOW | src/khoj/processor/content/text_to_entries.py | 142 | CODE | |
| LOW | src/khoj/processor/content/org_mode/orgnode.py | 61 | CODE | |
| LOW | src/khoj/processor/content/images/image_to_entries.py | 51 | CODE | |
| LOW | src/khoj/processor/content/notion/notion_to_entries.py | 82 | CODE | |
| LOW | src/khoj/processor/content/notion/notion_to_entries.py | 218 | CODE | |
| LOW | src/khoj/processor/content/github/github_to_entries.py | 116 | CODE | |
| LOW | src/khoj/processor/image/generate.py | 41 | CODE | |
| LOW | src/khoj/processor/image/generate.py | 374 | CODE | |
| LOW | …oj/processor/operator/operator_environment_computer.py | 150 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_openai.py | 42 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_openai.py | 157 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_openai.py | 230 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_openai.py | 268 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_openai.py | 319 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_openai.py | 444 | CODE | |
| LOW | src/khoj/processor/operator/__init__.py | 34 | CODE | |
| LOW | src/khoj/processor/operator/grounding_agent.py | 93 | CODE | |
| LOW | …hoj/processor/operator/operator_environment_browser.py | 132 | CODE | |
| LOW | src/khoj/processor/operator/grounding_agent_uitars.py | 197 | CODE | |
| LOW | src/khoj/processor/operator/grounding_agent_uitars.py | 389 | CODE | |
| LOW | src/khoj/processor/operator/grounding_agent_uitars.py | 482 | CODE | |
| LOW | src/khoj/processor/operator/grounding_agent_uitars.py | 583 | CODE | |
| LOW | src/khoj/processor/operator/grounding_agent_uitars.py | 753 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_anthropic.py | 53 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_anthropic.py | 224 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_anthropic.py | 281 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_anthropic.py | 322 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_anthropic.py | 525 | CODE | |
| LOW | src/khoj/processor/operator/operator_agent_binary.py | 151 | CODE | |
| LOW | src/khoj/processor/conversation/utils.py | 323 | CODE | |
| LOW | src/khoj/processor/conversation/utils.py | 350 | CODE | |
| 22 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_text_search.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/helpers.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/test_grep_files.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/evals/eval.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/configure.py | 59 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/api_automation.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/auth.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/research.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/api_chat.py | 100 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/api_memories.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/api_phone.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/api.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/api_content.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/api_subscription.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/email.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/storage.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/notion.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/twilio.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/helpers.py | 147 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/api_agents.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/routers/api_model.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | …j/database/management/commands/change_default_model.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/database/models/__init__.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/database/adapters/__init__.py | 88 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/search_type/text_search.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/embeddings.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/tools/mcp.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/tools/run_code.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/tools/online_search.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/content/text_to_entries.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/content/org_mode/org_to_entries.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | …oj/processor/content/plaintext/plaintext_to_entries.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/content/images/image_to_entries.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | …khoj/processor/content/markdown/markdown_to_entries.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/content/pdf/pdf_to_entries.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/content/notion/notion_to_entries.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/content/github/github_to_entries.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/content/docx/docx_to_entries.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/image/generate.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | …oj/processor/operator/operator_environment_computer.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/operator/operator_agent_base.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/operator/operator_agent_openai.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/operator/__init__.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/operator/grounding_agent.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | …hoj/processor/operator/operator_environment_browser.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/operator/grounding_agent_uitars.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/operator/operator_agent_anthropic.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/operator/operator_agent_binary.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/conversation/utils.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/conversation/google/gemini_chat.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/conversation/google/utils.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | …hoj/processor/conversation/anthropic/anthropic_chat.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/conversation/anthropic/utils.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/processor/conversation/openai/utils.py | 53 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | src/khoj/processor/conversation/openai/gpt.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/utils/initialization.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/utils/jsonl.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/utils/cli.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/utils/helpers.py | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/khoj/search_filter/file_filter.py | 9 | logger = logging.getLogger(__name__) | CODE |
| 2 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_memory_settings.py | 285 | # Create a custom agent | COMMENT |
| MEDIUM | tests/test_memory_settings.py | 352 | # Create a custom agent | COMMENT |
| MEDIUM | src/khoj/routers/research.py | 93 | # Create a status collector that captures messages for later batch yield | COMMENT |
| MEDIUM | src/khoj/routers/api_chat.py | 742 | # Create a task to monitor for disconnections | COMMENT |
| MEDIUM | src/khoj/routers/api_chat.py | 974 | # Create a de-duped set of memories | COMMENT |
| MEDIUM | src/khoj/routers/api_chat.py | 1567 | # Create a new task for processing the chat request | COMMENT |
| MEDIUM | src/khoj/routers/api_memories.py | 99 | # Create a new memory with the updated content | COMMENT |
| MEDIUM | src/khoj/routers/helpers.py | 2759 | # Create the automation response | COMMENT |
| MEDIUM | …j/database/management/commands/change_default_model.py | 16 | BATCH_SIZE = 1000 # Define an appropriate batch size | CODE |
| MEDIUM | …j/database/management/commands/change_default_model.py | 92 | # Create an entry filter with no conditions | COMMENT |
| MEDIUM⚡ | src/khoj/database/adapters/__init__.py | 1772 | # Create a custom queryset for prefetching settings__ai_model_api, handling null cases | COMMENT |
| MEDIUM⚡ | …khoj/processor/content/markdown/markdown_to_entries.py | 151 | # Create a mapping from parsed entry to file info | COMMENT |
| MEDIUM | …hoj/processor/operator/operator_environment_browser.py | 56 | # Define a handler for page load events to capture URLs | COMMENT |
| MEDIUM | …hoj/processor/operator/operator_environment_browser.py | 72 | # Define a handler for new pages | COMMENT |
| MEDIUM | src/khoj/processor/conversation/prompts.py | 941 | # Define the variable | COMMENT |
| MEDIUM | src/khoj/processor/conversation/prompts.py | 944 | # Define the expression | COMMENT |
| MEDIUM | src/khoj/processor/conversation/prompts.py | 966 | # Create a DataFrame of world population from the provided data | COMMENT |
| MEDIUM | src/khoj/processor/conversation/utils.py | 1128 | # Create an initial commit if the repository is newly created | COMMENT |
| MEDIUM | src/khoj/utils/helpers.py | 913 | # Create a deep copy of the code results to avoid modifying the original data | COMMENT |
| MEDIUM | src/telemetry/telemetry.py | 44 | # Create a table if it doesn't exist | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.yml | 81 | # Uncomment line below to use with Ollama running on your local machine at localhost:11434. | COMMENT |
| LOW | docker-compose.yml | 101 | # - OLOSTEP_API_KEY=your_olostep_api_key | COMMENT |
| LOW | …face/web/app/components/suggestions/suggestionsData.ts | 121 | color: suggestionToColorMap[SuggestionType.Language] || DEFAULT_COLOR, | COMMENT |
| LOW | …face/web/app/components/suggestions/suggestionsData.ts | 141 | // actionTagline: "Career advice", | COMMENT |
| LOW | src/interface/desktop/assets/markdown-it.min.js | 2341 | }; | COMMENT |
| LOW | src/interface/desktop/assets/markdown-it.min.js | 2441 | } | COMMENT |
| LOW | src/interface/desktop/assets/markdown-it.min.js | 2861 | // .toLowerCase().toUpperCase() should get rid of all differences | COMMENT |
| LOW | src/interface/desktop/assets/markdown-it.min.js | 2881 | // and .toUpperCase() doesn't change ϴ (already uppercase). | COMMENT |
| LOW | src/interface/desktop/assets/markdown-it.min.js | 4601 | // ``` | COMMENT |
| LOW | src/interface/desktop/assets/markdown-it.min.js | 5461 | COMMENT | |
| LOW | src/interface/desktop/assets/markdown-it.min.js | 5481 | this.bsCount = []; | COMMENT |
| LOW | src/interface/desktop/assets/markdown-it.min.js | 6901 | // Defined via punctuation & spaces to save space | COMMENT |
| LOW | src/interface/desktop/assets/markdown-it.min.js | 7881 | // Convert '\n' in paragraphs into <br> | COMMENT |
| LOW | src/khoj/app/settings.py | 241 | COMMENT | |
| LOW | src/khoj/processor/content/org_mode/orgnode.py | 1 | # Copyright (c) 2010 Charles Cave | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/khoj/routers/research.py | 277 | CODE | |
| LOW | src/khoj/routers/research.py | 476 | CODE | |
| LOW | src/khoj/routers/helpers.py | 822 | CODE | |
| LOW | src/khoj/routers/helpers.py | 1070 | CODE | |
| LOW | src/khoj/routers/helpers.py | 1213 | CODE | |
| LOW | src/khoj/routers/helpers.py | 1288 | CODE | |
| LOW | src/khoj/routers/helpers.py | 1399 | CODE | |
| LOW | src/khoj/routers/helpers.py | 1636 | CODE | |
| LOW | src/khoj/routers/helpers.py | 1732 | CODE | |
| LOW | src/khoj/routers/helpers.py | 1802 | CODE | |
| LOW | src/khoj/routers/helpers.py | 1903 | CODE | |
| LOW | src/khoj/processor/tools/online_search.py | 56 | CODE | |
| LOW | src/khoj/processor/tools/online_search.py | 440 | CODE | |
| LOW | src/khoj/processor/operator/__init__.py | 34 | CODE | |
| LOW | src/khoj/processor/conversation/utils.py | 541 | CODE | |
| LOW | src/khoj/processor/conversation/utils.py | 677 | CODE | |
| LOW | src/khoj/processor/conversation/anthropic/utils.py | 51 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_text_search.py | 171 | git clone https://github.com/khoj-ai/khoj && cd khoj | CODE |
| HIGH | tests/helpers.py | 128 | git clone https://github.com/khoj-ai/khoj && cd khoj | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/interface/obsidian/src/main.ts | 239 | // Use a more robust way to get the input, or ensure it's always present after onOpen | COMMENT |
| MEDIUM | src/khoj/routers/research.py | 296 | """Given a query, determine which of the available tools the agent should use in order to answer appropriately.""" | STRING |
| MEDIUM | src/khoj/utils/initialization.py | 217 | # TODO: This is hacky. Will be replaced with more robust solution based on provider type enum | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/khoj/processor/operator/grounding_agent_uitars.py | 968 | # Step 1: Split the string into individual actions | COMMENT |
| LOW⚡ | src/khoj/processor/operator/grounding_agent_uitars.py | 975 | # Step 2: Extract coordinates (start_box or end_box) using regex | COMMENT |
| LOW | src/khoj/processor/operator/grounding_agent_uitars.py | 986 | # Step 5: Reconstruct the final string | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/khoj/processor/operator/grounding_agent_uitars.py | 968 | # Step 1: Split the string into individual actions | COMMENT |
| LOW⚡ | src/khoj/processor/operator/grounding_agent_uitars.py | 975 | # Step 2: Extract coordinates (start_box or end_box) using regex | COMMENT |
| LOW | src/khoj/processor/operator/grounding_agent_uitars.py | 986 | # Step 5: Reconstruct the final string | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 12 | CODE | |
| LOW | tests/conftest.py | 12 | CODE | |
| LOW | tests/test_pdf_to_entries.py | 1 | CODE | |
| LOW | tests/test_client.py | 9 | CODE | |
| LOW | src/khoj/utils/config.py | 2 | CODE | |
| LOW | src/khoj/utils/helpers.py | 1 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_conversation_utils.py | 45 | image_content_item = {"type": "image_url", "image_url": {"url": "placeholder"}} | CODE |
| LOW | src/interface/desktop/assets/purify.min.js | 2 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define | CODE |
| LOW | src/khoj/database/adapters/__init__.py | 789 | default_personality = prompts.personality.format(current_date="placeholder", day_of_week="placeholder") | CODE |
| LOW | src/khoj/utils/initialization.py | 47 | openai_api_key = os.getenv("OPENAI_API_KEY", "placeholder" if openai_base_url else None) | CODE |