(question: str, **kwargs)
| 81 | return decorator |
| 82 | |
| 83 | async def decompose(question: str, **kwargs): |
| 84 | retries = LABEL_RETRIES |
| 85 | if module == "multi-hop": |
| 86 | if "contexts" not in kwargs: |
| 87 | raise Exception("Multi-hop must have contexts") |
| 88 | contexts = kwargs["contexts"] |
| 89 | multistep_result = await multistep(question, contexts) |
| 90 | while retries > 0: |
| 91 | label_result = await label(question, multistep_result) |
| 92 | try: |
| 93 | if len(label_result["sub-questions"]) != len(multistep_result["sub-questions"]): |
| 94 | retries -= 1 |
| 95 | continue |
| 96 | calculate_depth(label_result["sub-questions"]) |
| 97 | break |
| 98 | except: |
| 99 | retries -= 1 |
| 100 | continue |
| 101 | for step, note in zip(multistep_result["sub-questions"], label_result["sub-questions"]): |
| 102 | step["depend"] = note["depend"] |
| 103 | return multistep_result |
| 104 | else: |
| 105 | multistep_result = await multistep(question) |
| 106 | while retries > 0: |
| 107 | result = await label(question, multistep_result["response"], multistep_result["answer"]) |
| 108 | try: |
| 109 | calculate_depth(result["sub-questions"]) |
| 110 | result["response"] = multistep_result["response"] |
| 111 | break |
| 112 | except: |
| 113 | retries -= 1 |
| 114 | continue |
| 115 | return result |
| 116 | |
| 117 | async def merging(question: str, decompose_result: dict, independent_subqs: list, dependent_subqs: list, **kwargs): |
| 118 | contract_args = ( |
no test coverage detected