Complete API layer for private AI applications on local models: RAG, skills, tools, MCP, text-to-sql, and more. Works with any OpenAI-compatible inference server.
This report presents the forensic synthetic code analysis of zylon-ai/private-gpt, a Python project with 57,332 GitHub stars. SynthScan v2.0 examined 154,511 lines of code across 753 source files, recording 2471 pattern matches distributed across 18 syntactic categories. The overall adjusted score of 20.0 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 2471 distinct pattern matches across 18 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 |
|---|---|---|---|---|
| LOW | ui/index.html | 3963 | function appearanceBriefHasContent(prefix) { | CODE |
| LOW | ui/index.html | 4402 | function setAppearanceGeneratorStatus(prefix, message = "") { | CODE |
| LOW | ui/index.html | 4412 | function appearanceGeneratorPrompt(brief) { | CODE |
| LOW | ui/index.html | 4459 | function normalizeAppearanceSuggestion(candidate, fallbackBrief = "") { | CODE |
| LOW | ui/index.html | 4536 | function onboardingErrorToastMessage(check, fallback) { | CODE |
| LOW | ui/index.html | 4815 | function normalizeDocumentBackedSettings(chat) { | CODE |
| LOW | ui/index.html | 4835 | function normalizeChatContextSelections() { | CODE |
| LOW | ui/index.html | 5492 | function collectToolResultCitationSources(content, context) { | CODE |
| LOW | ui/index.html | 5541 | function renderMarkdownWithCitations(text, citationContext, explicitCitations = []) { | CODE |
| LOW | ui/index.html | 5727 | function parseMarkdownTableAlignments(line) { | CODE |
| LOW | ui/index.html | 6897 | function openProductionNoticeModal() { | CODE |
| LOW | ui/index.html | 6976 | function readSettingsConnectionForm() { | CODE |
| LOW | ui/index.html | 6991 | function readOnboardingConnectionForm() { | CODE |
| LOW | ui/index.html | 7022 | function saveAppearanceSettingsFrom(prefix) { | CODE |
| LOW | ui/index.html | 7098 | async function generateAppearanceFromBrief(prefix) { | CODE |
| LOW | private_gpt/initialize.py | 21 | def download_nltk_package_if_not_present( | CODE |
| LOW | private_gpt/initialize.py | 48 | def unzip_download_nltk_package_if_not_present( | CODE |
| LOW | private_gpt/initialize.py | 117 | def _initialize_arize_phoenix(settings: "Settings") -> None: | CODE |
| LOW | private_gpt/di.py | 30 | def create_application_injector() -> Injector: | CODE |
| LOW | private_gpt/global_handler.py | 53 | async def request_validation_exception_handler( | CODE |
| LOW | private_gpt/global_handler.py | 67 | async def request_validation_exception_adapter( | CODE |
| LOW | private_gpt/launcher.py | 188 | async def inject_injector_middleware(request: Request, call_next: Any) -> Any: | CODE |
| LOW | private_gpt/settings/settings_loader.py | 49 | def load_settings_from_profile(profile: str) -> dict[str, Any]: | CODE |
| LOW | private_gpt/settings/settings_loader.py | 81 | def discover_models_from_environment( | CODE |
| LOW | private_gpt/settings/settings.py | 1127 | def url_with_default_database(self) -> str: | CODE |
| LOW | private_gpt/chat/input_models.py | 367 | def convert_from_llama_index_messages( | CODE |
| LOW | private_gpt/chat/input_models.py | 864 | def _convert_into_llama_index_messages( | CODE |
| LOW | private_gpt/chat/input_models.py | 943 | def _convert_assistant_message( | CODE |
| LOW | private_gpt/chat/input_models.py | 1205 | def __get_pydantic_json_schema__(cls, core_schema: Any, handler: Any) -> Any: | CODE |
| LOW | private_gpt/chat/schema_models.py | 52 | def _handle_leading_underscores(field_name: str) -> str: | CODE |
| LOW | private_gpt/chat/schema_models.py | 68 | def _handle_reserved_basemodel_attributes(field_name: str) -> str: | CODE |
| LOW | private_gpt/chat/schema_models.py | 84 | def _validate_json_schema_item(schema: dict[str, Any], strict: bool = True) -> None: | CODE |
| LOW | private_gpt/chat/schema_models.py | 153 | def _resolve_field_name_collisions(field_name: str, used_names: set[str]) -> str: | CODE |
| LOW | private_gpt/chat/schema_models.py | 365 | def create_model_from_json_schema( | CODE |
| LOW | private_gpt/artifact_index/base_artifact_index.py | 588 | async def _aget_node_with_embedding( | CODE |
| LOW | private_gpt/artifact_index/base_artifact_index.py | 651 | async def _aget_node_with_embedding( | CODE |
| LOW | private_gpt/server/tools/tool_service.py | 94 | async def tabular_data_analysis_tool( | CODE |
| LOW | private_gpt/server/chat/chat_models.py | 255 | def __get_pydantic_json_schema__(cls, core_schema: Any, handler: Any) -> Any: | CODE |
| LOW | private_gpt/server/chat/chat_facade.py | 28 | async def create_chat_event_generator( | CODE |
| LOW | private_gpt/server/chat/chat_request_mapper.py | 95 | async def _configure_output_cls_from_json_schema( | CODE |
| LOW | …gpt/server/chat/interceptors/multimodal_interceptor.py | 158 | def resolve_multimodal_models( | CODE |
| LOW | …t/server/chat/interceptors/condensation_interceptor.py | 118 | async def _consume_and_emit_with_min_duration( | CODE |
| LOW⚡ | …r/chat/interceptors/platform_guidelines_interceptor.py | 109 | def _inject_tool_instructions( | CODE |
| LOW⚡ | …r/chat/interceptors/platform_guidelines_interceptor.py | 196 | def _has_skill_management_tool(tools: list[ToolSpec]) -> bool: | CODE |
| LOW⚡ | …r/chat/interceptors/platform_guidelines_interceptor.py | 217 | def _get_citation_guidelines_content( | CODE |
| LOW | …pt/server/chat/interceptors/skills_loop_interceptor.py | 44 | def _resolve_active_skill_names( | CODE |
| LOW | private_gpt/server/chat/interceptors/mcp_interceptor.py | 25 | def _extract_original_exception(exc: BaseException) -> BaseException: | CODE |
| LOW | private_gpt/server/ingest/ingest_service.py | 49 | def _make_vector_artifact_index( | CODE |
| LOW | private_gpt/server/ingest/ingest_service.py | 62 | def initialize_artifact_indices(self, collection: str, artifact: str) -> None: | CODE |
| LOW | private_gpt/server/completion/completion_service.py | 70 | def extract_text_from_content(content: Sequence[object]) -> str: | CODE |
| LOW | private_gpt/server/chat_async/chat_async_facade.py | 69 | async def _cancellable_stream_generator( | CODE |
| LOW | private_gpt/server/content/content_service.py | 270 | async def retrieve_document_nodes_async( | CODE |
| LOW | private_gpt/server/content/content_service.py | 293 | def retrieve_document_content( | CODE |
| LOW | private_gpt/server/content/content_service.py | 316 | async def retrieve_chunked_document_content( | CODE |
| LOW | private_gpt/server/content/content_router.py | 561 | async def chunked_content_retrieval( | CODE |
| LOW | private_gpt/server/mcp/mcp_service.py | 54 | def _load_call_tool_result_type() -> type["CallToolResult"]: | CODE |
| LOW | private_gpt/server/mcp/mcp_service.py | 84 | def get_mcp_tool_result_content(value: object) -> list[object] | None: | CODE |
| LOW | private_gpt/server/mcp/mcp_service.py | 147 | def convert_mcp_blocks_to_llama_index(block: object) -> ContentBlock | None: | CODE |
| LOW | private_gpt/server/primitives/primitives_service.py | 52 | def __get_pydantic_json_schema__( | CODE |
| LOW | …ivate_gpt/server/primitives/semantic_search_service.py | 94 | def retrieve_semantic_relevant( | CODE |
| 1196 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | pyproject.toml | 56 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 58 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 81 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 83 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 93 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 95 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 159 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 161 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 171 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 173 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 215 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 217 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 228 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 290 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 292 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 297 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | pyproject.toml | 299 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 129 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 131 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 143 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 145 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 201 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 203 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 246 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 248 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 274 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 276 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …r/chat/interceptors/platform_guidelines_interceptor.py | 105 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …r/chat/interceptors/platform_guidelines_interceptor.py | 107 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …r/chat/interceptors/platform_guidelines_interceptor.py | 206 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …r/chat/interceptors/platform_guidelines_interceptor.py | 208 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …pt/components/llm/tokenizers/models/model_discovery.py | 109 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …pt/components/llm/tokenizers/models/model_discovery.py | 111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …pt/components/llm/tokenizers/models/model_discovery.py | 158 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …pt/components/llm/tokenizers/models/model_discovery.py | 160 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …te_gpt/components/llm/tokenizers/models/model_cache.py | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …te_gpt/components/llm/tokenizers/models/model_cache.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …te_gpt/components/llm/tokenizers/models/model_cache.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …te_gpt/components/llm/tokenizers/models/model_cache.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …te_gpt/components/llm/tokenizers/models/model_cache.py | 256 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …te_gpt/components/llm/tokenizers/models/model_cache.py | 258 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | private_gpt/components/llm/custom/openai.py | 194 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | private_gpt/components/llm/custom/openai.py | 196 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | private_gpt/components/llm/custom/openairesponses.py | 245 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | private_gpt/components/llm/custom/openairesponses.py | 247 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | private_gpt/components/context/models/context_stack.py | 31 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | private_gpt/components/context/models/context_stack.py | 33 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | private_gpt/components/context/models/context_stack.py | 85 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | private_gpt/components/context/models/context_stack.py | 87 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …expansion/tree_expansion_replacement_post_processor.py | 118 | # ===================================================================== | COMMENT |
| MEDIUM⚡ | …expansion/tree_expansion_replacement_post_processor.py | 120 | # ===================================================================== | COMMENT |
| MEDIUM⚡ | …expansion/tree_expansion_replacement_post_processor.py | 126 | # ===================================================================== | COMMENT |
| MEDIUM⚡ | …expansion/tree_expansion_replacement_post_processor.py | 128 | # ===================================================================== | COMMENT |
| MEDIUM⚡ | …expansion/tree_expansion_replacement_post_processor.py | 132 | # ===================================================================== | COMMENT |
| MEDIUM⚡ | …expansion/tree_expansion_replacement_post_processor.py | 134 | # ===================================================================== | COMMENT |
| 126 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | private_gpt/global_handler.py | 39 | except Exception as exc: | CODE |
| LOW | private_gpt/chat/input_models.py | 190 | except Exception as e: | CODE |
| LOW | private_gpt/chat/input_models.py | 207 | except Exception as e: | CODE |
| LOW | private_gpt/chat/input_models.py | 1145 | except Exception as e: | CODE |
| LOW | private_gpt/server/tools/tool_service.py | 87 | except Exception as e: | CODE |
| LOW | private_gpt/server/tools/tool_service.py | 123 | except Exception as e: | CODE |
| LOW | private_gpt/server/tools/tool_service.py | 155 | except Exception as e: | CODE |
| LOW | private_gpt/server/tools/tool_service.py | 177 | except Exception as e: | CODE |
| LOW | private_gpt/server/tools/tool_service.py | 198 | except Exception as e: | CODE |
| LOW | private_gpt/server/chat/chat_service.py | 214 | except Exception as e: | CODE |
| LOW | private_gpt/server/chat/chat_service.py | 226 | except Exception as e: | CODE |
| LOW | …t/server/chat/interceptors/condensation_interceptor.py | 200 | except Exception as e: | CODE |
| LOW | …pt/server/chat/interceptors/skills_loop_interceptor.py | 156 | except Exception as exc: | CODE |
| LOW | private_gpt/server/chat/interceptors/mcp_interceptor.py | 96 | except Exception as e: | CODE |
| LOW | private_gpt/server/chat/interceptors/mcp_interceptor.py | 144 | except Exception as e: | CODE |
| LOW | …/chat/interceptors/schema_coercing_tool_interceptor.py | 324 | except Exception as e: | CODE |
| LOW | …ver/chat/interceptors/skills_validation_interceptor.py | 54 | except Exception: | CODE |
| LOW | private_gpt/server/ingest/convert_service.py | 89 | except Exception as e: | CODE |
| LOW | private_gpt/server/ingest/ingest_service.py | 148 | except Exception as e: | CODE |
| LOW | private_gpt/server/ingest/ingest_service.py | 220 | except Exception as e: | CODE |
| LOW | private_gpt/server/ingest/uri_loader.py | 52 | except Exception: | CODE |
| LOW | private_gpt/server/chat_async/chat_async_facade.py | 92 | except Exception as cleanup_error: | CODE |
| LOW | private_gpt/server/utils/artifact_input.py | 30 | except Exception: | CODE |
| LOW | private_gpt/server/utils/artifact_input.py | 39 | except Exception: | CODE |
| LOW | private_gpt/server/utils/artifact_input.py | 99 | except Exception: | CODE |
| LOW | private_gpt/server/mcp/_runtime.py | 144 | except Exception as e: | CODE |
| LOW | private_gpt/server/mcp/_runtime.py | 163 | except Exception as e: | CODE |
| LOW | private_gpt/server/mcp/_runtime.py | 174 | except Exception as e: | CODE |
| LOW | private_gpt/server/mcp/_runtime.py | 186 | except Exception as e: | CODE |
| LOW | private_gpt/server/files/file_service.py | 31 | except Exception: | CODE |
| LOW⚡ | private_gpt/server/files/file_service.py | 43 | except Exception as e: | CODE |
| LOW | private_gpt/server/skills/skills_files.py | 177 | except Exception as exc: | CODE |
| LOW | private_gpt/utils/async_utils.py | 67 | except Exception as e: | CODE |
| LOW | private_gpt/utils/async_utils.py | 86 | except Exception as e: | CODE |
| LOW | private_gpt/utils/async_utils.py | 93 | except Exception as e: | CODE |
| LOW | private_gpt/utils/pool.py | 55 | except Exception: | CODE |
| LOW | private_gpt/utils/pool.py | 104 | except Exception as e: | CODE |
| LOW | private_gpt/utils/pool.py | 153 | except Exception: | CODE |
| LOW | private_gpt/utils/pool.py | 202 | except Exception as e: | CODE |
| LOW | private_gpt/cli/commands/run.py | 40 | except Exception: | CODE |
| LOW | private_gpt/cli/commands/run.py | 114 | except Exception: | CODE |
| LOW | private_gpt/components/database/procedure_inspector.py | 117 | except Exception: | STRING |
| LOW | private_gpt/components/database/procedure_inspector.py | 205 | except Exception: | STRING |
| LOW | private_gpt/components/database/procedure_inspector.py | 285 | except Exception: | STRING |
| LOW | private_gpt/components/database/table_like_inspector.py | 96 | except Exception: | CODE |
| LOW | private_gpt/components/database/table_like_inspector.py | 109 | except Exception: | CODE |
| LOW | private_gpt/components/database/table_like_inspector.py | 132 | except Exception: | CODE |
| LOW | private_gpt/components/database/table_like_inspector.py | 142 | except Exception: | CODE |
| LOW | private_gpt/components/database/function_inspector.py | 118 | except Exception: | STRING |
| LOW | private_gpt/components/database/function_inspector.py | 206 | except Exception: | STRING |
| LOW | private_gpt/components/database/function_inspector.py | 288 | except Exception: | STRING |
| LOW | private_gpt/components/tools/binary_block_decorators.py | 68 | except Exception as e: | CODE |
| LOW | private_gpt/components/tools/binary_block_decorators.py | 138 | except Exception as e: | CODE |
| LOW | private_gpt/components/tools/binary_block_decorators.py | 166 | except Exception: | CODE |
| LOW | …omponents/tools/builders/present_files_tool_builder.py | 80 | except Exception as exc: | CODE |
| LOW | private_gpt/components/llm/llm_component.py | 87 | except Exception as e: | CODE |
| LOW | private_gpt/components/llm/discovery.py | 65 | except Exception as exc: | CODE |
| LOW | private_gpt/components/llm/discovery.py | 94 | except Exception as exc: | CODE |
| LOW | private_gpt/components/llm/discovery.py | 118 | except Exception as exc: | CODE |
| LOW | private_gpt/components/llm/utils.py | 17 | except Exception: | CODE |
| 161 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | private_gpt/settings/settings.py | 1182 | image_mode: Literal["embedded", "placeholder"] = Field( | CODE |
| LOW | private_gpt/settings/settings.py | 1183 | "placeholder", | CODE |
| LOW | private_gpt/server/ingest/convert_router.py | 33 | {"file_name": "document.docx", "author": "John Doe"}, | CODE |
| LOW | private_gpt/server/ingest/ingest_router.py | 111 | "author": "John Doe", | CODE |
| LOW | private_gpt/components/chunk/models.py | 82 | "author": "John Doe", | CODE |
| LOW⚡ | tests/server/chat/test_schema_models.py | 1123 | instance = model.model_validate({"name": "John Doe"}) | CODE |
| LOW⚡ | tests/server/chat/test_schema_models.py | 1124 | assert instance.name == "John Doe" | CODE |
| LOW | tests/server/chat/test_schema_models.py | 228 | "name": "John Doe", | CODE |
| LOW | tests/server/chat/test_schema_models.py | 1583 | "street": "123 Main St", | CODE |
| LOW⚡ | tests/server/chat/test_chat_routes.py | 60 | tool_kwargs={"query": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW⚡ | tests/server/chat/test_chat_routes.py | 60 | tool_kwargs={"query": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW⚡ | tests/server/chat/test_chat_routes.py | 64 | "Lorem ipsum dolor sit amet", | CODE |
| LOW⚡ | tests/server/chat/test_chat_routes.py | 64 | "Lorem ipsum dolor sit amet", | CODE |
| LOW⚡ | tests/server/chat/test_chat_routes.py | 1258 | tool_kwargs={"_query": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW⚡ | tests/server/chat/test_chat_routes.py | 1258 | tool_kwargs={"_query": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW⚡ | tests/server/chat/test_chat_routes.py | 2038 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW⚡ | tests/server/chat/test_chat_routes.py | 2038 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW⚡ | tests/server/chat/test_chat_routes.py | 2048 | messages=[MessageInput(content="Lorem ipsum", role="user")], | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 165 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 165 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 179 | messages=[MessageInput(content="Lorem ipsum", role="user")], | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 226 | messages=[MessageInput(content="Lorem ipsum", role="user")], | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 252 | messages=[MessageInput(content="Lorem ipsum", role="user")], | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 292 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 292 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 306 | messages=[MessageInput(content="Lorem ipsum", role="user")], | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 354 | messages=[MessageInput(content="Lorem ipsum", role="user")], | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 408 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 408 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 424 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 424 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 443 | messages=[MessageInput(content="Lorem ipsum", role="user")], | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 513 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 513 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 530 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 530 | "value": "Lorem ipsum dolor sit amet", | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 550 | messages=[MessageInput(content="Lorem ipsum", role="user")], | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 599 | messages=[MessageInput(content="Lorem ipsum", role="user")], | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 639 | messages=[MessageInput(content="Lorem ipsum", role="user")], | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 1822 | tool_kwargs={"_query": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 1822 | tool_kwargs={"_query": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 1863 | tool_kwargs={"query": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 1863 | tool_kwargs={"query": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW | tests/server/chat/test_chat_routes.py | 1999 | messages=[MessageInput(content="Lorem ipsum", role="user")], | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 85 | tool_kwargs={"query": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 85 | tool_kwargs={"query": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 90 | result = [list(tool_iterator()), ["Lorem ipsum dolor sit amet"]] | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 90 | result = [list(tool_iterator()), ["Lorem ipsum dolor sit amet"]] | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 260 | ([], "Lorem ipsum dolor sit amet", False), | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 260 | ([], "Lorem ipsum dolor sit amet", False), | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 261 | ([create_semantic_tool()], "Lorem ipsum dolor sit amet", True), | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 261 | ([create_semantic_tool()], "Lorem ipsum dolor sit amet", True), | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 262 | ([create_weather_tool()], "Lorem ipsum dolor sit amet", False), | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 262 | ([create_weather_tool()], "Lorem ipsum dolor sit amet", False), | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 299 | ([], "Lorem ipsum dolor sit amet", False), | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 299 | ([], "Lorem ipsum dolor sit amet", False), | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 300 | ([create_semantic_tool()], "Lorem ipsum dolor sit amet", True), | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 300 | ([create_semantic_tool()], "Lorem ipsum dolor sit amet", True), | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 301 | ([create_weather_tool()], "Lorem ipsum dolor sit amet", False), | CODE |
| LOW⚡ | tests/server/chat/anthropic/test_anthropic_client.py | 301 | ([create_weather_tool()], "Lorem ipsum dolor sit amet", False), | CODE |
| 157 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | private_gpt/initialize.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/di.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/di.py | 82 | def set_injector(injector: Injector) -> None: | CODE |
| LOW | private_gpt/di.py | 125 | def set_global_injector(injector: Injector) -> None: | CODE |
| LOW | private_gpt/docs.py | 42 | def update_refs(obj: Any) -> None: | CODE |
| LOW | private_gpt/global_handler.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/launcher.py | 62 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/settings/settings_loader.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/artifact_index/vector_artifact_index.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/artifact_index/base_artifact_index.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/server/tools/tool_service.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | …t/server/chat/interceptors/condensation_interceptor.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | …r/chat/interceptors/platform_guidelines_interceptor.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | …server/chat/interceptors/default_values_interceptor.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | …pt/server/chat/interceptors/skills_loop_interceptor.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | …/chat/interceptors/schema_coercing_tool_interceptor.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/server/ingest/convert_service.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/server/ingest/ingest_router.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/server/ingest/ingest_service.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/server/chat_async/chat_async_facade.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/server/utils/auth.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/utils/time.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/utils/concurrency.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/utils/eta.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/cli/commands/serve.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | …vate_gpt/components/node_store/node_store_component.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | …gpt/components/node_store/patched_postgres_kv_store.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/tools/binary_block_decorators.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | …/components/tools/processors/tabular_data_processor.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ols/processors/anthropic_tool_translation_processor.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/llm/llm_component.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/llm/discovery.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/llm/prompt_helper.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/llm/tokenizers/mistral.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 45 | __all__ = [ | CODE |
| LOW | …t/components/llm/tokenizers/models/model_downloader.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | …pt/components/llm/tokenizers/models/model_discovery.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | …gpt/components/llm/tokenizers/models/auto_discovery.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | …te_gpt/components/llm/tokenizers/models/model_cache.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | …te_gpt/components/llm/tokenizers/models/model_cache.py | 261 | def set_model_permissions(path: Path) -> None: | CODE |
| LOW | private_gpt/components/llm/prompt_styles/__init__.py | 1 | __all__ = [ | CODE |
| LOW | …onents/llm/prompt_styles/chat_template_prompt_style.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | …_gpt/components/llm/prompt_styles/prompt_style_base.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | …gpt/components/llm/text_parsers/harmony_text_parser.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/llm/factories/base.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/llm/custom/openai.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/llm/custom/openairesponses.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/llm/custom/sagemaker.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/llm/custom/structured_mixin.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/broker/blocking_publisher.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/broker/broker_component.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/context/services/__init__.py | 7 | __all__ = ["ContextStackBuilder"] | CODE |
| LOW | …/chat/processors/chat_history/memory/tldr_processor.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/model_discovery/client.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | …e_gpt/components/model_discovery/providers/fallback.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/web/web_scraper_service.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | …te_gpt/components/web/web_search/web_search_service.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ivate_gpt/components/web/web_search/providers/brave.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | …vate_gpt/components/web/web_search/providers/cached.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | private_gpt/components/web/web_search/providers/mock.py | 9 | logger = logging.getLogger(__name__) | CODE |
| 105 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | private_gpt/di.py | 37 | CODE | |
| LOW | private_gpt/di.py | 99 | CODE | |
| LOW | private_gpt/docs.py | 12 | CODE | |
| LOW | private_gpt/docs.py | 16 | CODE | |
| LOW | private_gpt/docs.py | 61 | CODE | |
| LOW | private_gpt/docs.py | 42 | CODE | |
| LOW | private_gpt/chat/input_models.py | 161 | CODE | |
| LOW | private_gpt/chat/input_models.py | 392 | CODE | |
| LOW | private_gpt/chat/input_models.py | 444 | CODE | |
| LOW | private_gpt/chat/input_models.py | 497 | CODE | |
| LOW | private_gpt/chat/input_models.py | 595 | CODE | |
| LOW | private_gpt/chat/input_models.py | 615 | CODE | |
| LOW | private_gpt/chat/input_models.py | 662 | CODE | |
| LOW | private_gpt/chat/input_models.py | 879 | CODE | |
| LOW | private_gpt/chat/input_models.py | 943 | CODE | |
| LOW | private_gpt/chat/input_models.py | 1219 | CODE | |
| LOW | private_gpt/chat/input_models.py | 1267 | CODE | |
| LOW | private_gpt/artifact_index/base_artifact_index.py | 289 | CODE | |
| LOW | private_gpt/server/chat/chat_models.py | 282 | CODE | |
| LOW | …/server/chat/interceptors/document_file_interceptor.py | 46 | CODE | |
| LOW | …gpt/server/chat/interceptors/multimodal_interceptor.py | 51 | CODE | |
| LOW | …t/server/chat/interceptors/condensation_interceptor.py | 45 | CODE | |
| LOW | …chat/interceptors/skill_tool_visibility_interceptor.py | 46 | CODE | |
| LOW | …pt/server/chat/interceptors/skills_loop_interceptor.py | 44 | CODE | |
| LOW | …pt/server/chat/interceptors/skills_loop_interceptor.py | 95 | CODE | |
| LOW | private_gpt/server/chat/interceptors/mcp_interceptor.py | 51 | CODE | |
| LOW | …/chat/interceptors/schema_coercing_tool_interceptor.py | 53 | CODE | |
| LOW | …/chat/interceptors/schema_coercing_tool_interceptor.py | 158 | CODE | |
| LOW | …/chat/interceptors/schema_coercing_tool_interceptor.py | 260 | CODE | |
| LOW | private_gpt/server/ingest/convert_service.py | 76 | CODE | |
| LOW | private_gpt/server/ingest/ingest_service.py | 127 | CODE | |
| LOW | private_gpt/server/content/content_service.py | 103 | CODE | |
| LOW | private_gpt/utils/async_utils.py | 25 | CODE | |
| LOW | private_gpt/utils/tokens.py | 65 | CODE | |
| LOW | private_gpt/utils/tokens.py | 92 | CODE | |
| LOW | private_gpt/utils/tokens.py | 103 | CODE | |
| LOW | private_gpt/utils/batches.py | 17 | CODE | |
| LOW | private_gpt/utils/batches.py | 58 | CODE | |
| LOW | private_gpt/components/database/procedure_inspector.py | 32 | CODE | |
| LOW | private_gpt/components/database/procedure_inspector.py | 121 | CODE | |
| LOW | private_gpt/components/database/procedure_inspector.py | 209 | CODE | |
| LOW | private_gpt/components/database/function_inspector.py | 33 | CODE | |
| LOW | private_gpt/components/database/function_inspector.py | 122 | CODE | |
| LOW | private_gpt/components/database/function_inspector.py | 210 | CODE | |
| LOW | …t/components/tools/builders/semantic_search_builder.py | 213 | CODE | |
| LOW | …t/components/tools/builders/semantic_search_builder.py | 235 | CODE | |
| LOW | …pt/components/tools/builders/database_query_builder.py | 177 | CODE | |
| LOW | …pt/components/tools/builders/database_query_builder.py | 232 | CODE | |
| LOW | …_gpt/components/tools/builders/tabular_data_builder.py | 247 | CODE | |
| LOW | …_gpt/components/tools/builders/tabular_data_builder.py | 266 | CODE | |
| LOW | private_gpt/components/llm/tokenizers/mistral.py | 65 | CODE | |
| LOW | private_gpt/components/llm/tokenizers/mistral.py | 106 | CODE | |
| LOW | private_gpt/components/llm/tokenizers/mistral.py | 202 | CODE | |
| LOW | private_gpt/components/llm/tokenizers/mistral.py | 688 | CODE | |
| LOW | private_gpt/components/llm/tokenizers/mistral.py | 773 | CODE | |
| LOW | …pt/components/llm/tokenizers/models/model_discovery.py | 184 | CODE | |
| LOW | …te_gpt/components/llm/tokenizers/models/model_cache.py | 138 | CODE | |
| LOW | private_gpt/components/llm/custom/openai.py | 83 | CODE | |
| LOW | private_gpt/components/llm/custom/openairesponses.py | 149 | CODE | |
| LOW | private_gpt/components/llm/custom/sagemaker.py | 238 | CODE | |
| 79 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | private_gpt/chat/schema_models.py | 438 | # Create the base dynamic model | COMMENT |
| MEDIUM | private_gpt/server/utils/auth.py | 53 | # Define a dummy authentication method that always returns True. | COMMENT |
| MEDIUM | private_gpt/utils/dataframe.py | 19 | # Create the header row and separator row | COMMENT |
| MEDIUM | private_gpt/utils/dataframe.py | 23 | # Create the data rows | COMMENT |
| MEDIUM⚡ | private_gpt/utils/random.py | 7 | # Create a namespace UUID (using namespace_dns as a random choice) | COMMENT |
| MEDIUM⚡ | private_gpt/utils/random.py | 10 | # Create a UUID using the input string within the namespace | COMMENT |
| MEDIUM | …expansion/tree_expansion_replacement_post_processor.py | 195 | # Create a linear range from min to max | COMMENT |
| MEDIUM | private_gpt/components/readers/nodes/tree_node.py | 499 | # Create a lookup dictionary for all nodes | COMMENT |
| MEDIUM | private_gpt/components/readers/nodes/tree_node.py | 536 | # Create a list of root nodes | COMMENT |
| MEDIUM | …e_gpt/components/readers/docling/docling_transforms.py | 43 | # Create a representation of images in text (if apply) | COMMENT |
| MEDIUM | …te_gpt/components/readers/pptx2md/slides_transforms.py | 69 | # Create a representation of images in text (if apply) | COMMENT |
| MEDIUM | tests/server/chat/anthropic/test_langchain_anthropic.py | 301 | # Create the Anthropic client with the mock HTTP client | COMMENT |
| MEDIUM | tests/components/web_search/test_brave_provider.py | 23 | # Create a minimal Settings object with web_search configuration | COMMENT |
| MEDIUM | tests/components/web_search/test_web_search_service.py | 24 | # Create a minimal Settings object with web_search configuration | COMMENT |
| MEDIUM | …s/components/llm/tokenizers/models/test_concurrency.py | 65 | # Create a cached model | COMMENT |
| MEDIUM | tests/components/llm/tokenizers/models/conftest.py | 107 | # Create the model in cache | COMMENT |
| MEDIUM | …components/postprocessor/test_prev_next_replacement.py | 41 | # Create a PrevNextReplacementPostProcessor instance | COMMENT |
| MEDIUM | …components/postprocessor/test_prev_next_replacement.py | 58 | # Create a set of 10 nodes with prev and next relations. | COMMENT |
| MEDIUM | …components/postprocessor/test_prev_next_replacement.py | 94 | # Create a PrevNextReplacementPostProcessor instance | COMMENT |
| MEDIUM | …sts/components/transforms/test_sentence_node_parser.py | 54 | # Create a root DocumentRoot node and a child TextNode. | COMMENT |
| MEDIUM⚡ | …sts/components/transforms/test_sentence_node_parser.py | 158 | # Create a long sentence that will exceed the 20-character chunk size. | STRING |
| MEDIUM⚡ | …sts/components/transforms/test_sentence_node_parser.py | 167 | # Create a DocumentRoot with a TextNode. | STRING |
| MEDIUM | tests/components/readers/nodes/test_node_structure.py | 28 | # Create a document tree with multiple node types | COMMENT |
| MEDIUM | tests/components/readers/nodes/test_node_structure.py | 39 | # Create a table | COMMENT |
| MEDIUM | tests/components/readers/nodes/test_node_structure.py | 70 | # Create a sample document tree | COMMENT |
| MEDIUM⚡ | tests/components/readers/nodes/test_node_structure.py | 96 | # Create a sample document tree | COMMENT |
| MEDIUM⚡ | tests/components/readers/nodes/test_node_structure.py | 99 | # Create a section | COMMENT |
| MEDIUM⚡ | tests/components/readers/nodes/test_node_structure.py | 106 | # Create a table | COMMENT |
| MEDIUM | tests/components/readers/nodes/test_node_structure.py | 137 | # Create a sample document tree | COMMENT |
| MEDIUM⚡ | tests/components/readers/nodes/test_node_structure.py | 179 | # Create a sample document tree | COMMENT |
| MEDIUM⚡ | tests/components/readers/nodes/test_node_structure.py | 182 | # Create a section | COMMENT |
| MEDIUM⚡ | tests/components/readers/nodes/test_node_structure.py | 189 | # Create a table | COMMENT |
| MEDIUM | tests/components/readers/nodes/test_node_structure.py | 263 | # Create a nested document tree | COMMENT |
| MEDIUM | tests/components/multimodality/test_describe_image.py | 39 | # Initialize parent class with only its expected parameters | COMMENT |
| MEDIUM | tests/components/multimodality/test_describe_image.py | 61 | # Create a minimal base64 encoded image (1x1 PNG) | COMMENT |
| MEDIUM | tests/components/multimodality/test_multimodality.py | 46 | # Initialize parent class with only its expected parameters | COMMENT |
| MEDIUM | tests/celery/test_base_task.py | 83 | # Create a mock request object | COMMENT |
| MEDIUM | tests/celery/test_notify.py | 50 | # Create a status class for testing | COMMENT |
| MEDIUM | tests/celery/test_notify.py | 81 | # Create a status class for testing | COMMENT |
| MEDIUM | tests/celery/test_notify.py | 170 | # Create a status class for testing | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | private_gpt/server/mcp/_runtime.py | 10 | CODE | |
| LOW | private_gpt/server/mcp/_runtime.py | 48 | CODE | |
| LOW | private_gpt/server/mcp/_runtime.py | 50 | CODE | |
| LOW | private_gpt/server/mcp/_runtime.py | 50 | CODE | |
| LOW | private_gpt/server/mcp/_runtime.py | 50 | CODE | |
| LOW | private_gpt/server/mcp/_runtime.py | 50 | CODE | |
| LOW | private_gpt/server/files/file_service.py | 1 | CODE | |
| LOW | private_gpt/server/files/file_models.py | 1 | CODE | |
| LOW | private_gpt/utils/mime.py | 3 | CODE | |
| LOW | private_gpt/utils/runner.py | 1 | CODE | |
| LOW | private_gpt/cli/main.py | 10 | CODE | |
| LOW | private_gpt/components/container_registry.py | 1 | CODE | |
| LOW | …ate_gpt/components/tools/builders/bash_tool_builder.py | 1 | CODE | |
| LOW | …/components/tools/builders/text_editor_tool_builder.py | 1 | CODE | |
| LOW | …omponents/tools/builders/present_files_tool_builder.py | 1 | CODE | |
| LOW | private_gpt/components/llm/discovery.py | 1 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 16 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 21 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 21 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 21 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 21 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 21 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 21 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 21 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 30 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 35 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 40 | CODE | |
| LOW | …ivate_gpt/components/llm/tokenizers/models/__init__.py | 40 | CODE | |
| LOW | …t/components/llm/tokenizers/models/model_downloader.py | 1 | CODE | |
| LOW | …pt/components/llm/tokenizers/models/model_discovery.py | 1 | CODE | |
| LOW | …te_gpt/components/llm/text_parsers/text_parser_base.py | 1 | CODE | |
| LOW | …gpt/components/llm/text_parsers/harmony_text_parser.py | 1 | CODE | |
| LOW | private_gpt/components/llm/custom/sagemaker.py | 2 | CODE | |
| LOW | private_gpt/components/context/services/__init__.py | 3 | CODE | |
| LOW | private_gpt/components/memory/memory.py | 5 | CODE | |
| LOW | private_gpt/components/model_discovery/service.py | 1 | CODE | |
| LOW | private_gpt/components/model_discovery/models.py | 1 | CODE | |
| LOW | private_gpt/components/model_discovery/strategies.py | 1 | CODE | |
| LOW | private_gpt/components/model_discovery/client.py | 1 | CODE | |
| LOW | private_gpt/components/model_discovery/url_utils.py | 1 | CODE | |
| LOW | …ivate_gpt/components/model_discovery/providers/vllm.py | 1 | CODE | |
| LOW | …e_gpt/components/model_discovery/providers/lmstudio.py | 1 | CODE | |
| LOW | …ate_gpt/components/model_discovery/providers/openai.py | 1 | CODE | |
| LOW | …e_gpt/components/model_discovery/providers/fallback.py | 1 | CODE | |
| LOW | …ate_gpt/components/model_discovery/providers/ollama.py | 1 | CODE | |
| LOW | …ivate_gpt/components/model_discovery/providers/base.py | 1 | CODE | |
| LOW | …e_gpt/components/model_discovery/providers/llamacpp.py | 1 | CODE | |
| LOW | …s/ingest/transformations/markdown_to_tree_transform.py | 1 | CODE | |
| LOW | …te_gpt/components/ingest/processors/df_preprocessor.py | 1 | CODE | |
| LOW | private_gpt/components/embedding/discovery.py | 1 | CODE | |
| LOW | private_gpt/components/storage/object_storage.py | 1 | CODE | |
| LOW | private_gpt/components/storage/s3_helper.py | 1 | CODE | |
| LOW | private_gpt/components/streaming/stream_component.py | 4 | CODE | |
| LOW | private_gpt/components/concurrency/registry.py | 1 | CODE | |
| LOW | private_gpt/components/concurrency/semaphore_manager.py | 3 | CODE | |
| LOW | …gpt/components/concurrency/memory_semaphore_manager.py | 3 | CODE | |
| LOW | private_gpt/components/sandbox/local.py | 1 | CODE | |
| LOW | private_gpt/components/sandbox/__init__.py | 1 | CODE | |
| LOW | private_gpt/components/sandbox/__init__.py | 1 | CODE | |
| LOW | private_gpt/components/sandbox/__init__.py | 1 | CODE | |
| 57 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | private_gpt/settings/settings.py | 351 | # Set max_workers to None if it is less than or equal to 0 | COMMENT |
| LOW | private_gpt/settings/settings.py | 1075 | # Check if visibility timeout is set when broker or backend is redis | COMMENT |
| LOW | private_gpt/chat/input_models.py | 748 | # Check if this TLDR group contains left-side TLDRs. | COMMENT |
| LOW | private_gpt/server/ingest/ingest_service.py | 81 | # Check if the vector index is initialized | COMMENT |
| LOW | private_gpt/server/ingest/ingest_service.py | 159 | # Check if the artifact index is initialized | COMMENT |
| LOW | private_gpt/server/ingest/ingest_service.py | 215 | # Check if the vector index is initialized | COMMENT |
| LOW⚡ | private_gpt/utils/random.py | 11 | # Set version to 4 for "random" UUID | COMMENT |
| LOW | private_gpt/components/llm/registry.py | 46 | # Check if any name is already registered | COMMENT |
| LOW | …vate_gpt/components/llm/decorators/reasoning_budget.py | 145 | # Check if reasoning_effort budget is enabled for this model | COMMENT |
| LOW | …vate_gpt/components/llm/decorators/reasoning_budget.py | 196 | # Check if reasoning_effort budget is enabled for this model | COMMENT |
| LOW | …vate_gpt/components/llm/decorators/reasoning_budget.py | 262 | # Check if reasoning_effort budget is enabled for this model | COMMENT |
| LOW | …vate_gpt/components/llm/decorators/reasoning_budget.py | 318 | # Check if reasoning_effort budget is enabled for this model | COMMENT |
| LOW | private_gpt/components/memory/trimming_memory.py | 209 | # Check if we need to preserve system message | COMMENT |
| LOW | …ents/chat/processors/chat_history/memory/tldr_utils.py | 90 | # Check if there's a next message and it's not a TLDR | COMMENT |
| LOW⚡ | private_gpt/components/ingest/utils.py | 261 | # Open the file and calculate the hash | COMMENT |
| LOW | private_gpt/components/ingest/ingest_helper.py | 26 | # Check if the file info has size | COMMENT |
| LOW | private_gpt/components/ingest/ingest_helper.py | 30 | # Check if the file info has extension | COMMENT |
| LOW⚡ | private_gpt/components/ingest/ingest_helper.py | 52 | # Check if the file is too large | COMMENT |
| LOW⚡ | private_gpt/components/ingest/ingest_helper.py | 59 | # Check if there is any error | COMMENT |
| LOW⚡ | private_gpt/components/ingest/ingest_helper.py | 63 | # Check if the file has too many pages | COMMENT |
| LOW⚡ | private_gpt/components/ingest/ingest_helper.py | 71 | # Check if the file is special | COMMENT |
| LOW⚡ | private_gpt/components/ingest/ingest_helper.py | 81 | # Check if the file is encrypted. | COMMENT |
| LOW | …ransformations/make_continuation_markdown_transform.py | 98 | # Check if the current lines have an odd number of code block markers | COMMENT |
| LOW | …te_gpt/components/ingest/processors/df_preprocessor.py | 56 | # Check if enough values can be converted to numeric | COMMENT |
| LOW | …te_gpt/components/ingest/processors/df_preprocessor.py | 109 | # Check if conversion was successful for most values | COMMENT |
| LOW | …ents/postprocessor/tree_expansion/document_expander.py | 242 | # Check if node has been processed in all directions | COMMENT |
| LOW | …ents/postprocessor/tree_expansion/document_expander.py | 316 | # Check if adding this child would exceed token limit | COMMENT |
| LOW | private_gpt/components/embedding/registry.py | 35 | # Check if any name is already registered | COMMENT |
| LOW | private_gpt/components/engines/citations/format.py | 171 | # Check if adding this doc (and possibly its header) | COMMENT |
| LOW | private_gpt/components/engines/citations/utils.py | 232 | # Add citation to the list | COMMENT |
| LOW | private_gpt/components/engines/citations/utils.py | 316 | # Check if we have a complete citation | COMMENT |
| LOW | private_gpt/components/readers/nodes/table_node.py | 44 | # Check if it's a number with decimal point | COMMENT |
| LOW⚡ | …components/readers/pptx2md/convert_slide_into_image.py | 883 | # Check if there are non-general zones (zone_id != 0) | COMMENT |
| LOW | private_gpt/celery/model.py | 96 | # Check if task is in progress, completed or failed | COMMENT |
| LOW | tests/server/ingest/test_ingest_routes.py | 153 | # Check if broker was called with the callback | COMMENT |
| LOW | tests/server/ingest/test_ingest_routes.py | 337 | # Check if broker was called with the callback | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | private_gpt/settings/settings_loader.py | 84 | Discover model configurations from environment variables. This function parses environment variables with the patte | STRING |
| HIGH | private_gpt/utils/async_utils.py | 31 | Convert a synchronous iterator to an async iterator with optional transformation. Args: iterator: The synch | STRING |
| HIGH | …ssors/chat_history/multimodality/image_preprocessor.py | 31 | Preprocess a message by extracting insights from images only. Args: main_llm: The primary LLM that will pro | STRING |
| HIGH | …ssors/chat_history/multimodality/audio_preprocessor.py | 31 | Preprocess a message by extracting insights from audio only. Args: main_llm: The primary LLM that will proc | STRING |
| HIGH | …ate_gpt/components/engines/citations/term_extractor.py | 46 | Detect the language of the input text. Args: text: Text to detect language for Returns: | STRING |
| HIGH | private_gpt/components/readers/docling/utils.py | 83 | Convert language code to EasyOCR format. Args: lang: Language code in format like 'en-US', 'es-ES' Ret | STRING |
| HIGH | private_gpt/components/readers/docling/utils.py | 101 | Convert language code to Tesseract format. Args: lang: Language code in format like 'en-US', 'es-ES' R | STRING |
| HIGH | private_gpt/components/readers/docling/utils.py | 119 | Convert language code to RapidOCR format. Args: lang: Language code in format like 'en-US', 'es-ES' Re | STRING |
| HIGH | private_gpt/components/readers/docling/utils.py | 137 | Convert language code to OCRMac format. Args: lang: Language code in format like 'en-US', 'es-ES' Retu | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | private_gpt/chat/schema_models.py | 402 | # If the field already has None in its type (from anyOf with null), respect that | COMMENT |
| HIGH | …te_gpt/components/ingest/processors/df_preprocessor.py | 152 | if not with_first.equals(without_first): | CODE |
| HIGH⚡ | tests/components/readers/nodes/test_table_nodes.py | 71 | assert deserialized.df.equals(valid_dataframe) | CODE |
| HIGH | tests/components/readers/nodes/test_table_nodes.py | 54 | assert node.df.equals(valid_dataframe) | CODE |
| HIGH | tests/components/readers/nodes/test_node_structure.py | 252 | assert table_obj.df.equals(table.df) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …ents/postprocessor/tree_expansion/document_expander.py | 196 | # Step 2: Expand the node in the specified direction | COMMENT |
| LOW⚡ | …ents/postprocessor/tree_expansion/document_expander.py | 199 | # Step 1: Mark the node as processed in the specified direction | COMMENT |
| LOW⚡ | …ents/postprocessor/tree_expansion/document_expander.py | 206 | # Step 3: Process the result | COMMENT |
| LOW⚡ | …ponents/postprocessor/tree_expansion/split_subtrees.py | 132 | # Step 1: Rebuild the tree structure from the flat list of nodes | COMMENT |
| LOW⚡ | …ponents/postprocessor/tree_expansion/split_subtrees.py | 135 | # Step 2: Create a new root node and add the subtrees as children | COMMENT |
| LOW | …ponents/postprocessor/tree_expansion/split_subtrees.py | 149 | # Step 3: Remove any nodes that are not within the subtree | COMMENT |
| LOW | …ponents/postprocessor/tree_expansion/split_subtrees.py | 173 | # Step 4: Prune the tree to remove any empty nodes | COMMENT |
| LOW⚡ | …components/readers/pptx2md/convert_slide_into_image.py | 863 | # Step 1: Apply basic filtering | COMMENT |
| LOW⚡ | …components/readers/pptx2md/convert_slide_into_image.py | 866 | # Step 2: Expand zones | COMMENT |
| LOW⚡ | …components/readers/pptx2md/convert_slide_into_image.py | 872 | # Step 3: Group zones by slide for processing | COMMENT |
| LOW⚡ | …components/readers/pptx2md/convert_slide_into_image.py | 881 | # Step 4: Process each slide separately | COMMENT |
| LOW | …components/readers/pptx2md/convert_slide_into_image.py | 897 | # Step 5: Remove high-overlap duplicates | COMMENT |
| LOW | private_gpt/celery/tasks/ingestion/extraction_tasks.py | 57 | # Firstly, we need to check if there is another task | COMMENT |
| LOW | …s/components/llm/tokenizers/models/test_concurrency.py | 409 | # Step 1: Initial tokenizer-only download | COMMENT |
| LOW | …s/components/llm/tokenizers/models/test_concurrency.py | 435 | # Step 2: Later, full model downloaded | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …ents/postprocessor/tree_expansion/document_expander.py | 196 | # Step 2: Expand the node in the specified direction | COMMENT |
| LOW⚡ | …ents/postprocessor/tree_expansion/document_expander.py | 199 | # Step 1: Mark the node as processed in the specified direction | COMMENT |
| LOW⚡ | …ents/postprocessor/tree_expansion/document_expander.py | 206 | # Step 3: Process the result | COMMENT |
| LOW⚡ | …ponents/postprocessor/tree_expansion/split_subtrees.py | 132 | # Step 1: Rebuild the tree structure from the flat list of nodes | COMMENT |
| LOW⚡ | …ponents/postprocessor/tree_expansion/split_subtrees.py | 135 | # Step 2: Create a new root node and add the subtrees as children | COMMENT |
| LOW | …ponents/postprocessor/tree_expansion/split_subtrees.py | 149 | # Step 3: Remove any nodes that are not within the subtree | COMMENT |
| LOW | …ponents/postprocessor/tree_expansion/split_subtrees.py | 173 | # Step 4: Prune the tree to remove any empty nodes | COMMENT |
| LOW⚡ | …components/readers/pptx2md/convert_slide_into_image.py | 863 | # Step 1: Apply basic filtering | COMMENT |
| LOW⚡ | …components/readers/pptx2md/convert_slide_into_image.py | 866 | # Step 2: Expand zones | COMMENT |
| LOW⚡ | …components/readers/pptx2md/convert_slide_into_image.py | 872 | # Step 3: Group zones by slide for processing | COMMENT |
| LOW⚡ | …components/readers/pptx2md/convert_slide_into_image.py | 881 | # Step 4: Process each slide separately | COMMENT |
| LOW | …components/readers/pptx2md/convert_slide_into_image.py | 897 | # Step 5: Remove high-overlap duplicates | COMMENT |
| LOW | …s/components/llm/tokenizers/models/test_concurrency.py | 409 | # Step 1: Initial tokenizer-only download | COMMENT |
| LOW | …s/components/llm/tokenizers/models/test_concurrency.py | 435 | # Step 2: Later, full model downloaded | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | private_gpt/launcher.py | 196 | CODE | |
| LOW | private_gpt/chat/schema_models.py | 241 | CODE | |
| LOW | private_gpt/chat/schema_models.py | 281 | CODE | |
| LOW | private_gpt/server/content/content_service.py | 316 | CODE | |
| LOW | private_gpt/server/primitives/primitives_router.py | 364 | CODE | |
| LOW | private_gpt/utils/retry.py | 14 | CODE | |
| LOW | …_gpt/components/tools/builders/tabular_data_builder.py | 247 | CODE | |
| LOW | private_gpt/components/llm/custom/sagemaker.py | 149 | CODE | |
| LOW | private_gpt/components/memory/trimming_memory.py | 104 | CODE | |
| LOW | …ivate_gpt/components/chat/models/chat_config_models.py | 179 | CODE | |
| LOW | …ents/postprocessor/tree_expansion/document_expander.py | 452 | CODE | |
| LOW | private_gpt/components/tabular/pandasai_service.py | 60 | CODE | |
| LOW | …ate_gpt/components/tabular/database_query_generator.py | 234 | CODE | |
| LOW | …ponents/workflows/others/tree_summarize_synthesizer.py | 43 | CODE | |
| LOW | …pt/components/workflows/others/summary_query_engine.py | 77 | CODE | |
| LOW | …_gpt/components/workflows/retrieval/semantic_search.py | 89 | CODE | |
| LOW | …te_gpt/components/vector_store/patched_qdrant_store.py | 105 | CODE | |
| LOW | …te_gpt/components/vector_store/patched_qdrant_store.py | 499 | CODE | |
| LOW | …te_gpt/components/vector_store/patched_qdrant_store.py | 548 | CODE | |
| LOW | …components/streaming/providers/redis_stream_service.py | 164 | CODE | |
| LOW | …components/streaming/providers/redis_stream_service.py | 161 | CODE | |
| LOW | private_gpt/components/prompts/prompt_builder.py | 256 | CODE | |
| LOW | private_gpt/components/prompts/prompt_builder.py | 336 | CODE | |
| LOW | private_gpt/components/prompts/prompt_builder.py | 424 | CODE | |
| LOW | private_gpt/components/readers/docling/api_clients.py | 130 | CODE | |
| LOW | private_gpt/components/multimodality/image_handler.py | 120 | CODE | |
| LOW | private_gpt/components/multimodality/audio_handler.py | 994 | CODE | |
| LOW | private_gpt/components/multimodality/audio_handler.py | 508 | CODE | |
| LOW | …s/components/database/test_dabatase_query_generator.py | 95 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 137 | | **[Claude Code](https://docs.privategpt.dev/integrations/claude-code)** | Use your local models as the backend for age | CODE |
| MEDIUM | private_gpt/initialize.py | 60 | # Set global embedding model to Mock to prevent LlamaIndex to default to use OpenAI | COMMENT |
| MEDIUM | private_gpt/launcher.py | 274 | # Set global embedding model to Mock to prevent LlamaIndex to default to use OpenAI | COMMENT |
| MEDIUM | private_gpt/components/llm/custom/openai.py | 180 | # Extract reasoning_content for chain-of-thought streaming. | COMMENT |
| MEDIUM | private_gpt/components/ingest/ingest_component.py | 260 | max_truncate_length=max_context_window * 10, # 10x context window | CODE |
| MEDIUM | …ts/ingest/transformations/sentence_tree_node_parser.py | 156 | # 1. Chunk size should be half of the context window size to | COMMENT |
| MEDIUM | …ponents/workflows/others/tree_summarize_synthesizer.py | 84 | # repack text_chunks so that each chunk fills the context window | COMMENT |
| MEDIUM | …ponents/workflows/others/tree_summarize_synthesizer.py | 164 | # repack text_chunks so that each chunk fills the context window | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | private_gpt/components/llm/llm_component.py | 0 | filter embedding components based on a predicate function. :param predicate: a function that takes an embedding and retu | STRING |
| HIGH | private_gpt/components/llm/registry.py | 0 | filter embedding components based on a predicate function. :param predicate: a function that takes an embedding and retu | STRING |
| HIGH | private_gpt/components/embedding/registry.py | 0 | filter embedding components based on a predicate function. :param predicate: a function that takes an embedding and retu | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ponents/postprocessor/tree_expansion/paper_distance.py | 41 | COMMENT | |
| LOW | …ate_gpt/components/tabular/database_query_generator.py | 621 | # if ( | COMMENT |
| LOW | …te_gpt/components/readers/pptx2md/slides_transforms.py | 101 | # Create text chunks from the tree nodes | COMMENT |
| LOW | tests/server/ingest/test_file_validation.py | 121 | # errors, warnings = IngestionHelper.validate_file_info(file_info) | COMMENT |
| LOW | tests/server/ingest/test_file_validation.py | 181 | # def test_validate_file_info_pdf_with_forms(): | COMMENT |
| LOW | tests/models/anthropic/test_openapi_schema.py | 201 | COMMENT | |
| LOW | tests/components/multimodality/test_describe_image.py | 341 | # """Test 6: Error handling during strategy inference.""" | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | private_gpt/server/ingest/ingest_router.py | 858 | """Retrieves a comprehensive list of all documents ingested. | STRING |
| LOW | …ivate_gpt/components/chat/models/chat_config_models.py | 263 | # just return the function call | COMMENT |
| LOW | …ponents/postprocessor/tree_expansion/paper_distance.py | 46 | # not much to do here so just return empty set, | COMMENT |
| MEDIUM⚡ | tests/components/processors/test_df_preprocessor.py | 221 | """Test robust type inference with edge cases.""" | STRING |