local-deep-research 0.6.1__tar.gz → 0.6.4__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.1 → local_deep_research-0.6.4}/PKG-INFO +19 -4
  2. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/README.md +18 -3
  3. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/pyproject.toml +1 -1
  4. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/__init__.py +6 -0
  5. local_deep_research-0.6.4/src/local_deep_research/__version__.py +1 -0
  6. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/setup_data_dir.py +3 -2
  7. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/db_utils.py +11 -9
  8. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/log_utils.py +1 -1
  9. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/threading_utils.py +17 -4
  10. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/api.py +5 -3
  11. local_deep_research-0.6.4/src/local_deep_research/web/app.py +30 -0
  12. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/app_factory.py +1 -11
  13. local_deep_research-0.6.1/src/local_deep_research/web/database/schema_upgrade.py → local_deep_research-0.6.4/src/local_deep_research/web/database/migrations.py +292 -68
  14. local_deep_research-0.6.4/src/local_deep_research/web/database/uuid_migration.py +20 -0
  15. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/models/database.py +0 -79
  16. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/settings_routes.py +70 -73
  17. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/services/settings_manager.py +13 -28
  18. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/services/settings_service.py +6 -40
  19. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/services/socket_service.py +1 -1
  20. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/rate_limiting/tracker.py +1 -3
  21. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/conftest.py +0 -1
  22. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/rate_limiting/test_rate_limiting.py +13 -3
  23. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_settings_manager.py +3 -5
  24. local_deep_research-0.6.1/src/local_deep_research/__version__.py +0 -1
  25. local_deep_research-0.6.1/src/local_deep_research/migrate_db.py +0 -149
  26. local_deep_research-0.6.1/src/local_deep_research/web/app.py +0 -104
  27. local_deep_research-0.6.1/src/local_deep_research/web/database/migrate_to_ldr_db.py +0 -297
  28. local_deep_research-0.6.1/src/local_deep_research/web/database/migrations.py +0 -72
  29. local_deep_research-0.6.1/src/local_deep_research/web/database/uuid_migration.py +0 -265
  30. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/LICENSE +0 -0
  31. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/__init__.py +0 -0
  32. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/answer_decoding/__init__.py +0 -0
  33. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/answer_decoding/browsecomp_answer_decoder.py +0 -0
  34. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/candidate_exploration/README.md +0 -0
  35. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/candidate_exploration/__init__.py +0 -0
  36. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/candidate_exploration/adaptive_explorer.py +0 -0
  37. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/candidate_exploration/base_explorer.py +0 -0
  38. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/candidate_exploration/constraint_guided_explorer.py +0 -0
  39. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/candidate_exploration/diversity_explorer.py +0 -0
  40. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/candidate_exploration/parallel_explorer.py +0 -0
  41. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/candidate_exploration/progressive_explorer.py +0 -0
  42. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/candidates/__init__.py +0 -0
  43. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/candidates/base_candidate.py +0 -0
  44. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraint_checking/README.md +0 -0
  45. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraint_checking/__init__.py +0 -0
  46. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraint_checking/base_constraint_checker.py +0 -0
  47. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraint_checking/constraint_checker.py +0 -0
  48. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraint_checking/constraint_satisfaction_tracker.py +0 -0
  49. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraint_checking/dual_confidence_checker.py +0 -0
  50. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraint_checking/evidence_analyzer.py +0 -0
  51. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraint_checking/intelligent_constraint_relaxer.py +0 -0
  52. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraint_checking/rejection_engine.py +0 -0
  53. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraint_checking/strict_checker.py +0 -0
  54. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraint_checking/threshold_checker.py +0 -0
  55. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraints/__init__.py +0 -0
  56. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraints/base_constraint.py +0 -0
  57. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraints/constraint_analyzer.py +0 -0
  58. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/evidence/__init__.py +0 -0
  59. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/evidence/base_evidence.py +0 -0
  60. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/evidence/evaluator.py +0 -0
  61. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/evidence/requirements.py +0 -0
  62. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/filters/__init__.py +0 -0
  63. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/filters/base_filter.py +0 -0
  64. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/filters/cross_engine_filter.py +0 -0
  65. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/filters/journal_reputation_filter.py +0 -0
  66. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/findings/base_findings.py +0 -0
  67. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/findings/repository.py +0 -0
  68. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/knowledge/__init__.py +0 -0
  69. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/knowledge/base_knowledge.py +0 -0
  70. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/knowledge/standard_knowledge.py +0 -0
  71. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/query_generation/adaptive_query_generator.py +0 -0
  72. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/questions/__init__.py +0 -0
  73. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/questions/atomic_fact_question.py +0 -0
  74. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/questions/base_question.py +0 -0
  75. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/questions/browsecomp_question.py +0 -0
  76. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/questions/decomposition_question.py +0 -0
  77. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/questions/entity_aware_question.py +0 -0
  78. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/questions/standard_question.py +0 -0
  79. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/repositories/__init__.py +0 -0
  80. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/search_optimization/cross_constraint_manager.py +0 -0
  81. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/source_management/diversity_manager.py +0 -0
  82. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/__init__.py +0 -0
  83. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/adaptive_decomposition_strategy.py +0 -0
  84. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/base_strategy.py +0 -0
  85. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/browsecomp_entity_strategy.py +0 -0
  86. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/browsecomp_optimized_strategy.py +0 -0
  87. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/concurrent_dual_confidence_strategy.py +0 -0
  88. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/constrained_search_strategy.py +0 -0
  89. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/constraint_parallel_strategy.py +0 -0
  90. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/direct_search_strategy.py +0 -0
  91. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/dual_confidence_strategy.py +0 -0
  92. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/dual_confidence_with_rejection.py +0 -0
  93. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/early_stop_constrained_strategy.py +0 -0
  94. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/entity_aware_source_strategy.py +0 -0
  95. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/evidence_based_strategy.py +0 -0
  96. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/evidence_based_strategy_v2.py +0 -0
  97. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/focused_iteration_strategy.py +0 -0
  98. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/improved_evidence_based_strategy.py +0 -0
  99. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/iterative_reasoning_strategy.py +0 -0
  100. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/iterdrag_strategy.py +0 -0
  101. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/llm_driven_modular_strategy.py +0 -0
  102. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/modular_strategy.py +0 -0
  103. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/parallel_constrained_strategy.py +0 -0
  104. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/parallel_search_strategy.py +0 -0
  105. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/rapid_search_strategy.py +0 -0
  106. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/recursive_decomposition_strategy.py +0 -0
  107. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/smart_decomposition_strategy.py +0 -0
  108. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/smart_query_strategy.py +0 -0
  109. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/source_based_strategy.py +0 -0
  110. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/standard_strategy.py +0 -0
  111. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/tools/__init__.py +0 -0
  112. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/tools/base_tool.py +0 -0
  113. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/tools/knowledge_tools/__init__.py +0 -0
  114. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/tools/question_tools/__init__.py +0 -0
  115. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/tools/search_tools/__init__.py +0 -0
  116. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/api/__init__.py +0 -0
  117. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/api/benchmark_functions.py +0 -0
  118. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/api/research_functions.py +0 -0
  119. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/README.md +0 -0
  120. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/__init__.py +0 -0
  121. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/benchmark_functions.py +0 -0
  122. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/cli/__init__.py +0 -0
  123. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/cli/benchmark_commands.py +0 -0
  124. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/cli.py +0 -0
  125. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/comparison/__init__.py +0 -0
  126. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/comparison/evaluator.py +0 -0
  127. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/__init__.py +0 -0
  128. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/base.py +0 -0
  129. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/browsecomp.py +0 -0
  130. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/custom_dataset_template.py +0 -0
  131. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/simpleqa.py +0 -0
  132. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/utils.py +0 -0
  133. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets.py +0 -0
  134. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/efficiency/__init__.py +0 -0
  135. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/efficiency/resource_monitor.py +0 -0
  136. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/efficiency/speed_profiler.py +0 -0
  137. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/evaluators/__init__.py +0 -0
  138. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/evaluators/base.py +0 -0
  139. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/evaluators/browsecomp.py +0 -0
  140. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/evaluators/composite.py +0 -0
  141. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/evaluators/simpleqa.py +0 -0
  142. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/graders.py +0 -0
  143. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics/README.md +0 -0
  144. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics/__init__.py +0 -0
  145. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics/calculation.py +0 -0
  146. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics/reporting.py +0 -0
  147. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics/visualization.py +0 -0
  148. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics.py +0 -0
  149. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/models/__init__.py +0 -0
  150. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/models/benchmark_models.py +0 -0
  151. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/optimization/__init__.py +0 -0
  152. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/optimization/api.py +0 -0
  153. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/optimization/metrics.py +0 -0
  154. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/optimization/optuna_optimizer.py +0 -0
  155. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/runners.py +0 -0
  156. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/templates.py +0 -0
  157. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/ui/__init__.py +0 -0
  158. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/web_api/__init__.py +0 -0
  159. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/web_api/benchmark_routes.py +0 -0
  160. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/web_api/benchmark_service.py +0 -0
  161. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/citation_handler.py +0 -0
  162. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/citation_handlers/__init__.py +0 -0
  163. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/citation_handlers/base_citation_handler.py +0 -0
  164. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/citation_handlers/forced_answer_citation_handler.py +0 -0
  165. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/citation_handlers/precision_extraction_handler.py +0 -0
  166. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/citation_handlers/standard_citation_handler.py +0 -0
  167. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/config/__init__.py +0 -0
  168. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/config/llm_config.py +0 -0
  169. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/config/search_config.py +0 -0
  170. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/defaults/.env.template +0 -0
  171. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/defaults/__init__.py +0 -0
  172. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/defaults/default_settings.json +0 -0
  173. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/error_handling/__init__.py +0 -0
  174. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/error_handling/error_reporter.py +0 -0
  175. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/error_handling/report_generator.py +0 -0
  176. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/llm/__init__.py +0 -0
  177. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/llm/llm_registry.py +0 -0
  178. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/__init__.py +0 -0
  179. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/database.py +0 -0
  180. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/db_models.py +0 -0
  181. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/migrate_add_provider_to_token_usage.py +0 -0
  182. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/migrate_call_stack_tracking.py +0 -0
  183. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/migrate_enhanced_tracking.py +0 -0
  184. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/migrate_research_ratings.py +0 -0
  185. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/models.py +0 -0
  186. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/pricing/__init__.py +0 -0
  187. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/pricing/cost_calculator.py +0 -0
  188. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/pricing/pricing_cache.py +0 -0
  189. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/pricing/pricing_fetcher.py +0 -0
  190. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/query_utils.py +0 -0
  191. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/search_tracker.py +0 -0
  192. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/token_counter.py +0 -0
  193. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/report_generator.py +0 -0
  194. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/search_system.py +0 -0
  195. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/__init__.py +0 -0
  196. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/enums.py +0 -0
  197. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/es_utils.py +0 -0
  198. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/llm_utils.py +0 -0
  199. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/search_cache.py +0 -0
  200. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/search_utilities.py +0 -0
  201. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/setup_utils.py +0 -0
  202. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/thread_context.py +0 -0
  203. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/url_utils.py +0 -0
  204. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/__init__.py +0 -0
  205. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/database/README.md +0 -0
  206. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/database/benchmark_schema.py +0 -0
  207. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/database/convert_research_id_to_string.py +0 -0
  208. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/database/models.py +0 -0
  209. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/models/settings.py +0 -0
  210. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/api_routes.py +0 -0
  211. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/benchmark_routes.py +0 -0
  212. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/globals.py +0 -0
  213. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/history_routes.py +0 -0
  214. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/metrics_routes.py +0 -0
  215. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/research_routes.py +0 -0
  216. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/route_registry.py +0 -0
  217. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/services/research_service.py +0 -0
  218. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/services/resource_service.py +0 -0
  219. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/css/custom_dropdown.css +0 -0
  220. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/css/settings.css +0 -0
  221. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/css/styles.css +0 -0
  222. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/custom_dropdown.js +0 -0
  223. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/detail.js +0 -0
  224. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/details.js +0 -0
  225. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/fallback/formatting.js +0 -0
  226. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/fallback/ui.js +0 -0
  227. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/history.js +0 -0
  228. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/logpanel.js +0 -0
  229. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/progress.js +0 -0
  230. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/research.js +0 -0
  231. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/results.js +0 -0
  232. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/settings.js +0 -0
  233. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/settings_sync.js +0 -0
  234. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/config/urls.js +0 -0
  235. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/main.js +0 -0
  236. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/research_form.js +0 -0
  237. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/api.js +0 -0
  238. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/audio.js +0 -0
  239. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/formatting.js +0 -0
  240. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/keyboard.js +0 -0
  241. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/pdf.js +0 -0
  242. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/socket.js +0 -0
  243. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/ui.js +0 -0
  244. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/sounds/README.md +0 -0
  245. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/sounds/error.mp3 +0 -0
  246. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/sounds/success.mp3 +0 -0
  247. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/base.html +0 -0
  248. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/components/custom_dropdown.html +0 -0
  249. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/components/log_panel.html +0 -0
  250. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/components/mobile_nav.html +0 -0
  251. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/components/settings_form.html +0 -0
  252. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/components/sidebar.html +0 -0
  253. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/benchmark.html +0 -0
  254. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/benchmark_results.html +0 -0
  255. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/benchmark_simple.html +0 -0
  256. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/cost_analytics.html +0 -0
  257. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/details.html +0 -0
  258. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/history.html +0 -0
  259. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/metrics.html +0 -0
  260. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/progress.html +0 -0
  261. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/research.html +0 -0
  262. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/results.html +0 -0
  263. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/star_reviews.html +0 -0
  264. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/settings_dashboard.html +0 -0
  265. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/utils/__init__.py +0 -0
  266. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/utils/formatters.py +0 -0
  267. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/utils/templates.py +0 -0
  268. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/__init__.py +0 -0
  269. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/default_search_engines.py +0 -0
  270. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/__init__.py +0 -0
  271. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/full_search.py +0 -0
  272. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/meta_search_engine.py +0 -0
  273. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_arxiv.py +0 -0
  274. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_brave.py +0 -0
  275. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_ddg.py +0 -0
  276. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_elasticsearch.py +0 -0
  277. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_github.py +0 -0
  278. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_google_pse.py +0 -0
  279. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_guardian.py +0 -0
  280. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_local.py +0 -0
  281. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_local_all.py +0 -0
  282. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_pubmed.py +0 -0
  283. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_retriever.py +0 -0
  284. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_searxng.py +0 -0
  285. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_semantic_scholar.py +0 -0
  286. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_serpapi.py +0 -0
  287. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_tavily.py +0 -0
  288. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_wayback.py +0 -0
  289. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/search_engine_wikipedia.py +0 -0
  290. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/rate_limiting/__init__.py +0 -0
  291. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/rate_limiting/__main__.py +0 -0
  292. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/rate_limiting/cli.py +0 -0
  293. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/rate_limiting/exceptions.py +0 -0
  294. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/retriever_registry.py +0 -0
  295. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/search_engine_base.py +0 -0
  296. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/search_engine_factory.py +0 -0
  297. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/search_engines_config.py +0 -0
  298. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/CI_INTEGRATION.md +0 -0
  299. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/README.md +0 -0
  300. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/TESTING_COMPARISON.md +0 -0
  301. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/TESTING_PROPOSAL.md +0 -0
  302. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/TEST_OPTIMIZATION.md +0 -0
  303. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/__init__.py +0 -0
  304. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/accessibility_tests/README.md +0 -0
  305. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/accessibility_tests/__init__.py +0 -0
  306. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/accessibility_tests/test_accessibility.js +0 -0
  307. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/accessibility_tests/test_accessibility_backend.py +0 -0
  308. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/README.md +0 -0
  309. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/__init__.py +0 -0
  310. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/test_api_basic.py +0 -0
  311. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/test_api_pytest.py +0 -0
  312. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/test_rest_api.py +0 -0
  313. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/test_rest_api_simple.py +0 -0
  314. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/debug_url_utils.py +0 -0
  315. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/download_stuff_for_local.py +0 -0
  316. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/feature_tests/IMPLEMENTATION_GUIDE_241.md +0 -0
  317. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/feature_tests/README.md +0 -0
  318. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/feature_tests/__init__.py +0 -0
  319. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/feature_tests/test_custom_context.py +0 -0
  320. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/fix_tests/README.md +0 -0
  321. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/fix_tests/test_duplicate_links_fix.py +0 -0
  322. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/fix_tests/test_milestone_logging_fix.py +0 -0
  323. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/fixtures/README.md +0 -0
  324. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/fixtures/search_engine_mocks.py +0 -0
  325. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/health_check/README.md +0 -0
  326. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/health_check/run_quick_health_check.py +0 -0
  327. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/health_check/test_endpoints_health.py +0 -0
  328. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/health_check/test_endpoints_health.sh +0 -0
  329. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/README.md +0 -0
  330. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/__init__.py +0 -0
  331. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/package.json +0 -0
  332. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/test_route_registry.py +0 -0
  333. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/test_urls.test.js +0 -0
  334. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/test_urls_js.py +0 -0
  335. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/mock_fixtures.py +0 -0
  336. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/mock_llm_config.py +0 -0
  337. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/mock_modules.py +0 -0
  338. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/package.json +0 -0
  339. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/__init__.py +0 -0
  340. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/conftest.py +0 -0
  341. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/test_api_integration.py +0 -0
  342. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/test_e2e_basic.py +0 -0
  343. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/test_factory_integration.py +0 -0
  344. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/test_retriever_registry.py +0 -0
  345. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/test_search_engine_retriever.py +0 -0
  346. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/run_all_tests.py +0 -0
  347. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/search_engines/test_wikipedia_search.py +0 -0
  348. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/searxng/__init__.py +0 -0
  349. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/searxng/test_searxng.py +0 -0
  350. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/strategies/__init__.py +0 -0
  351. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/strategies/compare_strategies_visual.py +0 -0
  352. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/strategies/test_adaptive_strategy.py +0 -0
  353. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/strategies/test_iterative_reasoning.py +0 -0
  354. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/strategies/test_search_system_iterative.py +0 -0
  355. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_ci_config.py +0 -0
  356. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_citation_handler.py +0 -0
  357. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_google_pse.py +0 -0
  358. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/__init__.py +0 -0
  359. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/run_llm_tests.sh +0 -0
  360. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/test_api_llm_integration.py +0 -0
  361. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/test_llm_benchmarks.py +0 -0
  362. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/test_llm_edge_cases.py +0 -0
  363. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/test_llm_integration.py +0 -0
  364. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/test_llm_registry.py +0 -0
  365. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_orm_changes.py +0 -0
  366. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_report_generator.py +0 -0
  367. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_research_strategy_orm.py +0 -0
  368. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_search_engines_enhanced.py +0 -0
  369. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_search_system.py +0 -0
  370. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_url_utils.py +0 -0
  371. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_url_utils_simple.py +0 -0
  372. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_utils.py +0 -0
  373. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_wikipedia_url_security.py +0 -0
  374. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/README.md +0 -0
  375. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/__init__.py +0 -0
  376. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/run_all_tests.js +0 -0
  377. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_charts.js +0 -0
  378. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_cost_analytics.js +0 -0
  379. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_metrics.js +0 -0
  380. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_metrics_browser.js +0 -0
  381. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_metrics_chart.js +0 -0
  382. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_metrics_charts.js +0 -0
  383. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_metrics_only.js +0 -0
  384. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_network_requests.js +0 -0
  385. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_pages_browser.js +0 -0
  386. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_rate_limiting_settings.js +0 -0
  387. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_research_results.js +0 -0
  388. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_settings_errors.js +0 -0
  389. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_settings_page.js +0 -0
  390. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_settings_save.js +0 -0
  391. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_simple_cost.js +0 -0
  392. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_star_reviews.js +0 -0
  393. {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_star_reviews_debug.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: local-deep-research
3
- Version: 0.6.1
3
+ Version: 0.6.4
4
4
  Summary: AI-powered research assistant with deep, iterative analysis using LLMs and web searches
5
5
  Author-Email: LearningCircuit <185559241+LearningCircuit@users.noreply.github.com>, HashedViking <6432677+HashedViking@users.noreply.github.com>, djpetti <djpetti@gmail.com>
6
6
  License: MIT License
@@ -99,6 +99,7 @@ Description-Content-Type: text/markdown
99
99
 
100
100
  *Performs deep, iterative research using multiple LLMs and search engines with proper citations*
101
101
  </div>
102
+
102
103
  ## 🚀 What is Local Deep Research?
103
104
 
104
105
  LDR is an AI research assistant that performs systematic research by:
@@ -118,6 +119,14 @@ It aims to help researchers, students, and professionals find accurate informati
118
119
  - **Transparent**: Track costs and performance with built-in analytics
119
120
  - **Open Source**: MIT licensed with an active community
120
121
 
122
+ ## 📊 Performance
123
+
124
+ **~95% accuracy on SimpleQA benchmark** (preliminary results)
125
+ - Tested with GPT-4.1-mini + SearXNG + focused-iteration strategy
126
+ - Comparable to state-of-the-art AI research systems
127
+ - Local models can achieve similar performance with proper configuration
128
+ - [Join our community benchmarking effort →](https://github.com/LearningCircuit/local-deep-research/tree/main/community_benchmark_results)
129
+
121
130
  ## ✨ Key Features
122
131
 
123
132
  ### 🔍 Research Modes
@@ -160,7 +169,7 @@ It aims to help researchers, students, and professionals find accurate informati
160
169
 
161
170
  ## ⚡ Quick Start
162
171
 
163
- ### Option 1: Docker (Quickstart no MAC/ARM)
172
+ ### Option 1: Docker (Quickstart on MAC/ARM)
164
173
 
165
174
  ```bash
166
175
  # Step 1: Pull and run SearXNG for optimal search results
@@ -175,7 +184,13 @@ docker run -d -p 5000:5000 --name local-deep-research --volume 'deep-research:/i
175
184
  LDR uses Docker compose to bundle the web app and all it's dependencies so
176
185
  you can get up and running quickly.
177
186
 
178
- #### Option 2a: DIY docker-compose
187
+ #### Option 2a: Quick Start (One Command)
188
+ ```bash
189
+ curl -O https://raw.githubusercontent.com/LearningCircuit/local-deep-research/main/docker-compose.yml && docker compose up -d
190
+ ```
191
+ Open http://localhost:5000 after ~30 seconds. This starts LDR with SearXNG and all dependencies.
192
+
193
+ #### Option 2b: DIY docker-compose
179
194
  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
195
 
181
196
  Things you may want/need to configure:
@@ -184,7 +199,7 @@ Things you may want/need to configure:
184
199
  * Ollama keep alive (duration model will stay loaded into VRAM and idle before getting unloaded automatically)
185
200
  * Deep Research model (depends on available VRAM and preference)
186
201
 
187
- #### Option 2b: Use Cookie Cutter to tailor a docker-compose to your needs:
202
+ #### Option 2c: Use Cookie Cutter to tailor a docker-compose to your needs:
188
203
 
189
204
  ##### Prerequisites
190
205
 
@@ -17,6 +17,7 @@
17
17
 
18
18
  *Performs deep, iterative research using multiple LLMs and search engines with proper citations*
19
19
  </div>
20
+
20
21
  ## 🚀 What is Local Deep Research?
21
22
 
22
23
  LDR is an AI research assistant that performs systematic research by:
@@ -36,6 +37,14 @@ It aims to help researchers, students, and professionals find accurate informati
36
37
  - **Transparent**: Track costs and performance with built-in analytics
37
38
  - **Open Source**: MIT licensed with an active community
38
39
 
40
+ ## 📊 Performance
41
+
42
+ **~95% accuracy on SimpleQA benchmark** (preliminary results)
43
+ - Tested with GPT-4.1-mini + SearXNG + focused-iteration strategy
44
+ - Comparable to state-of-the-art AI research systems
45
+ - Local models can achieve similar performance with proper configuration
46
+ - [Join our community benchmarking effort →](https://github.com/LearningCircuit/local-deep-research/tree/main/community_benchmark_results)
47
+
39
48
  ## ✨ Key Features
40
49
 
41
50
  ### 🔍 Research Modes
@@ -78,7 +87,7 @@ It aims to help researchers, students, and professionals find accurate informati
78
87
 
79
88
  ## ⚡ Quick Start
80
89
 
81
- ### Option 1: Docker (Quickstart no MAC/ARM)
90
+ ### Option 1: Docker (Quickstart on MAC/ARM)
82
91
 
83
92
  ```bash
84
93
  # Step 1: Pull and run SearXNG for optimal search results
@@ -93,7 +102,13 @@ docker run -d -p 5000:5000 --name local-deep-research --volume 'deep-research:/i
93
102
  LDR uses Docker compose to bundle the web app and all it's dependencies so
94
103
  you can get up and running quickly.
95
104
 
96
- #### Option 2a: DIY docker-compose
105
+ #### Option 2a: Quick Start (One Command)
106
+ ```bash
107
+ curl -O https://raw.githubusercontent.com/LearningCircuit/local-deep-research/main/docker-compose.yml && docker compose up -d
108
+ ```
109
+ Open http://localhost:5000 after ~30 seconds. This starts LDR with SearXNG and all dependencies.
110
+
111
+ #### Option 2b: DIY docker-compose
97
112
  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
113
 
99
114
  Things you may want/need to configure:
@@ -102,7 +117,7 @@ Things you may want/need to configure:
102
117
  * Ollama keep alive (duration model will stay loaded into VRAM and idle before getting unloaded automatically)
103
118
  * Deep Research model (depends on available VRAM and preference)
104
119
 
105
- #### Option 2b: Use Cookie Cutter to tailor a docker-compose to your needs:
120
+ #### Option 2c: Use Cookie Cutter to tailor a docker-compose to your needs:
106
121
 
107
122
  ##### Prerequisites
108
123
 
@@ -69,7 +69,7 @@ dependencies = [
69
69
  "aiohttp>=3.9.0",
70
70
  "tenacity>=8.0.0",
71
71
  ]
72
- version = "0.6.1"
72
+ version = "0.6.4"
73
73
 
74
74
  [project.license]
75
75
  file = "LICENSE"
@@ -12,10 +12,16 @@ from .config.llm_config import get_llm
12
12
  from .config.search_config import get_search
13
13
  from .report_generator import get_report_generator
14
14
  from .web.app import main
15
+ from .web.database.migrations import ensure_database_initialized
16
+ from .setup_data_dir import setup_data_dir
15
17
 
16
18
  # Disable logging by default to not interfere with user setup.
17
19
  logger.disable("local_deep_research")
18
20
 
21
+ # Initialize database.
22
+ setup_data_dir()
23
+ ensure_database_initialized()
24
+
19
25
 
20
26
  def get_advanced_search_system(strategy_name: str = "iterdrag"):
21
27
  """
@@ -0,0 +1 @@
1
+ __version__ = "0.6.4"
@@ -5,6 +5,7 @@ Creates the data directory for the application database if it doesn't exist.
5
5
  """
6
6
 
7
7
  import os
8
+ from loguru import logger
8
9
 
9
10
 
10
11
  def setup_data_dir():
@@ -19,9 +20,9 @@ def setup_data_dir():
19
20
  # Create the data directory if it doesn't exist
20
21
  if not os.path.exists(data_dir):
21
22
  os.makedirs(data_dir)
22
- print(f"Created data directory at: {data_dir}")
23
+ logger.info(f"Created data directory at: {data_dir}")
23
24
  else:
24
- print(f"Data directory already exists at: {data_dir}")
25
+ logger.info(f"Data directory already exists at: {data_dir}")
25
26
 
26
27
  # Return the path to the data directory
27
28
  return data_dir
@@ -16,18 +16,23 @@ DATA_DIR = os.path.abspath(
16
16
  DB_PATH = os.path.join(DATA_DIR, "ldr.db")
17
17
 
18
18
 
19
- @thread_specific_cache(cache=LRUCache(maxsize=1))
20
- def get_db_session() -> Session:
19
+ @thread_specific_cache(cache=LRUCache(maxsize=10))
20
+ def get_db_session(_namespace: str = "") -> Session:
21
21
  """
22
+ Args:
23
+ _namespace: This can be specified to an arbitrary string in order to
24
+ force the caching mechanism to create separate settings even in
25
+ the same thread. Usually it does not need to be specified.
26
+
22
27
  Returns:
23
- The singleton DB session.
28
+ The singleton DB session for each thread.
29
+
24
30
  """
25
31
  engine = create_engine(f"sqlite:///{DB_PATH}")
26
32
  session_class = sessionmaker(bind=engine)
27
33
  return session_class()
28
34
 
29
35
 
30
- @thread_specific_cache(cache=LRUCache(maxsize=1))
31
36
  def get_settings_manager() -> SettingsManager:
32
37
  """
33
38
  Returns:
@@ -53,12 +58,9 @@ def get_db_setting(
53
58
  """
54
59
  try:
55
60
  # Get settings manager which handles database access
56
- value = get_settings_manager().get_setting(key)
57
-
58
- if value is not None:
59
- return value
61
+ return get_settings_manager().get_setting(key, default=default_value)
60
62
  except Exception:
61
63
  logger.exception(f"Error getting setting {key} from database")
62
64
 
63
- logger.warning(f"Could not find setting '{key}' in the database.")
65
+ logger.warning(f"Could not read setting '{key}' from the database.")
64
66
  return default_value
@@ -130,7 +130,7 @@ def database_sink(message: loguru.Message) -> None:
130
130
  )
131
131
 
132
132
  # Save the entry to the database.
133
- db_session = get_db_session()
133
+ db_session = get_db_session("log_utils.database_sink")
134
134
  try:
135
135
  db_session.add(db_log)
136
136
  db_session.commit()
@@ -1,13 +1,17 @@
1
1
  import threading
2
2
  from functools import wraps
3
- from typing import Any, Callable, Tuple
4
- from loguru import logger
3
+ from typing import Any, Callable, Tuple, Hashable
4
+ import uuid
5
5
 
6
+ from loguru import logger
6
7
  from cachetools import cached, keys
7
8
  from flask import current_app, g
8
9
  from flask.ctx import AppContext
9
10
 
10
11
 
12
+ g_thread_local_store = threading.local()
13
+
14
+
11
15
  def thread_specific_cache(*args: Any, **kwargs: Any) -> Callable:
12
16
  """
13
17
  A version of `cached()` that is local to a single thread. In other words,
@@ -22,9 +26,18 @@ def thread_specific_cache(*args: Any, **kwargs: Any) -> Callable:
22
26
 
23
27
  """
24
28
 
25
- def _key_func(*args_: Any, **kwargs_: Any) -> Tuple[int, ...]:
29
+ def _key_func(*args_: Any, **kwargs_: Any) -> Tuple[Hashable, ...]:
26
30
  base_hash = keys.hashkey(*args_, **kwargs_)
27
- return (threading.get_ident(),) + base_hash
31
+
32
+ if hasattr(g_thread_local_store, "thread_id"):
33
+ # We already gave this thread a unique ID. Use that.
34
+ thread_id = g_thread_local_store.thread_id
35
+ else:
36
+ # Give this thread a new unique ID.
37
+ thread_id = uuid.uuid4().hex
38
+ g_thread_local_store.thread_id = thread_id
39
+
40
+ return (thread_id,) + base_hash
28
41
 
29
42
  return cached(*args, **kwargs, key=_key_func)
30
43
 
@@ -10,7 +10,7 @@ from functools import wraps
10
10
  from flask import Blueprint, jsonify, request
11
11
 
12
12
  from ..api.research_functions import analyze_documents
13
- from .services.settings_service import get_setting
13
+ from ..utilities.db_utils import get_db_setting
14
14
 
15
15
  # Create a blueprint for the API
16
16
  api_blueprint = Blueprint("api_v1", __name__, url_prefix="/api/v1")
@@ -30,12 +30,14 @@ def api_access_control(f):
30
30
  @wraps(f)
31
31
  def decorated_function(*args, **kwargs):
32
32
  # Check if API is enabled
33
- api_enabled = get_setting("app.enable_api", True) # Default to enabled
33
+ api_enabled = get_db_setting(
34
+ "app.enable_api", True
35
+ ) # Default to enabled
34
36
  if not api_enabled:
35
37
  return jsonify({"error": "API access is disabled"}), 403
36
38
 
37
39
  # Implement rate limiting
38
- rate_limit = get_setting(
40
+ rate_limit = get_db_setting(
39
41
  "app.api_rate_limit", 60
40
42
  ) # Default 60 requests per minute
41
43
  if rate_limit:
@@ -0,0 +1,30 @@
1
+ from loguru import logger
2
+
3
+ from ..utilities.db_utils import get_db_setting
4
+ from ..utilities.log_utils import config_logger
5
+ from .app_factory import create_app
6
+
7
+
8
+ @logger.catch
9
+ def main():
10
+ """
11
+ Entry point for the web application when run as a command.
12
+ This function is needed for the package's entry point to work properly.
13
+ """
14
+ # Configure logging with milestone level
15
+ config_logger("ldr_web")
16
+
17
+ # Create the Flask app and SocketIO instance
18
+ app, socketio = create_app()
19
+
20
+ # Get web server settings with defaults
21
+ port = get_db_setting("web.port", 5000)
22
+ host = get_db_setting("web.host", "0.0.0.0")
23
+ debug = get_db_setting("web.debug", True)
24
+
25
+ with app.app_context():
26
+ socketio.run(host, port, debug=debug)
27
+
28
+
29
+ if __name__ == "__main__":
30
+ main()
@@ -13,7 +13,7 @@ from flask_wtf.csrf import CSRFProtect
13
13
  from loguru import logger
14
14
 
15
15
  from ..utilities.log_utils import InterceptHandler
16
- from .models.database import DB_PATH, init_db
16
+ from .models.database import DB_PATH
17
17
  from .services.socket_service import SocketIOService
18
18
 
19
19
 
@@ -77,7 +77,6 @@ def create_app():
77
77
 
78
78
  # Initialize the database
79
79
  create_database(app)
80
- init_db()
81
80
 
82
81
  # Register socket service
83
82
  socket_service = SocketIOService(app=app)
@@ -261,9 +260,6 @@ def create_database(app):
261
260
  from sqlalchemy import create_engine
262
261
  from sqlalchemy.orm import scoped_session, sessionmaker
263
262
 
264
- from .database.migrations import run_migrations
265
- from .database.models import Base
266
-
267
263
  # Configure SQLite to use URI mode, which allows for relative file paths
268
264
  engine = create_engine(
269
265
  app.config["SQLALCHEMY_DATABASE_URI"],
@@ -273,18 +269,12 @@ def create_database(app):
273
269
 
274
270
  app.engine = engine
275
271
 
276
- # Create all tables
277
- Base.metadata.create_all(engine)
278
-
279
272
  # Configure session factory
280
273
  session_factory = sessionmaker(
281
274
  bind=engine, autocommit=False, autoflush=False
282
275
  )
283
276
  app.db_session = scoped_session(session_factory)
284
277
 
285
- # Run migrations and setup predefined settings
286
- run_migrations(engine, app.db_session)
287
-
288
278
  # Add teardown context
289
279
  @app.teardown_appcontext
290
280
  def remove_session(exception=None):