local-deep-research 0.5.7__tar.gz → 0.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. local_deep_research-0.6.0/PKG-INFO +374 -0
  2. local_deep_research-0.6.0/README.md +292 -0
  3. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/pyproject.toml +5 -1
  4. local_deep_research-0.6.0/src/local_deep_research/__version__.py +1 -0
  5. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/candidate_exploration/progressive_explorer.py +11 -1
  6. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/questions/browsecomp_question.py +32 -6
  7. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/focused_iteration_strategy.py +33 -8
  8. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/source_based_strategy.py +2 -0
  9. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/api/__init__.py +2 -0
  10. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/api/research_functions.py +177 -3
  11. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/graders.py +150 -5
  12. local_deep_research-0.6.0/src/local_deep_research/benchmarks/models/__init__.py +19 -0
  13. local_deep_research-0.6.0/src/local_deep_research/benchmarks/models/benchmark_models.py +283 -0
  14. local_deep_research-0.6.0/src/local_deep_research/benchmarks/ui/__init__.py +1 -0
  15. local_deep_research-0.6.0/src/local_deep_research/benchmarks/web_api/__init__.py +6 -0
  16. local_deep_research-0.6.0/src/local_deep_research/benchmarks/web_api/benchmark_routes.py +862 -0
  17. local_deep_research-0.6.0/src/local_deep_research/benchmarks/web_api/benchmark_service.py +920 -0
  18. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/config/llm_config.py +106 -21
  19. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/defaults/default_settings.json +448 -3
  20. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/error_handling/report_generator.py +10 -0
  21. local_deep_research-0.6.0/src/local_deep_research/llm/__init__.py +19 -0
  22. local_deep_research-0.6.0/src/local_deep_research/llm/llm_registry.py +155 -0
  23. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/db_models.py +3 -7
  24. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/search_tracker.py +25 -11
  25. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/report_generator.py +3 -2
  26. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/search_system.py +12 -9
  27. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/utilities/log_utils.py +23 -10
  28. local_deep_research-0.6.0/src/local_deep_research/utilities/thread_context.py +99 -0
  29. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/app_factory.py +32 -8
  30. local_deep_research-0.6.0/src/local_deep_research/web/database/benchmark_schema.py +230 -0
  31. local_deep_research-0.6.0/src/local_deep_research/web/database/convert_research_id_to_string.py +161 -0
  32. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/database/models.py +55 -1
  33. local_deep_research-0.6.0/src/local_deep_research/web/database/schema_upgrade.py +519 -0
  34. local_deep_research-0.6.0/src/local_deep_research/web/database/uuid_migration.py +265 -0
  35. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/routes/api_routes.py +62 -31
  36. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/routes/history_routes.py +13 -6
  37. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/routes/metrics_routes.py +264 -4
  38. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/routes/research_routes.py +45 -18
  39. local_deep_research-0.6.0/src/local_deep_research/web/routes/route_registry.py +352 -0
  40. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/routes/settings_routes.py +382 -22
  41. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/services/research_service.py +22 -29
  42. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/services/settings_manager.py +53 -0
  43. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/services/settings_service.py +2 -0
  44. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/css/styles.css +8 -0
  45. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/detail.js +7 -14
  46. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/details.js +8 -10
  47. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/fallback/ui.js +4 -4
  48. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/history.js +6 -6
  49. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/logpanel.js +14 -11
  50. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/progress.js +51 -46
  51. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/research.js +250 -89
  52. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/results.js +5 -7
  53. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/settings.js +32 -26
  54. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/settings_sync.js +24 -23
  55. local_deep_research-0.6.0/src/local_deep_research/web/static/js/config/urls.js +285 -0
  56. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/main.js +8 -8
  57. local_deep_research-0.6.0/src/local_deep_research/web/static/js/research_form.js +361 -0
  58. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/services/api.js +18 -18
  59. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/services/keyboard.js +8 -8
  60. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/services/socket.js +53 -35
  61. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/services/ui.js +1 -1
  62. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/base.html +4 -1
  63. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/components/custom_dropdown.html +5 -3
  64. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/components/mobile_nav.html +3 -3
  65. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/components/sidebar.html +9 -3
  66. local_deep_research-0.6.0/src/local_deep_research/web/templates/pages/benchmark.html +2697 -0
  67. local_deep_research-0.6.0/src/local_deep_research/web/templates/pages/benchmark_results.html +1136 -0
  68. local_deep_research-0.6.0/src/local_deep_research/web/templates/pages/benchmark_simple.html +453 -0
  69. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/pages/cost_analytics.html +1 -1
  70. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/pages/metrics.html +212 -39
  71. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/pages/research.html +8 -6
  72. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/pages/star_reviews.html +1 -1
  73. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_arxiv.py +14 -1
  74. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_brave.py +15 -1
  75. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_ddg.py +20 -1
  76. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_google_pse.py +26 -2
  77. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_pubmed.py +15 -1
  78. local_deep_research-0.6.0/src/local_deep_research/web_search_engines/engines/search_engine_retriever.py +192 -0
  79. local_deep_research-0.6.0/src/local_deep_research/web_search_engines/engines/search_engine_tavily.py +307 -0
  80. local_deep_research-0.6.0/src/local_deep_research/web_search_engines/rate_limiting/__init__.py +14 -0
  81. local_deep_research-0.6.0/src/local_deep_research/web_search_engines/rate_limiting/__main__.py +9 -0
  82. local_deep_research-0.6.0/src/local_deep_research/web_search_engines/rate_limiting/cli.py +209 -0
  83. local_deep_research-0.6.0/src/local_deep_research/web_search_engines/rate_limiting/exceptions.py +21 -0
  84. local_deep_research-0.6.0/src/local_deep_research/web_search_engines/rate_limiting/tracker.py +506 -0
  85. local_deep_research-0.6.0/src/local_deep_research/web_search_engines/retriever_registry.py +108 -0
  86. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/search_engine_base.py +161 -43
  87. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/search_engine_factory.py +14 -0
  88. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/search_engines_config.py +20 -0
  89. local_deep_research-0.6.0/tests/TEST_OPTIMIZATION.md +52 -0
  90. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/accessibility_tests/test_accessibility_backend.py +27 -13
  91. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/api_tests/test_api_basic.py +17 -0
  92. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/api_tests/test_api_pytest.py +17 -0
  93. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/api_tests/test_rest_api.py +17 -0
  94. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/api_tests/test_rest_api_simple.py +17 -0
  95. local_deep_research-0.6.0/tests/fix_tests/test_milestone_logging_fix.py +214 -0
  96. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/health_check/test_endpoints_health.py +9 -10
  97. local_deep_research-0.6.0/tests/infrastructure_tests/README.md +58 -0
  98. local_deep_research-0.6.0/tests/infrastructure_tests/__init__.py +11 -0
  99. local_deep_research-0.6.0/tests/infrastructure_tests/package.json +23 -0
  100. local_deep_research-0.6.0/tests/infrastructure_tests/test_route_registry.py +322 -0
  101. local_deep_research-0.6.0/tests/infrastructure_tests/test_urls.test.js +242 -0
  102. local_deep_research-0.6.0/tests/infrastructure_tests/test_urls_js.py +363 -0
  103. local_deep_research-0.6.0/tests/rate_limiting/test_rate_limiting.py +382 -0
  104. local_deep_research-0.6.0/tests/retriever_integration/__init__.py +1 -0
  105. local_deep_research-0.6.0/tests/retriever_integration/conftest.py +91 -0
  106. local_deep_research-0.6.0/tests/retriever_integration/test_api_integration.py +260 -0
  107. local_deep_research-0.6.0/tests/retriever_integration/test_e2e_basic.py +170 -0
  108. local_deep_research-0.6.0/tests/retriever_integration/test_factory_integration.py +123 -0
  109. local_deep_research-0.6.0/tests/retriever_integration/test_retriever_registry.py +129 -0
  110. local_deep_research-0.6.0/tests/retriever_integration/test_search_engine_retriever.py +205 -0
  111. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/run_all_tests.py +56 -31
  112. local_deep_research-0.6.0/tests/test_llm/__init__.py +1 -0
  113. local_deep_research-0.6.0/tests/test_llm/run_llm_tests.sh +23 -0
  114. local_deep_research-0.6.0/tests/test_llm/test_api_llm_integration.py +310 -0
  115. local_deep_research-0.6.0/tests/test_llm/test_llm_benchmarks.py +258 -0
  116. local_deep_research-0.6.0/tests/test_llm/test_llm_edge_cases.py +385 -0
  117. local_deep_research-0.6.0/tests/test_llm/test_llm_integration.py +229 -0
  118. local_deep_research-0.6.0/tests/test_llm/test_llm_registry.py +203 -0
  119. local_deep_research-0.6.0/tests/test_orm_changes.py +101 -0
  120. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_search_system.py +42 -15
  121. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/run_all_tests.js +5 -0
  122. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_metrics_browser.js +38 -38
  123. local_deep_research-0.6.0/tests/ui_tests/test_rate_limiting_settings.js +294 -0
  124. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_research_results.js +3 -3
  125. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_settings_errors.js +1 -1
  126. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_settings_page.js +1 -1
  127. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_settings_save.js +1 -1
  128. local_deep_research-0.5.7/PKG-INFO +0 -420
  129. local_deep_research-0.5.7/README.md +0 -339
  130. local_deep_research-0.5.7/src/local_deep_research/__version__.py +0 -1
  131. local_deep_research-0.5.7/src/local_deep_research/web/database/schema_upgrade.py +0 -124
  132. local_deep_research-0.5.7/src/local_deep_research/web/static/js/research_form.js +0 -106
  133. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/LICENSE +0 -0
  134. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/__init__.py +0 -0
  135. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/__init__.py +0 -0
  136. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/answer_decoding/__init__.py +0 -0
  137. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/answer_decoding/browsecomp_answer_decoder.py +0 -0
  138. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/candidate_exploration/README.md +0 -0
  139. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/candidate_exploration/__init__.py +0 -0
  140. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/candidate_exploration/adaptive_explorer.py +0 -0
  141. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/candidate_exploration/base_explorer.py +0 -0
  142. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/candidate_exploration/constraint_guided_explorer.py +0 -0
  143. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/candidate_exploration/diversity_explorer.py +0 -0
  144. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/candidate_exploration/parallel_explorer.py +0 -0
  145. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/candidates/__init__.py +0 -0
  146. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/candidates/base_candidate.py +0 -0
  147. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraint_checking/README.md +0 -0
  148. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraint_checking/__init__.py +0 -0
  149. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraint_checking/base_constraint_checker.py +0 -0
  150. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraint_checking/constraint_checker.py +0 -0
  151. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraint_checking/constraint_satisfaction_tracker.py +0 -0
  152. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraint_checking/dual_confidence_checker.py +0 -0
  153. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraint_checking/evidence_analyzer.py +0 -0
  154. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraint_checking/intelligent_constraint_relaxer.py +0 -0
  155. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraint_checking/rejection_engine.py +0 -0
  156. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraint_checking/strict_checker.py +0 -0
  157. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraint_checking/threshold_checker.py +0 -0
  158. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraints/__init__.py +0 -0
  159. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraints/base_constraint.py +0 -0
  160. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/constraints/constraint_analyzer.py +0 -0
  161. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/evidence/__init__.py +0 -0
  162. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/evidence/base_evidence.py +0 -0
  163. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/evidence/evaluator.py +0 -0
  164. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/evidence/requirements.py +0 -0
  165. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/filters/__init__.py +0 -0
  166. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/filters/base_filter.py +0 -0
  167. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/filters/cross_engine_filter.py +0 -0
  168. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/filters/journal_reputation_filter.py +0 -0
  169. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/findings/base_findings.py +0 -0
  170. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/findings/repository.py +0 -0
  171. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/knowledge/__init__.py +0 -0
  172. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/knowledge/base_knowledge.py +0 -0
  173. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/knowledge/standard_knowledge.py +0 -0
  174. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/query_generation/adaptive_query_generator.py +0 -0
  175. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/questions/__init__.py +0 -0
  176. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/questions/atomic_fact_question.py +0 -0
  177. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/questions/base_question.py +0 -0
  178. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/questions/decomposition_question.py +0 -0
  179. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/questions/entity_aware_question.py +0 -0
  180. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/questions/standard_question.py +0 -0
  181. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/repositories/__init__.py +0 -0
  182. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/search_optimization/cross_constraint_manager.py +0 -0
  183. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/source_management/diversity_manager.py +0 -0
  184. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/__init__.py +0 -0
  185. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/adaptive_decomposition_strategy.py +0 -0
  186. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/base_strategy.py +0 -0
  187. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/browsecomp_entity_strategy.py +0 -0
  188. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/browsecomp_optimized_strategy.py +0 -0
  189. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/concurrent_dual_confidence_strategy.py +0 -0
  190. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/constrained_search_strategy.py +0 -0
  191. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/constraint_parallel_strategy.py +0 -0
  192. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/direct_search_strategy.py +0 -0
  193. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/dual_confidence_strategy.py +0 -0
  194. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/dual_confidence_with_rejection.py +0 -0
  195. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/early_stop_constrained_strategy.py +0 -0
  196. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/entity_aware_source_strategy.py +0 -0
  197. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/evidence_based_strategy.py +0 -0
  198. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/evidence_based_strategy_v2.py +0 -0
  199. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/improved_evidence_based_strategy.py +0 -0
  200. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/iterative_reasoning_strategy.py +0 -0
  201. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/iterdrag_strategy.py +0 -0
  202. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/llm_driven_modular_strategy.py +0 -0
  203. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/modular_strategy.py +0 -0
  204. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/parallel_constrained_strategy.py +0 -0
  205. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/parallel_search_strategy.py +0 -0
  206. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/rapid_search_strategy.py +0 -0
  207. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/recursive_decomposition_strategy.py +0 -0
  208. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/smart_decomposition_strategy.py +0 -0
  209. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/smart_query_strategy.py +0 -0
  210. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/strategies/standard_strategy.py +0 -0
  211. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/tools/__init__.py +0 -0
  212. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/tools/base_tool.py +0 -0
  213. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/tools/knowledge_tools/__init__.py +0 -0
  214. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/tools/question_tools/__init__.py +0 -0
  215. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/advanced_search_system/tools/search_tools/__init__.py +0 -0
  216. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/api/benchmark_functions.py +0 -0
  217. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/README.md +0 -0
  218. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/__init__.py +0 -0
  219. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/benchmark_functions.py +0 -0
  220. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/cli/__init__.py +0 -0
  221. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/cli/benchmark_commands.py +0 -0
  222. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/cli.py +0 -0
  223. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/comparison/__init__.py +0 -0
  224. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/comparison/evaluator.py +0 -0
  225. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/datasets/__init__.py +0 -0
  226. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/datasets/base.py +0 -0
  227. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/datasets/browsecomp.py +0 -0
  228. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/datasets/custom_dataset_template.py +0 -0
  229. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/datasets/simpleqa.py +0 -0
  230. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/datasets/utils.py +0 -0
  231. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/datasets.py +0 -0
  232. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/efficiency/__init__.py +0 -0
  233. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/efficiency/resource_monitor.py +0 -0
  234. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/efficiency/speed_profiler.py +0 -0
  235. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/evaluators/__init__.py +0 -0
  236. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/evaluators/base.py +0 -0
  237. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/evaluators/browsecomp.py +0 -0
  238. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/evaluators/composite.py +0 -0
  239. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/evaluators/simpleqa.py +0 -0
  240. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/metrics/README.md +0 -0
  241. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/metrics/__init__.py +0 -0
  242. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/metrics/calculation.py +0 -0
  243. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/metrics/reporting.py +0 -0
  244. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/metrics/visualization.py +0 -0
  245. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/metrics.py +0 -0
  246. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/optimization/__init__.py +0 -0
  247. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/optimization/api.py +0 -0
  248. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/optimization/metrics.py +0 -0
  249. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/optimization/optuna_optimizer.py +0 -0
  250. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/runners.py +0 -0
  251. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/benchmarks/templates.py +0 -0
  252. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/citation_handler.py +0 -0
  253. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/citation_handlers/__init__.py +0 -0
  254. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/citation_handlers/base_citation_handler.py +0 -0
  255. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/citation_handlers/forced_answer_citation_handler.py +0 -0
  256. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/citation_handlers/precision_extraction_handler.py +0 -0
  257. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/citation_handlers/standard_citation_handler.py +0 -0
  258. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/config/__init__.py +0 -0
  259. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/config/search_config.py +0 -0
  260. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/defaults/.env.template +0 -0
  261. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/defaults/__init__.py +0 -0
  262. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/error_handling/__init__.py +0 -0
  263. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/error_handling/error_reporter.py +0 -0
  264. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/__init__.py +0 -0
  265. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/database.py +0 -0
  266. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/migrate_add_provider_to_token_usage.py +0 -0
  267. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/migrate_call_stack_tracking.py +0 -0
  268. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/migrate_enhanced_tracking.py +0 -0
  269. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/migrate_research_ratings.py +0 -0
  270. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/models.py +0 -0
  271. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/pricing/__init__.py +0 -0
  272. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/pricing/cost_calculator.py +0 -0
  273. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/pricing/pricing_cache.py +0 -0
  274. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/pricing/pricing_fetcher.py +0 -0
  275. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/query_utils.py +0 -0
  276. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/metrics/token_counter.py +0 -0
  277. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/migrate_db.py +0 -0
  278. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/setup_data_dir.py +0 -0
  279. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/utilities/__init__.py +0 -0
  280. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/utilities/db_utils.py +0 -0
  281. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/utilities/enums.py +0 -0
  282. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/utilities/es_utils.py +0 -0
  283. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/utilities/llm_utils.py +0 -0
  284. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/utilities/search_cache.py +0 -0
  285. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/utilities/search_utilities.py +0 -0
  286. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/utilities/setup_utils.py +0 -0
  287. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/utilities/threading_utils.py +0 -0
  288. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/utilities/url_utils.py +0 -0
  289. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/__init__.py +0 -0
  290. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/api.py +0 -0
  291. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/app.py +0 -0
  292. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/database/README.md +0 -0
  293. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/database/migrate_to_ldr_db.py +0 -0
  294. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/database/migrations.py +0 -0
  295. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/models/database.py +0 -0
  296. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/models/settings.py +0 -0
  297. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/routes/benchmark_routes.py +0 -0
  298. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/routes/globals.py +0 -0
  299. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/services/resource_service.py +0 -0
  300. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/services/socket_service.py +0 -0
  301. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/css/custom_dropdown.css +0 -0
  302. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/css/settings.css +0 -0
  303. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/custom_dropdown.js +0 -0
  304. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/components/fallback/formatting.js +0 -0
  305. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/services/audio.js +0 -0
  306. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/services/formatting.js +0 -0
  307. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/js/services/pdf.js +0 -0
  308. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/sounds/README.md +0 -0
  309. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/sounds/error.mp3 +0 -0
  310. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/static/sounds/success.mp3 +0 -0
  311. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/components/log_panel.html +0 -0
  312. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/components/settings_form.html +0 -0
  313. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/pages/details.html +0 -0
  314. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/pages/history.html +0 -0
  315. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/pages/progress.html +0 -0
  316. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/pages/results.html +0 -0
  317. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/templates/settings_dashboard.html +0 -0
  318. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/utils/__init__.py +0 -0
  319. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/utils/formatters.py +0 -0
  320. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web/utils/templates.py +0 -0
  321. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/__init__.py +0 -0
  322. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/default_search_engines.py +0 -0
  323. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/__init__.py +0 -0
  324. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/full_search.py +0 -0
  325. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/meta_search_engine.py +0 -0
  326. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_elasticsearch.py +0 -0
  327. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_github.py +0 -0
  328. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_guardian.py +0 -0
  329. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_local.py +0 -0
  330. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_local_all.py +0 -0
  331. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_searxng.py +0 -0
  332. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_semantic_scholar.py +0 -0
  333. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_serpapi.py +0 -0
  334. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_wayback.py +0 -0
  335. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/src/local_deep_research/web_search_engines/engines/search_engine_wikipedia.py +0 -0
  336. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/CI_INTEGRATION.md +0 -0
  337. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/README.md +0 -0
  338. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/TESTING_COMPARISON.md +0 -0
  339. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/TESTING_PROPOSAL.md +0 -0
  340. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/__init__.py +0 -0
  341. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/accessibility_tests/README.md +0 -0
  342. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/accessibility_tests/__init__.py +0 -0
  343. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/accessibility_tests/test_accessibility.js +0 -0
  344. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/api_tests/README.md +0 -0
  345. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/api_tests/__init__.py +0 -0
  346. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/conftest.py +0 -0
  347. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/debug_url_utils.py +0 -0
  348. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/download_stuff_for_local.py +0 -0
  349. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/feature_tests/IMPLEMENTATION_GUIDE_241.md +0 -0
  350. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/feature_tests/README.md +0 -0
  351. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/feature_tests/__init__.py +0 -0
  352. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/feature_tests/test_custom_context.py +0 -0
  353. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/fix_tests/README.md +0 -0
  354. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/fix_tests/test_duplicate_links_fix.py +0 -0
  355. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/fixtures/README.md +0 -0
  356. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/fixtures/search_engine_mocks.py +0 -0
  357. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/health_check/README.md +0 -0
  358. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/health_check/run_quick_health_check.py +0 -0
  359. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/health_check/test_endpoints_health.sh +0 -0
  360. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/mock_fixtures.py +0 -0
  361. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/mock_llm_config.py +0 -0
  362. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/mock_modules.py +0 -0
  363. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/search_engines/test_wikipedia_search.py +0 -0
  364. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/searxng/__init__.py +0 -0
  365. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/searxng/test_searxng.py +0 -0
  366. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/strategies/__init__.py +0 -0
  367. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/strategies/compare_strategies_visual.py +0 -0
  368. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/strategies/test_adaptive_strategy.py +0 -0
  369. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/strategies/test_iterative_reasoning.py +0 -0
  370. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/strategies/test_search_system_iterative.py +0 -0
  371. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_ci_config.py +0 -0
  372. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_citation_handler.py +0 -0
  373. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_google_pse.py +0 -0
  374. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_report_generator.py +0 -0
  375. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_research_strategy_orm.py +0 -0
  376. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_search_engines_enhanced.py +0 -0
  377. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_settings_manager.py +0 -0
  378. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_url_utils.py +0 -0
  379. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_url_utils_simple.py +0 -0
  380. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_utils.py +0 -0
  381. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/test_wikipedia_url_security.py +0 -0
  382. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/README.md +0 -0
  383. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/__init__.py +0 -0
  384. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_charts.js +0 -0
  385. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_cost_analytics.js +0 -0
  386. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_metrics.js +0 -0
  387. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_metrics_chart.js +0 -0
  388. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_metrics_charts.js +0 -0
  389. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_metrics_only.js +0 -0
  390. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_network_requests.js +0 -0
  391. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_pages_browser.js +0 -0
  392. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_star_reviews.js +0 -0
  393. {local_deep_research-0.5.7 → local_deep_research-0.6.0}/tests/ui_tests/test_star_reviews_debug.js +0 -0
@@ -0,0 +1,374 @@
1
+ Metadata-Version: 2.1
2
+ Name: local-deep-research
3
+ Version: 0.6.0
4
+ Summary: AI-powered research assistant with deep, iterative analysis using LLMs and web searches
5
+ Author-Email: LearningCircuit <185559241+LearningCircuit@users.noreply.github.com>, HashedViking <6432677+HashedViking@users.noreply.github.com>, djpetti <djpetti@gmail.com>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2025 LearningCircuit
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Classifier: Programming Language :: Python :: 3
29
+ Classifier: License :: OSI Approved :: MIT License
30
+ Classifier: Operating System :: OS Independent
31
+ Project-URL: Homepage, https://github.com/LearningCircuit/local-deep-research
32
+ Project-URL: Bug Tracker, https://github.com/LearningCircuit/local-deep-research/issues
33
+ Requires-Python: >=3.10
34
+ Requires-Dist: langchain>=0.3.18
35
+ Requires-Dist: langchain-community>=0.3.17
36
+ Requires-Dist: langchain-core>=0.3.34
37
+ Requires-Dist: langchain-ollama>=0.2.3
38
+ Requires-Dist: langchain-openai>=0.3.5
39
+ Requires-Dist: langchain-anthropic>=0.3.13
40
+ Requires-Dist: duckduckgo_search>=7.3.2
41
+ Requires-Dist: python-dateutil>=2.9.0
42
+ Requires-Dist: typing_extensions>=4.12.2
43
+ Requires-Dist: justext
44
+ Requires-Dist: playwright
45
+ Requires-Dist: beautifulsoup4
46
+ Requires-Dist: flask>=3.1.0
47
+ Requires-Dist: flask-cors>=3.0.10
48
+ Requires-Dist: flask-socketio>=5.1.1
49
+ Requires-Dist: sqlalchemy>=1.4.23
50
+ Requires-Dist: wikipedia
51
+ Requires-Dist: arxiv>=1.4.3
52
+ Requires-Dist: pypdf
53
+ Requires-Dist: sentence-transformers
54
+ Requires-Dist: faiss-cpu
55
+ Requires-Dist: pydantic>=2.0.0
56
+ Requires-Dist: pydantic-settings>=2.0.0
57
+ Requires-Dist: toml>=0.10.2
58
+ Requires-Dist: platformdirs>=3.0.0
59
+ Requires-Dist: dynaconf
60
+ Requires-Dist: requests>=2.28.0
61
+ Requires-Dist: tiktoken>=0.4.0
62
+ Requires-Dist: xmltodict>=0.13.0
63
+ Requires-Dist: lxml>=4.9.2
64
+ Requires-Dist: pdfplumber>=0.9.0
65
+ Requires-Dist: unstructured>=0.10.0
66
+ Requires-Dist: google-search-results
67
+ Requires-Dist: importlib-resources>=6.5.2
68
+ Requires-Dist: setuptools>=78.1.0
69
+ Requires-Dist: flask-wtf>=1.2.2
70
+ Requires-Dist: optuna>=4.3.0
71
+ Requires-Dist: elasticsearch==8.14.0
72
+ Requires-Dist: methodtools>=0.4.7
73
+ Requires-Dist: loguru>=0.7.3
74
+ Requires-Dist: cachetools>=5.5.2
75
+ Requires-Dist: matplotlib>=3.10.3
76
+ Requires-Dist: pandas>=2.2.3
77
+ Requires-Dist: plotly>=6.0.1
78
+ Requires-Dist: kaleido==0.2.1
79
+ Requires-Dist: aiohttp>=3.9.0
80
+ Requires-Dist: tenacity>=8.0.0
81
+ Description-Content-Type: text/markdown
82
+
83
+ # Local Deep Research
84
+
85
+ <div align="center">
86
+
87
+ [![GitHub stars](https://img.shields.io/github/stars/LearningCircuit/local-deep-research?style=for-the-badge)](https://github.com/LearningCircuit/local-deep-research/stargazers)
88
+ [![Docker Pulls](https://img.shields.io/docker/pulls/localdeepresearch/local-deep-research?style=for-the-badge)](https://hub.docker.com/r/localdeepresearch/local-deep-research)
89
+ [![PyPI Downloads](https://img.shields.io/pypi/dm/local-deep-research?style=for-the-badge)](https://pypi.org/project/local-deep-research/)
90
+
91
+ [![Tests](https://img.shields.io/github/actions/workflow/status/LearningCircuit/local-deep-research/tests.yml?branch=main&style=for-the-badge&label=Tests)](https://github.com/LearningCircuit/local-deep-research/actions/workflows/tests.yml)
92
+ [![CodeQL](https://img.shields.io/github/actions/workflow/status/LearningCircuit/local-deep-research/codeql.yml?branch=main&style=for-the-badge&label=CodeQL)](https://github.com/LearningCircuit/local-deep-research/security/code-scanning)
93
+
94
+ [![Discord](https://img.shields.io/discord/1352043059562680370?style=for-the-badge&logo=discord)](https://discord.gg/ttcqQeFcJ3)
95
+ [![Reddit](https://img.shields.io/badge/Reddit-r/LocalDeepResearch-FF4500?style=for-the-badge&logo=reddit)](https://www.reddit.com/r/LocalDeepResearch/)
96
+
97
+
98
+ **AI-powered research assistant for deep, iterative research**
99
+
100
+ *Performs deep, iterative research using multiple LLMs and search engines with proper citations*
101
+ </div>
102
+ ## 🚀 What is Local Deep Research?
103
+
104
+ LDR is an AI research assistant that performs systematic research by:
105
+
106
+ - **Breaking down complex questions** into focused sub-queries
107
+ - **Searching multiple sources** in parallel (web, academic papers, local documents)
108
+ - **Verifying information** across sources for accuracy
109
+ - **Creating comprehensive reports** with proper citations
110
+
111
+ It aims to help researchers, students, and professionals find accurate information quickly while maintaining transparency about sources.
112
+
113
+ ## 🎯 Why Choose LDR?
114
+
115
+ - **Privacy-Focused**: Run entirely locally with Ollama + SearXNG
116
+ - **Flexible**: Use any LLM, any search engine, any vector store
117
+ - **Comprehensive**: Multiple research modes from quick summaries to detailed reports
118
+ - **Transparent**: Track costs and performance with built-in analytics
119
+ - **Open Source**: MIT licensed with an active community
120
+
121
+ ## ✨ Key Features
122
+
123
+ ### 🔍 Research Modes
124
+ - **Quick Summary** - Get answers in 30 seconds to 3 minutes with citations
125
+ - **Detailed Research** - Comprehensive analysis with structured findings
126
+ - **Report Generation** - Professional reports with sections and table of contents
127
+ - **Document Analysis** - Search your private documents with AI
128
+
129
+ ### 🛠️ Advanced Capabilities
130
+ - **[LangChain Integration](docs/LANGCHAIN_RETRIEVER_INTEGRATION.md)** - Use any vector store as a search engine
131
+ - **[REST API](docs/api-quickstart.md)** - Language-agnostic HTTP access
132
+ - **[Benchmarking](docs/BENCHMARKING.md)** - Test and optimize your configuration
133
+ - **[Analytics Dashboard](docs/analytics-dashboard.md)** - Track costs, performance, and usage metrics
134
+ - **Real-time Updates** - WebSocket support for live research progress
135
+ - **Export Options** - Download results as PDF or Markdown
136
+ - **Research History** - Save, search, and revisit past research
137
+ - **Adaptive Rate Limiting** - Intelligent retry system that learns optimal wait times
138
+ - **Keyboard Shortcuts** - Navigate efficiently (ESC, Ctrl+Shift+1-5)
139
+
140
+ ### 🌐 Search Sources
141
+
142
+ #### Free Search Engines
143
+ - **Academic**: arXiv, PubMed, Semantic Scholar
144
+ - **General**: Wikipedia, SearXNG, DuckDuckGo
145
+ - **Technical**: GitHub, Elasticsearch
146
+ - **Historical**: Wayback Machine
147
+ - **News**: The Guardian
148
+
149
+ #### Premium Search Engines
150
+ - **Tavily** - AI-powered search
151
+ - **Google** - Via SerpAPI or Programmable Search Engine
152
+ - **Brave Search** - Privacy-focused web search
153
+
154
+ #### Custom Sources
155
+ - **Local Documents** - Search your files with AI
156
+ - **LangChain Retrievers** - Any vector store or database
157
+ - **Meta Search** - Combine multiple engines intelligently
158
+
159
+ [Full Search Engines Guide →](docs/search-engines.md)
160
+
161
+ ## ⚡ Quick Start
162
+
163
+ ### Option 1: Docker (Quickstart no MAC/ARM)
164
+
165
+ ```bash
166
+ # Step 1: Pull and run SearXNG for optimal search results
167
+ docker run -d -p 8080:8080 --name searxng searxng/searxng
168
+
169
+ # Step 2: Pull and run Local Deep Research (Please build your own docker on ARM)
170
+ docker run -d -p 5000:5000 --name local-deep-research --volume 'deep-research:/install/.venv/lib/python3.13/site-packages/data/' localdeepresearch/local-deep-research
171
+ ```
172
+
173
+ ### Option 2: Docker Compose (Recommended)
174
+
175
+ LDR uses Docker compose to bundle the web app and all it's dependencies so
176
+ you can get up and running quickly.
177
+
178
+ #### Option 2a: DIY docker-compose
179
+ See [docker-compose.yml](./docker-compose.yml) for a docker-compose file with reasonable defaults to get up and running with ollama, searxng, and local deep research all running locally.
180
+
181
+ Things you may want/need to configure:
182
+ * Ollama GPU driver
183
+ * Ollama context length (depends on available VRAM)
184
+ * Ollama keep alive (duration model will stay loaded into VRAM and idle before getting unloaded automatically)
185
+ * Deep Research model (depends on available VRAM and preference)
186
+
187
+ #### Option 2b: Use Cookie Cutter to tailor a docker-compose to your needs:
188
+
189
+ ##### Prerequisites
190
+
191
+ - [Docker](https://docs.docker.com/engine/install/)
192
+ - [Docker Compose](https://docs.docker.com/compose/install/)
193
+ - `cookiecutter`: Run `pip install --user cookiecutter`
194
+
195
+ Clone the repository:
196
+
197
+ ```bash
198
+ git clone https://github.com/LearningCircuit/local-deep-research.git
199
+ cd local-deep-research
200
+ ```
201
+
202
+ ### Configuring with Docker Compose
203
+
204
+ Cookiecutter will interactively guide you through the process of creating a
205
+ `docker-compose` configuration that meets your specific needs. This is the
206
+ recommended approach if you are not very familiar with Docker.
207
+
208
+ In the LDR repository, run the following command
209
+ to generate the compose file:
210
+
211
+ ```bash
212
+ cookiecutter cookiecutter-docker/
213
+ docker compose -f docker-compose.default.yml up
214
+ ```
215
+
216
+ [Docker Compose Guide →](docs/docker-compose-guide.md)
217
+
218
+ ### Option 3: Python Package
219
+
220
+ ```bash
221
+ # Step 1: Install the package
222
+ pip install local-deep-research
223
+
224
+ # Step 2: Setup SearXNG for best results
225
+ docker pull searxng/searxng
226
+ docker run -d -p 8080:8080 --name searxng searxng/searxng
227
+
228
+ # Step 3: Install Ollama from https://ollama.ai
229
+
230
+ # Step 4: Download a model
231
+ ollama pull gemma3:12b
232
+
233
+ # Step 5: Start the web interface
234
+ python -m local_deep_research.web.app
235
+ ```
236
+
237
+ [Full Installation Guide →](https://github.com/LearningCircuit/local-deep-research/wiki/Installation)
238
+
239
+ ## 💻 Usage Examples
240
+
241
+ ### Python API
242
+ ```python
243
+ from local_deep_research.api import quick_summary
244
+
245
+ # Simple usage
246
+ result = quick_summary("What are the latest advances in quantum computing?")
247
+ print(result["summary"])
248
+
249
+ # Advanced usage with custom configuration
250
+ result = quick_summary(
251
+ query="Impact of AI on healthcare",
252
+ search_tool="searxng",
253
+ search_strategy="focused-iteration",
254
+ iterations=2
255
+ )
256
+ ```
257
+
258
+ ### HTTP API
259
+ ```bash
260
+ curl -X POST http://localhost:5000/api/v1/quick_summary \
261
+ -H "Content-Type: application/json" \
262
+ -d '{"query": "Explain CRISPR gene editing"}'
263
+ ```
264
+
265
+ [More Examples →](examples/api_usage/)
266
+
267
+ ### Command Line Tools
268
+
269
+ ```bash
270
+ # Run benchmarks from CLI
271
+ python -m local_deep_research.benchmarks --dataset simpleqa --examples 50
272
+
273
+ # Manage rate limiting
274
+ python -m local_deep_research.web_search_engines.rate_limiting status
275
+ python -m local_deep_research.web_search_engines.rate_limiting reset
276
+ ```
277
+
278
+ ## 🔗 Enterprise Integration
279
+
280
+ Connect LDR to your existing knowledge base:
281
+
282
+ ```python
283
+ from local_deep_research.api import quick_summary
284
+
285
+ # Use your existing LangChain retriever
286
+ result = quick_summary(
287
+ query="What are our deployment procedures?",
288
+ retrievers={"company_kb": your_retriever},
289
+ search_tool="company_kb"
290
+ )
291
+ ```
292
+
293
+ Works with: FAISS, Chroma, Pinecone, Weaviate, Elasticsearch, and any LangChain-compatible retriever.
294
+
295
+ [Integration Guide →](docs/LANGCHAIN_RETRIEVER_INTEGRATION.md)
296
+
297
+ ## 📊 Performance & Analytics
298
+
299
+ ### Benchmark Results
300
+ Early experiments on small SimpleQA dataset samples:
301
+
302
+ | Configuration | Accuracy | Notes |
303
+ |--------------|----------|--------|
304
+ | gpt-4.1-mini + SearXNG + focused_iteration | 90-95% | Limited sample size |
305
+ | gpt-4.1-mini + Tavily | Up to 95% | Limited sample size |
306
+ | gemini-2.0-flash-001 + SearXNG | 82% | Single test run |
307
+
308
+ Note: These are preliminary results from initial testing. Performance varies significantly based on query types, model versions, and configurations. [Run your own benchmarks →](docs/BENCHMARKING.md)
309
+
310
+ ### Built-in Analytics Dashboard
311
+ Track costs, performance, and usage with detailed metrics. [Learn more →](docs/analytics-dashboard.md)
312
+
313
+ ## 🤖 Supported LLMs
314
+
315
+ ### Local Models (via Ollama)
316
+ - Llama 3, Mistral, Gemma, DeepSeek
317
+ - LLM processing stays local (search queries still go to web)
318
+ - No API costs
319
+
320
+ ### Cloud Models
321
+ - OpenAI (GPT-4, GPT-3.5)
322
+ - Anthropic (Claude 3)
323
+ - Google (Gemini)
324
+ - 100+ models via OpenRouter
325
+
326
+ [Model Setup →](docs/env_configuration.md)
327
+
328
+ ## 📚 Documentation
329
+
330
+ ### Getting Started
331
+ - [Installation Guide](https://github.com/LearningCircuit/local-deep-research/wiki/Installation)
332
+ - [Frequently Asked Questions](docs/faq.md)
333
+ - [API Quickstart](docs/api-quickstart.md)
334
+ - [Configuration Guide](docs/env_configuration.md)
335
+
336
+ ### Core Features
337
+ - [All Features Guide](docs/features.md)
338
+ - [Search Engines Guide](docs/search-engines.md)
339
+ - [Analytics Dashboard](docs/analytics-dashboard.md)
340
+
341
+ ### Advanced Features
342
+ - [LangChain Integration](docs/LANGCHAIN_RETRIEVER_INTEGRATION.md)
343
+ - [Benchmarking System](docs/BENCHMARKING.md)
344
+ - [Elasticsearch Setup](docs/elasticsearch_search_engine.md)
345
+ - [SearXNG Setup](docs/SearXNG-Setup.md)
346
+
347
+ ### Development
348
+ - [Docker Compose Guide](docs/docker-compose-guide.md)
349
+ - [Development Guide](docs/developing.md)
350
+ - [Security Guide](docs/security/CODEQL_GUIDE.md)
351
+ - [Release Guide](docs/RELEASE_GUIDE.md)
352
+
353
+ ### Examples & Tutorials
354
+ - [API Examples](examples/api_usage/)
355
+ - [Benchmark Examples](examples/benchmarks/)
356
+ - [Optimization Examples](examples/optimization/)
357
+
358
+ ## 🤝 Community & Support
359
+
360
+ - [Discord](https://discord.gg/ttcqQeFcJ3) - Get help and share research techniques
361
+ - [Reddit](https://www.reddit.com/r/LocalDeepResearch/) - Updates and showcases
362
+ - [GitHub Issues](https://github.com/LearningCircuit/local-deep-research/issues) - Bug reports
363
+
364
+ ## 🚀 Contributing
365
+
366
+ We welcome contributions! See our [Contributing Guide](CONTRIBUTING.md) to get started.
367
+
368
+ ## 📄 License
369
+
370
+ MIT License - see [LICENSE](LICENSE) file.
371
+
372
+ Built with: [LangChain](https://github.com/hwchase17/langchain), [Ollama](https://ollama.ai), [SearXNG](https://searxng.org/), [FAISS](https://github.com/facebookresearch/faiss)
373
+
374
+ > **Support Free Knowledge:** Consider donating to [Wikipedia](https://donate.wikimedia.org), [arXiv](https://arxiv.org/about/give), or [PubMed](https://www.nlm.nih.gov/pubs/donations/donations.html).
@@ -0,0 +1,292 @@
1
+ # Local Deep Research
2
+
3
+ <div align="center">
4
+
5
+ [![GitHub stars](https://img.shields.io/github/stars/LearningCircuit/local-deep-research?style=for-the-badge)](https://github.com/LearningCircuit/local-deep-research/stargazers)
6
+ [![Docker Pulls](https://img.shields.io/docker/pulls/localdeepresearch/local-deep-research?style=for-the-badge)](https://hub.docker.com/r/localdeepresearch/local-deep-research)
7
+ [![PyPI Downloads](https://img.shields.io/pypi/dm/local-deep-research?style=for-the-badge)](https://pypi.org/project/local-deep-research/)
8
+
9
+ [![Tests](https://img.shields.io/github/actions/workflow/status/LearningCircuit/local-deep-research/tests.yml?branch=main&style=for-the-badge&label=Tests)](https://github.com/LearningCircuit/local-deep-research/actions/workflows/tests.yml)
10
+ [![CodeQL](https://img.shields.io/github/actions/workflow/status/LearningCircuit/local-deep-research/codeql.yml?branch=main&style=for-the-badge&label=CodeQL)](https://github.com/LearningCircuit/local-deep-research/security/code-scanning)
11
+
12
+ [![Discord](https://img.shields.io/discord/1352043059562680370?style=for-the-badge&logo=discord)](https://discord.gg/ttcqQeFcJ3)
13
+ [![Reddit](https://img.shields.io/badge/Reddit-r/LocalDeepResearch-FF4500?style=for-the-badge&logo=reddit)](https://www.reddit.com/r/LocalDeepResearch/)
14
+
15
+
16
+ **AI-powered research assistant for deep, iterative research**
17
+
18
+ *Performs deep, iterative research using multiple LLMs and search engines with proper citations*
19
+ </div>
20
+ ## 🚀 What is Local Deep Research?
21
+
22
+ LDR is an AI research assistant that performs systematic research by:
23
+
24
+ - **Breaking down complex questions** into focused sub-queries
25
+ - **Searching multiple sources** in parallel (web, academic papers, local documents)
26
+ - **Verifying information** across sources for accuracy
27
+ - **Creating comprehensive reports** with proper citations
28
+
29
+ It aims to help researchers, students, and professionals find accurate information quickly while maintaining transparency about sources.
30
+
31
+ ## 🎯 Why Choose LDR?
32
+
33
+ - **Privacy-Focused**: Run entirely locally with Ollama + SearXNG
34
+ - **Flexible**: Use any LLM, any search engine, any vector store
35
+ - **Comprehensive**: Multiple research modes from quick summaries to detailed reports
36
+ - **Transparent**: Track costs and performance with built-in analytics
37
+ - **Open Source**: MIT licensed with an active community
38
+
39
+ ## ✨ Key Features
40
+
41
+ ### 🔍 Research Modes
42
+ - **Quick Summary** - Get answers in 30 seconds to 3 minutes with citations
43
+ - **Detailed Research** - Comprehensive analysis with structured findings
44
+ - **Report Generation** - Professional reports with sections and table of contents
45
+ - **Document Analysis** - Search your private documents with AI
46
+
47
+ ### 🛠️ Advanced Capabilities
48
+ - **[LangChain Integration](docs/LANGCHAIN_RETRIEVER_INTEGRATION.md)** - Use any vector store as a search engine
49
+ - **[REST API](docs/api-quickstart.md)** - Language-agnostic HTTP access
50
+ - **[Benchmarking](docs/BENCHMARKING.md)** - Test and optimize your configuration
51
+ - **[Analytics Dashboard](docs/analytics-dashboard.md)** - Track costs, performance, and usage metrics
52
+ - **Real-time Updates** - WebSocket support for live research progress
53
+ - **Export Options** - Download results as PDF or Markdown
54
+ - **Research History** - Save, search, and revisit past research
55
+ - **Adaptive Rate Limiting** - Intelligent retry system that learns optimal wait times
56
+ - **Keyboard Shortcuts** - Navigate efficiently (ESC, Ctrl+Shift+1-5)
57
+
58
+ ### 🌐 Search Sources
59
+
60
+ #### Free Search Engines
61
+ - **Academic**: arXiv, PubMed, Semantic Scholar
62
+ - **General**: Wikipedia, SearXNG, DuckDuckGo
63
+ - **Technical**: GitHub, Elasticsearch
64
+ - **Historical**: Wayback Machine
65
+ - **News**: The Guardian
66
+
67
+ #### Premium Search Engines
68
+ - **Tavily** - AI-powered search
69
+ - **Google** - Via SerpAPI or Programmable Search Engine
70
+ - **Brave Search** - Privacy-focused web search
71
+
72
+ #### Custom Sources
73
+ - **Local Documents** - Search your files with AI
74
+ - **LangChain Retrievers** - Any vector store or database
75
+ - **Meta Search** - Combine multiple engines intelligently
76
+
77
+ [Full Search Engines Guide →](docs/search-engines.md)
78
+
79
+ ## ⚡ Quick Start
80
+
81
+ ### Option 1: Docker (Quickstart no MAC/ARM)
82
+
83
+ ```bash
84
+ # Step 1: Pull and run SearXNG for optimal search results
85
+ docker run -d -p 8080:8080 --name searxng searxng/searxng
86
+
87
+ # Step 2: Pull and run Local Deep Research (Please build your own docker on ARM)
88
+ docker run -d -p 5000:5000 --name local-deep-research --volume 'deep-research:/install/.venv/lib/python3.13/site-packages/data/' localdeepresearch/local-deep-research
89
+ ```
90
+
91
+ ### Option 2: Docker Compose (Recommended)
92
+
93
+ LDR uses Docker compose to bundle the web app and all it's dependencies so
94
+ you can get up and running quickly.
95
+
96
+ #### Option 2a: DIY docker-compose
97
+ See [docker-compose.yml](./docker-compose.yml) for a docker-compose file with reasonable defaults to get up and running with ollama, searxng, and local deep research all running locally.
98
+
99
+ Things you may want/need to configure:
100
+ * Ollama GPU driver
101
+ * Ollama context length (depends on available VRAM)
102
+ * Ollama keep alive (duration model will stay loaded into VRAM and idle before getting unloaded automatically)
103
+ * Deep Research model (depends on available VRAM and preference)
104
+
105
+ #### Option 2b: Use Cookie Cutter to tailor a docker-compose to your needs:
106
+
107
+ ##### Prerequisites
108
+
109
+ - [Docker](https://docs.docker.com/engine/install/)
110
+ - [Docker Compose](https://docs.docker.com/compose/install/)
111
+ - `cookiecutter`: Run `pip install --user cookiecutter`
112
+
113
+ Clone the repository:
114
+
115
+ ```bash
116
+ git clone https://github.com/LearningCircuit/local-deep-research.git
117
+ cd local-deep-research
118
+ ```
119
+
120
+ ### Configuring with Docker Compose
121
+
122
+ Cookiecutter will interactively guide you through the process of creating a
123
+ `docker-compose` configuration that meets your specific needs. This is the
124
+ recommended approach if you are not very familiar with Docker.
125
+
126
+ In the LDR repository, run the following command
127
+ to generate the compose file:
128
+
129
+ ```bash
130
+ cookiecutter cookiecutter-docker/
131
+ docker compose -f docker-compose.default.yml up
132
+ ```
133
+
134
+ [Docker Compose Guide →](docs/docker-compose-guide.md)
135
+
136
+ ### Option 3: Python Package
137
+
138
+ ```bash
139
+ # Step 1: Install the package
140
+ pip install local-deep-research
141
+
142
+ # Step 2: Setup SearXNG for best results
143
+ docker pull searxng/searxng
144
+ docker run -d -p 8080:8080 --name searxng searxng/searxng
145
+
146
+ # Step 3: Install Ollama from https://ollama.ai
147
+
148
+ # Step 4: Download a model
149
+ ollama pull gemma3:12b
150
+
151
+ # Step 5: Start the web interface
152
+ python -m local_deep_research.web.app
153
+ ```
154
+
155
+ [Full Installation Guide →](https://github.com/LearningCircuit/local-deep-research/wiki/Installation)
156
+
157
+ ## 💻 Usage Examples
158
+
159
+ ### Python API
160
+ ```python
161
+ from local_deep_research.api import quick_summary
162
+
163
+ # Simple usage
164
+ result = quick_summary("What are the latest advances in quantum computing?")
165
+ print(result["summary"])
166
+
167
+ # Advanced usage with custom configuration
168
+ result = quick_summary(
169
+ query="Impact of AI on healthcare",
170
+ search_tool="searxng",
171
+ search_strategy="focused-iteration",
172
+ iterations=2
173
+ )
174
+ ```
175
+
176
+ ### HTTP API
177
+ ```bash
178
+ curl -X POST http://localhost:5000/api/v1/quick_summary \
179
+ -H "Content-Type: application/json" \
180
+ -d '{"query": "Explain CRISPR gene editing"}'
181
+ ```
182
+
183
+ [More Examples →](examples/api_usage/)
184
+
185
+ ### Command Line Tools
186
+
187
+ ```bash
188
+ # Run benchmarks from CLI
189
+ python -m local_deep_research.benchmarks --dataset simpleqa --examples 50
190
+
191
+ # Manage rate limiting
192
+ python -m local_deep_research.web_search_engines.rate_limiting status
193
+ python -m local_deep_research.web_search_engines.rate_limiting reset
194
+ ```
195
+
196
+ ## 🔗 Enterprise Integration
197
+
198
+ Connect LDR to your existing knowledge base:
199
+
200
+ ```python
201
+ from local_deep_research.api import quick_summary
202
+
203
+ # Use your existing LangChain retriever
204
+ result = quick_summary(
205
+ query="What are our deployment procedures?",
206
+ retrievers={"company_kb": your_retriever},
207
+ search_tool="company_kb"
208
+ )
209
+ ```
210
+
211
+ Works with: FAISS, Chroma, Pinecone, Weaviate, Elasticsearch, and any LangChain-compatible retriever.
212
+
213
+ [Integration Guide →](docs/LANGCHAIN_RETRIEVER_INTEGRATION.md)
214
+
215
+ ## 📊 Performance & Analytics
216
+
217
+ ### Benchmark Results
218
+ Early experiments on small SimpleQA dataset samples:
219
+
220
+ | Configuration | Accuracy | Notes |
221
+ |--------------|----------|--------|
222
+ | gpt-4.1-mini + SearXNG + focused_iteration | 90-95% | Limited sample size |
223
+ | gpt-4.1-mini + Tavily | Up to 95% | Limited sample size |
224
+ | gemini-2.0-flash-001 + SearXNG | 82% | Single test run |
225
+
226
+ Note: These are preliminary results from initial testing. Performance varies significantly based on query types, model versions, and configurations. [Run your own benchmarks →](docs/BENCHMARKING.md)
227
+
228
+ ### Built-in Analytics Dashboard
229
+ Track costs, performance, and usage with detailed metrics. [Learn more →](docs/analytics-dashboard.md)
230
+
231
+ ## 🤖 Supported LLMs
232
+
233
+ ### Local Models (via Ollama)
234
+ - Llama 3, Mistral, Gemma, DeepSeek
235
+ - LLM processing stays local (search queries still go to web)
236
+ - No API costs
237
+
238
+ ### Cloud Models
239
+ - OpenAI (GPT-4, GPT-3.5)
240
+ - Anthropic (Claude 3)
241
+ - Google (Gemini)
242
+ - 100+ models via OpenRouter
243
+
244
+ [Model Setup →](docs/env_configuration.md)
245
+
246
+ ## 📚 Documentation
247
+
248
+ ### Getting Started
249
+ - [Installation Guide](https://github.com/LearningCircuit/local-deep-research/wiki/Installation)
250
+ - [Frequently Asked Questions](docs/faq.md)
251
+ - [API Quickstart](docs/api-quickstart.md)
252
+ - [Configuration Guide](docs/env_configuration.md)
253
+
254
+ ### Core Features
255
+ - [All Features Guide](docs/features.md)
256
+ - [Search Engines Guide](docs/search-engines.md)
257
+ - [Analytics Dashboard](docs/analytics-dashboard.md)
258
+
259
+ ### Advanced Features
260
+ - [LangChain Integration](docs/LANGCHAIN_RETRIEVER_INTEGRATION.md)
261
+ - [Benchmarking System](docs/BENCHMARKING.md)
262
+ - [Elasticsearch Setup](docs/elasticsearch_search_engine.md)
263
+ - [SearXNG Setup](docs/SearXNG-Setup.md)
264
+
265
+ ### Development
266
+ - [Docker Compose Guide](docs/docker-compose-guide.md)
267
+ - [Development Guide](docs/developing.md)
268
+ - [Security Guide](docs/security/CODEQL_GUIDE.md)
269
+ - [Release Guide](docs/RELEASE_GUIDE.md)
270
+
271
+ ### Examples & Tutorials
272
+ - [API Examples](examples/api_usage/)
273
+ - [Benchmark Examples](examples/benchmarks/)
274
+ - [Optimization Examples](examples/optimization/)
275
+
276
+ ## 🤝 Community & Support
277
+
278
+ - [Discord](https://discord.gg/ttcqQeFcJ3) - Get help and share research techniques
279
+ - [Reddit](https://www.reddit.com/r/LocalDeepResearch/) - Updates and showcases
280
+ - [GitHub Issues](https://github.com/LearningCircuit/local-deep-research/issues) - Bug reports
281
+
282
+ ## 🚀 Contributing
283
+
284
+ We welcome contributions! See our [Contributing Guide](CONTRIBUTING.md) to get started.
285
+
286
+ ## 📄 License
287
+
288
+ MIT License - see [LICENSE](LICENSE) file.
289
+
290
+ Built with: [LangChain](https://github.com/hwchase17/langchain), [Ollama](https://ollama.ai), [SearXNG](https://searxng.org/), [FAISS](https://github.com/facebookresearch/faiss)
291
+
292
+ > **Support Free Knowledge:** Consider donating to [Wikipedia](https://donate.wikimedia.org), [arXiv](https://arxiv.org/about/give), or [PubMed](https://www.nlm.nih.gov/pubs/donations/donations.html).
@@ -13,6 +13,7 @@ requires-python = ">=3.10"
13
13
  authors = [
14
14
  { name = "LearningCircuit", email = "185559241+LearningCircuit@users.noreply.github.com" },
15
15
  { name = "HashedViking", email = "6432677+HashedViking@users.noreply.github.com" },
16
+ { name = "djpetti", email = "djpetti@gmail.com" },
16
17
  ]
17
18
  classifiers = [
18
19
  "Programming Language :: Python :: 3",
@@ -66,8 +67,9 @@ dependencies = [
66
67
  "plotly>=6.0.1",
67
68
  "kaleido==0.2.1",
68
69
  "aiohttp>=3.9.0",
70
+ "tenacity>=8.0.0",
69
71
  ]
70
- version = "0.5.7"
72
+ version = "0.6.0"
71
73
 
72
74
  [project.license]
73
75
  file = "LICENSE"
@@ -116,6 +118,7 @@ markers = [
116
118
  "requires_llm: marks tests that require a real LLM (not fallback)",
117
119
  "integration: marks integration tests",
118
120
  "slow: marks slow tests",
121
+ "asyncio: marks async tests that use asyncio",
119
122
  ]
120
123
 
121
124
  [tool.ruff]
@@ -183,5 +186,6 @@ dev = [
183
186
  "pytest>=8.3.5",
184
187
  "pytest-cov>=6.1.1",
185
188
  "pytest-timeout>=2.3.1",
189
+ "pytest-asyncio>=0.23.0",
186
190
  "ruff>=0.11.12",
187
191
  ]