@@ -121,48 +121,65 @@ def _process_query_with_cot(self, query: str, analysis: QueryAnalysis) -> Dict[s
121
121
repo_context = self .vector_store .query_repo_collection (query )
122
122
initial_context = pdf_context + repo_context
123
123
124
- # Step 1: Planning
125
- logger .info ("Step 1: Planning" )
126
- plan = self .agents ["planner" ].plan (query , initial_context )
127
- logger .info (f"Generated plan:\n { plan } " )
128
-
129
- # Step 2: Research each step (if researcher is available)
130
- logger .info ("Step 2: Research" )
131
- research_results = []
132
- if self .agents ["researcher" ] is not None and initial_context :
133
- for step in plan .split ("\n " ):
134
- if not step .strip ():
135
- continue
136
- step_research = self .agents ["researcher" ].research (query , step )
137
- research_results .append ({"step" : step , "findings" : step_research })
138
- logger .info (f"Research for step: { step } \n Findings: { step_research } " )
139
- else :
140
- # If no researcher or no context, use the steps directly
141
- research_results = [{"step" : step , "findings" : []} for step in plan .split ("\n " ) if step .strip ()]
142
- logger .info ("No research performed (no researcher agent or no context available)" )
143
-
144
- # Step 3: Reasoning about each step
145
- logger .info ("Step 3: Reasoning" )
146
- reasoning_steps = []
147
- for result in research_results :
148
- step_reasoning = self .agents ["reasoner" ].reason (
149
- query ,
150
- result ["step" ],
151
- result ["findings" ] if result ["findings" ] else [{"content" : "Using general knowledge" , "metadata" : {"source" : "General Knowledge" }}]
152
- )
153
- reasoning_steps .append (step_reasoning )
154
- logger .info (f"Reasoning for step: { result ['step' ]} \n { step_reasoning } " )
155
-
156
- # Step 4: Synthesize final answer
157
- logger .info ("Step 4: Synthesis" )
158
- final_answer = self .agents ["synthesizer" ].synthesize (query , reasoning_steps )
159
- logger .info (f"Final synthesized answer:\n { final_answer } " )
160
-
161
- return {
162
- "answer" : final_answer ,
163
- "context" : initial_context ,
164
- "reasoning_steps" : reasoning_steps
165
- }
124
+ try :
125
+ # Step 1: Planning
126
+ logger .info ("Step 1: Planning" )
127
+ if not self .agents or "planner" not in self .agents :
128
+ logger .warning ("No planner agent available, using direct response" )
129
+ return self ._generate_general_response (query )
130
+
131
+ plan = self .agents ["planner" ].plan (query , initial_context )
132
+ logger .info (f"Generated plan:\n { plan } " )
133
+
134
+ # Step 2: Research each step (if researcher is available)
135
+ logger .info ("Step 2: Research" )
136
+ research_results = []
137
+ if self .agents .get ("researcher" ) is not None and initial_context :
138
+ for step in plan .split ("\n " ):
139
+ if not step .strip ():
140
+ continue
141
+ step_research = self .agents ["researcher" ].research (query , step )
142
+ research_results .append ({"step" : step , "findings" : step_research })
143
+ logger .info (f"Research for step: { step } \n Findings: { step_research } " )
144
+ else :
145
+ # If no researcher or no context, use the steps directly
146
+ research_results = [{"step" : step , "findings" : []} for step in plan .split ("\n " ) if step .strip ()]
147
+ logger .info ("No research performed (no researcher agent or no context available)" )
148
+
149
+ # Step 3: Reasoning about each step
150
+ logger .info ("Step 3: Reasoning" )
151
+ if not self .agents .get ("reasoner" ):
152
+ logger .warning ("No reasoner agent available, using direct response" )
153
+ return self ._generate_general_response (query )
154
+
155
+ reasoning_steps = []
156
+ for result in research_results :
157
+ step_reasoning = self .agents ["reasoner" ].reason (
158
+ query ,
159
+ result ["step" ],
160
+ result ["findings" ] if result ["findings" ] else [{"content" : "Using general knowledge" , "metadata" : {"source" : "General Knowledge" }}]
161
+ )
162
+ reasoning_steps .append (step_reasoning )
163
+ logger .info (f"Reasoning for step: { result ['step' ]} \n { step_reasoning } " )
164
+
165
+ # Step 4: Synthesize final answer
166
+ logger .info ("Step 4: Synthesis" )
167
+ if not self .agents .get ("synthesizer" ):
168
+ logger .warning ("No synthesizer agent available, using direct response" )
169
+ return self ._generate_general_response (query )
170
+
171
+ final_answer = self .agents ["synthesizer" ].synthesize (query , reasoning_steps )
172
+ logger .info (f"Final synthesized answer:\n { final_answer } " )
173
+
174
+ return {
175
+ "answer" : final_answer ,
176
+ "context" : initial_context ,
177
+ "reasoning_steps" : reasoning_steps
178
+ }
179
+ except Exception as e :
180
+ logger .error (f"Error in CoT processing: { str (e )} " )
181
+ logger .info ("Falling back to general response" )
182
+ return self ._generate_general_response (query )
166
183
167
184
def _process_query_standard (self , query : str , analysis : QueryAnalysis ) -> Dict [str , Any ]:
168
185
"""Process query using standard approach without Chain of Thought"""
0 commit comments