Spaces:
Running
Running
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
""" | |
@Time : 2024/1/30 17:13 | |
@Author : alexanderwu | |
@File : solver.py | |
""" | |
from abc import abstractmethod | |
from metagpt.actions.action_graph import ActionGraph | |
from metagpt.provider.base_llm import BaseLLM | |
from metagpt.strategy.search_space import SearchSpace | |
class BaseSolver: | |
"""AbstractSolver: defines the interface of a solver.""" | |
def __init__(self, graph: ActionGraph, search_space: SearchSpace, llm: BaseLLM, context): | |
""" | |
:param graph: ActionGraph | |
:param search_space: SearchSpace | |
:param llm: BaseLLM | |
:param context: Context | |
""" | |
self.graph = graph | |
self.search_space = search_space | |
self.llm = llm | |
self.context = context | |
async def solve(self): | |
"""abstract method to solve the problem.""" | |
class NaiveSolver(BaseSolver): | |
"""NaiveSolver: Iterate all the nodes in the graph and execute them one by one.""" | |
async def solve(self): | |
self.graph.topological_sort() | |
for key in self.graph.execution_order: | |
op = self.graph.nodes[key] | |
await op.fill(self.context, self.llm, mode="root") | |
class TOTSolver(BaseSolver): | |
"""TOTSolver: Tree of Thought""" | |
async def solve(self): | |
raise NotImplementedError | |
class DataInterpreterSolver(BaseSolver): | |
"""DataInterpreterSolver: Write&Run code in the graph""" | |
async def solve(self): | |
raise NotImplementedError | |
class ReActSolver(BaseSolver): | |
"""ReActSolver: ReAct algorithm""" | |
async def solve(self): | |
raise NotImplementedError | |
class IOSolver(BaseSolver): | |
"""IOSolver: use LLM directly to solve the problem""" | |
async def solve(self): | |
raise NotImplementedError | |
class COTSolver(BaseSolver): | |
"""COTSolver: Chain of Thought""" | |
async def solve(self): | |
raise NotImplementedError | |