mtyrrell commited on
Commit
1a69cf5
·
1 Parent(s): eef99be

deterministic query/file handling

Browse files
Files changed (1) hide show
  1. app/main.py +48 -10
app/main.py CHANGED
@@ -212,15 +212,46 @@ def generate_node(state: GraphState) -> GraphState:
212
  })
213
  return {"result": f"Error: {str(e)}", "metadata": metadata}
214
 
215
- workflow = StateGraph(GraphState)
216
- workflow.add_node("ingest", ingest_node)
217
- workflow.add_node("retrieve", retrieve_node)
218
- workflow.add_node("generate", generate_node)
219
- workflow.add_edge(START, "ingest")
220
- workflow.add_edge("ingest", "retrieve")
221
- workflow.add_edge("retrieve", "generate")
222
- workflow.add_edge("generate", END)
223
- compiled_graph = workflow.compile()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
224
 
225
  def process_query_core(
226
  query: str,
@@ -253,7 +284,14 @@ def process_query_core(
253
  }
254
  }
255
 
256
- final_state = compiled_graph.invoke(initial_state)
 
 
 
 
 
 
 
257
  total_duration = (datetime.now() - start_time).total_seconds()
258
 
259
  final_metadata = final_state.get("metadata", {})
 
212
  })
213
  return {"result": f"Error: {str(e)}", "metadata": metadata}
214
 
215
+ def file_only_node(state: GraphState) -> GraphState:
216
+ """Return ingestor result directly without calling generator"""
217
+ logger.info("File-only processing: returning ingestor result directly")
218
+
219
+ ingestor_context = state.get("ingestor_context", "")
220
+ metadata = state.get("metadata", {})
221
+ metadata.update({
222
+ "processing_type": "file_only",
223
+ "result_source": "ingestor"
224
+ })
225
+
226
+ return {
227
+ "result": ingestor_context,
228
+ "metadata": metadata
229
+ }
230
+
231
+ # Create separate workflows for different processing types
232
+ def create_file_workflow():
233
+ """Workflow for file uploads: ingest -> file_only (skip retrieve and generate)"""
234
+ workflow = StateGraph(GraphState)
235
+ workflow.add_node("ingest", ingest_node)
236
+ workflow.add_node("file_only", file_only_node)
237
+ workflow.add_edge(START, "ingest")
238
+ workflow.add_edge("ingest", "file_only")
239
+ workflow.add_edge("file_only", END)
240
+ return workflow.compile()
241
+
242
+ def create_query_workflow():
243
+ """Workflow for queries: retrieve -> generate (skip ingest)"""
244
+ workflow = StateGraph(GraphState)
245
+ workflow.add_node("retrieve", retrieve_node)
246
+ workflow.add_node("generate", generate_node)
247
+ workflow.add_edge(START, "retrieve")
248
+ workflow.add_edge("retrieve", "generate")
249
+ workflow.add_edge("generate", END)
250
+ return workflow.compile()
251
+
252
+ # Compile workflows
253
+ file_workflow = create_file_workflow()
254
+ query_workflow = create_query_workflow()
255
 
256
  def process_query_core(
257
  query: str,
 
284
  }
285
  }
286
 
287
+ # Choose workflow based on whether file is provided
288
+ if file_content and filename:
289
+ logger.info("File provided - using file workflow (ingest -> file_only)")
290
+ final_state = file_workflow.invoke(initial_state)
291
+ else:
292
+ logger.info("No file provided - using query workflow (retrieve -> generate)")
293
+ final_state = query_workflow.invoke(initial_state)
294
+
295
  total_duration = (datetime.now() - start_time).total_seconds()
296
 
297
  final_metadata = final_state.get("metadata", {})