mgbam commited on
Commit
c2e09d4
·
verified ·
1 Parent(s): 3589b0d

Update workflow.py

Browse files
Files changed (1) hide show
  1. workflow.py +27 -23
workflow.py CHANGED
@@ -24,6 +24,8 @@ class AgentState(TypedDict):
24
  class ResearchWorkflow:
25
  """
26
  Defines a multi-step research workflow using a state graph.
 
 
27
  """
28
  def __init__(self) -> None:
29
  self.processor = EnhancedCognitiveProcessor()
@@ -58,7 +60,12 @@ class ResearchWorkflow:
58
  query = state["messages"][-1].content
59
  # Retrieve the domain from the state's context (defaulting to Biomedical Research)
60
  domain = state.get("context", {}).get("domain", "Biomedical Research")
61
- new_context = {"raw_query": query, "domain": domain, "refine_count": 0, "refinement_history": []}
 
 
 
 
 
62
  logger.info(f"Query ingested. Domain: {domain}")
63
  return {
64
  "messages": [AIMessage(content="Query ingested successfully")],
@@ -73,7 +80,7 @@ class ResearchWorkflow:
73
  try:
74
  query = state["context"]["raw_query"]
75
  # For demonstration, we use an empty document list.
76
- # Replace this with actual retrieval logic as needed.
77
  docs = []
78
  logger.info(f"Retrieved {len(docs)} documents for query.")
79
  return {
@@ -93,28 +100,25 @@ class ResearchWorkflow:
93
  def analyze_content(self, state: Dict) -> Dict:
94
  try:
95
  domain = state["context"].get("domain", "Biomedical Research").strip().lower()
96
- fallback_analyses = ResearchConfig.DOMAIN_FALLBACKS
97
- # If the domain matches a fallback, return it.
98
- if domain in fallback_analyses:
99
- logger.info(f"Using fallback analysis for domain: {state['context'].get('domain')}")
100
- return {
101
- "messages": [AIMessage(content=fallback_analyses[domain].strip())],
102
- "context": state["context"]
103
- }
104
- else:
105
- docs = state["context"].get("documents", [])
106
  docs_text = "\n\n".join([d.page_content for d in docs])
107
- domain_prompt = ResearchConfig.DOMAIN_PROMPTS.get(domain, "")
108
- full_prompt = f"{domain_prompt}\n\n" + ResearchConfig.ANALYSIS_TEMPLATE.format(context=docs_text)
109
- response = self.processor.process_query(full_prompt)
110
- if "error" in response:
111
- logger.error("Backend response error during analysis.")
112
- return self._error_state(response["error"])
113
- logger.info("Content analysis completed.")
114
- return {
115
- "messages": [AIMessage(content=response.get('choices', [{}])[0].get('message', {}).get('content', ''))],
116
- "context": state["context"]
117
- }
 
 
 
 
118
  except Exception as e:
119
  logger.exception("Error during content analysis.")
120
  return self._error_state(f"Analysis Error: {str(e)}")
 
24
  class ResearchWorkflow:
25
  """
26
  Defines a multi-step research workflow using a state graph.
27
+ This workflow now employs a Retrieval-Augmented Generation (RAG) approach.
28
+ When no documents are retrieved, the model dynamically synthesizes an analysis using its internal knowledge.
29
  """
30
  def __init__(self) -> None:
31
  self.processor = EnhancedCognitiveProcessor()
 
60
  query = state["messages"][-1].content
61
  # Retrieve the domain from the state's context (defaulting to Biomedical Research)
62
  domain = state.get("context", {}).get("domain", "Biomedical Research")
63
+ new_context = {
64
+ "raw_query": query,
65
+ "domain": domain,
66
+ "refine_count": 0,
67
+ "refinement_history": []
68
+ }
69
  logger.info(f"Query ingested. Domain: {domain}")
70
  return {
71
  "messages": [AIMessage(content="Query ingested successfully")],
 
80
  try:
81
  query = state["context"]["raw_query"]
82
  # For demonstration, we use an empty document list.
83
+ # In a full RAG system, you would retrieve relevant documents from an external index.
84
  docs = []
85
  logger.info(f"Retrieved {len(docs)} documents for query.")
86
  return {
 
100
  def analyze_content(self, state: Dict) -> Dict:
101
  try:
102
  domain = state["context"].get("domain", "Biomedical Research").strip().lower()
103
+ docs = state["context"].get("documents", [])
104
+ # Use retrieved documents if available; otherwise, use the raw query.
105
+ if docs:
 
 
 
 
 
 
 
106
  docs_text = "\n\n".join([d.page_content for d in docs])
107
+ else:
108
+ docs_text = state["context"].get("raw_query", "")
109
+ logger.info("No documents retrieved; switching to dynamic RAG mode.")
110
+ domain_prompt = ResearchConfig.DOMAIN_PROMPTS.get(domain, "")
111
+ # RAG approach: combine domain prompt with retrieved docs or raw query.
112
+ full_prompt = f"{domain_prompt}\n\n" + ResearchConfig.ANALYSIS_TEMPLATE.format(context=docs_text)
113
+ response = self.processor.process_query(full_prompt)
114
+ if "error" in response:
115
+ logger.error("Backend response error during analysis.")
116
+ return self._error_state(response["error"])
117
+ logger.info("Content analysis completed using RAG approach.")
118
+ return {
119
+ "messages": [AIMessage(content=response.get('choices', [{}])[0].get('message', {}).get('content', ''))],
120
+ "context": state["context"]
121
+ }
122
  except Exception as e:
123
  logger.exception("Error during content analysis.")
124
  return self._error_state(f"Analysis Error: {str(e)}")