MCPcopy Create free account
hub / github.com/InternScience/InternAgent / atom

Function atom

tasks/AutoTTS/code/experiment/module.py:139–233  ·  view source on GitHub ↗
(question: str, contexts: str=None, direct_result=None, decompose_result=None, depth=None, log=None)

Source from the content-addressed store, hash-verified

137 return contractd_thought, contractd_question, contraction_result
138
139async def atom(question: str, contexts: str=None, direct_result=None, decompose_result=None, depth=None, log=None):
140 # Initialize logging
141 log = log if log else {}
142 index = len(log)
143 if depth == 0:
144 return None, log
145 log[index] = {}
146
147 # Get results from different approaches
148 direct_args = (question, contexts) if module == "multi-hop" else (question,)
149 direct_result = direct_result if direct_result else await direct(*direct_args)
150
151 decompose_args = {"contexts": contexts} if module == "multi-hop" else {}
152 decompose_result = decompose_result if decompose_result else await decompose(question, **decompose_args)
153
154 # Set recursion depth
155 depth = depth if depth else min(ATOM_DEPTH, calculate_depth(decompose_result["sub-questions"]))
156
157 # Separate independent and dependent sub-questions
158 independent_subqs = [sub_q for sub_q in decompose_result["sub-questions"] if len(sub_q["depend"]) == 0]
159 dependent_subqs = [sub_q for sub_q in decompose_result["sub-questions"] if sub_q not in independent_subqs]
160
161 # Get contraction result
162 merging_args = {
163 "question": question,
164 "decompose_result": decompose_result,
165 "independent_subqs": independent_subqs,
166 "dependent_subqs": dependent_subqs
167 }
168 if module == "multi-hop":
169 merging_args["contexts"] = contexts
170
171 contractd_thought, contractd_question, contraction_result = await merging(**merging_args)
172
173 # Update contraction result with additional information
174 contraction_result["contraction_thought"] = contractd_thought
175 contraction_result["sub-questions"] = independent_subqs + [{
176 "description": contractd_question,
177 "response": contraction_result.get("response", ""),
178 "answer": contraction_result.get("answer", ""),
179 "depend": []
180 }]
181
182 # Get ensemble result
183 ensemble_args = [question]
184 ensemble_args.append([direct_result["response"], decompose_result["response"], contraction_result["response"]])
185 if module == "multi-hop":
186 ensemble_args.append(contexts)
187
188 ensemble_result = await ensemble(*ensemble_args)
189 ensemble_answer = ensemble_result.get("answer", "")
190
191 # Calculate scores
192 scores = []
193 # Check if all results have "answer" key before comparison
194 results_list = [direct_result, decompose_result, contraction_result]
195 all_have_answers = all(isinstance(result, dict) and "answer" in result for result in results_list)
196

Callers 1

limited_atomMethod · 0.90

Calls 7

calculate_depthFunction · 0.90
directFunction · 0.70
decomposeFunction · 0.70
mergingFunction · 0.70
ensembleFunction · 0.70
getMethod · 0.45
updateMethod · 0.45

Tested by

no test coverage detected