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.
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/PKG-INFO +19 -4
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/README.md +18 -3
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/pyproject.toml +1 -1
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/__init__.py +6 -0
- local_deep_research-0.6.4/src/local_deep_research/__version__.py +1 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/setup_data_dir.py +3 -2
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/db_utils.py +11 -9
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/log_utils.py +1 -1
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/threading_utils.py +17 -4
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/api.py +5 -3
- local_deep_research-0.6.4/src/local_deep_research/web/app.py +30 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/app_factory.py +1 -11
- 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
- local_deep_research-0.6.4/src/local_deep_research/web/database/uuid_migration.py +20 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/models/database.py +0 -79
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/settings_routes.py +70 -73
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/services/settings_manager.py +13 -28
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/services/settings_service.py +6 -40
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/services/socket_service.py +1 -1
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/conftest.py +0 -1
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/rate_limiting/test_rate_limiting.py +13 -3
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_settings_manager.py +3 -5
- local_deep_research-0.6.1/src/local_deep_research/__version__.py +0 -1
- local_deep_research-0.6.1/src/local_deep_research/migrate_db.py +0 -149
- local_deep_research-0.6.1/src/local_deep_research/web/app.py +0 -104
- local_deep_research-0.6.1/src/local_deep_research/web/database/migrate_to_ldr_db.py +0 -297
- local_deep_research-0.6.1/src/local_deep_research/web/database/migrations.py +0 -72
- local_deep_research-0.6.1/src/local_deep_research/web/database/uuid_migration.py +0 -265
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/LICENSE +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/candidates/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/constraints/__init__.py +0 -0
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/evidence/__init__.py +0 -0
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/evidence/evaluator.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/evidence/requirements.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/filters/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/findings/repository.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/knowledge/__init__.py +0 -0
- {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
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/questions/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/repositories/__init__.py +0 -0
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/strategies/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/advanced_search_system/tools/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/api/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/api/benchmark_functions.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/api/research_functions.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/benchmark_functions.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/cli/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/cli/benchmark_commands.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/cli.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/comparison/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/comparison/evaluator.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/base.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/browsecomp.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/custom_dataset_template.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/simpleqa.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets/utils.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/datasets.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/efficiency/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/efficiency/resource_monitor.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/efficiency/speed_profiler.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/evaluators/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/evaluators/base.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/evaluators/browsecomp.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/evaluators/composite.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/evaluators/simpleqa.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/graders.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics/calculation.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics/reporting.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics/visualization.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/metrics.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/models/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/models/benchmark_models.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/optimization/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/optimization/api.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/optimization/metrics.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/optimization/optuna_optimizer.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/runners.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/templates.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/ui/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/web_api/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/web_api/benchmark_routes.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/benchmarks/web_api/benchmark_service.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/citation_handler.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/citation_handlers/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/citation_handlers/base_citation_handler.py +0 -0
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/citation_handlers/precision_extraction_handler.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/citation_handlers/standard_citation_handler.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/config/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/config/llm_config.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/config/search_config.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/defaults/.env.template +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/defaults/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/defaults/default_settings.json +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/error_handling/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/error_handling/error_reporter.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/error_handling/report_generator.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/llm/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/llm/llm_registry.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/database.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/db_models.py +0 -0
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/migrate_call_stack_tracking.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/migrate_enhanced_tracking.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/migrate_research_ratings.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/models.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/pricing/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/pricing/cost_calculator.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/pricing/pricing_cache.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/pricing/pricing_fetcher.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/query_utils.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/search_tracker.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/metrics/token_counter.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/report_generator.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/search_system.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/enums.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/es_utils.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/llm_utils.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/search_cache.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/search_utilities.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/setup_utils.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/thread_context.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/utilities/url_utils.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/database/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/database/benchmark_schema.py +0 -0
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/database/models.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/models/settings.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/api_routes.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/benchmark_routes.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/globals.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/history_routes.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/metrics_routes.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/research_routes.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/routes/route_registry.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/services/research_service.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/services/resource_service.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/css/custom_dropdown.css +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/css/settings.css +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/css/styles.css +0 -0
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/detail.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/details.js +0 -0
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/history.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/logpanel.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/progress.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/research.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/results.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/components/settings.js +0 -0
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/config/urls.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/main.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/research_form.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/api.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/audio.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/formatting.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/keyboard.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/pdf.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/socket.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/js/services/ui.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/sounds/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/sounds/error.mp3 +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/static/sounds/success.mp3 +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/base.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/components/custom_dropdown.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/components/log_panel.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/components/mobile_nav.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/components/settings_form.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/components/sidebar.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/benchmark.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/benchmark_results.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/benchmark_simple.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/cost_analytics.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/details.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/history.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/metrics.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/progress.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/research.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/results.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/pages/star_reviews.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/templates/settings_dashboard.html +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/utils/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/utils/formatters.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/utils/templates.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/__init__.py +0 -0
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/engines/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web_search_engines/retriever_registry.py +0 -0
- {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
- {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
- {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
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/CI_INTEGRATION.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/TESTING_COMPARISON.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/TESTING_PROPOSAL.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/TEST_OPTIMIZATION.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/accessibility_tests/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/accessibility_tests/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/accessibility_tests/test_accessibility.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/accessibility_tests/test_accessibility_backend.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/test_api_basic.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/test_api_pytest.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/test_rest_api.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/api_tests/test_rest_api_simple.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/debug_url_utils.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/download_stuff_for_local.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/feature_tests/IMPLEMENTATION_GUIDE_241.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/feature_tests/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/feature_tests/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/feature_tests/test_custom_context.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/fix_tests/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/fix_tests/test_duplicate_links_fix.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/fix_tests/test_milestone_logging_fix.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/fixtures/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/fixtures/search_engine_mocks.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/health_check/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/health_check/run_quick_health_check.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/health_check/test_endpoints_health.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/health_check/test_endpoints_health.sh +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/package.json +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/test_route_registry.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/test_urls.test.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/infrastructure_tests/test_urls_js.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/mock_fixtures.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/mock_llm_config.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/mock_modules.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/package.json +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/conftest.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/test_api_integration.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/test_e2e_basic.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/test_factory_integration.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/test_retriever_registry.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/retriever_integration/test_search_engine_retriever.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/run_all_tests.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/search_engines/test_wikipedia_search.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/searxng/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/searxng/test_searxng.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/strategies/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/strategies/compare_strategies_visual.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/strategies/test_adaptive_strategy.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/strategies/test_iterative_reasoning.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/strategies/test_search_system_iterative.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_ci_config.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_citation_handler.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_google_pse.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/run_llm_tests.sh +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/test_api_llm_integration.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/test_llm_benchmarks.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/test_llm_edge_cases.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/test_llm_integration.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_llm/test_llm_registry.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_orm_changes.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_report_generator.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_research_strategy_orm.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_search_engines_enhanced.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_search_system.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_url_utils.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_url_utils_simple.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_utils.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/test_wikipedia_url_security.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/README.md +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/__init__.py +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/run_all_tests.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_charts.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_cost_analytics.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_metrics.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_metrics_browser.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_metrics_chart.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_metrics_charts.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_metrics_only.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_network_requests.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_pages_browser.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_rate_limiting_settings.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_research_results.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_settings_errors.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_settings_page.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_settings_save.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_simple_cost.js +0 -0
- {local_deep_research-0.6.1 → local_deep_research-0.6.4}/tests/ui_tests/test_star_reviews.js +0 -0
- {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.
|
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
|
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:
|
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
|
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
|
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:
|
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
|
120
|
+
#### Option 2c: Use Cookie Cutter to tailor a docker-compose to your needs:
|
106
121
|
|
107
122
|
##### Prerequisites
|
108
123
|
|
@@ -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"
|
{local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/setup_data_dir.py
RENAMED
@@ -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
|
-
|
23
|
+
logger.info(f"Created data directory at: {data_dir}")
|
23
24
|
else:
|
24
|
-
|
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=
|
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
|
-
|
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
|
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
|
-
|
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[
|
29
|
+
def _key_func(*args_: Any, **kwargs_: Any) -> Tuple[Hashable, ...]:
|
26
30
|
base_hash = keys.hashkey(*args_, **kwargs_)
|
27
|
-
|
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 .
|
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 =
|
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 =
|
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()
|
{local_deep_research-0.6.1 → local_deep_research-0.6.4}/src/local_deep_research/web/app_factory.py
RENAMED
@@ -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
|
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):
|