A sample app for the Retrieval-Augmented Generation pattern running in Azure, using Azure AI Search for retrieval and Azure OpenAI large language models to power ChatGPT-style and Q&A experiences.
This report presents the forensic synthetic code analysis of Azure-Samples/azure-search-openai-demo, a Python project with 7,705 GitHub stars. SynthScan v2.0 examined 58,379 lines of code across 462 source files, recording 739 pattern matches distributed across 19 syntactic categories. The overall adjusted score of 18.1 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).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
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 739 distinct pattern matches across 19 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 | evals/generate_ground_truth.py | 55 | def generate_ground_truth_ragas(num_questions=200, num_search_documents=None, kg_file=None): | CODE |
| LOW | evals/eval_compare.py | 124 | def paired_permutation_p_value(deltas: list[float], iterations: int, seed: int) -> float: | CODE |
| LOW | evals/evaltools/eval/evaluate_metrics/base_metric.py | 19 | def get_aggregate_stats_for_numeric_rating(cls, df, rating_column_name): | CODE |
| LOW | evals/tests/test_review_utils.py | 29 | def test_summarize_results_single_run(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 51 | def test_summarize_results_drops_unshared_metrics(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 81 | def test_summarize_results_missing_stat_uses_placeholder(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 116 | def test_summarize_results_drops_metric_without_recognized_stat(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 141 | def test_diff_directories_no_filter(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 152 | def test_diff_directories_changed_filters_equal(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 175 | def test_diff_directories_changed_uses_isclose(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 185 | def test_diff_directories_changed_skips_missing_and_none(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 216 | def test_diff_markdown_escapes_html(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 242 | def test_diff_markdown_includes_metric_rows(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 265 | def test_diff_markdown_handles_non_numeric_metric_in_later_run(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 290 | def test_summary_markdown_highlights_run(tmp_path): | CODE |
| LOW | evals/tests/test_review_utils.py | 311 | def test_summary_markdown_unknown_highlight_run_raises(tmp_path): | CODE |
| LOW | evals/tests/test_evaluate.py | 37 | def test_send_question_to_target_valid(monkeypatch): | CODE |
| LOW⚡ | evals/tests/test_evaluate.py | 49 | def test_send_question_to_target_missing_error_stored(monkeypatch): | CODE |
| LOW⚡ | evals/tests/test_evaluate.py | 59 | def test_send_question_to_target_missing_all_raises(monkeypatch): | CODE |
| LOW⚡ | evals/tests/test_evaluate.py | 67 | def test_send_question_to_target_missing_context_raises(monkeypatch): | CODE |
| LOW⚡ | evals/tests/test_evaluate.py | 75 | def test_send_question_to_target_invalid_json_raises(monkeypatch): | CODE |
| LOW | evals/tests/test_evaluate.py | 87 | def test_send_question_to_target_dict_context(monkeypatch): | CODE |
| LOW | evals/tests/test_evaluate.py | 98 | def test_send_question_to_target_http_error_raises(monkeypatch): | CODE |
| LOW | evals/tests/test_evaluate.py | 111 | def test_send_question_to_target_http_error_stored(monkeypatch): | CODE |
| LOW | evals/tests/test_evaluate_metrics.py | 60 | def test_citations_matched_with_page_anchors(): | CODE |
| LOW | evals/tests/test_evaluate_metrics.py | 68 | def test_citations_matched_none(): | CODE |
| LOW | evals/tests/test_evaluate_metrics.py | 87 | def test_latency_all_requests_failed(): | CODE |
| LOW | evals/tests/test_evaluate_metrics.py | 109 | def test_builtin_groundedness(): | CODE |
| LOW | evals/tests/test_evaluate_metrics.py | 133 | def test_builtin_metrics_use_supplied_credential(monkeypatch): | CODE |
| LOW | evals/tests/test_evaluate_metrics.py | 166 | def test_builtin_rating_missing_values(): | CODE |
| LOW | …omponents/SupportingContent/SupportingContentParser.ts | 8 | export function parseSupportingContentItem(item: string): ParsedSupportingContentItem { | CODE |
| LOW | app/backend/setup_cloud_ingestion.py | 29 | async def setup_cloud_ingestion_strategy( | CODE |
| LOW | app/backend/prepdocs.py | 37 | async def check_search_service_connectivity(search_service: str) -> bool: | CODE |
| LOW | app/backend/approaches/approach.py | 897 | async def compute_multimodal_embedding(self, q: str): | CODE |
| LOW | app/backend/approaches/approach.py | 903 | def get_system_prompt_variables(self, override_prompt: Optional[str]) -> dict[str, str]: | CODE |
| LOW | app/backend/approaches/approach.py | 926 | def get_lowest_reasoning_effort(self, model: str) -> ReasoningEffort: | CODE |
| LOW | app/backend/approaches/approach.py | 932 | def get_reasoning_effort_options(model: str) -> list[str]: | CODE |
| LOW | app/backend/approaches/approach.py | 985 | def format_thought_step_for_chatcompletion( | CODE |
| LOW | app/backend/approaches/chatreadretrieveread.py | 102 | def extract_followup_questions(self, content: Optional[str]): | CODE |
| LOW | app/backend/approaches/chatreadretrieveread.py | 424 | async def run_agentic_retrieval_approach( | CODE |
| LOW | app/backend/approaches/chatreadretrieveread.py | 482 | def _select_knowledgebase_client( | CODE |
| LOW | app/backend/core/authentication.py | 77 | def get_auth_setup_for_client(self) -> dict[str, Any]: | CODE |
| LOW | app/backend/core/authentication.py | 142 | async def get_auth_claims_if_enabled(self, headers: dict) -> dict[str, Any]: | CODE |
| LOW | app/backend/prepdocslib/textprocessor.py | 14 | def combine_text_with_figures(page: "Page") -> None: | CODE |
| LOW | app/backend/prepdocslib/strategy.py | 44 | def create_search_index_client(self) -> SearchIndexClient: | CODE |
| LOW | app/backend/prepdocslib/strategy.py | 47 | def create_search_indexer_client(self) -> SearchIndexerClient: | CODE |
| LOW | app/backend/prepdocslib/servicesetup.py | 141 | def setup_image_embeddings_service( | CODE |
| LOW | app/backend/prepdocslib/servicesetup.py | 318 | def select_processor_for_filename(file_name: str, file_processors: dict[str, FileProcessor]) -> FileProcessor: | CODE |
| LOW | app/backend/prepdocslib/embeddings.py | 196 | async def create_embedding_for_image(self, image_bytes: bytes) -> list[float]: | CODE |
| LOW | app/backend/prepdocslib/embeddings.py | 214 | async def create_embedding_for_text(self, q: str): | CODE |
| LOW | app/backend/prepdocslib/blobmanager.py | 35 | def sourcepage_from_file_page(cls, filename, page=0) -> str: | CODE |
| LOW | app/backend/prepdocslib/blobmanager.py | 208 | def _get_image_directory_path(self, document_filename: str, user_oid: str, page_num: Optional[int] = None) -> str: | CODE |
| LOW | app/backend/prepdocslib/blobmanager.py | 418 | def get_managedidentity_connectionstring(self): | CODE |
| LOW | app/backend/prepdocslib/figureprocessor.py | 84 | def mark_content_understanding_ready(self) -> None: | CODE |
| LOW | app/backend/prepdocslib/textsplitter.py | 292 | def _should_cross_page_overlap(self, prev: Chunk, nxt: Chunk) -> bool: | CODE |
| LOW | app/backend/chat_history/cosmosdb.py | 81 | async def get_chat_history_sessions(auth_claims: dict[str, Any]): | CODE |
| LOW | app/backend/chat_history/cosmosdb.py | 174 | async def delete_chat_history_session(auth_claims: dict[str, Any], session_id: str): | CODE |
| LOW | app/functions/text_processor/function_app.py | 48 | def configure_global_settings(): | CODE |
| LOW | app/functions/document_extractor/function_app.py | 48 | def configure_global_settings(): | CODE |
| LOW | app/functions/document_extractor/function_app.py | 343 | def build_document_components( | CODE |
| 418 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 20 | # RAG chat app with Azure OpenAI and Azure AI Search (Python) | COMMENT |
| MEDIUM | AGENTS.md | 85 | ## Adding a new setting to "Developer Settings" in RAG app | COMMENT |
| MEDIUM | app/frontend/src/components/AnalysisPanel/AgentPlan.tsx | 174 | // Extract effort from first agentic reasoning step | COMMENT |
| MEDIUM | app/frontend/src/pages/chat/Chat.tsx | 380 | // Preserve streaming preference when agentic retrieval forces streaming off. | COMMENT |
| MEDIUM | app/backend/approaches/approach.py | 68 | ref_id: Optional[str] = None # Reference id from agentic retrieval (if applicable) | CODE |
| MEDIUM | app/backend/approaches/approach.py | 441 | # STEP 1: Invoke agentic retrieval | COMMENT |
| MEDIUM | app/backend/approaches/chatreadretrieveread.py | 160 | # Handle non-streaming Response (e.g. when agentic retrieval already provided an answer) | COMMENT |
| MEDIUM | app/backend/approaches/chatreadretrieveread.py | 244 | # If agentic retrieval already provided an answer, skip final call to LLM | COMMENT |
| MEDIUM | tests/e2e.py | 700 | # Verify that agentic retrieval option is visible | COMMENT |
| MEDIUM | tests/e2e.py | 758 | # Non-streaming agentic snapshot whose query_plan carries the execution steps | COMMENT |
| MEDIUM | tests/test_searchmanager.py | 1065 | # Provide a SearchInfo configured for agentic retrieval and image search | COMMENT |
| MEDIUM | tests/test_searchmanager.py | 1144 | # Provide a SearchInfo configured for agentic retrieval | COMMENT |
| MEDIUM | docs/reasoning.md | 1 | # RAG chat: Using reasoning models | COMMENT |
| MEDIUM | docs/textsplitter.md | 1 | # RAG Chat: Text splitting algorithm overview | COMMENT |
| MEDIUM | docs/login_and_acl.md | 20 | # RAG chat: Setting up optional login and document level access control | COMMENT |
| MEDIUM | docs/safety_evaluation.md | 1 | # Evaluating RAG answer safety | COMMENT |
| MEDIUM | docs/architecture.md | 1 | # RAG Chat: Application Architecture | COMMENT |
| MEDIUM | docs/deploy_lowcost.md | 1 | # RAG chat: Deploying with minimal costs | COMMENT |
| MEDIUM | docs/azd.md | 1 | # RAG chat: Deploying with the Azure Developer CLI | COMMENT |
| MEDIUM | docs/customization.md | 1 | # RAG chat: Customizing the chat app | COMMENT |
| MEDIUM⚡ | docs/agentic_retrieval.md | 1 | # RAG chat: Using agentic retrieval | COMMENT |
| MEDIUM⚡ | docs/agentic_retrieval.md | 1 | # RAG chat: Using agentic retrieval | COMMENT |
| MEDIUM⚡ | docs/agentic_retrieval.md | 3 | This repository includes an optional feature that uses [agentic retrieval from Azure AI Search](https://learn.microsoft. | CODE |
| MEDIUM | docs/agentic_retrieval.md | 27 | You can only change it to one of the [supported models](https://learn.microsoft.com/azure/search/search-agentic-retri | CODE |
| MEDIUM | docs/agentic_retrieval.md | 53 | > ⚠️ The Microsoft Data Protection Addendum doesn't apply to data sent to Web Knowledge Source. [Learn more in the We | CODE |
| MEDIUM | docs/deploy_troubleshooting.md | 1 | # RAG chat: Troubleshooting deployment | COMMENT |
| MEDIUM | docs/deploy_freetrial.md | 1 | # RAG chat: Deploying with a free trial account | COMMENT |
| MEDIUM | docs/deploy_private.md | 20 | # RAG chat: Deploying with private access | COMMENT |
| MEDIUM | docs/azure_app_service.md | 1 | # RAG chat: Deploying on Azure App Service | COMMENT |
| MEDIUM | docs/appservice.md | 1 | # RAG chat: Debugging the app on App Service | COMMENT |
| MEDIUM | docs/localdev.md | 1 | # RAG chat: Local development of chat app | COMMENT |
| MEDIUM | docs/deploy_features.md | 1 | # RAG chat: Enabling optional features | COMMENT |
| MEDIUM | docs/deploy_features.md | 105 | ## Using agentic retrieval | COMMENT |
| MEDIUM | docs/azure_container_apps.md | 1 | # RAG chat: Deploying on Azure Container Apps | COMMENT |
| MEDIUM | docs/other_samples.md | 1 | # RAG chat: Alternative RAG chat samples | COMMENT |
| MEDIUM | docs/sharing_environments.md | 1 | # RAG chat: Sharing deployment environments | COMMENT |
| MEDIUM | docs/http_protocol.md | 1 | # RAG Chat: HTTP Protocol | COMMENT |
| MEDIUM | docs/http_protocol.md | 85 | ## HTTP responses from RAG chat app endpoints | COMMENT |
| MEDIUM | docs/monitoring.md | 1 | # RAG chat: Monitoring with Application Insights | COMMENT |
| MEDIUM | docs/deploy_existing.md | 2 | # RAG chat: Deploying with existing Azure resources | COMMENT |
| MEDIUM | docs/productionizing.md | 1 | # RAG chat: Productionizing the app | COMMENT |
| MEDIUM | docs/multimodal.md | 1 | # RAG chat: Support for multimodal documents | COMMENT |
| MEDIUM | docs/data_ingestion.md | 1 | # RAG chat: Data ingestion | COMMENT |
| MEDIUM | docs/evaluation.md | 1 | # Evaluating the RAG answer quality | COMMENT |
| MEDIUM | docs/evaluation.md | 118 | ## Evaluate multimodal RAG answers | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/backend/setup_cloud_ingestion.py | 119 | # Create a list file strategy for uploading files from the data folder | COMMENT |
| MEDIUM | app/backend/setup_cloud_ingestion.py | 122 | # Create the cloud ingestion strategy | COMMENT |
| MEDIUM | app/backend/app.py | 184 | # Create a BytesIO object from the bytes | COMMENT |
| MEDIUM | app/backend/prepdocslib/csvparser.py | 31 | # Create a CSV reader from the text content | COMMENT |
| MEDIUM | app/backend/prepdocslib/integratedvectorizerstrategy.py | 182 | # Create an indexer | COMMENT |
| MEDIUM | app/backend/prepdocslib/searchmanager.py | 173 | # Create the AI Vision vectorizer for image embeddings | COMMENT |
| MEDIUM | app/functions/text_processor/function_app.py | 237 | # Create a lightweight File wrapper required by process_text | COMMENT |
| MEDIUM | tests/test_mediadescriber.py | 176 | # Create a mock OpenAI response | COMMENT |
| MEDIUM | tests/test_mediadescriber.py | 207 | # Create the describer with the mock client | COMMENT |
| MEDIUM | tests/test_mediadescriber.py | 277 | # Create the describer | COMMENT |
| MEDIUM⚡ | tests/test_prepdocslib_filestrategy.py | 26 | # Create a mock file | COMMENT |
| MEDIUM⚡ | tests/test_prepdocslib_filestrategy.py | 30 | # Create a mock processor | COMMENT |
| MEDIUM⚡ | tests/test_prepdocslib_filestrategy.py | 34 | # Create a page with an image | COMMENT |
| MEDIUM⚡ | tests/test_embeddings.py | 46 | # Create a text that exceeds the 8100 token limit | COMMENT |
| MEDIUM⚡ | tests/test_prepdocs.py | 167 | # Create the ImageEmbeddings instance | COMMENT |
| MEDIUM⚡ | tests/test_authenticationhelper.py | 49 | # Create a payload with necessary claims | COMMENT |
| MEDIUM⚡ | tests/test_authenticationhelper.py | 66 | # Create a header | COMMENT |
| MEDIUM⚡ | tests/test_authenticationhelper.py | 69 | # Create a mock private key (for signing) | COMMENT |
| MEDIUM⚡ | tests/test_authenticationhelper.py | 72 | # Create the JWT | COMMENT |
| MEDIUM | tests/test_upload.py | 18 | # Create a mock class for DataLakeDirectoryClient that includes the _client attribute | COMMENT |
| MEDIUM | tests/test_upload.py | 93 | # Create a mock class for DataLakeDirectoryClient that includes the _client attribute | COMMENT |
| MEDIUM⚡ | tests/test_chatapproach.py | 272 | # Create a mock for the ImageEmbeddings.create_embedding_for_text method | COMMENT |
| MEDIUM⚡ | tests/test_chatapproach.py | 279 | # Create a mock ImageEmbeddings instance and set it on the chat_approach | COMMENT |
| MEDIUM | tests/test_chatapproach.py | 297 | # Create a chat approach without an image_embeddings_client | COMMENT |
| MEDIUM | tests/test_cosmosdb_migration.py | 110 | # Create the migrator with our mocks | COMMENT |
| MEDIUM | tests/test_cosmosdb_migration.py | 180 | # Create a mock for the CosmosDBMigrator | COMMENT |
| MEDIUM | tests/test_blob_manager.py | 186 | # Create a blob manager with an image container | COMMENT |
| MEDIUM | tests/test_blob_manager.py | 197 | # Create a test file and image bytes | COMMENT |
| MEDIUM | tests/test_blob_manager.py | 200 | # Create a simple 1x1 transparent PNG image | COMMENT |
| MEDIUM | tests/test_searchmanager.py | 200 | # Create a simple mock embeddings object with just the properties we need for index creation | COMMENT |
| MEDIUM | tests/test_searchmanager.py | 918 | # Create a SearchInfo with an Azure Vision endpoint | COMMENT |
| MEDIUM | tests/test_searchmanager.py | 926 | # Create a SearchManager with search_images=True | COMMENT |
| MEDIUM | tests/test_searchmanager.py | 968 | # Create a SearchManager with search_images=True but no Azure Vision endpoint | COMMENT |
| MEDIUM | tests/test_searchmanager.py | 998 | # Create a SearchInfo with an Azure Vision endpoint | COMMENT |
| MEDIUM | tests/test_searchmanager.py | 1032 | # Create a SearchManager with both search_images and embeddings | COMMENT |
| MEDIUM | tests/test_pdfparser.py | 631 | # Create a processor with an invalid strategy by patching the enum | COMMENT |
| MEDIUM | scripts/manageacl.py | 231 | # Create a session when paging through results to ensure consistency in multi-replica services | COMMENT |
| MEDIUM | scripts/auth_init.py | 44 | # Create a service principal | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | app/backend/error.py | 4 | from azure.core.exceptions import HttpResponseError | CODE |
| CRITICAL | app/backend/prepdocslib/pdfparser.py | 19 | from azure.core.exceptions import HttpResponseError | CODE |
| CRITICAL | app/backend/prepdocslib/blobmanager.py | 10 | from azure.core.exceptions import ResourceNotFoundError | CODE |
| CRITICAL | app/functions/document_extractor/function_app.py | 15 | from azure.core.exceptions import HttpResponseError | CODE |
| CRITICAL | tests/test_content_file.py | 6 | from azure.core.exceptions import ResourceNotFoundError | CODE |
| CRITICAL | tests/test_blob_manager.py | 51 | return azure.storage.blob.aio.BlobClient.from_blob_url( | CODE |
| CRITICAL | tests/test_blob_manager.py | 100 | return azure.storage.blob.aio.BlobClient.from_blob_url( | CODE |
| CRITICAL | tests/test_blob_manager.py | 159 | return azure.storage.blob.aio.BlobClient.from_blob_url( | CODE |
| CRITICAL | tests/test_blob_manager.py | 223 | return azure.storage.blob.aio.BlobClient.from_blob_url( | CODE |
| CRITICAL | tests/test_blob_manager.py | 341 | from azure.core.exceptions import ResourceNotFoundError | CODE |
| CRITICAL | tests/test_pdfparser.py | 23 | from azure.core.exceptions import HttpResponseError | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/evaltools/eval/evaluate.py | 69 | except Exception: | CODE |
| LOW | evals/evaltools/eval/evaluate.py | 80 | except Exception as e: | CODE |
| LOW | evals/evaltools/eval/evaluate.py | 138 | except Exception as e: | CODE |
| LOW | app/backend/app.py | 207 | except Exception as error: | CODE |
| LOW | app/backend/app.py | 237 | except Exception as error: | CODE |
| LOW | app/backend/app.py | 269 | except Exception as error: | CODE |
| LOW | app/backend/app.py | 350 | except Exception as e: | CODE |
| LOW | app/backend/app.py | 370 | except Exception as error: | CODE |
| LOW | app/backend/prepdocs.py | 45 | except Exception as e: | CODE |
| LOW | app/backend/prepdocs.py | 351 | except Exception as e: | CODE |
| LOW | app/backend/decorators.py | 29 | except Exception as error: | CODE |
| LOW | app/backend/approaches/chatreadretrieveread.py | 111 | except Exception: | CODE |
| LOW | app/backend/core/authentication.py | 174 | except Exception: | CODE |
| LOW | app/backend/core/authentication.py | 282 | except Exception as exc: | CODE |
| LOW | app/backend/prepdocslib/pdfparser.py | 74 | except Exception: | CODE |
| LOW | app/backend/prepdocslib/page.py | 46 | except Exception as exc: # pragma: no cover - defensive | CODE |
| LOW | app/backend/prepdocslib/page.py | 54 | except Exception: | CODE |
| LOW | app/backend/prepdocslib/blobmanager.py | 312 | except Exception as e: | CODE |
| LOW | app/backend/prepdocslib/figureprocessor.py | 143 | except Exception: # pragma: no cover - embedding failures shouldn't abort figure processing | CODE |
| LOW | app/backend/chat_history/cosmosdb.py | 75 | except Exception as error: | CODE |
| LOW | app/backend/chat_history/cosmosdb.py | 128 | except Exception as error: | CODE |
| LOW | app/backend/chat_history/cosmosdb.py | 168 | except Exception as error: | CODE |
| LOW | app/backend/chat_history/cosmosdb.py | 201 | except Exception as error: | CODE |
| LOW | app/functions/text_processor/function_app.py | 160 | except Exception as exc: # pragma: no cover - defensive logging | CODE |
| LOW | app/functions/text_processor/function_app.py | 227 | except Exception as exc: | CODE |
| LOW | app/functions/document_extractor/function_app.py | 192 | except Exception as e: | CODE |
| LOW | app/functions/document_extractor/function_app.py | 205 | except Exception as e: | CODE |
| LOW | app/functions/document_extractor/function_app.py | 336 | except Exception as e: | CODE |
| LOW | app/functions/figure_processor/function_app.py | 173 | except Exception as exc: # pragma: no cover - defensive | CODE |
| LOW | tests/e2e.py | 109 | except Exception as e: | CODE |
| MEDIUM | tests/e2e.py | 110 | print(f"Error in test_chat handler (defaults validation): {e}") | CODE |
| LOW | tests/e2e.py | 264 | except Exception as e: | CODE |
| MEDIUM | tests/e2e.py | 265 | print(f"Error in test_chat_customization handler: {e}") | CODE |
| LOW | tests/e2e.py | 332 | except Exception as e: | CODE |
| MEDIUM | tests/e2e.py | 333 | print(f"Error in handle_chat: {e}") | CODE |
| LOW⚡ | tests/e2e.py | 452 | except Exception as e: | CODE |
| MEDIUM⚡ | tests/e2e.py | 453 | print(f"Error in test_chat_followup_streaming handler: {e}") | CODE |
| LOW | tests/e2e.py | 649 | except Exception as e: | CODE |
| MEDIUM | tests/e2e.py | 650 | print(f"Error in test_chat_customization handler: {e}") | CODE |
| LOW⚡ | tests/test_authenticationhelper.py | 380 | except Exception as e: | CODE |
| LOW⚡ | tests/test_authenticationhelper.py | 387 | except Exception as e: | CODE |
| LOW | scripts/cosmosdb_migration.py | 71 | except Exception: | CODE |
| LOW | scripts/cosmosdb_migration.py | 75 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/mocks.py | 263 | "content": 'advanced data\nanalytics to present a clear picture of the complex interplay between | CODE |
| MEDIUM | tests/test-data/pages_with_figures.json | 10 | "text": "## Executive Summary\n\n. In this comprehensive report, Contoso Financial Analytics provides a\ndeep dive i | CODE |
| MEDIUM | tests/test-data/pages_with_figures.json | 15 | "text": "## Introduction to Financial Markets\n\n\n<figure><figcaption>Global Financial Market Distribution (2023)<b | CODE |
| MEDIUM | tests/test-data/pages_with_figures.json | 30 | "text": "### Commodity Market Fluctuations\n\n\n<figure><figcaption>Price Changes of Oil, Gold, and Wheat<br>This is | CODE |
| MEDIUM | tests/test-data/pages_with_figures.json | 50 | "text": "## Conclusions\n\n. In conclusion, this report has traversed the multifaceted landscape of\nfinancial marke | CODE |
| MEDIUM | tests/test-data/pages_with_figures.json | 50 | "text": "## Conclusions\n\n. In conclusion, this report has traversed the multifaceted landscape of\nfinancial marke | CODE |
| MEDIUM⚡ | …napshots/test_app/test_chat_vision/client0/result.json | 15 | "Financial Market Analysis Report 2023.pdf#page=7: This section examines the correlations between stock | CODE |
| MEDIUM⚡ | …napshots/test_app/test_chat_vision/client0/result.json | 16 | "Financial Market Analysis Report 2023.pdf#page=8: </figcaption></figure> Macroeconomic factors such a | CODE |
| MEDIUM⚡ | …napshots/test_app/test_chat_vision/client0/result.json | 17 | "Financial Market Analysis Report 2023.pdf#page=2: advanced data analytics to present a clear picture of | CODE |
| MEDIUM | …napshots/test_app/test_chat_vision/client0/result.json | 104 | "content": "advanced data\nanalytics to present a clear picture of the complex interplay between | CODE |
| MEDIUM | …napshots/test_app/test_chat_vision/client0/result.json | 139 | "text": "Are interest rates high?\n\n\nSources:\n\nFinancial Market Analysis Report 2023 | CODE |
| MEDIUM | …/pages_with_figures.json/split_pages_with_figures.json | 7 | "text": "## Executive Summary\n\n. In this comprehensive report, Contoso Financial Analytics provides a\ndeep dive i | CODE |
| MEDIUM | …/pages_with_figures.json/split_pages_with_figures.json | 67 | "text": "## Conclusions\n\n. In conclusion, this report has traversed the multifaceted landscape of\nfinancial marke | CODE |
| MEDIUM | …/pages_with_figures.json/split_pages_with_figures.json | 67 | "text": "## Conclusions\n\n. In conclusion, this report has traversed the multifaceted landscape of\nfinancial marke | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/frontend/src/locales/pl/translation.json | 41 | "placeholder": "Wpisz nowe pytanie (np. czy mój plan obejmuje coroczne badania wzroku?)" | CODE |
| LOW | app/frontend/src/locales/pl/translation.json | 48 | "placeholder": "Przykład: Czy mój plan obejmuje coroczne badania wzroku?" | CODE |
| LOW | app/frontend/src/locales/da/translation.json | 41 | "placeholder": "Skriv et nyt spørgsmål (f.eks. dækker min plan årlige øjenundersøgelser?)" | CODE |
| LOW | app/frontend/src/locales/da/translation.json | 48 | "placeholder": "Eksempel: Dækker min plan årlige øjenundersøgelser?" | CODE |
| LOW | app/frontend/src/locales/ja/translation.json | 41 | "placeholder": "新しい質問を入力してください (例:私の契約プランは年1回の眼科検診もカバーしていますか?)" | CODE |
| LOW | app/frontend/src/locales/ja/translation.json | 48 | "placeholder": "例:私の契約プランは年1回の眼科検診もカバーしていますか?" | CODE |
| LOW | app/frontend/src/locales/it/translation.json | 41 | "placeholder": "Digita una nuova domanda (es. il mio piano copre gli esami oculistici annuali?)" | CODE |
| LOW | app/frontend/src/locales/it/translation.json | 48 | "placeholder": "Esempio: Il mio piano copre gli esami oculistici annuali?" | CODE |
| LOW | app/frontend/src/locales/ptBR/translation.json | 41 | "placeholder": "Digite uma nova pergunta (por exemplo: Meu plano cobre exames oftalmológicos anuais?)" | CODE |
| LOW | app/frontend/src/locales/ptBR/translation.json | 48 | "placeholder": "Exemplo: Meu plano cobre exames oftalmológicos anuais?" | CODE |
| LOW | app/frontend/src/locales/nl/translation.json | 41 | "placeholder": "Typ een nieuwe vraag (bijv. dekt mijn pakket jaarlijkse oogonderzoeken?)" | CODE |
| LOW | app/frontend/src/locales/nl/translation.json | 48 | "placeholder": "Voorbeeld: dekt mijn pakket jaarlijkse oogonderzoeken?" | CODE |
| LOW | app/frontend/src/locales/fr/translation.json | 41 | "placeholder": "Tapez une nouvelle question (par exemple, mon plan couvre-t-il les examens oculaires annuels?)" | CODE |
| LOW | app/frontend/src/locales/fr/translation.json | 48 | "placeholder": "Exemple: Mon plan couvre-t-il les examens oculaires annuels?" | CODE |
| LOW | app/frontend/src/locales/es/translation.json | 41 | "placeholder": "Escribe una nueva pregunta (por ejemplo, ¿mi plan cubre exámenes anuales de la vista?)" | CODE |
| LOW | app/frontend/src/locales/es/translation.json | 48 | "placeholder": "Ejemplo: ¿Mi plan cubre exámenes anuales de la vista?" | CODE |
| LOW | app/frontend/src/locales/en/translation.json | 41 | "placeholder": "Type a new question (e.g. does my plan cover annual eye exams?)" | CODE |
| LOW | app/frontend/src/locales/en/translation.json | 48 | "placeholder": "Example: Does my plan cover annual eye exams?" | CODE |
| LOW | app/frontend/src/locales/tr/translation.json | 41 | "placeholder": "Yeni bir soru yazın (ör. planım yıllık göz muayenelerini kapsıyor mu?)" | CODE |
| LOW | app/frontend/src/locales/tr/translation.json | 48 | "placeholder": "Örnek: Planım yıllık göz muayenelerini kapsıyor mu?" | CODE |
| LOW | app/backend/prepdocslib/page.py | 66 | placeholder = data.get("placeholder") | CODE |
| LOW | app/backend/prepdocslib/cloudingestionstrategy.py | 206 | InputFieldMappingEntry(name="placeholder", source="/document/figures/*/placeholder"), | CODE |
| LOW | app/backend/prepdocslib/cloudingestionstrategy.py | 236 | InputFieldMappingEntry(name="placeholder", source="/document/figures/*/placeholder"), | CODE |
| LOW | app/functions/document_extractor/function_app.py | 153 | "placeholder": "<figure id=\"fig1\"></figure>" | STRING |
| LOW⚡ | tests/test_prepdocs.py | 165 | mock_token_provider = AsyncMock(return_value="fake_token") | CODE |
| LOW | tests/test_servicesetup.py | 147 | "prepdocslib.servicesetup.get_bearer_token_provider", lambda *args, **kwargs: lambda: "fake_token" | CODE |
| LOW⚡ | tests/test_authenticationhelper.py | 57 | "name": "John Doe", | CODE |
| LOW | tests/test_chatapproach.py | 631 | ({"access_token": "fake-token"}, True), | CODE |
| LOW⚡ | tests/test_pdfparser.py | 602 | credential=AzureKeyCredential("fake_key"), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/evaltools/review/diff_markdown.py | 14 | CODE | |
| LOW | evals/evaltools/review/utils.py | 7 | CODE | |
| LOW | evals/evaltools/eval/evaluate.py | 23 | CODE | |
| LOW | evals/evaltools/eval/evaluate.py | 222 | CODE | |
| LOW | app/backend/approaches/approach.py | 428 | CODE | |
| LOW | app/backend/approaches/approach.py | 714 | CODE | |
| LOW | app/backend/core/authentication.py | 118 | CODE | |
| LOW | app/backend/prepdocslib/pdfparser.py | 65 | CODE | |
| LOW | app/backend/prepdocslib/textprocessor.py | 14 | CODE | |
| LOW | app/backend/prepdocslib/embeddings.py | 74 | CODE | |
| LOW | app/backend/prepdocslib/textsplitter.py | 311 | CODE | |
| LOW | app/backend/prepdocslib/textsplitter.py | 380 | CODE | |
| LOW | app/backend/prepdocslib/searchmanager.py | 98 | CODE | |
| LOW | app/functions/document_extractor/function_app.py | 267 | CODE | |
| LOW | tests/conftest.py | 143 | CODE | |
| LOW | tests/conftest.py | 215 | CODE | |
| LOW | tests/test_mediadescriber.py | 21 | CODE | |
| LOW | tests/test_mediadescriber.py | 45 | CODE | |
| LOW | tests/test_manageacl.py | 367 | CODE | |
| LOW | tests/mocks.py | 374 | CODE | |
| LOW | tests/mocks.py | 386 | CODE | |
| LOW | scripts/manageacl.py | 69 | CODE | |
| LOW | scripts/adlsgen2setup.py | 58 | CODE | |
| LOW | scripts/manage_indexer.py | 22 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/frontend/vite.config.ts | 1 | /// <reference types="node" /> | COMMENT |
| LOW | app/backend/requirements.txt | 1 | # This file was autogenerated by uv via the following command: | COMMENT |
| LOW | app/backend/requirements.txt | 21 | async-timeout==5.0.1 | COMMENT |
| LOW | app/backend/requirements.txt | 41 | # msrest | COMMENT |
| LOW | app/backend/requirements.txt | 61 | # -r requirements.in | COMMENT |
| LOW | app/backend/requirements.txt | 81 | click==8.4.2 | COMMENT |
| LOW | app/backend/requirements.txt | 101 | # taskgroup | COMMENT |
| LOW | app/backend/requirements.txt | 121 | # via httpx | COMMENT |
| LOW | app/backend/requirements.txt | 141 | # azure-ai-documentintelligence | COMMENT |
| LOW | app/backend/requirements.txt | 161 | # flask | COMMENT |
| LOW | app/backend/requirements.txt | 181 | # via msgraph-sdk | COMMENT |
| LOW | app/backend/requirements.txt | 201 | multidict==6.7.0 | COMMENT |
| LOW | app/backend/requirements.txt | 221 | # opentelemetry-instrumentation-fastapi | COMMENT |
| LOW | app/backend/requirements.txt | 241 | # opentelemetry-instrumentation-openai | COMMENT |
| LOW | app/backend/requirements.txt | 261 | opentelemetry-instrumentation-httpx==0.60b0 | COMMENT |
| LOW | app/backend/requirements.txt | 281 | # azure-monitor-opentelemetry | COMMENT |
| LOW | app/backend/requirements.txt | 301 | # opentelemetry-instrumentation-wsgi | COMMENT |
| LOW | app/backend/requirements.txt | 321 | pillow==12.2.0 | COMMENT |
| LOW | app/backend/requirements.txt | 341 | # -r requirements.in | COMMENT |
| LOW | app/backend/requirements.txt | 361 | # msrest | COMMENT |
| LOW | app/backend/requirements.txt | 381 | # via -r requirements.in | COMMENT |
| LOW | app/backend/requirements.txt | 401 | # azure-cosmos | COMMENT |
| LOW | app/backend/requirements.txt | 421 | # uvicorn | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/evaltools/eval/evaluate_metrics/__init__.py | 36 | # Check if the metric name is already registered | COMMENT |
| LOW | .azdo/pipelines/azure-dev.yml | 2 | # Set this to the mainline branch you are using | COMMENT |
| LOW | app/backend/setup_cloud_ingestion.py | 152 | # Check if cloud ingestion is enabled | COMMENT |
| LOW | app/backend/core/authentication.py | 98 | # Set this to "true" if you are having issues on IE11 or Edge | COMMENT |
| LOW | app/backend/prepdocslib/csvparser.py | 24 | # Check if content is in bytes (binary file) and decode to string | COMMENT |
| LOW | app/functions/document_extractor/function_app.py | 307 | # Check if "other" has read permission - this means global access | COMMENT |
| LOW | tests/conftest.py | 246 | # Check if system prompt asks for followup questions | COMMENT |
| LOW⚡ | scripts/load-balance-aca-setup.sh | 19 | # Check if resourceGroupName is empty | COMMENT |
| LOW⚡ | scripts/load-balance-aca-setup.sh | 25 | # Check if containerAppName is empty | COMMENT |
| LOW⚡ | scripts/load-balance-aca-setup.sh | 34 | # Check if fqdn is empty | COMMENT |
| LOW | .github/workflows/azure-dev.yml | 7 | # Set this to the mainline branch you are using | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/backend/prepdocslib/servicesetup.py | 319 | Select the appropriate file processor for a given filename. Args: file_name: Name of the file to process | STRING |
| HIGH | app/backend/prepdocslib/blobmanager.py | 469 | Downloads a blob from Azure Blob Storage. Args: blob_path: The path to the blob in the sto | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | data/Zava_Company_Overview.md | 3 | *Disclaimer: This content is generated by AI and may not accurately represent factual information about any real entity. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/backend/prepdocslib/textprocessor.py | 37 | # Step 1: Combine text with figures on each page | COMMENT |
| LOW⚡ | app/backend/prepdocslib/textprocessor.py | 41 | # Step 2: Split combined text into chunks | COMMENT |
| LOW⚡ | app/backend/prepdocslib/textprocessor.py | 45 | # Step 3: Add images back to each section based on page number | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/backend/prepdocslib/textprocessor.py | 37 | # Step 1: Combine text with figures on each page | COMMENT |
| LOW⚡ | app/backend/prepdocslib/textprocessor.py | 41 | # Step 2: Split combined text into chunks | COMMENT |
| LOW⚡ | app/backend/prepdocslib/textprocessor.py | 45 | # Step 3: Add images back to each section based on page number | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/e2e.py | 212 | jsonl = '{"type": "response.context", "context": {"data_points": {"text": []}, "thoughts": []}, "session_state": | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/backend/prepdocs.py | 62 | CODE | |
| LOW | app/backend/approaches/chatreadretrieveread.py | 38 | CODE | |
| LOW | app/backend/prepdocslib/filestrategy.py | 58 | CODE | |
| LOW | app/backend/prepdocslib/searchmanager.py | 73 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/backend/approaches/approach.py | 164 | def update_token_usage(self, usage: CompletionUsage | ResponseUsage) -> None: | CODE |
| LOW | app/functions/text_processor/function_app.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/functions/document_extractor/function_app.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/functions/figure_processor/function_app.py | 36 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/backend/prepdocslib/textprocessor.py | 6 | CODE | |
| LOW | app/backend/prepdocslib/textprocessor.py | 7 | CODE | |
| LOW | app/backend/prepdocslib/textprocessor.py | 9 | CODE | |
| LOW | app/backend/prepdocslib/figureprocessor.py | 17 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_function_apps.py | 278 | CODE |