mirror of
https://github.com/FoundationAgents/MetaGPT.git
synced 2026-05-24 14:15:17 +02:00
update code-intepreter by auto aask.
This commit is contained in:
parent
d1666c3307
commit
f9b1cce654
3 changed files with 30 additions and 4 deletions
|
|
@ -88,7 +88,7 @@ class WriteCodeByGenerate(BaseWriteAnalysisCode):
|
|||
) -> str:
|
||||
# context.append(Message(content=self.REUSE_CODE_INSTRUCTION, role="user"))
|
||||
prompt = self.process_msg(context, system_msg)
|
||||
is_only_code = kwargs.pop("only_code", True)
|
||||
is_only_code = kwargs.pop("only_code", False)
|
||||
|
||||
code_content = await self.llm.aask_code(prompt, **kwargs)
|
||||
if is_only_code:
|
||||
|
|
|
|||
|
|
@ -154,7 +154,30 @@ class OpenAILLM(BaseLLM):
|
|||
|
||||
return self._cons_kwargs(messages=messages, timeout=timeout, **kwargs)
|
||||
|
||||
def _process_message(self, messages: Union[str, Message, list[dict], list[Message], list[str]]) -> list[dict]:
|
||||
"""convert messages to list[dict]."""
|
||||
# 全部转成list
|
||||
if not isinstance(messages, list):
|
||||
messages = [messages]
|
||||
|
||||
# 转成list[dict]
|
||||
processed_messages = []
|
||||
for msg in messages:
|
||||
if isinstance(msg, str):
|
||||
processed_messages.append({"role": "user", "content": msg})
|
||||
elif isinstance(msg, dict):
|
||||
assert set(msg.keys()) == set(['role', 'content'])
|
||||
processed_messages.append(msg)
|
||||
elif isinstance(msg, Message):
|
||||
processed_messages.append(msg.to_dict())
|
||||
else:
|
||||
raise ValueError(
|
||||
f"Only support message type are: str, Message, dict, but got {type(messages).__name__}!"
|
||||
)
|
||||
return processed_messages
|
||||
|
||||
async def _achat_completion_function(self, messages: list[dict], timeout=3, **chat_configs) -> ChatCompletion:
|
||||
messages = self._process_message(messages)
|
||||
kwargs = self._func_configs(messages=messages, timeout=timeout, **chat_configs)
|
||||
rsp: ChatCompletion = await self.aclient.chat.completions.create(**kwargs)
|
||||
self._update_costs(rsp.usage)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class CodeInterpreter(Role):
|
|||
|
||||
async def _act_on_task(self, current_task: Task) -> TaskResult:
|
||||
code, result, is_success = await self._write_and_exec_code()
|
||||
task_result = TaskResult(code=code, result=result, is_success=is_success)
|
||||
task_result = TaskResult(code=code['code'], result=result, is_success=is_success)
|
||||
return task_result
|
||||
|
||||
async def _write_and_exec_code(self, max_retry: int = 3):
|
||||
|
|
@ -63,10 +63,10 @@ class CodeInterpreter(Role):
|
|||
### write code ###
|
||||
code, cause_by = await self._write_code()
|
||||
|
||||
self.working_memory.add(Message(content=code, role="assistant", cause_by=cause_by))
|
||||
self.working_memory.add(Message(content=code['code'], role="assistant", cause_by=cause_by))
|
||||
|
||||
### execute code ###
|
||||
result, success = await self.execute_code.run(code)
|
||||
result, success = await self.execute_code.run(**code)
|
||||
print(result)
|
||||
|
||||
self.working_memory.add(Message(content=result, role="user", cause_by=ExecutePyCode))
|
||||
|
|
@ -91,6 +91,9 @@ class CodeInterpreter(Role):
|
|||
|
||||
context = self.planner.get_useful_memories()
|
||||
code = await todo.run(context=context, plan=self.planner.plan, temperature=0.0)
|
||||
# 暂时在这里转换 WriteCodeWithTools 的输出
|
||||
if isinstance(code, str):
|
||||
code = {'code': code, 'language': 'python'}
|
||||
|
||||
return code, todo
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue