Spaces:
Running
Running
Commit ·
2f99c61
1
Parent(s): 81fdfc6
fixed dataworkflow
Browse files
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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 198 |
analysis_file = self.workspace_path / "analysis.md"
|
| 199 |
if analysis_file.exists():
|
|
|
|
| 200 |
return analysis_file.read_text()
|
| 201 |
|
| 202 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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."""
|