local-deep-research 0.3.2__py3-none-any.whl → 0.3.5__py3-none-any.whl
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/__version__.py +1 -1
- local_deep_research/advanced_search_system/filters/cross_engine_filter.py +1 -1
- local_deep_research/advanced_search_system/strategies/parallel_search_strategy.py +0 -6
- local_deep_research/advanced_search_system/strategies/source_based_strategy.py +0 -6
- local_deep_research/api/__init__.py +0 -4
- local_deep_research/config/llm_config.py +41 -21
- local_deep_research/defaults/default_settings.json +37 -14
- local_deep_research/web/database/migrations.py +4 -1
- local_deep_research/web/routes/research_routes.py +12 -12
- local_deep_research/web/routes/settings_routes.py +2 -2
- local_deep_research/web/services/settings_manager.py +28 -7
- local_deep_research/web/templates/components/sidebar.html +1 -1
- local_deep_research/web/utils/templates.py +24 -0
- {local_deep_research-0.3.2.dist-info → local_deep_research-0.3.5.dist-info}/METADATA +52 -19
- {local_deep_research-0.3.2.dist-info → local_deep_research-0.3.5.dist-info}/RECORD +18 -17
- {local_deep_research-0.3.2.dist-info → local_deep_research-0.3.5.dist-info}/WHEEL +0 -0
- {local_deep_research-0.3.2.dist-info → local_deep_research-0.3.5.dist-info}/entry_points.txt +0 -0
- {local_deep_research-0.3.2.dist-info → local_deep_research-0.3.5.dist-info}/licenses/LICENSE +0 -0
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.3.
|
1
|
+
__version__ = "0.3.5"
|
@@ -31,7 +31,7 @@ class CrossEngineFilter(BaseFilter):
|
|
31
31
|
super().__init__(model)
|
32
32
|
# Get max_results from database settings if not provided
|
33
33
|
if max_results is None:
|
34
|
-
max_results = get_db_setting("search.cross_engine_max_results", 100)
|
34
|
+
max_results = int(get_db_setting("search.cross_engine_max_results", 100))
|
35
35
|
self.max_results = max_results
|
36
36
|
self.default_reorder = default_reorder
|
37
37
|
self.default_reindex = default_reindex
|
@@ -60,12 +60,6 @@ class ParallelSearchStrategy(BaseSearchStrategy):
|
|
60
60
|
self.filter_reorder = filter_reorder
|
61
61
|
self.filter_reindex = filter_reindex
|
62
62
|
|
63
|
-
# Get max_filtered_results from database if not provided
|
64
|
-
if cross_engine_max_results is None:
|
65
|
-
cross_engine_max_results = get_db_setting(
|
66
|
-
"search.cross_engine_max_results", 100
|
67
|
-
)
|
68
|
-
|
69
63
|
# Initialize the cross-engine filter
|
70
64
|
self.cross_engine_filter = CrossEngineFilter(
|
71
65
|
model=self.model,
|
@@ -45,12 +45,6 @@ class SourceBasedSearchStrategy(BaseSearchStrategy):
|
|
45
45
|
self.filter_reorder = filter_reorder
|
46
46
|
self.filter_reindex = filter_reindex
|
47
47
|
|
48
|
-
# Get cross_engine_max_results from database if not provided
|
49
|
-
if cross_engine_max_results is None:
|
50
|
-
cross_engine_max_results = get_db_setting(
|
51
|
-
"search.cross_engine_max_results", 100
|
52
|
-
)
|
53
|
-
|
54
48
|
# Initialize the cross-engine filter
|
55
49
|
self.cross_engine_filter = CrossEngineFilter(
|
56
50
|
model=self.model,
|
@@ -6,8 +6,6 @@ API module for programmatic access to Local Deep Research functionality.
|
|
6
6
|
from .research_functions import (
|
7
7
|
analyze_documents,
|
8
8
|
generate_report,
|
9
|
-
get_available_collections,
|
10
|
-
get_available_search_engines,
|
11
9
|
quick_summary,
|
12
10
|
)
|
13
11
|
|
@@ -15,6 +13,4 @@ __all__ = [
|
|
15
13
|
"quick_summary",
|
16
14
|
"generate_report",
|
17
15
|
"analyze_documents",
|
18
|
-
"get_available_search_engines",
|
19
|
-
"get_available_collections",
|
20
16
|
]
|
@@ -216,31 +216,51 @@ def get_llm(model_name=None, temperature=None, provider=None, openai_endpoint_ur
|
|
216
216
|
)
|
217
217
|
return wrap_llm_without_think_tags(llm)
|
218
218
|
|
219
|
+
# Update the llamacpp section in get_llm function
|
219
220
|
elif provider == "llamacpp":
|
220
221
|
# Import LlamaCpp
|
221
222
|
from langchain_community.llms import LlamaCpp
|
222
223
|
|
223
|
-
# Get LlamaCpp
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
224
|
+
# Get LlamaCpp connection mode from settings
|
225
|
+
connection_mode = get_db_setting("llm.llamacpp_connection_mode", "local")
|
226
|
+
|
227
|
+
if connection_mode == "http":
|
228
|
+
# Use HTTP client mode
|
229
|
+
from langchain_community.llms.llamacpp_client import LlamaCppClient
|
230
|
+
|
231
|
+
server_url = get_db_setting(
|
232
|
+
"llm.llamacpp_server_url", "http://localhost:8000"
|
233
|
+
)
|
234
|
+
|
235
|
+
llm = LlamaCppClient(
|
236
|
+
server_url=server_url,
|
237
|
+
temperature=temperature,
|
238
|
+
max_tokens=get_db_setting("llm.max_tokens", 30000),
|
239
|
+
)
|
240
|
+
else:
|
241
|
+
# Use direct model loading (existing code)
|
242
|
+
# Get LlamaCpp model path from settings
|
243
|
+
model_path = get_db_setting("llm.llamacpp_model_path")
|
244
|
+
if not model_path:
|
245
|
+
logger.error("llamacpp_model_path not set in settings")
|
246
|
+
raise ValueError("llamacpp_model_path not set in settings")
|
247
|
+
|
248
|
+
# Get additional LlamaCpp parameters
|
249
|
+
n_gpu_layers = get_db_setting("llm.llamacpp_n_gpu_layers", 1)
|
250
|
+
n_batch = get_db_setting("llm.llamacpp_n_batch", 512)
|
251
|
+
f16_kv = get_db_setting("llm.llamacpp_f16_kv", True)
|
252
|
+
|
253
|
+
# Create LlamaCpp instance
|
254
|
+
llm = LlamaCpp(
|
255
|
+
model_path=model_path,
|
256
|
+
temperature=temperature,
|
257
|
+
max_tokens=get_db_setting("llm.max_tokens", 30000),
|
258
|
+
n_gpu_layers=n_gpu_layers,
|
259
|
+
n_batch=n_batch,
|
260
|
+
f16_kv=f16_kv,
|
261
|
+
verbose=True,
|
262
|
+
)
|
263
|
+
|
244
264
|
return wrap_llm_without_think_tags(llm)
|
245
265
|
|
246
266
|
else:
|
@@ -1,18 +1,4 @@
|
|
1
1
|
{
|
2
|
-
"app.version": {
|
3
|
-
"category": null,
|
4
|
-
"description": "Version of the app this database is associated with.",
|
5
|
-
"editable": false,
|
6
|
-
"max_value": null,
|
7
|
-
"min_value": null,
|
8
|
-
"name": "App Version",
|
9
|
-
"options": null,
|
10
|
-
"step": null,
|
11
|
-
"type": "APP",
|
12
|
-
"ui_element": "text",
|
13
|
-
"value": "0.3.2",
|
14
|
-
"visible": false
|
15
|
-
},
|
16
2
|
"app.debug": {
|
17
3
|
"category": "app_interface",
|
18
4
|
"description": "Enable debug mode for the web application",
|
@@ -3992,5 +3978,42 @@
|
|
3992
3978
|
"ui_element": "checkbox",
|
3993
3979
|
"value": false,
|
3994
3980
|
"visible": true
|
3981
|
+
},
|
3982
|
+
"llm.llamacpp_connection_mode": {
|
3983
|
+
"category": "llm_parameters",
|
3984
|
+
"description": "Connection mode for LlamaCpp: 'local' for direct model loading or 'http' for using a remote server",
|
3985
|
+
"editable": true,
|
3986
|
+
"max_value": null,
|
3987
|
+
"min_value": null,
|
3988
|
+
"name": "LlamaCpp Connection Mode",
|
3989
|
+
"options": [
|
3990
|
+
{
|
3991
|
+
"label": "Local Model",
|
3992
|
+
"value": "local"
|
3993
|
+
},
|
3994
|
+
{
|
3995
|
+
"label": "HTTP Server",
|
3996
|
+
"value": "http"
|
3997
|
+
}
|
3998
|
+
],
|
3999
|
+
"step": null,
|
4000
|
+
"type": "LLM",
|
4001
|
+
"ui_element": "select",
|
4002
|
+
"value": "local",
|
4003
|
+
"visible": true
|
4004
|
+
},
|
4005
|
+
"llm.llamacpp_server_url": {
|
4006
|
+
"category": "llm_parameters",
|
4007
|
+
"description": "URL of the LlamaCpp HTTP server (only used when connection mode is 'http')",
|
4008
|
+
"editable": true,
|
4009
|
+
"max_value": null,
|
4010
|
+
"min_value": null,
|
4011
|
+
"name": "LlamaCpp Server URL",
|
4012
|
+
"options": null,
|
4013
|
+
"step": null,
|
4014
|
+
"type": "LLM",
|
4015
|
+
"ui_element": "text",
|
4016
|
+
"value": "http://localhost:8000",
|
4017
|
+
"visible": true
|
3995
4018
|
}
|
3996
4019
|
}
|
@@ -13,7 +13,7 @@ def import_default_settings_file(db_session):
|
|
13
13
|
Imports all settings from the default settings file to the DB.
|
14
14
|
"""
|
15
15
|
settings_mgr = SettingsManager(db_session)
|
16
|
-
if settings_mgr.
|
16
|
+
if settings_mgr.db_version_matches_package():
|
17
17
|
# We probably shouldn't bother loading settings if the version didn't
|
18
18
|
# change.
|
19
19
|
return
|
@@ -26,6 +26,9 @@ def import_default_settings_file(db_session):
|
|
26
26
|
# old versions of the settings.
|
27
27
|
settings_mgr.load_from_defaults_file(overwrite=False, delete_extra=True)
|
28
28
|
logger.info("Successfully imported settings from files")
|
29
|
+
|
30
|
+
# Update the saved version.
|
31
|
+
settings_mgr.update_db_version()
|
29
32
|
except Exception as e:
|
30
33
|
logger.error("Error importing settings from files: %s", e)
|
31
34
|
|
@@ -10,7 +10,6 @@ from flask import (
|
|
10
10
|
current_app,
|
11
11
|
jsonify,
|
12
12
|
redirect,
|
13
|
-
render_template,
|
14
13
|
request,
|
15
14
|
send_from_directory,
|
16
15
|
url_for,
|
@@ -18,6 +17,7 @@ from flask import (
|
|
18
17
|
|
19
18
|
from ..models.database import add_log_to_db, calculate_duration, get_db_connection
|
20
19
|
from ..services.research_service import run_research_process, start_research_process
|
20
|
+
from ..utils.templates import render_template_with_defaults
|
21
21
|
|
22
22
|
# Initialize logger
|
23
23
|
logger = logging.getLogger(__name__)
|
@@ -48,7 +48,7 @@ def get_globals():
|
|
48
48
|
# Route for index page - redirection
|
49
49
|
@research_bp.route("/")
|
50
50
|
def index():
|
51
|
-
return
|
51
|
+
return render_template_with_defaults("pages/research.html")
|
52
52
|
|
53
53
|
|
54
54
|
# Add the missing static file serving route
|
@@ -70,62 +70,62 @@ def redirect_static(path):
|
|
70
70
|
@research_bp.route("/progress/<int:research_id>")
|
71
71
|
def progress_page(research_id):
|
72
72
|
"""Render the research progress page"""
|
73
|
-
return
|
73
|
+
return render_template_with_defaults("pages/progress.html")
|
74
74
|
|
75
75
|
|
76
76
|
@research_bp.route("/details/<int:research_id>")
|
77
77
|
def research_details_page(research_id):
|
78
78
|
"""Render the research details page"""
|
79
|
-
return
|
79
|
+
return render_template_with_defaults("pages/details.html")
|
80
80
|
|
81
81
|
|
82
82
|
@research_bp.route("/results/<int:research_id>")
|
83
83
|
def results_page(research_id):
|
84
84
|
"""Render the research results page"""
|
85
|
-
return
|
85
|
+
return render_template_with_defaults("pages/results.html")
|
86
86
|
|
87
87
|
|
88
88
|
@research_bp.route("/history")
|
89
89
|
def history_page():
|
90
90
|
"""Render the history page"""
|
91
|
-
return
|
91
|
+
return render_template_with_defaults("pages/history.html")
|
92
92
|
|
93
93
|
|
94
94
|
# Add missing settings routes
|
95
95
|
@research_bp.route("/settings", methods=["GET"])
|
96
96
|
def settings_page():
|
97
97
|
"""Render the settings page"""
|
98
|
-
return
|
98
|
+
return render_template_with_defaults("settings_dashboard.html")
|
99
99
|
|
100
100
|
|
101
101
|
@research_bp.route("/settings/main", methods=["GET"])
|
102
102
|
def main_config_page():
|
103
103
|
"""Render the main settings config page"""
|
104
|
-
return
|
104
|
+
return render_template_with_defaults("main_config.html")
|
105
105
|
|
106
106
|
|
107
107
|
@research_bp.route("/settings/collections", methods=["GET"])
|
108
108
|
def collections_config_page():
|
109
109
|
"""Render the collections config page"""
|
110
|
-
return
|
110
|
+
return render_template_with_defaults("collections_config.html")
|
111
111
|
|
112
112
|
|
113
113
|
@research_bp.route("/settings/api_keys", methods=["GET"])
|
114
114
|
def api_keys_config_page():
|
115
115
|
"""Render the API keys config page"""
|
116
|
-
return
|
116
|
+
return render_template_with_defaults("api_keys_config.html")
|
117
117
|
|
118
118
|
|
119
119
|
@research_bp.route("/settings/search_engines", methods=["GET"])
|
120
120
|
def search_engines_config_page():
|
121
121
|
"""Render the search engines config page"""
|
122
|
-
return
|
122
|
+
return render_template_with_defaults("search_engines_config.html")
|
123
123
|
|
124
124
|
|
125
125
|
@research_bp.route("/settings/llm", methods=["GET"])
|
126
126
|
def llm_config_page():
|
127
127
|
"""Render the LLM config page"""
|
128
|
-
return
|
128
|
+
return render_template_with_defaults("llm_config.html")
|
129
129
|
|
130
130
|
|
131
131
|
@research_bp.route("/api/start_research", methods=["POST"])
|
@@ -12,7 +12,6 @@ from flask import (
|
|
12
12
|
flash,
|
13
13
|
jsonify,
|
14
14
|
redirect,
|
15
|
-
render_template,
|
16
15
|
request,
|
17
16
|
url_for,
|
18
17
|
)
|
@@ -27,6 +26,7 @@ from ..services.settings_service import (
|
|
27
26
|
get_settings_manager,
|
28
27
|
set_setting,
|
29
28
|
)
|
29
|
+
from ..utils.templates import render_template_with_defaults
|
30
30
|
|
31
31
|
# Initialize logger
|
32
32
|
logger = logging.getLogger(__name__)
|
@@ -88,7 +88,7 @@ def validate_setting(setting: Setting, value: Any) -> Tuple[bool, Optional[str]]
|
|
88
88
|
@settings_bp.route("/", methods=["GET"])
|
89
89
|
def settings_page():
|
90
90
|
"""Main settings dashboard with links to specialized config pages"""
|
91
|
-
return
|
91
|
+
return render_template_with_defaults("settings_dashboard.html")
|
92
92
|
|
93
93
|
|
94
94
|
@settings_bp.route("/save_all_settings", methods=["POST"])
|
@@ -9,6 +9,7 @@ from sqlalchemy.exc import SQLAlchemyError
|
|
9
9
|
from sqlalchemy.orm import Session
|
10
10
|
|
11
11
|
from ... import defaults
|
12
|
+
from ...__version__ import __version__ as package_version
|
12
13
|
from ..database.models import Setting, SettingType
|
13
14
|
from ..models.settings import (
|
14
15
|
AppSetting,
|
@@ -331,21 +332,41 @@ class SettingsManager:
|
|
331
332
|
"""
|
332
333
|
self.import_settings(self.default_settings, commit=commit, **kwargs)
|
333
334
|
|
334
|
-
def
|
335
|
+
def db_version_matches_package(self) -> bool:
|
335
336
|
"""
|
336
337
|
Returns:
|
337
|
-
True if the version saved in the DB matches
|
338
|
-
settings file.
|
338
|
+
True if the version saved in the DB matches the package version.
|
339
339
|
|
340
340
|
"""
|
341
341
|
db_version = self.get_setting("app.version")
|
342
|
-
default_version = self.default_settings["app.version"]["value"]
|
343
342
|
logger.debug(
|
344
|
-
f"App version saved in DB is {db_version}, have
|
345
|
-
f"settings from version {
|
343
|
+
f"App version saved in DB is {db_version}, have package "
|
344
|
+
f"settings from version {package_version}."
|
346
345
|
)
|
347
346
|
|
348
|
-
return db_version ==
|
347
|
+
return db_version == package_version
|
348
|
+
|
349
|
+
def update_db_version(self) -> None:
|
350
|
+
"""
|
351
|
+
Updates the version saved in the DB based on the package version.
|
352
|
+
|
353
|
+
"""
|
354
|
+
logger.debug(f"Updating saved DB version to {package_version}.")
|
355
|
+
|
356
|
+
self.delete_setting("app.version", commit=False)
|
357
|
+
version = Setting(
|
358
|
+
key="app.version",
|
359
|
+
value=package_version,
|
360
|
+
description="Version of the app this database is associated with.",
|
361
|
+
editable=False,
|
362
|
+
name="App Version",
|
363
|
+
type=SettingType.APP,
|
364
|
+
ui_element="text",
|
365
|
+
visible=False,
|
366
|
+
)
|
367
|
+
|
368
|
+
self.db_session.add(version)
|
369
|
+
self.db_session.commit()
|
349
370
|
|
350
371
|
@classmethod
|
351
372
|
def get_instance(cls, db_session: Optional[Session] = None) -> "SettingsManager":
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"""
|
2
|
+
Utilities for rendering templates.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Any
|
6
|
+
|
7
|
+
from flask import render_template
|
8
|
+
|
9
|
+
from ...__version__ import __version__
|
10
|
+
|
11
|
+
|
12
|
+
def render_template_with_defaults(*args: Any, **kwargs: Any) -> str:
|
13
|
+
"""
|
14
|
+
Renders templates with some default values filled.
|
15
|
+
|
16
|
+
Args:
|
17
|
+
*args: Will be passed to the normal `render_template`.
|
18
|
+
**kwargs: Will be passed to the normal `render_template`.
|
19
|
+
|
20
|
+
Returns:
|
21
|
+
The rendered template.
|
22
|
+
|
23
|
+
"""
|
24
|
+
return render_template(*args, version=__version__, **kwargs)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: local-deep-research
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.5
|
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
|
@@ -99,41 +99,74 @@ Local Deep Research is a powerful AI research assistant that:
|
|
99
99
|
|
100
100
|
Local Deep Research combines the power of large language models with intelligent search strategies to provide well-researched, properly cited answers to complex questions. It can process queries in just seconds with the Quick Summary option, or create detailed reports with proper section organization for more comprehensive analysis.
|
101
101
|
|
102
|
-
## ⚡ Quick Start
|
102
|
+
## ⚡ Quick Start
|
103
|
+
|
104
|
+
### Option 1: Docker (Recommended)
|
105
|
+
|
106
|
+
```bash
|
107
|
+
# Step 1: Pull and run SearXNG for optimal search results
|
108
|
+
docker pull searxng/searxng
|
109
|
+
docker run -d -p 8080:8080 --name searxng searxng/searxng
|
110
|
+
|
111
|
+
# Step 2: Pull and run Local Deep Research
|
112
|
+
docker pull localdeepresearch/local-deep-research
|
113
|
+
docker run -d -p 5000:5000 --name local-deep-research localdeepresearch/local-deep-research
|
114
|
+
|
115
|
+
# Optional 3a: For connecting to already installed local Ollama (https://ollama.com/download) or other local services
|
116
|
+
# docker run -d -p 5000:5000 --network host --name local-deep-research localdeepresearch/local-deep-research
|
117
|
+
|
118
|
+
# Optional 3b (recommended): Pull and run Ollama for local LLM capabilities
|
119
|
+
# docker pull ollama/ollama
|
120
|
+
# docker run -d -p 11434:11434 --name ollama ollama/ollama
|
121
|
+
# docker exec -it ollama ollama pull gemma3:12b
|
122
|
+
|
123
|
+
# Start containers - Required after each reboot (can be automated with this flag --restart unless-stopped in run)
|
124
|
+
docker start searxng
|
125
|
+
docker start local-deep-research
|
126
|
+
# docker start ollama
|
127
|
+
```
|
128
|
+
|
129
|
+
Then visit `http://127.0.0.1:5000` to start researching!
|
130
|
+
|
131
|
+
> **Note**: If you need to connect to local services (like Ollama), add `--network host` to the command.
|
132
|
+
>
|
133
|
+
> **Don't have Docker? It's installed in a few clicks: [Install Docker here](https://www.docker.com/get-started/)**
|
134
|
+
|
135
|
+
### Option 2: Python Package (mostly for programmatic access)
|
103
136
|
|
104
137
|
```bash
|
105
|
-
#
|
138
|
+
# Install the package
|
106
139
|
pip install local-deep-research
|
107
140
|
|
108
|
-
#
|
141
|
+
# Setup SearXNG for best results
|
109
142
|
docker pull searxng/searxng
|
110
143
|
docker run -d -p 8080:8080 --name searxng searxng/searxng
|
111
|
-
docker start searxng (required after every reboot)
|
112
144
|
|
113
|
-
#
|
145
|
+
# Install Ollama and pull a model
|
114
146
|
# Download from https://ollama.ai and run:
|
115
147
|
ollama pull gemma3:12b
|
116
148
|
|
117
|
-
#
|
149
|
+
# Start the web interface
|
118
150
|
python -m local_deep_research.web.app
|
119
151
|
```
|
120
152
|
|
121
|
-
|
122
|
-
|
123
|
-
### Alternative Installation Options
|
153
|
+
For programmatic use in your Python code:
|
124
154
|
|
125
|
-
|
155
|
+
```python
|
156
|
+
from local_deep_research import quick_summary
|
126
157
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
158
|
+
results = quick_summary(
|
159
|
+
query="advances in fusion energy",
|
160
|
+
search_tool="auto",
|
161
|
+
iterations=1
|
162
|
+
)
|
163
|
+
print(results["summary"])
|
131
164
|
```
|
132
165
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
166
|
+
### Additional Installation Options
|
167
|
+
|
168
|
+
**Windows**: Docker is the easiest option for Windows users. If preferred, a [Windows Installer](https://github.com/LearningCircuit/local-deep-research/releases/download/v0.1.0/LocalDeepResearch_Setup.exe) is also available.
|
169
|
+
|
137
170
|
|
138
171
|
## 🔍 Research Capabilities
|
139
172
|
|
@@ -1,14 +1,14 @@
|
|
1
|
-
local_deep_research-0.3.
|
2
|
-
local_deep_research-0.3.
|
3
|
-
local_deep_research-0.3.
|
4
|
-
local_deep_research-0.3.
|
1
|
+
local_deep_research-0.3.5.dist-info/METADATA,sha256=InfWqPp3XGvKc0cwx_S0TSm_MMqvPK3SPcprjoWTXTk,16645
|
2
|
+
local_deep_research-0.3.5.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
|
3
|
+
local_deep_research-0.3.5.dist-info/entry_points.txt,sha256=GcXS501Rjh-P80S8db7hnrQ23mS_Jg27PwpVQVO77as,113
|
4
|
+
local_deep_research-0.3.5.dist-info/licenses/LICENSE,sha256=Qg2CaTdu6SWnSqk1_JtgBPp_Da-LdqJDhT1Vt1MUc5s,1072
|
5
5
|
local_deep_research/__init__.py,sha256=9wV3oonZMEHsE_JhyZU9P0hW2Uwv47zotGlbAB_gQiA,885
|
6
6
|
local_deep_research/__main__.py,sha256=LIxK5iS6aLAKMFBDpUS3V-jDcxchqi3eSUsI2jAZUXk,371
|
7
|
-
local_deep_research/__version__.py,sha256=
|
7
|
+
local_deep_research/__version__.py,sha256=ThnCuF3X7rsQSd5PAea_jfYA70ZmhLvkFcLBxBPwZnY,22
|
8
8
|
local_deep_research/advanced_search_system/__init__.py,sha256=sGusMj4eFIrhXR6QbOM16UDKB6aI-iS4IFivKWpMlh0,234
|
9
9
|
local_deep_research/advanced_search_system/filters/__init__.py,sha256=2dXrV4skcVHI2Lb3BSL2Ajq0rnLeSw7kc1MbIynMxa4,190
|
10
10
|
local_deep_research/advanced_search_system/filters/base_filter.py,sha256=dFNQ7U2dj4bf3voT73YhcG-w9eW-BTlc4F9kstFcETY,969
|
11
|
-
local_deep_research/advanced_search_system/filters/cross_engine_filter.py,sha256=
|
11
|
+
local_deep_research/advanced_search_system/filters/cross_engine_filter.py,sha256=HzhlIrtQlMEPMIibW2ySzMB8aXV2hQBNfCWRo_AJJpM,8009
|
12
12
|
local_deep_research/advanced_search_system/findings/base_findings.py,sha256=tTVEQZeGuTdJ1tDF8QAkiS5pWest8_lmbq3Oq5EPGeY,2052
|
13
13
|
local_deep_research/advanced_search_system/findings/repository.py,sha256=nIdF114IaSNLjnjetbXE8s8C69djik3lywOiFvFI4Lk,19804
|
14
14
|
local_deep_research/advanced_search_system/knowledge/__init__.py,sha256=9zjQkdmomZCgZZP45fqw0E8UVpBjkzkyW7RpY0f8gY8,34
|
@@ -22,25 +22,25 @@ local_deep_research/advanced_search_system/repositories/__init__.py,sha256=cCjAR
|
|
22
22
|
local_deep_research/advanced_search_system/strategies/__init__.py,sha256=upbslnB6Ns8RJ0-b1bH74-f5gZbo7evpx1dRrKEkzHA,35
|
23
23
|
local_deep_research/advanced_search_system/strategies/base_strategy.py,sha256=NVowhf36DLeES302v0U6cWDCmQvNuV0cVj4glSculfQ,3975
|
24
24
|
local_deep_research/advanced_search_system/strategies/iterdrag_strategy.py,sha256=dKTgwXaXFxBqzUw_S434LdEvV4HL2CrR9K9KBaMYxOg,18473
|
25
|
-
local_deep_research/advanced_search_system/strategies/parallel_search_strategy.py,sha256=
|
25
|
+
local_deep_research/advanced_search_system/strategies/parallel_search_strategy.py,sha256=kbmzG3klXHgC9HfT6NTc9ipiHGzt1dnRPIfYqr23jLA,19150
|
26
26
|
local_deep_research/advanced_search_system/strategies/rapid_search_strategy.py,sha256=giuBMkkxUkdI4J9711bjM3ReMLTFfyt6irT4v-3ef_Q,10426
|
27
|
-
local_deep_research/advanced_search_system/strategies/source_based_strategy.py,sha256=
|
27
|
+
local_deep_research/advanced_search_system/strategies/source_based_strategy.py,sha256=hMX91leNgCc2GPnLr9pQnXH8_6pfFv4BYqhrPBh2FTQ,17049
|
28
28
|
local_deep_research/advanced_search_system/strategies/standard_strategy.py,sha256=Yqe5N3bUCDXjeSlP8__AORPYyHVY5sEb82zvpTU34r8,12774
|
29
29
|
local_deep_research/advanced_search_system/tools/__init__.py,sha256=73jLuCKigwc9lJQ0uD3_F16dgCg4pL-F2cwC6tk9-oc,30
|
30
30
|
local_deep_research/advanced_search_system/tools/base_tool.py,sha256=jEs4eroCvo0dHP_uF-5kLiQP7OfkD1YzNAD650a8Ktk,2865
|
31
31
|
local_deep_research/advanced_search_system/tools/knowledge_tools/__init__.py,sha256=73jLuCKigwc9lJQ0uD3_F16dgCg4pL-F2cwC6tk9-oc,30
|
32
32
|
local_deep_research/advanced_search_system/tools/question_tools/__init__.py,sha256=73jLuCKigwc9lJQ0uD3_F16dgCg4pL-F2cwC6tk9-oc,30
|
33
33
|
local_deep_research/advanced_search_system/tools/search_tools/__init__.py,sha256=73jLuCKigwc9lJQ0uD3_F16dgCg4pL-F2cwC6tk9-oc,30
|
34
|
-
local_deep_research/api/__init__.py,sha256
|
34
|
+
local_deep_research/api/__init__.py,sha256=KS5QcF5MzbUDPnXEzOAztcUw-HUQs4EVCH4k0YDMgCM,307
|
35
35
|
local_deep_research/api/research_functions.py,sha256=SItLEuib94AXrhMsgmYDtykGrVmBPDKYHzzeDPhH688,9563
|
36
36
|
local_deep_research/app.py,sha256=U_92UX0dpVAQoaXciVNy_By_AyDEWGlXSeTwFpohALQ,155
|
37
37
|
local_deep_research/citation_handler.py,sha256=MZVd6xl7g3xrWauFBPuVIC36z8onc-zQb8xI4dQXxsU,4307
|
38
38
|
local_deep_research/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
39
|
-
local_deep_research/config/llm_config.py,sha256=
|
39
|
+
local_deep_research/config/llm_config.py,sha256=bYxhwyjkdBlap832aWvWgHWjjPq45Oh2NtDOLJFf4go,15560
|
40
40
|
local_deep_research/config/search_config.py,sha256=ruryPSS4Wy9-xi_02c-98KLKaELeLnZ10pnCpc0-ogg,2171
|
41
41
|
local_deep_research/defaults/.env.template,sha256=_eVCy4d_XwpGXy8n50CG3wH9xx2oqJCFKS7IbqgInDk,491
|
42
42
|
local_deep_research/defaults/__init__.py,sha256=C_0t0uZmtrVB4rM9NM9Wx8PJU5kFcT-qOHvws5W2iOg,1352
|
43
|
-
local_deep_research/defaults/default_settings.json,sha256=
|
43
|
+
local_deep_research/defaults/default_settings.json,sha256=uN3LHCuGIN3dDlAYwEv4t_onYsw0U2TDjxQrN4_z2FM,120530
|
44
44
|
local_deep_research/main.py,sha256=umGmaQmW7bpx27wUAgSNjNr4oSHV6mDX5hoyfb22HEY,7033
|
45
45
|
local_deep_research/migrate_db.py,sha256=S1h6Bv0OJdRW4BaH7MIMrUXBRV_yqgH2T6LVOZKTQjI,4634
|
46
46
|
local_deep_research/report_generator.py,sha256=-G3KDEbsuU3PdxDfuo5v28DIX7RE1yJCCBU2KgRbNzI,9084
|
@@ -58,18 +58,18 @@ local_deep_research/web/app.py,sha256=tl3PAf41NBYYGq0oeIKAZw_hVSB8JmjyF8jzvYPeAU
|
|
58
58
|
local_deep_research/web/app_factory.py,sha256=rk5QCwpxrub6ptKsvjSDTNtq8d2RWbKo2LZLvL__fPo,8107
|
59
59
|
local_deep_research/web/database/README.md,sha256=eEDLqLIfOBRvc0TFh3J1HrtFbZceYmVgpjS3-oyZ5nI,2861
|
60
60
|
local_deep_research/web/database/migrate_to_ldr_db.py,sha256=-ltKuhgosPhybDsJ13BuvvHEDJTN4Jx6SiO6XvW0SKA,9823
|
61
|
-
local_deep_research/web/database/migrations.py,sha256=
|
61
|
+
local_deep_research/web/database/migrations.py,sha256=2z8-5P8gJ8vIEzLTbswNx0Ui7ZNveSFoad6JesOKhJk,1695
|
62
62
|
local_deep_research/web/database/models.py,sha256=MIxYWIQIovkrR65rFMxlDXn2iZXf5SIePIE_-vSmLXg,3489
|
63
63
|
local_deep_research/web/database/schema_upgrade.py,sha256=u3tx_tlsuzJw-NhvhKvQG6dqzwUckQkic0D3taZAt-k,2924
|
64
64
|
local_deep_research/web/models/database.py,sha256=NV4h0RU0ta408SkI_ZmquCplMTNH1Q4zxYJ4SHwmiGY,9489
|
65
65
|
local_deep_research/web/models/settings.py,sha256=rXBI9vY5k3ndR8dPd3fZJy-6HwYltQihhSBRq-sZutw,2314
|
66
66
|
local_deep_research/web/routes/api_routes.py,sha256=S0UdCmfm0v1GEM4UiSbI0PE3xUOxiGaYFR2ZOE0256U,19075
|
67
67
|
local_deep_research/web/routes/history_routes.py,sha256=6a_8nX349viuvi1zP5S7BaPPpAh133eTi1NVWO545A8,12622
|
68
|
-
local_deep_research/web/routes/research_routes.py,sha256=
|
69
|
-
local_deep_research/web/routes/settings_routes.py,sha256=
|
68
|
+
local_deep_research/web/routes/research_routes.py,sha256=zSU21oAkZnADnuhJniShd8US8hpPDiYqQxUhalJwQeU,23685
|
69
|
+
local_deep_research/web/routes/settings_routes.py,sha256=fkYLwDgcHfiHVml3ux6qCc5qFMjfnKfPcwisqhg995s,49280
|
70
70
|
local_deep_research/web/services/research_service.py,sha256=vs_pWuv56rG2atgSamlDK4MdxpWTxbBVf3rHztr6y2A,39488
|
71
71
|
local_deep_research/web/services/resource_service.py,sha256=yKgOC6GEOmHqRoGzwf52e19UaGCCS1DbDbOIXgWGvGc,4378
|
72
|
-
local_deep_research/web/services/settings_manager.py,sha256=
|
72
|
+
local_deep_research/web/services/settings_manager.py,sha256=W3i0ZW8Ds4PhjlzPUiHoBwhzEdlnVGhnCKexjSnvlyc,17013
|
73
73
|
local_deep_research/web/services/settings_service.py,sha256=SgmjhMvGZjJE63hKKaqY7kPGphnUyXcQG8NFN5rTizs,3550
|
74
74
|
local_deep_research/web/services/socket_service.py,sha256=jZGXk6kesBOf4bAdLiT3V4Ofod12pGKTsvxr3ml8ydY,7272
|
75
75
|
local_deep_research/web/static/css/custom_dropdown.css,sha256=-pCx6oazWVgwqFAGq_eZ8OrTKMVQlgkKYCM6w-bACLs,7949
|
@@ -102,7 +102,7 @@ local_deep_research/web/templates/components/custom_dropdown.html,sha256=ELoC9Pw
|
|
102
102
|
local_deep_research/web/templates/components/log_panel.html,sha256=hVyLTJMuU7iURSOKUZnB0Z8a7lcIUuT5m6mUVruYVuQ,1462
|
103
103
|
local_deep_research/web/templates/components/mobile_nav.html,sha256=rVOLbEp6lGrX8F8q24vTLTSdcP6xxi4wqBrBBrfb9Ek,865
|
104
104
|
local_deep_research/web/templates/components/settings_form.html,sha256=Z1eEQ_SFlioH24zrIDpjMQ-ajEJC2lLN4Tu8Y8uASLY,15987
|
105
|
-
local_deep_research/web/templates/components/sidebar.html,sha256=
|
105
|
+
local_deep_research/web/templates/components/sidebar.html,sha256=xWklsiZ5LCG6Ev68lTVjpeeqKF4LS9ssMx5ByJehTpg,1021
|
106
106
|
local_deep_research/web/templates/pages/details.html,sha256=OYvSNfi8uFD1wNeHxWza1-xWMrT9c4V7U0ZEZnISlCU,2768
|
107
107
|
local_deep_research/web/templates/pages/history.html,sha256=ZS3QufL2beUVB9P_LvqIixvYfCT-EjtokQa9LRp5sUs,1982
|
108
108
|
local_deep_research/web/templates/pages/progress.html,sha256=tq9XRRZBm2KnnBxPlAa7cWWDAP-pqJeHGgtlul7UVSs,2550
|
@@ -111,6 +111,7 @@ local_deep_research/web/templates/pages/results.html,sha256=XKZVWo1CfbyjxMOntFO7
|
|
111
111
|
local_deep_research/web/templates/settings_dashboard.html,sha256=A1fBe1D29v8G3ys94_rIiBP6Ky-rtYL6TRbDluoBMPI,4342
|
112
112
|
local_deep_research/web/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
113
113
|
local_deep_research/web/utils/formatters.py,sha256=Gj_a0oFveNXHtvkiFe1rwlEtzYerMd0TtPO3Yh2e2bI,3155
|
114
|
+
local_deep_research/web/utils/templates.py,sha256=scBPbjUJqaFltFX37ZLsdcgPycPY7kMSew5mZWCG1H0,535
|
114
115
|
local_deep_research/web_search_engines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
115
116
|
local_deep_research/web_search_engines/engines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
116
117
|
local_deep_research/web_search_engines/engines/full_search.py,sha256=6Pi_wj9oAtDHAyLsIbWGBeS8QBv6yCJEJ87LN68Cp-k,4703
|
@@ -132,4 +133,4 @@ local_deep_research/web_search_engines/engines/search_engine_wikipedia.py,sha256
|
|
132
133
|
local_deep_research/web_search_engines/search_engine_base.py,sha256=PLU_sAWhWKTOQWcv32GINuhLdIwB0sEQy-pp9oG9Ggo,9835
|
133
134
|
local_deep_research/web_search_engines/search_engine_factory.py,sha256=DghAkQvLKRJYl5xb9AUjUv7ydAQ4rPi-TvzrmqdyGxE,10890
|
134
135
|
local_deep_research/web_search_engines/search_engines_config.py,sha256=rgKo3UQhXov_4QxPcdzMqnAfJc5a6tGXtfnjIzKeHdQ,4584
|
135
|
-
local_deep_research-0.3.
|
136
|
+
local_deep_research-0.3.5.dist-info/RECORD,,
|
File without changes
|
{local_deep_research-0.3.2.dist-info → local_deep_research-0.3.5.dist-info}/entry_points.txt
RENAMED
File without changes
|
{local_deep_research-0.3.2.dist-info → local_deep_research-0.3.5.dist-info}/licenses/LICENSE
RENAMED
File without changes
|