local-deep-research 0.5.2__tar.gz → 0.5.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 (340) hide show
  1. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/PKG-INFO +1 -1
  2. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/pyproject.toml +1 -1
  3. local_deep_research-0.5.4/src/local_deep_research/__version__.py +1 -0
  4. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/config/llm_config.py +61 -1
  5. local_deep_research-0.5.4/src/local_deep_research/error_handling/__init__.py +13 -0
  6. local_deep_research-0.5.4/src/local_deep_research/error_handling/error_reporter.py +236 -0
  7. local_deep_research-0.5.4/src/local_deep_research/error_handling/report_generator.py +403 -0
  8. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/routes/history_routes.py +1 -1
  9. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/services/research_service.py +106 -2
  10. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/css/styles.css +78 -3
  11. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/custom_dropdown.js +12 -0
  12. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/progress.js +19 -13
  13. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/research.js +72 -25
  14. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/results.js +1 -1
  15. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/services/keyboard.js +46 -5
  16. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/pages/research.html +19 -12
  17. local_deep_research-0.5.4/tests/accessibility_tests/README.md +209 -0
  18. local_deep_research-0.5.4/tests/accessibility_tests/__init__.py +1 -0
  19. local_deep_research-0.5.4/tests/accessibility_tests/test_accessibility.js +344 -0
  20. local_deep_research-0.5.4/tests/accessibility_tests/test_accessibility_backend.py +313 -0
  21. local_deep_research-0.5.2/src/local_deep_research/__version__.py +0 -1
  22. local_deep_research-0.5.2/src/local_deep_research/test_migration.py +0 -188
  23. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/LICENSE +0 -0
  24. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/README.md +0 -0
  25. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/__init__.py +0 -0
  26. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/__init__.py +0 -0
  27. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/answer_decoding/__init__.py +0 -0
  28. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/answer_decoding/browsecomp_answer_decoder.py +0 -0
  29. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/candidate_exploration/README.md +0 -0
  30. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/candidate_exploration/__init__.py +0 -0
  31. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/candidate_exploration/adaptive_explorer.py +0 -0
  32. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/candidate_exploration/base_explorer.py +0 -0
  33. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/candidate_exploration/constraint_guided_explorer.py +0 -0
  34. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/candidate_exploration/diversity_explorer.py +0 -0
  35. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/candidate_exploration/parallel_explorer.py +0 -0
  36. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/candidate_exploration/progressive_explorer.py +0 -0
  37. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/candidates/__init__.py +0 -0
  38. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/candidates/base_candidate.py +0 -0
  39. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraint_checking/README.md +0 -0
  40. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraint_checking/__init__.py +0 -0
  41. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraint_checking/base_constraint_checker.py +0 -0
  42. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraint_checking/constraint_checker.py +0 -0
  43. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraint_checking/constraint_satisfaction_tracker.py +0 -0
  44. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraint_checking/dual_confidence_checker.py +0 -0
  45. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraint_checking/evidence_analyzer.py +0 -0
  46. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraint_checking/intelligent_constraint_relaxer.py +0 -0
  47. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraint_checking/rejection_engine.py +0 -0
  48. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraint_checking/strict_checker.py +0 -0
  49. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraint_checking/threshold_checker.py +0 -0
  50. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraints/__init__.py +0 -0
  51. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraints/base_constraint.py +0 -0
  52. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/constraints/constraint_analyzer.py +0 -0
  53. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/evidence/__init__.py +0 -0
  54. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/evidence/base_evidence.py +0 -0
  55. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/evidence/evaluator.py +0 -0
  56. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/evidence/requirements.py +0 -0
  57. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/filters/__init__.py +0 -0
  58. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/filters/base_filter.py +0 -0
  59. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/filters/cross_engine_filter.py +0 -0
  60. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/filters/journal_reputation_filter.py +0 -0
  61. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/findings/base_findings.py +0 -0
  62. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/findings/repository.py +0 -0
  63. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/knowledge/__init__.py +0 -0
  64. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/knowledge/base_knowledge.py +0 -0
  65. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/knowledge/standard_knowledge.py +0 -0
  66. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/query_generation/adaptive_query_generator.py +0 -0
  67. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/questions/__init__.py +0 -0
  68. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/questions/atomic_fact_question.py +0 -0
  69. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/questions/base_question.py +0 -0
  70. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/questions/browsecomp_question.py +0 -0
  71. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/questions/decomposition_question.py +0 -0
  72. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/questions/entity_aware_question.py +0 -0
  73. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/questions/standard_question.py +0 -0
  74. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/repositories/__init__.py +0 -0
  75. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/search_optimization/cross_constraint_manager.py +0 -0
  76. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/source_management/diversity_manager.py +0 -0
  77. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/__init__.py +0 -0
  78. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/adaptive_decomposition_strategy.py +0 -0
  79. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/base_strategy.py +0 -0
  80. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/browsecomp_entity_strategy.py +0 -0
  81. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/browsecomp_optimized_strategy.py +0 -0
  82. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/concurrent_dual_confidence_strategy.py +0 -0
  83. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/constrained_search_strategy.py +0 -0
  84. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/constraint_parallel_strategy.py +0 -0
  85. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/direct_search_strategy.py +0 -0
  86. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/dual_confidence_strategy.py +0 -0
  87. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/dual_confidence_with_rejection.py +0 -0
  88. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/early_stop_constrained_strategy.py +0 -0
  89. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/entity_aware_source_strategy.py +0 -0
  90. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/evidence_based_strategy.py +0 -0
  91. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/evidence_based_strategy_v2.py +0 -0
  92. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/focused_iteration_strategy.py +0 -0
  93. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/improved_evidence_based_strategy.py +0 -0
  94. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/iterative_reasoning_strategy.py +0 -0
  95. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/iterdrag_strategy.py +0 -0
  96. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/llm_driven_modular_strategy.py +0 -0
  97. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/modular_strategy.py +0 -0
  98. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/parallel_constrained_strategy.py +0 -0
  99. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/parallel_search_strategy.py +0 -0
  100. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/rapid_search_strategy.py +0 -0
  101. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/recursive_decomposition_strategy.py +0 -0
  102. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/smart_decomposition_strategy.py +0 -0
  103. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/smart_query_strategy.py +0 -0
  104. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/source_based_strategy.py +0 -0
  105. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/strategies/standard_strategy.py +0 -0
  106. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/tools/__init__.py +0 -0
  107. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/tools/base_tool.py +0 -0
  108. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/tools/knowledge_tools/__init__.py +0 -0
  109. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/tools/question_tools/__init__.py +0 -0
  110. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/advanced_search_system/tools/search_tools/__init__.py +0 -0
  111. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/api/__init__.py +0 -0
  112. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/api/benchmark_functions.py +0 -0
  113. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/api/research_functions.py +0 -0
  114. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/README.md +0 -0
  115. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/__init__.py +0 -0
  116. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/benchmark_functions.py +0 -0
  117. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/cli/__init__.py +0 -0
  118. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/cli/benchmark_commands.py +0 -0
  119. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/cli.py +0 -0
  120. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/comparison/__init__.py +0 -0
  121. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/comparison/evaluator.py +0 -0
  122. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/datasets/__init__.py +0 -0
  123. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/datasets/base.py +0 -0
  124. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/datasets/browsecomp.py +0 -0
  125. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/datasets/custom_dataset_template.py +0 -0
  126. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/datasets/simpleqa.py +0 -0
  127. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/datasets/utils.py +0 -0
  128. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/datasets.py +0 -0
  129. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/efficiency/__init__.py +0 -0
  130. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/efficiency/resource_monitor.py +0 -0
  131. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/efficiency/speed_profiler.py +0 -0
  132. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/evaluators/__init__.py +0 -0
  133. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/evaluators/base.py +0 -0
  134. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/evaluators/browsecomp.py +0 -0
  135. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/evaluators/composite.py +0 -0
  136. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/evaluators/simpleqa.py +0 -0
  137. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/graders.py +0 -0
  138. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/metrics/README.md +0 -0
  139. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/metrics/__init__.py +0 -0
  140. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/metrics/calculation.py +0 -0
  141. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/metrics/reporting.py +0 -0
  142. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/metrics/visualization.py +0 -0
  143. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/metrics.py +0 -0
  144. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/optimization/__init__.py +0 -0
  145. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/optimization/api.py +0 -0
  146. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/optimization/metrics.py +0 -0
  147. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/optimization/optuna_optimizer.py +0 -0
  148. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/runners.py +0 -0
  149. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/benchmarks/templates.py +0 -0
  150. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/citation_handler.py +0 -0
  151. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/citation_handlers/__init__.py +0 -0
  152. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/citation_handlers/base_citation_handler.py +0 -0
  153. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/citation_handlers/forced_answer_citation_handler.py +0 -0
  154. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/citation_handlers/precision_extraction_handler.py +0 -0
  155. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/citation_handlers/standard_citation_handler.py +0 -0
  156. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/config/__init__.py +0 -0
  157. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/config/search_config.py +0 -0
  158. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/defaults/.env.template +0 -0
  159. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/defaults/__init__.py +0 -0
  160. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/defaults/default_settings.json +0 -0
  161. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/__init__.py +0 -0
  162. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/database.py +0 -0
  163. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/db_models.py +0 -0
  164. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/migrate_add_provider_to_token_usage.py +0 -0
  165. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/migrate_call_stack_tracking.py +0 -0
  166. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/migrate_enhanced_tracking.py +0 -0
  167. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/migrate_research_ratings.py +0 -0
  168. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/models.py +0 -0
  169. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/pricing/__init__.py +0 -0
  170. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/pricing/cost_calculator.py +0 -0
  171. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/pricing/pricing_cache.py +0 -0
  172. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/pricing/pricing_fetcher.py +0 -0
  173. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/query_utils.py +0 -0
  174. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/search_tracker.py +0 -0
  175. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/metrics/token_counter.py +0 -0
  176. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/migrate_db.py +0 -0
  177. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/report_generator.py +0 -0
  178. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/search_system.py +0 -0
  179. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/setup_data_dir.py +0 -0
  180. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/utilities/__init__.py +0 -0
  181. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/utilities/db_utils.py +0 -0
  182. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/utilities/enums.py +0 -0
  183. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/utilities/es_utils.py +0 -0
  184. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/utilities/llm_utils.py +0 -0
  185. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/utilities/log_utils.py +0 -0
  186. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/utilities/search_cache.py +0 -0
  187. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/utilities/search_utilities.py +0 -0
  188. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/utilities/setup_utils.py +0 -0
  189. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/utilities/threading_utils.py +0 -0
  190. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/utilities/url_utils.py +0 -0
  191. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/__init__.py +0 -0
  192. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/api.py +0 -0
  193. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/app.py +0 -0
  194. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/app_factory.py +0 -0
  195. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/database/README.md +0 -0
  196. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/database/migrate_to_ldr_db.py +0 -0
  197. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/database/migrations.py +0 -0
  198. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/database/models.py +0 -0
  199. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/database/schema_upgrade.py +0 -0
  200. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/models/database.py +0 -0
  201. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/models/settings.py +0 -0
  202. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/routes/api_routes.py +0 -0
  203. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/routes/benchmark_routes.py +0 -0
  204. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/routes/globals.py +0 -0
  205. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/routes/metrics_routes.py +0 -0
  206. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/routes/research_routes.py +0 -0
  207. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/routes/settings_routes.py +0 -0
  208. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/services/resource_service.py +0 -0
  209. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/services/settings_manager.py +0 -0
  210. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/services/settings_service.py +0 -0
  211. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/services/socket_service.py +0 -0
  212. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/css/custom_dropdown.css +0 -0
  213. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/css/settings.css +0 -0
  214. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/detail.js +0 -0
  215. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/details.js +0 -0
  216. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/fallback/formatting.js +0 -0
  217. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/fallback/ui.js +0 -0
  218. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/history.js +0 -0
  219. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/logpanel.js +0 -0
  220. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/settings.js +0 -0
  221. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/components/settings_sync.js +0 -0
  222. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/main.js +0 -0
  223. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/research_form.js +0 -0
  224. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/services/api.js +0 -0
  225. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/services/audio.js +0 -0
  226. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/services/formatting.js +0 -0
  227. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/services/pdf.js +0 -0
  228. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/services/socket.js +0 -0
  229. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/js/services/ui.js +0 -0
  230. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/sounds/README.md +0 -0
  231. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/sounds/error.mp3 +0 -0
  232. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/static/sounds/success.mp3 +0 -0
  233. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/base.html +0 -0
  234. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/components/custom_dropdown.html +0 -0
  235. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/components/log_panel.html +0 -0
  236. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/components/mobile_nav.html +0 -0
  237. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/components/settings_form.html +0 -0
  238. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/components/sidebar.html +0 -0
  239. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/pages/cost_analytics.html +0 -0
  240. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/pages/details.html +0 -0
  241. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/pages/history.html +0 -0
  242. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/pages/metrics.html +0 -0
  243. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/pages/progress.html +0 -0
  244. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/pages/results.html +0 -0
  245. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/pages/star_reviews.html +0 -0
  246. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/templates/settings_dashboard.html +0 -0
  247. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/utils/__init__.py +0 -0
  248. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/utils/formatters.py +0 -0
  249. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web/utils/templates.py +0 -0
  250. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/__init__.py +0 -0
  251. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/default_search_engines.py +0 -0
  252. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/__init__.py +0 -0
  253. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/full_search.py +0 -0
  254. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/meta_search_engine.py +0 -0
  255. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_arxiv.py +0 -0
  256. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_brave.py +0 -0
  257. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_ddg.py +0 -0
  258. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_elasticsearch.py +0 -0
  259. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_github.py +0 -0
  260. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_google_pse.py +0 -0
  261. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_guardian.py +0 -0
  262. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_local.py +0 -0
  263. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_local_all.py +0 -0
  264. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_pubmed.py +0 -0
  265. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_searxng.py +0 -0
  266. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_semantic_scholar.py +0 -0
  267. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_serpapi.py +0 -0
  268. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_wayback.py +0 -0
  269. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/engines/search_engine_wikipedia.py +0 -0
  270. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/search_engine_base.py +0 -0
  271. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/search_engine_factory.py +0 -0
  272. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/src/local_deep_research/web_search_engines/search_engines_config.py +0 -0
  273. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/CI_INTEGRATION.md +0 -0
  274. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/README.md +0 -0
  275. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/TESTING_COMPARISON.md +0 -0
  276. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/TESTING_PROPOSAL.md +0 -0
  277. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/__init__.py +0 -0
  278. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/api_tests/README.md +0 -0
  279. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/api_tests/__init__.py +0 -0
  280. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/api_tests/test_api_basic.py +0 -0
  281. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/api_tests/test_api_pytest.py +0 -0
  282. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/api_tests/test_rest_api.py +0 -0
  283. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/api_tests/test_rest_api_simple.py +0 -0
  284. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/conftest.py +0 -0
  285. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/debug_url_utils.py +0 -0
  286. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/download_stuff_for_local.py +0 -0
  287. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/feature_tests/IMPLEMENTATION_GUIDE_241.md +0 -0
  288. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/feature_tests/README.md +0 -0
  289. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/feature_tests/__init__.py +0 -0
  290. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/feature_tests/test_custom_context.py +0 -0
  291. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/fix_tests/README.md +0 -0
  292. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/fix_tests/test_duplicate_links_fix.py +0 -0
  293. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/fixtures/README.md +0 -0
  294. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/fixtures/search_engine_mocks.py +0 -0
  295. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/health_check/README.md +0 -0
  296. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/health_check/run_quick_health_check.py +0 -0
  297. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/health_check/test_endpoints_health.py +0 -0
  298. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/health_check/test_endpoints_health.sh +0 -0
  299. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/mock_fixtures.py +0 -0
  300. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/mock_llm_config.py +0 -0
  301. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/mock_modules.py +0 -0
  302. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/run_all_tests.py +0 -0
  303. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/search_engines/test_wikipedia_search.py +0 -0
  304. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/searxng/__init__.py +0 -0
  305. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/searxng/test_searxng.py +0 -0
  306. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/strategies/__init__.py +0 -0
  307. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/strategies/compare_strategies_visual.py +0 -0
  308. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/strategies/test_adaptive_strategy.py +0 -0
  309. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/strategies/test_iterative_reasoning.py +0 -0
  310. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/strategies/test_search_system_iterative.py +0 -0
  311. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_ci_config.py +0 -0
  312. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_citation_handler.py +0 -0
  313. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_google_pse.py +0 -0
  314. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_report_generator.py +0 -0
  315. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_research_strategy_orm.py +0 -0
  316. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_search_engines_enhanced.py +0 -0
  317. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_search_system.py +0 -0
  318. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_settings_manager.py +0 -0
  319. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_url_utils.py +0 -0
  320. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_url_utils_simple.py +0 -0
  321. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_utils.py +0 -0
  322. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/test_wikipedia_url_security.py +0 -0
  323. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/README.md +0 -0
  324. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/__init__.py +0 -0
  325. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/run_all_tests.js +0 -0
  326. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_charts.js +0 -0
  327. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_cost_analytics.js +0 -0
  328. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_metrics.js +0 -0
  329. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_metrics_browser.js +0 -0
  330. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_metrics_chart.js +0 -0
  331. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_metrics_charts.js +0 -0
  332. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_metrics_only.js +0 -0
  333. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_network_requests.js +0 -0
  334. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_pages_browser.js +0 -0
  335. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_research_results.js +0 -0
  336. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_settings_errors.js +0 -0
  337. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_settings_page.js +0 -0
  338. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_settings_save.js +0 -0
  339. {local_deep_research-0.5.2 → local_deep_research-0.5.4}/tests/ui_tests/test_star_reviews.js +0 -0
  340. {local_deep_research-0.5.2 → local_deep_research-0.5.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.5.2
3
+ Version: 0.5.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>
6
6
  License: MIT License
@@ -67,7 +67,7 @@ dependencies = [
67
67
  "kaleido==0.2.1",
68
68
  "aiohttp>=3.9.0",
69
69
  ]
70
- version = "0.5.2"
70
+ version = "0.5.4"
71
71
 
72
72
  [project.license]
73
73
  file = "LICENSE"
@@ -0,0 +1 @@
1
+ __version__ = "0.5.4"
@@ -397,6 +397,24 @@ def get_llm(
397
397
  llm = ChatOllama(
398
398
  model=model_name, base_url=base_url, **common_params
399
399
  )
400
+
401
+ # Log the actual client configuration after creation
402
+ logger.debug(
403
+ f"ChatOllama created - base_url attribute: {getattr(llm, 'base_url', 'not found')}"
404
+ )
405
+ if hasattr(llm, "_client"):
406
+ client = llm._client
407
+ logger.debug(f"ChatOllama _client type: {type(client)}")
408
+ if hasattr(client, "_client"):
409
+ inner_client = client._client
410
+ logger.debug(
411
+ f"ChatOllama inner client type: {type(inner_client)}"
412
+ )
413
+ if hasattr(inner_client, "base_url"):
414
+ logger.debug(
415
+ f"ChatOllama inner client base_url: {inner_client.base_url}"
416
+ )
417
+
400
418
  # Test invoke to validate model works
401
419
  logger.info("Testing Ollama model with simple invocation")
402
420
  test_result = llm.invoke("Hello")
@@ -545,7 +563,49 @@ def wrap_llm_without_think_tags(
545
563
  self.base_llm = base_llm
546
564
 
547
565
  def invoke(self, *args, **kwargs):
548
- response = self.base_llm.invoke(*args, **kwargs)
566
+ # Log detailed request information for Ollama models
567
+ if hasattr(self.base_llm, "base_url"):
568
+ logger.debug(
569
+ f"LLM Request - Base URL: {self.base_llm.base_url}"
570
+ )
571
+ logger.debug(
572
+ f"LLM Request - Model: {getattr(self.base_llm, 'model', 'unknown')}"
573
+ )
574
+ logger.debug(
575
+ f"LLM Request - Args count: {len(args)}, Kwargs: {list(kwargs.keys())}"
576
+ )
577
+
578
+ # Log the prompt if it's in args
579
+ if args and len(args) > 0:
580
+ prompt_text = (
581
+ str(args[0])[:200] + "..."
582
+ if len(str(args[0])) > 200
583
+ else str(args[0])
584
+ )
585
+ logger.debug(f"LLM Request - Prompt preview: {prompt_text}")
586
+
587
+ # Check if there's any client configuration
588
+ if hasattr(self.base_llm, "_client"):
589
+ client = self.base_llm._client
590
+ if hasattr(client, "_client") and hasattr(
591
+ client._client, "base_url"
592
+ ):
593
+ logger.debug(
594
+ f"LLM Request - Client base URL: {client._client.base_url}"
595
+ )
596
+
597
+ try:
598
+ response = self.base_llm.invoke(*args, **kwargs)
599
+ logger.debug(f"LLM Response - Success, type: {type(response)}")
600
+ except Exception as e:
601
+ logger.error(f"LLM Request - Failed with error: {str(e)}")
602
+ # Log any URL information from the error
603
+ error_str = str(e)
604
+ if "http://" in error_str or "https://" in error_str:
605
+ logger.error(
606
+ f"LLM Request - Error contains URL info: {error_str}"
607
+ )
608
+ raise
549
609
 
550
610
  # Process the response content if it has a content attribute
551
611
  if hasattr(response, "content"):
@@ -0,0 +1,13 @@
1
+ """
2
+ Error Handling Module for Local Deep Research
3
+
4
+ This module provides comprehensive error handling capabilities including:
5
+ - Error categorization and analysis
6
+ - User-friendly error report generation
7
+ - Integration with partial research results
8
+ """
9
+
10
+ from .error_reporter import ErrorReporter
11
+ from .report_generator import ErrorReportGenerator
12
+
13
+ __all__ = ["ErrorReporter", "ErrorReportGenerator"]
@@ -0,0 +1,236 @@
1
+ """
2
+ ErrorReporter - Main error categorization and handling logic
3
+ """
4
+
5
+ import re
6
+ from enum import Enum
7
+ from typing import Dict, Optional, Any
8
+ from loguru import logger
9
+
10
+
11
+ class ErrorCategory(Enum):
12
+ """Categories of errors that can occur during research"""
13
+
14
+ CONNECTION_ERROR = "connection_error"
15
+ MODEL_ERROR = "model_error"
16
+ SEARCH_ERROR = "search_error"
17
+ SYNTHESIS_ERROR = "synthesis_error"
18
+ FILE_ERROR = "file_error"
19
+ UNKNOWN_ERROR = "unknown_error"
20
+
21
+
22
+ class ErrorReporter:
23
+ """
24
+ Analyzes and categorizes errors to provide better user feedback
25
+ """
26
+
27
+ def __init__(self):
28
+ self.error_patterns = {
29
+ ErrorCategory.CONNECTION_ERROR: [
30
+ r"POST predict.*EOF",
31
+ r"Connection refused",
32
+ r"timeout",
33
+ r"Connection.*failed",
34
+ r"HTTP error \d+",
35
+ r"network.*error",
36
+ r"\[Errno 111\]",
37
+ r"host\.docker\.internal",
38
+ r"host.*localhost.*Docker",
39
+ r"127\.0\.0\.1.*Docker",
40
+ r"localhost.*1234.*Docker",
41
+ r"LM.*Studio.*Docker.*Mac",
42
+ ],
43
+ ErrorCategory.MODEL_ERROR: [
44
+ r"Model.*not found",
45
+ r"Invalid.*model",
46
+ r"Ollama.*not available",
47
+ r"API key.*invalid",
48
+ r"Authentication.*error",
49
+ r"max_workers must be greater than 0",
50
+ r"TypeError.*Context.*Size",
51
+ r"'<' not supported between",
52
+ r"No auth credentials found",
53
+ r"401.*API key",
54
+ ],
55
+ ErrorCategory.SEARCH_ERROR: [
56
+ r"Search.*failed",
57
+ r"No search results",
58
+ r"Search engine.*error",
59
+ r"Rate limit.*exceeded",
60
+ r"The search is longer than 256 characters",
61
+ r"Failed to create search engine",
62
+ r"could not be found",
63
+ r"GitHub API error",
64
+ r"database.*locked",
65
+ ],
66
+ ErrorCategory.SYNTHESIS_ERROR: [
67
+ r"Error.*synthesis",
68
+ r"Failed.*generate",
69
+ r"Synthesis.*timeout",
70
+ r"detailed.*report.*stuck",
71
+ r"report.*taking.*long",
72
+ r"progress.*100.*stuck",
73
+ ],
74
+ ErrorCategory.FILE_ERROR: [
75
+ r"Permission denied",
76
+ r"File.*not found",
77
+ r"Cannot write.*file",
78
+ r"Disk.*full",
79
+ r"No module named.*local_deep_research",
80
+ r"HTTP error 404.*research results",
81
+ r"Attempt to write readonly database",
82
+ ],
83
+ }
84
+
85
+ def categorize_error(self, error_message: str) -> ErrorCategory:
86
+ """
87
+ Categorize an error based on its message
88
+
89
+ Args:
90
+ error_message: The error message to categorize
91
+
92
+ Returns:
93
+ ErrorCategory: The categorized error type
94
+ """
95
+ error_message = str(error_message).lower()
96
+
97
+ for category, patterns in self.error_patterns.items():
98
+ for pattern in patterns:
99
+ if re.search(pattern.lower(), error_message):
100
+ logger.debug(
101
+ f"Categorized error as {category.value}: {pattern}"
102
+ )
103
+ return category
104
+
105
+ return ErrorCategory.UNKNOWN_ERROR
106
+
107
+ def get_user_friendly_title(self, category: ErrorCategory) -> str:
108
+ """
109
+ Get a user-friendly title for an error category
110
+
111
+ Args:
112
+ category: The error category
113
+
114
+ Returns:
115
+ str: User-friendly title
116
+ """
117
+ titles = {
118
+ ErrorCategory.CONNECTION_ERROR: "Connection Issue",
119
+ ErrorCategory.MODEL_ERROR: "LLM Service Error",
120
+ ErrorCategory.SEARCH_ERROR: "Search Service Error",
121
+ ErrorCategory.SYNTHESIS_ERROR: "Report Generation Error",
122
+ ErrorCategory.FILE_ERROR: "File System Error",
123
+ ErrorCategory.UNKNOWN_ERROR: "Unexpected Error",
124
+ }
125
+ return titles.get(category, "Error")
126
+
127
+ def get_suggested_actions(self, category: ErrorCategory) -> list:
128
+ """
129
+ Get suggested actions for resolving an error
130
+
131
+ Args:
132
+ category: The error category
133
+
134
+ Returns:
135
+ list: List of suggested actions
136
+ """
137
+ suggestions = {
138
+ ErrorCategory.CONNECTION_ERROR: [
139
+ "Check if the LLM service (Ollama/LM Studio) is running",
140
+ "Verify network connectivity",
141
+ "Try switching to a different model provider",
142
+ "Check the service logs for more details",
143
+ ],
144
+ ErrorCategory.MODEL_ERROR: [
145
+ "Verify the model name is correct",
146
+ "Check if the model is downloaded and available",
147
+ "Validate API keys if using external services",
148
+ "Try switching to a different model",
149
+ ],
150
+ ErrorCategory.SEARCH_ERROR: [
151
+ "Check internet connectivity",
152
+ "Try reducing the number of search results",
153
+ "Wait a moment and try again",
154
+ "Check if search service is configured correctly",
155
+ "For local documents: ensure the path is absolute and folder exists",
156
+ "Try a different search engine if one is failing",
157
+ ],
158
+ ErrorCategory.SYNTHESIS_ERROR: [
159
+ "The research data was collected successfully",
160
+ "Try switching to a different model for report generation",
161
+ "Check the partial results below",
162
+ "Review the detailed logs for more information",
163
+ ],
164
+ ErrorCategory.FILE_ERROR: [
165
+ "Check disk space availability",
166
+ "Verify write permissions",
167
+ "Try changing the output directory",
168
+ "Restart the application",
169
+ ],
170
+ ErrorCategory.UNKNOWN_ERROR: [
171
+ "Check the detailed logs below for more information",
172
+ "Try running the research again",
173
+ "Report this issue if it persists",
174
+ "Contact support with the error details",
175
+ ],
176
+ }
177
+ return suggestions.get(category, ["Check the logs for more details"])
178
+
179
+ def analyze_error(
180
+ self, error_message: str, context: Optional[Dict[str, Any]] = None
181
+ ) -> Dict[str, Any]:
182
+ """
183
+ Perform comprehensive error analysis
184
+
185
+ Args:
186
+ error_message: The error message to analyze
187
+ context: Optional context information
188
+
189
+ Returns:
190
+ dict: Comprehensive error analysis
191
+ """
192
+ category = self.categorize_error(error_message)
193
+
194
+ analysis = {
195
+ "category": category,
196
+ "title": self.get_user_friendly_title(category),
197
+ "original_error": error_message,
198
+ "suggestions": self.get_suggested_actions(category),
199
+ "severity": self._determine_severity(category),
200
+ "recoverable": self._is_recoverable(category),
201
+ }
202
+
203
+ # Add context-specific information
204
+ if context:
205
+ analysis["context"] = context
206
+ analysis["has_partial_results"] = bool(
207
+ context.get("findings")
208
+ or context.get("current_knowledge")
209
+ or context.get("search_results")
210
+ )
211
+
212
+ return analysis
213
+
214
+ def _determine_severity(self, category: ErrorCategory) -> str:
215
+ """Determine error severity level"""
216
+ severity_map = {
217
+ ErrorCategory.CONNECTION_ERROR: "high",
218
+ ErrorCategory.MODEL_ERROR: "high",
219
+ ErrorCategory.SEARCH_ERROR: "medium",
220
+ ErrorCategory.SYNTHESIS_ERROR: "low", # Can often show partial results
221
+ ErrorCategory.FILE_ERROR: "medium",
222
+ ErrorCategory.UNKNOWN_ERROR: "high",
223
+ }
224
+ return severity_map.get(category, "medium")
225
+
226
+ def _is_recoverable(self, category: ErrorCategory) -> bool:
227
+ """Determine if error is recoverable with user action"""
228
+ recoverable = {
229
+ ErrorCategory.CONNECTION_ERROR: True,
230
+ ErrorCategory.MODEL_ERROR: True,
231
+ ErrorCategory.SEARCH_ERROR: True,
232
+ ErrorCategory.SYNTHESIS_ERROR: True,
233
+ ErrorCategory.FILE_ERROR: True,
234
+ ErrorCategory.UNKNOWN_ERROR: False,
235
+ }
236
+ return recoverable.get(category, False)