update code-intepreter by auto aask.

This commit is contained in:
刘棒棒 2024-01-15 22:21:56 +08:00
parent d1666c3307
commit f9b1cce654
3 changed files with 30 additions and 4 deletions

View file

@ -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:

View file

@ -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)

View file

@ -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