local-deep-research 0.6.0__py3-none-any.whl → 0.6.1__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.
@@ -1 +1 @@
1
- __version__ = "0.6.0"
1
+ __version__ = "0.6.1"
@@ -6,6 +6,7 @@
6
6
 
7
7
  {% block extra_head %}
8
8
  <meta name="csrf-token" content="{{ csrf_token() }}">
9
+ <meta name="app-version" content="{{ version }}">
9
10
  <style>
10
11
  .benchmark-results-card {
11
12
  width: 100%;
@@ -769,14 +770,21 @@ function createRunCard(run) {
769
770
  <div class="summary-label">Avg Time/Question</div>
770
771
  </div>
771
772
  <div class="summary-item">
772
- ${status === 'in_progress' ?
773
- `<button class="btn btn-outline btn-sm delete-btn" onclick="event.stopPropagation(); cancelAndDeleteBenchmarkRun(${run.id})" style="background: #3a1e1e !important; border-color: #f44336 !important; color: #f44336 !important;">
774
- <i class="fas fa-stop"></i> Cancel & Delete
775
- </button>` :
776
- `<button class="btn btn-outline btn-sm delete-btn" onclick="event.stopPropagation(); deleteBenchmarkRun(${run.id})">
777
- <i class="fas fa-trash"></i> Delete
778
- </button>`
779
- }
773
+ <div style="display: flex; gap: 8px;">
774
+ ${status === 'completed' ?
775
+ `<button class="btn btn-outline btn-sm" onclick="event.stopPropagation(); downloadBenchmarkYAML(${run.id})" style="background: #1e3a1e !important; border-color: #4caf50 !important; color: #4caf50 !important;">
776
+ <i class="fas fa-download"></i> YAML
777
+ </button>` : ''
778
+ }
779
+ ${status === 'in_progress' ?
780
+ `<button class="btn btn-outline btn-sm delete-btn" onclick="event.stopPropagation(); cancelAndDeleteBenchmarkRun(${run.id})" style="background: #3a1e1e !important; border-color: #f44336 !important; color: #f44336 !important;">
781
+ <i class="fas fa-stop"></i> Cancel & Delete
782
+ </button>` :
783
+ `<button class="btn btn-outline btn-sm delete-btn" onclick="event.stopPropagation(); deleteBenchmarkRun(${run.id})">
784
+ <i class="fas fa-trash"></i> Delete
785
+ </button>`
786
+ }
787
+ </div>
780
788
  <div class="summary-label">Actions</div>
781
789
  </div>
782
790
  </div>
@@ -1061,6 +1069,136 @@ async function cancelAndDeleteBenchmarkRun(runId) {
1061
1069
  }
1062
1070
  }
1063
1071
 
1072
+ async function downloadBenchmarkYAML(runId) {
1073
+ try {
1074
+ // Find the run in our local data
1075
+ const run = benchmarkRuns.find(r => r.id === runId);
1076
+ if (!run) {
1077
+ showAlert('Benchmark run not found', 'error');
1078
+ return;
1079
+ }
1080
+
1081
+ // Get current date for filename
1082
+ const date = new Date().toISOString().split('T')[0];
1083
+
1084
+ // Get app version from meta tag
1085
+ const appVersion = document.querySelector('meta[name="app-version"]')?.content || 'Could not fetch version';
1086
+
1087
+ // Extract model name and clean it for filename
1088
+ const modelName = run.search_config?.model_name || 'unknown-model';
1089
+ const cleanModelName = modelName.replace(/[^a-zA-Z0-9.-]/g, '-').toLowerCase();
1090
+
1091
+ // Get all relevant settings from database
1092
+ let localContextWindow = 'Could not fetch';
1093
+ let maxTokens = 'Could not fetch';
1094
+ let contextWindowUnrestricted = 'Could not fetch';
1095
+ let contextWindowSize = 'Could not fetch';
1096
+ let supportsMaxTokens = 'Could not fetch';
1097
+
1098
+ try {
1099
+ const settingsResponse = await fetch('/settings/api');
1100
+ if (settingsResponse.ok) {
1101
+ const data = await settingsResponse.json();
1102
+ if (data.status === 'success' && data.settings) {
1103
+ const settings = data.settings;
1104
+ // LLM settings - extract the 'value' property from each setting object
1105
+ localContextWindow = settings['llm.local_context_window_size']?.value || 'Could not fetch';
1106
+ maxTokens = settings['llm.max_tokens']?.value || 'Could not fetch';
1107
+ contextWindowUnrestricted = settings['llm.context_window_unrestricted']?.value !== undefined ?
1108
+ (settings['llm.context_window_unrestricted'].value ? 'Yes' : 'No') : 'Could not fetch';
1109
+ contextWindowSize = settings['llm.context_window_size']?.value || 'Could not fetch';
1110
+ supportsMaxTokens = settings['llm.supports_max_tokens']?.value !== undefined ?
1111
+ (settings['llm.supports_max_tokens'].value ? 'Yes' : 'No') : 'Could not fetch';
1112
+ }
1113
+ }
1114
+ } catch (e) {
1115
+ console.error('Could not fetch current settings:', e);
1116
+ }
1117
+
1118
+ // Calculate average search results if available
1119
+ const avgSearchResults = formatAvgSearchResults(run).replace(' results', '');
1120
+ const searchResultsNum = avgSearchResults !== 'N/A' ? avgSearchResults : '# Please fill in';
1121
+
1122
+ // Generate YAML content
1123
+ const yamlContent = `# Benchmark Result
1124
+ # Generated from Local Deep Research v${appVersion}
1125
+ # Date: ${date}
1126
+
1127
+ # Model Information
1128
+ model: ${modelName}
1129
+ model_provider: ${run.search_config?.provider || 'unknown'}
1130
+ quantization: # Please fill in if applicable
1131
+
1132
+ # Search Engine (critical for benchmark reproducibility)
1133
+ search_engine: ${run.search_config?.search_tool || 'unknown'}
1134
+ search_provider_version: # if known, e.g., "latest", "2024.1.0"
1135
+ average_results_per_query: ${searchResultsNum}
1136
+
1137
+ # Hardware
1138
+ hardware:
1139
+ gpu: # Please fill in
1140
+ ram: # Please fill in
1141
+ cpu: # Please fill in
1142
+
1143
+ # Benchmark Results
1144
+ results:
1145
+ dataset: SimpleQA
1146
+ total_questions: ${run.total_examples}
1147
+
1148
+ ${run.search_config?.search_strategy === 'focused_iteration' ? 'focused_iteration' : 'source_based'}:
1149
+ accuracy: ${run.overall_accuracy ? run.overall_accuracy.toFixed(1) : 0}% (${Math.round(run.overall_accuracy * run.total_examples / 100)}/${run.total_examples})
1150
+ iterations: ${run.search_config?.iterations || 'N/A'}
1151
+ questions_per_iteration: ${run.search_config?.questions_per_iteration || 'N/A'}
1152
+ avg_time_per_question: ${formatAvgProcessingTime(run)}
1153
+ total_tokens_used: # if available
1154
+
1155
+ # Configuration
1156
+ configuration:
1157
+ context_window: ${localContextWindow} # Current setting at download time - may differ from benchmark run
1158
+ temperature: ${run.search_config?.temperature || 'N/A'}
1159
+ max_tokens: ${maxTokens} # Current setting at download time
1160
+ local_provider_context_window_size: ${localContextWindow} # Current setting at download time
1161
+ context_window_unrestricted: ${contextWindowUnrestricted} # Current setting at download time
1162
+
1163
+ # Versions
1164
+ versions:
1165
+ ldr_version: ${appVersion}
1166
+ ollama_version: # if applicable
1167
+
1168
+ # Test Details
1169
+ test_details:
1170
+ date_tested: ${date}
1171
+ rate_limiting_issues: # yes/no
1172
+ search_failures: # number of failed searches, if any
1173
+
1174
+ # Notes
1175
+ notes: |
1176
+ # Add any observations, errors, or insights here
1177
+ # Search strategy: ${run.search_config?.search_strategy || 'unknown'}
1178
+ # Provider: ${run.search_config?.provider || 'unknown'}
1179
+ # Note: Configuration values are from current settings at download time,
1180
+ # not necessarily the values used during the benchmark run
1181
+ `;
1182
+
1183
+ // Create blob and download
1184
+ const blob = new Blob([yamlContent], { type: 'text/yaml' });
1185
+ const url = window.URL.createObjectURL(blob);
1186
+ const a = document.createElement('a');
1187
+ a.style.display = 'none';
1188
+ a.href = url;
1189
+ a.download = `${cleanModelName}_${date}.yaml`;
1190
+ document.body.appendChild(a);
1191
+ a.click();
1192
+ window.URL.revokeObjectURL(url);
1193
+ document.body.removeChild(a);
1194
+
1195
+ showAlert('Benchmark YAML downloaded! Hardware details are optional but helpful for performance context.', 'success');
1196
+ } catch (error) {
1197
+ console.error('Error downloading YAML:', error);
1198
+ showAlert('Error downloading YAML: ' + error.message, 'error');
1199
+ }
1200
+ }
1201
+
1064
1202
  async function deleteBenchmarkRun(runId) {
1065
1203
  try {
1066
1204
  const response = await fetch(`/benchmark/api/delete/${runId}`, {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: local-deep-research
3
- Version: 0.6.0
3
+ Version: 0.6.1
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
@@ -302,7 +302,7 @@ Early experiments on small SimpleQA dataset samples:
302
302
  | Configuration | Accuracy | Notes |
303
303
  |--------------|----------|--------|
304
304
  | gpt-4.1-mini + SearXNG + focused_iteration | 90-95% | Limited sample size |
305
- | gpt-4.1-mini + Tavily | Up to 95% | Limited sample size |
305
+ | gpt-4.1-mini + Tavily + focused_iteration | 90-95% | Limited sample size |
306
306
  | gemini-2.0-flash-001 + SearXNG | 82% | Single test run |
307
307
 
308
308
  Note: These are preliminary results from initial testing. Performance varies significantly based on query types, model versions, and configurations. [Run your own benchmarks →](docs/BENCHMARKING.md)
@@ -1,9 +1,9 @@
1
- local_deep_research-0.6.0.dist-info/METADATA,sha256=f1zxuIR6tmbB13f_PPbBBGvIyFiEAicvJDgwO9YOcPU,14505
2
- local_deep_research-0.6.0.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
- local_deep_research-0.6.0.dist-info/entry_points.txt,sha256=GcXS501Rjh-P80S8db7hnrQ23mS_Jg27PwpVQVO77as,113
4
- local_deep_research-0.6.0.dist-info/licenses/LICENSE,sha256=Qg2CaTdu6SWnSqk1_JtgBPp_Da-LdqJDhT1Vt1MUc5s,1072
1
+ local_deep_research-0.6.1.dist-info/METADATA,sha256=YMrqywP2xGWYA40UZUB51NA5A3k9iYUitu5kHiJlpO4,14522
2
+ local_deep_research-0.6.1.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
+ local_deep_research-0.6.1.dist-info/entry_points.txt,sha256=GcXS501Rjh-P80S8db7hnrQ23mS_Jg27PwpVQVO77as,113
4
+ local_deep_research-0.6.1.dist-info/licenses/LICENSE,sha256=Qg2CaTdu6SWnSqk1_JtgBPp_Da-LdqJDhT1Vt1MUc5s,1072
5
5
  local_deep_research/__init__.py,sha256=j1ktf_e9HeXPe86NHibY5aINtZfTSGRTvLNtz9BJZa4,1071
6
- local_deep_research/__version__.py,sha256=cID1jLnC_vj48GgMN6Yb1FA3JsQ95zNmCHmRYE8TFhY,22
6
+ local_deep_research/__version__.py,sha256=baAcEjLSYFIeNZF51tOMmA_zAMhN8HvKael-UU-Ruec,22
7
7
  local_deep_research/advanced_search_system/__init__.py,sha256=sGusMj4eFIrhXR6QbOM16UDKB6aI-iS4IFivKWpMlh0,234
8
8
  local_deep_research/advanced_search_system/answer_decoding/__init__.py,sha256=BmmbIPQnouYyboFD61CDq71fW5On555w7dbt42s9gV4,148
9
9
  local_deep_research/advanced_search_system/answer_decoding/browsecomp_answer_decoder.py,sha256=4FDMP4n_z5DOzVIisH3_kexRqNm1AO3MDe-Md3WtgE0,12856
@@ -244,7 +244,7 @@ local_deep_research/web/templates/components/mobile_nav.html,sha256=6wbqweC5DGEy
244
244
  local_deep_research/web/templates/components/settings_form.html,sha256=Z1eEQ_SFlioH24zrIDpjMQ-ajEJC2lLN4Tu8Y8uASLY,15987
245
245
  local_deep_research/web/templates/components/sidebar.html,sha256=yvdex0rFt9IFEhVu50MEyvpBIlMKg8x9hLZf-cugPaY,1698
246
246
  local_deep_research/web/templates/pages/benchmark.html,sha256=jeqe6koHeVmXKt0U8_JKWnSZEZouq5SuW_kEZMMKjRs,103838
247
- local_deep_research/web/templates/pages/benchmark_results.html,sha256=K9cs2-i_jUsGVrZaDO8NmCsVNo7fmbthpW9zKglnSb0,33639
247
+ local_deep_research/web/templates/pages/benchmark_results.html,sha256=ijQesleJN-pCNoyQGViRH5bCwb15fYY3vliH5hWjTfM,39771
248
248
  local_deep_research/web/templates/pages/benchmark_simple.html,sha256=mLvhzJqRj4rFRJPG9Jo-eHYSogeDVnpRgd5TwACZ1t8,14396
249
249
  local_deep_research/web/templates/pages/cost_analytics.html,sha256=mXHw-MSXztJMh6xvW2D_9KXW5EuyrpNnMFTpP7Ob2GQ,46194
250
250
  local_deep_research/web/templates/pages/details.html,sha256=Led51_cv97e_Z057_7QVWT7imVB4f71FWeL2q83CJrE,12413
@@ -289,4 +289,4 @@ local_deep_research/web_search_engines/retriever_registry.py,sha256=ZErfErn6s1LI
289
289
  local_deep_research/web_search_engines/search_engine_base.py,sha256=0ys6nqm4WLTvYqHLZk4x5ZKFTc4BcqhUBjT1m1Jibp0,17114
290
290
  local_deep_research/web_search_engines/search_engine_factory.py,sha256=jKvLkv6rHWSKTnqfLvyvA2WF4qu5qaelgd4IoGOcyVs,12588
291
291
  local_deep_research/web_search_engines/search_engines_config.py,sha256=aZ1Y5YMPWgZqRC-wCJ4JUQgliBNSbU0dOUlCvR_elws,6086
292
- local_deep_research-0.6.0.dist-info/RECORD,,
292
+ local_deep_research-0.6.1.dist-info/RECORD,,