local-deep-research 0.1.26__py3-none-any.whl → 0.2.0__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/__init__.py +23 -22
- local_deep_research/__main__.py +16 -0
- local_deep_research/advanced_search_system/__init__.py +7 -0
- local_deep_research/advanced_search_system/filters/__init__.py +8 -0
- local_deep_research/advanced_search_system/filters/base_filter.py +38 -0
- local_deep_research/advanced_search_system/filters/cross_engine_filter.py +200 -0
- local_deep_research/advanced_search_system/findings/base_findings.py +81 -0
- local_deep_research/advanced_search_system/findings/repository.py +452 -0
- local_deep_research/advanced_search_system/knowledge/__init__.py +1 -0
- local_deep_research/advanced_search_system/knowledge/base_knowledge.py +151 -0
- local_deep_research/advanced_search_system/knowledge/standard_knowledge.py +159 -0
- local_deep_research/advanced_search_system/questions/__init__.py +1 -0
- local_deep_research/advanced_search_system/questions/base_question.py +64 -0
- local_deep_research/advanced_search_system/questions/decomposition_question.py +445 -0
- local_deep_research/advanced_search_system/questions/standard_question.py +119 -0
- local_deep_research/advanced_search_system/repositories/__init__.py +7 -0
- local_deep_research/advanced_search_system/strategies/__init__.py +1 -0
- local_deep_research/advanced_search_system/strategies/base_strategy.py +118 -0
- local_deep_research/advanced_search_system/strategies/iterdrag_strategy.py +450 -0
- local_deep_research/advanced_search_system/strategies/parallel_search_strategy.py +312 -0
- local_deep_research/advanced_search_system/strategies/rapid_search_strategy.py +270 -0
- local_deep_research/advanced_search_system/strategies/standard_strategy.py +300 -0
- local_deep_research/advanced_search_system/tools/__init__.py +1 -0
- local_deep_research/advanced_search_system/tools/base_tool.py +100 -0
- local_deep_research/advanced_search_system/tools/knowledge_tools/__init__.py +1 -0
- local_deep_research/advanced_search_system/tools/question_tools/__init__.py +1 -0
- local_deep_research/advanced_search_system/tools/search_tools/__init__.py +1 -0
- local_deep_research/api/__init__.py +5 -5
- local_deep_research/api/research_functions.py +96 -84
- local_deep_research/app.py +8 -0
- local_deep_research/citation_handler.py +25 -16
- local_deep_research/{config.py → config/config_files.py} +102 -110
- local_deep_research/config/llm_config.py +472 -0
- local_deep_research/config/search_config.py +77 -0
- local_deep_research/defaults/__init__.py +10 -5
- local_deep_research/defaults/main.toml +2 -2
- local_deep_research/defaults/search_engines.toml +60 -34
- local_deep_research/main.py +121 -19
- local_deep_research/migrate_db.py +147 -0
- local_deep_research/report_generator.py +72 -44
- local_deep_research/search_system.py +147 -283
- local_deep_research/setup_data_dir.py +35 -0
- local_deep_research/test_migration.py +178 -0
- local_deep_research/utilities/__init__.py +0 -0
- local_deep_research/utilities/db_utils.py +49 -0
- local_deep_research/{utilties → utilities}/enums.py +2 -2
- local_deep_research/{utilties → utilities}/llm_utils.py +63 -29
- local_deep_research/utilities/search_utilities.py +242 -0
- local_deep_research/{utilties → utilities}/setup_utils.py +4 -2
- local_deep_research/web/__init__.py +0 -1
- local_deep_research/web/app.py +86 -1709
- local_deep_research/web/app_factory.py +289 -0
- local_deep_research/web/database/README.md +70 -0
- local_deep_research/web/database/migrate_to_ldr_db.py +289 -0
- local_deep_research/web/database/migrations.py +447 -0
- local_deep_research/web/database/models.py +117 -0
- local_deep_research/web/database/schema_upgrade.py +107 -0
- local_deep_research/web/models/database.py +294 -0
- local_deep_research/web/models/settings.py +94 -0
- local_deep_research/web/routes/api_routes.py +559 -0
- local_deep_research/web/routes/history_routes.py +354 -0
- local_deep_research/web/routes/research_routes.py +715 -0
- local_deep_research/web/routes/settings_routes.py +1592 -0
- local_deep_research/web/services/research_service.py +947 -0
- local_deep_research/web/services/resource_service.py +149 -0
- local_deep_research/web/services/settings_manager.py +669 -0
- local_deep_research/web/services/settings_service.py +187 -0
- local_deep_research/web/services/socket_service.py +210 -0
- local_deep_research/web/static/css/custom_dropdown.css +277 -0
- local_deep_research/web/static/css/settings.css +1223 -0
- local_deep_research/web/static/css/styles.css +525 -48
- local_deep_research/web/static/js/components/custom_dropdown.js +428 -0
- local_deep_research/web/static/js/components/detail.js +348 -0
- local_deep_research/web/static/js/components/fallback/formatting.js +122 -0
- local_deep_research/web/static/js/components/fallback/ui.js +215 -0
- local_deep_research/web/static/js/components/history.js +487 -0
- local_deep_research/web/static/js/components/logpanel.js +949 -0
- local_deep_research/web/static/js/components/progress.js +1107 -0
- local_deep_research/web/static/js/components/research.js +1865 -0
- local_deep_research/web/static/js/components/results.js +766 -0
- local_deep_research/web/static/js/components/settings.js +3981 -0
- local_deep_research/web/static/js/components/settings_sync.js +106 -0
- local_deep_research/web/static/js/main.js +226 -0
- local_deep_research/web/static/js/services/api.js +253 -0
- local_deep_research/web/static/js/services/audio.js +31 -0
- local_deep_research/web/static/js/services/formatting.js +119 -0
- local_deep_research/web/static/js/services/pdf.js +622 -0
- local_deep_research/web/static/js/services/socket.js +882 -0
- local_deep_research/web/static/js/services/ui.js +546 -0
- local_deep_research/web/templates/base.html +72 -0
- local_deep_research/web/templates/components/custom_dropdown.html +47 -0
- local_deep_research/web/templates/components/log_panel.html +32 -0
- local_deep_research/web/templates/components/mobile_nav.html +22 -0
- local_deep_research/web/templates/components/settings_form.html +299 -0
- local_deep_research/web/templates/components/sidebar.html +21 -0
- local_deep_research/web/templates/pages/details.html +73 -0
- local_deep_research/web/templates/pages/history.html +51 -0
- local_deep_research/web/templates/pages/progress.html +57 -0
- local_deep_research/web/templates/pages/research.html +139 -0
- local_deep_research/web/templates/pages/results.html +59 -0
- local_deep_research/web/templates/settings_dashboard.html +78 -192
- local_deep_research/web/utils/__init__.py +0 -0
- local_deep_research/web/utils/formatters.py +76 -0
- local_deep_research/web_search_engines/engines/full_search.py +18 -16
- local_deep_research/web_search_engines/engines/meta_search_engine.py +182 -131
- local_deep_research/web_search_engines/engines/search_engine_arxiv.py +224 -139
- local_deep_research/web_search_engines/engines/search_engine_brave.py +88 -71
- local_deep_research/web_search_engines/engines/search_engine_ddg.py +48 -39
- local_deep_research/web_search_engines/engines/search_engine_github.py +415 -204
- local_deep_research/web_search_engines/engines/search_engine_google_pse.py +123 -90
- local_deep_research/web_search_engines/engines/search_engine_guardian.py +210 -157
- local_deep_research/web_search_engines/engines/search_engine_local.py +532 -369
- local_deep_research/web_search_engines/engines/search_engine_local_all.py +42 -36
- local_deep_research/web_search_engines/engines/search_engine_pubmed.py +358 -266
- local_deep_research/web_search_engines/engines/search_engine_searxng.py +211 -159
- local_deep_research/web_search_engines/engines/search_engine_semantic_scholar.py +213 -170
- local_deep_research/web_search_engines/engines/search_engine_serpapi.py +84 -68
- local_deep_research/web_search_engines/engines/search_engine_wayback.py +186 -154
- local_deep_research/web_search_engines/engines/search_engine_wikipedia.py +115 -77
- local_deep_research/web_search_engines/search_engine_base.py +174 -99
- local_deep_research/web_search_engines/search_engine_factory.py +192 -102
- local_deep_research/web_search_engines/search_engines_config.py +22 -15
- {local_deep_research-0.1.26.dist-info → local_deep_research-0.2.0.dist-info}/METADATA +177 -97
- local_deep_research-0.2.0.dist-info/RECORD +135 -0
- {local_deep_research-0.1.26.dist-info → local_deep_research-0.2.0.dist-info}/WHEEL +1 -2
- {local_deep_research-0.1.26.dist-info → local_deep_research-0.2.0.dist-info}/entry_points.txt +3 -0
- local_deep_research/defaults/llm_config.py +0 -338
- local_deep_research/utilties/search_utilities.py +0 -114
- local_deep_research/web/static/js/app.js +0 -3763
- local_deep_research/web/templates/api_keys_config.html +0 -82
- local_deep_research/web/templates/collections_config.html +0 -90
- local_deep_research/web/templates/index.html +0 -348
- local_deep_research/web/templates/llm_config.html +0 -120
- local_deep_research/web/templates/main_config.html +0 -89
- local_deep_research/web/templates/search_engines_config.html +0 -154
- local_deep_research/web/templates/settings.html +0 -519
- local_deep_research-0.1.26.dist-info/RECORD +0 -61
- local_deep_research-0.1.26.dist-info/top_level.txt +0 -1
- /local_deep_research/{utilties → config}/__init__.py +0 -0
- {local_deep_research-0.1.26.dist-info → local_deep_research-0.2.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,119 @@
|
|
1
|
+
/**
|
2
|
+
* Utility functions for formatting data
|
3
|
+
*/
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Format a status string to be more user-friendly
|
7
|
+
* @param {string} status - The status string
|
8
|
+
* @returns {string} The formatted status string
|
9
|
+
*/
|
10
|
+
function formatStatus(status) {
|
11
|
+
switch(status) {
|
12
|
+
case 'in_progress': return 'In Progress';
|
13
|
+
case 'completed': return 'Completed';
|
14
|
+
case 'failed': return 'Failed';
|
15
|
+
case 'suspended': return 'Suspended';
|
16
|
+
default: return status.charAt(0).toUpperCase() + status.slice(1);
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Format a research mode string to be more user-friendly
|
22
|
+
* @param {string} mode - The mode string
|
23
|
+
* @returns {string} The formatted mode string
|
24
|
+
*/
|
25
|
+
function formatMode(mode) {
|
26
|
+
switch(mode) {
|
27
|
+
case 'quick': return 'Quick Summary';
|
28
|
+
case 'detailed': return 'Detailed Report';
|
29
|
+
default: return mode.charAt(0).toUpperCase() + mode.slice(1);
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Format a date string with optional duration
|
35
|
+
* @param {string} date - The date string in ISO format
|
36
|
+
* @param {number|null} duration - Optional duration in seconds
|
37
|
+
* @returns {string} The formatted date string
|
38
|
+
*/
|
39
|
+
function formatDate(date, duration = null) {
|
40
|
+
if (!date) return 'Unknown';
|
41
|
+
|
42
|
+
try {
|
43
|
+
const dateObj = new Date(date);
|
44
|
+
const options = {
|
45
|
+
year: 'numeric',
|
46
|
+
month: 'short',
|
47
|
+
day: 'numeric',
|
48
|
+
hour: '2-digit',
|
49
|
+
minute: '2-digit'
|
50
|
+
};
|
51
|
+
|
52
|
+
let formattedDate = dateObj.toLocaleDateString('en-US', options);
|
53
|
+
|
54
|
+
if (duration) {
|
55
|
+
// Format the duration
|
56
|
+
const minutes = Math.floor(duration / 60);
|
57
|
+
const seconds = duration % 60;
|
58
|
+
|
59
|
+
if (minutes > 0) {
|
60
|
+
formattedDate += ` (${minutes}m ${seconds}s)`;
|
61
|
+
} else {
|
62
|
+
formattedDate += ` (${seconds}s)`;
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
return formattedDate;
|
67
|
+
} catch (e) {
|
68
|
+
console.error('Error formatting date:', e);
|
69
|
+
return date; // Return the original date if there's an error
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
/**
|
74
|
+
* Format a duration in seconds to a readable string
|
75
|
+
* @param {number} seconds - Duration in seconds
|
76
|
+
* @returns {string} Formatted duration string
|
77
|
+
*/
|
78
|
+
function formatDuration(seconds) {
|
79
|
+
if (!seconds || isNaN(seconds)) return 'Unknown';
|
80
|
+
|
81
|
+
const minutes = Math.floor(seconds / 60);
|
82
|
+
const remainingSeconds = Math.floor(seconds % 60);
|
83
|
+
|
84
|
+
if (minutes === 0) {
|
85
|
+
return `${remainingSeconds}s`;
|
86
|
+
} else {
|
87
|
+
return `${minutes}m ${remainingSeconds}s`;
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
/**
|
92
|
+
* Capitalize the first letter of a string
|
93
|
+
* @param {string} string - The string to capitalize
|
94
|
+
* @returns {string} The capitalized string
|
95
|
+
*/
|
96
|
+
function capitalizeFirstLetter(string) {
|
97
|
+
if (!string) return '';
|
98
|
+
return string.charAt(0).toUpperCase() + string.slice(1);
|
99
|
+
}
|
100
|
+
|
101
|
+
/**
|
102
|
+
* Format a number with thousands separators
|
103
|
+
* @param {number} num - The number to format
|
104
|
+
* @returns {string} Formatted number
|
105
|
+
*/
|
106
|
+
function formatNumber(num) {
|
107
|
+
if (num === null || num === undefined) return '0';
|
108
|
+
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
109
|
+
}
|
110
|
+
|
111
|
+
// Export the functions to make them available to other modules
|
112
|
+
window.formatting = {
|
113
|
+
formatStatus,
|
114
|
+
formatMode,
|
115
|
+
formatDate,
|
116
|
+
formatDuration,
|
117
|
+
formatNumber,
|
118
|
+
capitalizeFirstLetter
|
119
|
+
};
|