Coverage report: 95%

Files Functions Classes

coverage.py v7.16.2, created at 2026-10-22 21:20 +0000

    Statements   Branches   Total
File   coverage statements missing excluded   coverage branches partial   coverage
src/local_deep_research/__init__.py   100% 6 0 0   100% 0 0   100%
src/local_deep_research/__version__.py   100% 1 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/__init__.py   100% 1 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/__init__.py   100% 7 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/adaptive_explorer.py   100% 131 0 0   100% 38 0   100%
src/local_deep_research/advanced_search_system/candidate_exploration/base_explorer.py   98% 132 2 0   95% 42 2   98%
src/local_deep_research/advanced_search_system/candidate_exploration/constraint_guided_explorer.py   99% 140 1 0   97% 60 2   98%
src/local_deep_research/advanced_search_system/candidate_exploration/diversity_explorer.py   94% 185 11 0   84% 88 6   91%
src/local_deep_research/advanced_search_system/candidate_exploration/parallel_explorer.py   100% 92 0 0   96% 24 1   99%
src/local_deep_research/advanced_search_system/candidate_exploration/progressive_explorer.py   100% 117 0 0   97% 62 2   99%
src/local_deep_research/advanced_search_system/candidates/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/candidates/base_candidate.py   100% 36 0 0   100% 14 0   100%
src/local_deep_research/advanced_search_system/constraints/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/constraints/base_constraint.py   100% 33 0 0   100% 12 0   100%
src/local_deep_research/advanced_search_system/constraints/constraint_analyzer.py   100% 46 0 0   100% 18 0   100%
src/local_deep_research/advanced_search_system/evidence/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/evidence/base_evidence.py   100% 27 0 0   100% 2 0   100%
src/local_deep_research/advanced_search_system/evidence/evaluator.py   100% 51 0 0   100% 14 0   100%
src/local_deep_research/advanced_search_system/filters/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/filters/base_filter.py   89% 9 1 0   100% 0 0   89%
src/local_deep_research/advanced_search_system/filters/cross_engine_filter.py   98% 94 2 0   100% 38 0   98%
src/local_deep_research/advanced_search_system/filters/followup_relevance_filter.py   98% 63 1 0   96% 26 1   98%
src/local_deep_research/advanced_search_system/filters/journal_reputation_filter.py   93% 464 31 0   87% 150 15   92%
src/local_deep_research/advanced_search_system/findings/base_findings.py   79% 19 4 0   100% 0 0   79%
src/local_deep_research/advanced_search_system/findings/repository.py   94% 192 11 0   94% 72 4   94%
src/local_deep_research/advanced_search_system/findings/topic.py   100% 93 0 0   88% 52 6   96%
src/local_deep_research/advanced_search_system/knowledge/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/knowledge/followup_context_manager.py   98% 116 2 0   96% 46 2   98%
src/local_deep_research/advanced_search_system/parallel_search.py   100% 16 0 0   100% 4 0   100%
src/local_deep_research/advanced_search_system/questions/__init__.py   100% 7 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/atomic_fact_question.py   100% 40 0 0   100% 20 0   100%
src/local_deep_research/advanced_search_system/questions/base_question.py   93% 14 1 0   100% 4 0   94%
src/local_deep_research/advanced_search_system/questions/browsecomp_question.py   98% 153 3 0   92% 106 9   95%
src/local_deep_research/advanced_search_system/questions/decomposition_question.py   97% 129 4 0   88% 84 10   93%
src/local_deep_research/advanced_search_system/questions/flexible_browsecomp_question.py   100% 28 0 0   93% 14 1   98%
src/local_deep_research/advanced_search_system/questions/followup/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/followup/base_followup_question.py   93% 14 1 0   100% 0 0   93%
src/local_deep_research/advanced_search_system/questions/followup/llm_followup_question.py   100% 11 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/followup/simple_followup_question.py   100% 7 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/questions/news_question.py   100% 13 0 0   100% 2 0   100%
src/local_deep_research/advanced_search_system/questions/standard_question.py   100% 37 0 0   88% 8 1   98%
src/local_deep_research/advanced_search_system/repositories/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/summarization/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/summarization/base.py   100% 28 0 0   100% 4 0   100%
src/local_deep_research/advanced_search_system/summarization/focused.py   100% 8 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/tools/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/tools/archive.py   99% 86 1 0   97% 38 1   98%
src/local_deep_research/advanced_search_system/tools/base_tool.py   97% 36 1 0   92% 12 1   96%
src/local_deep_research/advanced_search_system/tools/fetch/__init__.py   96% 485 19 15   95% 214 10   96%
src/local_deep_research/advanced_search_system/tools/fetch/library_resolver.py   96% 141 6 4   93% 60 4   95%
src/local_deep_research/advanced_search_system/tools/fetch/prompts.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/advanced_search_system/tools/search_availability.py   97% 113 3 0   95% 38 2   97%
src/local_deep_research/api/__init__.py   100% 5 0 0   100% 0 0   100%
src/local_deep_research/api/benchmark_functions.py   100% 79 0 0   100% 28 0   100%
src/local_deep_research/api/client.py   97% 131 4 0   92% 50 4   96%
src/local_deep_research/api/research_functions.py   95% 234 11 0   89% 100 11   93%
src/local_deep_research/api/settings_utils.py   95% 189 9 0   94% 104 6   95%
src/local_deep_research/benchmarks/__init__.py   100% 6 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/benchmark_functions.py   98% 131 3 0   91% 76 7   95%
src/local_deep_research/benchmarks/comparison/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/comparison/evaluator.py   91% 314 28 0   82% 84 5   89%
src/local_deep_research/benchmarks/comparison/results.py   100% 28 0 0   100% 6 0   100%
src/local_deep_research/benchmarks/datasets.py   0% 2 2 0   100% 0 0   0%
src/local_deep_research/benchmarks/datasets/__init__.py   83% 12 2 0   100% 0 0   83%
src/local_deep_research/benchmarks/datasets/base.py   96% 101 4 0   95% 22 1   96%
src/local_deep_research/benchmarks/datasets/browsecomp.py   96% 51 2 0   86% 14 2   94%
src/local_deep_research/benchmarks/datasets/custom_dataset_template.py   100% 25 0 0   100% 6 0   100%
src/local_deep_research/benchmarks/datasets/simpleqa.py   100% 25 0 0   100% 6 0   100%
src/local_deep_research/benchmarks/datasets/utils.py   87% 63 8 0   88% 16 2   87%
src/local_deep_research/benchmarks/datasets/xbench_deepsearch.py   96% 91 4 0   88% 16 2   94%
src/local_deep_research/benchmarks/efficiency/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/efficiency/resource_monitor.py   97% 117 3 0   100% 36 0   98%
src/local_deep_research/benchmarks/efficiency/speed_profiler.py   95% 85 4 0   80% 30 4   91%
src/local_deep_research/benchmarks/evaluators/__init__.py   100% 5 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/evaluators/base.py   93% 15 1 0   100% 0 0   93%
src/local_deep_research/benchmarks/evaluators/browsecomp.py   100% 18 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/evaluators/composite.py   100% 31 0 0   100% 6 0   100%
src/local_deep_research/benchmarks/evaluators/simpleqa.py   100% 69 0 0   100% 4 0   100%
src/local_deep_research/benchmarks/graders.py   89% 245 26 0   82% 56 8   88%
src/local_deep_research/benchmarks/metrics.py   0% 3 3 0   100% 0 0   0%
src/local_deep_research/benchmarks/metrics/__init__.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/metrics/calculation.py   99% 142 2 0   100% 40 0   99%
src/local_deep_research/benchmarks/metrics/reporting.py   97% 60 2 0   90% 30 3   94%
src/local_deep_research/benchmarks/metrics/statistics.py   100% 53 0 0   100% 24 0   100%
src/local_deep_research/benchmarks/models/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/optimization/__init__.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/optimization/api.py   100% 16 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/optimization/metrics.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/optimization/optuna_optimizer.py   80% 368 72 0   74% 90 11   79%
src/local_deep_research/benchmarks/runners.py   100% 122 0 0   100% 42 0   100%
src/local_deep_research/benchmarks/templates.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/web_api/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/benchmarks/web_api/benchmark_service.py   97% 543 15 0   89% 140 16   95%
src/local_deep_research/chat/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/chat/context.py   96% 110 4 0   90% 50 5   94%
src/local_deep_research/chat/service.py   91% 420 36 0   92% 112 9   92%
src/local_deep_research/citation_handler.py   100% 39 0 0   92% 12 1   98%
src/local_deep_research/citation_handlers/__init__.py   100% 5 0 0   100% 0 0   100%
src/local_deep_research/citation_handlers/base_citation_handler.py   96% 171 6 0   95% 64 3   96%
src/local_deep_research/citation_handlers/forced_answer_citation_handler.py   100% 51 0 0   100% 16 0   100%
src/local_deep_research/citation_handlers/precision_extraction_handler.py   99% 213 1 0   92% 90 7   97%
src/local_deep_research/citation_handlers/standard_citation_handler.py   100% 49 0 0   100% 14 0   100%
src/local_deep_research/config/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/config/constants.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/config/llm_config.py   80% 560 112 0   74% 246 33   78%
src/local_deep_research/config/paths.py   99% 106 1 0   96% 28 1   99%
src/local_deep_research/config/search_config.py   100% 27 0 0   90% 10 1   97%
src/local_deep_research/config/thread_settings.py   99% 77 1 0   97% 38 1   98%
src/local_deep_research/constants.py   100% 64 0 0   100% 0 0   100%
src/local_deep_research/content_fetcher/__init__.py   100% 10 0 0   100% 2 0   100%
src/local_deep_research/content_fetcher/fetcher.py   95% 226 11 13   94% 94 6   95%
src/local_deep_research/content_fetcher/url_classifier.py   98% 95 2 0   95% 42 2   97%
src/local_deep_research/database/alembic_runner.py   94% 181 10 0   90% 58 6   93%
src/local_deep_research/database/auth_db.py   95% 98 5 0   81% 16 3   93%
src/local_deep_research/database/backup/__init__.py   100% 6 0 0   100% 0 0   100%
src/local_deep_research/database/backup/backup_executor.py   98% 60 1 0   80% 10 2   96%
src/local_deep_research/database/backup/backup_service.py   89% 522 56 0   92% 150 12   90%
src/local_deep_research/database/base.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/credential_store_base.py   95% 41 2 0   100% 10 0   96%
src/local_deep_research/database/encrypted_db.py   94% 1111 69 0   88% 280 28   93%
src/local_deep_research/database/initialize.py   93% 56 4 0   93% 14 1   93%
src/local_deep_research/database/library_init.py   100% 98 0 0   100% 12 0   100%
src/local_deep_research/database/models/__init__.py   100% 25 0 0   100% 0 0   100%
src/local_deep_research/database/models/active_research.py   94% 17 1 0   100% 0 0   94%
src/local_deep_research/database/models/auth.py   100% 18 0 0   100% 0 0   100%
src/local_deep_research/database/models/base.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/models/benchmark.py   100% 103 0 0   100% 0 0   100%
src/local_deep_research/database/models/chat.py   95% 60 3 0   100% 0 0   95%
src/local_deep_research/database/models/citation.py   94% 32 2 0   100% 0 0   94%
src/local_deep_research/database/models/download_tracker.py   100% 48 0 0   100% 0 0   100%
src/local_deep_research/database/models/file_integrity.py   100% 39 0 0   100% 0 0   100%
src/local_deep_research/database/models/journal.py   93% 14 1 0   100% 0 0   93%
src/local_deep_research/database/models/library.py   99% 315 3 0   100% 0 0   99%
src/local_deep_research/database/models/logs.py   94% 17 1 0   100% 0 0   94%
src/local_deep_research/database/models/metrics.py   96% 96 4 0   100% 0 0   96%
src/local_deep_research/database/models/news.py   100% 117 0 0   100% 0 0   100%
src/local_deep_research/database/models/note.py   94% 102 6 0   100% 0 0   94%
src/local_deep_research/database/models/providers.py   93% 14 1 0   100% 0 0   93%
src/local_deep_research/database/models/queue.py   100% 27 0 0   100% 0 0   100%
src/local_deep_research/database/models/queued_research.py   94% 16 1 0   100% 0 0   94%
src/local_deep_research/database/models/rate_limiting.py   93% 30 2 0   100% 0 0   93%
src/local_deep_research/database/models/reports.py   100% 53 0 0   100% 0 0   100%
src/local_deep_research/database/models/research.py   95% 156 8 0   75% 4 1   94%
src/local_deep_research/database/models/settings.py   95% 56 3 0   100% 0 0   95%
src/local_deep_research/database/models/user_base.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/database/models/user_news_search_history.py   93% 14 1 0   100% 0 0   93%
src/local_deep_research/database/models/zotero.py   94% 36 2 0   100% 0 0   94%
src/local_deep_research/database/pool_config.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/database/queue_service.py   100% 78 0 0   100% 22 0   100%
src/local_deep_research/database/rekey_epoch.py   100% 12 0 0   100% 2 0   100%
src/local_deep_research/database/rekey_lock.py   92% 465 37 0   84% 116 18   91%
src/local_deep_research/database/research_cascade.py   96% 266 10 0   92% 134 11   95%
src/local_deep_research/database/session_context.py   97% 118 3 0   100% 34 0   98%
src/local_deep_research/database/session_passwords.py   100% 49 0 0   92% 12 1   98%
src/local_deep_research/database/sqlcipher_compat.py   95% 86 4 0   81% 26 5   92%
src/local_deep_research/database/sqlcipher_utils.py   98% 281 7 1   95% 56 3   97%
src/local_deep_research/database/temp_auth.py   100% 24 0 0   100% 2 0   100%
src/local_deep_research/database/thread_local_session.py   92% 200 15 0   98% 42 1   93%
src/local_deep_research/database/thread_metrics.py   100% 66 0 0   91% 22 2   98%
src/local_deep_research/defaults/__init__.py   95% 19 1 0   75% 8 2   89%
src/local_deep_research/document_loaders/__init__.py   100% 5 0 0   100% 0 0   100%
src/local_deep_research/document_loaders/bounded_pdf.py   98% 54 1 0   94% 18 1   97%
src/local_deep_research/document_loaders/bytes_loader.py   90% 80 8 0   100% 18 0   92%
src/local_deep_research/document_loaders/evernote_loader.py   98% 51 1 0   92% 24 2   96%
src/local_deep_research/document_loaders/json_loader.py   100% 59 0 0   100% 12 0   100%
src/local_deep_research/document_loaders/loader_registry.py   95% 122 6 0   77% 30 5   91%
src/local_deep_research/document_loaders/openpyxl_hardening.py   88% 16 2 0   100% 4 0   90%
src/local_deep_research/document_loaders/text_encoding.py   100% 43 0 0   100% 12 0   100%
src/local_deep_research/document_loaders/toml_loader.py   100% 23 0 0   100% 6 0   100%
src/local_deep_research/document_loaders/xls_loader.py   97% 30 1 0   80% 10 2   92%
src/local_deep_research/document_loaders/yaml_loader.py   100% 44 0 0   100% 4 0   100%
src/local_deep_research/document_loaders/zip_container_guard.py   98% 1856 44 2   95% 880 44   97%
src/local_deep_research/domain_classifier/__init__.py   100% 9 0 0   100% 4 0   100%
src/local_deep_research/domain_classifier/classifier.py   94% 156 10 0   93% 42 3   93%
src/local_deep_research/domain_classifier/models.py   100% 18 0 0   100% 0 0   100%
src/local_deep_research/embeddings/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/embeddings/embeddings_config.py   97% 68 2 0   92% 24 2   96%
src/local_deep_research/embeddings/model_cache.py   98% 185 3 0   92% 52 4   97%
src/local_deep_research/embeddings/model_loading.py   97% 64 2 0   89% 18 2   95%
src/local_deep_research/embeddings/providers/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/embeddings/providers/base.py   92% 36 3 0   100% 2 0   92%
src/local_deep_research/embeddings/providers/implementations/__init__.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/embeddings/providers/implementations/ollama.py   96% 99 4 0   100% 20 0   97%
src/local_deep_research/embeddings/providers/implementations/openai.py   98% 160 3 0   98% 50 1   98%
src/local_deep_research/embeddings/providers/implementations/owned_openai_embeddings.py   89% 54 6 0   90% 10 1   89%
src/local_deep_research/embeddings/providers/implementations/sentence_transformers.py   95% 207 10 8   91% 80 7   94%
src/local_deep_research/embeddings/sentence_transformer_models.py   100% 16 0 0   100% 2 0   100%
src/local_deep_research/embeddings/splitters/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/embeddings/splitters/bounded_semantic_chunker.py   100% 34 0 3   83% 6 1   98%
src/local_deep_research/embeddings/splitters/text_splitter_registry.py   100% 60 0 2   95% 22 1   99%
src/local_deep_research/error_handling/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/error_handling/error_messages.py   100% 14 0 0   100% 8 0   100%
src/local_deep_research/error_handling/error_reporter.py   92% 90 7 0   86% 28 2   91%
src/local_deep_research/error_handling/openai_compat_errors.py   95% 60 3 0   95% 20 1   95%
src/local_deep_research/error_handling/report_generator.py   100% 116 0 0   97% 58 2   99%
src/local_deep_research/exceptions.py   100% 10 0 0   100% 0 0   100%
src/local_deep_research/exporters/__init__.py   83% 12 2 0   100% 0 0   83%
src/local_deep_research/exporters/base.py   91% 46 4 0   100% 12 0   93%
src/local_deep_research/exporters/latex_exporter.py   100% 29 0 0   100% 0 0   100%
src/local_deep_research/exporters/odt_exporter.py   96% 93 4 0   94% 18 1   95%
src/local_deep_research/exporters/pdf_exporter.py   100% 33 0 0   100% 2 0   100%
src/local_deep_research/exporters/quarto_exporter.py   100% 47 0 0   100% 2 0   100%
src/local_deep_research/exporters/registry.py   100% 34 0 0   100% 4 0   100%
src/local_deep_research/exporters/ris_exporter.py   100% 29 0 0   100% 0 0   100%
src/local_deep_research/followup_research/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/followup_research/models.py   100% 9 0 0   100% 0 0   100%
src/local_deep_research/followup_research/service.py   96% 54 2 0   100% 10 0   97%
src/local_deep_research/journal_quality/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/data_sources/__init__.py   93% 14 1 0   75% 4 1   89%
src/local_deep_research/journal_quality/data_sources/_openalex_common.py   98% 114 2 0   96% 50 2   98%
src/local_deep_research/journal_quality/data_sources/base.py   68% 41 13 0   0% 4 0   62%
src/local_deep_research/journal_quality/data_sources/doaj.py   96% 53 2 0   67% 6 2   93%
src/local_deep_research/journal_quality/data_sources/institutions.py   88% 76 9 0   60% 20 6   82%
src/local_deep_research/journal_quality/data_sources/jabref.py   92% 60 5 0   62% 16 4   86%
src/local_deep_research/journal_quality/data_sources/openalex.py   92% 83 7 0   77% 22 5   89%
src/local_deep_research/journal_quality/data_sources/predatory.py   95% 57 3 0   64% 14 3   89%
src/local_deep_research/journal_quality/db.py   97% 747 25 0   90% 278 26   95%
src/local_deep_research/journal_quality/downloader.py   85% 226 33 0   86% 44 6   86%
src/local_deep_research/journal_quality/models.py   100% 49 0 0   100% 0 0   100%
src/local_deep_research/journal_quality/scoring.py   100% 56 0 0   100% 44 0   100%
src/local_deep_research/library/download_management/__init__.py   100% 5 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/database_init.py   92% 24 2 0   75% 4 1   89%
src/local_deep_research/library/download_management/failure_classifier.py   98% 96 2 0   96% 54 2   97%
src/local_deep_research/library/download_management/filters/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/library/download_management/filters/resource_filter.py   100% 25 0 0   100% 4 0   100%
src/local_deep_research/library/download_management/models/__init__.py   98% 44 1 0   100% 0 0   98%
src/local_deep_research/library/download_management/retry_manager.py   99% 102 1 0   93% 28 2   98%
src/local_deep_research/library/download_management/status_tracker.py   94% 146 9 0   96% 48 2   94%
src/local_deep_research/llm/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/llm/cancellation.py   68% 68 22 0   73% 22 4   69%
src/local_deep_research/llm/llm_registry.py   100% 71 0 0   100% 14 0   100%
src/local_deep_research/llm/providers/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/_helpers.py   100% 73 0 0   100% 20 0   100%
src/local_deep_research/llm/providers/auto_discovery.py   99% 111 1 0   94% 36 2   98%
src/local_deep_research/llm/providers/base.py   100% 55 0 1   100% 10 0   100%
src/local_deep_research/llm/providers/implementations/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/anthropic.py   97% 75 2 0   95% 20 1   97%
src/local_deep_research/llm/providers/implementations/atlascloud.py   100% 14 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/custom_anthropic_endpoint.py   100% 39 0 0   100% 4 0   100%
src/local_deep_research/llm/providers/implementations/custom_openai_endpoint.py   100% 55 0 0   100% 10 0   100%
src/local_deep_research/llm/providers/implementations/deepseek.py   100% 14 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/google.py   100% 46 0 0   100% 12 0   100%
src/local_deep_research/llm/providers/implementations/ionos.py   100% 14 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/llamacpp.py   100% 40 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/lmstudio.py   100% 58 0 0   100% 6 0   100%
src/local_deep_research/llm/providers/implementations/ollama.py   97% 115 3 0   100% 18 0   98%
src/local_deep_research/llm/providers/implementations/openai.py   100% 45 0 0   100% 6 0   100%
src/local_deep_research/llm/providers/implementations/openrouter.py   100% 14 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/orcarouter.py   100% 12 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/qwen.py   100% 14 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/requesty.py   100% 14 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/implementations/xai.py   100% 14 0 0   100% 0 0   100%
src/local_deep_research/llm/providers/openai_base.py   98% 134 3 0   92% 38 3   97%
src/local_deep_research/mcp/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/mcp/__main__.py   67% 3 1 0   50% 2 1   60%
src/local_deep_research/mcp/server.py   97% 326 11 0   93% 84 6   96%
src/local_deep_research/metrics/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/metrics/database.py   100% 25 0 0   100% 6 0   100%
src/local_deep_research/metrics/pricing/__init__.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/metrics/pricing/cost_calculator.py   100% 94 0 0   96% 28 1   99%
src/local_deep_research/metrics/pricing/pricing_cache.py   100% 29 0 0   100% 0 0   100%
src/local_deep_research/metrics/pricing/pricing_fetcher.py   99% 68 1 0   97% 38 1   98%
src/local_deep_research/metrics/query_utils.py   100% 40 0 0   100% 12 0   100%
src/local_deep_research/metrics/search_tracker.py   98% 153 3 0   95% 44 2   97%
src/local_deep_research/metrics/token_counter.py   98% 579 11 0   93% 230 13   97%
src/local_deep_research/news/__init__.py   100% 7 0 0   100% 0 0   100%
src/local_deep_research/news/api.py   95% 424 22 0   93% 136 9   94%
src/local_deep_research/news/constants.py   100% 80 0 0   100% 40 0   100%
src/local_deep_research/news/core/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/core/base_card.py   99% 145 2 0   100% 14 0   99%
src/local_deep_research/news/core/card_factory.py   98% 124 2 0   94% 36 2   98%
src/local_deep_research/news/core/card_storage.py   99% 149 2 0   92% 48 4   97%
src/local_deep_research/news/core/news_analyzer.py   100% 166 0 0   98% 58 1   99%
src/local_deep_research/news/core/relevance_service.py   100% 52 0 0   100% 30 0   100%
src/local_deep_research/news/core/search_integration.py   94% 52 3 0   100% 6 0   95%
src/local_deep_research/news/core/storage.py   71% 69 20 0   100% 0 0   71%
src/local_deep_research/news/core/storage_manager.py   96% 154 6 0   86% 42 6   94%
src/local_deep_research/news/core/utils.py   100% 35 0 0   100% 8 0   100%
src/local_deep_research/news/exceptions.py   100% 56 0 0   100% 6 0   100%
src/local_deep_research/news/folder_manager.py   100% 83 0 0   100% 22 0   100%
src/local_deep_research/news/preference_manager/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/preference_manager/base_preference.py   97% 70 2 0   100% 14 0   98%
src/local_deep_research/news/preference_manager/storage.py   100% 98 0 0   94% 32 2   98%
src/local_deep_research/news/rating_system/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/rating_system/base_rater.py   95% 77 4 0   93% 14 1   95%
src/local_deep_research/news/rating_system/storage.py   97% 92 3 0   91% 32 3   95%
src/local_deep_research/news/recommender/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/recommender/base_recommender.py   98% 63 1 0   100% 20 0   99%
src/local_deep_research/news/recommender/topic_based.py   97% 115 4 0   96% 28 1   97%
src/local_deep_research/news/subscription_runner.py   100% 31 0 0   100% 10 0   100%
src/local_deep_research/news/utils/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/news/utils/headline_generator.py   98% 57 1 0   90% 10 1   97%
src/local_deep_research/news/utils/topic_generator.py   97% 88 3 0   96% 28 1   97%
src/local_deep_research/notifications/__init__.py   100% 8 0 0   100% 0 0   100%
src/local_deep_research/notifications/apprise_log_utils.py   100% 21 0 0   100% 4 0   100%
src/local_deep_research/notifications/exceptions.py   100% 10 0 0   100% 0 0   100%
src/local_deep_research/notifications/manager.py   97% 265 7 0   97% 76 2   97%
src/local_deep_research/notifications/queue_helpers.py   98% 127 3 0   97% 30 1   97%
src/local_deep_research/notifications/service.py   92% 206 16 0   95% 78 4   93%
src/local_deep_research/notifications/templates.py   97% 88 3 0   94% 18 1   96%
src/local_deep_research/notifications/url_builder.py   100% 27 0 0   100% 8 0   100%
src/local_deep_research/report_generator.py   91% 612 56 0   83% 308 37   88%
src/local_deep_research/research_library/__init__.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/research_library/deletion/__init__.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/research_library/deletion/services/__init__.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/research_library/deletion/services/bulk_deletion.py   96% 67 3 0   91% 22 2   94%
src/local_deep_research/research_library/deletion/services/collection_deletion.py   97% 140 4 0   100% 30 0   98%
src/local_deep_research/research_library/deletion/services/document_deletion.py   98% 216 4 0   92% 64 5   97%
src/local_deep_research/research_library/deletion/utils/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/research_library/deletion/utils/cascade_helper.py   96% 275 12 0   98% 96 2   96%
src/local_deep_research/research_library/downloaders/__init__.py   100% 10 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/arxiv.py   98% 333 7 0   96% 148 6   97%
src/local_deep_research/research_library/downloaders/base.py   96% 241 9 0   94% 70 4   96%
src/local_deep_research/research_library/downloaders/biorxiv.py   97% 98 3 0   100% 40 0   98%
src/local_deep_research/research_library/downloaders/direct_pdf.py   98% 60 1 0   96% 28 1   98%
src/local_deep_research/research_library/downloaders/extraction/__init__.py   100% 8 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/extraction/base.py   100% 5 0 0   100% 0 0   100%
src/local_deep_research/research_library/downloaders/extraction/justext_extractor.py   100% 32 0 0   100% 8 0   100%
src/local_deep_research/research_library/downloaders/extraction/metadata_extractor.py   100% 154 0 0   97% 92 3   99%
src/local_deep_research/research_library/downloaders/extraction/newspaper_extractor.py   100% 23 0 0   100% 2 0   100%
src/local_deep_research/research_library/downloaders/extraction/pipeline.py   93% 377 28 15   92% 140 7   92%
src/local_deep_research/research_library/downloaders/extraction/readability_extractor.py   100% 104 0 0   100% 26 0   100%
src/local_deep_research/research_library/downloaders/extraction/trafilatura_extractor.py   96% 28 1 0   75% 4 1   94%
src/local_deep_research/research_library/downloaders/generic.py   99% 90 1 0   95% 38 2   98%
src/local_deep_research/research_library/downloaders/html.py   97% 296 9 1   95% 108 5   97%
src/local_deep_research/research_library/downloaders/openalex.py   98% 105 2 0   96% 28 1   98%
src/local_deep_research/research_library/downloaders/playwright_html.py   91% 552 48 0   84% 174 26   90%
src/local_deep_research/research_library/downloaders/pubmed.py   96% 281 10 0   92% 130 9   95%
src/local_deep_research/research_library/downloaders/semantic_scholar.py   99% 75 1 0   90% 20 2   97%
src/local_deep_research/research_library/extraction_catalog.py   100% 5 0 0   100% 0 0   100%
src/local_deep_research/research_library/notes/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/research_library/notes/services/__init__.py   100% 8 0 0   100% 0 0   100%
src/local_deep_research/research_library/notes/services/note_ai_service.py   100% 587 0 0   97% 202 7   99%
src/local_deep_research/research_library/notes/services/note_service.py   92% 949 75 0   92% 302 22   92%
src/local_deep_research/research_library/search/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/research_library/search/services/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/research_library/search/services/research_history_indexer.py   100% 107 0 0   96% 28 1   99%
src/local_deep_research/research_library/services/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/research_library/services/collection_rebuild.py   96% 225 9 2   89% 54 6   95%
src/local_deep_research/research_library/services/download_service.py   96% 1265 46 0   90% 486 45   95%
src/local_deep_research/research_library/services/faiss_safe_load.py   100% 16 0 0   100% 2 0   100%
src/local_deep_research/research_library/services/library_rag_service.py   91% 1188 105 0   89% 370 37   91%
src/local_deep_research/research_library/services/library_service.py   94% 475 27 0   89% 184 15   93%
src/local_deep_research/research_library/services/pdf_storage_manager.py   94% 208 12 0   95% 64 3   94%
src/local_deep_research/research_library/services/rag_service_factory.py   93% 71 5 0   94% 16 1   93%
src/local_deep_research/research_library/utils/__init__.py   96% 233 10 0   94% 82 5   95%
src/local_deep_research/research_library/zotero/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/research_library/zotero/client.py   99% 369 2 0   95% 126 6   98%
src/local_deep_research/research_library/zotero/sync_service.py   99% 709 2 0   95% 242 11   99%
src/local_deep_research/scheduler/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/scheduler/background.py   95% 919 47 0   91% 224 12   94%
src/local_deep_research/search_system.py   84% 205 32 2   75% 72 14   82%
src/local_deep_research/search_system_factory.py   92% 75 6 0   87% 38 5   90%
src/local_deep_research/security/__init__.py   100% 35 0 0   100% 4 0   100%
src/local_deep_research/security/account_lockout.py   100% 72 0 0   96% 28 1   99%
src/local_deep_research/security/client_safe_errors.py   100% 8 0 0   100% 4 0   100%
src/local_deep_research/security/data_sanitizer.py   99% 125 1 0   98% 56 1   99%
src/local_deep_research/security/directory_creation.py   100% 20 0 0   100% 10 0   100%
src/local_deep_research/security/dns_pinning.py   94% 199 12 0   83% 66 11   91%
src/local_deep_research/security/egress/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/security/egress/audit_hook.py   91% 81 7 2   77% 30 7   87%
src/local_deep_research/security/egress/classification.py   100% 48 0 0   100% 8 0   100%
src/local_deep_research/security/egress/fetch.py   100% 12 0 0   100% 4 0   100%
src/local_deep_research/security/egress/guidance.py   96% 27 1 0   92% 12 1   95%
src/local_deep_research/security/egress/policy.py   93% 762 56 26   94% 340 16   93%
src/local_deep_research/security/egress/run_classification.py   98% 90 2 0   100% 28 0   98%
src/local_deep_research/security/egress/validators.py   89% 306 33 0   92% 126 10   90%
src/local_deep_research/security/egress/warnings.py   92% 145 11 0   94% 66 4   93%
src/local_deep_research/security/file_integrity/__init__.py   100% 5 0 0   100% 0 0   100%
src/local_deep_research/security/file_integrity/base_verifier.py   88% 26 3 0   100% 2 0   89%
src/local_deep_research/security/file_integrity/integrity_manager.py   98% 223 4 0   96% 78 1   98%
src/local_deep_research/security/file_integrity/verifiers/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/security/file_integrity/verifiers/faiss_verifier.py   100% 9 0 0   100% 0 0   100%
src/local_deep_research/security/file_upload_validator.py   100% 79 0 0   100% 30 0   100%
src/local_deep_research/security/file_write_verifier.py   98% 63 1 0   90% 20 2   96%
src/local_deep_research/security/filename_sanitizer.py   100% 43 0 0   96% 24 1   99%
src/local_deep_research/security/ip_ranges.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/security/legacy_ipv4.py   100% 87 0 0   100% 36 0   100%
src/local_deep_research/security/log_sanitizer.py   94% 1592 95 0   90% 732 67   93%
src/local_deep_research/security/module_whitelist.py   100% 41 0 0   100% 12 0   100%
src/local_deep_research/security/network_utils.py   100% 27 0 0   100% 10 0   100%
src/local_deep_research/security/notification_destination.py   89% 222 25 0   83% 90 15   87%
src/local_deep_research/security/notification_validator.py   97% 391 11 0   98% 168 3   97%
src/local_deep_research/security/password_validator.py   100% 15 0 0   100% 6 0   100%
src/local_deep_research/security/path_validator.py   94% 214 12 0   98% 102 2   96%
src/local_deep_research/security/safe_requests.py   98% 441 9 2   94% 162 7   97%
src/local_deep_research/security/secure_logging.py   100% 21 0 0   100% 0 0   100%
src/local_deep_research/security/security_settings.py   95% 55 3 0   95% 20 1   95%
src/local_deep_research/security/ssrf_validator.py   97% 233 8 0   95% 100 5   96%
src/local_deep_research/security/toml_limits.py   100% 33 0 0   100% 14 0   100%
src/local_deep_research/security/url_builder.py   93% 70 5 0   100% 26 0   95%
src/local_deep_research/security/url_redaction.py   97% 118 4 0   93% 56 4   95%
src/local_deep_research/security/url_validator.py   93% 176 13 0   98% 86 2   94%
src/local_deep_research/settings/__init__.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/settings/base.py   70% 30 9 0   100% 0 0   70%
src/local_deep_research/settings/env_definitions/__init__.py   100% 11 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/bootstrap.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/db_config.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/news_scheduler.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/queue_processor.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/security.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/server.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/settings/env_definitions/testing.py   100% 8 0 0   100% 0 0   100%
src/local_deep_research/settings/env_registry.py   100% 42 0 0   100% 10 0   100%
src/local_deep_research/settings/env_settings.py   99% 211 3 0   97% 72 2   98%
src/local_deep_research/settings/exceptions.py   95% 38 2 0   75% 8 2   91%
src/local_deep_research/settings/logger.py   98% 87 2 0   93% 44 3   96%
src/local_deep_research/settings/manager.py   95% 738 34 0   93% 350 20   95%
src/local_deep_research/storage/__init__.py   100% 5 0 0   100% 0 0   100%
src/local_deep_research/storage/base.py   71% 21 6 0   100% 0 0   71%
src/local_deep_research/storage/database.py   96% 72 3 0   100% 12 0   96%
src/local_deep_research/storage/database_with_file_backup.py   100% 47 0 0   100% 10 0   100%
src/local_deep_research/storage/factory.py   100% 16 0 0   100% 4 0   100%
src/local_deep_research/storage/file.py   97% 101 3 0   100% 18 0   97%
src/local_deep_research/text_optimization/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/text_optimization/citation_formatter.py   98% 1104 24 0   96% 486 18   97%
src/local_deep_research/text_processing/__init__.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/text_processing/text_cleaner.py   100% 9 0 0   100% 2 0   100%
src/local_deep_research/utilities/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/utilities/arxiv.py   100% 47 0 0   100% 12 0   100%
src/local_deep_research/utilities/arxiv_api.py   95% 125 6 3   65% 26 7   90%
src/local_deep_research/utilities/chunk_anchor.py   97% 102 3 0   98% 62 1   98%
src/local_deep_research/utilities/citation_normalizer.py   92% 186 14 0   88% 114 10   91%
src/local_deep_research/utilities/db_utils.py   97% 77 2 0   100% 22 0   98%
src/local_deep_research/utilities/download_url.py   95% 59 3 0   78% 18 4   91%
src/local_deep_research/utilities/enums.py   100% 6 0 0   100% 0 0   100%
src/local_deep_research/utilities/es_utils.py   98% 125 3 0   97% 30 1   97%
src/local_deep_research/utilities/formatting.py   100% 8 0 0   100% 4 0   100%
src/local_deep_research/utilities/host_match.py   100% 12 0 0   100% 2 0   100%
src/local_deep_research/utilities/js_rendering.py   100% 5 0 0   100% 0 0   100%
src/local_deep_research/utilities/json_utils.py   100% 93 0 0   91% 56 5   97%
src/local_deep_research/utilities/llm_utils.py   100% 102 0 0   100% 32 0   100%
src/local_deep_research/utilities/log_utils.py   89% 301 34 0   80% 102 12   87%
src/local_deep_research/utilities/lxml_thread_safety.py   93% 44 3 0   100% 10 0   94%
src/local_deep_research/utilities/metric_write_health.py   100% 38 0 0   100% 10 0   100%
src/local_deep_research/utilities/office_conversion.py   91% 80 7 2   83% 18 3   90%
src/local_deep_research/utilities/openalex_enrichment.py   99% 135 1 0   97% 64 2   98%
src/local_deep_research/utilities/pandoc_conversion.py   94% 122 7 4   88% 26 3   93%
src/local_deep_research/utilities/pdf_extraction_limits.py   100% 5 0 0   100% 0 0   100%
src/local_deep_research/utilities/pdf_page_walk.py   91% 22 2 2   100% 2 0   92%
src/local_deep_research/utilities/pdf_stream_release.py   93% 557 37 0   93% 214 14   93%
src/local_deep_research/utilities/request_context.py   100% 30 0 0   100% 0 0   100%
src/local_deep_research/utilities/research_content_cache.py   85% 234 36 10   74% 92 16   82%
src/local_deep_research/utilities/resource_utils.py   100% 14 0 0   100% 8 0   100%
src/local_deep_research/utilities/search_utilities.py   92% 746 61 0   90% 398 34   91%
src/local_deep_research/utilities/setup_utils.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/utilities/sql_utils.py   100% 2 0 0   100% 0 0   100%
src/local_deep_research/utilities/thread_context.py   96% 50 2 0   100% 10 0   97%
src/local_deep_research/utilities/threading_utils.py   100% 15 0 0   100% 2 0   100%
src/local_deep_research/utilities/type_utils.py   97% 96 3 0   98% 62 1   97%
src/local_deep_research/utilities/url_utils.py   92% 246 19 0   92% 116 9   92%
src/local_deep_research/vector_stores/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/vector_stores/base.py   100% 38 0 3   25% 4 3   93%
src/local_deep_research/vector_stores/config.py   100% 30 0 0   100% 6 0   100%
src/local_deep_research/vector_stores/facade.py   96% 163 6 0   85% 46 5   94%
src/local_deep_research/vector_stores/implementations/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/vector_stores/implementations/faiss_store.py   94% 401 25 0   88% 144 17   92%
src/local_deep_research/vector_stores/legacy_cleanup.py   92% 240 20 0   97% 72 2   93%
src/local_deep_research/vector_stores/legacy_rekey.py   99% 184 1 0   96% 50 2   99%
src/local_deep_research/web/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/app.py   98% 46 1 0   83% 6 1   96%
src/local_deep_research/web/auth/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/auth/connection_cleanup.py   94% 128 8 0   100% 22 0   95%
src/local_deep_research/web/auth/password_utils.py   100% 21 0 0   100% 8 0   100%
src/local_deep_research/web/auth/session_manager.py   100% 112 0 0   100% 36 0   100%
src/local_deep_research/web/database/benchmark_schema.py   100% 30 0 0   100% 6 0   100%
src/local_deep_research/web/dependencies/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/dependencies/auth.py   99% 145 2 0   93% 54 4   97%
src/local_deep_research/web/dependencies/csrf.py   97% 118 4 0   95% 40 2   96%
src/local_deep_research/web/dependencies/flash.py   100% 10 0 0   100% 2 0   100%
src/local_deep_research/web/dependencies/json_body.py   100% 23 0 0   100% 6 0   100%
src/local_deep_research/web/dependencies/rate_limit.py   98% 448 9 3   96% 178 7   97%
src/local_deep_research/web/dependencies/template_helpers.py   100% 33 0 0   100% 8 0   100%
src/local_deep_research/web/dependencies/threadpool.py   92% 124 10 4   85% 26 0   91%
src/local_deep_research/web/exceptions.py   100% 20 0 0   100% 4 0   100%
src/local_deep_research/web/fastapi_app.py   93% 888 66 0   92% 258 20   92%
src/local_deep_research/web/models/database.py   100% 82 0 0   88% 16 2   98%
src/local_deep_research/web/models/settings.py   94% 51 3 0   80% 10 0   92%
src/local_deep_research/web/queue/__init__.py   100% 4 0 0   100% 0 0   100%
src/local_deep_research/web/queue/lifecycle_cleanup.py   96% 47 2 0   90% 20 2   94%
src/local_deep_research/web/queue/manager.py   100% 68 0 0   100% 8 0   100%
src/local_deep_research/web/queue/processor_v2.py   95% 692 36 0   86% 192 24   93%
src/local_deep_research/web/research_state.py   99% 167 1 0   94% 48 3   98%
src/local_deep_research/web/routers/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/routers/api.py   100% 208 0 0   98% 52 1   99%
src/local_deep_research/web/routers/api_v1.py   97% 301 10 0   98% 106 2   97%
src/local_deep_research/web/routers/auth.py   92% 489 41 0   90% 100 10   91%
src/local_deep_research/web/routers/benchmark.py   94% 393 22 0   89% 126 14   93%
src/local_deep_research/web/routers/chat.py   99% 588 1 2   94% 144 8   99%
src/local_deep_research/web/routers/context_overflow_api.py   100% 106 0 0   100% 24 0   100%
src/local_deep_research/web/routers/followup.py   86% 187 27 0   90% 30 1   86%
src/local_deep_research/web/routers/history.py   100% 175 0 0   100% 34 0   100%
src/local_deep_research/web/routers/library.py   96% 652 28 0   95% 164 6   96%
src/local_deep_research/web/routers/library_delete.py   100% 176 0 0   100% 56 0   100%
src/local_deep_research/web/routers/library_search.py   97% 175 6 0   92% 50 4   96%
src/local_deep_research/web/routers/metrics.py   99% 942 10 0   96% 268 11   98%
src/local_deep_research/web/routers/news_flask_api.py   92% 732 57 0   95% 188 9   93%
src/local_deep_research/web/routers/news_pages.py   100% 64 0 0   100% 4 0   100%
src/local_deep_research/web/routers/notes.py   96% 1180 51 0   96% 332 11   96%
src/local_deep_research/web/routers/rag.py   96% 1468 62 0   96% 418 14   96%
src/local_deep_research/web/routers/research.py   93% 1051 69 3   94% 330 17   94%
src/local_deep_research/web/routers/scheduler.py   100% 25 0 0   100% 2 0   100%
src/local_deep_research/web/routers/settings.py   97% 1575 53 14   95% 658 32   96%
src/local_deep_research/web/routers/unified_search.py   98% 130 3 0   98% 42 1   98%
src/local_deep_research/web/routers/zotero.py   92% 120 10 0   100% 30 0   93%
src/local_deep_research/web/routes/_search_constants.py   100% 1 0 0   100% 0 0   100%
src/local_deep_research/web/routes/globals.py   100% 1 0 0   100% 0 0   100%
src/local_deep_research/web/routes/research_validation.py   100% 30 0 0   100% 10 0   100%
src/local_deep_research/web/server_config.py   100% 72 0 0   100% 34 0   100%
src/local_deep_research/web/services/pdf_extraction_service.py   98% 83 2 0   100% 20 0   98%
src/local_deep_research/web/services/pdf_service.py   93% 146 10 0   79% 28 4   91%
src/local_deep_research/web/services/report_assembly_service.py   95% 142 7 0   95% 62 3   95%
src/local_deep_research/web/services/research_service.py   93% 1075 79 0   90% 368 28   92%
src/local_deep_research/web/services/research_sources_service.py   89% 296 32 0   87% 134 16   88%
src/local_deep_research/web/services/resource_service.py   100% 40 0 0   100% 4 0   100%
src/local_deep_research/web/services/settings_service.py   96% 84 3 0   89% 38 2   94%
src/local_deep_research/web/services/socketio_asgi.py   99% 421 2 0   89% 152 16   97%
src/local_deep_research/web/static_files.py   92% 38 3 0   90% 10 1   92%
src/local_deep_research/web/template_config.py   94% 84 5 0   73% 30 6   89%
src/local_deep_research/web/themes/__init__.py   100% 77 0 0   91% 22 2   98%
src/local_deep_research/web/themes/loader.py   94% 86 5 0   79% 28 4   90%
src/local_deep_research/web/themes/schema.py   100% 17 0 0   100% 0 0   100%
src/local_deep_research/web/utils/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web/utils/download_headers.py   100% 13 0 0   100% 4 0   100%
src/local_deep_research/web/utils/pagination.py   100% 10 0 0   100% 2 0   100%
src/local_deep_research/web/utils/path_ids.py   100% 11 0 0   100% 0 0   100%
src/local_deep_research/web/utils/range_response.py   100% 42 0 0   100% 16 0   100%
src/local_deep_research/web/utils/request_timing.py   100% 36 0 0   100% 6 0   100%
src/local_deep_research/web/utils/vite_helper.py   94% 283 16 0   90% 118 12   93%
src/local_deep_research/web/warning_checks/__init__.py   90% 167 17 0   88% 58 7   89%
src/local_deep_research/web/warning_checks/backup.py   100% 30 0 0   100% 18 0   100%
src/local_deep_research/web/warning_checks/context.py   100% 21 0 0   100% 8 0   100%
src/local_deep_research/web/warning_checks/hardware.py   100% 29 0 0   100% 20 0   100%
src/local_deep_research/web_search_engines/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engine_availability.py   97% 250 7 0   96% 78 3   97%
src/local_deep_research/web_search_engines/engine_groups.py   100% 27 0 0   100% 4 0   100%
src/local_deep_research/web_search_engines/engine_registry.py   100% 10 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/__init__.py   100% 0 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/engines/_google_pse_rate_limiter.py   100% 35 0 0   100% 6 0   100%
src/local_deep_research/web_search_engines/engines/_searxng_rate_limiter.py   99% 120 1 0   98% 40 1   99%
src/local_deep_research/web_search_engines/engines/full_search.py   98% 236 4 4   94% 84 5   97%
src/local_deep_research/web_search_engines/engines/local_embedding_manager.py   100% 76 0 0   100% 18 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_arxiv.py   100% 207 0 0   98% 52 1   99%
src/local_deep_research/web_search_engines/engines/search_engine_brave.py   98% 51 1 0   100% 8 0   98%
src/local_deep_research/web_search_engines/engines/search_engine_collection.py   100% 106 0 0   94% 32 2   99%
src/local_deep_research/web_search_engines/engines/search_engine_elasticsearch.py   94% 240 14 0   93% 60 4   94%
src/local_deep_research/web_search_engines/engines/search_engine_exa.py   100% 79 0 0   96% 26 1   99%
src/local_deep_research/web_search_engines/engines/search_engine_federal_register.py   93% 273 20 0   88% 78 9   92%
src/local_deep_research/web_search_engines/engines/search_engine_github.py   99% 349 2 0   97% 110 3   99%
src/local_deep_research/web_search_engines/engines/search_engine_google_pse.py   94% 135 8 0   92% 36 3   94%
src/local_deep_research/web_search_engines/engines/search_engine_guardian.py   98% 252 6 0   92% 78 6   96%
src/local_deep_research/web_search_engines/engines/search_engine_gutenberg.py   96% 212 9 0   88% 80 10   93%
src/local_deep_research/web_search_engines/engines/search_engine_library.py   99% 212 2 0   92% 62 5   97%
src/local_deep_research/web_search_engines/engines/search_engine_mojeek.py   99% 78 1 0   95% 22 1   98%
src/local_deep_research/web_search_engines/engines/search_engine_nasa_ads.py   92% 152 12 0   87% 54 7   91%
src/local_deep_research/web_search_engines/engines/search_engine_openalex.py   99% 224 2 0   92% 76 6   97%
src/local_deep_research/web_search_engines/engines/search_engine_openlibrary.py   91% 220 19 0   83% 90 15   89%
src/local_deep_research/web_search_engines/engines/search_engine_paperless.py   95% 316 17 0   82% 100 16   92%
src/local_deep_research/web_search_engines/engines/search_engine_pubchem.py   98% 261 5 0   79% 80 17   94%
src/local_deep_research/web_search_engines/engines/search_engine_pubmed.py   98% 733 15 0   86% 356 51   94%
src/local_deep_research/web_search_engines/engines/search_engine_retriever.py   100% 60 0 0   100% 12 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_scaleserp.py   100% 78 0 0   94% 18 1   99%
src/local_deep_research/web_search_engines/engines/search_engine_searxng.py   96% 271 10 0   95% 86 4   96%
src/local_deep_research/web_search_engines/engines/search_engine_semantic_scholar.py   98% 292 5 0   92% 100 8   97%
src/local_deep_research/web_search_engines/engines/search_engine_serpapi.py   100% 41 0 0   100% 6 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_serper.py   100% 80 0 0   94% 16 1   99%
src/local_deep_research/web_search_engines/engines/search_engine_serply.py   94% 66 4 0   100% 10 0   95%
src/local_deep_research/web_search_engines/engines/search_engine_sofya.py   100% 77 0 0   100% 16 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_stackexchange.py   96% 237 10 0   89% 56 6   95%
src/local_deep_research/web_search_engines/engines/search_engine_tavily.py   100% 65 0 0   93% 14 1   99%
src/local_deep_research/web_search_engines/engines/search_engine_tinyfish.py   87% 117 15 0   75% 28 7   85%
src/local_deep_research/web_search_engines/engines/search_engine_wayback.py   98% 306 5 0   97% 102 3   98%
src/local_deep_research/web_search_engines/engines/search_engine_webz.py   98% 155 3 0   97% 78 2   98%
src/local_deep_research/web_search_engines/engines/search_engine_wikinews.py   98% 165 4 0   86% 42 6   95%
src/local_deep_research/web_search_engines/engines/search_engine_wikipedia.py   100% 139 0 0   100% 18 0   100%
src/local_deep_research/web_search_engines/engines/search_engine_zenodo.py   98% 175 4 0   92% 52 4   96%
src/local_deep_research/web_search_engines/rate_limiting/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/rate_limiting/exceptions.py   100% 8 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/rate_limiting/llm/__init__.py   100% 3 0 0   100% 0 0   100%
src/local_deep_research/web_search_engines/rate_limiting/llm/detection.py   92% 48 4 0   96% 26 1   93%
src/local_deep_research/web_search_engines/rate_limiting/llm/wrapper.py   92% 286 22 0   91% 78 5   92%
src/local_deep_research/web_search_engines/rate_limiting/tracker.py   93% 408 28 2   92% 142 9   93%
src/local_deep_research/web_search_engines/relevance_filter.py   95% 194 9 0   93% 76 5   95%
src/local_deep_research/web_search_engines/retriever_registry.py   100% 86 0 0   100% 24 0   100%
src/local_deep_research/web_search_engines/search_engine_base.py   96% 670 30 32   92% 238 19   95%
src/local_deep_research/web_search_engines/search_engine_factory.py   91% 426 37 0   87% 260 27   90%
src/local_deep_research/web_search_engines/search_engines_config.py   92% 226 18 0   96% 90 4   93%
src/local_deep_research/web_search_engines/wayback_client.py   99% 107 1 0   96% 48 2   98%
Total   95% 78278 3553 187   92% 25936 1792   95%

No items found using the specified filter.