feat: merge geekan:v0.5-release

This commit is contained in:
莘权 马 2023-12-19 11:12:44 +08:00
commit 76b2dfecdc
5 changed files with 13 additions and 33 deletions

View file

@ -30,10 +30,10 @@ ### Tasks
4. Complete the design and implementation of module breakdown
5. Support various modes of memory: clearly distinguish between long-term and short-term memory
6. Perfect the test role, and carry out necessary interactions with humans
7. Allowing natural communication between roles (expected v0.5.0)
7. ~~Allowing natural communication between roles~~ (v0.5.0)
8. Implement SkillManager and the process of incremental Skill learning (experimentation done with game agents)
9. Automatically get RPM and configure it by calling the corresponding openai page, so that each key does not need to be manually configured
10. IMPORTANT: Support incremental development (expected v0.5.0)
10. ~~IMPORTANT: Support incremental development~~ (v0.5.0)
3. Strategies
1. Support ReAct strategy (experimentation done with game agents)
2. Support CoT strategy (experimentation done with game agents)
@ -45,8 +45,8 @@ ### Tasks
2. Implementation: Knowledge search, supporting 10+ data formats
3. Implementation: Data EDA (expected v0.6.0)
4. Implementation: Review
5. Implementation: Add Document (expected v0.5.0)
6. Implementation: Delete Document (expected v0.5.0)
5. ~~Implementation~~: Add Document (v0.5.0)
6. ~~Implementation~~: Delete Document (v0.5.0)
7. Implementation: Self-training
8. ~~Implementation: DebugError~~ (v0.2.1)
9. Implementation: Generate reliable unit tests based on YAPI

View file

@ -1,16 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Time : 2023/12/18
@Author : mashenquan
@File : role_run.py
@Desc : Message type caused by `Role.run()` invocation.
"""
from metagpt.actions import Action
class RoleRun(Action):
"""Message type caused by `Role.run` invocation"""
async def run(self, *args, **kwargs):
raise NotImplementedError

View file

@ -26,9 +26,8 @@ from typing import Iterable, Set, Type
from pydantic import BaseModel, Field
from metagpt.actions import Action, ActionOutput
from metagpt.actions import Action, ActionOutput, UserRequirement
from metagpt.actions.action_node import ActionNode
from metagpt.actions.role_run import RoleRun
from metagpt.llm import LLM, HumanProvider
from metagpt.logs import logger
from metagpt.memory import Memory
@ -140,7 +139,7 @@ class Role:
self._states = []
self._actions = []
self._role_id = str(self._setting)
self._rc = RoleContext()
self._rc = RoleContext(watch={any_to_str(UserRequirement)})
self._subscription = {any_to_str(self), name} if name else {any_to_str(self)}
def _reset(self):
@ -193,8 +192,7 @@ class Role:
"""Watch Actions of interest. Role will select Messages caused by these Actions from its personal message
buffer during _observe.
"""
tags = {any_to_str(t) for t in actions}
self._rc.watch.update(tags)
self._rc.watch = {any_to_str(t) for t in actions}
# check RoleContext after adding watch actions
self._rc.check(self._role_id)
@ -318,9 +316,7 @@ class Role:
old_messages = [] if ignore_memory else self._rc.memory.get()
self._rc.memory.add_batch(news)
# Filter out messages of interest.
watch = self._rc.watch or set()
watch.add(any_to_str(RoleRun))
self._rc.news = [n for n in news if n.cause_by in watch and n not in old_messages]
self._rc.news = [n for n in news if n.cause_by in self._rc.watch and n not in old_messages]
# Design Rules:
# If you need to further categorize Message objects, you can do so using the Message.set_meta function.
@ -401,7 +397,7 @@ class Role:
elif isinstance(with_message, list):
msg = Message("\n".join(with_message))
if not msg.cause_by:
msg.cause_by = RoleRun
msg.cause_by = UserRequirement
self.put_message(msg)
if not await self._observe():

View file

@ -30,7 +30,7 @@ with open(path.join(here, "requirements.txt"), encoding="utf-8") as f:
setup(
name="metagpt",
version="0.5.1",
version="0.5.2",
description="The Multi-Role Meta Programming Framework",
long_description=long_description,
long_description_content_type="text/markdown",

View file

@ -14,11 +14,11 @@ import uuid
import pytest
from pydantic import BaseModel
from metagpt.actions import Action, ActionOutput
from metagpt.actions import Action, ActionOutput, UserRequirement
from metagpt.environment import Environment
from metagpt.roles import Role
from metagpt.schema import Message
from metagpt.utils.common import get_class_name
from metagpt.utils.common import any_to_str, get_class_name
class MockAction(Action):
@ -60,7 +60,7 @@ async def test_react():
name=seed.name, profile=seed.profile, goal=seed.goal, constraints=seed.constraints, desc=seed.desc
)
role.subscribe({seed.subscription})
assert role._rc.watch == set({})
assert role._rc.watch == {any_to_str(UserRequirement)}
assert role.name == seed.name
assert role.profile == seed.profile
assert role._setting.goal == seed.goal