@@ -102,8 +102,13 @@ def _process_query_with_cot(self, query: str) -> Dict[str, Any]:
102
102
logger .warning ("No planner agent available, using direct response" )
103
103
return self ._generate_general_response (query )
104
104
105
- plan = self .agents ["planner" ].plan (query , initial_context )
106
- logger .info (f"Generated plan:\n { plan } " )
105
+ try :
106
+ plan = self .agents ["planner" ].plan (query , initial_context )
107
+ logger .info (f"Generated plan:\n { plan } " )
108
+ except Exception as e :
109
+ logger .error (f"Error in planning step: { str (e )} " )
110
+ logger .info ("Falling back to general response" )
111
+ return self ._generate_general_response (query )
107
112
108
113
# Step 2: Research each step (if researcher is available)
109
114
logger .info ("Step 2: Research" )
@@ -112,11 +117,21 @@ def _process_query_with_cot(self, query: str) -> Dict[str, Any]:
112
117
for step in plan .split ("\n " ):
113
118
if not step .strip ():
114
119
continue
115
- step_research = self .agents ["researcher" ].research (query , step )
116
- research_results .append ({"step" : step , "findings" : step_research })
117
- # Log which sources were used for this step
118
- source_indices = [initial_context .index (finding ) + 1 for finding in step_research if finding in initial_context ]
119
- logger .info (f"Research for step: { step } \n Using sources: { source_indices } " )
120
+ try :
121
+ step_research = self .agents ["researcher" ].research (query , step )
122
+ # Extract findings from research result
123
+ findings = step_research .get ("findings" , []) if isinstance (step_research , dict ) else []
124
+ research_results .append ({"step" : step , "findings" : findings })
125
+
126
+ # Log which sources were used for this step
127
+ try :
128
+ source_indices = [initial_context .index (finding ) + 1 for finding in findings if finding in initial_context ]
129
+ logger .info (f"Research for step: { step } \n Using sources: { source_indices } " )
130
+ except ValueError as ve :
131
+ logger .warning (f"Could not find some findings in initial context: { str (ve )} " )
132
+ except Exception as e :
133
+ logger .error (f"Error during research for step '{ step } ': { str (e )} " )
134
+ research_results .append ({"step" : step , "findings" : []})
120
135
else :
121
136
# If no researcher or no context, use the steps directly
122
137
research_results = [{"step" : step , "findings" : []} for step in plan .split ("\n " ) if step .strip ()]
@@ -130,30 +145,39 @@ def _process_query_with_cot(self, query: str) -> Dict[str, Any]:
130
145
131
146
reasoning_steps = []
132
147
for result in research_results :
133
- step_reasoning = self .agents ["reasoner" ].reason (
134
- query ,
135
- result ["step" ],
136
- result ["findings" ] if result ["findings" ] else [{"content" : "Using general knowledge" , "metadata" : {"source" : "General Knowledge" }}]
137
- )
138
- reasoning_steps .append (step_reasoning )
139
- logger .info (f"Reasoning for step: { result ['step' ]} \n { step_reasoning } " )
148
+ try :
149
+ step_reasoning = self .agents ["reasoner" ].reason (
150
+ query ,
151
+ result ["step" ],
152
+ result ["findings" ] if result ["findings" ] else [{"content" : "Using general knowledge" , "metadata" : {"source" : "General Knowledge" }}]
153
+ )
154
+ reasoning_steps .append (step_reasoning )
155
+ logger .info (f"Reasoning for step: { result ['step' ]} \n { step_reasoning } " )
156
+ except Exception as e :
157
+ logger .error (f"Error in reasoning for step '{ result ['step' ]} ': { str (e )} " )
158
+ reasoning_steps .append (f"Error in reasoning for this step: { str (e )} " )
140
159
141
160
# Step 4: Synthesize final answer
142
161
logger .info ("Step 4: Synthesis" )
143
162
if not self .agents .get ("synthesizer" ):
144
163
logger .warning ("No synthesizer agent available, using direct response" )
145
164
return self ._generate_general_response (query )
146
165
147
- final_answer = self .agents ["synthesizer" ].synthesize (query , reasoning_steps )
148
- logger .info (f"Final synthesized answer:\n { final_answer } " )
166
+ try :
167
+ final_answer = self .agents ["synthesizer" ].synthesize (query , reasoning_steps )
168
+ logger .info (f"Final synthesized answer:\n { final_answer } " )
169
+ except Exception as e :
170
+ logger .error (f"Error in synthesis step: { str (e )} " )
171
+ logger .info ("Falling back to general response" )
172
+ return self ._generate_general_response (query )
149
173
150
174
return {
151
175
"answer" : final_answer ,
152
176
"context" : initial_context ,
153
177
"reasoning_steps" : reasoning_steps
154
178
}
155
179
except Exception as e :
156
- logger .error (f"Error in CoT processing: { str (e )} " )
180
+ logger .error (f"Error in CoT processing: { str (e )} " , exc_info = True )
157
181
logger .info ("Falling back to general response" )
158
182
return self ._generate_general_response (query )
159
183
0 commit comments