harry-lu-0708 commited on
Commit
2f99c61
·
1 Parent(s): 81fdfc6

fixed dataworkflow

Browse files
Files changed (1) hide show
  1. scievo/workflows/data_workflow.py +64 -2
scievo/workflows/data_workflow.py CHANGED
@@ -194,12 +194,74 @@ class DataWorkflow(BaseModel):
194
  if result_state.output_summary:
195
  return result_state.output_summary
196
 
197
- # Fallback: try to read saved analysis.md file
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  analysis_file = self.workspace_path / "analysis.md"
199
  if analysis_file.exists():
 
200
  return analysis_file.read_text()
201
 
202
- raise RuntimeError("Data analysis completed but no summary was generated.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
 
204
  def _finalize(self, success: bool):
205
  """Finalize the workflow."""
 
194
  if result_state.output_summary:
195
  return result_state.output_summary
196
 
197
+ # Fallback 1: Try to extract from generate_summary node in intermediate_state
198
+ for item in reversed(result_state.intermediate_state):
199
+ if item.get("node_name") == "generate_summary":
200
+ output = item.get("output", "")
201
+ if output and output != "No summary generated":
202
+ logger.info("Extracted summary from intermediate_state")
203
+ return output
204
+
205
+ # Fallback 2: Try to extract from last assistant message in history
206
+ # (the summary might be in the last message)
207
+ if result_state.history:
208
+ for msg in reversed(result_state.history):
209
+ if hasattr(msg, "role") and msg.role == "assistant":
210
+ if hasattr(msg, "content") and msg.content:
211
+ content = msg.content
212
+ # Check if this looks like a summary (not an error message)
213
+ if content and not content.startswith("Failed to generate"):
214
+ logger.info("Extracted summary from last assistant message")
215
+ return content
216
+
217
+ # Fallback 3: Try to read saved analysis.md file
218
  analysis_file = self.workspace_path / "analysis.md"
219
  if analysis_file.exists():
220
+ logger.info("Extracted summary from analysis.md file")
221
  return analysis_file.read_text()
222
 
223
+ # Fallback 4: Try data_analysis.md
224
+ data_analysis_file = self.workspace_path / "data_analysis.md"
225
+ if data_analysis_file.exists():
226
+ logger.info("Extracted summary from data_analysis.md file")
227
+ return data_analysis_file.read_text()
228
+
229
+ # Fallback 5: Generate a basic summary from available information
230
+ logger.warning("No summary found, generating basic summary from available data")
231
+ summary_parts = []
232
+
233
+ if result_state.paper_search_summary:
234
+ summary_parts.append(f"## Paper Search Results\n{result_state.paper_search_summary}")
235
+
236
+ if result_state.papers:
237
+ summary_parts.append(
238
+ f"\n## Papers Found\nFound {len(result_state.papers)} relevant papers."
239
+ )
240
+
241
+ if result_state.datasets:
242
+ summary_parts.append(
243
+ f"\n## Datasets Found\nFound {len(result_state.datasets)} relevant datasets."
244
+ )
245
+
246
+ if result_state.metrics:
247
+ summary_parts.append(
248
+ f"\n## Metrics\nExtracted {len(result_state.metrics)} evaluation metrics."
249
+ )
250
+
251
+ if result_state.intermediate_state:
252
+ # Include some intermediate outputs
253
+ summary_parts.append("\n## Analysis Process")
254
+ for item in result_state.intermediate_state[-5:]: # Last 5 items
255
+ node_name = item.get("node_name", "unknown")
256
+ output = item.get("output", "")
257
+ if output and len(output) < 500: # Only include short outputs
258
+ summary_parts.append(f"\n### {node_name}\n{output[:300]}...")
259
+
260
+ if summary_parts:
261
+ return "\n".join(summary_parts)
262
+
263
+ # Last resort: return a minimal summary
264
+ return "Data analysis completed. No detailed summary available. Please check the intermediate states for more information."
265
 
266
  def _finalize(self, success: bool):
267
  """Finalize the workflow."""