local-deep-research 0.1.25__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.
Files changed (141) hide show
  1. local_deep_research/__init__.py +23 -22
  2. local_deep_research/__main__.py +16 -0
  3. local_deep_research/advanced_search_system/__init__.py +7 -0
  4. local_deep_research/advanced_search_system/filters/__init__.py +8 -0
  5. local_deep_research/advanced_search_system/filters/base_filter.py +38 -0
  6. local_deep_research/advanced_search_system/filters/cross_engine_filter.py +200 -0
  7. local_deep_research/advanced_search_system/findings/base_findings.py +81 -0
  8. local_deep_research/advanced_search_system/findings/repository.py +452 -0
  9. local_deep_research/advanced_search_system/knowledge/__init__.py +1 -0
  10. local_deep_research/advanced_search_system/knowledge/base_knowledge.py +151 -0
  11. local_deep_research/advanced_search_system/knowledge/standard_knowledge.py +159 -0
  12. local_deep_research/advanced_search_system/questions/__init__.py +1 -0
  13. local_deep_research/advanced_search_system/questions/base_question.py +64 -0
  14. local_deep_research/advanced_search_system/questions/decomposition_question.py +445 -0
  15. local_deep_research/advanced_search_system/questions/standard_question.py +119 -0
  16. local_deep_research/advanced_search_system/repositories/__init__.py +7 -0
  17. local_deep_research/advanced_search_system/strategies/__init__.py +1 -0
  18. local_deep_research/advanced_search_system/strategies/base_strategy.py +118 -0
  19. local_deep_research/advanced_search_system/strategies/iterdrag_strategy.py +450 -0
  20. local_deep_research/advanced_search_system/strategies/parallel_search_strategy.py +312 -0
  21. local_deep_research/advanced_search_system/strategies/rapid_search_strategy.py +270 -0
  22. local_deep_research/advanced_search_system/strategies/standard_strategy.py +300 -0
  23. local_deep_research/advanced_search_system/tools/__init__.py +1 -0
  24. local_deep_research/advanced_search_system/tools/base_tool.py +100 -0
  25. local_deep_research/advanced_search_system/tools/knowledge_tools/__init__.py +1 -0
  26. local_deep_research/advanced_search_system/tools/question_tools/__init__.py +1 -0
  27. local_deep_research/advanced_search_system/tools/search_tools/__init__.py +1 -0
  28. local_deep_research/api/__init__.py +5 -5
  29. local_deep_research/api/research_functions.py +96 -84
  30. local_deep_research/app.py +8 -0
  31. local_deep_research/citation_handler.py +25 -16
  32. local_deep_research/{config.py → config/config_files.py} +113 -120
  33. local_deep_research/config/llm_config.py +472 -0
  34. local_deep_research/config/search_config.py +77 -0
  35. local_deep_research/defaults/.env.template +10 -7
  36. local_deep_research/defaults/__init__.py +10 -5
  37. local_deep_research/defaults/main.toml +2 -2
  38. local_deep_research/defaults/search_engines.toml +60 -34
  39. local_deep_research/main.py +121 -19
  40. local_deep_research/migrate_db.py +147 -0
  41. local_deep_research/report_generator.py +72 -44
  42. local_deep_research/search_system.py +147 -283
  43. local_deep_research/setup_data_dir.py +35 -0
  44. local_deep_research/test_migration.py +178 -0
  45. local_deep_research/utilities/__init__.py +0 -0
  46. local_deep_research/utilities/db_utils.py +49 -0
  47. local_deep_research/{utilties → utilities}/enums.py +2 -2
  48. local_deep_research/{utilties → utilities}/llm_utils.py +63 -29
  49. local_deep_research/utilities/search_utilities.py +242 -0
  50. local_deep_research/{utilties → utilities}/setup_utils.py +4 -2
  51. local_deep_research/web/__init__.py +0 -1
  52. local_deep_research/web/app.py +86 -1709
  53. local_deep_research/web/app_factory.py +289 -0
  54. local_deep_research/web/database/README.md +70 -0
  55. local_deep_research/web/database/migrate_to_ldr_db.py +289 -0
  56. local_deep_research/web/database/migrations.py +447 -0
  57. local_deep_research/web/database/models.py +117 -0
  58. local_deep_research/web/database/schema_upgrade.py +107 -0
  59. local_deep_research/web/models/database.py +294 -0
  60. local_deep_research/web/models/settings.py +94 -0
  61. local_deep_research/web/routes/api_routes.py +559 -0
  62. local_deep_research/web/routes/history_routes.py +354 -0
  63. local_deep_research/web/routes/research_routes.py +715 -0
  64. local_deep_research/web/routes/settings_routes.py +1592 -0
  65. local_deep_research/web/services/research_service.py +947 -0
  66. local_deep_research/web/services/resource_service.py +149 -0
  67. local_deep_research/web/services/settings_manager.py +669 -0
  68. local_deep_research/web/services/settings_service.py +187 -0
  69. local_deep_research/web/services/socket_service.py +210 -0
  70. local_deep_research/web/static/css/custom_dropdown.css +277 -0
  71. local_deep_research/web/static/css/settings.css +1223 -0
  72. local_deep_research/web/static/css/styles.css +525 -48
  73. local_deep_research/web/static/js/components/custom_dropdown.js +428 -0
  74. local_deep_research/web/static/js/components/detail.js +348 -0
  75. local_deep_research/web/static/js/components/fallback/formatting.js +122 -0
  76. local_deep_research/web/static/js/components/fallback/ui.js +215 -0
  77. local_deep_research/web/static/js/components/history.js +487 -0
  78. local_deep_research/web/static/js/components/logpanel.js +949 -0
  79. local_deep_research/web/static/js/components/progress.js +1107 -0
  80. local_deep_research/web/static/js/components/research.js +1865 -0
  81. local_deep_research/web/static/js/components/results.js +766 -0
  82. local_deep_research/web/static/js/components/settings.js +3981 -0
  83. local_deep_research/web/static/js/components/settings_sync.js +106 -0
  84. local_deep_research/web/static/js/main.js +226 -0
  85. local_deep_research/web/static/js/services/api.js +253 -0
  86. local_deep_research/web/static/js/services/audio.js +31 -0
  87. local_deep_research/web/static/js/services/formatting.js +119 -0
  88. local_deep_research/web/static/js/services/pdf.js +622 -0
  89. local_deep_research/web/static/js/services/socket.js +882 -0
  90. local_deep_research/web/static/js/services/ui.js +546 -0
  91. local_deep_research/web/templates/base.html +72 -0
  92. local_deep_research/web/templates/components/custom_dropdown.html +47 -0
  93. local_deep_research/web/templates/components/log_panel.html +32 -0
  94. local_deep_research/web/templates/components/mobile_nav.html +22 -0
  95. local_deep_research/web/templates/components/settings_form.html +299 -0
  96. local_deep_research/web/templates/components/sidebar.html +21 -0
  97. local_deep_research/web/templates/pages/details.html +73 -0
  98. local_deep_research/web/templates/pages/history.html +51 -0
  99. local_deep_research/web/templates/pages/progress.html +57 -0
  100. local_deep_research/web/templates/pages/research.html +139 -0
  101. local_deep_research/web/templates/pages/results.html +59 -0
  102. local_deep_research/web/templates/settings_dashboard.html +78 -192
  103. local_deep_research/web/utils/__init__.py +0 -0
  104. local_deep_research/web/utils/formatters.py +76 -0
  105. local_deep_research/web_search_engines/engines/full_search.py +18 -16
  106. local_deep_research/web_search_engines/engines/meta_search_engine.py +182 -131
  107. local_deep_research/web_search_engines/engines/search_engine_arxiv.py +224 -139
  108. local_deep_research/web_search_engines/engines/search_engine_brave.py +88 -71
  109. local_deep_research/web_search_engines/engines/search_engine_ddg.py +48 -39
  110. local_deep_research/web_search_engines/engines/search_engine_github.py +415 -204
  111. local_deep_research/web_search_engines/engines/search_engine_google_pse.py +123 -90
  112. local_deep_research/web_search_engines/engines/search_engine_guardian.py +210 -157
  113. local_deep_research/web_search_engines/engines/search_engine_local.py +532 -369
  114. local_deep_research/web_search_engines/engines/search_engine_local_all.py +42 -36
  115. local_deep_research/web_search_engines/engines/search_engine_pubmed.py +358 -266
  116. local_deep_research/web_search_engines/engines/search_engine_searxng.py +211 -159
  117. local_deep_research/web_search_engines/engines/search_engine_semantic_scholar.py +213 -170
  118. local_deep_research/web_search_engines/engines/search_engine_serpapi.py +84 -68
  119. local_deep_research/web_search_engines/engines/search_engine_wayback.py +186 -154
  120. local_deep_research/web_search_engines/engines/search_engine_wikipedia.py +115 -77
  121. local_deep_research/web_search_engines/search_engine_base.py +174 -99
  122. local_deep_research/web_search_engines/search_engine_factory.py +192 -102
  123. local_deep_research/web_search_engines/search_engines_config.py +22 -15
  124. {local_deep_research-0.1.25.dist-info → local_deep_research-0.2.0.dist-info}/METADATA +175 -101
  125. local_deep_research-0.2.0.dist-info/RECORD +135 -0
  126. {local_deep_research-0.1.25.dist-info → local_deep_research-0.2.0.dist-info}/WHEEL +1 -2
  127. {local_deep_research-0.1.25.dist-info → local_deep_research-0.2.0.dist-info}/entry_points.txt +3 -0
  128. local_deep_research/defaults/llm_config.py +0 -338
  129. local_deep_research/utilties/search_utilities.py +0 -114
  130. local_deep_research/web/static/js/app.js +0 -3763
  131. local_deep_research/web/templates/api_keys_config.html +0 -82
  132. local_deep_research/web/templates/collections_config.html +0 -90
  133. local_deep_research/web/templates/index.html +0 -348
  134. local_deep_research/web/templates/llm_config.html +0 -120
  135. local_deep_research/web/templates/main_config.html +0 -89
  136. local_deep_research/web/templates/search_engines_config.html +0 -154
  137. local_deep_research/web/templates/settings.html +0 -519
  138. local_deep_research-0.1.25.dist-info/RECORD +0 -61
  139. local_deep_research-0.1.25.dist-info/top_level.txt +0 -1
  140. /local_deep_research/{utilties → config}/__init__.py +0 -0
  141. {local_deep_research-0.1.25.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
+ };