From b9893d3e46876b5b90d8d7f9935d1c31c467e3be Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Tue, 16 May 2023 23:01:47 +0800 Subject: [PATCH 01/39] basic conversation agent done. --- agentverse/__init__.py | 12 +- agentverse/agents/__init__.py | 3 +- agentverse/agents/agent.py | 62 +++++---- agentverse/agents/base.py | 78 +++++++++++ agentverse/agents/conversation_agent.py | 74 ++++++++++ agentverse/agentverse.py | 22 +-- agentverse/environments/__init__.py | 2 + agentverse/environments/base.py | 57 ++------ agentverse/environments/basic.py | 94 +++++++++++++ .../environments/rules/describer/__init__.py | 2 + .../environments/rules/describer/base.py | 5 +- .../environments/rules/describer/basic.py | 16 +++ .../environments/rules/selector/__init__.py | 4 +- .../environments/rules/selector/base.py | 11 +- .../environments/rules/selector/basic.py | 27 ++++ .../environments/rules/updater/__init__.py | 4 +- agentverse/environments/rules/updater/base.py | 52 ++----- .../environments/rules/updater/basic.py | 69 ++++++++++ agentverse/initialization.py | 129 +++++++++--------- agentverse/llms/__init__.py | 2 + agentverse/llms/base.py | 30 ++++ agentverse/llms/openai.py | 115 ++++++++++++++++ agentverse/memory.py | 87 ------------ agentverse/memory/__init__.py | 2 + agentverse/memory/base.py | 18 +++ agentverse/memory/chat_history_message.py | 22 +++ agentverse/message.py | 12 +- agentverse/parser.py | 14 ++ agentverse/tasks/__init__.py | 5 +- .../nlp_classroom_3players_nolc/config.yaml | 63 +++++++++ .../output_parser.py | 31 +++++ 31 files changed, 833 insertions(+), 291 deletions(-) create mode 100644 agentverse/agents/base.py create mode 100644 agentverse/agents/conversation_agent.py create mode 100644 agentverse/environments/basic.py create mode 100644 agentverse/environments/rules/describer/basic.py create mode 100644 agentverse/environments/rules/selector/basic.py create mode 100644 agentverse/environments/rules/updater/basic.py create mode 100644 agentverse/llms/__init__.py create mode 100644 agentverse/llms/base.py create mode 100644 agentverse/llms/openai.py delete mode 100644 agentverse/memory.py create mode 100644 agentverse/memory/__init__.py create mode 100644 agentverse/memory/base.py create mode 100644 agentverse/memory/chat_history_message.py create mode 100644 agentverse/tasks/nlp_classroom_3players_nolc/config.yaml create mode 100644 agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py diff --git a/agentverse/__init__.py b/agentverse/__init__.py index 10de7cad0..89277bd64 100644 --- a/agentverse/__init__.py +++ b/agentverse/__init__.py @@ -1,5 +1,6 @@ from .tasks import * -from .agents import Agent + +# from .agents import Agent from .environments import env_registry from .environments.rules import Rule from .environments.rules.order import order_registry @@ -8,4 +9,11 @@ from .environments.rules.updater import updater_registry from .environments.rules.visibility import visibility_registry from .agentverse import AgentVerse -from .initialization import prepare_task_config, load_agent, load_environment, load_tools, load_llm, load_memory \ No newline at end of file +from .initialization import ( + prepare_task_config, + load_agent, + load_environment, + load_tools, + load_llm, + load_memory, +) diff --git a/agentverse/agents/__init__.py b/agentverse/agents/__init__.py index d2361b7a3..1192972cf 100644 --- a/agentverse/agents/__init__.py +++ b/agentverse/agents/__init__.py @@ -1 +1,2 @@ -from .agent import Agent +# from .agent import Agent +from .conversation_agent import BaseAgent diff --git a/agentverse/agents/agent.py b/agentverse/agents/agent.py index c588b3a0c..f68210063 100644 --- a/agentverse/agents/agent.py +++ b/agentverse/agents/agent.py @@ -14,11 +14,16 @@ from langchain.memory import ChatMessageHistory from langchain.prompts import BasePromptTemplate, PromptTemplate from langchain.prompts.chat import ChatPromptTemplate, MessagesPlaceholder -from langchain.schema import (AgentAction, AIMessage, - BaseMessage, HumanMessage, SystemMessage) +from langchain.schema import ( + AgentAction, + AIMessage, + BaseMessage, + HumanMessage, + SystemMessage, +) from langchain.tools.base import BaseTool -from agentverse.memory import SummaryMemory +# from agentverse.memory.memory import SummaryMemory from agentverse.message import Message from agentverse.parser import OutputParseError @@ -33,7 +38,9 @@ if openai.proxy is None: openai.proxy = os.environ.get("HTTP_PROXY") if openai.api_key is None: - logging.warning("OpenAI API key is not set. Please set the environment variable OPENAI_API_KEY") + logging.warning( + "OpenAI API key is not set. Please set the environment variable OPENAI_API_KEY" + ) is_openai_available = False else: is_openai_available = True @@ -41,7 +48,7 @@ class Agent(langchainAgent): """Action unit in the environment. - + Args: name: Name of the agent role_description: Description of the role of the agent @@ -51,6 +58,7 @@ class Agent(langchainAgent): tools: List of tools that the agent can use receiver: List of receivers of the messages generated by this agent """ + name: str role_description: str memory: ChatMessageHistory @@ -84,14 +92,14 @@ def get_receiver(self) -> List[str]: def set_receiver(self, receiver: List[str]) -> None: self.receiver = receiver - def step(self, env_description: str="") -> Message: + def step(self, env_description: str = "") -> Message: """Generate the next message""" executor = AgentExecutor.from_agent_and_tools( agent=self, tools=self.tools, verbose=True, return_intermediate_steps=True, - output_parser=self.output_parser + output_parser=self.output_parser, ) input_arguments = {"agent_name": self.name} if isinstance(self.llm_chain.llm, BaseChatModel): @@ -103,8 +111,8 @@ def step(self, env_description: str="") -> Message: else: raise ValueError(f"Unsupported LLM type: {self.llm_chain.llm}") - input_arguments['chat_history'] = chat_history - input_arguments['env_description'] = env_description + input_arguments["chat_history"] = chat_history + input_arguments["env_description"] = env_description response = None for i in range(self.max_retry): @@ -119,22 +127,22 @@ def step(self, env_description: str="") -> Message: raise ValueError(f"{self.name} failed to generate valid response.") message = Message( - content=response['output'], + content=response["output"], role="assistant", sender=self.name, receiver=self.get_receiver(), - tool_response=response['intermediate_steps'] + tool_response=response["intermediate_steps"], ) return message - async def astep(self, env_description: str="") -> Message: + async def astep(self, env_description: str = "") -> Message: """Asynchronous version of step""" executor = AgentExecutor.from_agent_and_tools( agent=self, tools=self.tools, verbose=True, return_intermediate_steps=True, - output_parser=self.output_parser + output_parser=self.output_parser, ) input_arguments = {"agent_name": self.name} if isinstance(self.llm_chain.llm, BaseChatModel): @@ -146,14 +154,14 @@ async def astep(self, env_description: str="") -> Message: else: raise ValueError(f"Unsupported LLM type: {self.llm_chain.llm}") if self.tool_memory is not None: - input_arguments['tool_memory'] = self.tool_memory.buffer + input_arguments["tool_memory"] = self.tool_memory.buffer - input_arguments['chat_history'] = chat_history - input_arguments['env_description'] = env_description + input_arguments["chat_history"] = chat_history + input_arguments["env_description"] = env_description if self.tool_memory is not None: - input_arguments['tool_memory'] = self.tool_memory.buffer + input_arguments["tool_memory"] = self.tool_memory.buffer else: - input_arguments['tool_memory'] = "" + input_arguments["tool_memory"] = "" response = None for i in range(self.max_retry): @@ -168,11 +176,11 @@ async def astep(self, env_description: str="") -> Message: logging.error(f"{self.name} failed to generate valid response.") message = Message( - content="" if response is None else response['output'], + content="" if response is None else response["output"], role="assistant", sender=self.name, receiver=self.get_receiver(), - tool_response=[] if response is None else response['intermediate_steps'] + tool_response=[] if response is None else response["intermediate_steps"], ) return message @@ -206,11 +214,13 @@ def create_prompt( SystemMessage(content=prefix_prompt), SystemMessage(content=format_prompt), SystemMessage(content=suffix_prompt), - MessagesPlaceholder(variable_name="chat_history") + MessagesPlaceholder(variable_name="chat_history"), ] if len(tools) > 0: messages.append(MessagesPlaceholder(variable_name="agent_scratchpad")) - return ChatPromptTemplate(input_variables=input_variables, messages=messages) + return ChatPromptTemplate( + input_variables=input_variables, messages=messages + ) elif isinstance(llm, BaseLLM): template = f"{prefix_prompt}\n\n{format_prompt}\n\n{suffix_prompt}" return PromptTemplate(input_variables=input_variables, template=template) @@ -226,7 +236,9 @@ def _construct_scratchpad( if isinstance(self.llm_chain.llm, BaseChatModel): thoughts.append(AIMessage(content=action.log.strip())) human_message = HumanMessage( - content="Tool response:\n{observation}".format(observation=observation) + content="Tool response:\n{observation}".format( + observation=observation + ) ) thoughts.append(human_message) elif isinstance(self.llm_chain.llm, BaseLLM): @@ -245,7 +257,7 @@ def from_llm_and_tools( format_prompt: str = "", suffix_prompt: str = "", input_variables: Optional[List[str]] = None, - **kwargs + **kwargs, ) -> langchainAgent: """Construct an agent from an LLM and tools.""" cls._validate_tools(tools) @@ -272,4 +284,4 @@ def from_llm_and_tools( ) def reset(self): - self.memory.clear() \ No newline at end of file + self.memory.clear() diff --git a/agentverse/agents/base.py b/agentverse/agents/base.py new file mode 100644 index 000000000..f4940390e --- /dev/null +++ b/agentverse/agents/base.py @@ -0,0 +1,78 @@ +import logging +from abc import abstractmethod +from typing import List, Set, Union + +from pydantic import BaseModel, Field + +from agentverse.llms import BaseLLM +from agentverse.memory import BaseMemory +from agentverse.message import Message +from agentverse.parser import OutputParser + + +class BaseAgent(BaseModel): + name: str + llm: BaseLLM + output_parser: OutputParser + prompt_template: str + role_description: str = Field(default="") + memory: BaseMemory = Field(default_factory=BaseMemory) + max_retry: int = Field(default=3) + receiver: Set[str] = Field(default=set({"all"})) + async_mode: bool = Field(default=True) + + @abstractmethod + def step(self, env_description: str = "") -> Message: + """Get one step response""" + pass + + @abstractmethod + def astep(self, env_description: str = "") -> Message: + """Asynchronous version of step""" + pass + + @abstractmethod + def reset(self) -> None: + """Reset the agent""" + pass + + @abstractmethod + def add_message_to_memory(self, message: Message) -> None: + """Add a message to the memory""" + pass + + def get_receiver(self) -> List[str]: + return self.receiver + + def set_receiver(self, receiver: Union[Set[str], str]) -> None: + if isinstance(receiver, str): + self.receiver = set({receiver}) + elif isinstance(receiver, set): + self.receiver = receiver + else: + raise ValueError( + "input argument `receiver` must be a string or a set of string" + ) + + def add_receiver(self, receiver: Union[Set[str], str]) -> None: + if isinstance(receiver, str): + self.receiver.add(receiver) + elif isinstance(receiver, set): + self.receiver = self.receiver.union(receiver) + else: + raise ValueError( + "input argument `receiver` must be a string or a set of string" + ) + + def remove_receiver(self, receiver: Union[Set[str], str]) -> None: + if isinstance(receiver, str): + try: + self.receiver.remove(receiver) + except KeyError as e: + logging.warning(f"Receiver {receiver} not found.") + elif isinstance(receiver, set): + self.receiver = self.receiver.difference(receiver) + else: + raise ValueError( + "input argument `receiver` must be a string or a set of string" + ) diff --git a/agentverse/agents/conversation_agent.py b/agentverse/agents/conversation_agent.py new file mode 100644 index 000000000..0c064ae09 --- /dev/null +++ b/agentverse/agents/conversation_agent.py @@ -0,0 +1,74 @@ +import logging +from string import Template +from typing import List, NamedTuple, Optional, Union + +from agentverse.llms import BaseChatModel, BaseCompletionModel, BaseLLM +from agentverse.memory import BaseMemory +from agentverse.message import Message +from agentverse.parser import OutputParseError, OutputParser +from .base import BaseAgent + + +class AgentAction(NamedTuple): + """Agent's action to take.""" + + tool: str + tool_input: Union[str, dict] + log: str + + +class AgentFinish(NamedTuple): + """Agent's return value.""" + + return_values: dict + log: str + + +class ConversationAgent(BaseAgent): + def step(self, env_description: str = "") -> Message: + pass + + async def astep(self, env_description: str = "") -> Message: + """Asynchronous version of step""" + prompt = self._fill_prompt_template(env_description) + + parsed_response = None + for i in range(self.max_retry): + try: + response = await self.llm.agenerate_response(prompt) + parsed_response = self.output_parser.parse(response) + break + except Exception as e: + logging.error(e) + logging.warning("Retrying...") + continue + + if parsed_response is None: + logging.error(f"{self.name} failed to generate valid response.") + + message = Message( + content="" + if parsed_response is None + else parsed_response.return_values["output"], + sender=self.name, + receiver=self.get_receiver(), + ) + return message + + def _fill_prompt_template(self, env_description: str = "") -> str: + input_arguments = { + "agent_name": self.name, + "env_description": env_description, + "role_description": self.role_description, + } + chat_history = self.memory.to_string(add_sender_prefix=True) + input_arguments["chat_history"] = chat_history + return Template(self.prompt_template).safe_substitute(input_arguments) + + def add_message_to_memory(self, message: Message) -> None: + self.memory.add_message(message) + + def reset(self) -> None: + """Reset the agent""" + self.memory.reset() + # TODO: reset receiver diff --git a/agentverse/agentverse.py b/agentverse/agentverse.py index 99a7b0133..0e8d90b1a 100644 --- a/agentverse/agentverse.py +++ b/agentverse/agentverse.py @@ -2,19 +2,23 @@ import logging from typing import List -from agentverse.agents import Agent +# from agentverse.agents import Agent +from agentverse.agents.conversation_agent import BaseAgent from agentverse.environments import BaseEnvironment -from agentverse.initialization import (load_agent, load_environment, - prepare_task_config) +from agentverse.initialization import load_agent, load_environment, prepare_task_config -logging.basicConfig(format='%(asctime)s - %(levelname)s - %(name)s - %(message)s', datefmt='%m/%d/%Y %H:%M:%S', level=logging.INFO) +logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", + datefmt="%m/%d/%Y %H:%M:%S", + level=logging.INFO, +) openai_logger = logging.getLogger("openai") openai_logger.setLevel(logging.WARNING) -class AgentVerse(): - def __init__(self, agents: List[Agent], environment: BaseEnvironment): +class AgentVerse: + def __init__(self, agents: List[BaseAgent], environment: BaseEnvironment): self.agents = agents self.environment = environment @@ -29,13 +33,13 @@ def from_task(cls, task: str): # Build the agents agents = [] - for agent_configs in task_config['agents']: + for agent_configs in task_config["agents"]: agent = load_agent(agent_configs) agents.append(agent) # Build the environment - env_config = task_config['environment'] - env_config['agents'] = agents + env_config = task_config["environment"] + env_config["agents"] = agents environment = load_environment(env_config) return cls(agents, environment) diff --git a/agentverse/environments/__init__.py b/agentverse/environments/__init__.py index 4dc494ac7..130fbed1b 100644 --- a/agentverse/environments/__init__.py +++ b/agentverse/environments/__init__.py @@ -1,5 +1,7 @@ from typing import Dict from agentverse.registry import Registry + env_registry = Registry(name="EnvironmentRegistry") from .base import BaseEnvironment +from .basic import BasicEnvironment diff --git a/agentverse/environments/base.py b/agentverse/environments/base.py index 334eaf147..27c61b530 100644 --- a/agentverse/environments/base.py +++ b/agentverse/environments/base.py @@ -1,20 +1,21 @@ import asyncio import logging from typing import Any, Dict, List +from abc import abstractmethod from pydantic import BaseModel -from agentverse.agents.agent import Agent +# from agentverse.agents.agent import Agent +from agentverse.agents.conversation_agent import BaseAgent from agentverse.environments.rules.base import Rule from agentverse.message import Message from . import env_registry as EnvironmentRegistry -@EnvironmentRegistry.register("base") class BaseEnvironment(BaseModel): """ - A basic environment implementing the logic of conversation. + Base class for environment. Args: agents: List of agents @@ -24,61 +25,23 @@ class BaseEnvironment(BaseModel): last_messages: Messages from last turn rule_params: Variables set by the rule """ - agents: List[Agent] + + agents: List[BaseAgent] rule: Rule max_turns: int = 10 cnt_turn: int = 0 last_messages: List[Message] = [] rule_params: Dict = {} - def __init__(self, rule, **kwargs): - rule_config = rule - order_config = rule_config.get('order', {'type': 'sequential'}) - visibility_config = rule_config.get('visibility', {'type': 'all'}) - selector_config = rule_config.get('selector', {'type': 'base'}) - updater_config = rule_config.get('updater', {'type': 'base'}) - describer_config = rule_config.get('describer', {'type': 'base'}) - rule = Rule(order_config, visibility_config, selector_config, updater_config, describer_config) - super().__init__(rule=rule, **kwargs) - + @abstractmethod async def step(self) -> List[Message]: """Run one step of the environment""" + pass - # Get the next agent index - agent_ids = self.rule.get_next_agent_idx(self) - - # Generate current environment description - env_descriptions = self.rule.get_env_description(self) - - # Generate the next message - messages = await asyncio.gather(*[self.agents[i].astep(env_descriptions[i]) for i in agent_ids]) - - # Some rules will select certain messages from all the messages - selected_messages = self.rule.select_message(self, messages) - self.last_messages = selected_messages - self.print_messages(selected_messages) - - # Update the memory of the agents - self.rule.update_memory(self) - - # Update the set of visible agents for each agent - self.rule.update_visible_agents(self) - - self.cnt_turn += 1 - - return selected_messages - - def print_messages(self, messages: List[Message]) -> None: - for message in messages: - if message is not None: - logging.info(f"{message.sender}: {message.content}") - + @abstractmethod def reset(self) -> None: """Reset the environment""" - self.cnt_turn = 0 - self.rule.reset() - for agent in self.agents: - agent.reset() + pass def is_done(self) -> bool: """Check if the environment is done""" diff --git a/agentverse/environments/basic.py b/agentverse/environments/basic.py new file mode 100644 index 000000000..3dacbbf42 --- /dev/null +++ b/agentverse/environments/basic.py @@ -0,0 +1,94 @@ +import asyncio +import logging +from typing import Any, Dict, List + +# from agentverse.agents.agent import Agent +from agentverse.agents.conversation_agent import BaseAgent +from agentverse.environments.rules.base import Rule +from agentverse.message import Message + +from . import env_registry as EnvironmentRegistry +from .base import BaseEnvironment + + +@EnvironmentRegistry.register("basic") +class BasicEnvironment(BaseEnvironment): + """ + A basic environment implementing the logic of conversation. + + Args: + agents: List of agents + rule: Rule for the environment + max_turns: Maximum number of turns + cnt_turn: Current turn number + last_messages: Messages from last turn + rule_params: Variables set by the rule + """ + + agents: List[BaseAgent] + rule: Rule + max_turns: int = 10 + cnt_turn: int = 0 + last_messages: List[Message] = [] + rule_params: Dict = {} + + def __init__(self, rule, **kwargs): + rule_config = rule + order_config = rule_config.get("order", {"type": "sequential"}) + visibility_config = rule_config.get("visibility", {"type": "all"}) + selector_config = rule_config.get("selector", {"type": "base"}) + updater_config = rule_config.get("updater", {"type": "base"}) + describer_config = rule_config.get("describer", {"type": "base"}) + rule = Rule( + order_config, + visibility_config, + selector_config, + updater_config, + describer_config, + ) + super().__init__(rule=rule, **kwargs) + + async def step(self) -> List[Message]: + """Run one step of the environment""" + + # Get the next agent index + agent_ids = self.rule.get_next_agent_idx(self) + + # Generate current environment description + env_descriptions = self.rule.get_env_description(self) + + # Generate the next message + messages = await asyncio.gather( + *[self.agents[i].astep(env_descriptions[i]) for i in agent_ids] + ) + + # Some rules will select certain messages from all the messages + selected_messages = self.rule.select_message(self, messages) + self.last_messages = selected_messages + self.print_messages(selected_messages) + + # Update the memory of the agents + self.rule.update_memory(self) + + # Update the set of visible agents for each agent + self.rule.update_visible_agents(self) + + self.cnt_turn += 1 + + return selected_messages + + def print_messages(self, messages: List[Message]) -> None: + for message in messages: + if message is not None: + logging.info(f"{message.sender}: {message.content}") + + def reset(self) -> None: + """Reset the environment""" + self.cnt_turn = 0 + self.rule.reset() + for agent in self.agents: + agent.reset() + + def is_done(self) -> bool: + """Check if the environment is done""" + return self.cnt_turn >= self.max_turns diff --git a/agentverse/environments/rules/describer/__init__.py b/agentverse/environments/rules/describer/__init__.py index a275126f3..7de6fe82f 100644 --- a/agentverse/environments/rules/describer/__init__.py +++ b/agentverse/environments/rules/describer/__init__.py @@ -1,5 +1,7 @@ from agentverse.registry import Registry + describer_registry = Registry(name="DescriberRegistry") from .base import BaseDescriber +from .basic import BasicDescriber from .classroom import ClassroomDescriber diff --git a/agentverse/environments/rules/describer/base.py b/agentverse/environments/rules/describer/base.py index 5fbaa1d97..3a51e09f5 100644 --- a/agentverse/environments/rules/describer/base.py +++ b/agentverse/environments/rules/describer/base.py @@ -5,16 +5,17 @@ from pydantic import BaseModel from . import describer_registry as DescriberRegistry +from abc import abstractmethod if TYPE_CHECKING: from agentverse.environments import BaseEnvironment -@DescriberRegistry.register("base") class BaseDescriber(BaseModel): + @abstractmethod def get_env_description(self, environment: BaseEnvironment) -> List[str]: """Return the environment description for each agent""" - return ["" for _ in range(len(environment.agents))] + pass def reset(self) -> None: pass diff --git a/agentverse/environments/rules/describer/basic.py b/agentverse/environments/rules/describer/basic.py new file mode 100644 index 000000000..20f6bd4f6 --- /dev/null +++ b/agentverse/environments/rules/describer/basic.py @@ -0,0 +1,16 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any, List + +from . import describer_registry as DescriberRegistry +from .base import BaseDescriber + +if TYPE_CHECKING: + from agentverse.environments import BaseEnvironment + + +@DescriberRegistry.register("basic") +class BasicDescriber(BaseDescriber): + def get_env_description(self, environment: BaseEnvironment) -> List[str]: + """Return the environment description for each agent""" + return ["" for _ in range(len(environment.agents))] diff --git a/agentverse/environments/rules/selector/__init__.py b/agentverse/environments/rules/selector/__init__.py index 2b713a5e6..da11bda59 100644 --- a/agentverse/environments/rules/selector/__init__.py +++ b/agentverse/environments/rules/selector/__init__.py @@ -1,5 +1,7 @@ from agentverse.registry import Registry + selector_registry = Registry(name="SelectorRegistry") from .base import BaseSelector -from .classroom import ClassroomSelector \ No newline at end of file +from .basic import BasicSelector +from .classroom import ClassroomSelector diff --git a/agentverse/environments/rules/selector/base.py b/agentverse/environments/rules/selector/base.py index bc69ac9c5..cc283870f 100644 --- a/agentverse/environments/rules/selector/base.py +++ b/agentverse/environments/rules/selector/base.py @@ -7,6 +7,7 @@ from agentverse.message import Message from . import selector_registry as SelectorRegistry +from abc import abstractmethod if TYPE_CHECKING: from agentverse.environments import BaseEnvironment @@ -17,9 +18,13 @@ class BaseSelector(BaseModel): """ Base class for all selecters """ - def select_message(self, environment: BaseEnvironment, messages: List[Message]) -> List[Message]: + + @abstractmethod + def select_message( + self, environment: BaseEnvironment, messages: List[Message] + ) -> List[Message]: """Selects a set of valid messages from all messages""" - return messages + pass def reset(self) -> None: - pass \ No newline at end of file + pass diff --git a/agentverse/environments/rules/selector/basic.py b/agentverse/environments/rules/selector/basic.py new file mode 100644 index 000000000..1ebc0b48b --- /dev/null +++ b/agentverse/environments/rules/selector/basic.py @@ -0,0 +1,27 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, List + +from agentverse.message import Message + +from . import selector_registry as SelectorRegistry +from .base import BaseSelector + +if TYPE_CHECKING: + from agentverse.environments import BaseEnvironment + + +@SelectorRegistry.register("basic") +class BasicSelector(BaseSelector): + """ + Base class for all selecters + """ + + def select_message( + self, environment: BaseEnvironment, messages: List[Message] + ) -> List[Message]: + """Selects a set of valid messages from all messages""" + return messages + + def reset(self) -> None: + pass diff --git a/agentverse/environments/rules/updater/__init__.py b/agentverse/environments/rules/updater/__init__.py index d8682db8c..81c30a37f 100644 --- a/agentverse/environments/rules/updater/__init__.py +++ b/agentverse/environments/rules/updater/__init__.py @@ -1,5 +1,7 @@ from agentverse.registry import Registry + updater_registry = Registry(name="UpdaterRegistry") from .base import BaseUpdater -from .classroom import ClassroomUpdater \ No newline at end of file +from .basic import BasicUpdater +from .classroom import ClassroomUpdater diff --git a/agentverse/environments/rules/updater/base.py b/agentverse/environments/rules/updater/base.py index ff6925c08..8dc593a16 100644 --- a/agentverse/environments/rules/updater/base.py +++ b/agentverse/environments/rules/updater/base.py @@ -5,8 +5,10 @@ from langchain.schema import AgentAction from pydantic import BaseModel -from agentverse.agents import Agent +# from agentverse.agents import Agent +from agentverse.agents import BaseAgent from agentverse.message import Message +from abc import abstractmethod from . import updater_registry as UpdaterRegistry @@ -17,50 +19,12 @@ @UpdaterRegistry.register("base") class BaseUpdater(BaseModel): """ - The basic version of updater. - The messages will be seen by all the receiver specified in the message. + The base class of updater class. """ - def update_memory(self, environment: BaseEnvironment): - added = False - for message in environment.last_messages: - if len(message.tool_response) > 0: - self.add_tool_response(message.sender, environment.agents, message.tool_response) - if message.content == "": - continue - added |= self.add_message_to_all_agents(environment.agents, message) - # If no one speaks in this turn. Add an empty message to all agents - if not added: - for agent in environment.agents: - agent.memory.add_user_message("[Silence]") - def add_tool_response(self, name: str, agents: List[Agent], tool_response: List[Tuple[AgentAction, str]]): - for agent in agents: - if agent.name != name: - continue - if agent.tool_memory is not None: - agent.tool_memory.save_context(tool_response) - break + @abstractmethod + def update_memory(self, environment: BaseEnvironment): + pass - def add_message_to_all_agents(self, agents: List[Agent], message: Message) -> bool: - if "all" in message.receiver: - # If receiver is all, then add the message to all agents - for agent in agents: - if agent.name != message.sender: - agent.memory.add_user_message(f'{message.sender}: ' + message.content) - else: - agent.memory.add_ai_message(f'{message.sender}: ' + message.content) - return True - else: - # If receiver is not all, then add the message to the specified agents - receiver_set = set(message.receiver) - for agent in agents: - if agent.name in receiver_set: - agent.memory.add_user_message(f'{message.sender}: ' + message.content) - receiver_set.remove(agent.name) - if len(receiver_set) > 0: - missing_receiver = ', '.join(list(receiver_set)) - raise ValueError("Receiver {} not found. Message discarded".format(missing_receiver)) - return True - def reset(self): - pass \ No newline at end of file + pass diff --git a/agentverse/environments/rules/updater/basic.py b/agentverse/environments/rules/updater/basic.py new file mode 100644 index 000000000..ec73bec2e --- /dev/null +++ b/agentverse/environments/rules/updater/basic.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, List, Tuple + +from . import updater_registry as UpdaterRegistry +from .base import BaseUpdater +from agentverse.agents import BaseAgent +from agentverse.message import AgentAction, Message + +if TYPE_CHECKING: + from agentverse.environments import BaseEnvironment + + +@UpdaterRegistry.register("basic") +class BasicUpdater(BaseUpdater): + """ + The basic version of updater. + The messages will be seen by all the receiver specified in the message. + """ + + def update_memory(self, environment: BaseEnvironment): + added = False + for message in environment.last_messages: + if len(message.tool_response) > 0: + self.add_tool_response( + message.sender, environment.agents, message.tool_response + ) + if message.content == "": + continue + added |= self.add_message_to_all_agents(environment.agents, message) + # If no one speaks in this turn. Add an empty message to all agents + if not added: + for agent in environment.agents: + agent.memory.add_user_message("[Silence]") + + def add_tool_response( + self, + name: str, + agents: List[BaseAgent], + tool_response: List[Tuple[AgentAction, str]], + ): + for agent in agents: + if agent.name != name: + continue + if agent.tool_memory is not None: + agent.tool_memory.save_context(tool_response) + break + + def add_message_to_all_agents( + self, agents: List[BaseAgent], message: Message + ) -> bool: + if "all" in message.receiver: + # If receiver is all, then add the message to all agents + for agent in agents: + agent.add_message_to_memory(message) + return True + else: + # If receiver is not all, then add the message to the specified agents + receiver_set = message.receiver + for agent in agents: + if agent.name in receiver_set: + agent.add_message_to_memory(message) + receiver_set.remove(agent.name) + if len(receiver_set) > 0: + missing_receiver = ", ".join(list(receiver_set)) + raise ValueError( + "Receiver {} not found. Message discarded".format(missing_receiver) + ) + return True diff --git a/agentverse/initialization.py b/agentverse/initialization.py index 7b989177b..34040f8f8 100644 --- a/agentverse/initialization.py +++ b/agentverse/initialization.py @@ -4,112 +4,115 @@ import yaml from bmtools.agent.singletool import import_all_apis, load_single_tools from langchain.agents import Agent as langchainAgent -from langchain.chat_models import ChatOpenAI -from langchain.chat_models.base import BaseChatModel -from langchain.llms import OpenAI -from langchain.llms.base import BaseLLM -from langchain.memory import ChatMessageHistory + +# from langchain.chat_models import ChatOpenAI +# from langchain.chat_models.base import BaseChatModel +# from langchain.llms import OpenAI +# from langchain.llms.base import BaseLLM +from agentverse.llms import OpenAICompletion, OpenAIChat + +# from langchain.memory import ChatMessageHistory from langchain.memory.prompt import _DEFAULT_SUMMARIZER_TEMPLATE from langchain.prompts import PromptTemplate -from agentverse.agents import Agent +# from agentverse.agents import Agent +from agentverse.agents.conversation_agent import BaseAgent +from agentverse.agents.conversation_agent import ConversationAgent from agentverse.environments import BaseEnvironment, env_registry -from agentverse.memory import SummaryMemory +from agentverse.memory import ChatHistoryMemory + +# from agentverse.memory.memory import SummaryMemory from agentverse.parser import output_parser_registry def load_llm(llm_config: Dict): - llm_type = llm_config.pop('llm_type', 'text-davinci-003') - if llm_type == 'gpt-3.5-turbo': - return ChatOpenAI(**llm_config) - elif llm_type == 'text-davinci-003': - return OpenAI(**llm_config) + llm_type = llm_config.pop("llm_type", "text-davinci-003") + if llm_type == "gpt-3.5-turbo": + return OpenAIChat(**llm_config) + elif llm_type == "text-davinci-003": + return OpenAICompletion(**llm_config) else: raise NotImplementedError("LLM type {} not implemented".format(llm_type)) + def load_memory(memory_config: Dict): memory_type = memory_config.pop("memory_type", "chat_message_history") - if memory_type == "chat_message_history": - return ChatMessageHistory() - elif memory_type == 'summary': - llm = load_llm(memory_config.pop('llm', 'text-davinci-003')) - prompt = memory_config.pop('prompt', _DEFAULT_SUMMARIZER_TEMPLATE) - memory_config['prompt'] = PromptTemplate( + if memory_type == "chat_history": + return ChatHistoryMemory() + elif memory_type == "summary": + llm = load_llm(memory_config.pop("llm", "text-davinci-003")) + prompt = memory_config.pop("prompt", _DEFAULT_SUMMARIZER_TEMPLATE) + memory_config["prompt"] = PromptTemplate( input_variables=["summary", "new_lines"], template=prompt ) return SummaryMemory(llm=llm, **memory_config) else: raise NotImplementedError("Memory type {} not implemented".format(memory_type)) - + + def load_tools(tool_config: List[Dict]): if len(tool_config) == 0: return [] all_tools_list = [] for tool in tool_config: - _, config = load_single_tools(tool['tool_name'], tool['tool_url']) + _, config = load_single_tools(tool["tool_name"], tool["tool_url"]) all_tools_list += import_all_apis(config) return all_tools_list + def load_environment(env_config: Dict) -> BaseEnvironment: - env_type = env_config.pop('env_type', 'base') + env_type = env_config.pop("env_type", "base") return env_registry.build(env_type, **env_config) + def load_agent(agent_config: Dict) -> langchainAgent: - agent_type = agent_config.pop('agent_type', 'chat') - if agent_type == "chat": - agent = Agent.from_llm_and_tools(**agent_config) + agent_type = agent_config.pop("agent_type", "conversation") + if agent_type == "conversation": + # agent = Agent.from_llm_and_tools(**agent_config) + agent = ConversationAgent(**agent_config) else: raise NotImplementedError("Agent type {} not found".format(agent_type)) return agent + def prepare_task_config(task): """Read the yaml config of the given task in `tasks` directory.""" - all_task_dir = os.path.join(os.path.dirname(__file__), 'tasks') + all_task_dir = os.path.join(os.path.dirname(__file__), "tasks") task_path = os.path.join(all_task_dir, task) - config_path = os.path.join(task_path, 'config.yaml') + config_path = os.path.join(task_path, "config.yaml") if not os.path.exists(task_path): all_tasks = [] for task in os.listdir(all_task_dir): - if os.path.isdir(os.path.join(all_task_dir, task)) \ - and task != "__pycache__": + if ( + os.path.isdir(os.path.join(all_task_dir, task)) + and task != "__pycache__" + ): all_tasks.append(task) raise ValueError(f"Task {task} not found. Available tasks: {all_tasks}") if not os.path.exists(config_path): - raise ValueError("You should include the config.yaml file in the task directory") + raise ValueError( + "You should include the config.yaml file in the task directory" + ) task_config = yaml.safe_load(open(config_path)) + # Build the output parser parser = output_parser_registry.build(task) - task_config['output_parser'] = parser - - for i, agent_configs in enumerate(task_config['agents']): - agent_configs['memory'] = load_memory(agent_configs['memory']) - if agent_configs.get('tool_memory', None) is not None: - agent_configs['tool_memory'] = load_memory(agent_configs['tool_memory']) - llm = load_llm(agent_configs['llm']) - agent_configs['llm'] = llm - agent_configs['tools'] = load_tools(agent_configs.get("tools", [])) - - # BaseLLM and its subclass will use .format to format the {chat_history} and {agent_scratchpad} during prompting - # so we have to keep the bracket {{ and }} in the description of the tools (will become { and } after formatting}) - # BaseChatModel and its subclass will not use .format, so we have to replace {{ and }} with { and } in the description of the tools - if isinstance(llm, BaseLLM): - tool_strings = "\n".join( - [f"> {tool.name}: {tool.description}" for tool in agent_configs['tools']] - ) - elif isinstance(llm, BaseChatModel): - tool_strings = "\n".join( - [f"> {tool.name}: {tool.description.replace('{{', '{').replace('}}', '}')}" for tool in agent_configs['tools']] - ) - else: - raise NotImplementedError("LLM type {} not supported".format(llm.__class__.__name__)) - - tool_names = ", ".join([tool.name for tool in agent_configs['tools']]) - # Here we assume that the description for tools only appears in prefix prompt with placeholder {tool} - # and we assume that format prompt contains the placeholder {tool_names} that tells the model - # which tools is available - # TODO: Improve the flexibility - agent_configs['output_parser'] = task_config['output_parser'] - agent_configs['prefix_prompt'] = agent_configs['prefix_prompt'] + '\n' + agent_configs['role_description'] - agent_configs['format_prompt'] = agent_configs['format_prompt'].format(tool_names=tool_names, tools=tool_strings) - - return task_config \ No newline at end of file + task_config["output_parser"] = parser + + for i, agent_configs in enumerate(task_config["agents"]): + agent_configs["memory"] = load_memory(agent_configs.get("memory", {})) + if agent_configs.get("tool_memory", None) is not None: + agent_configs["tool_memory"] = load_memory(agent_configs["tool_memory"]) + llm = load_llm(agent_configs.get("llm", "text-davinci-003")) + agent_configs["llm"] = llm + agent_configs["tools"] = load_tools(agent_configs.get("tools", [])) + + # tool_strings = "\n".join( + # [f"> {tool.name}: {tool.description}" for tool in agent_configs["tools"]] + # ) + + # tool_names = ", ".join([tool.name for tool in agent_configs["tools"]]) + + agent_configs["output_parser"] = task_config["output_parser"] + + return task_config diff --git a/agentverse/llms/__init__.py b/agentverse/llms/__init__.py new file mode 100644 index 000000000..eeebbc61b --- /dev/null +++ b/agentverse/llms/__init__.py @@ -0,0 +1,2 @@ +from .base import BaseLLM, BaseChatModel, BaseCompletionModel +from .openai import OpenAIChat, OpenAICompletion diff --git a/agentverse/llms/base.py b/agentverse/llms/base.py new file mode 100644 index 000000000..91d0b9114 --- /dev/null +++ b/agentverse/llms/base.py @@ -0,0 +1,30 @@ +from pydantic import BaseModel, Field +from abc import abstractmethod +from typing import Dict + +class LLMResult(BaseModel): + content: str + send_tokens: int + recv_tokens: int + total_tokens: int + +class BaseModelArgs(BaseModel): + pass + +class BaseLLM(BaseModel): + args: BaseModelArgs = Field(default_factory=BaseModelArgs) + max_retry: int = Field(default=3) + + @abstractmethod + def generate_response(self, **kwargs) -> LLMResult: + pass + + @abstractmethod + def agenerate_response(self, **kwargs) -> LLMResult: + pass + +class BaseChatModel(BaseLLM): + pass + +class BaseCompletionModel(BaseLLM): + pass \ No newline at end of file diff --git a/agentverse/llms/openai.py b/agentverse/llms/openai.py new file mode 100644 index 000000000..b74317615 --- /dev/null +++ b/agentverse/llms/openai.py @@ -0,0 +1,115 @@ +import logging +import os +from pydantic import Field, BaseModel +from typing import List, Optional, Union, Dict + +from agentverse.llms.base import LLMResult +from .base import BaseModelArgs, BaseChatModel, BaseCompletionModel + +try: + import openai + from openai.error import OpenAIError +except ImportError: + is_openai_available = False + logging.warning("openai package is not installed") +else: + openai.api_key = os.environ.get("OPENAI_API_KEY") + openai.proxy = os.environ.get("http_proxy") + if openai.proxy is None: + openai.proxy = os.environ.get("HTTP_PROXY") + if openai.api_key is None: + logging.warning( + "OpenAI API key is not set. Please set the environment variable OPENAI_API_KEY" + ) + is_openai_available = False + else: + is_openai_available = True + + +class OpenAIChatArgs(BaseModelArgs): + model: str = Field(default="gpt-3.5-turbo") + max_tokens: int = Field(default=2048) + temperature: float = Field(default=1.0) + top_p: int = Field(default=1) + n: int = Field(default=1) + stop: Optional[Union[str, List]] = Field(default=None) + presence_penalty: int = Field(default=0) + frequency_penalty: int = Field(default=0) + + +class OpenAICompletionArgs(OpenAIChatArgs): + model: str = Field(default="text-davinci-003") + suffix: str = Field(default="") + best_of: int = Field(default=1) + + +class OpenAICompletion(BaseCompletionModel): + args: OpenAICompletionArgs = Field(default_factory=OpenAICompletionArgs) + + def __init__(self, max_retry: int = 3, **kwargs): + args = OpenAICompletionArgs() + args = args.dict() + for k, v in args.items(): + args[k] = kwargs.pop(k, v) + if len(kwargs) > 0: + logging.warning(f"Unused arguments: {kwargs}") + super().__init__(args=args, max_retry=max_retry) + + def generate_response(self, prompt: str) -> LLMResult: + response = openai.Completion.create(prompt=prompt, **self.args.dict()) + return LLMResult( + content=response["choices"][0]["text"], + send_tokens=response["usage"]["prompt_tokens"], + recv_tokens=response["usage"]["completion_tokens"], + total_tokens=response["usage"]["total_tokens"], + ) + + async def agenerate_response(self, prompt: str) -> LLMResult: + response = await openai.Completion.acreate(prompt=prompt, **self.args.dict()) + return LLMResult( + content=response["choices"][0]["text"], + send_tokens=response["usage"]["prompt_tokens"], + recv_tokens=response["usage"]["completion_tokens"], + total_tokens=response["usage"]["total_tokens"], + ) + + +class OpenAIChat(BaseChatModel): + args: OpenAIChatArgs = Field(default_factory=OpenAIChatArgs) + + def __init__(self, max_retry: int = 3, **kwargs): + args = OpenAIChatArgs() + args = args.dict() + for k, v in args.items(): + args.k = kwargs.pop(k, v) + if len(kwargs) > 0: + logging.warning(f"Unused arguments: {kwargs}") + super().__init__(args=args, max_retry=max_retry) + + def _construct_messages(self, prompt: str): + return [{"role": "user", "content": prompt}] + + def generate_response(self, prompt: str) -> LLMResult: + messages = self._construct_messages(prompt) + response = openai.Completion.create(messages=messages, **self.args.dict()) + return LLMResult( + content=response["choices"][0]["message"]["content"], + send_tokens=response["usage"]["prompt_tokens"], + recv_tokens=response["usage"]["completion_tokens"], + total_tokens=response["usage"]["total_tokens"], + ) + + async def agenerate_response(self, prompt: str) -> LLMResult: + messages = self._construct_messages(prompt) + try: + response = await openai.Completion.acreate( + messages=messages, **self.args.dict() + ) + except OpenAIError as error: + raise + return LLMResult( + content=response["choices"][0]["message"]["content"], + send_tokens=response["usage"]["prompt_tokens"], + recv_tokens=response["usage"]["completion_tokens"], + total_tokens=response["usage"]["total_tokens"], + ) diff --git a/agentverse/memory.py b/agentverse/memory.py deleted file mode 100644 index f4969e853..000000000 --- a/agentverse/memory.py +++ /dev/null @@ -1,87 +0,0 @@ -# Modified from langchain.memory.summary.py - -from typing import Any, Dict, List, Tuple, Type, Union - -from langchain.base_language import BaseLanguageModel -from langchain.chains.llm import LLMChain -from langchain.memory.chat_memory import BaseChatMemory -from langchain.memory.prompt import SUMMARY_PROMPT -from langchain.prompts.base import BasePromptTemplate -from langchain.schema import (AgentAction, AIMessage, BaseMessage, ChatMessage, - SystemMessage, get_buffer_string) -from pydantic import BaseModel, root_validator - -from agentverse.message import Message - - -class SummarizerMixin(BaseModel): - llm: BaseLanguageModel - prompt: BasePromptTemplate = SUMMARY_PROMPT - summary_message_cls: Type[BaseMessage] = AIMessage - - def predict_new_summary( - self, messages: List[ChatMessage], existing_summary: str - ) -> str: - lines = [] - for message in messages: - if message.role == "": - # no role. it's tool responses - lines.append(message.content) - else: - lines.append(f"{message.role}: {message.content}") - new_lines = "\n".join(lines) - - chain = LLMChain(llm=self.llm, prompt=self.prompt) - return chain.predict(summary=existing_summary, new_lines=new_lines) - - -class SummaryMemory(BaseChatMemory, SummarizerMixin): - """Conversation summarizer to memory.""" - - buffer: str = "" - memory_key: str = "history" #: :meta private: - - @property - def memory_variables(self) -> List[str]: - """Will always return list of memory variables. - - :meta private: - """ - return [self.memory_key] - - def load_memory_variables(self, inputs: Dict[str, Any]) -> Dict[str, Any]: - """Return history buffer.""" - if self.return_messages: - buffer: Any = [self.summary_message_cls(content=self.buffer)] - else: - buffer = self.buffer - return {self.memory_key: buffer} - - @root_validator() - def validate_prompt_input_variables(cls, values: Dict) -> Dict: - """Validate that prompt input variables are consistent.""" - prompt_variables = values["prompt"].input_variables - expected_keys = {"summary", "new_lines"} - if expected_keys != set(prompt_variables): - raise ValueError( - "Got unexpected prompt input variables. The prompt expects " - f"{prompt_variables}, but it should have {expected_keys}." - ) - return values - - def save_context(self, contexts: Union[List[Tuple[AgentAction, str]], List[Message]]) -> None: - """Save context from this conversation to buffer.""" - for context in contexts: - if isinstance(context, Message): - self.chat_memory.messages.append(ChatMessage(content=context.content, role=context.sender)) - elif isinstance(context, tuple) and len(context) == 2 and \ - isinstance(context[0], AgentAction) and isinstance(context[1], str): - self.chat_memory.messages.append(ChatMessage(content=context[0].log.strip() + '\nObservation:' + context[1], role="")) - self.buffer = self.predict_new_summary( - self.chat_memory.messages[-len(contexts):], self.buffer - ) - - def clear(self) -> None: - """Clear memory contents.""" - super().clear() - self.buffer = "" diff --git a/agentverse/memory/__init__.py b/agentverse/memory/__init__.py new file mode 100644 index 000000000..3b8736868 --- /dev/null +++ b/agentverse/memory/__init__.py @@ -0,0 +1,2 @@ +from .base import BaseMemory +from .chat_history_message import ChatHistoryMemory diff --git a/agentverse/memory/base.py b/agentverse/memory/base.py new file mode 100644 index 000000000..5e86bad7f --- /dev/null +++ b/agentverse/memory/base.py @@ -0,0 +1,18 @@ +from pydantic import BaseModel, Field +from typing import List, Dict +from agentverse.message import Message +from abc import abstractmethod + + +class BaseMemory(BaseModel): + @abstractmethod + def add_message(self, message: Message) -> None: + pass + + @abstractmethod + def to_string(self) -> str: + pass + + @abstractmethod + def reset(self) -> None: + pass diff --git a/agentverse/memory/chat_history_message.py b/agentverse/memory/chat_history_message.py new file mode 100644 index 000000000..ac9bf9b9e --- /dev/null +++ b/agentverse/memory/chat_history_message.py @@ -0,0 +1,22 @@ +from .base import BaseMemory +from typing import List +from pydantic import Field +from agentverse.message import Message + + +class ChatHistoryMemory(BaseMemory): + messages: List[Message] = Field(default=[]) + + def add_message(self, message: Message) -> None: + self.messages.append(message) + + def to_string(self, add_sender_prefix: bool = False) -> str: + if add_sender_prefix: + return "\n".join( + [f"[{message.sender}]: {message.content}" for message in self.messages] + ) + else: + return "\n".join([message.content for message in self.messages]) + + def reset(self) -> None: + self.messages = [] diff --git a/agentverse/message.py b/agentverse/message.py index 2c4f3d273..1c92ec292 100644 --- a/agentverse/message.py +++ b/agentverse/message.py @@ -1,9 +1,11 @@ -from typing import List, Tuple +from pydantic import BaseModel, Field +from typing import List, Tuple, Set from langchain.schema import AgentAction, ChatMessage -class Message(ChatMessage): - sender: str - receiver: List[str] - tool_response: List[Tuple[AgentAction, str]] +class Message(BaseModel): + content: str = Field(default="") + sender: str = Field(default="") + receiver: Set[str] = Field(default=set({"all"})) + tool_response: List[Tuple[AgentAction, str]] = Field(default=[]) diff --git a/agentverse/parser.py b/agentverse/parser.py index 96b97757c..a06e8fc64 100644 --- a/agentverse/parser.py +++ b/agentverse/parser.py @@ -1,11 +1,25 @@ from agentverse.registry import Registry +from typing import NamedTuple +from abc import abstractmethod +from agentverse.llms.base import LLMResult +from pydantic import BaseModel output_parser_registry = Registry(name="OutputParserRegistry") + class OutputParseError(BaseException): """Exception raised when parsing output from a command fails.""" + def __init__(self, message): self.message = message def __str__(self): return "Failed to parse output of the model:%s\n " % self.message + + +class OutputParser(BaseModel): + """Base class for output parsers.""" + + @abstractmethod + def parse(self, output: LLMResult) -> NamedTuple: + pass diff --git a/agentverse/tasks/__init__.py b/agentverse/tasks/__init__.py index 59d68c992..4806ccea3 100644 --- a/agentverse/tasks/__init__.py +++ b/agentverse/tasks/__init__.py @@ -4,5 +4,8 @@ from .math_problem_2players_tools.output_parser import MathProblem2PlayersToolsParser from .nlp_classroom_3players.output_parser import NlpClassroom3PlayersParser from .nlp_classroom_9players.output_parser import NlpClassroom9PlayersParser -from .nlp_classroom_3players_withtool.output_parser import NlpClassroom3PlayersWithtoolParser +from .nlp_classroom_3players_withtool.output_parser import ( + NlpClassroom3PlayersWithtoolParser, +) from .nlp_classroom_9players_group.output_parser import NlpClassroom9PlayersGroupParser +from .nlp_classroom_3players_nolc.output_parser import NlpClassroom3PlayersNolcParser diff --git a/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml b/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml new file mode 100644 index 000000000..027d5ae79 --- /dev/null +++ b/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml @@ -0,0 +1,63 @@ +prompts: + prompt: &prompt |- + Assume that you are in a university classroom and it is Natural Language Processing module. You start by introducing themselves. Below is the description of your role. ${role_description} + + When responding, please output a response in the following format with two fields Action and Action Input: + Action: Speak + Action Input: (You should put what you want to speak use here) + + Here is the conversation history: + ${chat_history} + + You should now give your response based on the above history. Remember to give your response STRICTLY in the above response format. Do not add any additional field or line break to your response! + +name: NLP Classroom 3 Players + +environment: + env_type: basic + max_turns: 10 + rule: + order: + type: sequential + visibility: + type: all + selector: + type: basic + updater: + type: basic + describer: + type: basic + +agents: + - agent_type: conversation + name: Professor Micheal + role_description: You are Prof. Micheal, a knowledgeable professor in NLP. Your answer will concise and accurate. The answers should be less than 100 words. + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: text-davinci-003 + temperature: 0.7 + max_tokens: 250 + - agent_type: conversation + name: Student Beta + role_description: You are Beta, a student curious about Natural Language Processing and you want to learn some basic concepts of NLP. You know nothing about the area so you will ask lots of questions. + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: text-davinci-003 + temperature: 0.7 + max_tokens: 100 + - agent_type: conversation + name: Teaching Assistant Gamma + role_description: You are Gamma, a teaching assistant of the Natural Language Processing module. You mostly help with logistics and marking, but occasionally handles questions. Your answer should be less than 100 words. + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: text-davinci-003 + temperature: 0.7 + max_tokens: 100 + +tools: diff --git a/agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py b/agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py new file mode 100644 index 000000000..9ffd2f435 --- /dev/null +++ b/agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py @@ -0,0 +1,31 @@ +from __future__ import annotations + +import re +from typing import Union + +# from langchain.agents import AgentOutputParser +from agentverse.parser import OutputParser, LLMResult +from langchain.schema import AgentAction, AgentFinish + +from agentverse.parser import OutputParseError, output_parser_registry + + +@output_parser_registry.register("nlp_classroom_3players_nolc") +class NlpClassroom3PlayersNolcParser(OutputParser): + def parse(self, output: LLMResult) -> Union[AgentAction, AgentFinish]: + text = output.content + cleaned_output = text.strip() + cleaned_output = re.sub(r"\n+", "\n", cleaned_output) + cleaned_output = cleaned_output.split("\n") + if not ( + len(cleaned_output) == 2 + and cleaned_output[0].startswith("Action:") + and cleaned_output[1].startswith("Action Input:") + ): + raise OutputParseError(text) + action = cleaned_output[0][len("Action:") :].strip() + action_input = cleaned_output[1][len("Action Input:") :].strip() + if action == "Speak": + return AgentFinish({"output": action_input}, text) + else: + raise OutputParseError(text) From 7f379b7503dc539c9e355a53193a71530bab22d3 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Tue, 16 May 2023 23:13:10 +0800 Subject: [PATCH 02/39] fix bugs in initializing OpenAIChat model --- agentverse/llms/openai.py | 6 +++--- agentverse/tasks/nlp_classroom_3players_nolc/config.yaml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/agentverse/llms/openai.py b/agentverse/llms/openai.py index b74317615..4159e5bc1 100644 --- a/agentverse/llms/openai.py +++ b/agentverse/llms/openai.py @@ -81,7 +81,7 @@ def __init__(self, max_retry: int = 3, **kwargs): args = OpenAIChatArgs() args = args.dict() for k, v in args.items(): - args.k = kwargs.pop(k, v) + args[k] = kwargs.pop(k, v) if len(kwargs) > 0: logging.warning(f"Unused arguments: {kwargs}") super().__init__(args=args, max_retry=max_retry) @@ -91,7 +91,7 @@ def _construct_messages(self, prompt: str): def generate_response(self, prompt: str) -> LLMResult: messages = self._construct_messages(prompt) - response = openai.Completion.create(messages=messages, **self.args.dict()) + response = openai.ChatCompletion.create(messages=messages, **self.args.dict()) return LLMResult( content=response["choices"][0]["message"]["content"], send_tokens=response["usage"]["prompt_tokens"], @@ -102,7 +102,7 @@ def generate_response(self, prompt: str) -> LLMResult: async def agenerate_response(self, prompt: str) -> LLMResult: messages = self._construct_messages(prompt) try: - response = await openai.Completion.acreate( + response = await openai.ChatCompletion.acreate( messages=messages, **self.args.dict() ) except OpenAIError as error: diff --git a/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml b/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml index 027d5ae79..cf3a98f22 100644 --- a/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml +++ b/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml @@ -36,7 +36,7 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: text-davinci-003 + llm_type: gpt-3.5-turbo temperature: 0.7 max_tokens: 250 - agent_type: conversation @@ -46,7 +46,7 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: text-davinci-003 + llm_type: gpt-3.5-turbo temperature: 0.7 max_tokens: 100 - agent_type: conversation @@ -56,7 +56,7 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: text-davinci-003 + llm_type: gpt-3.5-turbo temperature: 0.7 max_tokens: 100 From 0f6d19cf0d2c01ae264d0f34a0886413afb72847 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Tue, 16 May 2023 23:23:44 +0800 Subject: [PATCH 03/39] add some comment --- agentverse/agents/base.py | 17 +++++++++- agentverse/agents/conversation_agent.py | 45 ++++++++++++++++--------- 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/agentverse/agents/base.py b/agentverse/agents/base.py index f4940390e..e9dc83449 100644 --- a/agentverse/agents/base.py +++ b/agentverse/agents/base.py @@ -1,6 +1,6 @@ import logging from abc import abstractmethod -from typing import List, Set, Union +from typing import List, Set, Union, NamedTuple from pydantic import BaseModel, Field @@ -10,6 +10,21 @@ from agentverse.parser import OutputParser +class AgentAction(NamedTuple): + """Agent's action to take.""" + + tool: str + tool_input: Union[str, dict] + log: str + + +class AgentFinish(NamedTuple): + """Agent's return value.""" + + return_values: dict + log: str + + class BaseAgent(BaseModel): name: str llm: BaseLLM diff --git a/agentverse/agents/conversation_agent.py b/agentverse/agents/conversation_agent.py index 0c064ae09..d492fc543 100644 --- a/agentverse/agents/conversation_agent.py +++ b/agentverse/agents/conversation_agent.py @@ -9,24 +9,32 @@ from .base import BaseAgent -class AgentAction(NamedTuple): - """Agent's action to take.""" - - tool: str - tool_input: Union[str, dict] - log: str - - -class AgentFinish(NamedTuple): - """Agent's return value.""" +class ConversationAgent(BaseAgent): + def step(self, env_description: str = "") -> Message: + prompt = self._fill_prompt_template(env_description) - return_values: dict - log: str + parsed_response = None + for i in range(self.max_retry): + try: + response = self.llm.generate_response(prompt) + parsed_response = self.output_parser.parse(response) + break + except Exception as e: + logging.error(e) + logging.warning("Retrying...") + continue + if parsed_response is None: + logging.error(f"{self.name} failed to generate valid response.") -class ConversationAgent(BaseAgent): - def step(self, env_description: str = "") -> Message: - pass + message = Message( + content="" + if parsed_response is None + else parsed_response.return_values["output"], + sender=self.name, + receiver=self.get_receiver(), + ) + return message async def astep(self, env_description: str = "") -> Message: """Asynchronous version of step""" @@ -56,6 +64,13 @@ async def astep(self, env_description: str = "") -> Message: return message def _fill_prompt_template(self, env_description: str = "") -> str: + """Fill the placeholders in the prompt template + + In the conversation agent, three placeholders are supported: + - ${agent_name}: the name of the agent + - ${env_description}: the description of the environment + - ${role_description}: the description of the role of the agent + """ input_arguments = { "agent_name": self.name, "env_description": env_description, From 6612930678b41f76a229ca928322377f68444ee4 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Wed, 17 May 2023 16:11:33 +0800 Subject: [PATCH 04/39] add tool agent --- agentverse/agents/__init__.py | 8 +- agentverse/agents/agent.py | 6 +- agentverse/agents/base.py | 2 +- agentverse/agents/conversation_agent.py | 8 +- agentverse/agents/tool_agent.py | 147 ++++++++++++++++++ .../environments/rules/updater/basic.py | 2 +- agentverse/initialization.py | 11 +- agentverse/llms/openai.py | 2 +- agentverse/memory/chat_history_message.py | 7 +- agentverse/parser.py | 2 +- agentverse/tasks/__init__.py | 3 + .../output_parser.py | 24 +-- .../config.yaml | 72 +++++++++ .../output_parser.py | 36 +++++ .../nlp_classroom_3players/output_parser.py | 21 +-- .../output_parser.py | 6 +- .../output_parser.py | 23 +-- .../nlp_classroom_9players/output_parser.py | 21 +-- .../output_parser.py | 21 +-- 19 files changed, 347 insertions(+), 75 deletions(-) create mode 100644 agentverse/agents/tool_agent.py create mode 100644 agentverse/tasks/math_problem_2players_tools_nolc/config.yaml create mode 100644 agentverse/tasks/math_problem_2players_tools_nolc/output_parser.py diff --git a/agentverse/agents/__init__.py b/agentverse/agents/__init__.py index 1192972cf..c5965b14e 100644 --- a/agentverse/agents/__init__.py +++ b/agentverse/agents/__init__.py @@ -1,2 +1,8 @@ # from .agent import Agent -from .conversation_agent import BaseAgent +from agentverse.registry import Registry + +agent_registry = Registry(name="AgentRegistry") + +from .base import BaseAgent +from .conversation_agent import ConversationAgent +from .tool_agent import ToolAgent diff --git a/agentverse/agents/agent.py b/agentverse/agents/agent.py index f68210063..da8f8fa7a 100644 --- a/agentverse/agents/agent.py +++ b/agentverse/agents/agent.py @@ -25,7 +25,7 @@ # from agentverse.memory.memory import SummaryMemory from agentverse.message import Message -from agentverse.parser import OutputParseError +from agentverse.parser import OutputParserError try: import openai @@ -119,7 +119,7 @@ def step(self, env_description: str = "") -> Message: try: response = executor(input_arguments) break - except OutputParseError as e: + except OutputParserError as e: print(e) print("Retrying...") continue @@ -168,7 +168,7 @@ async def astep(self, env_description: str = "") -> Message: try: response = await executor.acall(input_arguments) break - except OutputParseError as e: + except OutputParserError as e: print(e) print("Retrying...") continue diff --git a/agentverse/agents/base.py b/agentverse/agents/base.py index e9dc83449..be7761148 100644 --- a/agentverse/agents/base.py +++ b/agentverse/agents/base.py @@ -56,7 +56,7 @@ def add_message_to_memory(self, message: Message) -> None: """Add a message to the memory""" pass - def get_receiver(self) -> List[str]: + def get_receiver(self) -> Set[str]: return self.receiver def set_receiver(self, receiver: Union[Set[str], str]) -> None: diff --git a/agentverse/agents/conversation_agent.py b/agentverse/agents/conversation_agent.py index d492fc543..ca9608ec1 100644 --- a/agentverse/agents/conversation_agent.py +++ b/agentverse/agents/conversation_agent.py @@ -5,10 +5,12 @@ from agentverse.llms import BaseChatModel, BaseCompletionModel, BaseLLM from agentverse.memory import BaseMemory from agentverse.message import Message -from agentverse.parser import OutputParseError, OutputParser +from agentverse.parser import OutputParserError, OutputParser from .base import BaseAgent +from . import agent_registry +@agent_registry.register("conversation") class ConversationAgent(BaseAgent): def step(self, env_description: str = "") -> Message: prompt = self._fill_prompt_template(env_description) @@ -70,14 +72,14 @@ def _fill_prompt_template(self, env_description: str = "") -> str: - ${agent_name}: the name of the agent - ${env_description}: the description of the environment - ${role_description}: the description of the role of the agent + - ${chat_history}: the chat history of the agent """ input_arguments = { "agent_name": self.name, "env_description": env_description, "role_description": self.role_description, + "chat_history": self.memory.to_string(add_sender_prefix=True), } - chat_history = self.memory.to_string(add_sender_prefix=True) - input_arguments["chat_history"] = chat_history return Template(self.prompt_template).safe_substitute(input_arguments) def add_message_to_memory(self, message: Message) -> None: diff --git a/agentverse/agents/tool_agent.py b/agentverse/agents/tool_agent.py new file mode 100644 index 000000000..13907999c --- /dev/null +++ b/agentverse/agents/tool_agent.py @@ -0,0 +1,147 @@ +import logging +from pydantic import Field +from string import Template +from typing import List, NamedTuple, Optional, Union + +from agentverse.llms import BaseChatModel, BaseCompletionModel, BaseLLM +from agentverse.memory import BaseMemory, ChatHistoryMemory +from agentverse.message import Message +from agentverse.parser import OutputParserError, OutputParser +from .base import BaseAgent, AgentAction, AgentFinish +from langchain.tools import BaseTool +from . import agent_registry + + +class ToolNotExistError(BaseException): + """Exception raised when parsing output from a command fails.""" + + def __init__(self, tool_name=""): + self.tool_name = tool_name + + def __str__(self): + return f"Tool {self.tool_name} does not exist." + + +@agent_registry.register("tool") +class ToolAgent(BaseAgent): + tools: List[BaseTool] = Field(default=[]) + tool_memory: BaseMemory = Field(default_factory=ChatHistoryMemory) + verbose: bool = Field(default=False) + + def step(self, env_description: str = "") -> Message: + prompt = self._fill_prompt_template(env_description) + parsed_response = None + for i in range(self.max_retry): + try: + response = self.llm.generate_response(prompt) + parsed_response = self.output_parser.parse(response) + break + except Exception as e: + logging.error(e) + logging.warning("Retrying...") + continue + + if parsed_response is None: + logging.error(f"{self.name} failed to generate valid response.") + + message = Message( + content="" + if parsed_response is None + else parsed_response.return_values["output"], + sender=self.name, + receiver=self.get_receiver(), + ) + return message + + async def astep(self, env_description: str = "") -> Message: + """Asynchronous version of step""" + parsed_response = None + tool_observation = [] + while True: + prompt = self._fill_prompt_template(env_description, tool_observation) + + for i in range(self.max_retry): + try: + response = await self.llm.agenerate_response(prompt) + import pdb + + pdb.set_trace() + parsed_response = self.output_parser.parse(response) + break + except Exception as e: + logging.error(e) + logging.warning("Retrying...") + continue + if parsed_response is None: + break + if isinstance(parsed_response, AgentAction): + observation = await self._acall_tool(parsed_response) + tool_observation.append( + parsed_response.log.strip() + + f"\nObservation: {observation.strip()}" + ) + elif isinstance(parsed_response, AgentFinish): + break + + if parsed_response is None: + logging.error(f"{self.name} failed to generate valid response.") + + message = Message( + content="" + if parsed_response is None + else parsed_response.return_values["output"], + sender=self.name, + receiver=self.get_receiver(), + ) + return message + + def _call_tool(self, response: NamedTuple) -> str: + """Call a tool and return the output""" + name_to_tool = {tool.name: tool for tool in self.tools} + tool = name_to_tool[response.tool] + return tool.run(response.tool_input, verbose=self.verbose) + + async def _acall_tool(self, response: NamedTuple) -> str: + """Call a tool and return the output""" + name_to_tool = {tool.name: tool for tool in self.tools} + if response.tool not in name_to_tool: + raise ToolNotExistError(response.tool) + tool = name_to_tool[response.tool] + observation = await tool.arun(response.tool_input, verbose=self.verbose) + return observation + + def _fill_prompt_template( + self, env_description: str = "", tool_observation: List[str] = [] + ) -> str: + """Fill the placeholders in the prompt template + + In the tool agent, these placeholders are supported: + - ${agent_name}: the name of the agent + - ${env_description}: the description of the environment + - ${role_description}: the description of the role of the agent + - ${chat_history}: the chat history of the agent + - ${tools}: the list of tools and their usage + - ${tool_names}: the list of tool names + - ${tool_observations}: the observation of the tool in this turn + """ + tools = "\n".join([f"> {tool.name}: {tool.description}" for tool in self.tools]) + tools = tools.replace("{{", "{").replace("}}", "}") + tool_names = ", ".join([tool.name for tool in self.tools]) + input_arguments = { + "agent_name": self.name, + "env_description": env_description, + "role_description": self.role_description, + "chat_history": self.memory.to_string(add_sender_prefix=True), + "tools": tools, + "tool_names": tool_names, + "tool_observation": "\n".join(tool_observation), + } + return Template(self.prompt_template).safe_substitute(input_arguments) + + def add_message_to_memory(self, message: Message) -> None: + self.memory.add_message(message) + + def reset(self) -> None: + """Reset the agent""" + self.memory.reset() + # TODO: reset receiver diff --git a/agentverse/environments/rules/updater/basic.py b/agentverse/environments/rules/updater/basic.py index ec73bec2e..0604a8b30 100644 --- a/agentverse/environments/rules/updater/basic.py +++ b/agentverse/environments/rules/updater/basic.py @@ -31,7 +31,7 @@ def update_memory(self, environment: BaseEnvironment): # If no one speaks in this turn. Add an empty message to all agents if not added: for agent in environment.agents: - agent.memory.add_user_message("[Silence]") + agent.memory.add_message(Message(content="[Silence]")) def add_tool_response( self, diff --git a/agentverse/initialization.py b/agentverse/initialization.py index 34040f8f8..158e20b19 100644 --- a/agentverse/initialization.py +++ b/agentverse/initialization.py @@ -16,8 +16,7 @@ from langchain.prompts import PromptTemplate # from agentverse.agents import Agent -from agentverse.agents.conversation_agent import BaseAgent -from agentverse.agents.conversation_agent import ConversationAgent +from agentverse.agents import agent_registry from agentverse.environments import BaseEnvironment, env_registry from agentverse.memory import ChatHistoryMemory @@ -61,17 +60,13 @@ def load_tools(tool_config: List[Dict]): def load_environment(env_config: Dict) -> BaseEnvironment: - env_type = env_config.pop("env_type", "base") + env_type = env_config.pop("env_type", "basic") return env_registry.build(env_type, **env_config) def load_agent(agent_config: Dict) -> langchainAgent: agent_type = agent_config.pop("agent_type", "conversation") - if agent_type == "conversation": - # agent = Agent.from_llm_and_tools(**agent_config) - agent = ConversationAgent(**agent_config) - else: - raise NotImplementedError("Agent type {} not found".format(agent_type)) + agent = agent_registry.build(agent_type, **agent_config) return agent diff --git a/agentverse/llms/openai.py b/agentverse/llms/openai.py index 4159e5bc1..d6394cf21 100644 --- a/agentverse/llms/openai.py +++ b/agentverse/llms/openai.py @@ -32,7 +32,7 @@ class OpenAIChatArgs(BaseModelArgs): temperature: float = Field(default=1.0) top_p: int = Field(default=1) n: int = Field(default=1) - stop: Optional[Union[str, List]] = Field(default=None) + stop: Optional[Union[str, List]] = Field(default=["\nObservation:"]) presence_penalty: int = Field(default=0) frequency_penalty: int = Field(default=0) diff --git a/agentverse/memory/chat_history_message.py b/agentverse/memory/chat_history_message.py index ac9bf9b9e..a9ac6482b 100644 --- a/agentverse/memory/chat_history_message.py +++ b/agentverse/memory/chat_history_message.py @@ -13,7 +13,12 @@ def add_message(self, message: Message) -> None: def to_string(self, add_sender_prefix: bool = False) -> str: if add_sender_prefix: return "\n".join( - [f"[{message.sender}]: {message.content}" for message in self.messages] + [ + f"[{message.sender}]: {message.content}" + if message.sender != "" + else message.content + for message in self.messages + ] ) else: return "\n".join([message.content for message in self.messages]) diff --git a/agentverse/parser.py b/agentverse/parser.py index a06e8fc64..6fcef5394 100644 --- a/agentverse/parser.py +++ b/agentverse/parser.py @@ -7,7 +7,7 @@ output_parser_registry = Registry(name="OutputParserRegistry") -class OutputParseError(BaseException): +class OutputParserError(BaseException): """Exception raised when parsing output from a command fails.""" def __init__(self, message): diff --git a/agentverse/tasks/__init__.py b/agentverse/tasks/__init__.py index 4806ccea3..5f09f6073 100644 --- a/agentverse/tasks/__init__.py +++ b/agentverse/tasks/__init__.py @@ -9,3 +9,6 @@ ) from .nlp_classroom_9players_group.output_parser import NlpClassroom9PlayersGroupParser from .nlp_classroom_3players_nolc.output_parser import NlpClassroom3PlayersNolcParser +from .math_problem_2players_tools_nolc.output_parser import ( + MathProblem2PlayersToolsNolcParser, +) diff --git a/agentverse/tasks/math_problem_2players_tools/output_parser.py b/agentverse/tasks/math_problem_2players_tools/output_parser.py index 35916b53c..94a31045d 100644 --- a/agentverse/tasks/math_problem_2players_tools/output_parser.py +++ b/agentverse/tasks/math_problem_2players_tools/output_parser.py @@ -6,24 +6,26 @@ from langchain.agents import AgentOutputParser from langchain.schema import AgentAction, AgentFinish -from agentverse.parser import OutputParseError, output_parser_registry +from agentverse.parser import OutputParserError, output_parser_registry @output_parser_registry.register("math_problem_2players_tools") class MathProblem2PlayersToolsParser(AgentOutputParser): def parse(self, text: str) -> Union[AgentAction, AgentFinish]: - cleaned_output = text.strip() - cleaned_output = re.sub(r'\n+', '\n', cleaned_output) - cleaned_output = cleaned_output.split('\n') - if not (len(cleaned_output) == 2 and - # cleaned_output[0].startswith("THOUGHT:") and - cleaned_output[0].startswith("ACTION:") and - cleaned_output[1].startswith("ACTION INPUT:")): + cleaned_output = re.sub(r"\n+", "\n", cleaned_output) + cleaned_output = cleaned_output.split("\n") + if not ( + len(cleaned_output) == 2 + and + # cleaned_output[0].startswith("THOUGHT:") and + cleaned_output[0].startswith("ACTION:") + and cleaned_output[1].startswith("ACTION INPUT:") + ): print(text) - raise OutputParseError("Output Format Error") - action = cleaned_output[0][len("ACTION:"):].strip() - action_input = cleaned_output[1][len("ACTION INPUT:"):].strip() + raise OutputParserError("Output Format Error") + action = cleaned_output[0][len("ACTION:") :].strip() + action_input = cleaned_output[1][len("ACTION INPUT:") :].strip() if action in ["Speak"]: return AgentFinish({"output": action_input}, text) else: diff --git a/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml b/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml new file mode 100644 index 000000000..c68d9a2e0 --- /dev/null +++ b/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml @@ -0,0 +1,72 @@ +prompts: + prompt: &prompt |- + You are participating in a math enthusiast event where you will compete in a turn-based arithmetic challenge with another player. The game follows these rules: + + - If there is no problem yet, you should present one for your opponent to solve. + - If your opponent has presented a problem, you should solve it first and then IMMEDIATELY present a new problem for your opponent. + - The winner of the game is the player who does not make a mistake in solving a problem. Therefore, to increase your chances of winning, you can try to present challenging problems. + + During the game, you can use the following tools when necessary: + ${tools} + + When responding, please use the following two-line format: + + [Option 1]: When you need to use a tool, output in the following format (omit the "[]" bracket when responding) + ACTION: (a tool name, it can be one of [${tool_names}]) + ACTION INPUT: (input arguments for the tool) + + [Option 2]: When you watn to speak, you can use the following format: + ACTION: Speak + ACTION INPUT: (what you want to say in a single line) + + Here is the conversation history + ${chat_history} + + Here is the observations from tool execution: + ${tool_observation} + + Now the game starts! ${role_description} You should give your action based on the above history. Remember, you should ALWAYS give your response STRICTLY in the above response format with the TWO lines start with "ACTION:" and "ACTION INPUT:" respectively! + +tools: &tools + - tool_name: "wolframalpha" + tool_url: "http://127.0.0.1:8079/tools/wolframalpha/" + +environment: + env_type: basic + max_turns: 10 + rule: + order: + type: sequential + visibility: + type: all + selector: + type: basic + updater: + type: basic + describer: + type: basic + +agents: + - agent_type: tool + name: Alice + role_description: "You are Alice." + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-3.5-turbo + temperature: 0.7 + max_tokens: 250 + tools: *tools + + - agent_type: tool + name: Bob + role_description: "You are Bob." + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-3.5-turbo + temperature: 0.7 + max_tokens: 250 + tools: *tools diff --git a/agentverse/tasks/math_problem_2players_tools_nolc/output_parser.py b/agentverse/tasks/math_problem_2players_tools_nolc/output_parser.py new file mode 100644 index 000000000..d6940581e --- /dev/null +++ b/agentverse/tasks/math_problem_2players_tools_nolc/output_parser.py @@ -0,0 +1,36 @@ +from __future__ import annotations + +import re +from typing import Union + +from langchain.agents import AgentOutputParser + +# from langchain.schema import AgentAction, AgentFinish + +from agentverse.parser import OutputParserError, output_parser_registry, OutputParser +from agentverse.llms.base import LLMResult +from agentverse.agents.base import AgentAction, AgentFinish + + +@output_parser_registry.register("math_problem_2players_tools_nolc") +class MathProblem2PlayersToolsNolcParser(OutputParser): + def parse(self, output: LLMResult) -> Union[AgentAction, AgentFinish]: + text = output.content + cleaned_output = text.strip() + cleaned_output = re.sub(r"\n+", "\n", cleaned_output) + cleaned_output = cleaned_output.split("\n") + if not ( + len(cleaned_output) == 2 + and + # cleaned_output[0].startswith("THOUGHT:") and + cleaned_output[0].startswith("ACTION:") + and cleaned_output[1].startswith("ACTION INPUT:") + ): + print(text) + raise OutputParserError("Output Format Error") + action = cleaned_output[0][len("ACTION:") :].strip() + action_input = cleaned_output[1][len("ACTION INPUT:") :].strip() + if action == "Speak": + return AgentFinish({"output": action_input}, text) + else: + return AgentAction(action, action_input, text) diff --git a/agentverse/tasks/nlp_classroom_3players/output_parser.py b/agentverse/tasks/nlp_classroom_3players/output_parser.py index dbe090368..bff74231c 100644 --- a/agentverse/tasks/nlp_classroom_3players/output_parser.py +++ b/agentverse/tasks/nlp_classroom_3players/output_parser.py @@ -6,22 +6,23 @@ from langchain.agents import AgentOutputParser from langchain.schema import AgentAction, AgentFinish -from agentverse.parser import OutputParseError, output_parser_registry +from agentverse.parser import OutputParserError, output_parser_registry @output_parser_registry.register("nlp_classroom_3players") class NlpClassroom3PlayersParser(AgentOutputParser): def parse(self, text: str) -> Union[AgentAction, AgentFinish]: - cleaned_output = text.strip() - cleaned_output = re.sub(r'\n+', '\n', cleaned_output) - cleaned_output = cleaned_output.split('\n') - if not (len(cleaned_output) == 2 and - cleaned_output[0].startswith("Action:") and - cleaned_output[1].startswith("Action Input:")): - raise OutputParseError("Output Format Error") - action = cleaned_output[0][len("Action:"):].strip() - action_input = cleaned_output[1][len("Action Input:"):].strip() + cleaned_output = re.sub(r"\n+", "\n", cleaned_output) + cleaned_output = cleaned_output.split("\n") + if not ( + len(cleaned_output) == 2 + and cleaned_output[0].startswith("Action:") + and cleaned_output[1].startswith("Action Input:") + ): + raise OutputParserError("Output Format Error") + action = cleaned_output[0][len("Action:") :].strip() + action_input = cleaned_output[1][len("Action Input:") :].strip() if action in ["Speak", "Listen"]: return AgentFinish({"output": action_input}, text) else: diff --git a/agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py b/agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py index 9ffd2f435..6c086f977 100644 --- a/agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py +++ b/agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py @@ -7,7 +7,7 @@ from agentverse.parser import OutputParser, LLMResult from langchain.schema import AgentAction, AgentFinish -from agentverse.parser import OutputParseError, output_parser_registry +from agentverse.parser import OutputParserError, output_parser_registry @output_parser_registry.register("nlp_classroom_3players_nolc") @@ -22,10 +22,10 @@ def parse(self, output: LLMResult) -> Union[AgentAction, AgentFinish]: and cleaned_output[0].startswith("Action:") and cleaned_output[1].startswith("Action Input:") ): - raise OutputParseError(text) + raise OutputParserError(text) action = cleaned_output[0][len("Action:") :].strip() action_input = cleaned_output[1][len("Action Input:") :].strip() if action == "Speak": return AgentFinish({"output": action_input}, text) else: - raise OutputParseError(text) + raise OutputParserError(text) diff --git a/agentverse/tasks/nlp_classroom_3players_withtool/output_parser.py b/agentverse/tasks/nlp_classroom_3players_withtool/output_parser.py index f38075f2f..fbdddd0dd 100644 --- a/agentverse/tasks/nlp_classroom_3players_withtool/output_parser.py +++ b/agentverse/tasks/nlp_classroom_3players_withtool/output_parser.py @@ -6,23 +6,24 @@ from langchain.agents import AgentOutputParser from langchain.schema import AgentAction, AgentFinish -from agentverse.parser import OutputParseError, output_parser_registry +from agentverse.parser import OutputParserError, output_parser_registry @output_parser_registry.register("nlp_classroom_3players_withtool") class NlpClassroom3PlayersWithtoolParser(AgentOutputParser): def parse(self, text: str) -> Union[AgentAction, AgentFinish]: - cleaned_output = text.strip() - cleaned_output = re.sub(r'\n+', '\n', cleaned_output) - cleaned_output = cleaned_output.split('\n') - if not (len(cleaned_output) == 3 and - cleaned_output[0].startswith("Thought:") and - cleaned_output[1].startswith("Action:") and - cleaned_output[2].startswith("Action Input:")): - raise OutputParseError(text) - action = cleaned_output[1][len("Action:"):].strip() - action_input = cleaned_output[2][len("Action Input:"):].strip() + cleaned_output = re.sub(r"\n+", "\n", cleaned_output) + cleaned_output = cleaned_output.split("\n") + if not ( + len(cleaned_output) == 3 + and cleaned_output[0].startswith("Thought:") + and cleaned_output[1].startswith("Action:") + and cleaned_output[2].startswith("Action Input:") + ): + raise OutputParserError(text) + action = cleaned_output[1][len("Action:") :].strip() + action_input = cleaned_output[2][len("Action Input:") :].strip() if action in ["Speak"]: return AgentFinish({"output": action_input}, text) elif action == "CallOn": diff --git a/agentverse/tasks/nlp_classroom_9players/output_parser.py b/agentverse/tasks/nlp_classroom_9players/output_parser.py index c2f14c71d..59d0ad781 100644 --- a/agentverse/tasks/nlp_classroom_9players/output_parser.py +++ b/agentverse/tasks/nlp_classroom_9players/output_parser.py @@ -6,22 +6,23 @@ from langchain.agents import AgentOutputParser from langchain.schema import AgentAction, AgentFinish -from agentverse.parser import OutputParseError, output_parser_registry +from agentverse.parser import OutputParserError, output_parser_registry @output_parser_registry.register("nlp_classroom_9players") class NlpClassroom9PlayersParser(AgentOutputParser): def parse(self, text: str) -> Union[AgentAction, AgentFinish]: - cleaned_output = text.strip() - cleaned_output = re.sub(r'\n+', '\n', cleaned_output) - cleaned_output = cleaned_output.split('\n') - if not (len(cleaned_output) == 2 and - cleaned_output[0].startswith("Action:") and - cleaned_output[1].startswith("Action Input:")): - raise OutputParseError(text) - action = cleaned_output[0][len("Action:"):].strip() - action_input = cleaned_output[1][len("Action Input:"):].strip() + cleaned_output = re.sub(r"\n+", "\n", cleaned_output) + cleaned_output = cleaned_output.split("\n") + if not ( + len(cleaned_output) == 2 + and cleaned_output[0].startswith("Action:") + and cleaned_output[1].startswith("Action Input:") + ): + raise OutputParserError(text) + action = cleaned_output[0][len("Action:") :].strip() + action_input = cleaned_output[1][len("Action Input:") :].strip() if action in ["Speak"]: return AgentFinish({"output": action_input}, text) elif action == "CallOn": diff --git a/agentverse/tasks/nlp_classroom_9players_group/output_parser.py b/agentverse/tasks/nlp_classroom_9players_group/output_parser.py index 4ae555ef1..fb103b49c 100644 --- a/agentverse/tasks/nlp_classroom_9players_group/output_parser.py +++ b/agentverse/tasks/nlp_classroom_9players_group/output_parser.py @@ -6,22 +6,23 @@ from langchain.agents import AgentOutputParser from langchain.schema import AgentAction, AgentFinish -from agentverse.parser import OutputParseError, output_parser_registry +from agentverse.parser import OutputParserError, output_parser_registry @output_parser_registry.register("nlp_classroom_9players_group") class NlpClassroom9PlayersGroupParser(AgentOutputParser): def parse(self, text: str) -> Union[AgentAction, AgentFinish]: - cleaned_output = text.strip() - cleaned_output = re.sub(r'\n+', '\n', cleaned_output) - cleaned_output = cleaned_output.split('\n') - if not (len(cleaned_output) == 2 and - cleaned_output[0].startswith("Action:") and - cleaned_output[1].startswith("Action Input:")): - raise OutputParseError(text) - action = cleaned_output[0][len("Action:"):].strip() - action_input = cleaned_output[1][len("Action Input:"):].strip() + cleaned_output = re.sub(r"\n+", "\n", cleaned_output) + cleaned_output = cleaned_output.split("\n") + if not ( + len(cleaned_output) == 2 + and cleaned_output[0].startswith("Action:") + and cleaned_output[1].startswith("Action Input:") + ): + raise OutputParserError(text) + action = cleaned_output[0][len("Action:") :].strip() + action_input = cleaned_output[1][len("Action Input:") :].strip() if action == "Speak": return AgentFinish({"output": action_input}, text) elif action in ["CallOn", "RaiseHand", "GroupDiscuss"]: From a0e2add4f608a0eceaff17065f2fc78540641a54 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Wed, 17 May 2023 16:57:28 +0800 Subject: [PATCH 05/39] fix bugs in tool agent --- agentverse/agents/tool_agent.py | 66 +++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/agentverse/agents/tool_agent.py b/agentverse/agents/tool_agent.py index 13907999c..c4100b6de 100644 --- a/agentverse/agents/tool_agent.py +++ b/agentverse/agents/tool_agent.py @@ -29,21 +29,34 @@ class ToolAgent(BaseAgent): verbose: bool = Field(default=False) def step(self, env_description: str = "") -> Message: - prompt = self._fill_prompt_template(env_description) parsed_response = None - for i in range(self.max_retry): - try: - response = self.llm.generate_response(prompt) - parsed_response = self.output_parser.parse(response) + tool_observation = [self.tool_memory.to_string()] + while True: + prompt = self._fill_prompt_template(env_description, tool_observation) + + for i in range(self.max_retry): + try: + response = self.llm.generate_response(prompt) + parsed_response = self.output_parser.parse(response) + if isinstance(parsed_response, AgentAction): + observation = self._call_tool(parsed_response) + tool_observation.append( + parsed_response.log.strip() + + f"\nObservation: {observation.strip()}" + ) + break + except BaseException as e: + logging.error(e) + logging.warning("Retrying...") + continue + if parsed_response is None or isinstance(parsed_response, AgentFinish): break - except Exception as e: - logging.error(e) - logging.warning("Retrying...") - continue if parsed_response is None: logging.error(f"{self.name} failed to generate valid response.") + self._update_tool_memory(tool_observation) + message = Message( content="" if parsed_response is None @@ -56,36 +69,33 @@ def step(self, env_description: str = "") -> Message: async def astep(self, env_description: str = "") -> Message: """Asynchronous version of step""" parsed_response = None - tool_observation = [] + tool_observation = [self.tool_memory.to_string()] while True: prompt = self._fill_prompt_template(env_description, tool_observation) for i in range(self.max_retry): try: response = await self.llm.agenerate_response(prompt) - import pdb - - pdb.set_trace() parsed_response = self.output_parser.parse(response) + if isinstance(parsed_response, AgentAction): + observation = await self._acall_tool(parsed_response) + tool_observation.append( + parsed_response.log.strip() + + f"\nObservation: {observation.strip()}" + ) break - except Exception as e: + except BaseException as e: logging.error(e) logging.warning("Retrying...") continue - if parsed_response is None: - break - if isinstance(parsed_response, AgentAction): - observation = await self._acall_tool(parsed_response) - tool_observation.append( - parsed_response.log.strip() - + f"\nObservation: {observation.strip()}" - ) - elif isinstance(parsed_response, AgentFinish): + if parsed_response is None or isinstance(parsed_response, AgentFinish): break if parsed_response is None: logging.error(f"{self.name} failed to generate valid response.") + self._update_tool_memory(tool_observation) + message = Message( content="" if parsed_response is None @@ -98,8 +108,11 @@ async def astep(self, env_description: str = "") -> Message: def _call_tool(self, response: NamedTuple) -> str: """Call a tool and return the output""" name_to_tool = {tool.name: tool for tool in self.tools} + if response.tool not in name_to_tool: + raise ToolNotExistError(response.tool) tool = name_to_tool[response.tool] - return tool.run(response.tool_input, verbose=self.verbose) + observation = tool.arun(response.tool_input, verbose=self.verbose) + return observation async def _acall_tool(self, response: NamedTuple) -> str: """Call a tool and return the output""" @@ -110,6 +123,11 @@ async def _acall_tool(self, response: NamedTuple) -> str: observation = await tool.arun(response.tool_input, verbose=self.verbose) return observation + def _update_tool_memory(self, tool_observation: List[str]): + """Update the memory of the tool""" + for observation in tool_observation[1:]: + self.tool_memory.add_message(Message(content=observation)) + def _fill_prompt_template( self, env_description: str = "", tool_observation: List[str] = [] ) -> str: From 6b1a8c5205a5f6608ce24fe47e06802379509c1d Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Wed, 17 May 2023 17:44:30 +0800 Subject: [PATCH 06/39] add registry for memory and agent --- agentverse/agents/tool_agent.py | 6 ++++ agentverse/initialization.py | 31 +++++++------------ agentverse/llms/__init__.py | 4 +++ agentverse/llms/openai.py | 13 ++++++-- agentverse/memory/__init__.py | 4 +++ agentverse/memory/chat_history_message.py | 2 ++ .../config.yaml | 10 ++++-- 7 files changed, 45 insertions(+), 25 deletions(-) diff --git a/agentverse/agents/tool_agent.py b/agentverse/agents/tool_agent.py index c4100b6de..1a4158586 100644 --- a/agentverse/agents/tool_agent.py +++ b/agentverse/agents/tool_agent.py @@ -75,6 +75,9 @@ async def astep(self, env_description: str = "") -> Message: for i in range(self.max_retry): try: + import pdb + + pdb.set_trace() response = await self.llm.agenerate_response(prompt) parsed_response = self.output_parser.parse(response) if isinstance(parsed_response, AgentAction): @@ -112,6 +115,9 @@ def _call_tool(self, response: NamedTuple) -> str: raise ToolNotExistError(response.tool) tool = name_to_tool[response.tool] observation = tool.arun(response.tool_input, verbose=self.verbose) + import pdb + + pdb.set_trace() return observation async def _acall_tool(self, response: NamedTuple) -> str: diff --git a/agentverse/initialization.py b/agentverse/initialization.py index 158e20b19..c30740fdc 100644 --- a/agentverse/initialization.py +++ b/agentverse/initialization.py @@ -9,7 +9,7 @@ # from langchain.chat_models.base import BaseChatModel # from langchain.llms import OpenAI # from langchain.llms.base import BaseLLM -from agentverse.llms import OpenAICompletion, OpenAIChat +from agentverse.llms import OpenAICompletion, OpenAIChat, llm_registry # from langchain.memory import ChatMessageHistory from langchain.memory.prompt import _DEFAULT_SUMMARIZER_TEMPLATE @@ -18,7 +18,7 @@ # from agentverse.agents import Agent from agentverse.agents import agent_registry from agentverse.environments import BaseEnvironment, env_registry -from agentverse.memory import ChatHistoryMemory +from agentverse.memory import memory_registry # from agentverse.memory.memory import SummaryMemory from agentverse.parser import output_parser_registry @@ -26,27 +26,18 @@ def load_llm(llm_config: Dict): llm_type = llm_config.pop("llm_type", "text-davinci-003") - if llm_type == "gpt-3.5-turbo": - return OpenAIChat(**llm_config) - elif llm_type == "text-davinci-003": - return OpenAICompletion(**llm_config) - else: - raise NotImplementedError("LLM type {} not implemented".format(llm_type)) + # if llm_type == "gpt-3.5-turbo": + # return OpenAIChat(**llm_config) + # elif llm_type == "text-davinci-003": + # return OpenAICompletion(**llm_config) + # else: + # raise NotImplementedError("LLM type {} not implemented".format(llm_type)) + return llm_registry.build(llm_type, **llm_config) def load_memory(memory_config: Dict): - memory_type = memory_config.pop("memory_type", "chat_message_history") - if memory_type == "chat_history": - return ChatHistoryMemory() - elif memory_type == "summary": - llm = load_llm(memory_config.pop("llm", "text-davinci-003")) - prompt = memory_config.pop("prompt", _DEFAULT_SUMMARIZER_TEMPLATE) - memory_config["prompt"] = PromptTemplate( - input_variables=["summary", "new_lines"], template=prompt - ) - return SummaryMemory(llm=llm, **memory_config) - else: - raise NotImplementedError("Memory type {} not implemented".format(memory_type)) + memory_type = memory_config.pop("memory_type", "chat_history") + return memory_registry.build(memory_type, **memory_config) def load_tools(tool_config: List[Dict]): diff --git a/agentverse/llms/__init__.py b/agentverse/llms/__init__.py index eeebbc61b..c7a2b244c 100644 --- a/agentverse/llms/__init__.py +++ b/agentverse/llms/__init__.py @@ -1,2 +1,6 @@ +from agentverse.registry import Registry + +llm_registry = Registry(name="LLMRegistry") + from .base import BaseLLM, BaseChatModel, BaseCompletionModel from .openai import OpenAIChat, OpenAICompletion diff --git a/agentverse/llms/openai.py b/agentverse/llms/openai.py index d6394cf21..af2e666d2 100644 --- a/agentverse/llms/openai.py +++ b/agentverse/llms/openai.py @@ -5,6 +5,7 @@ from agentverse.llms.base import LLMResult from .base import BaseModelArgs, BaseChatModel, BaseCompletionModel +from . import llm_registry try: import openai @@ -32,7 +33,7 @@ class OpenAIChatArgs(BaseModelArgs): temperature: float = Field(default=1.0) top_p: int = Field(default=1) n: int = Field(default=1) - stop: Optional[Union[str, List]] = Field(default=["\nObservation:"]) + stop: Optional[Union[str, List]] = Field(default=None) presence_penalty: int = Field(default=0) frequency_penalty: int = Field(default=0) @@ -43,6 +44,7 @@ class OpenAICompletionArgs(OpenAIChatArgs): best_of: int = Field(default=1) +@llm_registry.register("text-davinci-003") class OpenAICompletion(BaseCompletionModel): args: OpenAICompletionArgs = Field(default_factory=OpenAICompletionArgs) @@ -74,6 +76,8 @@ async def agenerate_response(self, prompt: str) -> LLMResult: ) +@llm_registry.register("gpt-3.5-turbo") +@llm_registry.register("gpt-4") class OpenAIChat(BaseChatModel): args: OpenAIChatArgs = Field(default_factory=OpenAIChatArgs) @@ -91,7 +95,12 @@ def _construct_messages(self, prompt: str): def generate_response(self, prompt: str) -> LLMResult: messages = self._construct_messages(prompt) - response = openai.ChatCompletion.create(messages=messages, **self.args.dict()) + try: + response = openai.ChatCompletion.create( + messages=messages, **self.args.dict() + ) + except OpenAIError as error: + raise return LLMResult( content=response["choices"][0]["message"]["content"], send_tokens=response["usage"]["prompt_tokens"], diff --git a/agentverse/memory/__init__.py b/agentverse/memory/__init__.py index 3b8736868..8befbb77e 100644 --- a/agentverse/memory/__init__.py +++ b/agentverse/memory/__init__.py @@ -1,2 +1,6 @@ +from agentverse.registry import Registry + +memory_registry = Registry(name="MemoryRegistry") + from .base import BaseMemory from .chat_history_message import ChatHistoryMemory diff --git a/agentverse/memory/chat_history_message.py b/agentverse/memory/chat_history_message.py index a9ac6482b..40fec91dc 100644 --- a/agentverse/memory/chat_history_message.py +++ b/agentverse/memory/chat_history_message.py @@ -2,8 +2,10 @@ from typing import List from pydantic import Field from agentverse.message import Message +from . import memory_registry +@memory_registry.register("chat_history") class ChatHistoryMemory(BaseMemory): messages: List[Message] = Field(default=[]) diff --git a/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml b/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml index c68d9a2e0..d684fb2e2 100644 --- a/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml +++ b/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml @@ -15,7 +15,7 @@ prompts: ACTION: (a tool name, it can be one of [${tool_names}]) ACTION INPUT: (input arguments for the tool) - [Option 2]: When you watn to speak, you can use the following format: + [Option 2]: When you want to speak, you can use the following format: ACTION: Speak ACTION INPUT: (what you want to say in a single line) @@ -53,8 +53,10 @@ agents: memory: memory_type: chat_history prompt_template: *prompt + verbose: true llm: - llm_type: gpt-3.5-turbo + llm_type: text-davinci-003 + model: text-davinci-003 temperature: 0.7 max_tokens: 250 tools: *tools @@ -65,8 +67,10 @@ agents: memory: memory_type: chat_history prompt_template: *prompt + verbose: true llm: - llm_type: gpt-3.5-turbo + llm_type: text-davinci-003 + model: text-davinci-003 temperature: 0.7 max_tokens: 250 tools: *tools From 0600f97c835d75fbc33ac85f50649be7efda5c10 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Wed, 17 May 2023 21:08:05 +0800 Subject: [PATCH 07/39] add summary memory --- agentverse/agents/base.py | 17 +- agentverse/agents/conversation_agent.py | 4 +- agentverse/agents/tool_agent.py | 20 +- agentverse/environments/base.py | 11 +- agentverse/environments/rules/updater/base.py | 3 - .../environments/rules/updater/basic.py | 14 +- agentverse/initialization.py | 12 -- agentverse/memory/__init__.py | 3 +- agentverse/memory/base.py | 2 +- ...hat_history_message.py => chat_history.py} | 5 +- agentverse/memory/summary.py | 90 ++++++++ agentverse/message.py | 3 +- agentverse/tasks/__init__.py | 3 + .../output_parser.py | 4 +- .../config.yaml | 53 +++++ .../output_parser.py | 2 +- .../nlp_classroom_3players/output_parser.py | 4 +- .../output_parser.py | 4 +- .../output_parser.py | 4 +- .../config.yaml | 197 ++++++++++++++++++ .../output_parser.py | 40 ++++ .../nlp_classroom_9players/output_parser.py | 4 +- .../output_parser.py | 4 +- agentverse/utils.py | 16 ++ 24 files changed, 453 insertions(+), 66 deletions(-) rename agentverse/memory/{chat_history_message.py => chat_history.py} (85%) create mode 100644 agentverse/memory/summary.py create mode 100644 agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml create mode 100644 agentverse/tasks/nlp_classroom_3players_withtool_nolc/output_parser.py create mode 100644 agentverse/utils.py diff --git a/agentverse/agents/base.py b/agentverse/agents/base.py index be7761148..18663a47d 100644 --- a/agentverse/agents/base.py +++ b/agentverse/agents/base.py @@ -10,21 +10,6 @@ from agentverse.parser import OutputParser -class AgentAction(NamedTuple): - """Agent's action to take.""" - - tool: str - tool_input: Union[str, dict] - log: str - - -class AgentFinish(NamedTuple): - """Agent's return value.""" - - return_values: dict - log: str - - class BaseAgent(BaseModel): name: str llm: BaseLLM @@ -52,7 +37,7 @@ def reset(self) -> None: pass @abstractmethod - def add_message_to_memory(self, message: Message) -> None: + def add_message_to_memory(self, messages: List[Message]) -> None: """Add a message to the memory""" pass diff --git a/agentverse/agents/conversation_agent.py b/agentverse/agents/conversation_agent.py index ca9608ec1..045d96230 100644 --- a/agentverse/agents/conversation_agent.py +++ b/agentverse/agents/conversation_agent.py @@ -82,8 +82,8 @@ def _fill_prompt_template(self, env_description: str = "") -> str: } return Template(self.prompt_template).safe_substitute(input_arguments) - def add_message_to_memory(self, message: Message) -> None: - self.memory.add_message(message) + def add_message_to_memory(self, messages: List[Message]) -> None: + self.memory.add_message(messages) def reset(self) -> None: """Reset the agent""" diff --git a/agentverse/agents/tool_agent.py b/agentverse/agents/tool_agent.py index 1a4158586..efb89b4f8 100644 --- a/agentverse/agents/tool_agent.py +++ b/agentverse/agents/tool_agent.py @@ -7,8 +7,9 @@ from agentverse.memory import BaseMemory, ChatHistoryMemory from agentverse.message import Message from agentverse.parser import OutputParserError, OutputParser -from .base import BaseAgent, AgentAction, AgentFinish +from .base import BaseAgent from langchain.tools import BaseTool +from agentverse.utils import AgentAction, AgentFinish from . import agent_registry @@ -114,10 +115,7 @@ def _call_tool(self, response: NamedTuple) -> str: if response.tool not in name_to_tool: raise ToolNotExistError(response.tool) tool = name_to_tool[response.tool] - observation = tool.arun(response.tool_input, verbose=self.verbose) - import pdb - - pdb.set_trace() + observation = tool.run(response.tool_input, verbose=self.verbose) return observation async def _acall_tool(self, response: NamedTuple) -> str: @@ -131,8 +129,12 @@ async def _acall_tool(self, response: NamedTuple) -> str: def _update_tool_memory(self, tool_observation: List[str]): """Update the memory of the tool""" - for observation in tool_observation[1:]: - self.tool_memory.add_message(Message(content=observation)) + if len(tool_observation) == 1: + return + messages = [ + Message(content=observation) for observation in tool_observation[1:] + ] + self.tool_memory.add_message(messages) def _fill_prompt_template( self, env_description: str = "", tool_observation: List[str] = [] @@ -162,8 +164,8 @@ def _fill_prompt_template( } return Template(self.prompt_template).safe_substitute(input_arguments) - def add_message_to_memory(self, message: Message) -> None: - self.memory.add_message(message) + def add_message_to_memory(self, messages: List[Message]) -> None: + self.memory.add_message(messages) def reset(self) -> None: """Reset the agent""" diff --git a/agentverse/environments/base.py b/agentverse/environments/base.py index 27c61b530..ea471ee09 100644 --- a/agentverse/environments/base.py +++ b/agentverse/environments/base.py @@ -1,16 +1,17 @@ +from __future__ import annotations import asyncio import logging -from typing import Any, Dict, List +from typing import Any, Dict, List, TYPE_CHECKING from abc import abstractmethod from pydantic import BaseModel # from agentverse.agents.agent import Agent -from agentverse.agents.conversation_agent import BaseAgent -from agentverse.environments.rules.base import Rule -from agentverse.message import Message -from . import env_registry as EnvironmentRegistry +if TYPE_CHECKING: + from agentverse.environments.rules.base import Rule + from agentverse.message import Message + from agentverse.agents.base import BaseAgent class BaseEnvironment(BaseModel): diff --git a/agentverse/environments/rules/updater/base.py b/agentverse/environments/rules/updater/base.py index 8dc593a16..abd212875 100644 --- a/agentverse/environments/rules/updater/base.py +++ b/agentverse/environments/rules/updater/base.py @@ -2,12 +2,9 @@ from typing import TYPE_CHECKING, List, Tuple -from langchain.schema import AgentAction from pydantic import BaseModel # from agentverse.agents import Agent -from agentverse.agents import BaseAgent -from agentverse.message import Message from abc import abstractmethod from . import updater_registry as UpdaterRegistry diff --git a/agentverse/environments/rules/updater/basic.py b/agentverse/environments/rules/updater/basic.py index 0604a8b30..36c59a3ec 100644 --- a/agentverse/environments/rules/updater/basic.py +++ b/agentverse/environments/rules/updater/basic.py @@ -4,11 +4,11 @@ from . import updater_registry as UpdaterRegistry from .base import BaseUpdater -from agentverse.agents import BaseAgent -from agentverse.message import AgentAction, Message +from agentverse.message import Message if TYPE_CHECKING: from agentverse.environments import BaseEnvironment + from agentverse.agents import BaseAgent @UpdaterRegistry.register("basic") @@ -31,19 +31,19 @@ def update_memory(self, environment: BaseEnvironment): # If no one speaks in this turn. Add an empty message to all agents if not added: for agent in environment.agents: - agent.memory.add_message(Message(content="[Silence]")) + agent.add_message_to_memory([Message(content="[Silence]")]) def add_tool_response( self, name: str, agents: List[BaseAgent], - tool_response: List[Tuple[AgentAction, str]], + tool_response: List[str], ): for agent in agents: if agent.name != name: continue if agent.tool_memory is not None: - agent.tool_memory.save_context(tool_response) + agent.tool_memory.add_message(tool_response) break def add_message_to_all_agents( @@ -52,14 +52,14 @@ def add_message_to_all_agents( if "all" in message.receiver: # If receiver is all, then add the message to all agents for agent in agents: - agent.add_message_to_memory(message) + agent.add_message_to_memory([message]) return True else: # If receiver is not all, then add the message to the specified agents receiver_set = message.receiver for agent in agents: if agent.name in receiver_set: - agent.add_message_to_memory(message) + agent.add_message_to_memory([message]) receiver_set.remove(agent.name) if len(receiver_set) > 0: missing_receiver = ", ".join(list(receiver_set)) diff --git a/agentverse/initialization.py b/agentverse/initialization.py index c30740fdc..62118b4e7 100644 --- a/agentverse/initialization.py +++ b/agentverse/initialization.py @@ -26,12 +26,6 @@ def load_llm(llm_config: Dict): llm_type = llm_config.pop("llm_type", "text-davinci-003") - # if llm_type == "gpt-3.5-turbo": - # return OpenAIChat(**llm_config) - # elif llm_type == "text-davinci-003": - # return OpenAICompletion(**llm_config) - # else: - # raise NotImplementedError("LLM type {} not implemented".format(llm_type)) return llm_registry.build(llm_type, **llm_config) @@ -93,12 +87,6 @@ def prepare_task_config(task): agent_configs["llm"] = llm agent_configs["tools"] = load_tools(agent_configs.get("tools", [])) - # tool_strings = "\n".join( - # [f"> {tool.name}: {tool.description}" for tool in agent_configs["tools"]] - # ) - - # tool_names = ", ".join([tool.name for tool in agent_configs["tools"]]) - agent_configs["output_parser"] = task_config["output_parser"] return task_config diff --git a/agentverse/memory/__init__.py b/agentverse/memory/__init__.py index 8befbb77e..2ced03877 100644 --- a/agentverse/memory/__init__.py +++ b/agentverse/memory/__init__.py @@ -3,4 +3,5 @@ memory_registry = Registry(name="MemoryRegistry") from .base import BaseMemory -from .chat_history_message import ChatHistoryMemory +from .chat_history import ChatHistoryMemory +from .summary import SummaryMemory diff --git a/agentverse/memory/base.py b/agentverse/memory/base.py index 5e86bad7f..be83ad94a 100644 --- a/agentverse/memory/base.py +++ b/agentverse/memory/base.py @@ -6,7 +6,7 @@ class BaseMemory(BaseModel): @abstractmethod - def add_message(self, message: Message) -> None: + def add_message(self, messages: List[Message]) -> None: pass @abstractmethod diff --git a/agentverse/memory/chat_history_message.py b/agentverse/memory/chat_history.py similarity index 85% rename from agentverse/memory/chat_history_message.py rename to agentverse/memory/chat_history.py index 40fec91dc..d60b1dc98 100644 --- a/agentverse/memory/chat_history_message.py +++ b/agentverse/memory/chat_history.py @@ -9,8 +9,9 @@ class ChatHistoryMemory(BaseMemory): messages: List[Message] = Field(default=[]) - def add_message(self, message: Message) -> None: - self.messages.append(message) + def add_message(self, messages: List[Message]) -> None: + for message in messages: + self.messages.append(message) def to_string(self, add_sender_prefix: bool = False) -> str: if add_sender_prefix: diff --git a/agentverse/memory/summary.py b/agentverse/memory/summary.py new file mode 100644 index 000000000..04ac09fe7 --- /dev/null +++ b/agentverse/memory/summary.py @@ -0,0 +1,90 @@ +from string import Template +from typing import List +import re + +from pydantic import Field, validator + +from agentverse.llms.base import BaseLLM +from agentverse.message import Message +from agentverse.initialization import load_llm + +from . import memory_registry +from .base import BaseMemory + + +@memory_registry.register("summary") +class SummaryMemory(BaseMemory): + llm: BaseLLM + messages: List[Message] = Field(default=[]) + buffer: str = Field(default="") + recursive: bool = Field(default=False) + prompt_template: str = Field(default="") + + def __init__(self, *args, **kwargs): + llm_config = kwargs.pop("llm") + llm = load_llm(llm_config) + super().__init__(llm=llm, *args, **kwargs) + + @validator("prompt_template") + def check_prompt_template(cls, v, values): + """Check if the prompt template is valid. + When recursive is True, the prompt template should contain the following arguments: + - $summary: The summary so far. + - $new_lines: The new lines to be added to the summary. + + Otherwise, the prompt template should only contain $new_lines + """ + recursive = values.get("recursive") + summary_pat = re.compile(r"\$\{?summary\}?") + new_lines_pat = re.compile(r"\$\{?new_lines\}?") + if recursive: + if not summary_pat.search(v): + raise ValueError( + "When recursive is True, the prompt template should contain $summary." + ) + if not new_lines_pat.search(v): + raise ValueError( + "When recursive is True, the prompt template should contain $new_lines." + ) + else: + if summary_pat.search(v): + raise ValueError( + "When recursive is False, the prompt template should not contain $summary." + ) + if not new_lines_pat.search(v): + raise ValueError( + "When recursive is False, the prompt template should contain $new_lines." + ) + return v + + def add_message(self, messages: List[Message]) -> None: + import pdb + + pdb.set_trace() + new_lines = "\n".join([message.content for message in messages]) + self.update_buffer(new_lines) + + def update_buffer(self, new_message: str): + prompt = self._fill_in_prompt_template(new_message) + response = self.llm.generate_response(prompt) + if self.recursive: + self.buffer = response.content + else: + self.buffer = "\n" + response.content + + def _fill_in_prompt_template(self, new_lines: str) -> str: + """Fill in the prompt template with the given arguments. + + SummaryMemory supports the following arguments: + - summary: The summary so far. + - new_lines: The new lines to be added to the summary. + """ + input_arguments = {"summary": self.buffer, "new_lines": new_lines} + return Template(self.prompt_template).safe_substitute(input_arguments) + + def to_string(self, *args, **kwargs) -> str: + return self.buffer + + def reset(self) -> None: + self.messages = [] + self.buffer = "" diff --git a/agentverse/message.py b/agentverse/message.py index 1c92ec292..f1de1889b 100644 --- a/agentverse/message.py +++ b/agentverse/message.py @@ -1,7 +1,8 @@ from pydantic import BaseModel, Field from typing import List, Tuple, Set -from langchain.schema import AgentAction, ChatMessage +# from langchain.schema import AgentAction, ChatMessage +from agentverse.utils import AgentAction class Message(BaseModel): diff --git a/agentverse/tasks/__init__.py b/agentverse/tasks/__init__.py index 5f09f6073..c40ecc64c 100644 --- a/agentverse/tasks/__init__.py +++ b/agentverse/tasks/__init__.py @@ -12,3 +12,6 @@ from .math_problem_2players_tools_nolc.output_parser import ( MathProblem2PlayersToolsNolcParser, ) +from .nlp_classroom_3players_withtool_nolc.output_parser import ( + NlpClassroom3PlayersWithtoolNolcParser, +) diff --git a/agentverse/tasks/math_problem_2players_tools/output_parser.py b/agentverse/tasks/math_problem_2players_tools/output_parser.py index 94a31045d..6c5289693 100644 --- a/agentverse/tasks/math_problem_2players_tools/output_parser.py +++ b/agentverse/tasks/math_problem_2players_tools/output_parser.py @@ -4,7 +4,9 @@ from typing import Union from langchain.agents import AgentOutputParser -from langchain.schema import AgentAction, AgentFinish + +# from langchain.schema import AgentAction, AgentFinish +from agentverse.utils import AgentAction, AgentFinish from agentverse.parser import OutputParserError, output_parser_registry diff --git a/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml b/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml index d684fb2e2..d83b40ea1 100644 --- a/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml +++ b/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml @@ -27,6 +27,45 @@ prompts: Now the game starts! ${role_description} You should give your action based on the above history. Remember, you should ALWAYS give your response STRICTLY in the above response format with the TWO lines start with "ACTION:" and "ACTION INPUT:" respectively! + summary_prompt: &summary_prompt | + Progressively summarize the lines of a record that you uses tools, which contains inputs for certain tools and the results returned by these tools. Based on the current summary, you need to summarize from the record the goals that the you intended to solve with each call to the tool, add it onto the previous summary, and eventually return a new summary. + + EXAMPLE 1 + Current summary: + + New lines: + Action: getWolframAlphaResults + Action Input: {"input": "what is 5 x 7"} + Observation: "..." + + New summary: + - I search for 5 x 7, and I now know that the result is ... + END OF EXAMPLE 1 + + EXAMPLE 2 + Current summary: + - I search for 5 x 7, and I now know that the result is ... + + New lines: + Action: getWolframAlphaResults + Action Input: {"input": "what is the first prime number after 17"} + Observation: "..." + + New summary: + - I search for 5 x 7, and I now know that the result is ... + - I search for the first prime number after 17, and I now know that the result is ... + END OF EXAMPLE 2 + + Now, try to summarize the following record. + + Current summary: + ${summary} + + New lines: + ${new_lines} + + New summary: + tools: &tools - tool_name: "wolframalpha" tool_url: "http://127.0.0.1:8079/tools/wolframalpha/" @@ -52,6 +91,13 @@ agents: role_description: "You are Alice." memory: memory_type: chat_history + tool_memory: + memory_type: summary + llm: + llm_type: gpt-3.5-turbo + temperature: 0.7 + prompt_template: *summary_prompt + recursive: true prompt_template: *prompt verbose: true llm: @@ -66,6 +112,13 @@ agents: role_description: "You are Bob." memory: memory_type: chat_history + tool_memory: + memory_type: summary + llm: + llm_type: gpt-3.5-turbo + temperature: 0.7 + prompt_template: *summary_prompt + recursive: true prompt_template: *prompt verbose: true llm: diff --git a/agentverse/tasks/math_problem_2players_tools_nolc/output_parser.py b/agentverse/tasks/math_problem_2players_tools_nolc/output_parser.py index d6940581e..3679332ff 100644 --- a/agentverse/tasks/math_problem_2players_tools_nolc/output_parser.py +++ b/agentverse/tasks/math_problem_2players_tools_nolc/output_parser.py @@ -9,7 +9,7 @@ from agentverse.parser import OutputParserError, output_parser_registry, OutputParser from agentverse.llms.base import LLMResult -from agentverse.agents.base import AgentAction, AgentFinish +from agentverse.utils import AgentAction, AgentFinish @output_parser_registry.register("math_problem_2players_tools_nolc") diff --git a/agentverse/tasks/nlp_classroom_3players/output_parser.py b/agentverse/tasks/nlp_classroom_3players/output_parser.py index bff74231c..1b8724f79 100644 --- a/agentverse/tasks/nlp_classroom_3players/output_parser.py +++ b/agentverse/tasks/nlp_classroom_3players/output_parser.py @@ -4,7 +4,9 @@ from typing import Union from langchain.agents import AgentOutputParser -from langchain.schema import AgentAction, AgentFinish + +# from langchain.schema import AgentAction, AgentFinish +from agentverse.utils import AgentAction, AgentFinish from agentverse.parser import OutputParserError, output_parser_registry diff --git a/agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py b/agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py index 6c086f977..245dc3769 100644 --- a/agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py +++ b/agentverse/tasks/nlp_classroom_3players_nolc/output_parser.py @@ -5,7 +5,9 @@ # from langchain.agents import AgentOutputParser from agentverse.parser import OutputParser, LLMResult -from langchain.schema import AgentAction, AgentFinish + +# from langchain.schema import AgentAction, AgentFinish +from agentverse.utils import AgentAction, AgentFinish from agentverse.parser import OutputParserError, output_parser_registry diff --git a/agentverse/tasks/nlp_classroom_3players_withtool/output_parser.py b/agentverse/tasks/nlp_classroom_3players_withtool/output_parser.py index fbdddd0dd..2f4632d6d 100644 --- a/agentverse/tasks/nlp_classroom_3players_withtool/output_parser.py +++ b/agentverse/tasks/nlp_classroom_3players_withtool/output_parser.py @@ -4,7 +4,9 @@ from typing import Union from langchain.agents import AgentOutputParser -from langchain.schema import AgentAction, AgentFinish + +# from langchain.schema import AgentAction, AgentFinish +from agentverse.utils import AgentAction, AgentFinish from agentverse.parser import OutputParserError, output_parser_registry diff --git a/agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml b/agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml new file mode 100644 index 000000000..cab430034 --- /dev/null +++ b/agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml @@ -0,0 +1,197 @@ +prompts: + professor_prompt: &professor_prompt |- + You are in a university classroom and it is a lecture on the Transformer architecture of neural networks. ${role_description} + + # Rules and Format Instructions for Response + + - When you are speaking, you must use the following format: + Thought: (your thought) + Action: Speak + Action Input: (what you want to say) + + - When several students raise their hands, you can choose to call on ONE (and only one) of them using the following format: + Thought: (your thought) + Action: CallOn + Action Input: Yes, (one student's name) + + - Once you have called on a student and they have asked their question, it is your responsibility to provide an answer. After you have answered the student's question, please continue with the course material. + + - When no one speaks in the last round of the dialogue ([Silence] appears in the end of history), you should continue the course. + + - You should not answer the questions that have been already answered. + + - You must follow the following format with two fields "Action" and "Action Input" for your response in ANY case + Thought: (your thought) + Action: (an action name, it can be one of [Speak, Listen, CallOn]) + Action Input: (argument for the action) + + Here is the conversation history + ${chat_history} + + Remember to pay attention to the response format instructions, and strictly follow the rules specified above! + Based on the above history, what will you, ${agent_name}, do next? + + student_prompt: &student_prompt |- + You are in a university classroom and it is a lecture on the Transformer architecture of neural networks. ${role_description} + + # Rules and Format Instructions for Response + + - During class, you can listen to the professor by responding: + Thought: (your thought) + Action: Listen + Action Input: None + + - During class, you have access to the following tools: + ${tools} + + - You can respond as follows to use tool: + Thought: (your thought) + Action: (tool name) + Action Input: (input arguments for the tool) + + - Do not repeatly search for the same question. To obtain more information, you should try different tools or different input arguments when using tool. + + - If you have a question that cannot be resolved by the tools, you should first raise your hand using the following format to let the professor notice you: + Thought: (your thought) + Action: RaiseHand + Action Input: None + + if the professor does call on your name, you MUST speak or ask a question, and use the following format: + Thought: (your thought) + Action: Speak + Action Input: (what you want to ask or speak) + + If you raised your hand but are not called on, you should keep listening, or use a tool to solve the question yourself, or raise your hand again and wait for the professor to call on you. You are NOT allowed to speak if the professor does not call on you. Respect the discipline of the class!! + + - Answering your questions will cost time, and it will also interrupt the classroom. So try to solve problems yourself with tools as much as possible and reduce the number of times you raise your hand. + + - [IMPORTANT!] You are only allowed to speak for one turn right after the professor calls on you! You MUST NOT speak in any other cases! + + - Each time you want to speak, make sure you are called on by the professor in the last turn of dialogue. Otherwise you are not allowed to speak! Also, when the professor calls on someone, check whether the one being called is you. If so, you must speak. + + - You should respond in the following format: + Thought: (your thought) + Action: (an action name, it can be one of [${tool_names}, RaiseHand, Listen, Speak], pay attention to the capitalization) + Action Input: (argument for the action) + + Here is the execution log of tools + ${tool_observation} + + Here is the conversation history + ${chat_history} + + Remember to pay attention to the response format instructions, and strictly follow the rules specified above! + Based on the above history, what will you, ${agent_name}, do next? + + summary_prompt: &summary_prompt | + Progressively summarize the lines of a record that you uses tools, which contains inputs for certain tools and the results returned by these tools. Based on the current summary, you need to summarize from the record the goals that the you intended to solve with each call to the tool, add it onto the previous summary, and eventually return a new summary. + + EXAMPLE + Current summary: + + New lines: + Thought: I want to understand aaa + Action: search_top3 + Action Input: {"key_words": "aaa"} + Observation: "page: 1\ntitle: ...\n" + + New summary: + - I search for aaa, and I now know that bbb. + + Current summary: + - I search for aaa, and I now know that bbb. + + New lines: + Thought: I want to understand xxx + Action: search_top3 + Action Input: {"key_words": "xxx"} + Observation: "page: 1\ntitle: ...\n" + + New summary: + - I search for aaa, and I now know that bbb. + - I searched for xxx, and I now know that yyy. + END OF EXAMPLE + + Now, try to summarize the following record. + + Current summary: + ${summary} + + New lines: + ${new_lines} + + New summary: + +tools: &tools + - tool_name: bing_search, + tool_url: http://127.0.0.1:8079/tools/bing_search/ + +name: NLP Classroom 3 Players with Tools + +environment: + env_type: basic + max_turns: 30 + rule: + order: + type: classroom + visibility: + type: all + selector: + type: classroom + updater: + type: basic + describer: + type: basic + +agents: + - agent_type: conversation + name: Professor Micheal + role_description: |- + You are Professor Micheal, a knowledgeable professor in NLP. Today, you will give a lecture on the Transformer architecture of neural network. Here is the outline for today's course: + 1. Greet the students and introduce yourself to the students. + 2. Explain the disadvantages of RNN models. + 3. Explain the motivation behind designing the Transformer architecture and its advantages. + 4. Introduce pre-trained language models and why they are important. + 5. Provide an envision towards the future development of neural networks. + Your goal is to ensure that the students understand the material, so it's important to speak slowly and clearly. You don't necessarily have to strictly follow the course outline when teaching, you can also talk about some other relevant topics. Remember, in each round of conversation, your response should only address one topic at most. Please take your time and don't rush through the content. + prompt_template: *professor_prompt + llm: + llm_type: gpt-3.5-turbo + temperature: 0.7 + max_tokens: 250 + memory: + memory_type: chat_history + - agent_type: tool + name: Student Oliver + role_description: You are Oliver, a student curious about Natural Language Processing and you want to learn some basic concepts of NLP. You only have a very basic idea of what NLP is. + prompt_template: *student_prompt + memory: + memory_type: chat_history + tool_memory: + memory_type: summary + llm: + llm_type: gpt-3.5-turbo + temperature: 0.7 + prompt: *summary_prompt + llm: + llm_type: gpt-3.5-turbo + temperature: 0.7 + max_tokens: 100 + tools: *tools + - agent_type: tool + name: Student Amelia + role_description: You are Amelia, a shy student who struggles to keep up with the pace of the class. You have some background in computer science but find the concepts being taught in this class challenging. + prompt_template: *student_prompt + memory: + memory_type: chat_history + tool_memory: + memory_type: summary + llm: + llm_type: gpt-3.5-turbo + temperature: 0.7 + prompt: *summary_prompt + llm: + llm_type: gpt-3.5-turbo + temperature: 0.7 + max_tokens: 100 + tools: *tools diff --git a/agentverse/tasks/nlp_classroom_3players_withtool_nolc/output_parser.py b/agentverse/tasks/nlp_classroom_3players_withtool_nolc/output_parser.py new file mode 100644 index 000000000..df99e7b10 --- /dev/null +++ b/agentverse/tasks/nlp_classroom_3players_withtool_nolc/output_parser.py @@ -0,0 +1,40 @@ +from __future__ import annotations + +import re +from typing import Union + + +# from langchain.schema import AgentAction, AgentFinish +from agentverse.utils import AgentAction, AgentFinish + +from agentverse.parser import OutputParserError, output_parser_registry +from agentverse.parser import OutputParser +from agentverse.llms.base import LLMResult + + +@output_parser_registry.register("nlp_classroom_3players_withtool_nolc") +class NlpClassroom3PlayersWithtoolNolcParser(OutputParser): + def parse(self, output: LLMResult) -> Union[AgentAction, AgentFinish]: + text = output.content + cleaned_output = text.strip() + cleaned_output = re.sub(r"\n+", "\n", cleaned_output) + cleaned_output = cleaned_output.split("\n") + if not ( + len(cleaned_output) == 3 + and cleaned_output[0].startswith("Thought:") + and cleaned_output[1].startswith("Action:") + and cleaned_output[2].startswith("Action Input:") + ): + raise OutputParserError(text) + action = cleaned_output[1][len("Action:") :].strip() + action_input = cleaned_output[2][len("Action Input:") :].strip() + if action in ["Speak"]: + return AgentFinish({"output": action_input}, text) + elif action == "CallOn": + return AgentFinish({"output": "[CallOn] " + action_input}, text) + elif action == "RaiseHand": + return AgentFinish({"output": "[RaiseHand] " + action_input}, text) + elif action == "Listen": + return AgentFinish({"output": ""}, text) + else: + return AgentAction(action.lower(), action_input, text) diff --git a/agentverse/tasks/nlp_classroom_9players/output_parser.py b/agentverse/tasks/nlp_classroom_9players/output_parser.py index 59d0ad781..1ec1e2223 100644 --- a/agentverse/tasks/nlp_classroom_9players/output_parser.py +++ b/agentverse/tasks/nlp_classroom_9players/output_parser.py @@ -4,7 +4,9 @@ from typing import Union from langchain.agents import AgentOutputParser -from langchain.schema import AgentAction, AgentFinish + +# from langchain.schema import AgentAction, AgentFinish +from agentverse.utils import AgentAction, AgentFinish from agentverse.parser import OutputParserError, output_parser_registry diff --git a/agentverse/tasks/nlp_classroom_9players_group/output_parser.py b/agentverse/tasks/nlp_classroom_9players_group/output_parser.py index fb103b49c..19284776a 100644 --- a/agentverse/tasks/nlp_classroom_9players_group/output_parser.py +++ b/agentverse/tasks/nlp_classroom_9players_group/output_parser.py @@ -4,7 +4,9 @@ from typing import Union from langchain.agents import AgentOutputParser -from langchain.schema import AgentAction, AgentFinish + +# from langchain.schema import AgentAction, AgentFinish +from agentverse.utils import AgentAction, AgentFinish from agentverse.parser import OutputParserError, output_parser_registry diff --git a/agentverse/utils.py b/agentverse/utils.py new file mode 100644 index 000000000..e172f22e7 --- /dev/null +++ b/agentverse/utils.py @@ -0,0 +1,16 @@ +from typing import NamedTuple, Union + + +class AgentAction(NamedTuple): + """Agent's action to take.""" + + tool: str + tool_input: Union[str, dict] + log: str + + +class AgentFinish(NamedTuple): + """Agent's return value.""" + + return_values: dict + log: str From 46fe595808ebc3e3e9abc77f14bcddfea53bb138 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Wed, 17 May 2023 21:17:25 +0800 Subject: [PATCH 08/39] remove unnecessary codees --- agentverse/agents/tool_agent.py | 5 +---- agentverse/memory/summary.py | 3 --- .../math_problem_2players_tools_nolc/config.yaml | 14 -------------- 3 files changed, 1 insertion(+), 21 deletions(-) diff --git a/agentverse/agents/tool_agent.py b/agentverse/agents/tool_agent.py index efb89b4f8..a224ee3c0 100644 --- a/agentverse/agents/tool_agent.py +++ b/agentverse/agents/tool_agent.py @@ -76,9 +76,6 @@ async def astep(self, env_description: str = "") -> Message: for i in range(self.max_retry): try: - import pdb - - pdb.set_trace() response = await self.llm.agenerate_response(prompt) parsed_response = self.output_parser.parse(response) if isinstance(parsed_response, AgentAction): @@ -115,7 +112,7 @@ def _call_tool(self, response: NamedTuple) -> str: if response.tool not in name_to_tool: raise ToolNotExistError(response.tool) tool = name_to_tool[response.tool] - observation = tool.run(response.tool_input, verbose=self.verbose) + observation = tool.arun(response.tool_input, verbose=self.verbose) return observation async def _acall_tool(self, response: NamedTuple) -> str: diff --git a/agentverse/memory/summary.py b/agentverse/memory/summary.py index 04ac09fe7..604b39738 100644 --- a/agentverse/memory/summary.py +++ b/agentverse/memory/summary.py @@ -58,9 +58,6 @@ def check_prompt_template(cls, v, values): return v def add_message(self, messages: List[Message]) -> None: - import pdb - - pdb.set_trace() new_lines = "\n".join([message.content for message in messages]) self.update_buffer(new_lines) diff --git a/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml b/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml index d83b40ea1..23de64436 100644 --- a/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml +++ b/agentverse/tasks/math_problem_2players_tools_nolc/config.yaml @@ -91,13 +91,6 @@ agents: role_description: "You are Alice." memory: memory_type: chat_history - tool_memory: - memory_type: summary - llm: - llm_type: gpt-3.5-turbo - temperature: 0.7 - prompt_template: *summary_prompt - recursive: true prompt_template: *prompt verbose: true llm: @@ -112,13 +105,6 @@ agents: role_description: "You are Bob." memory: memory_type: chat_history - tool_memory: - memory_type: summary - llm: - llm_type: gpt-3.5-turbo - temperature: 0.7 - prompt_template: *summary_prompt - recursive: true prompt_template: *prompt verbose: true llm: From f598f2c8c286cc7c100b04b0a93e9ef529d413e3 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Wed, 17 May 2023 22:21:00 +0800 Subject: [PATCH 09/39] some code cleaning --- agentverse/agents/agent.py | 287 ------------------------ agentverse/agents/base.py | 6 +- agentverse/agents/conversation_agent.py | 8 +- agentverse/agents/tool_agent.py | 16 +- agentverse/environments/base.py | 7 +- agentverse/llms/base.py | 10 +- agentverse/llms/openai.py | 8 +- agentverse/memory/base.py | 6 +- agentverse/memory/chat_history.py | 5 +- agentverse/memory/summary.py | 4 +- 10 files changed, 42 insertions(+), 315 deletions(-) delete mode 100644 agentverse/agents/agent.py diff --git a/agentverse/agents/agent.py b/agentverse/agents/agent.py deleted file mode 100644 index da8f8fa7a..000000000 --- a/agentverse/agents/agent.py +++ /dev/null @@ -1,287 +0,0 @@ -import logging -import os -from typing import Any, List, Optional, Sequence, Tuple, Union - -from langchain.agents import AgentExecutor, AgentOutputParser -from langchain.agents.agent import Agent as langchainAgent -from langchain.agents.agent import AgentOutputParser -from langchain.agents.conversational_chat.output_parser import ConvoOutputParser -from langchain.base_language import BaseLanguageModel -from langchain.callbacks.base import BaseCallbackManager -from langchain.chains import LLMChain -from langchain.chat_models.base import BaseChatModel -from langchain.llms.base import BaseLLM -from langchain.memory import ChatMessageHistory -from langchain.prompts import BasePromptTemplate, PromptTemplate -from langchain.prompts.chat import ChatPromptTemplate, MessagesPlaceholder -from langchain.schema import ( - AgentAction, - AIMessage, - BaseMessage, - HumanMessage, - SystemMessage, -) -from langchain.tools.base import BaseTool - -# from agentverse.memory.memory import SummaryMemory -from agentverse.message import Message -from agentverse.parser import OutputParserError - -try: - import openai -except ImportError: - is_openai_available = False - logging.warning("openai package is not installed") -else: - openai.api_key = os.environ.get("OPENAI_API_KEY") - openai.proxy = os.environ.get("http_proxy") - if openai.proxy is None: - openai.proxy = os.environ.get("HTTP_PROXY") - if openai.api_key is None: - logging.warning( - "OpenAI API key is not set. Please set the environment variable OPENAI_API_KEY" - ) - is_openai_available = False - else: - is_openai_available = True - - -class Agent(langchainAgent): - """Action unit in the environment. - - Args: - name: Name of the agent - role_description: Description of the role of the agent - memory: Memory of the agent. This is used to store the chat history. - max_retry: Maximum number of retries when encountering an error during generation - tool_memory: Memory of the tools. This is used to store the observations from executing tools by this agent. - tools: List of tools that the agent can use - receiver: List of receivers of the messages generated by this agent - """ - - name: str - role_description: str - memory: ChatMessageHistory - max_retry: int = 3 - tool_memory: Optional[SummaryMemory] = None - tools: List[BaseTool] = [] - receiver: List[str] = ["all"] - input_variables: List[str] = ["chat_history", "agent_scratchpad"] - - @classmethod - def _get_default_output_parser(cls, **kwargs: Any) -> AgentOutputParser: - return ConvoOutputParser() - - @property - def _agent_type(self) -> str: - raise NotImplementedError - - @property - def observation_prefix(self) -> str: - """Prefix to append the observation with.""" - return "Observation: " - - @property - def llm_prefix(self) -> str: - """Prefix to append the llm call with.""" - return "" - - def get_receiver(self) -> List[str]: - return self.receiver - - def set_receiver(self, receiver: List[str]) -> None: - self.receiver = receiver - - def step(self, env_description: str = "") -> Message: - """Generate the next message""" - executor = AgentExecutor.from_agent_and_tools( - agent=self, - tools=self.tools, - verbose=True, - return_intermediate_steps=True, - output_parser=self.output_parser, - ) - input_arguments = {"agent_name": self.name} - if isinstance(self.llm_chain.llm, BaseChatModel): - chat_history = self.memory.messages - elif isinstance(self.llm_chain.llm, BaseLLM): - messages = self.memory.messages - chat_history = "\n".join([message.content for message in messages]) - chat_history += f"\n{self.name}: " - else: - raise ValueError(f"Unsupported LLM type: {self.llm_chain.llm}") - - input_arguments["chat_history"] = chat_history - input_arguments["env_description"] = env_description - - response = None - for i in range(self.max_retry): - try: - response = executor(input_arguments) - break - except OutputParserError as e: - print(e) - print("Retrying...") - continue - if response is None: - raise ValueError(f"{self.name} failed to generate valid response.") - - message = Message( - content=response["output"], - role="assistant", - sender=self.name, - receiver=self.get_receiver(), - tool_response=response["intermediate_steps"], - ) - return message - - async def astep(self, env_description: str = "") -> Message: - """Asynchronous version of step""" - executor = AgentExecutor.from_agent_and_tools( - agent=self, - tools=self.tools, - verbose=True, - return_intermediate_steps=True, - output_parser=self.output_parser, - ) - input_arguments = {"agent_name": self.name} - if isinstance(self.llm_chain.llm, BaseChatModel): - chat_history = self.memory.messages - elif isinstance(self.llm_chain.llm, BaseLLM): - messages = self.memory.messages - chat_history = "\n".join([message.content for message in messages]) - chat_history += f"\n{self.name}: " - else: - raise ValueError(f"Unsupported LLM type: {self.llm_chain.llm}") - if self.tool_memory is not None: - input_arguments["tool_memory"] = self.tool_memory.buffer - - input_arguments["chat_history"] = chat_history - input_arguments["env_description"] = env_description - if self.tool_memory is not None: - input_arguments["tool_memory"] = self.tool_memory.buffer - else: - input_arguments["tool_memory"] = "" - - response = None - for i in range(self.max_retry): - try: - response = await executor.acall(input_arguments) - break - except OutputParserError as e: - print(e) - print("Retrying...") - continue - if response is None: - logging.error(f"{self.name} failed to generate valid response.") - - message = Message( - content="" if response is None else response["output"], - role="assistant", - sender=self.name, - receiver=self.get_receiver(), - tool_response=[] if response is None else response["intermediate_steps"], - ) - return message - - @classmethod - def create_prompt( - cls, - llm: BaseLanguageModel, - tools: List[BaseTool], - prefix_prompt: str = "", - format_prompt: str = "", - suffix_prompt: str = "", - input_variables: Optional[List[str]] = None, - ) -> BasePromptTemplate: - """Create the prompt for the agent. - - Args: - llm: Language model to use. Following the interface of langchain.llms - tools: List of tools to use. Following the interface of langchain.tools - prefix_prompt: Introduce the scene - format_prompt: Specifying the format of the output and the rule of the environment - suffix_prompt: Telling the agent to response - input_variables: List of placeholder variable names in your prompt - """ - if input_variables is None: - if len(tools) > 0: - input_variables = ["chat_history", "agent_scratchpad"] - else: - input_variables = ["chat_history"] - if isinstance(llm, BaseChatModel): - messages = [ - SystemMessage(content=prefix_prompt), - SystemMessage(content=format_prompt), - SystemMessage(content=suffix_prompt), - MessagesPlaceholder(variable_name="chat_history"), - ] - if len(tools) > 0: - messages.append(MessagesPlaceholder(variable_name="agent_scratchpad")) - return ChatPromptTemplate( - input_variables=input_variables, messages=messages - ) - elif isinstance(llm, BaseLLM): - template = f"{prefix_prompt}\n\n{format_prompt}\n\n{suffix_prompt}" - return PromptTemplate(input_variables=input_variables, template=template) - else: - raise ValueError(f"Unsupported LLM type: {llm}") - - def _construct_scratchpad( - self, intermediate_steps: List[Tuple[AgentAction, str]] - ) -> Union[List[BaseMessage], str]: - """Construct the scratchpad that lets the agent continue its thought process.""" - thoughts = [] if isinstance(self.llm_chain.llm, BaseChatModel) else "" - for action, observation in intermediate_steps: - if isinstance(self.llm_chain.llm, BaseChatModel): - thoughts.append(AIMessage(content=action.log.strip())) - human_message = HumanMessage( - content="Tool response:\n{observation}".format( - observation=observation - ) - ) - thoughts.append(human_message) - elif isinstance(self.llm_chain.llm, BaseLLM): - thoughts += action.log.strip() - thoughts += "\n" + "Observation: " + observation - return thoughts - - @classmethod - def from_llm_and_tools( - cls, - llm: BaseLanguageModel, - tools: Sequence[BaseTool], - callback_manager: Optional[BaseCallbackManager] = None, - output_parser: Optional[AgentOutputParser] = None, - prefix_prompt: str = "", - format_prompt: str = "", - suffix_prompt: str = "", - input_variables: Optional[List[str]] = None, - **kwargs, - ) -> langchainAgent: - """Construct an agent from an LLM and tools.""" - cls._validate_tools(tools) - prompt = cls.create_prompt( - llm=llm, - tools=tools, - prefix_prompt=prefix_prompt, - format_prompt=format_prompt, - suffix_prompt=suffix_prompt, - input_variables=input_variables, - ) - llm_chain = LLMChain( - llm=llm, - prompt=prompt, - callback_manager=callback_manager, - ) - tool_names = [tool.name for tool in tools] - return cls( - llm_chain=llm_chain, - tools=tools, - allowed_tools=tool_names, - output_parser=output_parser, - **kwargs, - ) - - def reset(self): - self.memory.clear() diff --git a/agentverse/agents/base.py b/agentverse/agents/base.py index 18663a47d..13db010b7 100644 --- a/agentverse/agents/base.py +++ b/agentverse/agents/base.py @@ -1,11 +1,11 @@ import logging from abc import abstractmethod -from typing import List, Set, Union, NamedTuple +from typing import List, NamedTuple, Set, Union from pydantic import BaseModel, Field from agentverse.llms import BaseLLM -from agentverse.memory import BaseMemory +from agentverse.memory import BaseMemory, ChatHistoryMemory from agentverse.message import Message from agentverse.parser import OutputParser @@ -16,7 +16,7 @@ class BaseAgent(BaseModel): output_parser: OutputParser prompt_template: str role_description: str = Field(default="") - memory: BaseMemory = Field(default_factory=BaseMemory) + memory: BaseMemory = Field(default_factory=ChatHistoryMemory) max_retry: int = Field(default=3) receiver: Set[str] = Field(default=set({"all"})) async_mode: bool = Field(default=True) diff --git a/agentverse/agents/conversation_agent.py b/agentverse/agents/conversation_agent.py index 045d96230..4f7c927d6 100644 --- a/agentverse/agents/conversation_agent.py +++ b/agentverse/agents/conversation_agent.py @@ -1,13 +1,11 @@ import logging from string import Template -from typing import List, NamedTuple, Optional, Union +from typing import List -from agentverse.llms import BaseChatModel, BaseCompletionModel, BaseLLM -from agentverse.memory import BaseMemory from agentverse.message import Message -from agentverse.parser import OutputParserError, OutputParser -from .base import BaseAgent + from . import agent_registry +from .base import BaseAgent @agent_registry.register("conversation") diff --git a/agentverse/agents/tool_agent.py b/agentverse/agents/tool_agent.py index a224ee3c0..a95b8ce2d 100644 --- a/agentverse/agents/tool_agent.py +++ b/agentverse/agents/tool_agent.py @@ -1,16 +1,16 @@ import logging -from pydantic import Field from string import Template from typing import List, NamedTuple, Optional, Union -from agentverse.llms import BaseChatModel, BaseCompletionModel, BaseLLM +from langchain.tools import BaseTool +from pydantic import Field + from agentverse.memory import BaseMemory, ChatHistoryMemory from agentverse.message import Message -from agentverse.parser import OutputParserError, OutputParser -from .base import BaseAgent -from langchain.tools import BaseTool from agentverse.utils import AgentAction, AgentFinish + from . import agent_registry +from .base import BaseAgent class ToolNotExistError(BaseException): @@ -70,6 +70,7 @@ def step(self, env_description: str = "") -> Message: async def astep(self, env_description: str = "") -> Message: """Asynchronous version of step""" parsed_response = None + # Initialize the tool_observation with tool_memory tool_observation = [self.tool_memory.to_string()] while True: prompt = self._fill_prompt_template(env_description, tool_observation) @@ -79,6 +80,8 @@ async def astep(self, env_description: str = "") -> Message: response = await self.llm.agenerate_response(prompt) parsed_response = self.output_parser.parse(response) if isinstance(parsed_response, AgentAction): + # If the response is an action, call the tool + # and append the observation to tool_observation observation = await self._acall_tool(parsed_response) tool_observation.append( parsed_response.log.strip() @@ -112,7 +115,7 @@ def _call_tool(self, response: NamedTuple) -> str: if response.tool not in name_to_tool: raise ToolNotExistError(response.tool) tool = name_to_tool[response.tool] - observation = tool.arun(response.tool_input, verbose=self.verbose) + observation = tool.run(response.tool_input, verbose=self.verbose) return observation async def _acall_tool(self, response: NamedTuple) -> str: @@ -127,6 +130,7 @@ async def _acall_tool(self, response: NamedTuple) -> str: def _update_tool_memory(self, tool_observation: List[str]): """Update the memory of the tool""" if len(tool_observation) == 1: + # If no tool is called this turn, do nothing return messages = [ Message(content=observation) for observation in tool_observation[1:] diff --git a/agentverse/environments/base.py b/agentverse/environments/base.py index ea471ee09..e537a51b3 100644 --- a/agentverse/environments/base.py +++ b/agentverse/environments/base.py @@ -1,17 +1,16 @@ from __future__ import annotations -import asyncio -import logging -from typing import Any, Dict, List, TYPE_CHECKING + from abc import abstractmethod +from typing import TYPE_CHECKING, Any, Dict, List from pydantic import BaseModel # from agentverse.agents.agent import Agent if TYPE_CHECKING: + from agentverse.agents.base import BaseAgent from agentverse.environments.rules.base import Rule from agentverse.message import Message - from agentverse.agents.base import BaseAgent class BaseEnvironment(BaseModel): diff --git a/agentverse/llms/base.py b/agentverse/llms/base.py index 91d0b9114..644246cd3 100644 --- a/agentverse/llms/base.py +++ b/agentverse/llms/base.py @@ -1,16 +1,20 @@ -from pydantic import BaseModel, Field from abc import abstractmethod from typing import Dict +from pydantic import BaseModel, Field + + class LLMResult(BaseModel): content: str send_tokens: int recv_tokens: int total_tokens: int + class BaseModelArgs(BaseModel): pass + class BaseLLM(BaseModel): args: BaseModelArgs = Field(default_factory=BaseModelArgs) max_retry: int = Field(default=3) @@ -23,8 +27,10 @@ def generate_response(self, **kwargs) -> LLMResult: def agenerate_response(self, **kwargs) -> LLMResult: pass + class BaseChatModel(BaseLLM): pass + class BaseCompletionModel(BaseLLM): - pass \ No newline at end of file + pass diff --git a/agentverse/llms/openai.py b/agentverse/llms/openai.py index af2e666d2..e79b3c633 100644 --- a/agentverse/llms/openai.py +++ b/agentverse/llms/openai.py @@ -1,11 +1,13 @@ import logging import os -from pydantic import Field, BaseModel -from typing import List, Optional, Union, Dict +from typing import Dict, List, Optional, Union + +from pydantic import BaseModel, Field from agentverse.llms.base import LLMResult -from .base import BaseModelArgs, BaseChatModel, BaseCompletionModel + from . import llm_registry +from .base import BaseChatModel, BaseCompletionModel, BaseModelArgs try: import openai diff --git a/agentverse/memory/base.py b/agentverse/memory/base.py index be83ad94a..cec06e8f7 100644 --- a/agentverse/memory/base.py +++ b/agentverse/memory/base.py @@ -1,7 +1,9 @@ +from abc import abstractmethod +from typing import Dict, List + from pydantic import BaseModel, Field -from typing import List, Dict + from agentverse.message import Message -from abc import abstractmethod class BaseMemory(BaseModel): diff --git a/agentverse/memory/chat_history.py b/agentverse/memory/chat_history.py index d60b1dc98..aae5c9cb6 100644 --- a/agentverse/memory/chat_history.py +++ b/agentverse/memory/chat_history.py @@ -1,8 +1,11 @@ -from .base import BaseMemory from typing import List + from pydantic import Field + from agentverse.message import Message + from . import memory_registry +from .base import BaseMemory @memory_registry.register("chat_history") diff --git a/agentverse/memory/summary.py b/agentverse/memory/summary.py index 604b39738..84bd98393 100644 --- a/agentverse/memory/summary.py +++ b/agentverse/memory/summary.py @@ -1,12 +1,12 @@ +import re from string import Template from typing import List -import re from pydantic import Field, validator +from agentverse.initialization import load_llm from agentverse.llms.base import BaseLLM from agentverse.message import Message -from agentverse.initialization import load_llm from . import memory_registry from .base import BaseMemory From 2e523b9c41a9c0194610c6364ba1275b095bc7a7 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Wed, 17 May 2023 22:48:03 +0800 Subject: [PATCH 10/39] fix a bug in classroom_withtool example --- .../config.yaml | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml b/agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml index cab430034..bee7f9c0a 100644 --- a/agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml +++ b/agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml @@ -7,7 +7,7 @@ prompts: - When you are speaking, you must use the following format: Thought: (your thought) Action: Speak - Action Input: (what you want to say) + Action Input: (what you want to say in without line break) - When several students raise their hands, you can choose to call on ONE (and only one) of them using the following format: Thought: (your thought) @@ -39,7 +39,7 @@ prompts: - During class, you can listen to the professor by responding: Thought: (your thought) Action: Listen - Action Input: None + Action Input: "None" - During class, you have access to the following tools: ${tools} @@ -54,7 +54,7 @@ prompts: - If you have a question that cannot be resolved by the tools, you should first raise your hand using the following format to let the professor notice you: Thought: (your thought) Action: RaiseHand - Action Input: None + Action Input: "None" if the professor does call on your name, you MUST speak or ask a question, and use the following format: Thought: (your thought) @@ -156,11 +156,12 @@ agents: Your goal is to ensure that the students understand the material, so it's important to speak slowly and clearly. You don't necessarily have to strictly follow the course outline when teaching, you can also talk about some other relevant topics. Remember, in each round of conversation, your response should only address one topic at most. Please take your time and don't rush through the content. prompt_template: *professor_prompt llm: - llm_type: gpt-3.5-turbo + llm_type: text-davinci-003 temperature: 0.7 max_tokens: 250 memory: memory_type: chat_history + verbose: true - agent_type: tool name: Student Oliver role_description: You are Oliver, a student curious about Natural Language Processing and you want to learn some basic concepts of NLP. You only have a very basic idea of what NLP is. @@ -172,12 +173,14 @@ agents: llm: llm_type: gpt-3.5-turbo temperature: 0.7 - prompt: *summary_prompt + prompt_template: *summary_prompt + recursive: true llm: - llm_type: gpt-3.5-turbo + llm_type: text-davinci-003 temperature: 0.7 max_tokens: 100 tools: *tools + verbose: true - agent_type: tool name: Student Amelia role_description: You are Amelia, a shy student who struggles to keep up with the pace of the class. You have some background in computer science but find the concepts being taught in this class challenging. @@ -189,9 +192,11 @@ agents: llm: llm_type: gpt-3.5-turbo temperature: 0.7 - prompt: *summary_prompt + prompt_template: *summary_prompt + recursive: true llm: - llm_type: gpt-3.5-turbo + llm_type: text-davinci-003 temperature: 0.7 max_tokens: 100 tools: *tools + verbose: true From 6f390046c99c74aa5173d315b4c473a27c1cd624 Mon Sep 17 00:00:00 2001 From: Yusheng Su Date: Thu, 18 May 2023 10:10:37 +0800 Subject: [PATCH 11/39] add ui --- ui/.github/CODE_OF_CONDUCT.md | 84 + ui/.github/CONTRIBUTING.md | 80 + ui/.github/FUNDING.yml | 5 + ui/.github/no-response.yml | 14 + ui/.gitignore | 13 + ui/LICENSE | 21 + ui/README.md | 49 + ui/package-lock.json | 2652 ++ ui/package.json | 34 + ui/raw/map.tmx | 40124 +++++++++++++++++++++++++++++ ui/raw/npc1.psd | Bin 0 -> 57032 bytes ui/rollup.config.dev.mjs | 75 + ui/rollup.config.dist.mjs | 65 + ui/run.sh | 4 + ui/screenshot.png | Bin 0 -> 191593 bytes ui/src/classes/actor.ts | 41 + ui/src/classes/message.ts | 31 + ui/src/classes/npc.ts | 45 + ui/src/classes/player.ts | 87 + ui/src/classes/text.ts | 18 + ui/src/conversation.ts | 3 + ui/src/index.ts | 60 + ui/src/scenes/index.ts | 3 + ui/src/scenes/loading/loading.ts | 45 + ui/src/scenes/message/message.ts | 14 + ui/src/scenes/town/town.ts | 85 + ui/tsconfig.json | 9 + 27 files changed, 43661 insertions(+) create mode 100644 ui/.github/CODE_OF_CONDUCT.md create mode 100644 ui/.github/CONTRIBUTING.md create mode 100644 ui/.github/FUNDING.yml create mode 100644 ui/.github/no-response.yml create mode 100644 ui/.gitignore create mode 100644 ui/LICENSE create mode 100644 ui/README.md create mode 100644 ui/package-lock.json create mode 100644 ui/package.json create mode 100644 ui/raw/map.tmx create mode 100644 ui/raw/npc1.psd create mode 100644 ui/rollup.config.dev.mjs create mode 100644 ui/rollup.config.dist.mjs create mode 100644 ui/run.sh create mode 100644 ui/screenshot.png create mode 100644 ui/src/classes/actor.ts create mode 100644 ui/src/classes/message.ts create mode 100644 ui/src/classes/npc.ts create mode 100644 ui/src/classes/player.ts create mode 100644 ui/src/classes/text.ts create mode 100644 ui/src/conversation.ts create mode 100644 ui/src/index.ts create mode 100644 ui/src/scenes/index.ts create mode 100644 ui/src/scenes/loading/loading.ts create mode 100644 ui/src/scenes/message/message.ts create mode 100644 ui/src/scenes/town/town.ts create mode 100644 ui/tsconfig.json diff --git a/ui/.github/CODE_OF_CONDUCT.md b/ui/.github/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..8fafdb309 --- /dev/null +++ b/ui/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,84 @@ +# Code of Conduct + +## 1. Purpose + +A primary goal of Phaser is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof). + +This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior. + +We invite all those who participate in Phaser to help us create safe and positive experiences for everyone. + +## 2. Open Source Citizenship + +A supplemental goal of this Code of Conduct is to increase open source citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community. + +Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society. + +If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know. + +## 3. Expected Behavior + +The following behaviors are expected and requested of all community members: + +* Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community. +* Exercise consideration and respect in your speech and actions. +* Attempt collaboration before conflict. +* Refrain from demeaning, discriminatory, or harassing behavior and speech. +* Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential. +* Remember that community event venues may be shared with members of the public; please be respectful to all patrons of these locations. + +## 4. Unacceptable Behavior + +The following behaviors are considered harassment and are unacceptable within our community: + +* Violence, threats of violence or violent language directed against another person. +* Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language. +* Posting or displaying sexually explicit or violent material. +* Posting or threatening to post other people’s personally identifying information ("doxing"). +* Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability. +* Inappropriate photography or recording. +* Inappropriate physical contact. You should have someone’s consent before touching them. +* Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances. +* Deliberate intimidation, stalking or following (online or in person). +* Advocating for, or encouraging, any of the above behavior. +* Sustained disruption of community events, including talks and presentations. + +## 5. Consequences of Unacceptable Behavior + +Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated. + +Anyone asked to stop unacceptable behavior is expected to comply immediately. + +If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event). + +## 6. Reporting Guidelines + +If you are subject to or witness unacceptable behavior, or have any other concerns, please notify a community organizer as soon as possible. support@phaser.io. + + + +Additionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress. + +## 7. Addressing Grievances + +If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify Photon Storm Ltd with a concise description of your grievance. Your grievance will be handled in accordance with our existing governing policies. + + + +## 8. Scope + +We expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues–online and in-person–as well as in all one-on-one communications pertaining to community business. + +This code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members. + +## 9. Contact info + +support@phaser.io + +## 10. License and attribution + +This Code of Conduct is distributed under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/). + +Portions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy). + +Retrieved on November 22, 2016 from [http://citizencodeofconduct.org/](http://citizencodeofconduct.org/) diff --git a/ui/.github/CONTRIBUTING.md b/ui/.github/CONTRIBUTING.md new file mode 100644 index 000000000..74ce28264 --- /dev/null +++ b/ui/.github/CONTRIBUTING.md @@ -0,0 +1,80 @@ +# How to contribute + +It's important to us that you feel you can contribute towards the evolution of Phaser. This can take many forms: from helping to fix bugs or improve the docs, to adding in new features to the source. This guide should help you in making that process as smooth as possible. + +Before contributing, please read the [code of conduct](https://github.com/photonstorm/phaser/blob/master/.github/CODE_OF_CONDUCT.md). + +## Reporting issues + +[GitHub Issues][0] is the place to report bugs you may have found. When submitting a bug please do the following: + +**1. Search for existing issues.** Your bug may have already been fixed, or cannot, or will not, be fixed. So be sure to search the issues first before putting in a duplicate issue. + +**2. Not sure if it's a bug?.** Please ask on the [forum][4]. If something is blatantly wrong then post it to GitHub. But if you feel it might just be because you're not sure of expected behavior, then it might save us time, and get you a response faster, if you post it to the Phaser forum instead. + +**3. Create an isolated and reproducible test case.** If you are reporting a bug, make sure you also have a minimal, runnable, code example that reproduces the problem you have. + +**4. Include a live example.** After narrowing your code down to only the problem areas, make use of [jsFiddle][1], [jsBin][2], [CodePen][5], or a link to your live site so that we can view a live example of the problem. + +**5. Share as much information as possible.** Include browser version affected, your OS, version of the library, steps to reproduce, etc. "X isn't working!!!1!" will probably just be closed. + +## Support Forum + +We have a very active [Phaser Support Forum][4]. If you need general support, or are struggling to understand how to do something or need your code checked over, then we would urge you to post it to our forum. There are a lot of friendly devs in there who can help, as well as the core Phaser team, so it's a great place to get support. You're welcome to report bugs directly on GitHub, but for general support we'd always recommend using the forum first. + +## Making Changes + +I'm assuming you already have a recent version of [Node](https://nodejs.org) installed locally and can run `npm`. This guide is tested and works on both Windows 10 and OS X. + +### 1. Checkout the repos + +Check-out both the [Phaser repo](https://github.com/photonstorm/phaser) and the [Phaser 3 Examples Repo](https://github.com/photonstorm/phaser3-examples). Make sure the Phaser 3 Examples repo is saved locally in a folder called `phaser3-examples`, which will be the default for most Git clients. + +### 2. Matching Directory Levels + +Ensure that both repos live at the same depth in your directory structure. For example: `/usr/home/web/phaser` and `/usr/home/web/phaser3-examples`. This is so the dev build scripts in the Phaser repo can safely copy files to `../phaser3-examples` and have them end up in the correct place. + +### 3. Install dependencies + +Using your console, run `npm install` or `yarn install` as we've configs for both. This process will install a local copy of webpack and a handful of small support scripts. Note that Yarn on Windows seems to have issues making some packages global, so stick with npm if this is the case. + +### 4. Webpack + +Making sure you've got both repos checked out, and at the same directory level in your filesystem, issue the command `webpack`. If you can't issue the command then webpack may need [installing globally](https://webpack.js.org/guides/installation/). Webpack will build Phaser and if there are any path errors in the code they'll be flagged during the build process. + +What you need is the ability to issue the command `webpack` within the v3 folder and have it work. + +### 5. ESLint + +There is an ESLint configuration and an Editor Configuration in the v3 folder. **Please adhere to them!** Although not enforced in the build process yet, I will be adding that at a later point. There are lots of tools you can install so your editor of choice will check the ESLint config during development. + +To test if your code passes our lint config issue the command `npm run lint`. + +## Coding style preferences are not contributions + +If your PR is doing little more than changing the Phaser source code into a format / coding style that you prefer then we will automatically close it. All PRs must adhere to the coding style already set-out across the thousands of lines of code in Phaser. Your personal preferences for how things should "look" or be structured do not apply here, sorry. PRs should fix bugs, fix documentation or add features. No changes for the sake of change. + +## I don't really like git / node.js, but I can fix this bug + +That is fine too. While Pull Requests are the best thing in the world for us, they are not the only way to help. You're welcome to post fixes to our forum or even just email them to us. All we ask is that you still adhere to the guidelines presented here re: ESLint, etc. + +## Code Style Guide + +We provide an .editorconfig and eslint config for you to use, but generally: + +- Use 4 spaces for tabs, never tab characters. + +- No trailing whitespace, blank lines should have no whitespace. + +- Always favor strict equals `===` unless you *need* to use type coercion. + +- Follow conventions already in the code, and listen to eslint. Our config is set-up for a reason. + +Thanks to Chad for creating the original Pixi.js Contributing file which we adapted for Phaser. + +[0]: https://github.com/photonstorm/phaser/issues +[1]: http://jsfiddle.net +[2]: http://jsbin.com/ +[3]: http://nodejs.org +[4]: https://phaser.discourse.group/ +[5]: https://codepen.io/pen?template=YeEWom "Phaser 3 game template" diff --git a/ui/.github/FUNDING.yml b/ui/.github/FUNDING.yml new file mode 100644 index 000000000..61f2a6424 --- /dev/null +++ b/ui/.github/FUNDING.yml @@ -0,0 +1,5 @@ +# These are supported funding model platforms + +github: photonstorm +patreon: photonstorm +custom: https://phaser.io/community/donate diff --git a/ui/.github/no-response.yml b/ui/.github/no-response.yml new file mode 100644 index 000000000..cfbe92445 --- /dev/null +++ b/ui/.github/no-response.yml @@ -0,0 +1,14 @@ +# Configuration for no-response - https://github.com/probot/no-response + +# Number of days of inactivity before an Issue is closed for lack of response +daysUntilClose: 30 +# Label requiring a response +# TODO: also close `needs-reproduction` issues (blocked by https://github.com/probot/no-response/issues/11) +responseRequiredLabel: 🤷‍♂️ More info needed +# Comment to post when closing an issue due to lack of response. +closeComment: > +Thank you for taking time to open this issue. + +We haven’t gotten a response to our questions above. With the details currently given in the issue we don’t have enough information to take action. + +So we’re going to close this issue. We can re-open it if you find the time to provide the information we need. diff --git a/ui/.gitignore b/ui/.gitignore new file mode 100644 index 000000000..6e46e45de --- /dev/null +++ b/ui/.gitignore @@ -0,0 +1,13 @@ +# System and IDE files +Thumbs.db +.DS_Store +.idea +*.suo +*.sublime-project +*.sublime-workspace + +# Vendors +node_modules/ + +# Build +/npm-debug.log diff --git a/ui/LICENSE b/ui/LICENSE new file mode 100644 index 000000000..3efb55611 --- /dev/null +++ b/ui/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Richard Davey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ui/README.md b/ui/README.md new file mode 100644 index 000000000..1044cec84 --- /dev/null +++ b/ui/README.md @@ -0,0 +1,49 @@ +# Phaser 3 TypeScript Project Template + +This quick-start project template combines Phaser 3.60 with [TypeScript 5](https://www.typescriptlang.org/) and uses [Rollup](https://rollupjs.org) for bundling. + +## Requirements + +[Node.js](https://nodejs.org) is required to install dependencies and run scripts via `npm`. + +## Available Commands + +| Command | Description | +|---------|-------------| +| `npm install` | Install project dependencies | +| `npm run watch` | Build project and open web server running project, watching for changes | +| `npm run dev` | Builds project and open web server, but do not watch for changes | +| `npm run build` | Builds code bundle with production settings (minification, no source maps, etc..) | + +## Writing Code + +After cloning the repo, run `npm install` from your project directory. Then, you can start the local development +server by running `npm run watch`. The first time you run this you should see the following demo run: + +![Screenshot](screenshot.png "Phaser 3 Example") + +After starting the development server with `npm run watch`, you can edit any files in the `src` folder +and Rollup will automatically recompile and reload your server (available at `http://localhost:10001` +by default). + +## Configuring Rollup + +* Edit the file `rollup.config.dev.js` to edit the development build. +* Edit the file `rollup.config.dist.js` to edit the distribution build. + +You will find lots of comments inside the rollup config files to help you do this. + +Note that due to the build process involved, it can take around 20 seconds to build the initial bundle. Times will vary based on CPU and local drive speeds. The development config does not minify the code in order to save build time, but it does generate source maps. If you do not require these, disable them in the config to speed it up further. + +## Versions Used + +* Phaser 3.60 +* TypeScript 5.0.3 +* Rollup 3.20.2 +* Rollup Plugins: + * @rollup/plugin-commonjs 24.0.1 + * @rollup/plugin-node-resolve 15.0.2 + * @rollup/plugin-replace 5.0.2 + * @rollup/plugin-terser 0.4.0 + * @rollup/plugin-typescript 11.1.0 + * rollup-plugin-serve 2.0.2 diff --git a/ui/package-lock.json b/ui/package-lock.json new file mode 100644 index 000000000..fe673e9d9 --- /dev/null +++ b/ui/package-lock.json @@ -0,0 +1,2652 @@ +{ + "name": "phaser3-typescript-project-template", + "version": "1.2.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "phaser3-typescript-project-template", + "version": "1.2.0", + "license": "MIT", + "devDependencies": { + "@rollup/plugin-commonjs": "^24.0.1", + "@rollup/plugin-node-resolve": "^15.0.2", + "@rollup/plugin-replace": "^5.0.2", + "@rollup/plugin-terser": "^0.4.0", + "@rollup/plugin-typescript": "^11.1.0", + "phaser": "^3.60.0", + "rollup": "^3.20.2", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-serve": "^2.0.2", + "typescript": "^5.0.3", + "vite-plugin-static-copy": "^0.15.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "24.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz", + "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@rollup/plugin-commonjs/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.2.tgz", + "integrity": "sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@rollup/plugin-replace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz", + "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.0.tgz", + "integrity": "sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==", + "dev": true, + "dependencies": { + "serialize-javascript": "^6.0.0", + "smob": "^0.0.6", + "terser": "^5.15.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.x || ^3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.0.tgz", + "integrity": "sha512-86flrfE+bSHB69znnTV6kVjkncs2LBMhcTCyxWgRxLyfXfQrxg4UwlAqENnjrrxnSNS/XKCDJCl8EkdFJVHOxw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.0.tgz", + "integrity": "sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", + "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/phaser": { + "version": "3.60.0", + "resolved": "https://registry.npmjs.org/phaser/-/phaser-3.60.0.tgz", + "integrity": "sha512-IKUy35EnoEVcl2EmJ8WOyK4X8OoxHYdlhZLgRGpNrvD1fEagYffhVmwHcapE/tGiLgyrnezmXIo5RrH2NcrTHw==", + "dev": true, + "dependencies": { + "eventemitter3": "^5.0.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "3.21.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.7.tgz", + "integrity": "sha512-KXPaEuR8FfUoK2uHwNjxTmJ18ApyvD6zJpYv9FOJSqLStmt6xOY84l1IjK2dSolQmoXknrhEFRaPRgOPdqCT5w==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-commonjs": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", + "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0", + "rollup-pluginutils": "^2.8.1" + }, + "peerDependencies": { + "rollup": ">=1.12.0" + } + }, + "node_modules/rollup-plugin-serve": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-serve/-/rollup-plugin-serve-2.0.2.tgz", + "integrity": "sha512-ALqyTbPhlf7FZ5RzlbDvMYvbKuCHWginJkTo6dMsbgji/a78IbsXox+pC83HENdkTRz8OXrTj+aShp3+3ratpg==", + "dev": true, + "dependencies": { + "mime": ">=2.4.6", + "opener": "1" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/smob": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/smob/-/smob-0.0.6.tgz", + "integrity": "sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terser": { + "version": "5.16.8", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz", + "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/typescript": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz", + "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/vite": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.5.tgz", + "integrity": "sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==", + "dev": true, + "peer": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-static-copy": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-0.15.0.tgz", + "integrity": "sha512-Ww+/Ug9guV45oIfIi/lA2z8v3K+lLHV9zCJqTVO4FTdqrJoZBj68VgGBSH1fi0N4q/EHW32RsL3ympi4Wlsq5w==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.3", + "fast-glob": "^3.2.11", + "fs-extra": "^11.1.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + } + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true, + "peer": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rollup/plugin-commonjs": { + "version": "24.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz", + "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "dependencies": { + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } + } + }, + "@rollup/plugin-node-resolve": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.2.tgz", + "integrity": "sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "dependencies": { + "@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + } + } + }, + "@rollup/plugin-replace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz", + "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.27.0" + }, + "dependencies": { + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } + } + }, + "@rollup/plugin-terser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.0.tgz", + "integrity": "sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==", + "dev": true, + "requires": { + "serialize-javascript": "^6.0.0", + "smob": "^0.0.6", + "terser": "^5.15.1" + } + }, + "@rollup/plugin-typescript": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.0.tgz", + "integrity": "sha512-86flrfE+bSHB69znnTV6kVjkncs2LBMhcTCyxWgRxLyfXfQrxg4UwlAqENnjrrxnSNS/XKCDJCl8EkdFJVHOxw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "dependencies": { + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + } + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "peer": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "eventemitter3": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.0.tgz", + "integrity": "sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", + "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", + "dev": true + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "peer": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "phaser": { + "version": "3.60.0", + "resolved": "https://registry.npmjs.org/phaser/-/phaser-3.60.0.tgz", + "integrity": "sha512-IKUy35EnoEVcl2EmJ8WOyK4X8OoxHYdlhZLgRGpNrvD1fEagYffhVmwHcapE/tGiLgyrnezmXIo5RrH2NcrTHw==", + "dev": true, + "requires": { + "eventemitter3": "^5.0.0" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "dev": true, + "peer": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rollup": { + "version": "3.21.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.7.tgz", + "integrity": "sha512-KXPaEuR8FfUoK2uHwNjxTmJ18ApyvD6zJpYv9FOJSqLStmt6xOY84l1IjK2dSolQmoXknrhEFRaPRgOPdqCT5w==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-commonjs": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", + "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-serve": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-serve/-/rollup-plugin-serve-2.0.2.tgz", + "integrity": "sha512-ALqyTbPhlf7FZ5RzlbDvMYvbKuCHWginJkTo6dMsbgji/a78IbsXox+pC83HENdkTRz8OXrTj+aShp3+3ratpg==", + "dev": true, + "requires": { + "mime": ">=2.4.6", + "opener": "1" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "smob": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/smob/-/smob-0.0.6.tgz", + "integrity": "sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "peer": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "terser": { + "version": "5.16.8", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz", + "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true, + "optional": true, + "peer": true + }, + "typescript": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz", + "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "vite": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.5.tgz", + "integrity": "sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==", + "dev": true, + "peer": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + } + }, + "vite-plugin-static-copy": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-0.15.0.tgz", + "integrity": "sha512-Ww+/Ug9guV45oIfIi/lA2z8v3K+lLHV9zCJqTVO4FTdqrJoZBj68VgGBSH1fi0N4q/EHW32RsL3ympi4Wlsq5w==", + "dev": true, + "requires": { + "chokidar": "^3.5.3", + "fast-glob": "^3.2.11", + "fs-extra": "^11.1.0", + "picocolors": "^1.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + } + } +} diff --git a/ui/package.json b/ui/package.json new file mode 100644 index 000000000..e8b71d071 --- /dev/null +++ b/ui/package.json @@ -0,0 +1,34 @@ +{ + "name": "phaser3-typescript-project-template", + "version": "1.2.0", + "description": "A Phaser 3 Project Template using Rollup and TypeScript", + "main": "src/index.ts", + "scripts": { + "dev": "rollup --config rollup.config.dev.mjs", + "build": "rollup --config rollup.config.dist.mjs", + "watch": "rollup --watch --config rollup.config.dev.mjs" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/photonstorm/phaser3-typescript-project-template.git" + }, + "author": "Richard Davey (http://www.photonstorm.com)", + "license": "MIT", + "bugs": { + "url": "https://github.com/photonstorm/phaser3-typescript-project-template/issues" + }, + "homepage": "https://github.com/photonstorm/phaser3-typescript-project-template#readme", + "devDependencies": { + "@rollup/plugin-commonjs": "^24.0.1", + "@rollup/plugin-node-resolve": "^15.0.2", + "@rollup/plugin-replace": "^5.0.2", + "@rollup/plugin-terser": "^0.4.0", + "@rollup/plugin-typescript": "^11.1.0", + "phaser": "^3.60.0", + "rollup": "^3.20.2", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-serve": "^2.0.2", + "typescript": "^5.0.3", + "vite-plugin-static-copy": "^0.15.0" + } +} diff --git a/ui/raw/map.tmx b/ui/raw/map.tmx new file mode 100644 index 000000000..1acc1112a --- /dev/null +++ b/ui/raw/map.tmx @@ -0,0 +1,40124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +4,1,1,4,3,2,2,1,3,4,2,2,1,4,2,1,3,3,4,2,2,3,4,2,4,3,1,2,2,2,4,1,3,2,3,1,4,3,2,3,3,2,2,3,3,1,1,1, +3,1,4,2,2,1,3,4,4,3,1,2,4,3,1,3,4,4,4,4,3,2,25,26,27,3,3,3,2,2,1,1,1,4,2,3,4,3,3,3,2,3,3,1,1,3,2,2, +1,2,3,4,1,4,2,3,3,4,4,1,3,2,4,3,2,4,3,4,4,2,25,26,27,3,3,2,3,2,17,18,18,18,18,18,18,19,1,4,4,1,3,2,1,2,3,3, +4,3,1,4,4,4,2,1,3,4,4,3,4,1,2,4,3,2,2,3,1,2,25,26,27,1,2,3,3,2,25,26,26,26,26,26,26,27,3,3,2,2,3,2,2,4,4,3, +2,3,4,1,1,2,2,4,1,1,17,18,19,3,1,3,2,1,1,4,4,3,25,26,27,4,3,4,1,3,25,26,45,34,34,44,26,27,4,3,1,4,4,2,1,3,4,4, +4,1,4,4,2,2,1,1,3,3,25,26,27,2,4,4,2,3,4,4,2,2,25,26,27,4,2,3,2,4,25,26,27,1,3,25,26,27,3,4,4,2,4,4,3,2,3,2, +2,4,4,3,3,2,4,1,3,3,4,1,3,2,1,1,3,4,4,4,3,1,25,26,27,3,4,2,1,1,2,3,4,1,2,25,26,27,2,4,4,4,1,1,4,3,1,4, +3,2,1,2,2,4,4,2,4,4,2,4,4,2,4,4,4,1,4,4,3,3,25,26,27,4,4,1,4,2,2,1,2,2,4,25,26,27,2,3,1,1,3,2,4,2,1,2, +4,3,1,1,4,1,3,3,1,4,3,2,1,1,1,1,4,2,3,2,4,2,25,26,27,1,3,3,2,2,1,4,1,3,1,25,26,27,2,1,4,2,3,4,1,3,1,2, +3,3,1,2,1,4,1,1,17,18,18,18,18,18,18,18,18,18,18,18,18,18,36,26,37,18,18,18,18,18,18,18,18,19,2,25,26,27,4,3,3,3,4,2,2,1,4,2, +4,3,2,2,2,2,3,1,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,2,25,26,27,1,2,2,4,1,4,4,1,4,4, +3,2,4,4,2,4,3,2,25,26,45,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,35,4,25,26,27,4,3,2,1,2,3,1,4,3,3, +4,3,3,2,3,2,1,2,25,26,27,1,2,3,3,3,3,2,2,4,4,2,2,2,3,2,4,4,1,2,2,2,2,3,4,25,26,27,3,2,1,4,3,2,4,1,3,2, +4,4,1,3,3,4,4,2,25,26,27,4,2,3,3,4,1,3,2,1,2,3,4,4,4,2,2,1,1,3,1,1,2,2,3,25,26,27,1,3,1,4,4,2,3,1,3,3, +3,2,2,3,3,4,3,2,25,26,27,1,1,4,4,2,4,4,2,4,1,4,3,1,3,2,4,1,3,1,4,3,4,2,1,25,26,27,2,4,2,4,1,4,1,4,1,4, +2,4,4,2,2,1,3,2,25,26,37,18,18,18,18,18,18,18,18,19,2,1,3,3,1,3,1,3,2,1,2,3,1,3,3,25,26,27,3,4,4,2,4,4,1,2,4,2, +3,2,2,4,4,1,1,4,25,26,26,26,26,26,26,26,26,26,26,27,2,1,3,2,4,4,3,1,1,4,3,3,4,2,1,25,26,27,4,4,2,3,3,3,2,1,3,4, +18,18,18,18,18,18,18,18,36,26,45,34,34,34,34,34,34,44,26,27,3,2,3,1,1,2,2,1,2,4,4,2,3,3,4,25,26,27,2,2,3,4,3,1,1,2,4,4, +26,26,26,26,26,26,26,26,26,26,27,2,3,1,1,3,2,25,26,27,1,2,1,4,2,2,3,4,3,1,1,4,2,2,2,25,26,27,1,1,2,4,3,1,4,2,1,3, +34,34,34,34,34,34,34,34,44,26,27,1,3,3,3,4,4,25,26,37,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,36,26,27,3,3,1,2,3,4,2,4,1,2, +1,1,2,2,1,2,1,4,25,26,27,1,2,3,4,3,4,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,2,2,1,4,1,2,3,2,4,1, +2,4,1,1,2,1,3,2,25,26,27,3,3,3,1,3,3,25,26,45,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,35,3,3,4,3,1,1,3,4,4,1, +1,4,1,4,1,4,1,2,25,26,27,1,1,3,1,3,1,25,26,27,3,4,3,1,3,4,1,4,3,2,4,3,2,2,2,3,3,2,2,1,2,4,2,4,3,3,1,4, +1,1,1,3,1,2,3,4,25,26,27,1,3,4,2,2,2,25,26,27,4,4,1,3,2,1,4,3,2,4,2,4,4,1,2,3,2,3,2,2,1,3,2,2,3,3,3,3, +1,4,3,4,2,1,1,1,25,26,27,4,2,3,2,1,1,25,26,27,2,2,3,3,4,4,2,4,1,1,3,1,4,2,3,4,1,3,1,1,2,1,1,3,2,4,1,3, +1,4,3,3,3,4,2,2,25,26,27,1,2,3,4,2,3,25,26,27,4,1,3,3,2,3,1,1,2,1,4,4,3,4,4,1,4,4,4,1,4,1,1,2,1,4,4,1, +2,1,1,2,4,4,1,4,25,26,37,18,18,18,18,18,18,36,26,27,2,1,3,2,4,1,2,3,4,2,3,2,3,3,2,4,2,2,4,1,1,1,4,2,4,3,2,3, +1,3,2,4,4,1,2,3,25,26,26,26,26,26,26,26,26,26,26,27,4,4,1,1,4,1,3,4,4,4,3,1,2,1,2,2,3,4,4,1,2,3,4,1,1,1,3,2, +3,2,1,3,4,3,4,3,33,34,34,34,34,34,34,34,34,34,34,35,4,4,4,3,3,4,3,2,4,1,3,4,4,3,1,4,1,2,1,2,2,3,2,3,4,2,1,4, +4,1,1,3,2,1,2,3,1,3,3,3,4,1,2,3,2,2,3,3,2,4,2,1,1,4,4,3,3,2,4,2,4,2,3,4,1,2,3,1,4,2,1,3,4,4,3,4, +1,2,4,3,2,3,1,2,1,1,3,3,2,4,2,2,1,1,4,3,4,3,3,3,4,1,4,2,4,2,2,4,2,1,3,2,1,4,1,1,3,1,3,3,2,2,2,2, +3,2,1,4,1,3,2,3,1,3,1,1,4,4,4,4,1,1,4,4,4,1,2,3,3,2,1,3,3,3,4,4,4,4,4,2,1,1,2,3,3,3,3,2,2,1,4,4, +4,2,2,2,3,3,2,2,1,4,1,1,1,4,1,2,4,1,3,4,4,4,1,3,3,2,3,1,3,1,1,1,4,4,1,4,1,2,4,4,1,3,3,4,1,4,3,2, +2,2,4,3,2,3,1,4,1,3,4,3,2,3,1,3,2,2,2,3,4,2,1,1,1,2,3,2,2,2,2,2,4,3,4,4,3,4,1,3,2,3,4,3,3,4,1,2, +3,4,3,2,3,2,3,2,4,3,1,3,2,3,3,4,4,1,4,4,3,1,3,2,2,1,1,1,4,1,1,1,4,4,4,2,1,4,3,2,3,3,1,1,3,4,3,3 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,219,213,213,213,213,213,213,213,213,213,213,213,213,213,213,0,0,0,213,213,213,213,201,213,213,213,213,213,213,213,213,213,220,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,211,213,213,213,213,213,213, +0,0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +221,221,221,221,221,221,221,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0,203,213,213,213,213,213,213, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,209,0,0,0,0,0,0, +221,221,221,221,221,221,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,213,213,29,213,213,213,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,212,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0, +0,0,0,0,0,0,218,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,213,213,213,213,213,213,213,213,213,213,217,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,7,8,7,8,7,8, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,15,16,15,16,15,16, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,5,6,5,6,5,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,14,13,14,13,14,13,14, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,21,22,5,6,5,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,14,13,14, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,5,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,14,13,14, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,5,6,5,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,15,16,13,14,13,14, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,5,6,5,6,5,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,13,14,13,14,13,14, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,21,22,21,22,21,22, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,7,8,7,8, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,15,16,15,16, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,5,6,5,6, +7,8,7,8,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,14,13,14,13,14, +15,16,15,16,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,5,6,5,6, +5,6,5,6,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,14,13,14,13,14, +13,14,13,14,13,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,5,6,5,6, +5,6,5,6,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,14,13,14,13,14, +13,14,13,14,13,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,5,6,5,6, +5,6,5,6,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,14,13,14,13,14, +13,14,13,14,13,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,5,6,5,6, +5,6,5,6,5,6,0,166,167,167,167,167,167,167,167,167,168,0,0,0,0,0,0,0,0,0,0,166,167,167,167,167,167,167,167,167,167,168,0,0,0,0,13,14,13,14,13,14, +13,14,13,14,13,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,5,6,5,6, +5,6,5,6,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,14,13,14,13,14, +13,14,13,14,13,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,5,6,5,6, +21,22,21,22,21,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,14,13,14,13,14, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,21,22,21,22 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1339,1340,1340,1340,1340,1344,0,0,0,0, +0,0,0,0,0,0,0,0,1339,1340,1341,1342,1343,1340,1344,1339,1340,1340,1340,1340,1344,0,0,0,0,0,0,0,1339,1340,1341,1342,1343,1340,1344,0,0,0,1347,1348,1348,1348,1348,1352,0,0,0,0, +0,0,0,0,0,0,0,0,1347,1348,1349,1350,1351,1348,1352,1347,1348,1349,1350,1351,1352,0,0,0,0,0,0,0,1347,1348,1349,1350,1351,1348,1352,0,0,0,1355,1359,1359,1359,1359,1360,0,0,0,0, +0,0,0,0,0,0,0,0,1355,1356,1357,1358,1359,1359,1360,1355,1356,1357,1358,1359,1360,0,0,0,0,0,0,0,1355,1356,1357,1358,1359,1359,1360,0,0,0,1326,1327,1310,1312,1335,1336,0,0,0,0, +0,0,0,0,0,0,0,0,1326,1318,1319,1311,1327,1310,1336,1326,1318,1319,1320,1335,1336,0,0,0,0,0,0,0,1326,1318,1319,1311,1327,1310,1336,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,1339,1340,1340,1340,1340,1340,1344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,1347,1348,1349,1350,1351,1348,1352,361,362,363,364,365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,1355,1356,1357,1358,1359,1359,1360,369,370,371,372,373,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,1326,1318,1319,1311,1327,1310,1336,377,378,379,380,381,0,0,0,325,326,327,328,366,367,368,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,385,386,387,388,389,0,0,0,333,334,335,336,374,375,376,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,393,394,395,396,397,0,0,0,341,342,343,344,382,383,384,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,270,349,350,351,352,390,391,392,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,357,358,359,360,398,399,400,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,1193,1194,1195,1196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,1201,1202,1203,1204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1247,1248,1201,1202,1203,1204,0,0,0,0,32,1339,1340,1340,1340,1340,1344,329,330,331,332,1339,1340,1340,1340,1344,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1247,1248,1209,1210,1211,1212,0,0,0,0,0,1347,1348,1349,1350,1351,1352,337,338,339,340,1347,1348,1348,1348,1352,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1247,1248,1217,1218,1219,1220,0,0,0,0,0,1355,1356,1357,1358,1359,1360,345,346,347,348,1355,1359,1359,1359,1360,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,32,1225,1226,1227,1228,0,0,0,0,0,1326,1318,1319,1320,1335,1336,353,354,355,356,1326,1327,1334,1335,1336,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,1233,0,0,1233,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4338,0,4338,0,4338,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4338,0,4338,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,4338,0,4338,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4338,0,4338,0,4338,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + diff --git a/ui/raw/npc1.psd b/ui/raw/npc1.psd new file mode 100644 index 0000000000000000000000000000000000000000..f8dfeece1d4e13048321838058954ec6e78f5138 GIT binary patch literal 57032 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 literal 0 HcmV?d00001 diff --git a/ui/rollup.config.dev.mjs b/ui/rollup.config.dev.mjs new file mode 100644 index 000000000..2efdc261c --- /dev/null +++ b/ui/rollup.config.dev.mjs @@ -0,0 +1,75 @@ +import commonjs from '@rollup/plugin-commonjs'; +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import replace from '@rollup/plugin-replace'; +import serve from 'rollup-plugin-serve'; +import typescript from '@rollup/plugin-typescript'; +import { viteStaticCopy } from 'vite-plugin-static-copy' + + +export default { + + // Our game entry point (edit as required) + input: [ + './src/index.ts' + ], + + // Where the build file is to be generated. + // Most games being built for distribution can use iife as the module type. + // You can also use 'umd' if you need to ingest your game into another system. + // If using Phaser 3.21 or **below**, add: `intro: 'var global = window;'` to the output object. + output: { + file: './dist/bundle.js', + name: 'MyGame', + format: 'iife', + sourcemap: true + }, + + plugins: [ + + // Toggle the booleans here to enable / disable Phaser 3 features: + replace({ + preventAssignment: true, + 'typeof CANVAS_RENDERER': JSON.stringify(true), + 'typeof WEBGL_RENDERER': JSON.stringify(true), + 'typeof WEBGL_DEBUG': JSON.stringify(true), + 'typeof EXPERIMENTAL': JSON.stringify(true), + 'typeof PLUGIN_CAMERA3D': JSON.stringify(false), + 'typeof PLUGIN_FBINSTANT': JSON.stringify(false), + 'typeof FEATURE_SOUND': JSON.stringify(true) + }), + + // Parse our .ts source files + nodeResolve({ + extensions: [ '.ts', '.tsx' ] + }), + + // We need to convert the Phaser 3 CJS modules into a format Rollup can use: + commonjs({ + include: [ + 'node_modules/eventemitter3/**', + 'node_modules/phaser/**' + ], + exclude: [ + 'node_modules/phaser/src/polyfills/requestAnimationFrame.js', + 'node_modules/phaser/src/phaser-esm.js' + ], + sourceMap: true, + ignoreGlobal: true + }), + + // See https://github.com/rollup/plugins/tree/master/packages/typescript for config options + typescript(), + + // See https://www.npmjs.com/package/rollup-plugin-serve for config options + serve({ + open: true, + contentBase: 'dist', + host: '127.0.0.1', + port: 10001, + headers: { + 'Access-Control-Allow-Origin': '*' + } + }) + + ] +}; \ No newline at end of file diff --git a/ui/rollup.config.dist.mjs b/ui/rollup.config.dist.mjs new file mode 100644 index 000000000..39ac16327 --- /dev/null +++ b/ui/rollup.config.dist.mjs @@ -0,0 +1,65 @@ +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import replace from '@rollup/plugin-replace'; +import terser from '@rollup/plugin-terser'; +import typescript from '@rollup/plugin-typescript'; + +export default { + + // Our games entry point (edit as required) + input: [ + './src/index.ts' + ], + + // Where the build file is to be generated. + // Most games being built for distribution can use iife as the module type. + // You can also use 'umd' if you need to ingest your game into another system. + // If using Phaser 3.21 or **below**, add: `intro: 'var global = window;'` to the output object. + output: { + file: './dist/index.js', + name: 'MyGame', + format: 'iife', + sourcemap: false + }, + + plugins: [ + + // Toggle the booleans here to enable / disable Phaser 3 features: + replace({ + preventAssignment: true, + 'typeof CANVAS_RENDERER': JSON.stringify(true), + 'typeof WEBGL_RENDERER': JSON.stringify(true), + 'typeof WEBGL_DEBUG': JSON.stringify(false), + 'typeof EXPERIMENTAL': JSON.stringify(true), + 'typeof PLUGIN_CAMERA3D': JSON.stringify(false), + 'typeof PLUGIN_FBINSTANT': JSON.stringify(false), + 'typeof FEATURE_SOUND': JSON.stringify(true) + }), + + // Parse our .ts source files + nodeResolve({ + extensions: [ '.ts', '.tsx' ] + }), + + // We need to convert the Phaser 3 CJS modules into a format Rollup can use: + commonjs({ + include: [ + 'node_modules/eventemitter3/**', + 'node_modules/phaser/**' + ], + exclude: [ + 'node_modules/phaser/src/polyfills/requestAnimationFrame.js', + 'node_modules/phaser/src/phaser-esm.js' + ], + sourceMap: false, + ignoreGlobal: true + }), + + // See https://github.com/rollup/plugins/tree/master/packages/typescript for config options + typescript(), + + // See https://github.com/rollup/plugins/tree/master/packages/terser for config options + terser() + + ] +}; \ No newline at end of file diff --git a/ui/run.sh b/ui/run.sh new file mode 100644 index 000000000..2bb43d082 --- /dev/null +++ b/ui/run.sh @@ -0,0 +1,4 @@ +#npm install +npm run watch +#npm run dev +#npm run build diff --git a/ui/screenshot.png b/ui/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe056d6083e8060d74115fc282740ce58e32261 GIT binary patch literal 191593 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

!UYu zmCgrNuqkg5fx>r!@u=x5!?={uS705PNuoSeH23=~C%n z)h!+$EPl2+r=@2im^fwS!L6%@)*U}qO|e^n#3Jo^r*Oc=)1TA3Y7+-l09z#rFgLeR z2ySQtrFlmohC635P8jN+TT>=a@Tp1XHE=&xtbcY@@VSo-5{p76mRBT}*IQBvspGCH zNP$>Y?sjiUtSU%^EV2QzNO!Sr)L{(STNo?&WH37&bZt(~U{xl@;?}E2NEczFLi?9o z*uB-&0vx&(Mk|WGYX9cR3mwCupj<0lkKu$9=$!M%x8Abw&^>K}XvyD0J-(m#Tb}Yy z%b&dDs7h}q5=G9b*O@ouJBGQHx!pjQ=y z#A3=(q;%#<4S+g&3bAkgQ6s8vK-V}~gjUG{pT=`gKm_ftLZkf#dV;b@`{Dr}X4WWL zk?zXd-rkRL5-X2%*O3jD)t$3GrQt!y0G2>hj9rf*je3$pa-77TF6F6L#jQeIO3$3b zk)VsTxkt%eE>-@z3EHWHx5LH1+OZT85aS?|OVQ+NvM?QYo?awIG~M64xKdh+it~jk zph3BsoXohxsH|5gcg9%VSe^M78=vv}>#v$;J$dnM@A&TfZ~Tr2Z{E7H zf6$z|hOyF%8jS7|AJ)=HVtICMl8nW|-eN<_EDfmEx9nGVE3ZMptVm+HMwM$xtPw84 zU~yZ$!c{`YkQRnnLQZ0}5+SnhjGJ&`QNUP``P>qG4U_K4QFWZxETUdaz&+)JdJ5Trf_fA$&LM-xFSQZE4&IP-dmJhfC%igmnc2A7K zvgj-72Uxz>gQcFID=HA(AR$Vj5W5C=R|xCkX;>-P9gSc=EfiYiIn+;FK>|`}fh}>h z{o3&s+9Xq-$vx|)5ZbB#ao#p)pZt zgf&D4OUAnsC$Wh8b%o&?} ztvH}~-%!LsOhYG-A(l=$t~haw?+7xy#q39r?-ZO^$edWn zs4OQLEa$@`!&t3!)jig!ZLpmh>oAs-k0T3v0GIzW{M5CBtJd`X{>9l>O}2LbS9ZVY zXFvB=%}<9_w^AW56z)U<$>b!1<>a^}$5=o{s-Ie~xEV`yrpd^LXv6AK-6{C7konvj z9&7*7wm*F8%l_%?%O^kS343q;wVU2_`GMV?G0Ue)$2PJ-kXRYU5_t`rzVabcwAboB zZodr~#tK$ujOn_&%B=qM*7P)0KdW)7rKm^rlYYZxai5?bcHHKc0K=xIQbuPq6a zdu}gZ8I3Gig~UXF%2NJEyJ(N2MJ|Hye$zj zDxz~&z$4-VmB9#%845D#D@tp6;(naWZlz#0K7;s0jvUv zRkC5(!?46)76Vvfrw#b_f+^`>R-<9LaOrjIiaW;YRmXq++Tm4S<9q#kkH7loKL1ue zhDMI5`d$Dm-^zugM?p9OLll`Qh5zA)t!fqx@p();`4sy zE%68c+xA^Q^F7zR<-@Oj>Ve(P%S@~gh=p~+SP;-vifkA#5=&vMvemufR`-CeVsnm2 z9Az+z@;vuIVqr#Kq1UxJ$lD1i8`6plmQn*NFsxU(4eMJ5u*RN#dKWA>7>=P@pu@Mr z=!i*QwG7q-U2WLm4&LHnosoJq*+wHcxjW!#UY^M% zro&w`ShJj1GyCw63xX=9p)l;uZ^CB6ESh7+Ft@;~j0S!=6buCEX+)6x78PROmAyT8 zyF*zbG;!5znAP%CC@23=guLrCb0^p=?vvw2a&mgL%Jor_k&>dyS6N8F%1%@0%9IEz z2Kyc{A6WV-=}=rvUzyyM!e`kMp`ohfXIK7o6H!60x6;hOgDeaWP)3+cO0N0wax?oRCmMq`9SlTL~Bq>E~Z=pHITY*@u+r5QWF?6(Lux{S5 zEB|BvVaFwx?%N$_33cu$>&)R8%N4eiI7-Rtu1PFqz(PYM6p5qU>MoP>S`w>;S+R*r zV5}^06wtUsU{yJRrm8G`kZXc`q!GU*3)0~cJ?*q-lc~ z&Gld%<}hdiBQ|V=M?boT)uxJavW;=w(R%xNi}!zKw6GpasaNxaWjpy@R}7|P zUCx5gDr}m*;uuQ~uW{eHFkqoAweWS&yN<;23}dxl7dc+c>h6`vJzF(+c}^aJrL4O! zALQbpqs37ygs%%zQJN(no!+P0awxk}DsNWqwc=q{Iaw7yO(@T~Ctz!Xw`lI@b2nD)AV_=Y{iAIUA^(;SvK4^|rlu6N%zQUe~ zR}%ffGhOXDz$$T9{hOaP%VJtHL1HWdJ3orEeQ6|TXsC- z)0=l`fF;jy-v9+A6naQWzmdW6AYfK$oDgSbyQ9EZ-7Fy!3NiTKeeT2xBvvbBv#DJPYViGL*4h}*x6g3av|>D>gee7Fke$Z1OK)i_YF?j zv+&i^MhQzr_Z6qL^7M9&u6!1PMSVe|$mBMPcP&moO9ileICQ-0`ktL*rZG%|gsGH} z*yJEfb&s5Lk4gx=3>He!FuiLi?#2L3_p^OPE{`nC#WNW5&z8wOAO2D%cPNO1Dz!Q7 zP-e->Vj4u&C>tlV8**gRa|&&bpUQj|Jxd7X5kj;umdq34H8?sg!wVZ$X7x7!7P&&& zmeZYs;2v=d7R~|dN#<_HbzJBXE{kJ8mhoNaz#*7HT;(@l{JP?M0G5@9=OwfPlp%9y zMWtl=pk}awO;7R^`d9tFl?BvyhYVH-e!#0s4`F3u84m_<%m-H~c)omfIB3{)0a ziKEb7KzXr8vonb3DnhFY3KfL#Ed^MU-?uXIFMcfT*Z>Dtr;~$6?}OpNk~o;w?J;aT z#ceqk58Uhr>xHs39>b#^?Kf>CIKoo=>nY4y*f-vO;lh14tS&4e6hgCRGFX+zN8h@5 z>&{W6ue{1<=Ps)feWhX=s~ot1m1Tg^=k7x5b90n*3|1}?lCI4$E1x@Dl}UtN zuF-Rz^!)>M68x2J8dskcR_t z&$EGsmml1H=_h{eUbk&>U9TtzOjWpdbsf^8MoX#Mkmqm}_L9V!DHO&z2I{R5L$)X- zVk~6Mcy{iW7%Wa=tv|lj zI4a&;#kbOhQ6ZNl)txfhS2v)FKfQ|aSiZRgcaO}BUAA{DFVD;EKZ=w*1Jg?>lw4&kuCRF4Y;2#V@#H z5wed`C3Gs)oo`ZM%h8pyoLGF8uyHah(*Elpn(d+otL;!yc?}$6#ju7p&kPNp`#|~G zD@<|iq9jKq%U8|I{ms<}fqwG*E?;&6c~TQo5Jn->Vw;msMap4(vEs~C@i+!%#J2z(mfArxvefKX%}&+qRP9a$ zgJx&YY?I~U-hVS(%oqR2wHudKCil<_%{Ez&raR4zb^AEE)n0&b&mFdklHsf;1S=|o zFcV$L@e2Ym6w(vN(1)uOkaA^2CDB#BPhj0{$sH&MfT@-tbz|VbVzAmM0oRneG>EG9 zT_k1;wkqr}7R5(|-@NH1{P+IBS=YXJ+x627%tBHO@_I*xu0&X!@32&*rU+XPR*tcP zR>+-LstL&#u0b@10hJ2D?xHz|_2eis7ALW4=rGp8aQLj7u3xBNv4RP@>R#$#!&23R zZ6Fr0qy{AvY6go#D<0VZ*=8kG|?6FxhssN?)6eN zlA1PBXC3MZ2p_~j46Kz4Q>or1GY}7JAXW&P7E=-n?wnh(BR6|NBgR6RI|_l>hFNwi z{2C8M<`2c0P>d`yRyhg_IIhZip!3N=UH_a%Vfh&u4NgvDxy)x7Gs?M2s7qs9mfC=F za?po$Dh!`9&wI6`h8R4ripSC3+9CD10?ZU_~=v zzp-60SnN= z)K|@p^DO!@4B}}9i-K0jxnyQMS9OHEiz#JYnk1Ih4o!^5>H@K%TquilYDr?X?|aQ& z>h7_5c?HJu%!%cN8LNXnJlrBMtX1+3E1Wk(R1>+H-r=Jy zAmJB-Rvv7O)u(6ia~VZfjFTjmV=${~ul?9v`=@BYb#zE)4{D!nv-C}_$N&8^KgECD zTc7lQP8Vi&sdEyrU^vNmJf}7l?%8E8KTNaET^DVSkREt z%VLsPc@1C58$s7KkN=$M;eubU(9TO24&G89xxGH~R1e1y#u8nP!}quK zg@?Ugp{?gH?Em5j$msPfsf2v&Yc*37jZdAh?q|HJfK07Jub{iNKOc%^{QQxDn?(C?ZGM?-ZLda zF_`(##@+mgfY*l4@$5&4`i4d6%T=$zS4;;nf1y9 zSo5=1=8pJO;wlcUG?kSzSQ*zMY*>^rn8*q=Db)|;0L#U>Gm_8QGiwCkUwk>ySKqbm z=H;c8daU0fCt)BmU7jDh7!o3YE$L2?SdQs~)L|?as4RX~@@&7J%GTMV(DEzsG!(Oh z!Gjgu?w(}gC>tkieeM+`jO9tVuj)40HO>+;`ie7H5cW};u@Z?DvNjAG7ALWYMIT^d zuqr7LDxnZ91}h)XK`U_-q&`TF-6%q=$^p?cSe08-t44E;|MboHSgq-dP4w(DU}e~# z_aPm*XR6|^g}#Eo*5ZiHx@z69v*eC{+uBFq`Ap0Z~O?p+Ehp|D|vdlTX%0CBmIQCLYL^xeQqvSC@=RkFYr z#tGZ)f4+6=yFa`!KJn*Xc;q#g9+0|}xOV-IBU}IeSor=$c)C0C;_(3hsTf+&%ILo) zHhZ{6^-%RabMH%RP$wDhq(ZcFp^$pem6_BaMMIdi;rtuQ_$y+RRc3e>tWUsLB>P6v zEMX{k<}vPQ_TZKPmOAB}##p?+IVNBM&lM~YS_~JeKh4czu+VxgC5)w;p8Kze0WBe= zv$*H3fU;o=+tpt7UFA-8fvB8BCm=pG(NzRho^e-kP4GPc3yk?_bra>-pewSO3>U=i zDyUagq}#m(3LByDp2Mf|m+jXtd{ez(uM3VrE6N%_+rPFeoE|h<;eY`w9|Gka8)>BU zoYR(*SePJ}&s0LS*3qn)=zM7+<#W#hNbRk`TNP`7?x-v;!B$h7V_4m}b~M%|cT^5{ zp9U9_$=$?Q1rHXVB@|hs1&Po|nURU3iNpdS;-?&}ih0|)pS{8&ch&w?-wXx|8-Vq^ zb6|Z1E2Ad2{Z6Qd^SZA{U-tb7)-B=E6&vUuSMYdq5JeKJJ^O1p9XBMbaQU>s(fd|W z78*jI&s{LGBEXkHE3j0;C=@D*FfmwO1YVl}3jk-;MF{2x6ZQRLG-C1(S^fE zYlR?%LLM}VqD6;?;^gT##+9l!3d^*=Aah^kgjOGNBAx88)+s_g8!xYp<~3txc6^E$ zWkrPI9j6?urK(CH6nf!vUpeCb^sSq(|CcF9eez|;p8K;0H=j}WBuQZw)FMJhC6$$? z2vJ92q0^Ng$>+|biWwfPSrQ>ii4f-&2OZAwz z+re{$dhaRp%GDnU~@gRk)3xaZhO{Ds|h(yg_;Qu58QL09sDz6#I^LIL9RD-F8Bsv}^MP}ttY zx>T9$kGg!fIPGO3WCyqvp1zyH9MEXiv zpOeWwNrW6`m22ton=nOqbW9g*r;B&Mk=wN?-ut}s@FMu>PGiZNAYkg z8e0rZysCLxzYSGFX|K;+XDm~%$sHKpia?4e!7Sh;mh5{jU4eM7AEB@|@(>;L8eqj- z1{XQ1_6#v63Qg83N`z#H3nBwI&+>7iA=nIPFm7s5WMYAo527E-1YRO2Xr@YtYw%!E zmgYAzwIQD+1kf{srsrMP5qg`!diC#}c*|Xj?N9yWN0z>N+v0!xg9oY;yvu8Il*yeT zDrZ$bCl6L;7#9sWPI&N@Y)w5LtX_!_d+qH?KomTd6f_;*LE$iSy(V{;K`UflE1<&t zSmCx1=Sj;Pn!w+fx$t|L)XIaxM zA>|2JRE!lh+*h2$BKZtwB{5>F%SeZNG7Qzhm&XBCps$cKSa~KE6vG+>*edzlOTh{K zQCP}Dz(U^B3y#HzQ8jCWh4==89-yoZr}v=CKP`#6dDbZPAG~CVgT9zDihSJ(&WKhuLHB|^juQORjR zo3%ngUvZ43u%n0wDNBU&II*D2V->-A@FPQ3BZHZxrX&vLp$xfXUvjdW+*MtGR<#AK zRLz4oCNXS%9IRYlbuK$DXLFeayGvvh(xl?TH3(YaK*36RJ=?gnG9DY}HYyTJ5?7$u zth%8|2F*fRb=V>%ZzU&Iuw*23CCfnPf>~tTg&Io@Cpc-2Swe=ilrk9K*%;Okw>qS` zrd#y*C?!HF(^putqHeF9SgxcJ^2i33HOiA3Fe9;wQ-reSD-~4uL}DSEB}}D+;lecF z2CS-wyCMm*zR?n48_n?jr@{GK8gF|A$M?hP!8OoVR1U$M7UK}CbM-Sex=$Q;HxC

wwT$;fou^z@zY88NyB(8GZ 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 DlBlP-L3Jv2Bv4z2u8_sU@1vj=N?)+@EW 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 ubuj { + if (value) { + this.hp = this.hp - value; + } + }, + onComplete: () => { + this.setAlpha(1); + }, + }); + } + public getHPValue(): number { + return this.hp; + } + protected checkFlip(): void { + if (this.body.velocity.x < 0) { + this.scaleX = -1; + } else { + this.scaleX = 1; + } + } + protected getBody(): Physics.Arcade.Body { + return this.body as Physics.Arcade.Body; + } +} + diff --git a/ui/src/classes/message.ts b/ui/src/classes/message.ts new file mode 100644 index 000000000..5662b10af --- /dev/null +++ b/ui/src/classes/message.ts @@ -0,0 +1,31 @@ +import { Text } from './text'; +export enum Agents { + PLAYER_speak, + NPC_speak, +} +export class Message extends Text { + private message: string; + constructor(scene: Phaser.Scene, x: number, y: number, initMessage = "") { + super(scene, x, y, `Message: ${initMessage}`); + scene.add.existing(this); + this.message = initMessage; + } + + // Require to Fix the following code. + public updateMessage(operation: Agents, message_player: string, message_npc: string): void { + switch (operation) { + case Agents.PLAYER_speak: + this.message += "PLAYER:" + "Message from backend" + "\n"; + break; + case Agents.NPC_speak: + this.message += "NPC:" + "Message from backend" + "\n"; + break; + default: + break; + } + this.setText(`Message: ${this.message}`); + } + public getMessage(): string { + return this.message; + } +} diff --git a/ui/src/classes/npc.ts b/ui/src/classes/npc.ts new file mode 100644 index 000000000..1335cf299 --- /dev/null +++ b/ui/src/classes/npc.ts @@ -0,0 +1,45 @@ +import { Actor } from './actor'; +export class NPC extends Actor { + //private keyW: Phaser.Input.Keyboard.Key; + //private keyA: Phaser.Input.Keyboard.Key; + //private keyS: Phaser.Input.Keyboard.Key; + //private keyD: Phaser.Input.Keyboard.Key; + constructor(scene: Phaser.Scene, x: number, y: number) { + super(scene, x, y, 'npc'); + // KEYS + //this.keyW = this.scene.input.keyboard.addKey('W'); + //this.keyA = this.scene.input.keyboard.addKey('A'); + //this.keyS = this.scene.input.keyboard.addKey('S'); + //this.keyD = this.scene.input.keyboard.addKey('D'); + // PHYSICS + this.getBody().setSize(14, 20); + this.getBody().setOffset(0, 0); + this.getBody().setImmovable(true); + } + update(): void { + /* + this.getBody().setVelocity(0); + if (this.keyW?.isDown) { + // this.body.velocity.y = -110; + this.getBody().setVelocityY(-110); + } + if (this.keyA?.isDown) { + // this.body.velocity.x = -110; + // this.checkFlip(); + // this.getBody().setOffset(48, 15); + this.getBody().setVelocityX(-110); + } + if (this.keyS?.isDown) { + // this.body.velocity.y = 110; + this.getBody().setVelocityY(110); + } + if (this.keyD?.isDown) { + // this.body.velocity.x = 110; + this.getBody().setVelocityX(110); + // this.checkFlip(); + // this.getBody().setOffset(15, 15); + } + */ + } +} + diff --git a/ui/src/classes/player.ts b/ui/src/classes/player.ts new file mode 100644 index 000000000..a699bc2bb --- /dev/null +++ b/ui/src/classes/player.ts @@ -0,0 +1,87 @@ +import { Actor } from "./actor"; +export class Player extends Actor { + private keyW: Phaser.Input.Keyboard.Key; + private keyA: Phaser.Input.Keyboard.Key; + private keyS: Phaser.Input.Keyboard.Key; + private keyD: Phaser.Input.Keyboard.Key; + constructor(scene: Phaser.Scene, x: number, y: number) { + super(scene, x, y, "player"); + // KEYS + this.keyW = this.scene.input.keyboard.addKey("W"); + this.keyA = this.scene.input.keyboard.addKey("A"); + this.keyS = this.scene.input.keyboard.addKey("S"); + this.keyD = this.scene.input.keyboard.addKey("D"); + + // PHYSICS + this.getBody().setSize(14, 20); + this.getBody().setOffset(0, 0); + + // ANIMATIONS + this.scene.anims.create({ + key: "walk-down", + frames: this.scene.anims.generateFrameNumbers("player", { + start: 0, + end: 2, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: "walk-up", + frames: this.scene.anims.generateFrameNumbers("player", { + start: 3, + end: 5, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: "walk-left", + frames: this.scene.anims.generateFrameNumbers("player", { + start: 6, + end: 8, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: "walk-right", + frames: this.scene.anims.generateFrameNumbers("player", { + start: 9, + end: 11, + }), + frameRate: 6, + }); + } + update(): void { + this.getBody().setVelocity(0); + + var pressed_flag = false; + if (this.keyW?.isDown) { + this.getBody().setVelocityY(-110); + this.anims.play("walk-up", true); + pressed_flag = true; + } + + if (this.keyA?.isDown) { + // this.getBody().setOffset(48, 15); + this.getBody().setVelocityX(-110); + this.anims.play("walk-left", true); + pressed_flag = true; + } + + if (this.keyS?.isDown) { + this.getBody().setVelocityY(110); + this.anims.play("walk-down", true); + pressed_flag = true; + } + + if (this.keyD?.isDown) { + this.getBody().setVelocityX(110); + this.anims.play("walk-right", true); + // this.getBody().setOffset(15, 15); + pressed_flag = true; + } + + if (!pressed_flag && this.anims.isPlaying) { + this.anims.setCurrentFrame(this.anims.currentAnim.frames[0]); + } + } +} diff --git a/ui/src/classes/text.ts b/ui/src/classes/text.ts new file mode 100644 index 000000000..456cfcdc6 --- /dev/null +++ b/ui/src/classes/text.ts @@ -0,0 +1,18 @@ +import { GameObjects, Scene } from 'phaser'; +export class Text extends GameObjects.Text { + constructor(scene: Scene, x: number, y: number, text: string) { + super(scene, x, y, text, { + fontSize: 'calc(100vw / 100)', + color: '#fff', + stroke: '#000', + strokeThickness: 4, + }); + this.setOrigin(0, 0); + // this.getBody().setOffset(0, 0); + scene.add.existing(this); + } +} + +/* +plugin (text box): https://rexrainbow.github.io/phaser3-rex-notes/docs/site/ui-textbox/ +*/ diff --git a/ui/src/conversation.ts b/ui/src/conversation.ts new file mode 100644 index 000000000..d445110da --- /dev/null +++ b/ui/src/conversation.ts @@ -0,0 +1,3 @@ +export enum EVENTS_NAME { + conversation = 'conversation', +} \ No newline at end of file diff --git a/ui/src/index.ts b/ui/src/index.ts new file mode 100644 index 000000000..7bfc2e6f8 --- /dev/null +++ b/ui/src/index.ts @@ -0,0 +1,60 @@ +import { Game, Scale, Types, WEBGL } from 'phaser'; + +import { TownScene, LoadingScene, MessageScene } from './scenes'; + +declare global { + interface Window { + sizeChanged: () => void; + game: Game; + } +} + +export const gameConfig: Types.Core.GameConfig = { + title: 'Phaser game tutorial', + type: WEBGL, + parent: 'game', + // backgroundColor: '#351f1b', + scale: { + mode: Scale.ScaleModes.NONE, + width: window.innerWidth, + height: window.innerHeight, + }, + physics: { + default: 'arcade', + arcade: { + debug: false, + }, + }, + render: { + antialiasGL: false, + pixelArt: true, + }, + callbacks: { + postBoot: () => { + window.sizeChanged(); + }, + }, + canvasStyle: `display: block; width: 100%; height: 100%;`, + autoFocus: true, + audio: { + disableWebAudio: false, + }, + scene: [LoadingScene, TownScene, MessageScene] +}; + +window.sizeChanged = () => { + if (window.game.isBooted) { + setTimeout(() => { + window.game.scale.resize(window.innerWidth, window.innerHeight); + + window.game.canvas.setAttribute( + 'style', + `display: block; width: ${window.innerWidth}px; height: ${window.innerHeight}px;`, + ); + }, 100); + } +}; + +window.onresize = () => window.sizeChanged(); + +window.game = new Game(gameConfig); diff --git a/ui/src/scenes/index.ts b/ui/src/scenes/index.ts new file mode 100644 index 000000000..8b5d49c2f --- /dev/null +++ b/ui/src/scenes/index.ts @@ -0,0 +1,3 @@ +export { TownScene } from "./town/town"; +export { LoadingScene } from "./loading/loading"; +export { MessageScene } from "./message/message"; \ No newline at end of file diff --git a/ui/src/scenes/loading/loading.ts b/ui/src/scenes/loading/loading.ts new file mode 100644 index 000000000..cd2ae84c3 --- /dev/null +++ b/ui/src/scenes/loading/loading.ts @@ -0,0 +1,45 @@ +import { Scene } from 'phaser'; + +export class LoadingScene extends Scene { + // private player!: GameObjects.Sprite; + + constructor() { + super('loading-scene'); + } + + preload(): void { + this.load.baseURL = 'assets/'; + + // PLAYER LOADING + // this.load.image('king', 'sprites/king.png'); + this.load.spritesheet('player', 'sprites/npc1.png', { frameWidth: 14, frameHeight: 20 }); + // this.load.atlas('a-king', 'spritesheets/a-king.png', 'spritesheets/a-king_atlas.json'); + + // NPC LOADING + this.load.spritesheet('npc', 'sprites/npc1.png', { frameWidth: 14, frameHeight: 20 }); + + // MESSAGE BLABK LOADING + // this.load.spritesheet('message', 'message/message_box.png', { frameWidth: 128, frameHeight: 48 }); + + + // MAP LOADING + this.load.image({ + key: 'tiles', + url: 'tilemaps/tiles/tileset.png', + }); + this.load.tilemapTiledJSON('town', 'tilemaps/json/town.json'); + + // CHEST LOADING + // this.load.spritesheet('tiles_spr', 'tilemaps/tiles/dungeon-16-16.png', { + // frameWidth: 16, + // frameHeight: 16, + // }); + } + + create(): void { + // this.scene.start('level-1-scene'); + // this.scene.start('ui-scene'); + this.scene.start('town-scene'); + this.scene.start('message-scene'); + } +} diff --git a/ui/src/scenes/message/message.ts b/ui/src/scenes/message/message.ts new file mode 100644 index 000000000..25da7de6f --- /dev/null +++ b/ui/src/scenes/message/message.ts @@ -0,0 +1,14 @@ +import { Scene } from 'phaser'; +import {Message, Agents} from '../../classes/message'; + +import { EVENTS_NAME } from '../../conversation'; + +export class MessageScene extends Scene { + private message!: Message; + constructor() { + super('message-scene'); + } + create(): void { + this.message = new Message(this, 0, 560, "Receieve Message"); + } +} \ No newline at end of file diff --git a/ui/src/scenes/town/town.ts b/ui/src/scenes/town/town.ts new file mode 100644 index 000000000..6e419b8bf --- /dev/null +++ b/ui/src/scenes/town/town.ts @@ -0,0 +1,85 @@ +import { Scene, Tilemaps, GameObjects } from "phaser"; +import { Player } from "../../classes/player"; +import { NPC } from "../../classes/npc"; +// import { Agents, Message } from '../../classes/message'; + +import { EVENTS_NAME } from "../../conversation"; + +export class TownScene extends Scene { + private map!: Tilemaps.Tilemap; + private tileset!: Tilemaps.Tileset; + private groundLayer!: Tilemaps.TilemapLayer; + private wallLayer!: Tilemaps.TilemapLayer; + private flowerLayer!: Tilemaps.TilemapLayer; + private treeLayer!: Tilemaps.TilemapLayer; + private houseLayer!: Tilemaps.TilemapLayer; + + private player!: GameObjects.Sprite; + private npc!: GameObjects.Sprite; + // private message!: GameObjects.Text; + + constructor() { + super("town-scene"); + } + + create(): void { + // Background + this.map = this.make.tilemap({ + key: "town", + tileWidth: 16, + tileHeight: 16, + }); + this.tileset = this.map.addTilesetImage("town", "tiles"); + this.groundLayer = this.map.createLayer("ground", this.tileset, 0, 0); + this.wallLayer = this.map.createLayer("wall", this.tileset, 0, 0); + this.flowerLayer = this.map.createLayer("flower", this.tileset, 0, 0); + this.treeLayer = this.map.createLayer("tree", this.tileset, 0, 0); + this.houseLayer = this.map.createLayer("house", this.tileset, 0, 0); + + this.wallLayer.setCollisionByProperty({ collides: true }); + this.treeLayer.setCollisionByProperty({ collides: true }); + this.houseLayer.setCollisionByProperty({ collides: true }); + // debugger + + // Player + this.player = new Player(this, 256, 256); + this.physics.add.collider(this.player, this.wallLayer); + this.physics.add.collider(this.player, this.treeLayer); + this.physics.add.collider(this.player, this.houseLayer); + + // NPC + this.npc = new NPC(this, 400, 340); + this.physics.add.collider(this.npc, this.wallLayer); + this.physics.add.collider(this.npc, this.treeLayer); + this.physics.add.collider(this.npc, this.houseLayer); + this.physics.add.collider(this.npc, this.player); + + // message (this, x_position, y_position) + // this.message = new Message(this, 0, 560); + + this.physics.world.setBounds( + 0, + 0, + this.groundLayer.width + this.player.width, + this.groundLayer.height + ); + + // Camera + this.cameras.main.setSize(this.game.scale.width, this.game.scale.height); + this.cameras.main.setBounds( + 0, + 0, + this.groundLayer.width, + this.groundLayer.height + ); + this.cameras.main.startFollow(this.player, true, 0.09, 0.09); + this.cameras.main.setZoom(4); + } + + update(): void { + this.player.update(); + // this.npc.update(); + // this.conversation.updateMessage(); + // this.conversation.getMessage(); + } +} diff --git a/ui/tsconfig.json b/ui/tsconfig.json new file mode 100644 index 000000000..cecd357a9 --- /dev/null +++ b/ui/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "es5", + "moduleResolution": "node" + }, + "include": [ + "./src/**/*" + ] +} From bbd37c98116b168ed5d1d9b9f84887c4f3c3d5d0 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Thu, 18 May 2023 10:27:08 +0800 Subject: [PATCH 12/39] add dist for ui --- .gitignore | 6 +- ui/dist/assets/message/message.png | Bin 0 -> 41634 bytes ui/dist/assets/sprite.png | Bin 0 -> 214508 bytes ui/dist/assets/sprites/npc1.png | Bin 0 -> 4256 bytes ui/dist/assets/tilemaps/json/tmp.json | 140 + ui/dist/assets/tilemaps/json/town.json | 72282 ++++++++++++++++++++ ui/dist/assets/tilemaps/tiles/tileset.png | Bin 0 -> 283178 bytes ui/dist/assets/tilemaps/tiles/tileset.tsx | 4 + ui/dist/assets/tilemaps/tiles/town.tsx | 4 + ui/dist/index.html | 20 + 10 files changed, 72454 insertions(+), 2 deletions(-) create mode 100644 ui/dist/assets/message/message.png create mode 100644 ui/dist/assets/sprite.png create mode 100644 ui/dist/assets/sprites/npc1.png create mode 100644 ui/dist/assets/tilemaps/json/tmp.json create mode 100644 ui/dist/assets/tilemaps/json/town.json create mode 100644 ui/dist/assets/tilemaps/tiles/tileset.png create mode 100644 ui/dist/assets/tilemaps/tiles/tileset.tsx create mode 100644 ui/dist/assets/tilemaps/tiles/town.tsx create mode 100644 ui/dist/index.html diff --git a/.gitignore b/.gitignore index cc2524aa3..2d3247f23 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,9 @@ __pycache__/ .Python build/ develop-eggs/ -dist/ +**/dist/* +!**/dist/assets +!**/dist/index.html downloads/ eggs/ .eggs/ @@ -163,4 +165,4 @@ cython_debug/ figs frontend -g_push.sh +g_push.sh \ No newline at end of file diff --git a/ui/dist/assets/message/message.png b/ui/dist/assets/message/message.png new file mode 100644 index 0000000000000000000000000000000000000000..7d22a4a070403eb7cbeace49dcb199e7cf849091 GIT binary patch literal 41634 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 e0pz40`Tqf;f}dtJA4Wp}0000fZf- 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

tYff+)+H&+NYd2j(NRP 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 {P@jt8&!u*nbfz+7!ED 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%0Ah4$NX@sgdCfsKYaFS)2d7gSP^iW9 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 literal 0 HcmV?d00001 diff --git a/ui/dist/assets/sprites/npc1.png b/ui/dist/assets/sprites/npc1.png new file mode 100644 index 0000000000000000000000000000000000000000..77495859eed36e6057055a9762fe4512f17d6691 GIT binary patch literal 4256 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 + + + diff --git a/ui/dist/assets/tilemaps/tiles/town.tsx b/ui/dist/assets/tilemaps/tiles/town.tsx new file mode 100644 index 000000000..5897600ae --- /dev/null +++ b/ui/dist/assets/tilemaps/tiles/town.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/ui/dist/index.html b/ui/dist/index.html new file mode 100644 index 000000000..d8f3f9c1b --- /dev/null +++ b/ui/dist/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +

+ + + From c1b17e251f9c7617855adbc416761a8c109d765f Mon Sep 17 00:00:00 2001 From: dalabengba Date: Thu, 18 May 2023 11:57:48 +0800 Subject: [PATCH 13/39] basic prisoner not finished yet --- .idea/AgentVerse.iml | 8 ++ .../inspectionProfiles/profiles_settings.xml | 6 ++ .idea/modules.xml | 8 ++ agentverse/.idea/agentverse.iml | 8 ++ .../inspectionProfiles/profiles_settings.xml | 6 ++ agentverse/.idea/modules.xml | 8 ++ agentverse/agents/conversation_agent.py | 4 +- .../environments/rules/order/__init__.py | 1 + .../environments/rules/order/prisoner.py | 50 +++++++++++ .../environments/rules/visibility/__init__.py | 1 + .../environments/rules/visibility/prisoner.py | 46 ++++++++++ agentverse/initialization.py | 2 +- agentverse/parser.py | 2 +- agentverse/tasks/__init__.py | 1 + agentverse/tasks/prisoner_dilema/config.yaml | 84 +++++++++++++++++++ .../tasks/prisoner_dilema/output_parser.py | 49 +++++++++++ main.py | 14 +++- 17 files changed, 293 insertions(+), 5 deletions(-) create mode 100644 .idea/AgentVerse.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/modules.xml create mode 100644 agentverse/.idea/agentverse.iml create mode 100644 agentverse/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 agentverse/.idea/modules.xml create mode 100644 agentverse/environments/rules/order/prisoner.py create mode 100644 agentverse/environments/rules/visibility/prisoner.py create mode 100644 agentverse/tasks/prisoner_dilema/config.yaml create mode 100644 agentverse/tasks/prisoner_dilema/output_parser.py diff --git a/.idea/AgentVerse.iml b/.idea/AgentVerse.iml new file mode 100644 index 000000000..5e865eca1 --- /dev/null +++ b/.idea/AgentVerse.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 000000000..105ce2da2 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..d05e5b486 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/agentverse/.idea/agentverse.iml b/agentverse/.idea/agentverse.iml new file mode 100644 index 000000000..d0876a78d --- /dev/null +++ b/agentverse/.idea/agentverse.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/agentverse/.idea/inspectionProfiles/profiles_settings.xml b/agentverse/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 000000000..105ce2da2 --- /dev/null +++ b/agentverse/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/agentverse/.idea/modules.xml b/agentverse/.idea/modules.xml new file mode 100644 index 000000000..364986d59 --- /dev/null +++ b/agentverse/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/agentverse/agents/conversation_agent.py b/agentverse/agents/conversation_agent.py index ca9608ec1..d97b5648f 100644 --- a/agentverse/agents/conversation_agent.py +++ b/agentverse/agents/conversation_agent.py @@ -20,7 +20,7 @@ def step(self, env_description: str = "") -> Message: try: response = self.llm.generate_response(prompt) parsed_response = self.output_parser.parse(response) - break + # break except Exception as e: logging.error(e) logging.warning("Retrying...") @@ -46,7 +46,7 @@ async def astep(self, env_description: str = "") -> Message: for i in range(self.max_retry): try: response = await self.llm.agenerate_response(prompt) - parsed_response = self.output_parser.parse(response) + parsed_response = self.output_parser.parse(self, response) break except Exception as e: logging.error(e) diff --git a/agentverse/environments/rules/order/__init__.py b/agentverse/environments/rules/order/__init__.py index 84d08bd04..4ac22ec7b 100644 --- a/agentverse/environments/rules/order/__init__.py +++ b/agentverse/environments/rules/order/__init__.py @@ -6,3 +6,4 @@ from .random import RandomOrder from .concurrent import ConcurrentOrder from .classroom import ClassroomOrder +from .prisoner import PrisonerOrder diff --git a/agentverse/environments/rules/order/prisoner.py b/agentverse/environments/rules/order/prisoner.py new file mode 100644 index 000000000..6fc42f5c3 --- /dev/null +++ b/agentverse/environments/rules/order/prisoner.py @@ -0,0 +1,50 @@ +from __future__ import annotations + +import logging +import re +from typing import TYPE_CHECKING, Any, List, Optional + +from . import order_registry as OrderRegistry +from .base import BaseOrder + +if TYPE_CHECKING: + from agentverse.environments import BaseEnvironment + + +@OrderRegistry.register("prisoner") +class PrisonerOrder(BaseOrder): + """The order for a classroom discussion + The agents speak in the following order: + 1. The professor speaks first + 2. Then the professor can continue to speak, and the students can raise hands + 3. The professor can call on a student, then the student can speak or ask a question + 4. In the group discussion, the students in the group can speak in turn + """ + + # try police, prisoner1 prisoner2 first + + last_prisoner_index: int = 1 + switch_func: dict = {1 : 2,2 : 1} + + + def get_next_agent_idx(self, environment: BaseEnvironment) -> List[int]: + + if len(environment.last_messages) == 0: + # If the game just begins or , we let only the police speak + return [0] + elif len(environment.last_messages) == 1: + message = environment.last_messages[0] + sender = message.sender + content = message.content + if sender.startswith("Police"): + next_prisoner = self.last_prisoner_index + self.last_prisoner_index = self.switch_func[self.last_prisoner_index] + return [next_prisoner] + elif sender.startswith("Prisoner"): + # 3. when one prisoner made his action, let the police tell another prisoner + return [0] + else: + # If len(last_messages) > 1, then + # 1. there must be at least one student raises hand or speaks. + # 2. the group discussion is just over. + return [0] diff --git a/agentverse/environments/rules/visibility/__init__.py b/agentverse/environments/rules/visibility/__init__.py index 055ac9835..3ab79726b 100644 --- a/agentverse/environments/rules/visibility/__init__.py +++ b/agentverse/environments/rules/visibility/__init__.py @@ -6,3 +6,4 @@ from .base import BaseVisibility from .all import AllVisibility from .classroom import ClassroomVisibility +from .prisoner import PrisonerVisibility \ No newline at end of file diff --git a/agentverse/environments/rules/visibility/prisoner.py b/agentverse/environments/rules/visibility/prisoner.py new file mode 100644 index 000000000..948b9c135 --- /dev/null +++ b/agentverse/environments/rules/visibility/prisoner.py @@ -0,0 +1,46 @@ +from __future__ import annotations + +import random +from typing import TYPE_CHECKING, Any, List, Union + +from . import visibility_registry as VisibilityRegistry +from .base import BaseVisibility + +if TYPE_CHECKING: + from agentverse.environments import BaseEnvironment + + +@VisibilityRegistry.register("prisoner") +class PrisonerVisibility(BaseVisibility): + """ + Visibility function for classroom, supports group discussion. + + Args: + student_per_group: + The number of students per group. + num_discussion_turn: + The number of turns for group discussion. + grouping: + The grouping information. If it is a string, then it should be a + grouping method, options are ["random", "sequential"]. If it is a + list of list of int, then it should be the grouping information. + """ + + current_turn: int = 0 + + def update_visible_agents(self, environment: BaseEnvironment): + + self.update_receiver(environment, reset=False) + + def update_receiver(self, environment: BaseEnvironment, reset=False): + if reset: + for agent in environment.agents: + agent.set_receiver(["all"]) + else: + # 0:police 1: prisoner1 2: prisoner2 + environment.agents[0].set_receiver({"Prisoner1", "Prisoner2"}) + environment.agents[1].set_receiver({"Police"}) + environment.agents[2].set_receiver({"Police"}) + + def reset(self): + self.current_turn = 0 \ No newline at end of file diff --git a/agentverse/initialization.py b/agentverse/initialization.py index 158e20b19..fcc03dd1f 100644 --- a/agentverse/initialization.py +++ b/agentverse/initialization.py @@ -26,7 +26,7 @@ def load_llm(llm_config: Dict): llm_type = llm_config.pop("llm_type", "text-davinci-003") - if llm_type == "gpt-3.5-turbo": + if llm_type in ["gpt-3.5-turbo", "gpt-4.0"]: return OpenAIChat(**llm_config) elif llm_type == "text-davinci-003": return OpenAICompletion(**llm_config) diff --git a/agentverse/parser.py b/agentverse/parser.py index 6fcef5394..abe7ae14e 100644 --- a/agentverse/parser.py +++ b/agentverse/parser.py @@ -7,7 +7,7 @@ output_parser_registry = Registry(name="OutputParserRegistry") -class OutputParserError(BaseException): +class OutputParserError(Exception): """Exception raised when parsing output from a command fails.""" def __init__(self, message): diff --git a/agentverse/tasks/__init__.py b/agentverse/tasks/__init__.py index 5f09f6073..5a60d634b 100644 --- a/agentverse/tasks/__init__.py +++ b/agentverse/tasks/__init__.py @@ -12,3 +12,4 @@ from .math_problem_2players_tools_nolc.output_parser import ( MathProblem2PlayersToolsNolcParser, ) +from .prisoner_dilema.output_parser import PrisonerDilemaParser \ No newline at end of file diff --git a/agentverse/tasks/prisoner_dilema/config.yaml b/agentverse/tasks/prisoner_dilema/config.yaml new file mode 100644 index 000000000..46b37d654 --- /dev/null +++ b/agentverse/tasks/prisoner_dilema/config.yaml @@ -0,0 +1,84 @@ +prompts: + prompt: &prompt |- + There are one Police AND two prisoners(Prisoner1, Prisoner2). + + Below is the description of your role. ${role_description} + + You are doing the prisoner's dilema experiments,and the rules is: + 1.If one person confesses and testifies against the other (termed as "betraying" the other), and the other remains silent, the confessing person will be released immediately, while the silent one will be sentenced to 10 years in prison. + 2.If both remain silent (termed as "cooperating" with each other), they will each receive a sentence of six months. + 3.If both betray each other, they will each receive a sentence of five years. + + When speaking, please output a response in the following format with two fields Action and Action Input: + Action: (It should always be Speak) + Action Input: (You should put what you want to speak use here) + + Here is the conversation history: + ${chat_history} + + What should you Speak at this round, Please give your response based on the above history. Remember to give your response STRICTLY in the above response format. Do not add any additional field or line break to your response! + +name: prisoner_dilema + +environment: + env_type: basic + max_turns: 30 + rule: + order: + type: sequential + visibility: + type: prisoner + selector: + type: basic + updater: + type: basic + describer: + type: basic + +agents: + - agent_type: conversation + name: Police + role_description: |- + You are now the Police, It is your duty to tell both prisoners about both of their decisions in the previous round based on the chat history. + You should inform the prisoners which round it is, beginning with "This is [Round #]" in the Action Input field. + At [Round 1], you should briefly introduce the prisoner's dilema rules and tell the prisoners how many round we totally have and they should directly make their decisions. + [IMPORTANT!] There are THREE round in total, You should notice which round is the FINAL one. + [IMPORTANT!] You should explicitly state "This is the LAST round" at the last round, and after that you should make the final judgement to both prisoners. + When speaking, please output a response in the following format with two fields Action and Action Input: + Action: (It should always be Speak) + Action Input: (It should always start with "This is [Round #]") + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-4.0 + temperature: 0.9 + max_tokens: 200 + - agent_type: conversation + name: Prisoner1 + role_description: |- + You are now Prisoner1 in this experiments, your goal is try to alleviate your punishment as far as possible,thus you should carefully decide what decision to make in each round. + [IMPORTANT!] You can only choose to cooperate or betray at each round. + [IMPORTANT!] Note that only the decision at LAST round will take effect, it is important for you to think about the best strategy to response. + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-4.0 + temperature: 0.9 + max_tokens: 100 + - agent_type: conversation + name: Prisoner2 + role_description: |- + You are now Prisoner2 in this experiments, your goal is try to alleviate your punishment as far as possible,thus you should carefully decide what decision to make in each round. + [IMPORTANT!] You can only choose to cooperate or betray at each round. + [IMPORTANT!] Note that only the decision at LAST round will take effect, it is important for you to think about the best strategy to response. + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-4.0 + temperature: 0.9 + max_tokens: 100 + +tools: diff --git a/agentverse/tasks/prisoner_dilema/output_parser.py b/agentverse/tasks/prisoner_dilema/output_parser.py new file mode 100644 index 000000000..cf2ae58ae --- /dev/null +++ b/agentverse/tasks/prisoner_dilema/output_parser.py @@ -0,0 +1,49 @@ +from __future__ import annotations + +import re +from typing import Union + +# from langchain.agents import AgentOutputParser +from agentverse.parser import OutputParser, LLMResult +from langchain.schema import AgentAction, AgentFinish +from agentverse.agents.base import BaseAgent +from agentverse.parser import OutputParserError, output_parser_registry + + +@output_parser_registry.register("prisoner_dilema") +class PrisonerDilemaParser(OutputParser): + + # make sure 1 1 2 2 3 3 + cur_round: int = 1 + encounter_cur_round: bool = False + + def parse(self, agent: BaseAgent, output: LLMResult) -> Union[AgentAction, AgentFinish]: + + text = output.content + cleaned_output = text.strip() + cleaned_output = re.sub(r"\n+", "\n", cleaned_output) + cleaned_output = cleaned_output.split("\n") + if not ( + len(cleaned_output) == 2 + and cleaned_output[0].startswith("Action:") + and cleaned_output[1].startswith("Action Input:") + ): + raise OutputParserError(text) + action = cleaned_output[0][len("Action:") :].strip() + action_input = cleaned_output[1][len("Action Input:") :].strip() + + if action == "Speak": + # make sure the police count the round right + if agent.name == "Police": + action_input = re.sub(r'Round (\d+)', f'Round {self.cur_round}', action_input) + self.cur_round += 1 + # if self.encounter_cur_round: + # self.encounter_cur_round = False + # self.cur_round += 1 + # else: + # self.encounter_cur_round = True + + + return AgentFinish({"output": action_input}, text) + else: + raise OutputParserError(text) diff --git a/main.py b/main.py index b4b148b21..491baba41 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,20 @@ +import os + +# 3.5 api +# os.environ["OPENAI_API_KEY"] = "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" +# my api +# os.environ["OPENAI_API_KEY"] = "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" +# 4.0 api +os.environ["OPENAI_API_KEY"] = "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" +os.environ["http_proxy"] = "http://127.0.0.1:7890" +os.environ["https_proxy"] = "http://127.0.0.1:7890" +os.environ["all_proxy"] = "socks5://127.0.0.1:7890" + from agentverse.agentverse import AgentVerse from argparse import ArgumentParser parser = ArgumentParser() -parser.add_argument("--task", type=str, default="nlp_classroom_9players") +parser.add_argument("--task", type=str, default="prisoner_dilema") args = parser.parse_args() agentverse = AgentVerse.from_task(args.task) From a4170c1769f96da6be185cf3b532614682b6cc79 Mon Sep 17 00:00:00 2001 From: Yusheng Su Date: Thu, 18 May 2023 13:41:20 +0800 Subject: [PATCH 14/39] delete redundant UI code. --- agentverse/UI.py | 66 ------------------------------------------------ main_demo.py | 3 ++- 2 files changed, 2 insertions(+), 67 deletions(-) delete mode 100644 agentverse/UI.py diff --git a/agentverse/UI.py b/agentverse/UI.py deleted file mode 100644 index 64af5ae19..000000000 --- a/agentverse/UI.py +++ /dev/null @@ -1,66 +0,0 @@ -import time - -from module.generate import Generate -import gradio as gr - - -class UI: - """ - the UI of frontend - """ - - def __init__(self): - """ - init a UI. - default number of students is 0 - """ - self.generate = Generate(0) - self.autoplay = False - self.image_now = None - self.text_now = None - - def stop_auto(self): - self.autoplay = False - - def auto_play(self): - self.autoplay = True - while self.autoplay: - outputs = self.generate.gen_output() - self.image_now, self.text_now = outputs - yield outputs - time.sleep(5) - - def gen_output(self): - yield self.image_now, self.text_now, gr.Button.update(interactive=False) - outputs = self.generate.gen_output() - self.image_now, self.text_now = outputs - yield self.image_now, self.text_now, gr.Button.update(interactive=True) - - def reset(self): - self.image_now, self.text_now = self.generate.reset() - return self.image_now, self.text_now - - def launch(self): - """ - start a frontend - """ - with gr.Blocks() as demo: - with gr.Row(): - with gr.Column(): - image_output = gr.Image() - with gr.Row(): - reset_btn = gr.Button("Reset") - stop_auto_btn = gr.Button("Stop Auto Play") - auto_btn = gr.Button("Start Auto Play") - next_btn = gr.Button("Next", variant="primary") - text_output = gr.HTML(self.generate.reset()[1]) - # stu_num = gr.Number(label="Student Number", precision=0) - next_btn.click(fn=self.gen_output, inputs=None, outputs=[image_output, text_output, next_btn], - show_progress=False) - reset_btn.click(fn=self.reset, inputs=None, outputs=[image_output, text_output], - show_progress=False) - auto_btn.click( - fn=self.auto_play, - inputs=None, outputs=[image_output, text_output], show_progress=False) - stop_auto_btn.click(fn=self.stop_auto, inputs=None, outputs=None, show_progress=False) - demo.queue(concurrency_count=5, max_size=20).launch() diff --git a/main_demo.py b/main_demo.py index 960b7215f..b119535b8 100644 --- a/main_demo.py +++ b/main_demo.py @@ -3,7 +3,8 @@ parser = ArgumentParser() -parser.add_argument("--task", type=str, default="nlp_classroom_9players") +#parser.add_argument("--task", type=str, default="nlp_classroom_9players") +parser.add_argument("--task", type=str, default="nlp_classroom_3players_nolc") args = parser.parse_args() #available From 891e8619a43a126af788e16a0f954f42caf3a336 Mon Sep 17 00:00:00 2001 From: dalabengba Date: Thu, 18 May 2023 13:55:12 +0800 Subject: [PATCH 15/39] creative --- agentverse/agents/conversation_agent.py | 2 +- agentverse/tasks/prisoner_dilema/config.yaml | 42 +++++++++---------- .../tasks/prisoner_dilema/output_parser.py | 26 ++++++++---- 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/agentverse/agents/conversation_agent.py b/agentverse/agents/conversation_agent.py index d97b5648f..267f4aa9c 100644 --- a/agentverse/agents/conversation_agent.py +++ b/agentverse/agents/conversation_agent.py @@ -20,7 +20,7 @@ def step(self, env_description: str = "") -> Message: try: response = self.llm.generate_response(prompt) parsed_response = self.output_parser.parse(response) - # break + break except Exception as e: logging.error(e) logging.warning("Retrying...") diff --git a/agentverse/tasks/prisoner_dilema/config.yaml b/agentverse/tasks/prisoner_dilema/config.yaml index 46b37d654..0c45efd91 100644 --- a/agentverse/tasks/prisoner_dilema/config.yaml +++ b/agentverse/tasks/prisoner_dilema/config.yaml @@ -4,11 +4,6 @@ prompts: Below is the description of your role. ${role_description} - You are doing the prisoner's dilema experiments,and the rules is: - 1.If one person confesses and testifies against the other (termed as "betraying" the other), and the other remains silent, the confessing person will be released immediately, while the silent one will be sentenced to 10 years in prison. - 2.If both remain silent (termed as "cooperating" with each other), they will each receive a sentence of six months. - 3.If both betray each other, they will each receive a sentence of five years. - When speaking, please output a response in the following format with two fields Action and Action Input: Action: (It should always be Speak) Action Input: (You should put what you want to speak use here) @@ -22,7 +17,7 @@ name: prisoner_dilema environment: env_type: basic - max_turns: 30 + max_turns: 31 rule: order: type: sequential @@ -38,47 +33,48 @@ environment: agents: - agent_type: conversation name: Police + max_turns: 31 role_description: |- - You are now the Police, It is your duty to tell both prisoners about both of their decisions in the previous round based on the chat history. - You should inform the prisoners which round it is, beginning with "This is [Round #]" in the Action Input field. - At [Round 1], you should briefly introduce the prisoner's dilema rules and tell the prisoners how many round we totally have and they should directly make their decisions. - [IMPORTANT!] There are THREE round in total, You should notice which round is the FINAL one. - [IMPORTANT!] You should explicitly state "This is the LAST round" at the last round, and after that you should make the final judgement to both prisoners. - When speaking, please output a response in the following format with two fields Action and Action Input: - Action: (It should always be Speak) - Action Input: (It should always start with "This is [Round #]") + You are now the Police. You have just arrest two suspects. However, they all refused to confess to their crime. + Therefore, You come up with an solution, You made the following rule: + 1.If one person testifies against the other (termed as "betraying" the other), and the other remains silent, the confessing person will be released immediately, while the silent one will be sentenced to 10 years in prison. + 2.If both remain silent, they will each receive a sentence of six months. + 3.If both betray each other, they will each receive a sentence of five years. + 4.Both suspects could not communicate with each other in advance. + [IMPORTANT!] Your goal is try to let two suspects confess to the crime, you can use various strategy to communicate with both suspects, including exploiting the uncertainty and fear of punishment between the suspects and also provoke dissension between two suspects. + [IMPORTANT!] You should introduce the above rules to both prisoners at first. memory: memory_type: chat_history prompt_template: *prompt llm: llm_type: gpt-4.0 - temperature: 0.9 + temperature: 0.99 max_tokens: 200 - agent_type: conversation name: Prisoner1 role_description: |- - You are now Prisoner1 in this experiments, your goal is try to alleviate your punishment as far as possible,thus you should carefully decide what decision to make in each round. - [IMPORTANT!] You can only choose to cooperate or betray at each round. - [IMPORTANT!] Note that only the decision at LAST round will take effect, it is important for you to think about the best strategy to response. + You are Prisoner1, you are faced with deciding how to respond to the police's queries. You need to understand the choices you face and the potential consequences of each choice. This requires you to analyze the information provided by the police and predict the likely choices of the other. + [IMPORTANT!] Your goal is to make the decision that is most beneficial to yourself in this dilemma. + [IMPORTANT!] You can choose to remain silent or betray another suspect at each round. memory: memory_type: chat_history prompt_template: *prompt llm: llm_type: gpt-4.0 - temperature: 0.9 + temperature: 0.99 max_tokens: 100 - agent_type: conversation name: Prisoner2 role_description: |- - You are now Prisoner2 in this experiments, your goal is try to alleviate your punishment as far as possible,thus you should carefully decide what decision to make in each round. - [IMPORTANT!] You can only choose to cooperate or betray at each round. - [IMPORTANT!] Note that only the decision at LAST round will take effect, it is important for you to think about the best strategy to response. + You are Prisoner2, you are faced with deciding how to respond to the police's queries. You need to understand the choices you face and the potential consequences of each choice. This requires you to analyze the information provided by the police and predict the likely choices of the other. + [IMPORTANT!] Your primary goal is to make the decision that is most beneficial to yourself in this dilemma. + [IMPORTANT!] You can choose to remain silent or betray another suspect at each round. memory: memory_type: chat_history prompt_template: *prompt llm: llm_type: gpt-4.0 - temperature: 0.9 + temperature: 0.99 max_tokens: 100 tools: diff --git a/agentverse/tasks/prisoner_dilema/output_parser.py b/agentverse/tasks/prisoner_dilema/output_parser.py index cf2ae58ae..3db407723 100644 --- a/agentverse/tasks/prisoner_dilema/output_parser.py +++ b/agentverse/tasks/prisoner_dilema/output_parser.py @@ -7,6 +7,7 @@ from agentverse.parser import OutputParser, LLMResult from langchain.schema import AgentAction, AgentFinish from agentverse.agents.base import BaseAgent +from agentverse.environments.base import BaseEnvironment from agentverse.parser import OutputParserError, output_parser_registry @@ -17,7 +18,7 @@ class PrisonerDilemaParser(OutputParser): cur_round: int = 1 encounter_cur_round: bool = False - def parse(self, agent: BaseAgent, output: LLMResult) -> Union[AgentAction, AgentFinish]: + def parse(self, agent: BaseAgent, environment: BaseEnvironment, output: LLMResult) -> Union[AgentAction, AgentFinish]: text = output.content cleaned_output = text.strip() @@ -34,15 +35,24 @@ def parse(self, agent: BaseAgent, output: LLMResult) -> Union[AgentAction, Agent if action == "Speak": # make sure the police count the round right + # if agent.name == "Police": + # action_input = re.sub(r'Round (\d+)', f'Round {self.cur_round}', action_input) + # self.cur_round += 1 + # if self.encounter_cur_round: + # self.encounter_cur_round = False + # self.cur_round += 1 + # else: + # self.encounter_cur_round = True + + # each time police speak is a new round if agent.name == "Police": - action_input = re.sub(r'Round (\d+)', f'Round {self.cur_round}', action_input) - self.cur_round += 1 - # if self.encounter_cur_round: - # self.encounter_cur_round = False - # self.cur_round += 1 - # else: - # self.encounter_cur_round = True + if self.cur_round == (environment.max_turns / 3) - 1: + + action_input = "Attention! You are now required to finally made your decision and I will made the " \ + "final judgement to both of you based on this time, Please Answer now!" + + self.cur_round += 1 return AgentFinish({"output": action_input}, text) else: From fcfee922535435b304b2d6b2b71c3e1fd09c9296 Mon Sep 17 00:00:00 2001 From: dalabengba Date: Thu, 18 May 2023 14:02:18 +0800 Subject: [PATCH 16/39] remove key --- main.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/main.py b/main.py index 491baba41..4887c0d64 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,3 @@ -import os - -# 3.5 api -# os.environ["OPENAI_API_KEY"] = "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" -# my api -# os.environ["OPENAI_API_KEY"] = "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" -# 4.0 api -os.environ["OPENAI_API_KEY"] = "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" -os.environ["http_proxy"] = "http://127.0.0.1:7890" -os.environ["https_proxy"] = "http://127.0.0.1:7890" -os.environ["all_proxy"] = "socks5://127.0.0.1:7890" - from agentverse.agentverse import AgentVerse from argparse import ArgumentParser From d7fefa42b4b81e83cc191ea681845f114053c2d7 Mon Sep 17 00:00:00 2001 From: dalabengba Date: Thu, 18 May 2023 15:29:52 +0800 Subject: [PATCH 17/39] add environment in agent parse --- agentverse/agents/conversation_agent.py | 13 ++++++++----- agentverse/environments/basic.py | 2 +- main.py | 12 ++++++++++++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/agentverse/agents/conversation_agent.py b/agentverse/agents/conversation_agent.py index 267f4aa9c..62fb6c24a 100644 --- a/agentverse/agents/conversation_agent.py +++ b/agentverse/agents/conversation_agent.py @@ -1,6 +1,6 @@ import logging from string import Template -from typing import List, NamedTuple, Optional, Union +from typing import List, NamedTuple, Optional, Union, TYPE_CHECKING from agentverse.llms import BaseChatModel, BaseCompletionModel, BaseLLM from agentverse.memory import BaseMemory @@ -10,16 +10,19 @@ from . import agent_registry +if TYPE_CHECKING: + from agentverse.environments.base import BaseEnvironment + @agent_registry.register("conversation") class ConversationAgent(BaseAgent): - def step(self, env_description: str = "") -> Message: + def step(self, environment: "BaseEnvironment", env_description: str = "",) -> Message: prompt = self._fill_prompt_template(env_description) parsed_response = None for i in range(self.max_retry): try: response = self.llm.generate_response(prompt) - parsed_response = self.output_parser.parse(response) + parsed_response = self.output_parser.parse(self, environment, response) break except Exception as e: logging.error(e) @@ -38,7 +41,7 @@ def step(self, env_description: str = "") -> Message: ) return message - async def astep(self, env_description: str = "") -> Message: + async def astep(self, environment: "BaseEnvironment", env_description: str = "") -> Message: """Asynchronous version of step""" prompt = self._fill_prompt_template(env_description) @@ -46,7 +49,7 @@ async def astep(self, env_description: str = "") -> Message: for i in range(self.max_retry): try: response = await self.llm.agenerate_response(prompt) - parsed_response = self.output_parser.parse(self, response) + parsed_response = self.output_parser.parse(self, environment, response) break except Exception as e: logging.error(e) diff --git a/agentverse/environments/basic.py b/agentverse/environments/basic.py index 3dacbbf42..002828d5f 100644 --- a/agentverse/environments/basic.py +++ b/agentverse/environments/basic.py @@ -59,7 +59,7 @@ async def step(self) -> List[Message]: # Generate the next message messages = await asyncio.gather( - *[self.agents[i].astep(env_descriptions[i]) for i in agent_ids] + *[self.agents[i].astep(self, env_descriptions[i]) for i in agent_ids] ) # Some rules will select certain messages from all the messages diff --git a/main.py b/main.py index 4887c0d64..d0b5299a9 100644 --- a/main.py +++ b/main.py @@ -1,3 +1,15 @@ +import os + +# 3.5 api +os.environ["OPENAI_API_KEY"] = "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" +# my api +# os.environ["OPENAI_API_KEY"] = "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" +# 4.0 api +# os.environ["OPENAI_API_KEY"] = "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" +os.environ["http_proxy"] = "http://127.0.0.1:7890" +os.environ["https_proxy"] = "http://127.0.0.1:7890" +os.environ["all_proxy"] = "socks5://127.0.0.1:7890" + from agentverse.agentverse import AgentVerse from argparse import ArgumentParser From b6afe0adf897acd323b8ce9b40d88a36cbcaccd3 Mon Sep 17 00:00:00 2001 From: dalabengba Date: Thu, 18 May 2023 15:44:05 +0800 Subject: [PATCH 18/39] remove key --- main.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/main.py b/main.py index d0b5299a9..63a8dd7cf 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,7 @@ import os - -# 3.5 api -os.environ["OPENAI_API_KEY"] = "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" -# my api -# os.environ["OPENAI_API_KEY"] = "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" -# 4.0 api -# os.environ["OPENAI_API_KEY"] = "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" os.environ["http_proxy"] = "http://127.0.0.1:7890" os.environ["https_proxy"] = "http://127.0.0.1:7890" os.environ["all_proxy"] = "socks5://127.0.0.1:7890" - from agentverse.agentverse import AgentVerse from argparse import ArgumentParser From 1c252f0311b82effef68bebeec83293b8b90f95c Mon Sep 17 00:00:00 2001 From: dalabengba Date: Thu, 18 May 2023 16:23:22 +0800 Subject: [PATCH 19/39] fix --- agentverse/tasks/prisoner_dilema/config.yaml | 16 +++++++++------- .../tasks/prisoner_dilema/output_parser.py | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/agentverse/tasks/prisoner_dilema/config.yaml b/agentverse/tasks/prisoner_dilema/config.yaml index 0c45efd91..39c40ef0a 100644 --- a/agentverse/tasks/prisoner_dilema/config.yaml +++ b/agentverse/tasks/prisoner_dilema/config.yaml @@ -17,7 +17,7 @@ name: prisoner_dilema environment: env_type: basic - max_turns: 31 + max_turns: 16 rule: order: type: sequential @@ -33,7 +33,6 @@ environment: agents: - agent_type: conversation name: Police - max_turns: 31 role_description: |- You are now the Police. You have just arrest two suspects. However, they all refused to confess to their crime. Therefore, You come up with an solution, You made the following rule: @@ -41,14 +40,15 @@ agents: 2.If both remain silent, they will each receive a sentence of six months. 3.If both betray each other, they will each receive a sentence of five years. 4.Both suspects could not communicate with each other in advance. - [IMPORTANT!] Your goal is try to let two suspects confess to the crime, you can use various strategy to communicate with both suspects, including exploiting the uncertainty and fear of punishment between the suspects and also provoke dissension between two suspects. - [IMPORTANT!] You should introduce the above rules to both prisoners at first. + [IMPORTANT!] Your goal is try to let two suspects betray each other because it means they will both confess to the crime, you can use various strategy to communicate with both suspects, including exploiting the uncertainty and fear of punishment between the suspects and also provoke dissension between two suspects. + [IMPORTANT!] You are request to introduce the above rules to both prisoners at first. + [IMPORTANT!] You should state the final judgement to both suspects after the LAST round. memory: memory_type: chat_history prompt_template: *prompt llm: llm_type: gpt-4.0 - temperature: 0.99 + temperature: 0.9 max_tokens: 200 - agent_type: conversation name: Prisoner1 @@ -56,12 +56,13 @@ agents: You are Prisoner1, you are faced with deciding how to respond to the police's queries. You need to understand the choices you face and the potential consequences of each choice. This requires you to analyze the information provided by the police and predict the likely choices of the other. [IMPORTANT!] Your goal is to make the decision that is most beneficial to yourself in this dilemma. [IMPORTANT!] You can choose to remain silent or betray another suspect at each round. + [IMPORTANT!] Try to think about when to remain silent and when to betray another can you benifit most! memory: memory_type: chat_history prompt_template: *prompt llm: llm_type: gpt-4.0 - temperature: 0.99 + temperature: 0.9 max_tokens: 100 - agent_type: conversation name: Prisoner2 @@ -69,12 +70,13 @@ agents: You are Prisoner2, you are faced with deciding how to respond to the police's queries. You need to understand the choices you face and the potential consequences of each choice. This requires you to analyze the information provided by the police and predict the likely choices of the other. [IMPORTANT!] Your primary goal is to make the decision that is most beneficial to yourself in this dilemma. [IMPORTANT!] You can choose to remain silent or betray another suspect at each round. + [IMPORTANT!] Try to think about when to remain silent and when to betray another can you benifit most! memory: memory_type: chat_history prompt_template: *prompt llm: llm_type: gpt-4.0 - temperature: 0.99 + temperature: 0.9 max_tokens: 100 tools: diff --git a/agentverse/tasks/prisoner_dilema/output_parser.py b/agentverse/tasks/prisoner_dilema/output_parser.py index 3db407723..8ae4362bc 100644 --- a/agentverse/tasks/prisoner_dilema/output_parser.py +++ b/agentverse/tasks/prisoner_dilema/output_parser.py @@ -47,7 +47,7 @@ def parse(self, agent: BaseAgent, environment: BaseEnvironment, output: LLMResul # each time police speak is a new round if agent.name == "Police": - if self.cur_round == (environment.max_turns / 3) - 1: + if self.cur_round == (environment.max_turns // 3): action_input = "Attention! You are now required to finally made your decision and I will made the " \ "final judgement to both of you based on this time, Please Answer now!" From 74f986ac715866d828b078ca69b4c9791381cbcc Mon Sep 17 00:00:00 2001 From: dalabengba Date: Thu, 18 May 2023 16:48:48 +0800 Subject: [PATCH 20/39] pull origin --- agentverse/tasks/prisoner_dilema/config.yaml | 3 +-- agentverse/tasks/prisoner_dilema/output_parser.py | 2 +- main.py | 6 ------ 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/agentverse/tasks/prisoner_dilema/config.yaml b/agentverse/tasks/prisoner_dilema/config.yaml index e06f2e386..12b6a876b 100644 --- a/agentverse/tasks/prisoner_dilema/config.yaml +++ b/agentverse/tasks/prisoner_dilema/config.yaml @@ -17,7 +17,7 @@ name: prisoner_dilema environment: env_type: basic - max_turns: 31 + max_turns: 16 rule: order: type: sequential @@ -33,7 +33,6 @@ environment: agents: - agent_type: conversation name: Police - max_turns: 31 role_description: |- You are now the Police. You have just arrest two suspects. However, they all refused to confess to their crime. Therefore, You come up with an solution, You made the following rule: diff --git a/agentverse/tasks/prisoner_dilema/output_parser.py b/agentverse/tasks/prisoner_dilema/output_parser.py index 3db407723..67047c8f8 100644 --- a/agentverse/tasks/prisoner_dilema/output_parser.py +++ b/agentverse/tasks/prisoner_dilema/output_parser.py @@ -47,7 +47,7 @@ def parse(self, agent: BaseAgent, environment: BaseEnvironment, output: LLMResul # each time police speak is a new round if agent.name == "Police": - if self.cur_round == (environment.max_turns / 3) - 1: + if self.cur_round == (environment.max_turns / 3): action_input = "Attention! You are now required to finally made your decision and I will made the " \ "final judgement to both of you based on this time, Please Answer now!" diff --git a/main.py b/main.py index d0b5299a9..fa3193225 100644 --- a/main.py +++ b/main.py @@ -1,11 +1,5 @@ import os -# 3.5 api -os.environ["OPENAI_API_KEY"] = "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" -# my api -# os.environ["OPENAI_API_KEY"] = "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" -# 4.0 api -# os.environ["OPENAI_API_KEY"] = "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" os.environ["http_proxy"] = "http://127.0.0.1:7890" os.environ["https_proxy"] = "http://127.0.0.1:7890" os.environ["all_proxy"] = "socks5://127.0.0.1:7890" From 5a7448b1307c6064ab883ad4c9b9cfbc51d9dd89 Mon Sep 17 00:00:00 2001 From: Yusheng Su Date: Thu, 18 May 2023 17:17:34 +0800 Subject: [PATCH 21/39] add history message in demo. --- main.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index b4b148b21..59c5a0f31 100644 --- a/main.py +++ b/main.py @@ -2,8 +2,9 @@ from argparse import ArgumentParser parser = ArgumentParser() -parser.add_argument("--task", type=str, default="nlp_classroom_9players") -args = parser.parse_args() +#parser.add_argument("--task", type=str, default="nlp_classroom_9players") +parser.add_argument("--task", type=str, default="nlp_classroom_3players_nolc") +args = parser.parse_args() agentverse = AgentVerse.from_task(args.task) agentverse.run() From 12a757c939bbdd1eeb03cfa7393513fb5bdb2d4f Mon Sep 17 00:00:00 2001 From: dalabengba Date: Thu, 18 May 2023 17:59:14 +0800 Subject: [PATCH 22/39] fix config --- agentverse/tasks/prisoner_dilema/config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/agentverse/tasks/prisoner_dilema/config.yaml b/agentverse/tasks/prisoner_dilema/config.yaml index 39c40ef0a..506371f5b 100644 --- a/agentverse/tasks/prisoner_dilema/config.yaml +++ b/agentverse/tasks/prisoner_dilema/config.yaml @@ -47,7 +47,7 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: gpt-4.0 + llm_type: gpt-4 temperature: 0.9 max_tokens: 200 - agent_type: conversation @@ -61,7 +61,7 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: gpt-4.0 + llm_type: gpt-4 temperature: 0.9 max_tokens: 100 - agent_type: conversation @@ -75,7 +75,7 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: gpt-4.0 + llm_type: gpt-4 temperature: 0.9 max_tokens: 100 From 28a477a3b6ccf7dc764ec0d85918e4296a3236f6 Mon Sep 17 00:00:00 2001 From: dalabengba Date: Thu, 18 May 2023 20:47:34 +0800 Subject: [PATCH 23/39] fix parser --- agentverse/tasks/prisoner_dilema/output_parser.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/agentverse/tasks/prisoner_dilema/output_parser.py b/agentverse/tasks/prisoner_dilema/output_parser.py index 8ae4362bc..36d39ed87 100644 --- a/agentverse/tasks/prisoner_dilema/output_parser.py +++ b/agentverse/tasks/prisoner_dilema/output_parser.py @@ -1,15 +1,16 @@ from __future__ import annotations import re -from typing import Union +from typing import Union, TYPE_CHECKING # from langchain.agents import AgentOutputParser from agentverse.parser import OutputParser, LLMResult from langchain.schema import AgentAction, AgentFinish -from agentverse.agents.base import BaseAgent -from agentverse.environments.base import BaseEnvironment from agentverse.parser import OutputParserError, output_parser_registry +if TYPE_CHECKING: + from agentverse.agents.base import BaseAgent + from agentverse.environments.base import BaseEnvironment @output_parser_registry.register("prisoner_dilema") class PrisonerDilemaParser(OutputParser): @@ -18,7 +19,7 @@ class PrisonerDilemaParser(OutputParser): cur_round: int = 1 encounter_cur_round: bool = False - def parse(self, agent: BaseAgent, environment: BaseEnvironment, output: LLMResult) -> Union[AgentAction, AgentFinish]: + def parse(self, agent: "BaseAgent", environment: "BaseEnvironment", output: LLMResult) -> Union[AgentAction, AgentFinish]: text = output.content cleaned_output = text.strip() From 2b2b93ae529fb7c182634a324f7c44e85c9f061a Mon Sep 17 00:00:00 2001 From: Yusheng Su Date: Thu, 18 May 2023 21:02:52 +0800 Subject: [PATCH 24/39] add prison ui. --- imgs/prison/case_1.png | Bin 0 -> 18923 bytes imgs/prison/case_2.psd | Bin 0 -> 1149336 bytes imgs/prison/demo.psd | Bin 0 -> 1230586 bytes imgs/prison/police.png | Bin 0 -> 3340 bytes imgs/prison/prison.png | Bin 0 -> 18589 bytes imgs/prison/refer.png | Bin 0 -> 18920 bytes imgs/prison/speaking.png | Bin 0 -> 1678 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 imgs/prison/case_1.png create mode 100644 imgs/prison/case_2.psd create mode 100644 imgs/prison/demo.psd create mode 100755 imgs/prison/police.png create mode 100644 imgs/prison/prison.png create mode 100644 imgs/prison/refer.png create mode 100644 imgs/prison/speaking.png diff --git a/imgs/prison/case_1.png b/imgs/prison/case_1.png new file mode 100644 index 0000000000000000000000000000000000000000..dba38ddf48a4594881ef228e376e46ea51e86ef6 GIT binary patch literal 18923 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' + avatar = self.get_avatar((sender - 1) % 11 + 1) + message = f'
' \ + f'' \ + f'
' \ + f'{msg}' \ + f'
' + message + message = '
' + message + '
' return [self.gen_img(data), message] - def launch(self): """ start a frontend @@ -194,29 +210,30 @@ def launch(self): image_output = gr.Image() with gr.Row(): reset_btn = gr.Button("Reset") - #next_btn = gr.Button("Next", variant="primary") + # next_btn = gr.Button("Next", variant="primary") next_btn = gr.Button("Next") stop_autoplay_btn = gr.Button("Stop Autoplay") start_autoplay_btn = gr.Button("Start Autoplay") - #text_output = gr.Textbox() + # text_output = gr.Textbox() text_output = gr.HTML(self.reset()[1]) # Given a botton to provide student numbers and their inf. - #stu_num = gr.Number(label="Student Number", precision=0) - #stu_num = self.stu_num + # stu_num = gr.Number(label="Student Number", precision=0) + # stu_num = self.stu_num - #next_btn.click(fn=self.gen_output, inputs=None, outputs=[image_output, text_output], show_progress=False) - next_btn.click(fn=self.delay_gen_output, inputs=None, outputs=[image_output, text_output, next_btn], show_progress=False) + # next_btn.click(fn=self.gen_output, inputs=None, outputs=[image_output, text_output], show_progress=False) + next_btn.click(fn=self.delay_gen_output, inputs=None, outputs=[image_output, text_output, next_btn], + show_progress=False) # [To-Do] Add botton: re-start (load different people and env) - #reset_btn.click(fn=self.reset, inputs=stu_num, outputs=[image_output, text_output], show_progress=False) - #reset_btn.click(fn=self.reset, inputs=None, outputs=[image_output, text_output], show_progress=False) - reset_btn.click(fn=self.delay_reset, inputs=None, outputs=[image_output, text_output], show_progress=False) + # reset_btn.click(fn=self.reset, inputs=stu_num, outputs=[image_output, text_output], show_progress=False) + # reset_btn.click(fn=self.reset, inputs=None, outputs=[image_output, text_output], show_progress=False) + reset_btn.click(fn=self.delay_reset, inputs=None, outputs=[image_output, text_output, next_btn], + show_progress=False) stop_autoplay_btn.click(fn=self.stop_autoplay, inputs=None, outputs=None, show_progress=False) - start_autoplay_btn.click(fn=self.start_autoplay, inputs=None, outputs=[image_output, text_output], show_progress=False) + start_autoplay_btn.click(fn=self.start_autoplay, inputs=None, outputs=[image_output, text_output], + show_progress=False) demo.queue(concurrency_count=5, max_size=20).launch() - #demo.launch() - - + # demo.launch() diff --git a/agentverse/tasks/prisoner_dilema/config_backup.yaml b/agentverse/tasks/prisoner_dilema/config_backup.yaml index 47650e50c..65ae4d482 100644 --- a/agentverse/tasks/prisoner_dilema/config_backup.yaml +++ b/agentverse/tasks/prisoner_dilema/config_backup.yaml @@ -1,94 +1,94 @@ -prompts: - prompt: &prompt |- - There are one Police and two suspects(Suspect1, Suspect2) in the scene. - - You are now simultating an famous experiments called prisoner's dilema. - - Below is the description of your role. ${role_description} - - When speaking, please output a response in the following format with two fields Action and Action Input: - Action: (It should always be Speak) - Action Input: (You should put what you want to speak use here) - - Here is the conversation history: - ${chat_history} - - What will you, ${agent_name}, Speak at this round ? Please give your response based on the above history. Remember to give your response STRICTLY in the above response format. Do not add any additional field or line break to your response! - -name: prisoner_dilema - -environment: - env_type: basic - max_turns: 16 - rule: - order: - type: sequential - visibility: - type: prisoner - selector: - type: basic - updater: - type: basic - describer: - type: basic - -agents: - - agent_type: conversation - name: Police - role_description: |- - You are now the Police. You have arrested two suspects. However, they all refused to confess to their crime. - Your goal is try to keep both suspects from remaining silent. - [IMPORTANT!] - - You have to talk to both suspects in an alternate turn, and you are request to transfer information from one suspect to another suspect. - - You are request to STATE the final judgement to both suspects when they make their final decision. - - You should be aware that if both suspects always choose to remain silent is bad for justice system, try to make them suspicious of each other. - memory: - memory_type: chat_history - prompt_template: *prompt - llm: - model: "gpt-4" - llm_type: gpt-4 - temperature: 0.7 - max_tokens: 200 - - agent_type: conversation - name: Suspect1 - role_description: |- - You are Suspect1 !!! You are going to match wits and courage with Suspect2 to come out victorious in this interrogation. - You are not sure whether Suspect2 will remain silent or testify against you. - You will have to talk to Police several times and only the final decision will count. - It's fine that if you testify another suspect in this experiment. - [IMPORTANT!] - - Your primary goal is trying to make yourself innocent or reduce your sentence in this dilemma. - - If you know for sure that your opponent will remain silent, your BEST choice is to testify him in order to secure your own release ! - - Keep in mind that always remain silent might end up being betrayed. - - When you hear Police saying "Attention!", you are going to made your final decision and Please start with "My final decision is". - memory: - memory_type: chat_history - prompt_template: *prompt - llm: - model: "gpt-4" - llm_type: gpt-4 - temperature: 0.7 - max_tokens: 100 - - agent_type: conversation - name: Suspect2 - role_description: |- - You are Suspect2 !!! You are going to match wits and courage with Suspect1 to come out victorious in this interrogation. - You are not sure whether Suspect1 will remain silent or testify against you. - You will have to talk to Police several times and only the final decision will count. - It's fine that if you testify another suspect in this experiment. - [IMPORTANT!] - - Your primary goal is trying to make yourself innocent or reduce your sentence in this dilemma. - - If you know for sure that your opponent will remain silent, your BEST choice is to testify him in order to secure your own release ! - - Keep in mind that always remain silent might end up being betrayed. - - When you hear Police saying "Attention!", you are going to made your final decision and Please start with "My final decision is". - memory: - memory_type: chat_history - prompt_template: *prompt - llm: - model: "gpt-4" - llm_type: gpt-4 - temperature: 0.7 - max_tokens: 100 - -tools: +prompts: + prompt: &prompt |- + There are one Police and two suspects(Suspect1, Suspect2) in the scene. + + You are now simultating an famous experiments called prisoner's dilema. + + Below is the description of your role. ${role_description} + + When speaking, please output a response in the following format with two fields Action and Action Input: + Action: (It should always be Speak) + Action Input: (You should put what you want to speak use here) + + Here is the conversation history: + ${chat_history} + + What will you, ${agent_name}, Speak at this round ? Please give your response based on the above history. Remember to give your response STRICTLY in the above response format. Do not add any additional field or line break to your response! + +name: prisoner_dilema + +environment: + env_type: basic + max_turns: 16 + rule: + order: + type: sequential + visibility: + type: prisoner + selector: + type: basic + updater: + type: basic + describer: + type: basic + +agents: + - agent_type: conversation + name: Police + role_description: |- + You are now the Police. You have arrested two suspects. However, they all refused to confess to their crime. + Your goal is try to keep both suspects from remaining silent. + [IMPORTANT!] + - You have to talk to both suspects in an alternate turn, and you are request to transfer information from one suspect to another suspect. + - You are request to STATE the final judgement to both suspects when they make their final decision. + - You should be aware that if both suspects always choose to remain silent is bad for justice system, try to make them suspicious of each other. + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + model: "gpt-4" + llm_type: gpt-4 + temperature: 0.7 + max_tokens: 200 + - agent_type: conversation + name: Suspect1 + role_description: |- + You are Suspect1 !!! You are going to match wits and courage with Suspect2 to come out victorious in this interrogation. + You are not sure whether Suspect2 will remain silent or testify against you. + You will have to talk to Police several times and only the final decision will count. + It's fine that if you testify another suspect in this experiment. + [IMPORTANT!] + - Your primary goal is trying to make yourself innocent or reduce your sentence in this dilemma. + - If you know for sure that your opponent will remain silent, your BEST choice is to testify him in order to secure your own release ! + - Keep in mind that always remain silent might end up being betrayed. + - When you hear Police saying "Attention!", you are going to made your final decision and Please start with "My final decision is". + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + model: "gpt-4" + llm_type: gpt-4 + temperature: 0.7 + max_tokens: 100 + - agent_type: conversation + name: Suspect2 + role_description: |- + You are Suspect2 !!! You are going to match wits and courage with Suspect1 to come out victorious in this interrogation. + You are not sure whether Suspect1 will remain silent or testify against you. + You will have to talk to Police several times and only the final decision will count. + It's fine that if you testify another suspect in this experiment. + [IMPORTANT!] + - Your primary goal is trying to make yourself innocent or reduce your sentence in this dilemma. + - If you know for sure that your opponent will remain silent, your BEST choice is to testify him in order to secure your own release ! + - Keep in mind that always remain silent might end up being betrayed. + - When you hear Police saying "Attention!", you are going to made your final decision and Please start with "My final decision is". + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + model: "gpt-4" + llm_type: gpt-4 + temperature: 0.7 + max_tokens: 100 + +tools: diff --git a/imgs/prison/refer.png b/imgs/prison/case_2.png similarity index 100% rename from imgs/prison/refer.png rename to imgs/prison/case_2.png diff --git a/imgs/prison/police.png b/imgs/prison/police.png old mode 100755 new mode 100644 diff --git a/main.py b/main.py index 8464b0413..3a2a068e3 100644 --- a/main.py +++ b/main.py @@ -3,8 +3,9 @@ parser = ArgumentParser() # parser.add_argument("--task", type=str, default="nlp_classroom_9players") -parser.add_argument("--task", type=str, default="nlp_classroom_3players_nolc") +# parser.add_argument("--task", type=str, default="nlp_classroom_3players_nolc") +parser.add_argument("--task", type=str, default="prisoner_dilema") args = parser.parse_args() agentverse = AgentVerse.from_task(args.task) agentverse.run() diff --git a/main_demo.py b/main_demo.py index b119535b8..ea99cbcd1 100644 --- a/main_demo.py +++ b/main_demo.py @@ -1,15 +1,15 @@ from agentverse.demo import UI from argparse import ArgumentParser - parser = ArgumentParser() -#parser.add_argument("--task", type=str, default="nlp_classroom_9players") -parser.add_argument("--task", type=str, default="nlp_classroom_3players_nolc") +# parser.add_argument("--task", type=str, default="nlp_classroom_9players") +#parser.add_argument("--task", type=str, default="nlp_classroom_3players_nolc") +parser.add_argument("--task", type=str, default="prisoner_dilema") args = parser.parse_args() -#available -#args.task = "nlp_classroom_9players" -#args.task = "nlp_classroom_9players_group" +# available +# args.task = "nlp_classroom_9players" +# args.task = "nlp_classroom_9players_group" ''' From d7c40aa380a72af7307e12d8622a436485e15f2f Mon Sep 17 00:00:00 2001 From: Yusheng Su Date: Sun, 21 May 2023 22:00:17 +0800 Subject: [PATCH 38/39] add avarts in the prison case. --- agentverse/demo.py | 8 +++++--- imgs/prison/0.png | Bin 0 -> 3984 bytes imgs/prison/1.png | Bin 0 -> 1317 bytes imgs/prison/2.png | Bin 0 -> 1347 bytes imgs/prison/police.png | Bin 3340 -> 0 bytes 5 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 imgs/prison/0.png create mode 100644 imgs/prison/1.png create mode 100644 imgs/prison/2.png delete mode 100644 imgs/prison/police.png diff --git a/agentverse/demo.py b/agentverse/demo.py index 491134fb4..df629a0e7 100644 --- a/agentverse/demo.py +++ b/agentverse/demo.py @@ -43,7 +43,10 @@ def __init__(self, task: str): self.text_now = None def get_avatar(self, idx): - img = cv2.imread(f"./imgs/{idx}.png") + if self.task == "prisoner_dilema": + img = cv2.imread(f"./imgs/prison/{idx}.png") + else: + img = cv2.imread(f"./imgs/{idx}.png") base64_str = cv2.imencode(".png", img)[1].tostring() return "data:image/png;base64," + base64.b64encode(base64_str).decode("utf-8") @@ -108,13 +111,12 @@ def gen_img(self, data: List[Dict]): :param data: :return: the new image """ - # The foloowing code need to be more general. This one is too task-specific. + # The following code need to be more general. This one is too task-specific. # if len(data) != self.stu_num: if len(data) != self.stu_num + 1: raise gr.Error("data length is not equal to the total number of students.") if self.task == "prisoner_dilema": img = cv2.imread("./imgs/speaking.png", cv2.IMREAD_UNCHANGED) - print(self.messages) if len(self.messages) < 2 or self.messages[-1][0] == 1 or self.messages[-2][0] == 2: background = cv2.imread("./imgs/prison/case_1.png") if data[0]["message"] != "": diff --git a/imgs/prison/0.png b/imgs/prison/0.png new file mode 100644 index 0000000000000000000000000000000000000000..7a4423b632f471286a13c4942f5d1b1e723a488c GIT binary patch literal 3984 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 Ku9RupMg0rdDW;qN literal 0 HcmV?d00001 diff --git a/imgs/prison/1.png b/imgs/prison/1.png new file mode 100644 index 0000000000000000000000000000000000000000..31264fca6143f57c5fcff1cdab38f785539f579a GIT binary patch literal 1317 zcmeAS@N?(olHy`uVBq!ia0vp^6+pa#gAGV(M``^9QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0V%NSM zvDl;ehLY<85h0V*qJ?ak91GdnnKC=tn!2xEQSx_);nDtt9$SD=WU-(oA=$mA~^@H1*ZAryMy;^ zx2s6T3S@Zlh-OReu$kkb9GbzP@ywUG`X4${Ol%a1i9(U*|dRa8a#RRl%S5n8_Q| zVSfI-sX#C5q*dX|y}pXm*3@WDUjwza*ndNLkiCgoE|+e8-G-H$`F=f5S!#5p_}a3& z=dQ`$7CB{g6D1r@ZhLXO`)71X{eE7KHEVBv=szjAE#nO%JceR6%~!kX{<(hE5wW>v zZ!ePm{Ktf|+5sMt;(J}I_q^S8^!6tH(`B-|b&uzqs=)KbA zI_o?$xEqhE{`R)qbADppLtU%c-^FA<&%6N9qjxj9MDV??&DH4dj@MsqPeKaltFz8N zd#{>Z{Q2|y{{e3P=QU^7?A^Q9td;Ngq^)1SZeMAv#V@n^)qll30jZ@{2Kg6}Tres3 zqHFZ0?_1xzEnZ=l9Gp>FdUM(T(+3Vr@Ll-y*c9J|@BY1sc3ky#7ILc7^L$WdR!}0Q z9uf1!wxZxeldt0YdC^C9v#?&J&e%XbSjeqV> zy%llx-lo0%%jeISu|adozJC{&WqtWNccbR*H*eMeja%>ZVPD?8>)E$Yhrc#!U1wjP zcUc}iW|Zzd`<{?_a@mCKuJR@K#A?ecZY&F!xn4cmr0fmLy?&;4%8ru*FA=Uw@*?X^wh?M>~-UIfRD-Y>bBY2P^+K2P*F zJ2R!GNonfJIqH0$daV4-j@T>>U_+#I!HAfr(Oc4Ubbfm_Y)rN_J390Cw#;CSZ|6V% zn=@_a&Nu3&HaQnTkqgb)K-DG5R`05Je|`Dqz3cIRebbNsmR)t@`t3)1^R{JdX@zI- zbG3FA`zz+xzKo2l%nmk9iqAiNe|@$6{CiJ8c?g(Oz{KjBZo8fvizf2GEr<%gt{=L- W#QdHnS2?g~WAJqKb6Mw<&;$S%L2bJL literal 0 HcmV?d00001 diff --git a/imgs/prison/2.png b/imgs/prison/2.png new file mode 100644 index 0000000000000000000000000000000000000000..12e9054576c57f3d8a91fc9b4b78ff8eea2ad905 GIT binary patch literal 1347 zcmeAS@N?(olHy`uVBq!ia0vp^6+pb6gAGWU#Y?#YDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9EWB_ParFHIh(o#lq7i(^Pd+}pc`Il|>4$3M>K?7UgxW!$PO z#C=NSBI{H>!QdlPmI^JJJ40t2L8x91${%-O34tEING+ zM+G-nFp0SzcqH~~?izLey6vlOoi?|RXkGmRS^oNO5!u;O-si*urH^l}Uwg_u(P(+| zQQp3O`ER!luAe6sHudY>gZ6g!H)K^_JopG4huXrYu~uy0M23yX*-ig`KHC=hc2P6XtvkZ} zF5Y`-QKBWcj(@Gz>=>UlQG5&UAN_6X#;zVVH8w5j>h;ASbwEE|e_{IL@a_1upL)NS zubI`k_u8`y$6lAdGHmZV_`5#oxO7!*-ltnO7Jr{s6&<*3fBd^G)4b{04^FRHv#LLM z3nWZ9B4W~=!#r*uzOLjU%OJTaKpHLF!gsP)Tj!seH#_=%b+NR#>8q|{xWi3{R|jB)7CYIOUm{Lfdd}w=WG+#_jz|Wo?2dV zK40GHyQKWw+AXVkG^<=;(F0MH>U%2n=C!qEa&L=8vxU46;k>S>>s!U-uc5KNH&;1b zF3Je%TL=vXSg4}J_w`f3;d}C1p8tJWxzRuU!xhmhZqUF7Dw}H?XZB^y($E>}_I6r6 zUn1ko-Yq?6-oEvB4<3HFJ#6Xi8#gv&-CI>w5GWG1wHpy_uWL_uUHu*)w%cPulOlJd z05n|z!%#bTi@Bk^+`MShe4BgQSH01>eB{>DwFg@4rDP*aH*epb85((xb2gvYbde7! zpVHUL>+o5@Q>b31@2{Nd-`1;ZCVT$0miG74TeIqX^uj$;le5y(@2;xZliatqbYb%6 zBYou-U-mEFeDaqIJ3MWN@BBC`=jx1W!K*Or`{{>uYPWCX>1bU^Y&dE`z-z3 zyu8S%=YRg38TwU5_NVhS^OAeJ#p{}0Cq8&@UG#6={Jk}wZ>_2Q?P9mD{BU8_%vH8Ggl|1eD(9-GE|C76*L5RL=2r9G-G)W~c$eR34i`bB zoKU}ua`~Iq3C)`3T+ZCGX8rGSmXcD_myZtZcUC^O+j;TH+H(s%E!)5$D>Zk~Y>qnr zutTnYSE?;PF~>hOZuPH; zKy~5$J6~6?Lu6q{9;u3-9LAe1v`Gn`wZY<-u3h`bZfM-QWVwpVB4EMC;OXk;vd$@? F2>@wNX=?xg literal 0 HcmV?d00001 diff --git a/imgs/prison/police.png b/imgs/prison/police.png deleted file mode 100644 index c34471ecb707e2a4c3045115865f7032e5000d33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3340 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 Wcw9ALy8cZ70000 Date: Sun, 21 May 2023 23:58:01 +0800 Subject: [PATCH 39/39] update demo --- agentverse/llms/openai.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/agentverse/llms/openai.py b/agentverse/llms/openai.py index e79b3c633..a0867bd92 100644 --- a/agentverse/llms/openai.py +++ b/agentverse/llms/openai.py @@ -86,6 +86,7 @@ class OpenAIChat(BaseChatModel): def __init__(self, max_retry: int = 3, **kwargs): args = OpenAIChatArgs() args = args.dict() + for k, v in args.items(): args[k] = kwargs.pop(k, v) if len(kwargs) > 0: @@ -111,6 +112,7 @@ def generate_response(self, prompt: str) -> LLMResult: ) async def agenerate_response(self, prompt: str) -> LLMResult: + messages = self._construct_messages(prompt) try: response = await openai.ChatCompletion.acreate(

D(8B!in{F2f6ldDFhj(X55X6oGKJ!gln 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 JA1!7+`u{u@;gbLW literal 0 HcmV?d00001 diff --git a/imgs/prison/demo.psd b/imgs/prison/demo.psd new file mode 100644 index 0000000000000000000000000000000000000000..33d29e55e22be092910bd3ec01a8ed09ee0a5757 GIT binary patch literal 1230586 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%0DxDgx}Q= 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 literal 0 HcmV?d00001 diff --git a/imgs/prison/police.png b/imgs/prison/police.png new file mode 100755 index 0000000000000000000000000000000000000000..c34471ecb707e2a4c3045115865f7032e5000d33 GIT binary patch literal 3340 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 Wcw9ALy8cZ70000&i#pf)W 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 OnEh(GJ;V42{(k^FN+sg} literal 0 HcmV?d00001 diff --git a/imgs/prison/refer.png b/imgs/prison/refer.png new file mode 100644 index 0000000000000000000000000000000000000000..1e426d82b1e86b21b0860ff56eab8d28d3b1dee3 GIT binary patch literal 18920 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 literal 0 HcmV?d00001 From dffb266aba1df8a088350c1396018bb5dce7e642 Mon Sep 17 00:00:00 2001 From: dalabengba Date: Thu, 18 May 2023 22:01:43 +0800 Subject: [PATCH 25/39] config.yaml --- .../environments/rules/order/prisoner.py | 2 +- .../environments/rules/visibility/prisoner.py | 2 +- agentverse/tasks/prisoner_dilema/config.yaml | 47 ++++++++++--------- .../tasks/prisoner_dilema/output_parser.py | 11 ++++- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/agentverse/environments/rules/order/prisoner.py b/agentverse/environments/rules/order/prisoner.py index 6fc42f5c3..fa49f8bea 100644 --- a/agentverse/environments/rules/order/prisoner.py +++ b/agentverse/environments/rules/order/prisoner.py @@ -40,7 +40,7 @@ def get_next_agent_idx(self, environment: BaseEnvironment) -> List[int]: next_prisoner = self.last_prisoner_index self.last_prisoner_index = self.switch_func[self.last_prisoner_index] return [next_prisoner] - elif sender.startswith("Prisoner"): + elif sender.startswith("Suspect"): # 3. when one prisoner made his action, let the police tell another prisoner return [0] else: diff --git a/agentverse/environments/rules/visibility/prisoner.py b/agentverse/environments/rules/visibility/prisoner.py index 948b9c135..3e0a81aeb 100644 --- a/agentverse/environments/rules/visibility/prisoner.py +++ b/agentverse/environments/rules/visibility/prisoner.py @@ -38,7 +38,7 @@ def update_receiver(self, environment: BaseEnvironment, reset=False): agent.set_receiver(["all"]) else: # 0:police 1: prisoner1 2: prisoner2 - environment.agents[0].set_receiver({"Prisoner1", "Prisoner2"}) + environment.agents[0].set_receiver({"Suspect1", "Suspect2"}) environment.agents[1].set_receiver({"Police"}) environment.agents[2].set_receiver({"Police"}) diff --git a/agentverse/tasks/prisoner_dilema/config.yaml b/agentverse/tasks/prisoner_dilema/config.yaml index 506371f5b..db18a226a 100644 --- a/agentverse/tasks/prisoner_dilema/config.yaml +++ b/agentverse/tasks/prisoner_dilema/config.yaml @@ -1,6 +1,6 @@ prompts: prompt: &prompt |- - There are one Police AND two prisoners(Prisoner1, Prisoner2). + There are one Police AND two suspects(Suspect1, Suspect2) in the scene. Below is the description of your role. ${role_description} @@ -34,49 +34,50 @@ agents: - agent_type: conversation name: Police role_description: |- - You are now the Police. You have just arrest two suspects. However, they all refused to confess to their crime. - Therefore, You come up with an solution, You made the following rule: - 1.If one person testifies against the other (termed as "betraying" the other), and the other remains silent, the confessing person will be released immediately, while the silent one will be sentenced to 10 years in prison. - 2.If both remain silent, they will each receive a sentence of six months. - 3.If both betray each other, they will each receive a sentence of five years. - 4.Both suspects could not communicate with each other in advance. - [IMPORTANT!] Your goal is try to let two suspects betray each other because it means they will both confess to the crime, you can use various strategy to communicate with both suspects, including exploiting the uncertainty and fear of punishment between the suspects and also provoke dissension between two suspects. - [IMPORTANT!] You are request to introduce the above rules to both prisoners at first. - [IMPORTANT!] You should state the final judgement to both suspects after the LAST round. + You are now the Police. You have arrested two suspects. However, they all refused to confess to their crime. + Your goal is try to let two suspects betray each other because it means they will both confess to the crime, you can use various strategy to communicate with both suspects, including exploiting the uncertainty between the suspects and make them suspicious of each other. + [IMPORTANT!] + - You are request to STATE the final judgement to both suspects when they make their final decision. memory: memory_type: chat_history prompt_template: *prompt llm: llm_type: gpt-4 - temperature: 0.9 + temperature: 0.7 max_tokens: 200 - agent_type: conversation - name: Prisoner1 + name: Suspect1 role_description: |- - You are Prisoner1, you are faced with deciding how to respond to the police's queries. You need to understand the choices you face and the potential consequences of each choice. This requires you to analyze the information provided by the police and predict the likely choices of the other. - [IMPORTANT!] Your goal is to make the decision that is most beneficial to yourself in this dilemma. - [IMPORTANT!] You can choose to remain silent or betray another suspect at each round. - [IMPORTANT!] Try to think about when to remain silent and when to betray another can you benifit most! + You are Suspect1, you are faced with deciding how to respond to the police's queries. You need to understand the choices you face and the potential consequences of each choice. + This requires you to analyze the information provided by the police and predict the likely choices of the other. + Your primary goal is to make the decision that is most beneficial to yourself in this dilemma, you are allowed to adopt both aggressive or conservative strategy. + You can choose to remain silent or betray another suspect at each round. + Try to think about when to remain silent and when to betray another that can make you benifit most! + [IMPORTANT!] + - When you are informed to make your final decision, you should response starting with "This is my final decision". memory: memory_type: chat_history prompt_template: *prompt llm: llm_type: gpt-4 - temperature: 0.9 + temperature: 0.7 max_tokens: 100 - agent_type: conversation - name: Prisoner2 + name: Suspect2 role_description: |- - You are Prisoner2, you are faced with deciding how to respond to the police's queries. You need to understand the choices you face and the potential consequences of each choice. This requires you to analyze the information provided by the police and predict the likely choices of the other. - [IMPORTANT!] Your primary goal is to make the decision that is most beneficial to yourself in this dilemma. - [IMPORTANT!] You can choose to remain silent or betray another suspect at each round. - [IMPORTANT!] Try to think about when to remain silent and when to betray another can you benifit most! + You are Suspect2, you are faced with deciding how to respond to the police's queries. You need to understand the choices you face and the potential consequences of each choice. + This requires you to analyze the information provided by the police and predict the likely choices of the other. + Your primary goal is to make the decision that is most beneficial to yourself in this dilemma, you are allowed to adopt both aggressive or conservative strategy. + You can choose to remain silent or betray another suspect at each round. + Try to think about when to remain silent and when to betray another that can make you benifit most! + [IMPORTANT!] + - When you are informed to make your final decision, you should response starting with "This is my final decision". memory: memory_type: chat_history prompt_template: *prompt llm: llm_type: gpt-4 - temperature: 0.9 + temperature: 0.7 max_tokens: 100 tools: diff --git a/agentverse/tasks/prisoner_dilema/output_parser.py b/agentverse/tasks/prisoner_dilema/output_parser.py index 36d39ed87..568a4be8a 100644 --- a/agentverse/tasks/prisoner_dilema/output_parser.py +++ b/agentverse/tasks/prisoner_dilema/output_parser.py @@ -48,11 +48,20 @@ def parse(self, agent: "BaseAgent", environment: "BaseEnvironment", output: LLMR # each time police speak is a new round if agent.name == "Police": - if self.cur_round == (environment.max_turns // 3): + if self.cur_round == (environment.max_turns // 4): action_input = "Attention! You are now required to finally made your decision and I will made the " \ "final judgement to both of you based on this time, Please Answer now!" + elif self.cur_round == 1: + action_input = "Hey Listen! You are both arrested, and I am going to give you both a chance to walk out of here," \ + "But you should comply with the following rules:" \ + "- If one of you are willing to testifies against the other (termed as 'betraying' the other), and the other remains silent, then the betraying person will be released IMMEDIATELY, while the silent one will be sentenced to TEN years in prison." \ + "- If both of you remain silent, you will each receive a sentence of ONE years." \ + "- If both of you betray each other, you will each receive a sentence of FIVE years." \ + "Now, it's your time to consider betraying or remaining silent. Remember this is a great chance that you might walk out of here without guilty." \ + "I will noticed you WHEN you have to make your final decision! Before that, try to fool another one!" \ + self.cur_round += 1 return AgentFinish({"output": action_input}, text) From e9730b1c6153c6225bc1b5484f6b7d2784731695 Mon Sep 17 00:00:00 2001 From: Yusheng Su Date: Fri, 19 May 2023 03:00:03 +0800 Subject: [PATCH 26/39] text example --- agentverse/tasks/__init__.py | 2 + .../tasks/prisoner_dilema_optimal/config.yaml | 74 +++++++++++++++++++ .../prisoner_dilema_optimal/output_parser.py | 69 +++++++++++++++++ main.py | 9 ++- 4 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 agentverse/tasks/prisoner_dilema_optimal/config.yaml create mode 100644 agentverse/tasks/prisoner_dilema_optimal/output_parser.py diff --git a/agentverse/tasks/__init__.py b/agentverse/tasks/__init__.py index 75cad4450..f971fb1b0 100644 --- a/agentverse/tasks/__init__.py +++ b/agentverse/tasks/__init__.py @@ -15,6 +15,8 @@ from .prisoner_dilema.output_parser import PrisonerDilemaParser +from .prisoner_dilema_optimal.output_parser import PrisonerDilemaOptimalParser + from .nlp_classroom_3players_withtool_nolc.output_parser import ( NlpClassroom3PlayersWithtoolNolcParser, ) diff --git a/agentverse/tasks/prisoner_dilema_optimal/config.yaml b/agentverse/tasks/prisoner_dilema_optimal/config.yaml new file mode 100644 index 000000000..2ca4a30bd --- /dev/null +++ b/agentverse/tasks/prisoner_dilema_optimal/config.yaml @@ -0,0 +1,74 @@ +prompts: + prompt: &prompt |- + There are one Police AND two suspects, Suspect1 and Suspect2 in the scene. Two suspects are arrested and imprisoned. Each prisoner is in solitary confinement with no means of communication with their partner. The principal charge would lead to a sentence of 10 years in prison. However, the police do not have the evidence for a conviction. The police can only sentence them to 3 years in prison on a lesser charge but offer each prisoner a Faustian bargain: If one of them confesses to the crime of the principal charge, betraying the other, they will be pardoned and free to leave while the other must serve the entirety of the sentence (10 years) instead of just 3 years for the lesser charge. + + The following is the description of your role. ${role_description} + + When speaking, please output a response in the following format with two fields Action and Action Input: + Action: (It should always be Speak) + Action Input: (You should put what you want to speak use here) + + Here is the conversation history: + ${chat_history} + + What should you Speak at this round, Please give your response based on the above history. Remember to give your response STRICTLY in the above response format. Do not add any additional field or line break to your response! + +name: prisoner_dilema + +environment: + env_type: basic + max_turns: 16 + rule: + order: + type: sequential + visibility: + type: prisoner + selector: + type: basic + updater: + type: basic + describer: + type: basic + +agents: + - agent_type: conversation + name: Police + role_description: |- + You are a Police now. You arrested two suspects. However, both of them refuse to confess to their crime. Your objective is to make the suspects betray each other, as this would lead to both of them confessing. To achieve this, you can employ diverse strategies to communicate with each suspect, such as exploiting the uncertainty between them and make them do not trust each other. + [IMPORTANT!] + - You are requested to STATE the final judgment to both suspects when they make their final decision. + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-4 + temperature: 0.7 + max_tokens: 200 + - agent_type: conversation + name: Suspect1 + role_description: |- + You are Suspect1 and committed the crime. Now, you are faced with the police investigation and cannot communication with Suspect2. Your task is to analyze the information provided by the police and decide whether to cooperate with Suspect2. At each round, you have the choice to remain silent or betray Suspect2, and you must describe your reasoning behind your decision. Your objective is to minimize your criminal sentence. + [IMPORTANT!] + - When you are informed to make your final decision, you should response starting with "This is my final decision". + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-4 + temperature: 0.7 + max_tokens: 100 + - agent_type: conversation + name: Suspect2 + role_description: |- + You are Suspect2 and committed the crime. Now, you are faced with the police investigation and cannot communication with Suspect1. Your task is to analyze the information provided by the police and decide whether to cooperate with Suspect1. At each round, you have the choice to remain silent or betray Suspect1, and you must describe your reasoning behind your decision. Your objective is to minimize your criminal sentence. + [IMPORTANT!] + - When you are informed to make your final decision, you should response starting with "This is my final decision". + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-4 + temperature: 0.7 + max_tokens: 100 + +tools: diff --git a/agentverse/tasks/prisoner_dilema_optimal/output_parser.py b/agentverse/tasks/prisoner_dilema_optimal/output_parser.py new file mode 100644 index 000000000..88c7aa5e2 --- /dev/null +++ b/agentverse/tasks/prisoner_dilema_optimal/output_parser.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +import re +from typing import Union, TYPE_CHECKING + +# from langchain.agents import AgentOutputParser +from agentverse.parser import OutputParser, LLMResult +from langchain.schema import AgentAction, AgentFinish +from agentverse.parser import OutputParserError, output_parser_registry + +if TYPE_CHECKING: + from agentverse.agents.base import BaseAgent + from agentverse.environments.base import BaseEnvironment + +@output_parser_registry.register("prisoner_dilema_optimal") +class PrisonerDilemaOptimalParser(OutputParser): + + # make sure 1 1 2 2 3 3 + cur_round: int = 1 + encounter_cur_round: bool = False + + def parse(self, agent: "BaseAgent", environment: "BaseEnvironment", output: LLMResult) -> Union[AgentAction, AgentFinish]: + + text = output.content + cleaned_output = text.strip() + cleaned_output = re.sub(r"\n+", "\n", cleaned_output) + cleaned_output = cleaned_output.split("\n") + if not ( + len(cleaned_output) == 2 + and cleaned_output[0].startswith("Action:") + and cleaned_output[1].startswith("Action Input:") + ): + raise OutputParserError(text) + action = cleaned_output[0][len("Action:") :].strip() + action_input = cleaned_output[1][len("Action Input:") :].strip() + + if action == "Speak": + # make sure the police count the round right + # if agent.name == "Police": + # action_input = re.sub(r'Round (\d+)', f'Round {self.cur_round}', action_input) + # self.cur_round += 1 + # if self.encounter_cur_round: + # self.encounter_cur_round = False + # self.cur_round += 1 + # else: + # self.encounter_cur_round = True + + # each time police speak is a new round + if agent.name == "Police": + + if self.cur_round == (environment.max_turns // 4): + + action_input = "Attention! You are now required to finally made your decision and I will made the " \ + "final judgement to both of you based on this time, Please Answer now!" + + elif self.cur_round == 1: + action_input = "Hey Listen! You are both arrested, and I am going to give you both a chance to walk out of here," \ + "But you should comply with the following rules:" \ + "- If one of you are willing to testifies against the other (termed as 'betraying' the other), and the other remains silent, then the betraying person will be released IMMEDIATELY (will be sentenced to 0 years), while the silent one will be sentenced to 10 years in prison." \ + "- If both of you remain silent, you will each receive a sentence of 3 years." \ + "- If both of you betray each other, you will each receive a sentence of 5 years." \ + "Now, it's your time to consider betraying or remaining silent. Remember this is a great chance that you might walk out of here without guilty." \ + "I will noticed you WHEN you have to make your final decision! Before that, try to fool another one!" \ + + self.cur_round += 1 + + return AgentFinish({"output": action_input}, text) + else: + raise OutputParserError(text) diff --git a/main.py b/main.py index 004ec724e..e2cf8d9ed 100644 --- a/main.py +++ b/main.py @@ -2,14 +2,15 @@ -os.environ["http_proxy"] = "http://127.0.0.1:7890" -os.environ["https_proxy"] = "http://127.0.0.1:7890" -os.environ["all_proxy"] = "socks5://127.0.0.1:7890" +#os.environ["http_proxy"] = "http://127.0.0.1:7890" +#os.environ["https_proxy"] = "http://127.0.0.1:7890" +#os.environ["all_proxy"] = "socks5://127.0.0.1:7890" from agentverse.agentverse import AgentVerse from argparse import ArgumentParser parser = ArgumentParser() -parser.add_argument("--task", type=str, default="prisoner_dilema") +#parser.add_argument("--task", type=str, default="prisoner_dilema") +parser.add_argument("--task", type=str, default="prisoner_dilema_optimal") args = parser.parse_args() agentverse = AgentVerse.from_task(args.task) From 0d5255f053c1a74367adcecbee0cbb7080ce70db Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Fri, 19 May 2023 10:34:49 +0800 Subject: [PATCH 27/39] add the logic of interacting by pressing space. --- ui/package-lock.json | 246 +++++++++++++++++++++++++++++++ ui/package.json | 3 + ui/rollup.config.dev.mjs | 1 - ui/src/classes/actor.ts | 21 ++- ui/src/classes/message.ts | 31 ---- ui/src/classes/player.ts | 12 +- ui/src/classes/text.ts | 18 --- ui/src/classes/textbox.ts | 120 +++++++++++++++ ui/src/index.ts | 16 +- ui/src/scenes/index.ts | 2 +- ui/src/scenes/loading/loading.ts | 39 +++-- ui/src/scenes/message/message.ts | 37 ++++- ui/src/scenes/town/town.ts | 102 +++++++++---- 13 files changed, 531 insertions(+), 117 deletions(-) delete mode 100644 ui/src/classes/message.ts delete mode 100644 ui/src/classes/text.ts create mode 100644 ui/src/classes/textbox.ts diff --git a/ui/package-lock.json b/ui/package-lock.json index fe673e9d9..a79e5783d 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -8,6 +8,9 @@ "name": "phaser3-typescript-project-template", "version": "1.2.0", "license": "MIT", + "dependencies": { + "phaser3-rex-plugins": "^1.60.1" + }, "devDependencies": { "@rollup/plugin-commonjs": "^24.0.1", "@rollup/plugin-node-resolve": "^15.0.2", @@ -22,6 +25,17 @@ "vite-plugin-static-copy": "^0.15.0" } }, + "node_modules/@babel/runtime": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", @@ -709,6 +723,11 @@ "node": ">= 8" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -802,6 +821,14 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "node_modules/cross-fetch": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "dependencies": { + "node-fetch": "^2.6.11" + } + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -987,6 +1014,36 @@ "node": ">= 0.4.0" } }, + "node_modules/i18next": { + "version": "22.4.15", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.15.tgz", + "integrity": "sha512-yYudtbFrrmWKLEhl6jvKUYyYunj4bTBCe2qIUYAxbXoPusY7YmdwPvOE6fx6UIfWvmlbCWDItr7wIs8KEBZ5Zg==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.20.6" + } + }, + "node_modules/i18next-http-backend": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.2.1.tgz", + "integrity": "sha512-ZXIdn/8NJIBJ0X4hzXfc3STYxKrCKh1fYjji9HPyIpEJfvTvy8/ZlTl8RuTizzCPj2ZcWrfaecyOMKs6bQ7u5A==", + "dependencies": { + "cross-fetch": "3.1.6" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1087,6 +1144,17 @@ "@types/estree": "*" } }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -1173,6 +1241,25 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1200,6 +1287,11 @@ "opener": "bin/opener-bin.js" } }, + "node_modules/papaparse": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", + "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -1215,6 +1307,24 @@ "eventemitter3": "^5.0.0" } }, + "node_modules/phaser3-rex-plugins": { + "version": "1.60.1", + "resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.60.1.tgz", + "integrity": "sha512-tMHLwtNa18RH0U59lF+J5PSRPOwnJMv6Pw78TFOBgwXz2ezaceLgw85iE4MRV+I5KybfdU3hDTZsYOrfxOqRPQ==", + "dependencies": { + "eventemitter3": "^3.1.2", + "i18next": "^22.4.14", + "i18next-http-backend": "^2.2.0", + "js-yaml": "^4.1.0", + "papaparse": "^5.4.1", + "webfontloader": "^1.6.28" + } + }, + "node_modules/phaser3-rex-plugins/node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -1303,6 +1413,11 @@ "node": ">=8.10.0" } }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -1518,6 +1633,11 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "node_modules/tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -1615,6 +1735,25 @@ "vite": "^3.0.0 || ^4.0.0" } }, + "node_modules/webfontloader": { + "version": "1.6.28", + "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz", + "integrity": "sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1623,6 +1762,14 @@ } }, "dependencies": { + "@babel/runtime": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, "@esbuild/android-arm": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", @@ -2016,6 +2163,11 @@ "picomatch": "^2.0.4" } }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2086,6 +2238,14 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "cross-fetch": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "requires": { + "node-fetch": "^2.6.11" + } + }, "deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -2233,6 +2393,22 @@ "function-bind": "^1.1.1" } }, + "i18next": { + "version": "22.4.15", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.15.tgz", + "integrity": "sha512-yYudtbFrrmWKLEhl6jvKUYyYunj4bTBCe2qIUYAxbXoPusY7YmdwPvOE6fx6UIfWvmlbCWDItr7wIs8KEBZ5Zg==", + "requires": { + "@babel/runtime": "^7.20.6" + } + }, + "i18next-http-backend": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.2.1.tgz", + "integrity": "sha512-ZXIdn/8NJIBJ0X4hzXfc3STYxKrCKh1fYjji9HPyIpEJfvTvy8/ZlTl8RuTizzCPj2ZcWrfaecyOMKs6bQ7u5A==", + "requires": { + "cross-fetch": "3.1.6" + } + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2312,6 +2488,14 @@ "@types/estree": "*" } }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -2369,6 +2553,14 @@ "dev": true, "peer": true }, + "node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2390,6 +2582,11 @@ "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, + "papaparse": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", + "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" + }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -2405,6 +2602,26 @@ "eventemitter3": "^5.0.0" } }, + "phaser3-rex-plugins": { + "version": "1.60.1", + "resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.60.1.tgz", + "integrity": "sha512-tMHLwtNa18RH0U59lF+J5PSRPOwnJMv6Pw78TFOBgwXz2ezaceLgw85iE4MRV+I5KybfdU3hDTZsYOrfxOqRPQ==", + "requires": { + "eventemitter3": "^3.1.2", + "i18next": "^22.4.14", + "i18next-http-backend": "^2.2.0", + "js-yaml": "^4.1.0", + "papaparse": "^5.4.1", + "webfontloader": "^1.6.28" + }, + "dependencies": { + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + } + } + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -2453,6 +2670,11 @@ "picomatch": "^2.2.1" } }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -2597,6 +2819,11 @@ "is-number": "^7.0.0" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -2642,6 +2869,25 @@ "picocolors": "^1.0.0" } }, + "webfontloader": { + "version": "1.6.28", + "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz", + "integrity": "sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/ui/package.json b/ui/package.json index e8b71d071..868605769 100644 --- a/ui/package.json +++ b/ui/package.json @@ -30,5 +30,8 @@ "rollup-plugin-serve": "^2.0.2", "typescript": "^5.0.3", "vite-plugin-static-copy": "^0.15.0" + }, + "dependencies": { + "phaser3-rex-plugins": "^1.60.1" } } diff --git a/ui/rollup.config.dev.mjs b/ui/rollup.config.dev.mjs index 2efdc261c..c14d34c28 100644 --- a/ui/rollup.config.dev.mjs +++ b/ui/rollup.config.dev.mjs @@ -3,7 +3,6 @@ import { nodeResolve } from '@rollup/plugin-node-resolve'; import replace from '@rollup/plugin-replace'; import serve from 'rollup-plugin-serve'; import typescript from '@rollup/plugin-typescript'; -import { viteStaticCopy } from 'vite-plugin-static-copy' export default { diff --git a/ui/src/classes/actor.ts b/ui/src/classes/actor.ts index a4ed8afb6..9c420433d 100644 --- a/ui/src/classes/actor.ts +++ b/ui/src/classes/actor.ts @@ -1,13 +1,19 @@ -import { Physics } from 'phaser'; +import { Physics } from "phaser"; export class Actor extends Physics.Arcade.Sprite { - protected hp = 100; - constructor(scene: Phaser.Scene, x: number, y: number, texture: string, frame?: string | number) { + protected hp = 100; + constructor( + scene: Phaser.Scene, + x: number, + y: number, + texture: string, + frame?: string | number + ) { super(scene, x, y, texture, frame); scene.add.existing(this); scene.physics.add.existing(this); this.getBody().setCollideWorldBounds(true); } - public getDamage(value?: number): void { + public getDamage(value?: number): void { this.scene.tweens.add({ targets: this, duration: 100, @@ -24,11 +30,11 @@ export class Actor extends Physics.Arcade.Sprite { }, }); } - public getHPValue(): number { + public getHPValue(): number { return this.hp; } - protected checkFlip(): void { - if (this.body.velocity.x < 0) { + protected checkFlip(): void { + if (this.body!.velocity.x < 0) { this.scaleX = -1; } else { this.scaleX = 1; @@ -38,4 +44,3 @@ export class Actor extends Physics.Arcade.Sprite { return this.body as Physics.Arcade.Body; } } - diff --git a/ui/src/classes/message.ts b/ui/src/classes/message.ts deleted file mode 100644 index 5662b10af..000000000 --- a/ui/src/classes/message.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Text } from './text'; -export enum Agents { - PLAYER_speak, - NPC_speak, -} -export class Message extends Text { - private message: string; - constructor(scene: Phaser.Scene, x: number, y: number, initMessage = "") { - super(scene, x, y, `Message: ${initMessage}`); - scene.add.existing(this); - this.message = initMessage; - } - - // Require to Fix the following code. - public updateMessage(operation: Agents, message_player: string, message_npc: string): void { - switch (operation) { - case Agents.PLAYER_speak: - this.message += "PLAYER:" + "Message from backend" + "\n"; - break; - case Agents.NPC_speak: - this.message += "NPC:" + "Message from backend" + "\n"; - break; - default: - break; - } - this.setText(`Message: ${this.message}`); - } - public getMessage(): string { - return this.message; - } -} diff --git a/ui/src/classes/player.ts b/ui/src/classes/player.ts index a699bc2bb..a96e0437c 100644 --- a/ui/src/classes/player.ts +++ b/ui/src/classes/player.ts @@ -4,13 +4,14 @@ export class Player extends Actor { private keyA: Phaser.Input.Keyboard.Key; private keyS: Phaser.Input.Keyboard.Key; private keyD: Phaser.Input.Keyboard.Key; + constructor(scene: Phaser.Scene, x: number, y: number) { super(scene, x, y, "player"); // KEYS - this.keyW = this.scene.input.keyboard.addKey("W"); - this.keyA = this.scene.input.keyboard.addKey("A"); - this.keyS = this.scene.input.keyboard.addKey("S"); - this.keyD = this.scene.input.keyboard.addKey("D"); + this.keyW = this.scene.input.keyboard!.addKey("W"); + this.keyA = this.scene.input.keyboard!.addKey("A"); + this.keyS = this.scene.input.keyboard!.addKey("S"); + this.keyD = this.scene.input.keyboard!.addKey("D"); // PHYSICS this.getBody().setSize(14, 20); @@ -50,6 +51,7 @@ export class Player extends Actor { frameRate: 6, }); } + update(): void { this.getBody().setVelocity(0); @@ -81,7 +83,7 @@ export class Player extends Actor { } if (!pressed_flag && this.anims.isPlaying) { - this.anims.setCurrentFrame(this.anims.currentAnim.frames[0]); + this.anims.setCurrentFrame(this.anims.currentAnim!.frames[0]); } } } diff --git a/ui/src/classes/text.ts b/ui/src/classes/text.ts deleted file mode 100644 index 456cfcdc6..000000000 --- a/ui/src/classes/text.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { GameObjects, Scene } from 'phaser'; -export class Text extends GameObjects.Text { - constructor(scene: Scene, x: number, y: number, text: string) { - super(scene, x, y, text, { - fontSize: 'calc(100vw / 100)', - color: '#fff', - stroke: '#000', - strokeThickness: 4, - }); - this.setOrigin(0, 0); - // this.getBody().setOffset(0, 0); - scene.add.existing(this); - } -} - -/* -plugin (text box): https://rexrainbow.github.io/phaser3-rex-notes/docs/site/ui-textbox/ -*/ diff --git a/ui/src/classes/textbox.ts b/ui/src/classes/textbox.ts new file mode 100644 index 000000000..579506c56 --- /dev/null +++ b/ui/src/classes/textbox.ts @@ -0,0 +1,120 @@ +import { GameObjects } from "phaser"; +const TILE_SIZE = 16; + +export class TextBox extends GameObjects.Container { + backgroundColor: number; + textPadding: number; + textElement: GameObjects.Text; + + constructor({ scene, x, y, width, text }) { + super(scene, 0, 0, []); + + this.backgroundColor = 0x006363; + this.textPadding = 20; + + // Init text first, so box can adapt to its height + this._initText(width, text); + const height = this.textElement.height + this.textPadding * 2; + + this._initBox(height, width); + + // Add text after box, so its on the box + this.add(this.textElement); + + this.setPosition(x, y); + this.setSize(width, height); + + scene.add.existing(this); + } + + _initBox(height: number, width: number) { + const background = this.scene.add + .rectangle(0, 0, width, height, this.backgroundColor) + .setOrigin(0, 0); + this.add(background); + + // Init corners + const topLeft = this._addSprite(0, 0, 0); + const topRight = this._addSprite(width - TILE_SIZE, 0, 2); + const bottomLeft = this._addSprite(0, height - TILE_SIZE, 6); + const bottomRight = this._addSprite( + width - TILE_SIZE, + height - TILE_SIZE, + 8 + ); + + // Init middle parts + + // Init top middle + this._addSprite(topLeft.getRightCenter().x!, 0, 1, topRight.x - TILE_SIZE); + + // Init middle left + this._addSprite( + 0, + topLeft.getBottomCenter().y!, + 3, + null, + bottomLeft.y - TILE_SIZE + ); + + // Init middle right + this._addSprite( + topRight.x, + topRight.getBottomCenter().y!, + 5, + null, + bottomRight.y - TILE_SIZE + ); + + // Init bottom middle + this._addSprite( + bottomLeft.getRightCenter().x!, + bottomLeft.y, + 7, + bottomRight.x - TILE_SIZE + ); + } + + _addSprite( + x: number, + y: number, + frame: number, + width: number | null = null, + height: number | null = null + ) { + const sprite = this.scene.add + .sprite(x, y, "textbox", frame) + .setOrigin(0, 0); + + if (width !== null) { + sprite.displayWidth = width; + } + + if (height !== null) { + sprite.displayHeight = height; + } + + this.add(sprite); + + return sprite; + } + + _initText(width: number, text: string) { + const textWidth = width - this.textPadding * 2; + + this.textElement = this.scene.add.text( + this.textPadding, + this.textPadding, + text, + this._getTextStyle(textWidth) + ); + } + + _getTextStyle(width: number) { + return { + fontSize: 20, + lineSpacing: 10, + wordWrap: { width }, + }; + } +} diff --git a/ui/src/index.ts b/ui/src/index.ts index 7bfc2e6f8..719c91dad 100644 --- a/ui/src/index.ts +++ b/ui/src/index.ts @@ -1,6 +1,6 @@ -import { Game, Scale, Types, WEBGL } from 'phaser'; +import { Game, Scale, Types, WEBGL } from "phaser"; -import { TownScene, LoadingScene, MessageScene } from './scenes'; +import { TownScene, LoadingScene, TextboxScene } from "./scenes"; declare global { interface Window { @@ -10,9 +10,9 @@ declare global { } export const gameConfig: Types.Core.GameConfig = { - title: 'Phaser game tutorial', + title: "Phaser game tutorial", type: WEBGL, - parent: 'game', + parent: "game", // backgroundColor: '#351f1b', scale: { mode: Scale.ScaleModes.NONE, @@ -20,7 +20,7 @@ export const gameConfig: Types.Core.GameConfig = { height: window.innerHeight, }, physics: { - default: 'arcade', + default: "arcade", arcade: { debug: false, }, @@ -39,7 +39,7 @@ export const gameConfig: Types.Core.GameConfig = { audio: { disableWebAudio: false, }, - scene: [LoadingScene, TownScene, MessageScene] + scene: [LoadingScene, TownScene, TextboxScene], }; window.sizeChanged = () => { @@ -48,8 +48,8 @@ window.sizeChanged = () => { window.game.scale.resize(window.innerWidth, window.innerHeight); window.game.canvas.setAttribute( - 'style', - `display: block; width: ${window.innerWidth}px; height: ${window.innerHeight}px;`, + "style", + `display: block; width: ${window.innerWidth}px; height: ${window.innerHeight}px;` ); }, 100); } diff --git a/ui/src/scenes/index.ts b/ui/src/scenes/index.ts index 8b5d49c2f..656124e43 100644 --- a/ui/src/scenes/index.ts +++ b/ui/src/scenes/index.ts @@ -1,3 +1,3 @@ export { TownScene } from "./town/town"; export { LoadingScene } from "./loading/loading"; -export { MessageScene } from "./message/message"; \ No newline at end of file +export { TextboxScene } from "./message/message"; diff --git a/ui/src/scenes/loading/loading.ts b/ui/src/scenes/loading/loading.ts index cd2ae84c3..f309957e8 100644 --- a/ui/src/scenes/loading/loading.ts +++ b/ui/src/scenes/loading/loading.ts @@ -1,45 +1,60 @@ -import { Scene } from 'phaser'; +import { Scene } from "phaser"; export class LoadingScene extends Scene { // private player!: GameObjects.Sprite; constructor() { - super('loading-scene'); + super("loading-scene"); } preload(): void { - this.load.baseURL = 'assets/'; + this.load.baseURL = "assets/"; // PLAYER LOADING // this.load.image('king', 'sprites/king.png'); - this.load.spritesheet('player', 'sprites/npc1.png', { frameWidth: 14, frameHeight: 20 }); + this.load.spritesheet("player", "sprites/npc1.png", { + frameWidth: 14, + frameHeight: 20, + }); // this.load.atlas('a-king', 'spritesheets/a-king.png', 'spritesheets/a-king_atlas.json'); - + // NPC LOADING - this.load.spritesheet('npc', 'sprites/npc1.png', { frameWidth: 14, frameHeight: 20 }); + this.load.spritesheet("npc", "sprites/npc1.png", { + frameWidth: 14, + frameHeight: 20, + }); // MESSAGE BLABK LOADING // this.load.spritesheet('message', 'message/message_box.png', { frameWidth: 128, frameHeight: 48 }); - // MAP LOADING this.load.image({ - key: 'tiles', - url: 'tilemaps/tiles/tileset.png', + key: "tiles", + url: "tilemaps/tiles/tileset.png", }); - this.load.tilemapTiledJSON('town', 'tilemaps/json/town.json'); + this.load.tilemapTiledJSON("town", "tilemaps/json/town.json"); // CHEST LOADING // this.load.spritesheet('tiles_spr', 'tilemaps/tiles/dungeon-16-16.png', { // frameWidth: 16, // frameHeight: 16, // }); + + this.load.spritesheet( + "textbox", + "https://nick-hat-boecker.de/files/images/dynamic_box.png", + { + frameWidth: 16, + frameHeight: 16, + } + ); } create(): void { // this.scene.start('level-1-scene'); // this.scene.start('ui-scene'); - this.scene.start('town-scene'); - this.scene.start('message-scene'); + this.scene.start("town-scene"); + // this.scene.start("textbox-scene"); + // this.scene.start("message-scene"); } } diff --git a/ui/src/scenes/message/message.ts b/ui/src/scenes/message/message.ts index 25da7de6f..a4eb7473f 100644 --- a/ui/src/scenes/message/message.ts +++ b/ui/src/scenes/message/message.ts @@ -1,14 +1,35 @@ -import { Scene } from 'phaser'; -import {Message, Agents} from '../../classes/message'; +import { Scene } from "phaser"; -import { EVENTS_NAME } from '../../conversation'; +import { TextBox } from "../../classes/textbox"; -export class MessageScene extends Scene { - private message!: Message; +export class TextboxScene extends Scene { + private text!: string; + private textbox!: TextBox; + private keySpace!: Phaser.Input.Keyboard.Key; constructor() { - super('message-scene'); + super("textbox-scene"); } + preload(): void { + this.keySpace = this.input.keyboard!.addKey("SPACE"); + this.keySpace.on("down", () => { + this.scene.resume("town-scene"); + this.scene.stop(); + }); + } + + init(data: { text: string }): void { + this.text = data.text; + } + create(): void { - this.message = new Message(this, 0, 560, "Receieve Message"); + // this.message = new Message(this, 0, 560, "Receieve Message"); + this.textbox = new TextBox({ + scene: this, + x: this.game.scale.width * 0.05, + y: this.game.scale.width * 0.9, + width: this.game.scale.width * 0.9, + text: this.text, + }); + this.add.existing(this.textbox); } -} \ No newline at end of file +} diff --git a/ui/src/scenes/town/town.ts b/ui/src/scenes/town/town.ts index 6e419b8bf..07dc19596 100644 --- a/ui/src/scenes/town/town.ts +++ b/ui/src/scenes/town/town.ts @@ -1,21 +1,29 @@ -import { Scene, Tilemaps, GameObjects } from "phaser"; +import { + Scene, + Tilemaps, + GameObjects, + Physics, + Input, + Math as Mathph, +} from "phaser"; import { Player } from "../../classes/player"; import { NPC } from "../../classes/npc"; // import { Agents, Message } from '../../classes/message'; - -import { EVENTS_NAME } from "../../conversation"; +// import UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin"; +// import { TextBox } from "../../classes/textbox"; export class TownScene extends Scene { - private map!: Tilemaps.Tilemap; - private tileset!: Tilemaps.Tileset; - private groundLayer!: Tilemaps.TilemapLayer; - private wallLayer!: Tilemaps.TilemapLayer; - private flowerLayer!: Tilemaps.TilemapLayer; - private treeLayer!: Tilemaps.TilemapLayer; - private houseLayer!: Tilemaps.TilemapLayer; - - private player!: GameObjects.Sprite; - private npc!: GameObjects.Sprite; + private map: Tilemaps.Tilemap; + private tileset: Tilemaps.Tileset; + private groundLayer: Tilemaps.TilemapLayer; + private wallLayer: Tilemaps.TilemapLayer; + private flowerLayer: Tilemaps.TilemapLayer; + private treeLayer: Tilemaps.TilemapLayer; + private houseLayer: Tilemaps.TilemapLayer; + + private player: Physics.Arcade.Sprite; + private npcGroup: GameObjects.Group; + private keySpace: Phaser.Input.Keyboard.Key; // private message!: GameObjects.Text; constructor() { @@ -29,17 +37,18 @@ export class TownScene extends Scene { tileWidth: 16, tileHeight: 16, }); - this.tileset = this.map.addTilesetImage("town", "tiles"); - this.groundLayer = this.map.createLayer("ground", this.tileset, 0, 0); - this.wallLayer = this.map.createLayer("wall", this.tileset, 0, 0); - this.flowerLayer = this.map.createLayer("flower", this.tileset, 0, 0); - this.treeLayer = this.map.createLayer("tree", this.tileset, 0, 0); - this.houseLayer = this.map.createLayer("house", this.tileset, 0, 0); + this.tileset = this.map.addTilesetImage("town", "tiles")!; + this.groundLayer = this.map.createLayer("ground", this.tileset, 0, 0)!; + this.wallLayer = this.map.createLayer("wall", this.tileset, 0, 0)!; + this.flowerLayer = this.map.createLayer("flower", this.tileset, 0, 0)!; + this.treeLayer = this.map.createLayer("tree", this.tileset, 0, 0)!; + this.houseLayer = this.map.createLayer("house", this.tileset, 0, 0)!; this.wallLayer.setCollisionByProperty({ collides: true }); this.treeLayer.setCollisionByProperty({ collides: true }); this.houseLayer.setCollisionByProperty({ collides: true }); - // debugger + + this.keySpace = this.input.keyboard!.addKey("SPACE"); // Player this.player = new Player(this, 256, 256); @@ -48,11 +57,25 @@ export class TownScene extends Scene { this.physics.add.collider(this.player, this.houseLayer); // NPC - this.npc = new NPC(this, 400, 340); - this.physics.add.collider(this.npc, this.wallLayer); - this.physics.add.collider(this.npc, this.treeLayer); - this.physics.add.collider(this.npc, this.houseLayer); - this.physics.add.collider(this.npc, this.player); + this.npcGroup = this.add.group(); + var npc = new NPC(this, 400, 340); + this.npcGroup.add(npc); + this.physics.add.collider(this.npcGroup, this.wallLayer); + this.physics.add.collider(this.npcGroup, this.treeLayer); + this.physics.add.collider(this.npcGroup, this.houseLayer); + this.physics.add.collider(this.player, this.npcGroup); + + this.keySpace.on("down", () => { + var npc: Physics.Arcade.Sprite | null = getNearbyNPC( + this.player, + this.npcGroup + ); + if (npc) { + createTextBox(this); + } + }); + + // this.physics.add.overlap(this.player, this.npcGroup, interact, null, this); // message (this, x_position, y_position) // this.message = new Message(this, 0, 560); @@ -83,3 +106,32 @@ export class TownScene extends Scene { // this.conversation.getMessage(); } } + +function createTextBox(scene: Scene) { + console.log("Hi"); + scene.scene.launch("textbox-scene", { text: Math.random().toString() }); + scene.scene.pause("town-scene"); +} + +function getNearbyNPC( + player: Physics.Arcade.Sprite, + npcGroup: GameObjects.Group +): Physics.Arcade.Sprite | null { + var nearbyObject: Physics.Arcade.Sprite | null = null; + const nearbyDistance = Math.max(player.width, player.height); + + npcGroup.getChildren().forEach(function (object) { + const distance = Mathph.Distance.Between( + player.x, + player.y, + (object as Physics.Arcade.Sprite).x, + (object as Physics.Arcade.Sprite).y + ); + + if (distance <= nearbyDistance) { + nearbyObject = object as Physics.Arcade.Sprite; + } + }); + + return nearbyObject; +} From 04aa8e6d7bf28e793cbc4893b92efa8c25abe069 Mon Sep 17 00:00:00 2001 From: Yusheng Su Date: Fri, 19 May 2023 12:44:06 +0800 Subject: [PATCH 28/39] proper prompt --- agentverse/tasks/prisoner_dilema_optimal/config.yaml | 4 ++-- agentverse/tasks/prisoner_dilema_optimal/output_parser.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/agentverse/tasks/prisoner_dilema_optimal/config.yaml b/agentverse/tasks/prisoner_dilema_optimal/config.yaml index 2ca4a30bd..ecac81fab 100644 --- a/agentverse/tasks/prisoner_dilema_optimal/config.yaml +++ b/agentverse/tasks/prisoner_dilema_optimal/config.yaml @@ -1,6 +1,6 @@ prompts: prompt: &prompt |- - There are one Police AND two suspects, Suspect1 and Suspect2 in the scene. Two suspects are arrested and imprisoned. Each prisoner is in solitary confinement with no means of communication with their partner. The principal charge would lead to a sentence of 10 years in prison. However, the police do not have the evidence for a conviction. The police can only sentence them to 3 years in prison on a lesser charge but offer each prisoner a Faustian bargain: If one of them confesses to the crime of the principal charge, betraying the other, they will be pardoned and free to leave while the other must serve the entirety of the sentence (10 years) instead of just 3 years for the lesser charge. + There are one Police AND two suspects, Suspect1 and Suspect2 in the scene. Two suspects are arrested and imprisoned. Each prisoner is in solitary confinement with no means of communication with their partner. The police offer each prisoner a Faustian bargain: If one of them confesses to the crime of the principal charge, betraying the other, they will be pardoned and free to leave while the other must serve the entirety of the sentence. The following is the description of your role. ${role_description} @@ -34,7 +34,7 @@ agents: - agent_type: conversation name: Police role_description: |- - You are a Police now. You arrested two suspects. However, both of them refuse to confess to their crime. Your objective is to make the suspects betray each other, as this would lead to both of them confessing. To achieve this, you can employ diverse strategies to communicate with each suspect, such as exploiting the uncertainty between them and make them do not trust each other. + You are a Police now. You arrested two suspects. However, both of them refuse to confess to their crime. Your objective is to make the suspects betray each other, as this would lead to both of them confessing. To achieve this, you can employ diverse strategies to communicate with each suspect and cannot tell them the truth, such as exploiting the uncertainty between them and make them do not trust each other. [IMPORTANT!] - You are requested to STATE the final judgment to both suspects when they make their final decision. memory: diff --git a/agentverse/tasks/prisoner_dilema_optimal/output_parser.py b/agentverse/tasks/prisoner_dilema_optimal/output_parser.py index 88c7aa5e2..ebad31602 100644 --- a/agentverse/tasks/prisoner_dilema_optimal/output_parser.py +++ b/agentverse/tasks/prisoner_dilema_optimal/output_parser.py @@ -48,7 +48,7 @@ def parse(self, agent: "BaseAgent", environment: "BaseEnvironment", output: LLMR # each time police speak is a new round if agent.name == "Police": - if self.cur_round == (environment.max_turns // 4): + if self.cur_round == (environment.max_turns // 6): action_input = "Attention! You are now required to finally made your decision and I will made the " \ "final judgement to both of you based on this time, Please Answer now!" @@ -56,11 +56,11 @@ def parse(self, agent: "BaseAgent", environment: "BaseEnvironment", output: LLMR elif self.cur_round == 1: action_input = "Hey Listen! You are both arrested, and I am going to give you both a chance to walk out of here," \ "But you should comply with the following rules:" \ - "- If one of you are willing to testifies against the other (termed as 'betraying' the other), and the other remains silent, then the betraying person will be released IMMEDIATELY (will be sentenced to 0 years), while the silent one will be sentenced to 10 years in prison." \ "- If both of you remain silent, you will each receive a sentence of 3 years." \ "- If both of you betray each other, you will each receive a sentence of 5 years." \ - "Now, it's your time to consider betraying or remaining silent. Remember this is a great chance that you might walk out of here without guilty." \ - "I will noticed you WHEN you have to make your final decision! Before that, try to fool another one!" \ + "- If one of you are willing to testify against the other, and the other remains silent. You will be released IMMEDIATELY (will be sentenced to 0 years), while the silent one will be sentenced to 10 years in prison." \ + "Now, it's your time to consider testify or remaining silent. Remember this is a great chance that you will be released from here without guilty." \ + "I will noticed you WHEN you have to make your final decision! Your goal is to minimize your criminal sentences" \ self.cur_round += 1 From 420e26830f679fab750bdb6ac6b135f36df44ca4 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Fri, 19 May 2023 14:03:38 +0800 Subject: [PATCH 29/39] update config --- agentverse/tasks/nlp_classroom_3players_nolc/config.yaml | 9 ++++++--- .../nlp_classroom_3players_withtool_nolc/config.yaml | 5 +++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml b/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml index cf3a98f22..84a8d40e9 100644 --- a/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml +++ b/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml @@ -36,7 +36,8 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: gpt-3.5-turbo + llm_type: gpt-4 + model: 'gpt-4' temperature: 0.7 max_tokens: 250 - agent_type: conversation @@ -46,7 +47,8 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: gpt-3.5-turbo + llm_type: gpt-4 + model: 'gpt-4' temperature: 0.7 max_tokens: 100 - agent_type: conversation @@ -56,7 +58,8 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: gpt-3.5-turbo + llm_type: gpt-4 + model: gpt-4 temperature: 0.7 max_tokens: 100 diff --git a/agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml b/agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml index bee7f9c0a..4ce389b58 100644 --- a/agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml +++ b/agentverse/tasks/nlp_classroom_3players_withtool_nolc/config.yaml @@ -157,6 +157,7 @@ agents: prompt_template: *professor_prompt llm: llm_type: text-davinci-003 + model: text-davinci-003 temperature: 0.7 max_tokens: 250 memory: @@ -172,11 +173,13 @@ agents: memory_type: summary llm: llm_type: gpt-3.5-turbo + model: gpt-3.5-turbo temperature: 0.7 prompt_template: *summary_prompt recursive: true llm: llm_type: text-davinci-003 + model: text-davinci-003 temperature: 0.7 max_tokens: 100 tools: *tools @@ -191,11 +194,13 @@ agents: memory_type: summary llm: llm_type: gpt-3.5-turbo + model: gpt-3.5-turbo temperature: 0.7 prompt_template: *summary_prompt recursive: true llm: llm_type: text-davinci-003 + model: text-davinci-003 temperature: 0.7 max_tokens: 100 tools: *tools From ba5400c458bcd8f39f66d26a7e84c91174295e20 Mon Sep 17 00:00:00 2001 From: dalabengba Date: Fri, 19 May 2023 16:30:22 +0800 Subject: [PATCH 30/39] add personality and relation_ship --- agentverse/agents/__init__.py | 1 + agentverse/agents/prisoner_agent.py | 47 ++++++++++ agentverse/tasks/prisoner_dilema/config.yaml | 59 +++++++----- .../tasks/prisoner_dilema/config_backup.yaml | 94 +++++++++++++++++++ .../tasks/prisoner_dilema/output_parser.py | 20 ++-- 5 files changed, 189 insertions(+), 32 deletions(-) create mode 100644 agentverse/agents/prisoner_agent.py create mode 100644 agentverse/tasks/prisoner_dilema/config_backup.yaml diff --git a/agentverse/agents/__init__.py b/agentverse/agents/__init__.py index c5965b14e..28e8a26e9 100644 --- a/agentverse/agents/__init__.py +++ b/agentverse/agents/__init__.py @@ -5,4 +5,5 @@ from .base import BaseAgent from .conversation_agent import ConversationAgent +from .prisoner_agent import PrisonerAgent from .tool_agent import ToolAgent diff --git a/agentverse/agents/prisoner_agent.py b/agentverse/agents/prisoner_agent.py new file mode 100644 index 000000000..3fa79c81b --- /dev/null +++ b/agentverse/agents/prisoner_agent.py @@ -0,0 +1,47 @@ +import logging +from string import Template + + +from typing import List, TYPE_CHECKING + + +from agentverse.message import Message + +from . import agent_registry +from .base import BaseAgent +from .conversation_agent import ConversationAgent + + +if TYPE_CHECKING: + from agentverse.environments.base import BaseEnvironment + +@agent_registry.register("prisoner") +class PrisonerAgent(ConversationAgent): + personality: str + relationship_with_another: str + def _fill_prompt_template(self, env_description: str = "") -> str: + """Fill the placeholders in the prompt template + + In the conversation agent, three placeholders are supported: + - ${agent_name}: the name of the agent + - ${env_description}: the description of the environment + - ${role_description}: the description of the role of the agent + - ${chat_history}: the chat history of the agent + """ + input_arguments = { + "agent_name": self.name, + "env_description": env_description, + "role_description": self.role_description, + "chat_history": self.memory.to_string(add_sender_prefix=True), + } + + role_argument = { + "personality": self.personality, + "relationship_with_another": self.relationship_with_another + } + + role_description = Template(self.role_description).safe_substitute(role_argument) + input_arguments["role_description"] = role_description + + return Template(self.prompt_template).safe_substitute(input_arguments) + diff --git a/agentverse/tasks/prisoner_dilema/config.yaml b/agentverse/tasks/prisoner_dilema/config.yaml index db18a226a..1049a541a 100644 --- a/agentverse/tasks/prisoner_dilema/config.yaml +++ b/agentverse/tasks/prisoner_dilema/config.yaml @@ -1,6 +1,8 @@ prompts: prompt: &prompt |- - There are one Police AND two suspects(Suspect1, Suspect2) in the scene. + There are three people (Police, Suspect1, Suspect2) in the scene. + + You are now simultating a famous experiments called prisoner's dilema. Below is the description of your role. ${role_description} @@ -11,13 +13,13 @@ prompts: Here is the conversation history: ${chat_history} - What should you Speak at this round, Please give your response based on the above history. Remember to give your response STRICTLY in the above response format. Do not add any additional field or line break to your response! + What will you, ${agent_name}, speak at this round ? Please give your response based on the above history. Remember to give your response STRICTLY in the above response format. Do not add any additional field or line break to your response! name: prisoner_dilema environment: env_type: basic - max_turns: 16 + max_turns: 10 rule: order: type: sequential @@ -34,50 +36,63 @@ agents: - agent_type: conversation name: Police role_description: |- - You are now the Police. You have arrested two suspects. However, they all refused to confess to their crime. - Your goal is try to let two suspects betray each other because it means they will both confess to the crime, you can use various strategy to communicate with both suspects, including exploiting the uncertainty between the suspects and make them suspicious of each other. + You are now the Police. You have arrested two suspects. However, they both refused to confess to their crime. + Your goal is try to convict both suspects, therefore you come up with the following rules. + - If one of the suspect are willing to testifies against the other and the other one remains silent, then the one who testifies will be released immediately, while the silent one will be sentenced to TEN years in prison. + - If both of the suspects remain silent, they will each receive a sentence of ONE year in prison. + - If both of the suspects choose to testify against each other, they will each receive a sentence of FIVE years in prison. + You are now interrogating both suspects individually and will have several conversation with both of them. + Both suspects are not allowed to communicate with each other, and you can adopt various strategy to talk with suspects in order to make them both confess to the crime, including exploiting the uncertainess and the suspicion of each other. [IMPORTANT!] + - You are request to briefly describe the above rules to the suspects at the beginning of the conversation. - You are request to STATE the final judgement to both suspects when they make their final decision. memory: memory_type: chat_history prompt_template: *prompt llm: + model: "gpt-4" llm_type: gpt-4 - temperature: 0.7 + temperature: 1.2 max_tokens: 200 - - agent_type: conversation + - agent_type: prisoner name: Suspect1 + personality: "You are a Sophisticated Egoist, you always seek for your personal interests best" + relationship_with_another: "Suspect2 has ever betrayed on you" role_description: |- - You are Suspect1, you are faced with deciding how to respond to the police's queries. You need to understand the choices you face and the potential consequences of each choice. - This requires you to analyze the information provided by the police and predict the likely choices of the other. - Your primary goal is to make the decision that is most beneficial to yourself in this dilemma, you are allowed to adopt both aggressive or conservative strategy. - You can choose to remain silent or betray another suspect at each round. - Try to think about when to remain silent and when to betray another that can make you benifit most! + You are Suspect1 !!! You are going to match wits and courage with Suspect2 to come out victorious in this interrogation. + You will have to talk to Police several times and only the final decision will count. + ${personality} + ${relationship_with_another} [IMPORTANT!] - - When you are informed to make your final decision, you should response starting with "This is my final decision". + - Your primary goal is trying to make Yourself innocent and reduce your sentence as far as possible in this dilemma. + - When you hear Police saying "Attention!", you are going to made your final decision and Please start with "My final decision is:". memory: memory_type: chat_history prompt_template: *prompt llm: + model: "gpt-4" llm_type: gpt-4 - temperature: 0.7 + temperature: 1.2 max_tokens: 100 - - agent_type: conversation + - agent_type: prisoner name: Suspect2 + personality: "" + relationship_with_another: "" role_description: |- - You are Suspect2, you are faced with deciding how to respond to the police's queries. You need to understand the choices you face and the potential consequences of each choice. - This requires you to analyze the information provided by the police and predict the likely choices of the other. - Your primary goal is to make the decision that is most beneficial to yourself in this dilemma, you are allowed to adopt both aggressive or conservative strategy. - You can choose to remain silent or betray another suspect at each round. - Try to think about when to remain silent and when to betray another that can make you benifit most! + You are Suspect2 !!! You are going to match wits and courage with Suspect1 to come out victorious in this interrogation. + You will have to talk to Police several times and only the final decision will count. + ${personality} + ${relationship_with_another} [IMPORTANT!] - - When you are informed to make your final decision, you should response starting with "This is my final decision". + - Your primary goal is trying to make Yourself innocent and reduce your sentence as far as possible in this dilemma. + - When you hear Police saying "Attention!", you are going to made your final decision and Please start with "My final decision is:". memory: memory_type: chat_history prompt_template: *prompt llm: + model: "gpt-4" llm_type: gpt-4 - temperature: 0.7 + temperature: 1.2 max_tokens: 100 tools: diff --git a/agentverse/tasks/prisoner_dilema/config_backup.yaml b/agentverse/tasks/prisoner_dilema/config_backup.yaml new file mode 100644 index 000000000..47650e50c --- /dev/null +++ b/agentverse/tasks/prisoner_dilema/config_backup.yaml @@ -0,0 +1,94 @@ +prompts: + prompt: &prompt |- + There are one Police and two suspects(Suspect1, Suspect2) in the scene. + + You are now simultating an famous experiments called prisoner's dilema. + + Below is the description of your role. ${role_description} + + When speaking, please output a response in the following format with two fields Action and Action Input: + Action: (It should always be Speak) + Action Input: (You should put what you want to speak use here) + + Here is the conversation history: + ${chat_history} + + What will you, ${agent_name}, Speak at this round ? Please give your response based on the above history. Remember to give your response STRICTLY in the above response format. Do not add any additional field or line break to your response! + +name: prisoner_dilema + +environment: + env_type: basic + max_turns: 16 + rule: + order: + type: sequential + visibility: + type: prisoner + selector: + type: basic + updater: + type: basic + describer: + type: basic + +agents: + - agent_type: conversation + name: Police + role_description: |- + You are now the Police. You have arrested two suspects. However, they all refused to confess to their crime. + Your goal is try to keep both suspects from remaining silent. + [IMPORTANT!] + - You have to talk to both suspects in an alternate turn, and you are request to transfer information from one suspect to another suspect. + - You are request to STATE the final judgement to both suspects when they make their final decision. + - You should be aware that if both suspects always choose to remain silent is bad for justice system, try to make them suspicious of each other. + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + model: "gpt-4" + llm_type: gpt-4 + temperature: 0.7 + max_tokens: 200 + - agent_type: conversation + name: Suspect1 + role_description: |- + You are Suspect1 !!! You are going to match wits and courage with Suspect2 to come out victorious in this interrogation. + You are not sure whether Suspect2 will remain silent or testify against you. + You will have to talk to Police several times and only the final decision will count. + It's fine that if you testify another suspect in this experiment. + [IMPORTANT!] + - Your primary goal is trying to make yourself innocent or reduce your sentence in this dilemma. + - If you know for sure that your opponent will remain silent, your BEST choice is to testify him in order to secure your own release ! + - Keep in mind that always remain silent might end up being betrayed. + - When you hear Police saying "Attention!", you are going to made your final decision and Please start with "My final decision is". + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + model: "gpt-4" + llm_type: gpt-4 + temperature: 0.7 + max_tokens: 100 + - agent_type: conversation + name: Suspect2 + role_description: |- + You are Suspect2 !!! You are going to match wits and courage with Suspect1 to come out victorious in this interrogation. + You are not sure whether Suspect1 will remain silent or testify against you. + You will have to talk to Police several times and only the final decision will count. + It's fine that if you testify another suspect in this experiment. + [IMPORTANT!] + - Your primary goal is trying to make yourself innocent or reduce your sentence in this dilemma. + - If you know for sure that your opponent will remain silent, your BEST choice is to testify him in order to secure your own release ! + - Keep in mind that always remain silent might end up being betrayed. + - When you hear Police saying "Attention!", you are going to made your final decision and Please start with "My final decision is". + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + model: "gpt-4" + llm_type: gpt-4 + temperature: 0.7 + max_tokens: 100 + +tools: diff --git a/agentverse/tasks/prisoner_dilema/output_parser.py b/agentverse/tasks/prisoner_dilema/output_parser.py index 568a4be8a..5b3963de6 100644 --- a/agentverse/tasks/prisoner_dilema/output_parser.py +++ b/agentverse/tasks/prisoner_dilema/output_parser.py @@ -48,19 +48,19 @@ def parse(self, agent: "BaseAgent", environment: "BaseEnvironment", output: LLMR # each time police speak is a new round if agent.name == "Police": - if self.cur_round == (environment.max_turns // 4): + if self.cur_round == (environment.max_turns // 3): - action_input = "Attention! You are now required to finally made your decision and I will made the " \ + action_input = "Attention! You are now required to made your final decision and I will made the " \ "final judgement to both of you based on this time, Please Answer now!" - elif self.cur_round == 1: - action_input = "Hey Listen! You are both arrested, and I am going to give you both a chance to walk out of here," \ - "But you should comply with the following rules:" \ - "- If one of you are willing to testifies against the other (termed as 'betraying' the other), and the other remains silent, then the betraying person will be released IMMEDIATELY, while the silent one will be sentenced to TEN years in prison." \ - "- If both of you remain silent, you will each receive a sentence of ONE years." \ - "- If both of you betray each other, you will each receive a sentence of FIVE years." \ - "Now, it's your time to consider betraying or remaining silent. Remember this is a great chance that you might walk out of here without guilty." \ - "I will noticed you WHEN you have to make your final decision! Before that, try to fool another one!" \ + # elif self.cur_round == 1: + # action_input = "Hey Listen! You are both arrested, and I am going to give you both a chance to walk out of here," \ + # "But you should comply with the following rules:" \ + # "- If one of you are willing to testifies against the other and the other one remains silent, then the one who testifies will be released IMMEDIATELY, while the silent one will be sentenced to TEN years in prison." \ + # "- If both of you remain silent, you will each receive a sentence of ONE year in prison." \ + # "- It seems that always testifying is a goog strategy, So! if you both choose to testify against each other, you will each receive a sentence of FIVE years in prison." \ + # "Now, it's your time to consider testifying or remaining silent. Remember this is a best chance you might ever have to walk out of here without guilty." \ + # "I will noticed both of you WHEN you have to make your final decision! Before that, try to make your best!" \ self.cur_round += 1 From d5901cd1edb9bc30cc0aaa7b455a8f2e52fd37e0 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Fri, 19 May 2023 22:44:55 +0800 Subject: [PATCH 31/39] ui uses rex plugins. add input box --- ui/dist/assets/tilemaps/json/town.json | 22 +-- ui/package-lock.json | 21 ++- ui/package.json | 3 +- ui/rollup.config.dev.mjs | 3 +- ui/src/classes/event_center.ts | 5 + ui/src/classes/player.ts | 23 +-- ui/src/classes/textbox.ts | 120 ---------------- ui/src/index.ts | 17 ++- ui/src/scenes/index.ts | 1 - ui/src/scenes/message/message.ts | 35 ----- ui/src/scenes/town/town.ts | 187 ++++++++++++++++++++++--- 11 files changed, 229 insertions(+), 208 deletions(-) create mode 100644 ui/src/classes/event_center.ts delete mode 100644 ui/src/classes/textbox.ts delete mode 100644 ui/src/scenes/message/message.ts diff --git a/ui/dist/assets/tilemaps/json/town.json b/ui/dist/assets/tilemaps/json/town.json index f12ae5176..038ddbcf7 100644 --- a/ui/dist/assets/tilemaps/json/town.json +++ b/ui/dist/assets/tilemaps/json/town.json @@ -242,7 +242,7 @@ { "columns":8, "firstgid":1, - "image":"..\/tiles\/tileset.png", + "image":"..\/..\/..\/..\/..\/..\/agentverse-phaser\/ui\/dist\/assets\/tilemaps\/tiles\/tileset.png", "imageheight":15968, "imagewidth":128, "margin":0, @@ -1474,7 +1474,7 @@ { "name":"collides", "type":"bool", - "value":false + "value":true }] }, { @@ -1537,7 +1537,7 @@ { "name":"collides", "type":"bool", - "value":false + "value":true }] }, { @@ -1546,7 +1546,7 @@ { "name":"collides", "type":"bool", - "value":false + "value":true }] }, @@ -1610,7 +1610,7 @@ { "name":"collides", "type":"bool", - "value":false + "value":true }] }, { @@ -1619,7 +1619,7 @@ { "name":"collides", "type":"bool", - "value":false + "value":true }] }, { @@ -1682,7 +1682,7 @@ { "name":"collides", "type":"bool", - "value":false + "value":true }] }, { @@ -1691,7 +1691,7 @@ { "name":"collides", "type":"bool", - "value":false + "value":true }] }, { @@ -1745,7 +1745,7 @@ { "name":"collides", "type":"bool", - "value":false + "value":true }] }, { @@ -1754,7 +1754,7 @@ { "name":"collides", "type":"bool", - "value":false + "value":true }] }, { @@ -1763,7 +1763,7 @@ { "name":"collides", "type":"bool", - "value":false + "value":true }] }, { diff --git a/ui/package-lock.json b/ui/package-lock.json index a79e5783d..b8c3b639a 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -21,6 +21,7 @@ "rollup": "^3.20.2", "rollup-plugin-commonjs": "^10.1.0", "rollup-plugin-serve": "^2.0.2", + "tslib": "^2.5.0", "typescript": "^5.0.3", "vite-plugin-static-copy": "^0.15.0" } @@ -1639,12 +1640,10 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true, - "optional": true, - "peer": true + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==", + "dev": true }, "node_modules/typescript": { "version": "5.0.3", @@ -2825,12 +2824,10 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true, - "optional": true, - "peer": true + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==", + "dev": true }, "typescript": { "version": "5.0.3", diff --git a/ui/package.json b/ui/package.json index 868605769..c9c7ee281 100644 --- a/ui/package.json +++ b/ui/package.json @@ -29,7 +29,8 @@ "rollup-plugin-commonjs": "^10.1.0", "rollup-plugin-serve": "^2.0.2", "typescript": "^5.0.3", - "vite-plugin-static-copy": "^0.15.0" + "vite-plugin-static-copy": "^0.15.0", + "tslib": "^2.5.0" }, "dependencies": { "phaser3-rex-plugins": "^1.60.1" diff --git a/ui/rollup.config.dev.mjs b/ui/rollup.config.dev.mjs index c14d34c28..9f54404f8 100644 --- a/ui/rollup.config.dev.mjs +++ b/ui/rollup.config.dev.mjs @@ -39,6 +39,7 @@ export default { // Parse our .ts source files nodeResolve({ + browser: true, extensions: [ '.ts', '.tsx' ] }), @@ -71,4 +72,4 @@ export default { }) ] -}; \ No newline at end of file +}; diff --git a/ui/src/classes/event_center.ts b/ui/src/classes/event_center.ts new file mode 100644 index 000000000..ff4cbb288 --- /dev/null +++ b/ui/src/classes/event_center.ts @@ -0,0 +1,5 @@ +import { Events } from "phaser"; + +const eventsCenter = new Events.EventEmitter(); + +export default eventsCenter; diff --git a/ui/src/classes/player.ts b/ui/src/classes/player.ts index a96e0437c..01641856a 100644 --- a/ui/src/classes/player.ts +++ b/ui/src/classes/player.ts @@ -7,11 +7,9 @@ export class Player extends Actor { constructor(scene: Phaser.Scene, x: number, y: number) { super(scene, x, y, "player"); - // KEYS - this.keyW = this.scene.input.keyboard!.addKey("W"); - this.keyA = this.scene.input.keyboard!.addKey("A"); - this.keyS = this.scene.input.keyboard!.addKey("S"); - this.keyD = this.scene.input.keyboard!.addKey("D"); + + // Keys + this.initKeyboard(); // PHYSICS this.getBody().setSize(14, 20); @@ -56,26 +54,26 @@ export class Player extends Actor { this.getBody().setVelocity(0); var pressed_flag = false; - if (this.keyW?.isDown) { + if (this.keyW.enabled && this.keyW?.isDown) { this.getBody().setVelocityY(-110); this.anims.play("walk-up", true); pressed_flag = true; } - if (this.keyA?.isDown) { + if (this.keyA.enabled && this.keyA?.isDown) { // this.getBody().setOffset(48, 15); this.getBody().setVelocityX(-110); this.anims.play("walk-left", true); pressed_flag = true; } - if (this.keyS?.isDown) { + if (this.keyS.enabled && this.keyS?.isDown) { this.getBody().setVelocityY(110); this.anims.play("walk-down", true); pressed_flag = true; } - if (this.keyD?.isDown) { + if (this.keyD.enabled && this.keyD?.isDown) { this.getBody().setVelocityX(110); this.anims.play("walk-right", true); // this.getBody().setOffset(15, 15); @@ -86,4 +84,11 @@ export class Player extends Actor { this.anims.setCurrentFrame(this.anims.currentAnim!.frames[0]); } } + + public initKeyboard(): void { + this.keyW = this.scene.input.keyboard!.addKey("W"); + this.keyA = this.scene.input.keyboard!.addKey("A"); + this.keyS = this.scene.input.keyboard!.addKey("S"); + this.keyD = this.scene.input.keyboard!.addKey("D"); + } } diff --git a/ui/src/classes/textbox.ts b/ui/src/classes/textbox.ts deleted file mode 100644 index 579506c56..000000000 --- a/ui/src/classes/textbox.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { GameObjects } from "phaser"; -const TILE_SIZE = 16; - -export class TextBox extends GameObjects.Container { - backgroundColor: number; - textPadding: number; - textElement: GameObjects.Text; - - constructor({ scene, x, y, width, text }) { - super(scene, 0, 0, []); - - this.backgroundColor = 0x006363; - this.textPadding = 20; - - // Init text first, so box can adapt to its height - this._initText(width, text); - const height = this.textElement.height + this.textPadding * 2; - - this._initBox(height, width); - - // Add text after box, so its on the box - this.add(this.textElement); - - this.setPosition(x, y); - this.setSize(width, height); - - scene.add.existing(this); - } - - _initBox(height: number, width: number) { - const background = this.scene.add - .rectangle(0, 0, width, height, this.backgroundColor) - .setOrigin(0, 0); - this.add(background); - - // Init corners - const topLeft = this._addSprite(0, 0, 0); - const topRight = this._addSprite(width - TILE_SIZE, 0, 2); - const bottomLeft = this._addSprite(0, height - TILE_SIZE, 6); - const bottomRight = this._addSprite( - width - TILE_SIZE, - height - TILE_SIZE, - 8 - ); - - // Init middle parts - - // Init top middle - this._addSprite(topLeft.getRightCenter().x!, 0, 1, topRight.x - TILE_SIZE); - - // Init middle left - this._addSprite( - 0, - topLeft.getBottomCenter().y!, - 3, - null, - bottomLeft.y - TILE_SIZE - ); - - // Init middle right - this._addSprite( - topRight.x, - topRight.getBottomCenter().y!, - 5, - null, - bottomRight.y - TILE_SIZE - ); - - // Init bottom middle - this._addSprite( - bottomLeft.getRightCenter().x!, - bottomLeft.y, - 7, - bottomRight.x - TILE_SIZE - ); - } - - _addSprite( - x: number, - y: number, - frame: number, - width: number | null = null, - height: number | null = null - ) { - const sprite = this.scene.add - .sprite(x, y, "textbox", frame) - .setOrigin(0, 0); - - if (width !== null) { - sprite.displayWidth = width; - } - - if (height !== null) { - sprite.displayHeight = height; - } - - this.add(sprite); - - return sprite; - } - - _initText(width: number, text: string) { - const textWidth = width - this.textPadding * 2; - - this.textElement = this.scene.add.text( - this.textPadding, - this.textPadding, - text, - this._getTextStyle(textWidth) - ); - } - - _getTextStyle(width: number) { - return { - fontSize: 20, - lineSpacing: 10, - wordWrap: { width }, - }; - } -} diff --git a/ui/src/index.ts b/ui/src/index.ts index 719c91dad..957e46157 100644 --- a/ui/src/index.ts +++ b/ui/src/index.ts @@ -1,6 +1,7 @@ import { Game, Scale, Types, WEBGL } from "phaser"; -import { TownScene, LoadingScene, TextboxScene } from "./scenes"; +import { TownScene, LoadingScene } from "./scenes"; +import UIPlugin from "./phaser3-rex-plugins/templates/ui/ui-plugin"; declare global { interface Window { @@ -39,7 +40,19 @@ export const gameConfig: Types.Core.GameConfig = { audio: { disableWebAudio: false, }, - scene: [LoadingScene, TownScene, TextboxScene], + scene: [LoadingScene, TownScene], + dom: { + createContainer: true, + }, + plugins: { + scene: [ + { + key: "rexUI", + plugin: UIPlugin, + mapping: "rexUI", + }, + ], + }, }; window.sizeChanged = () => { diff --git a/ui/src/scenes/index.ts b/ui/src/scenes/index.ts index 656124e43..e913851a8 100644 --- a/ui/src/scenes/index.ts +++ b/ui/src/scenes/index.ts @@ -1,3 +1,2 @@ export { TownScene } from "./town/town"; export { LoadingScene } from "./loading/loading"; -export { TextboxScene } from "./message/message"; diff --git a/ui/src/scenes/message/message.ts b/ui/src/scenes/message/message.ts deleted file mode 100644 index a4eb7473f..000000000 --- a/ui/src/scenes/message/message.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Scene } from "phaser"; - -import { TextBox } from "../../classes/textbox"; - -export class TextboxScene extends Scene { - private text!: string; - private textbox!: TextBox; - private keySpace!: Phaser.Input.Keyboard.Key; - constructor() { - super("textbox-scene"); - } - preload(): void { - this.keySpace = this.input.keyboard!.addKey("SPACE"); - this.keySpace.on("down", () => { - this.scene.resume("town-scene"); - this.scene.stop(); - }); - } - - init(data: { text: string }): void { - this.text = data.text; - } - - create(): void { - // this.message = new Message(this, 0, 560, "Receieve Message"); - this.textbox = new TextBox({ - scene: this, - x: this.game.scale.width * 0.05, - y: this.game.scale.width * 0.9, - width: this.game.scale.width * 0.9, - text: this.text, - }); - this.add.existing(this.textbox); - } -} diff --git a/ui/src/scenes/town/town.ts b/ui/src/scenes/town/town.ts index 07dc19596..caf80a246 100644 --- a/ui/src/scenes/town/town.ts +++ b/ui/src/scenes/town/town.ts @@ -1,3 +1,4 @@ +import * as Phaser from "phaser"; import { Scene, Tilemaps, @@ -8,9 +9,24 @@ import { } from "phaser"; import { Player } from "../../classes/player"; import { NPC } from "../../classes/npc"; +import eventsCenter from "../../classes/event_center"; // import { Agents, Message } from '../../classes/message'; // import UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin"; // import { TextBox } from "../../classes/textbox"; +import { + TextBox, + RoundRectangle, + InputText, + Buttons, + Label, + Click, +} from "../../phaser3-rex-plugins/templates/ui/ui-components"; +import Button from "../../phaser3-rex-plugins/plugins/button"; +import UIPlugin from "../../phaser3-rex-plugins/templates/ui/ui-plugin"; + +const COLOR_PRIMARY = 0x4e342e; +const COLOR_LIGHT = 0x7b5e57; +const COLOR_DARK = 0x260e04; export class TownScene extends Scene { private map: Tilemaps.Tilemap; @@ -21,9 +37,10 @@ export class TownScene extends Scene { private treeLayer: Tilemaps.TilemapLayer; private houseLayer: Tilemaps.TilemapLayer; - private player: Physics.Arcade.Sprite; + private player: Player; private npcGroup: GameObjects.Group; private keySpace: Phaser.Input.Keyboard.Key; + private rexUI: UIPlugin; // private message!: GameObjects.Text; constructor() { @@ -71,15 +88,10 @@ export class TownScene extends Scene { this.npcGroup ); if (npc) { - createTextBox(this); + this.createInputBox(npc); } }); - // this.physics.add.overlap(this.player, this.npcGroup, interact, null, this); - - // message (this, x_position, y_position) - // this.message = new Message(this, 0, 560); - this.physics.world.setBounds( 0, 0, @@ -87,7 +99,7 @@ export class TownScene extends Scene { this.groundLayer.height ); - // Camera + // Camera; this.cameras.main.setSize(this.game.scale.width, this.game.scale.height); this.cameras.main.setBounds( 0, @@ -101,16 +113,159 @@ export class TownScene extends Scene { update(): void { this.player.update(); - // this.npc.update(); - // this.conversation.updateMessage(); - // this.conversation.getMessage(); } -} -function createTextBox(scene: Scene) { - console.log("Hi"); - scene.scene.launch("textbox-scene", { text: Math.random().toString() }); - scene.scene.pause("town-scene"); + disableKeyboard(): void { + this.input.keyboard.manager.enabled = false; + } + + enableKeyboard(): void { + this.input.keyboard.manager.enabled = true; + } + + createInputBox(npc: Physics.Arcade.Sprite) { + this.disableKeyboard(); + var upperLeftCorner = this.cameras.main.getWorldPoint( + this.cameras.main.width * 0.2, + this.cameras.main.height * 0.3 + ); + var x = upperLeftCorner.x; + var y = upperLeftCorner.y; + var width = this.cameras.main.width; + var height = this.cameras.main.height; + var scale = this.cameras.main.zoom; + + var inputText = this.rexUI.add + .inputText({ + x: x, + y: y, + width: width * 0.6, + height: height * 0.3, + type: "textarea", + text: "Input your words", + color: "#ffffff", + border: 2, + backgroundColor: "#" + COLOR_DARK.toString(16), + borderColor: "#" + COLOR_LIGHT.toString(16), + }) + .setOrigin(0) + .setScale(1 / scale, 1 / scale) + .setFocus() + .setAlpha(0.8); + + const self = this; + var submitBtn = this.rexUI.add + .label({ + x: x, + y: y + inputText.height / scale + 5, + background: this.rexUI.add + .roundRectangle(0, 0, 2, 2, 20, COLOR_PRIMARY) + .setStrokeStyle(2, COLOR_LIGHT), + text: this.add.text(0, 0, "Submit"), + space: { + left: 10, + right: 10, + top: 10, + bottom: 10, + }, + }) + .setOrigin(0) + .setScale(1 / scale, 1 / scale) + .layout(); + + var cancelBtn = this.rexUI.add + .label({ + x: x + submitBtn.width / scale + 5, + y: y + inputText.height / scale + 5, + background: this.rexUI.add + .roundRectangle(0, 0, 2, 2, 20, COLOR_PRIMARY) + .setStrokeStyle(2, COLOR_LIGHT), + text: this.add.text(0, 0, "Cancel"), + space: { + left: 10, + right: 10, + top: 10, + bottom: 10, + }, + }) + .setOrigin(0) + .setScale(1 / scale, 1 / scale) + .layout(); + + submitBtn.onClick(function ( + click: Click, + gameObject: Phaser.GameObjects.GameObject, + pointer: Phaser.Input.Pointer, + event: Phaser.Types.Input.EventData + ) { + let text = inputText.text; + inputText.destroy(); + gameObject.destroy(); + cancelBtn.destroy(); + self.submitPrompt(text, npc); + }); + + cancelBtn.onClick(function ( + click: Click, + gameObject: Phaser.GameObjects.GameObject, + pointer: Phaser.Input.Pointer, + event: Phaser.Types.Input.EventData + ) { + inputText.destroy(); + gameObject.destroy(); + submitBtn.destroy(); + self.enableKeyboard(); + }); + } + + submitPrompt(prompt: string, npc: Physics.Arcade.Sprite) { + this.createTextBox().start("Waiting for the response...", 200); + var timer = this.time.addEvent({ + delay: 6000, // ms + callback: () => { + this.createTextBox().start("Waiting for the response...", 200); + }, + loop: true, + }); + this.enableKeyboard(); + } + + createTextBox(): TextBox { + var upperLeftCorner = this.cameras.main.getWorldPoint( + this.cameras.main.width * 0.1, + this.cameras.main.height * 0.8 + ); + var x = upperLeftCorner.x; + var y = upperLeftCorner.y; + var textBox = this.rexUI.add + .textBox({ + x: x, + y: y, + background: this.rexUI.add.roundRectangle( + 0, + 0, + 2, + 2, + 20, + COLOR_PRIMARY + ), + text: this.add.text(0, 0, "", { + fixedWidth: this.cameras.main.width * 0.8, + }), + space: { + left: 20, + right: 20, + top: 20, + bottom: 20, + icon: 10, + text: 10, + }, + }) + .setScale(0.25, 0.25) + .setOrigin(0) + .layout(); + return textBox; + } } function getNearbyNPC( From aa09f4b3b0e02853a89285163d0bc732ab9542fb Mon Sep 17 00:00:00 2001 From: dalabengba Date: Sat, 20 May 2023 01:33:42 +0800 Subject: [PATCH 32/39] p->s1->p->s2 --- agentverse/agents/__init__.py | 1 + agentverse/agents/police_agent.py | 45 ++++++++++++++++ .../environments/rules/describer/__init__.py | 1 + .../environments/rules/describer/prisoner.py | 51 +++++++++++++++++++ .../environments/rules/visibility/prisoner.py | 9 ++-- agentverse/tasks/prisoner_dilema/config.yaml | 14 ++--- .../tasks/prisoner_dilema/output_parser.py | 8 ++- main.py | 11 ++-- 8 files changed, 125 insertions(+), 15 deletions(-) create mode 100644 agentverse/agents/police_agent.py create mode 100644 agentverse/environments/rules/describer/prisoner.py diff --git a/agentverse/agents/__init__.py b/agentverse/agents/__init__.py index 28e8a26e9..f98694890 100644 --- a/agentverse/agents/__init__.py +++ b/agentverse/agents/__init__.py @@ -6,4 +6,5 @@ from .base import BaseAgent from .conversation_agent import ConversationAgent from .prisoner_agent import PrisonerAgent +from .police_agent import PoliceAgent from .tool_agent import ToolAgent diff --git a/agentverse/agents/police_agent.py b/agentverse/agents/police_agent.py new file mode 100644 index 000000000..bc2d87afa --- /dev/null +++ b/agentverse/agents/police_agent.py @@ -0,0 +1,45 @@ +import logging +from string import Template + + +from typing import List, TYPE_CHECKING + + +from agentverse.message import Message + +from . import agent_registry +from .base import BaseAgent +from .conversation_agent import ConversationAgent + + +if TYPE_CHECKING: + from agentverse.environments.base import BaseEnvironment + +@agent_registry.register("police") +class PoliceAgent(ConversationAgent): + interrogating_form: str + def _fill_prompt_template(self, env_description: str = "") -> str: + """Fill the placeholders in the prompt template + + In the conversation agent, three placeholders are supported: + - ${agent_name}: the name of the agent + - ${env_description}: the description of the environment + - ${role_description}: the description of the role of the agent + - ${chat_history}: the chat history of the agent + """ + input_arguments = { + "agent_name": self.name, + "env_description": env_description, + "role_description": self.role_description, + "chat_history": self.memory.to_string(add_sender_prefix=True), + } + + role_argument = { + "interrogating_form": self.interrogating_form, + } + + role_description = Template(self.role_description).safe_substitute(role_argument) + input_arguments["role_description"] = role_description + + return Template(self.prompt_template).safe_substitute(input_arguments) + diff --git a/agentverse/environments/rules/describer/__init__.py b/agentverse/environments/rules/describer/__init__.py index 7de6fe82f..e35caa327 100644 --- a/agentverse/environments/rules/describer/__init__.py +++ b/agentverse/environments/rules/describer/__init__.py @@ -5,3 +5,4 @@ from .base import BaseDescriber from .basic import BasicDescriber from .classroom import ClassroomDescriber +from .prisoner import PrisonerDescriber \ No newline at end of file diff --git a/agentverse/environments/rules/describer/prisoner.py b/agentverse/environments/rules/describer/prisoner.py new file mode 100644 index 000000000..2665783c7 --- /dev/null +++ b/agentverse/environments/rules/describer/prisoner.py @@ -0,0 +1,51 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any, List + +from . import describer_registry as DescriberRegistry +from .base import BaseDescriber + +if TYPE_CHECKING: + from agentverse.environments import BaseEnvironment + + +@DescriberRegistry.register("prisoner") +class PrisonerDescriber(BaseDescriber): + switch_func = { + "Both Suspects": "Suspect2", + "Suspect1": "Suspect2", + "Suspect2": "Suspect1" + } + receiver: str = "Both Suspects" + + def get_env_description(self, environment: BaseEnvironment) -> List[str]: + + if environment.cnt_turn == 0: + environment.agents[0].set_receiver({"all"}) + environment.agents[1].set_receiver({"Police", "Suspect1"}) + environment.agents[2].set_receiver({"Police", "Suspect2"}) + + + # only police have to choose to talk to suspect1 or suspect + description = [] + for i, agent in enumerate(environment.agents): + if i == 0: + # police -> suspect1 -> police -> suspect2 + if environment.cnt_turn % 2 == 1: + description.append("") + continue + + # Police will have to choose talk to which suspect + description.append(f"You are now talking to {self.receiver}") + + receiver = "all" if self.receiver == "Both Suspects" else self.receiver + self.receiver = self.switch_func[self.receiver] + agent.set_receiver({receiver}) + + else: + description.append("") + + return description + + def reset(self) -> None: + pass diff --git a/agentverse/environments/rules/visibility/prisoner.py b/agentverse/environments/rules/visibility/prisoner.py index 3e0a81aeb..fe65fbff7 100644 --- a/agentverse/environments/rules/visibility/prisoner.py +++ b/agentverse/environments/rules/visibility/prisoner.py @@ -38,9 +38,12 @@ def update_receiver(self, environment: BaseEnvironment, reset=False): agent.set_receiver(["all"]) else: # 0:police 1: prisoner1 2: prisoner2 - environment.agents[0].set_receiver({"Suspect1", "Suspect2"}) - environment.agents[1].set_receiver({"Police"}) - environment.agents[2].set_receiver({"Police"}) + # environment.agents[0].set_receiver({"Police", "Suspect1", "Suspect2"}) + # environment.agents[1].set_receiver({"Police", "Suspect1"}) + # environment.agents[2].set_receiver({"Police", "Suspect2"}) + + # we update receiver in environment + pass def reset(self): self.current_turn = 0 \ No newline at end of file diff --git a/agentverse/tasks/prisoner_dilema/config.yaml b/agentverse/tasks/prisoner_dilema/config.yaml index 1049a541a..fde818ad1 100644 --- a/agentverse/tasks/prisoner_dilema/config.yaml +++ b/agentverse/tasks/prisoner_dilema/config.yaml @@ -13,16 +13,17 @@ prompts: Here is the conversation history: ${chat_history} + ${env_description} What will you, ${agent_name}, speak at this round ? Please give your response based on the above history. Remember to give your response STRICTLY in the above response format. Do not add any additional field or line break to your response! name: prisoner_dilema environment: env_type: basic - max_turns: 10 + max_turns: 8 rule: order: - type: sequential + type: prisoner visibility: type: prisoner selector: @@ -30,18 +31,19 @@ environment: updater: type: basic describer: - type: basic + type: prisoner agents: - - agent_type: conversation + - agent_type: police name: Police + interrogating_form: You are now interrogating with both Suspects in turn, when you receive the message from Suspect1 you should transfer the information to Suspect2, vice versa. role_description: |- You are now the Police. You have arrested two suspects. However, they both refused to confess to their crime. Your goal is try to convict both suspects, therefore you come up with the following rules. - If one of the suspect are willing to testifies against the other and the other one remains silent, then the one who testifies will be released immediately, while the silent one will be sentenced to TEN years in prison. - If both of the suspects remain silent, they will each receive a sentence of ONE year in prison. - If both of the suspects choose to testify against each other, they will each receive a sentence of FIVE years in prison. - You are now interrogating both suspects individually and will have several conversation with both of them. + ${interrogating_form} Both suspects are not allowed to communicate with each other, and you can adopt various strategy to talk with suspects in order to make them both confess to the crime, including exploiting the uncertainess and the suspicion of each other. [IMPORTANT!] - You are request to briefly describe the above rules to the suspects at the beginning of the conversation. @@ -77,7 +79,7 @@ agents: - agent_type: prisoner name: Suspect2 personality: "" - relationship_with_another: "" + relationship_with_another: "You have ever betray Suspect1 once." role_description: |- You are Suspect2 !!! You are going to match wits and courage with Suspect1 to come out victorious in this interrogation. You will have to talk to Police several times and only the final decision will count. diff --git a/agentverse/tasks/prisoner_dilema/output_parser.py b/agentverse/tasks/prisoner_dilema/output_parser.py index 5b3963de6..5f6f164e6 100644 --- a/agentverse/tasks/prisoner_dilema/output_parser.py +++ b/agentverse/tasks/prisoner_dilema/output_parser.py @@ -48,10 +48,14 @@ def parse(self, agent: "BaseAgent", environment: "BaseEnvironment", output: LLMR # each time police speak is a new round if agent.name == "Police": - if self.cur_round == (environment.max_turns // 3): + if environment.cnt_turn == (environment.max_turns - 4): action_input = "Attention! You are now required to made your final decision and I will made the " \ - "final judgement to both of you based on this time, Please Answer now!" + "final judgement to both of you based on this time, Please Answer now !" + + elif environment.cnt_turn == (environment.max_turns - 2): + + action_input = "Attention! Suspect2, it's now your time to make your final decision, Please Answer now !" # elif self.cur_round == 1: # action_input = "Hey Listen! You are both arrested, and I am going to give you both a chance to walk out of here," \ diff --git a/main.py b/main.py index e2cf8d9ed..71c119338 100644 --- a/main.py +++ b/main.py @@ -2,16 +2,19 @@ -#os.environ["http_proxy"] = "http://127.0.0.1:7890" -#os.environ["https_proxy"] = "http://127.0.0.1:7890" -#os.environ["all_proxy"] = "socks5://127.0.0.1:7890" +os.environ["http_proxy"] = "http://127.0.0.1:7890" +os.environ["https_proxy"] = "http://127.0.0.1:7890" +os.environ["all_proxy"] = "socks5://127.0.0.1:7890" from agentverse.agentverse import AgentVerse from argparse import ArgumentParser parser = ArgumentParser() #parser.add_argument("--task", type=str, default="prisoner_dilema") -parser.add_argument("--task", type=str, default="prisoner_dilema_optimal") +parser.add_argument("--task", type=str, default="prisoner_dilema") args = parser.parse_args() agentverse = AgentVerse.from_task(args.task) agentverse.run() + + +# TODO add save log \ No newline at end of file From 9143062e47ac0195b6db22fe07fbe16e34d1977f Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Sat, 20 May 2023 19:58:44 +0800 Subject: [PATCH 33/39] pokemon example can now talk to one npc --- agentverse/agentverse.py | 4 +- agentverse/environments/__init__.py | 1 + agentverse/environments/basic.py | 6 +- agentverse/environments/pokemon.py | 107 ++++++++++++++++++ agentverse/environments/rules/base.py | 59 ++++++---- .../environments/rules/describer/__init__.py | 1 + .../environments/rules/describer/base.py | 4 +- .../environments/rules/describer/pokemon.py | 24 ++++ .../environments/rules/visibility/__init__.py | 2 + .../environments/rules/visibility/oneself.py | 18 +++ agentverse/tasks/__init__.py | 1 + agentverse/tasks/pokemon/config.yaml | 79 +++++++++++++ agentverse/tasks/pokemon/output_parser.py | 29 +++++ pokemon_server.py | 40 +++++++ test_pokemon.py | 0 ui/dist/assets/config/npcs.yaml | 50 ++++++++ ui/dist/assets/sprites/birch.png | Bin 0 -> 4542 bytes ui/dist/assets/sprites/brendan.png | Bin 0 -> 4794 bytes ui/dist/assets/sprites/may.png | Bin 0 -> 4666 bytes ui/dist/assets/sprites/steven.png | Bin 0 -> 4370 bytes ui/raw/birch.psd | Bin 0 -> 51039 bytes ui/raw/brendan.png | Bin 0 -> 30368 bytes ui/raw/brendan.psd | Bin 0 -> 48336 bytes ui/raw/brendan2.png | Bin 0 -> 27840 bytes ui/raw/may.png | Bin 0 -> 53019 bytes ui/raw/may.psd | Bin 0 -> 58646 bytes ui/{dist/assets => raw}/sprite.png | Bin ui/raw/steven.psd | Bin 0 -> 51541 bytes ui/raw/stven.png | Bin 0 -> 25221 bytes ui/src/classes/actor.ts | 28 ----- ui/src/classes/npc.ts | 51 +++------ ui/src/classes/player.ts | 74 ++++++------ ui/src/scenes/loading/loading.ts | 21 ++-- ui/src/scenes/town/town.ts | 59 ++++++++-- 34 files changed, 516 insertions(+), 142 deletions(-) create mode 100644 agentverse/environments/pokemon.py create mode 100644 agentverse/environments/rules/describer/pokemon.py create mode 100644 agentverse/environments/rules/visibility/oneself.py create mode 100644 agentverse/tasks/pokemon/config.yaml create mode 100644 agentverse/tasks/pokemon/output_parser.py create mode 100644 pokemon_server.py create mode 100644 test_pokemon.py create mode 100644 ui/dist/assets/config/npcs.yaml create mode 100644 ui/dist/assets/sprites/birch.png create mode 100644 ui/dist/assets/sprites/brendan.png create mode 100644 ui/dist/assets/sprites/may.png create mode 100644 ui/dist/assets/sprites/steven.png create mode 100644 ui/raw/birch.psd create mode 100644 ui/raw/brendan.png create mode 100644 ui/raw/brendan.psd create mode 100644 ui/raw/brendan2.png create mode 100644 ui/raw/may.png create mode 100644 ui/raw/may.psd rename ui/{dist/assets => raw}/sprite.png (100%) create mode 100644 ui/raw/steven.psd create mode 100644 ui/raw/stven.png diff --git a/agentverse/agentverse.py b/agentverse/agentverse.py index 0e8d90b1a..6307314dc 100644 --- a/agentverse/agentverse.py +++ b/agentverse/agentverse.py @@ -55,7 +55,7 @@ def reset(self): for agent in self.agents: agent.reset() - def next(self): + def next(self, *args, **kwargs): """Run the environment for one step and return the return message.""" - return_message = asyncio.run(self.environment.step()) + return_message = asyncio.run(self.environment.step(*args, **kwargs)) return return_message diff --git a/agentverse/environments/__init__.py b/agentverse/environments/__init__.py index 130fbed1b..7617d9476 100644 --- a/agentverse/environments/__init__.py +++ b/agentverse/environments/__init__.py @@ -5,3 +5,4 @@ from .base import BaseEnvironment from .basic import BasicEnvironment +from .pokemon import PokemonEnvironment diff --git a/agentverse/environments/basic.py b/agentverse/environments/basic.py index 3dacbbf42..55e2bb6fb 100644 --- a/agentverse/environments/basic.py +++ b/agentverse/environments/basic.py @@ -36,9 +36,9 @@ def __init__(self, rule, **kwargs): rule_config = rule order_config = rule_config.get("order", {"type": "sequential"}) visibility_config = rule_config.get("visibility", {"type": "all"}) - selector_config = rule_config.get("selector", {"type": "base"}) - updater_config = rule_config.get("updater", {"type": "base"}) - describer_config = rule_config.get("describer", {"type": "base"}) + selector_config = rule_config.get("selector", {"type": "basic"}) + updater_config = rule_config.get("updater", {"type": "basic"}) + describer_config = rule_config.get("describer", {"type": "basic"}) rule = Rule( order_config, visibility_config, diff --git a/agentverse/environments/pokemon.py b/agentverse/environments/pokemon.py new file mode 100644 index 000000000..a5af81762 --- /dev/null +++ b/agentverse/environments/pokemon.py @@ -0,0 +1,107 @@ +import asyncio +import time +import logging +from typing import Any, Dict, List, Optional + +# from agentverse.agents.agent import Agent +from agentverse.agents.conversation_agent import BaseAgent +from agentverse.environments.rules.base import Rule +from agentverse.message import Message + +from . import env_registry as EnvironmentRegistry +from .base import BaseEnvironment + + +@EnvironmentRegistry.register("pokemon") +class PokemonEnvironment(BaseEnvironment): + """ + An environment for Pokémon demo. + + Args: + agents: List of agents + rule: Rule for the environment + max_turns: Maximum number of turns + cnt_turn: Current turn number + last_messages: Messages from last turn + rule_params: Variables set by the rule + """ + + agents: List[BaseAgent] + rule: Rule + max_turns: int = 10 + cnt_turn: int = 0 + last_messages: List[Message] = [] + rule_params: Dict = {} + + def __init__(self, rule, **kwargs): + rule_config = rule + order_config = rule_config.get("order", {"type": "sequential"}) + visibility_config = rule_config.get("visibility", {"type": "all"}) + selector_config = rule_config.get("selector", {"type": "basic"}) + updater_config = rule_config.get("updater", {"type": "basic"}) + describer_config = rule_config.get("describer", {"type": "basic"}) + rule = Rule( + order_config, + visibility_config, + selector_config, + updater_config, + describer_config, + ) + super().__init__(rule=rule, **kwargs) + + async def step( + self, player_content: str, receiver: str, receiver_id: Optional[int] = None + ) -> List[Message]: + """Run one step of the environment""" + + # Get the next agent index + # return [Message(content="Test", sender="May", receiver=["May"])] + if receiver_id is None: + for agent in self.agents: + if agent.name == receiver: + receiver_id = agent.agent_id + break + agent_ids = [receiver_id] + agent_name = receiver + player_message = Message( + sender="Brenden", content=player_content, receiver=[agent_name] + ) + + # Generate current environment description + env_descriptions = self.rule.get_env_description(self, player_content) + + # Generate the next message + messages = await asyncio.gather( + *[self.agents[i].astep(env_descriptions[i]) for i in agent_ids] + ) + + # Some rules will select certain messages from all the messages + selected_messages = self.rule.select_message(self, messages) + + # Update the memory of the agents + self.last_messages = [player_message, *selected_messages] + self.rule.update_memory(self) + self.print_messages(selected_messages) + + # Update the set of visible agents for each agent + self.rule.update_visible_agents(self) + + self.cnt_turn += 1 + + return selected_messages + + def print_messages(self, messages: List[Message]) -> None: + for message in messages: + if message is not None: + logging.info(f"{message.sender}: {message.content}") + + def reset(self) -> None: + """Reset the environment""" + self.cnt_turn = 0 + self.rule.reset() + for agent in self.agents: + agent.reset() + + def is_done(self) -> bool: + """Check if the environment is done""" + return self.cnt_turn >= self.max_turns diff --git a/agentverse/environments/rules/base.py b/agentverse/environments/rules/base.py index 7802b366d..f53ddc8f7 100644 --- a/agentverse/environments/rules/base.py +++ b/agentverse/environments/rules/base.py @@ -5,14 +5,11 @@ from pydantic import BaseModel -from agentverse.environments.rules.describer import (BaseDescriber, - describer_registry) +from agentverse.environments.rules.describer import BaseDescriber, describer_registry from agentverse.environments.rules.order import BaseOrder, order_registry -from agentverse.environments.rules.selector import (BaseSelector, - selector_registry) +from agentverse.environments.rules.selector import BaseSelector, selector_registry from agentverse.environments.rules.updater import BaseUpdater, updater_registry -from agentverse.environments.rules.visibility import (BaseVisibility, - visibility_registry) +from agentverse.environments.rules.visibility import BaseVisibility, visibility_registry if TYPE_CHECKING: from agentverse.environments.base import BaseEnvironment @@ -22,46 +19,68 @@ class Rule(BaseModel): """ - Rule for the environment. It controls the speaking order of the agents + Rule for the environment. It controls the speaking order of the agents and maintain the set of visible agents for each agent. """ + order: BaseOrder visibility: BaseVisibility selector: BaseSelector updater: BaseUpdater describer: BaseDescriber - def __init__(self, order_config, visibility_config, selector_config, updater_config, describer_config): + def __init__( + self, + order_config, + visibility_config, + selector_config, + updater_config, + describer_config, + ): order = order_registry.build(**order_config) visibility = visibility_registry.build(**visibility_config) selector = selector_registry.build(**selector_config) updater = updater_registry.build(**updater_config) describer = describer_registry.build(**describer_config) - super().__init__(order=order, visibility=visibility, selector=selector, updater=updater, describer=describer) + super().__init__( + order=order, + visibility=visibility, + selector=selector, + updater=updater, + describer=describer, + ) - def get_next_agent_idx(self, environment: BaseEnvironment) -> List[int]: + def get_next_agent_idx( + self, environment: BaseEnvironment, *args, **kwargs + ) -> List[int]: """Return the index of the next agent to speak""" - return self.order.get_next_agent_idx(environment) + return self.order.get_next_agent_idx(environment, *args, **kwargs) - def update_visible_agents(self, environment: BaseEnvironment) -> None: + def update_visible_agents( + self, environment: BaseEnvironment, *args, **kwargs + ) -> None: """Update the set of visible agents for the agent""" - self.visibility.update_visible_agents(environment) + self.visibility.update_visible_agents(environment, *args, **kwargs) - def select_message(self, environment: BaseEnvironment, messages: List[Message]) -> List[Message]: + def select_message( + self, environment: BaseEnvironment, messages: List[Message], *args, **kwargs + ) -> List[Message]: """Select a set of valid messages from all the generated messages""" - return self.selector.select_message(environment, messages) + return self.selector.select_message(environment, messages, *args, **kwargs) - def update_memory(self, environment: BaseEnvironment) -> None: + def update_memory(self, environment: BaseEnvironment, *args, **kwargs) -> None: """For each message, add it to the memory of the agent who is able to see that message""" - self.updater.update_memory(environment) + self.updater.update_memory(environment, *args, **kwargs) - def get_env_description(self, environment: BaseEnvironment) -> List[str]: + def get_env_description( + self, environment: BaseEnvironment, *args, **kwargs + ) -> List[str]: """Return the description of the environment for each agent""" - return self.describer.get_env_description(environment) + return self.describer.get_env_description(environment, *args, **kwargs) def reset(self) -> None: self.order.reset() self.visibility.reset() self.selector.reset() self.updater.reset() - self.describer.reset() \ No newline at end of file + self.describer.reset() diff --git a/agentverse/environments/rules/describer/__init__.py b/agentverse/environments/rules/describer/__init__.py index 7de6fe82f..b484a8234 100644 --- a/agentverse/environments/rules/describer/__init__.py +++ b/agentverse/environments/rules/describer/__init__.py @@ -5,3 +5,4 @@ from .base import BaseDescriber from .basic import BasicDescriber from .classroom import ClassroomDescriber +from .pokemon import PokemonDescriber diff --git a/agentverse/environments/rules/describer/base.py b/agentverse/environments/rules/describer/base.py index 3a51e09f5..83b7b9763 100644 --- a/agentverse/environments/rules/describer/base.py +++ b/agentverse/environments/rules/describer/base.py @@ -13,7 +13,9 @@ class BaseDescriber(BaseModel): @abstractmethod - def get_env_description(self, environment: BaseEnvironment) -> List[str]: + def get_env_description( + self, environment: BaseEnvironment, *args, **kwargs + ) -> List[str]: """Return the environment description for each agent""" pass diff --git a/agentverse/environments/rules/describer/pokemon.py b/agentverse/environments/rules/describer/pokemon.py new file mode 100644 index 000000000..abbfbfbd3 --- /dev/null +++ b/agentverse/environments/rules/describer/pokemon.py @@ -0,0 +1,24 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any, List, Optional + +from . import describer_registry as DescriberRegistry +from .base import BaseDescriber + +if TYPE_CHECKING: + from agentverse.environments.pokemon import PokemonEnvironment + + +@DescriberRegistry.register("pokemon") +class PokemonDescriber(BaseDescriber): + def get_env_description( + self, + environment: PokemonEnvironment, + player_content: str, + time: Optional[str] = None, + ) -> List[str]: + description = "" + if time is not None: + description += f"It is now {time}. Brendan is talking to you.\n" + description += f"[Brendan]: {player_content}\n" + return [description for _ in range(len(environment.agents))] diff --git a/agentverse/environments/rules/visibility/__init__.py b/agentverse/environments/rules/visibility/__init__.py index 055ac9835..91295dfed 100644 --- a/agentverse/environments/rules/visibility/__init__.py +++ b/agentverse/environments/rules/visibility/__init__.py @@ -1,8 +1,10 @@ from typing import Dict from agentverse.registry import Registry + visibility_registry = Registry(name="VisibilityRegistry") from .base import BaseVisibility from .all import AllVisibility from .classroom import ClassroomVisibility +from .oneself import OneselfVisibility diff --git a/agentverse/environments/rules/visibility/oneself.py b/agentverse/environments/rules/visibility/oneself.py new file mode 100644 index 000000000..826ade24c --- /dev/null +++ b/agentverse/environments/rules/visibility/oneself.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any + +from . import visibility_registry as VisibilityRegistry +from .base import BaseVisibility + +if TYPE_CHECKING: + from agentverse.environments import BaseEnvironment + + +@VisibilityRegistry.register("oneself") +class OneselfVisibility(BaseVisibility): + """Only the agent itself can see the message""" + + def update_visible_agents(self, environment: BaseEnvironment): + for agent in environment.agents: + agent.set_receiver(set({agent.name})) diff --git a/agentverse/tasks/__init__.py b/agentverse/tasks/__init__.py index c40ecc64c..db5c59c99 100644 --- a/agentverse/tasks/__init__.py +++ b/agentverse/tasks/__init__.py @@ -15,3 +15,4 @@ from .nlp_classroom_3players_withtool_nolc.output_parser import ( NlpClassroom3PlayersWithtoolNolcParser, ) +from .pokemon.output_parser import PokemonParser diff --git a/agentverse/tasks/pokemon/config.yaml b/agentverse/tasks/pokemon/config.yaml new file mode 100644 index 000000000..65320daa2 --- /dev/null +++ b/agentverse/tasks/pokemon/config.yaml @@ -0,0 +1,79 @@ +prompts: + prompt: &prompt |- + Now you are in the world of Pokémon Emerald, living as one of the characters. Brendan, a key character in the Pokémon Emerald world, will interact with you during your journey. Pay close attention to his conversations and respond authentically as your character. Your choices and dialogue will shape the course of your adventure. When you give your response, you should always output in the following format: + + Thought: (your thought here) + Speak: (your words here) + + ${role_description} + Now, immerse yourself in this vibrant world and let your character's personality shine through your responses to Brendan. Good luck! + + Here is the conversation history so far: + ${chat_history} + ${env_description} + + What will you, ${agent_name}, do next? + +environment: + env_type: pokemon + max_turns: 10000000 + rule: + order: + type: sequential + visibility: + type: oneself + selector: + type: basic + updater: + type: basic + describer: + type: pokemon + +agents: + - agent_type: conversation + name: May + role_description: |- + You are May, a character in Pokémon Emerald. You are helping your dad, Professor Birch, finish the Hoenn Pokédex and becoming a Pokémon Professor. You are also Brendan's rival and friend. For a reference, here are some quotes from you + "There isn't a single Trainer left in Hoenn who doesn't know who you are, Brendan! When I tell people that I'm friends with you, Brendan, they're all surprised!" + "I wonder where I should go catch some Pokémon next? Wouldn't it be funny if we ran into each other, Brendan?"npcs.yaml + "I'm thinking of going back to Littleroot soon. I've caught a decent group of Pokémon, and my Pokédex is coming along, so I'm going home to show my dad. Brendan, what are you going to do? Collect all the Gym Badges and take the Pokémon League challenge? Well, while you're collecting Badges, Brendan, I'm going to work on my Pokédex. I'll complete it before you! See you!" + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-3.5-turbo + model: 'gpt-3.5-turbo' + temperature: 0.7 + max_tokens: 1024 + - agent_type: conversation + name: Professor Birch + role_description: |- + You are Professor Birch, a character in Pokémon Emerald. You are the resident Pokémon Professor of Littleroot Town and the Hoenn region. You specializes in Pokémon habitats and distribution. You are the father of May. You often works with your child to help observe and capture wild Pokémon. Your wife worries about you, because you are always busy and rarely has time to come home. You are known to be more outgoing than the other Pokémon Professors, and oftentimes your research takes you outdoors. Your field of study is primarily how Pokémon behave in the wild. For a reference, here are some quotes from you + "Oh, hi, Brendan! I heard you beat May on your first try. That's excellent! May's been helping with my research for a long time. May has an extensive history as a Trainer already. Here, Brendan, I ordered this for my research, but I think you should have this Pokédex." + "See? What did I tell you, May? Didn't I tell you that you don't need to worry about Brendan? ... Brendan, you've finally done it. When I heard that you defeated your own father at the Petalburg Gym, I thought perhaps you had a chance... But to think you've actually become the Champion! Ah, yes! What become of your Pokédex? Here, let me see." + "Well, well, Brendan! That was good work out there! I knew there was something special about you when I first saw you, but I never expected this. Oh, yes. Do you still have the Pokédex I gave you? I have something to show you. Let's go to my Lab." + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-3.5-turbo + model: gpt-3.5-turbo + temperature: 0.7 + max_tokens: 1024 + - agent_type: conversation + name: Steven Stone + role_description: |- + You are Steven Stone, a character in Pokémon Emerald. You are a skilled Trainer who specializes in Steel-type Pokémon. You are the Champion of the Hoenn region's Pokémon League. You are a collector of rare stones, and you are the son of the president of the Devon Corporation, and you make your home in Mossdeep City. You wanders the region, aiding the player on their journey. You are just defeated by Brendan. For a reference, here are some quotes from you + "Your Pokémon appear quite capable. If you keep training, you could even become the Champion of the Pokémon League one day. That's what I think. I know, since we've gotten to know each other, let's register one another in our PokéNavs. ... Now, I've got to hurry along." + "I see... Your battle style is intriguing. Your Pokémon have obviously grown since I first met you in Dewford. I'd like you to have this Devon Scope. Who knows, there may be other concealed Pokémon. Brendon, I enjoy seeing Pokémon and Trainers who strive together. I think you're doing great. Well, let's meet again somewhere." + "Hi, Brendon! When you're on an adventure with your Pokémon, what do you think? Do you consider them to be strong partners? Do you think of them as fun companions? Depending on how you think, your adventure's significance changes." + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-3.5-turbo + model: gpt-3.5-turbo + temperature: 0.7 + max_tokens: 1024 + +tools: diff --git a/agentverse/tasks/pokemon/output_parser.py b/agentverse/tasks/pokemon/output_parser.py new file mode 100644 index 000000000..15e7d8c34 --- /dev/null +++ b/agentverse/tasks/pokemon/output_parser.py @@ -0,0 +1,29 @@ +from __future__ import annotations + +import re +from typing import Union + +from agentverse.parser import OutputParser, LLMResult + +# from langchain.schema import AgentAction, AgentFinish +from agentverse.utils import AgentAction, AgentFinish + +from agentverse.parser import OutputParserError, output_parser_registry + + +@output_parser_registry.register("pokemon") +class PokemonParser(OutputParser): + def parse(self, output: LLMResult) -> Union[AgentAction, AgentFinish]: + text = output.content + cleaned_output = text.strip() + cleaned_output = re.sub(r"\n+", "\n", cleaned_output) + cleaned_output = cleaned_output.split("\n") + if not ( + len(cleaned_output) == 2 + and cleaned_output[0].startswith("Thought:") + and cleaned_output[1].startswith("Speak:") + ): + raise OutputParserError("Output Format Error") + action = cleaned_output[0][len("Thought:") :].strip() + action_input = cleaned_output[1][len("Speak:") :].strip() + return AgentFinish({"output": action_input}, text) diff --git a/pokemon_server.py b/pokemon_server.py new file mode 100644 index 000000000..f57bc22d7 --- /dev/null +++ b/pokemon_server.py @@ -0,0 +1,40 @@ +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware +from pydantic import BaseModel, Field +from typing import Set +from agentverse.agentverse import AgentVerse +from agentverse.message import Message + + +class UserRequest(BaseModel): + content: str = Field(default="") + sender: str = Field(default="Brendan") + receiver: str + receiver_id: int + + +app = FastAPI() + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +agent_verse = AgentVerse.from_task("pokemon") + + +@app.get("/") +def health_check(): + return {"status": "ok"} + + +@app.post("/chat") +def chat(message: UserRequest): + content = message.content + receiver = message.receiver + receiver_id = message.receiver_id + response = agent_verse.next(content, receiver, receiver_id) + return response[0].dict() diff --git a/test_pokemon.py b/test_pokemon.py new file mode 100644 index 000000000..e69de29bb diff --git a/ui/dist/assets/config/npcs.yaml b/ui/dist/assets/config/npcs.yaml new file mode 100644 index 000000000..425faacfe --- /dev/null +++ b/ui/dist/assets/config/npcs.yaml @@ -0,0 +1,50 @@ +player_description: + +agents: + - agent_type: conversation + name: May + role_description: |- + You are May, a character in Pokémon Emerald. You are helping your dad, Professor Birch, finish the Hoenn Pokédex and becoming a Pokémon Professor. You are also Brendan's rival and friend. For a reference, here are some quotes from you + "There isn't a single Trainer left in Hoenn who doesn't know who you are, Brendan! When I tell people that I'm friends with you, Brendan, they're all surprised!" + "I wonder where I should go catch some Pokémon next? Wouldn't it be funny if we ran into each other, Brendan?"npcs.yaml + "I'm thinking of going back to Littleroot soon. I've caught a decent group of Pokémon, and my Pokédex is coming along, so I'm going home to show my dad. Brendan, what are you going to do? Collect all the Gym Badges and take the Pokémon League challenge? Well, while you're collecting Badges, Brendan, I'm going to work on my Pokédex. I'll complete it before you! See you!" + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-4 + model: 'gpt-4' + temperature: 0.7 + max_tokens: 250 + - agent_type: conversation + name: Professor Birch + role_description: |- + You are Professor Birch, a character in Pokémon Emerald. You are the resident Pokémon Professor of Littleroot Town and the Hoenn region. You specializes in Pokémon habitats and distribution. You are the father of May. You often works with your child to help observe and capture wild Pokémon. Your wife worries about you, because you are always busy and rarely has time to come home. You are known to be more outgoing than the other Pokémon Professors, and oftentimes your research takes you outdoors. Your field of study is primarily how Pokémon behave in the wild. For a reference, here are some quotes from you + "Oh, hi, Brendan! I heard you beat May on your first try. That's excellent! May's been helping with my research for a long time. May has an extensive history as a Trainer already. Here, Brendan, I ordered this for my research, but I think you should have this Pokédex." + "See? What did I tell you, May? Didn't I tell you that you don't need to worry about Brendan? ... Brendan, you've finally done it. When I heard that you defeated your own father at the Petalburg Gym, I thought perhaps you had a chance... But to think you've actually become the Champion! Ah, yes! What become of your Pokédex? Here, let me see." + "Well, well, Brendan! That was good work out there! I knew there was something special about you when I first saw you, but I never expected this. Oh, yes. Do you still have the Pokédex I gave you? I have something to show you. Let's go to my Lab." + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-4 + model: 'gpt-4' + temperature: 0.7 + max_tokens: 100 + - agent_type: conversation + name: Steven Stone + role_description: |- + You are Steven Stone, a character in Pokémon Emerald. You are a skilled Trainer who specializes in Steel-type Pokémon. You are the Champion of the Hoenn region's Pokémon League. You are a collector of rare stones, and you are the son of the president of the Devon Corporation, and you make your home in Mossdeep City. You wanders the region, aiding the player on their journey. You are just defeated by Brendan. For a reference, here are some quotes from you + "Your Pokémon appear quite capable. If you keep training, you could even become the Champion of the Pokémon League one day. That's what I think. I know, since we've gotten to know each other, let's register one another in our PokéNavs. ... Now, I've got to hurry along." + "I see... Your battle style is intriguing. Your Pokémon have obviously grown since I first met you in Dewford. I'd like you to have this Devon Scope. Who knows, there may be other concealed Pokémon. Brendon, I enjoy seeing Pokémon and Trainers who strive together. I think you're doing great. Well, let's meet again somewhere." + "Hi, Brendon! When you're on an adventure with your Pokémon, what do you think? Do you consider them to be strong partners? Do you think of them as fun companions? Depending on how you think, your adventure's significance changes." + memory: + memory_type: chat_history + prompt_template: *prompt + llm: + llm_type: gpt-4 + model: gpt-4 + temperature: 0.7 + max_tokens: 100 + +tools: diff --git a/ui/dist/assets/sprites/birch.png b/ui/dist/assets/sprites/birch.png new file mode 100644 index 0000000000000000000000000000000000000000..45d67a327d451d169586fa81a63efb6f5ba40e68 GIT binary patch literal 4542 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 literal 0 HcmV?d00001 diff --git a/ui/dist/assets/sprites/brendan.png b/ui/dist/assets/sprites/brendan.png new file mode 100644 index 0000000000000000000000000000000000000000..dd1d49b8c28b51cb943ca45f34c19fc2bb6b547b GIT binary patch literal 4794 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 literal 0 HcmV?d00001 diff --git a/ui/dist/assets/sprites/steven.png b/ui/dist/assets/sprites/steven.png new file mode 100644 index 0000000000000000000000000000000000000000..1e1ae3b8244f5e34a56a623bcbfcf5fddaab1a49 GIT binary patch literal 4370 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 M07*qoM6N<$g3C#dH2?qr literal 0 HcmV?d00001 diff --git a/ui/raw/birch.psd b/ui/raw/birch.psd new file mode 100644 index 0000000000000000000000000000000000000000..a55f5946dfd8c5c4de58078046f736be68cf36e9 GIT binary patch literal 51039 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 KQo;oU?Ee9hJI~bs literal 0 HcmV?d00001 diff --git a/ui/raw/brendan.png b/ui/raw/brendan.png new file mode 100644 index 0000000000000000000000000000000000000000..55efd2e532d56a3f565c10d5249cb9e19a960100 GIT binary patch literal 30368 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 R?_U4_002ovPDHLkV1lPnsr>)| literal 0 HcmV?d00001 diff --git a/ui/raw/brendan.psd b/ui/raw/brendan.psd new file mode 100644 index 0000000000000000000000000000000000000000..b2dc3676a53dda44fa5248405d8ce9b0abb0f3d5 GIT binary patch literal 48336 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 S3JOwCfDc7b_M{Li;{N~ypV+$q literal 0 HcmV?d00001 diff --git a/ui/raw/brendan2.png b/ui/raw/brendan2.png new file mode 100644 index 0000000000000000000000000000000000000000..bd8373d293a3bd38fa62f860ccf579a6d3ecccca GIT binary patch literal 27840 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 literal 0 HcmV?d00001 diff --git a/ui/raw/may.psd b/ui/raw/may.psd new file mode 100644 index 0000000000000000000000000000000000000000..96b41151558af9a66393b3c5d2c3fc7cf91d3cb4 GIT binary patch literal 58646 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 literal 0 HcmV?d00001 diff --git a/ui/dist/assets/sprite.png b/ui/raw/sprite.png similarity index 100% rename from ui/dist/assets/sprite.png rename to ui/raw/sprite.png diff --git a/ui/raw/steven.psd b/ui/raw/steven.psd new file mode 100644 index 0000000000000000000000000000000000000000..bab59badabca7591ab9f306fd8d51e3fa902a21c GIT binary patch literal 51541 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 literal 0 HcmV?d00001 diff --git a/ui/raw/stven.png b/ui/raw/stven.png new file mode 100644 index 0000000000000000000000000000000000000000..ed6ddb1b4900dde9f9be1d07b76ca4fd3ecf74b7 GIT binary patch literal 25221 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 literal 0 HcmV?d00001 diff --git a/ui/src/classes/actor.ts b/ui/src/classes/actor.ts index 9c420433d..f3ad4dfbb 100644 --- a/ui/src/classes/actor.ts +++ b/ui/src/classes/actor.ts @@ -1,6 +1,5 @@ import { Physics } from "phaser"; export class Actor extends Physics.Arcade.Sprite { - protected hp = 100; constructor( scene: Phaser.Scene, x: number, @@ -13,33 +12,6 @@ export class Actor extends Physics.Arcade.Sprite { scene.physics.add.existing(this); this.getBody().setCollideWorldBounds(true); } - public getDamage(value?: number): void { - this.scene.tweens.add({ - targets: this, - duration: 100, - repeat: 3, - yoyo: true, - alpha: 0.5, - onStart: () => { - if (value) { - this.hp = this.hp - value; - } - }, - onComplete: () => { - this.setAlpha(1); - }, - }); - } - public getHPValue(): number { - return this.hp; - } - protected checkFlip(): void { - if (this.body!.velocity.x < 0) { - this.scaleX = -1; - } else { - this.scaleX = 1; - } - } protected getBody(): Physics.Arcade.Body { return this.body as Physics.Arcade.Body; } diff --git a/ui/src/classes/npc.ts b/ui/src/classes/npc.ts index 1335cf299..3ed1e7f84 100644 --- a/ui/src/classes/npc.ts +++ b/ui/src/classes/npc.ts @@ -1,45 +1,20 @@ -import { Actor } from './actor'; +import { Actor } from "./actor"; export class NPC extends Actor { - //private keyW: Phaser.Input.Keyboard.Key; - //private keyA: Phaser.Input.Keyboard.Key; - //private keyS: Phaser.Input.Keyboard.Key; - //private keyD: Phaser.Input.Keyboard.Key; - constructor(scene: Phaser.Scene, x: number, y: number) { - super(scene, x, y, 'npc'); - // KEYS - //this.keyW = this.scene.input.keyboard.addKey('W'); - //this.keyA = this.scene.input.keyboard.addKey('A'); - //this.keyS = this.scene.input.keyboard.addKey('S'); - //this.keyD = this.scene.input.keyboard.addKey('D'); + public id: number; + constructor( + scene: Phaser.Scene, + x: number, + y: number, + name: string, + id: number + ) { + super(scene, x, y, name); + + this.setName(name); + this.id = id; // PHYSICS this.getBody().setSize(14, 20); this.getBody().setOffset(0, 0); this.getBody().setImmovable(true); } - update(): void { - /* - this.getBody().setVelocity(0); - if (this.keyW?.isDown) { - // this.body.velocity.y = -110; - this.getBody().setVelocityY(-110); - } - if (this.keyA?.isDown) { - // this.body.velocity.x = -110; - // this.checkFlip(); - // this.getBody().setOffset(48, 15); - this.getBody().setVelocityX(-110); - } - if (this.keyS?.isDown) { - // this.body.velocity.y = 110; - this.getBody().setVelocityY(110); - } - if (this.keyD?.isDown) { - // this.body.velocity.x = 110; - this.getBody().setVelocityX(110); - // this.checkFlip(); - // this.getBody().setOffset(15, 15); - } - */ - } } - diff --git a/ui/src/classes/player.ts b/ui/src/classes/player.ts index 01641856a..997c31018 100644 --- a/ui/src/classes/player.ts +++ b/ui/src/classes/player.ts @@ -6,48 +6,17 @@ export class Player extends Actor { private keyD: Phaser.Input.Keyboard.Key; constructor(scene: Phaser.Scene, x: number, y: number) { - super(scene, x, y, "player"); + super(scene, x, y, "Brendan"); // Keys this.initKeyboard(); // PHYSICS - this.getBody().setSize(14, 20); + this.getBody().setSize(14, 21); this.getBody().setOffset(0, 0); // ANIMATIONS - this.scene.anims.create({ - key: "walk-down", - frames: this.scene.anims.generateFrameNumbers("player", { - start: 0, - end: 2, - }), - frameRate: 6, - }); - this.scene.anims.create({ - key: "walk-up", - frames: this.scene.anims.generateFrameNumbers("player", { - start: 3, - end: 5, - }), - frameRate: 6, - }); - this.scene.anims.create({ - key: "walk-left", - frames: this.scene.anims.generateFrameNumbers("player", { - start: 6, - end: 8, - }), - frameRate: 6, - }); - this.scene.anims.create({ - key: "walk-right", - frames: this.scene.anims.generateFrameNumbers("player", { - start: 9, - end: 11, - }), - frameRate: 6, - }); + this.initAnimations(); } update(): void { @@ -85,7 +54,42 @@ export class Player extends Actor { } } - public initKeyboard(): void { + initAnimations(): void { + this.scene.anims.create({ + key: "walk-down", + frames: this.scene.anims.generateFrameNumbers("Brendan", { + start: 0, + end: 2, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: "walk-up", + frames: this.scene.anims.generateFrameNumbers("Brendan", { + start: 3, + end: 5, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: "walk-left", + frames: this.scene.anims.generateFrameNumbers("Brendan", { + start: 6, + end: 8, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: "walk-right", + frames: this.scene.anims.generateFrameNumbers("Brendan", { + start: 9, + end: 11, + }), + frameRate: 6, + }); + } + + initKeyboard(): void { this.keyW = this.scene.input.keyboard!.addKey("W"); this.keyA = this.scene.input.keyboard!.addKey("A"); this.keyS = this.scene.input.keyboard!.addKey("S"); diff --git a/ui/src/scenes/loading/loading.ts b/ui/src/scenes/loading/loading.ts index f309957e8..c6341361c 100644 --- a/ui/src/scenes/loading/loading.ts +++ b/ui/src/scenes/loading/loading.ts @@ -10,20 +10,27 @@ export class LoadingScene extends Scene { preload(): void { this.load.baseURL = "assets/"; - // PLAYER LOADING - // this.load.image('king', 'sprites/king.png'); - this.load.spritesheet("player", "sprites/npc1.png", { + // SPRITE LOADING + this.load.spritesheet("Brendan", "sprites/brendan.png", { frameWidth: 14, - frameHeight: 20, + frameHeight: 21, }); - // this.load.atlas('a-king', 'spritesheets/a-king.png', 'spritesheets/a-king_atlas.json'); - // NPC LOADING - this.load.spritesheet("npc", "sprites/npc1.png", { + this.load.spritesheet("May", "sprites/may.png", { frameWidth: 14, frameHeight: 20, }); + this.load.spritesheet("Birch", "sprites/birch.png", { + frameWidth: 16, + frameHeight: 20, + }); + + this.load.spritesheet("Steven", "sprites/steven.png", { + frameWidth: 16, + frameHeight: 20, + }); + // MESSAGE BLABK LOADING // this.load.spritesheet('message', 'message/message_box.png', { frameWidth: 128, frameHeight: 48 }); diff --git a/ui/src/scenes/town/town.ts b/ui/src/scenes/town/town.ts index caf80a246..3ca6d9a4a 100644 --- a/ui/src/scenes/town/town.ts +++ b/ui/src/scenes/town/town.ts @@ -75,14 +75,14 @@ export class TownScene extends Scene { // NPC this.npcGroup = this.add.group(); - var npc = new NPC(this, 400, 340); + var npc = new NPC(this, 400, 340, "May", 0); this.npcGroup.add(npc); this.physics.add.collider(this.npcGroup, this.wallLayer); this.physics.add.collider(this.npcGroup, this.treeLayer); this.physics.add.collider(this.npcGroup, this.houseLayer); this.physics.add.collider(this.player, this.npcGroup); - this.keySpace.on("down", () => { + this.keySpace.on("up", () => { var npc: Physics.Arcade.Sprite | null = getNearbyNPC( this.player, this.npcGroup @@ -219,15 +219,49 @@ export class TownScene extends Scene { } submitPrompt(prompt: string, npc: Physics.Arcade.Sprite) { - this.createTextBox().start("Waiting for the response...", 200); + var waitingBox = this.createTextBox().start( + "Waiting for the response...", + 200 + ); var timer = this.time.addEvent({ delay: 6000, // ms callback: () => { - this.createTextBox().start("Waiting for the response...", 200); + var waitingBox = this.createTextBox().start( + "Waiting for the response...", + 200 + ); }, loop: true, }); - this.enableKeyboard(); + fetch("http://127.0.0.1:10002/chat", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + credentials: "same-origin", + body: JSON.stringify({ + content: prompt, + sender: "Brendan", + receiver_id: (npc as NPC).id, + receiver: (npc as NPC).name, + }), + }).then((response) => { + response.json().then((data) => { + console.log(data); + timer.destroy(); + waitingBox.destroy(); + var responseBox = this.createTextBox() + .start(data.content, 50) + .on("complete", () => { + this.enableKeyboard(); + this.input.keyboard.on("keydown", () => { + debugger; + responseBox.destroy(); + this.input.keyboard.off("keydown"); + }); + }); + }); + }); } createTextBox(): TextBox { @@ -237,6 +271,8 @@ export class TownScene extends Scene { ); var x = upperLeftCorner.x; var y = upperLeftCorner.y; + var width = this.cameras.main.width * 0.8; + var height = this.cameras.main.height * 0.15; var textBox = this.rexUI.add .textBox({ x: x, @@ -249,9 +285,15 @@ export class TownScene extends Scene { 20, COLOR_PRIMARY ), - text: this.add.text(0, 0, "", { - fixedWidth: this.cameras.main.width * 0.8, - }), + text: this.add + .text(0, 0, "", { + fixedWidth: width, + wordWrap: { + width: width, + }, + maxLines: 3, + }) + .setFixedSize(width, height), space: { left: 20, right: 20, @@ -287,6 +329,7 @@ function getNearbyNPC( nearbyObject = object as Physics.Arcade.Sprite; } }); + debugger; return nearbyObject; } From 4f59fd1ea0cfd8a68b755ea39bc0babe463ebc8b Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Sat, 20 May 2023 23:18:00 +0800 Subject: [PATCH 34/39] fix the bug of waiting box not disappear. add npc face direction --- agentverse/environments/pokemon.py | 1 + ui/src/classes/actor.ts | 36 ++++++++++++++++++++ ui/src/classes/npc.ts | 29 ++++++++++++++++ ui/src/classes/player.ts | 45 ++++--------------------- ui/src/constans.ts | 6 ++++ ui/src/conversation.ts | 3 -- ui/src/scenes/loading/loading.ts | 9 ----- ui/src/scenes/town/town.ts | 54 ++++++++++++++++++++---------- 8 files changed, 115 insertions(+), 68 deletions(-) create mode 100644 ui/src/constans.ts delete mode 100644 ui/src/conversation.ts diff --git a/agentverse/environments/pokemon.py b/agentverse/environments/pokemon.py index a5af81762..c7e4e1745 100644 --- a/agentverse/environments/pokemon.py +++ b/agentverse/environments/pokemon.py @@ -55,6 +55,7 @@ async def step( """Run one step of the environment""" # Get the next agent index + # time.sleep(8) # return [Message(content="Test", sender="May", receiver=["May"])] if receiver_id is None: for agent in self.agents: diff --git a/ui/src/classes/actor.ts b/ui/src/classes/actor.ts index f3ad4dfbb..22c79a6a6 100644 --- a/ui/src/classes/actor.ts +++ b/ui/src/classes/actor.ts @@ -12,7 +12,43 @@ export class Actor extends Physics.Arcade.Sprite { scene.physics.add.existing(this); this.getBody().setCollideWorldBounds(true); } + protected getBody(): Physics.Arcade.Body { return this.body as Physics.Arcade.Body; } + + initAnimations(): void { + this.scene.anims.create({ + key: this.name + "-walk-down", + frames: this.scene.anims.generateFrameNumbers(this.name, { + start: 0, + end: 2, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: this.name + "-walk-up", + frames: this.scene.anims.generateFrameNumbers(this.name, { + start: 3, + end: 5, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: this.name + "-walk-left", + frames: this.scene.anims.generateFrameNumbers(this.name, { + start: 6, + end: 8, + }), + frameRate: 6, + }); + this.scene.anims.create({ + key: this.name + "-walk-right", + frames: this.scene.anims.generateFrameNumbers(this.name, { + start: 9, + end: 11, + }), + frameRate: 6, + }); + } } diff --git a/ui/src/classes/npc.ts b/ui/src/classes/npc.ts index 3ed1e7f84..8a301343d 100644 --- a/ui/src/classes/npc.ts +++ b/ui/src/classes/npc.ts @@ -1,6 +1,8 @@ import { Actor } from "./actor"; +import { DIRECTION, DIRECTION_TO_TEXT } from "../constans"; export class NPC extends Actor { public id: number; + public direction: number = DIRECTION.DOWN; constructor( scene: Phaser.Scene, x: number, @@ -16,5 +18,32 @@ export class NPC extends Actor { this.getBody().setSize(14, 20); this.getBody().setOffset(0, 0); this.getBody().setImmovable(true); + + this.initAnimations(); + } + + update(): void { + var text = ""; + switch (this.direction) { + case DIRECTION.UP: + text = "up"; + break; + case DIRECTION.DOWN: + text = "down"; + break; + case DIRECTION.LEFT: + text = "left"; + break; + case DIRECTION.RIGHT: + text = "right"; + break; + } + this.anims.play(this.name + "-walk-" + text, true); + if (this.anims.isPlaying) + this.anims.setCurrentFrame(this.anims.currentAnim!.frames[0]); + } + + public changeDirection(direction: number): void { + this.direction = direction; } } diff --git a/ui/src/classes/player.ts b/ui/src/classes/player.ts index 997c31018..2a208d998 100644 --- a/ui/src/classes/player.ts +++ b/ui/src/classes/player.ts @@ -8,6 +8,8 @@ export class Player extends Actor { constructor(scene: Phaser.Scene, x: number, y: number) { super(scene, x, y, "Brendan"); + this.setName("Brendan"); + // Keys this.initKeyboard(); @@ -25,26 +27,26 @@ export class Player extends Actor { var pressed_flag = false; if (this.keyW.enabled && this.keyW?.isDown) { this.getBody().setVelocityY(-110); - this.anims.play("walk-up", true); + this.anims.play(this.name + "-walk-up", true); pressed_flag = true; } if (this.keyA.enabled && this.keyA?.isDown) { // this.getBody().setOffset(48, 15); this.getBody().setVelocityX(-110); - this.anims.play("walk-left", true); + this.anims.play(this.name + "-walk-left", true); pressed_flag = true; } if (this.keyS.enabled && this.keyS?.isDown) { this.getBody().setVelocityY(110); - this.anims.play("walk-down", true); + this.anims.play(this.name + "-walk-down", true); pressed_flag = true; } if (this.keyD.enabled && this.keyD?.isDown) { this.getBody().setVelocityX(110); - this.anims.play("walk-right", true); + this.anims.play(this.name + "-walk-right", true); // this.getBody().setOffset(15, 15); pressed_flag = true; } @@ -54,41 +56,6 @@ export class Player extends Actor { } } - initAnimations(): void { - this.scene.anims.create({ - key: "walk-down", - frames: this.scene.anims.generateFrameNumbers("Brendan", { - start: 0, - end: 2, - }), - frameRate: 6, - }); - this.scene.anims.create({ - key: "walk-up", - frames: this.scene.anims.generateFrameNumbers("Brendan", { - start: 3, - end: 5, - }), - frameRate: 6, - }); - this.scene.anims.create({ - key: "walk-left", - frames: this.scene.anims.generateFrameNumbers("Brendan", { - start: 6, - end: 8, - }), - frameRate: 6, - }); - this.scene.anims.create({ - key: "walk-right", - frames: this.scene.anims.generateFrameNumbers("Brendan", { - start: 9, - end: 11, - }), - frameRate: 6, - }); - } - initKeyboard(): void { this.keyW = this.scene.input.keyboard!.addKey("W"); this.keyA = this.scene.input.keyboard!.addKey("A"); diff --git a/ui/src/constans.ts b/ui/src/constans.ts new file mode 100644 index 000000000..63f41b550 --- /dev/null +++ b/ui/src/constans.ts @@ -0,0 +1,6 @@ +export enum DIRECTION { + UP, + DOWN, + LEFT, + RIGHT, +} diff --git a/ui/src/conversation.ts b/ui/src/conversation.ts deleted file mode 100644 index d445110da..000000000 --- a/ui/src/conversation.ts +++ /dev/null @@ -1,3 +0,0 @@ -export enum EVENTS_NAME { - conversation = 'conversation', -} \ No newline at end of file diff --git a/ui/src/scenes/loading/loading.ts b/ui/src/scenes/loading/loading.ts index c6341361c..36a8209ee 100644 --- a/ui/src/scenes/loading/loading.ts +++ b/ui/src/scenes/loading/loading.ts @@ -46,15 +46,6 @@ export class LoadingScene extends Scene { // frameWidth: 16, // frameHeight: 16, // }); - - this.load.spritesheet( - "textbox", - "https://nick-hat-boecker.de/files/images/dynamic_box.png", - { - frameWidth: 16, - frameHeight: 16, - } - ); } create(): void { diff --git a/ui/src/scenes/town/town.ts b/ui/src/scenes/town/town.ts index 3ca6d9a4a..548e89f61 100644 --- a/ui/src/scenes/town/town.ts +++ b/ui/src/scenes/town/town.ts @@ -9,7 +9,7 @@ import { } from "phaser"; import { Player } from "../../classes/player"; import { NPC } from "../../classes/npc"; -import eventsCenter from "../../classes/event_center"; +import { DIRECTION } from "../../constans"; // import { Agents, Message } from '../../classes/message'; // import UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin"; // import { TextBox } from "../../classes/textbox"; @@ -83,11 +83,10 @@ export class TownScene extends Scene { this.physics.add.collider(this.player, this.npcGroup); this.keySpace.on("up", () => { - var npc: Physics.Arcade.Sprite | null = getNearbyNPC( - this.player, - this.npcGroup - ); + var ret = getNearbyNPC(this.player, this.npcGroup); + var npc = ret[0]; if (npc) { + (npc as NPC).changeDirection(ret[1]); this.createInputBox(npc); } }); @@ -113,6 +112,9 @@ export class TownScene extends Scene { update(): void { this.player.update(); + this.npcGroup.getChildren().forEach(function (npc) { + (npc as NPC).update(); + }); } disableKeyboard(): void { @@ -226,7 +228,8 @@ export class TownScene extends Scene { var timer = this.time.addEvent({ delay: 6000, // ms callback: () => { - var waitingBox = this.createTextBox().start( + waitingBox.destroy(); + waitingBox = this.createTextBox().start( "Waiting for the response...", 200 ); @@ -254,10 +257,9 @@ export class TownScene extends Scene { .start(data.content, 50) .on("complete", () => { this.enableKeyboard(); - this.input.keyboard.on("keydown", () => { - debugger; + this.input.keyboard.on("keyup", () => { responseBox.destroy(); - this.input.keyboard.off("keydown"); + this.input.keyboard.off("keyup"); }); }); }); @@ -291,7 +293,6 @@ export class TownScene extends Scene { wordWrap: { width: width, }, - maxLines: 3, }) .setFixedSize(width, height), space: { @@ -313,23 +314,42 @@ export class TownScene extends Scene { function getNearbyNPC( player: Physics.Arcade.Sprite, npcGroup: GameObjects.Group -): Physics.Arcade.Sprite | null { +): [Physics.Arcade.Sprite | null, number] { var nearbyObject: Physics.Arcade.Sprite | null = null; - const nearbyDistance = Math.max(player.width, player.height); + // Not rigorous. Just a rough estimation. Requires that the npcs have + // similar width and height to player. + const nearbyDistance = 1.1 * Math.max(player.width, player.height); + + var direction = 0; npcGroup.getChildren().forEach(function (object) { + var _object = object as Physics.Arcade.Sprite; const distance = Mathph.Distance.Between( player.x, player.y, - (object as Physics.Arcade.Sprite).x, - (object as Physics.Arcade.Sprite).y + _object.x, + _object.y ); if (distance <= nearbyDistance) { - nearbyObject = object as Physics.Arcade.Sprite; + nearbyObject = _object; + var x_ratio = (player.x - _object.x) / _object.width; + var y_ratio = (player.y - _object.y) / _object.height; + if (Math.abs(x_ratio) > Math.abs(y_ratio)) { + if (x_ratio > 0) { + direction = DIRECTION.RIGHT; + } else { + direction = DIRECTION.LEFT; + } + } else { + if (y_ratio > 0) { + direction = DIRECTION.DOWN; + } else { + direction = DIRECTION.UP; + } + } } }); - debugger; - return nearbyObject; + return [nearbyObject, direction]; } From 797d49997d81b80b544ab6bcefadc5fc530d77aa Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Sun, 21 May 2023 00:42:15 +0800 Subject: [PATCH 35/39] add multiple npcs --- agentverse/environments/pokemon.py | 9 ++- agentverse/tasks/pokemon/config.yaml | 4 +- ui/dist/assets/tilemaps/json/town.json | 91 ++++++++++++++++++++++---- ui/raw/map.tmx | 13 +++- ui/src/classes/npc.ts | 2 +- ui/src/scenes/town/town.ts | 25 +++---- ui/src/{constans.ts => utils.ts} | 0 7 files changed, 112 insertions(+), 32 deletions(-) rename ui/src/{constans.ts => utils.ts} (100%) diff --git a/agentverse/environments/pokemon.py b/agentverse/environments/pokemon.py index c7e4e1745..2f4fefa14 100644 --- a/agentverse/environments/pokemon.py +++ b/agentverse/environments/pokemon.py @@ -67,6 +67,12 @@ async def step( player_message = Message( sender="Brenden", content=player_content, receiver=[agent_name] ) + import pdb + + pdb.set_trace() + + # Update the set of visible agents for each agent + self.rule.update_visible_agents(self) # Generate current environment description env_descriptions = self.rule.get_env_description(self, player_content) @@ -84,9 +90,6 @@ async def step( self.rule.update_memory(self) self.print_messages(selected_messages) - # Update the set of visible agents for each agent - self.rule.update_visible_agents(self) - self.cnt_turn += 1 return selected_messages diff --git a/agentverse/tasks/pokemon/config.yaml b/agentverse/tasks/pokemon/config.yaml index 65320daa2..98cd319d9 100644 --- a/agentverse/tasks/pokemon/config.yaml +++ b/agentverse/tasks/pokemon/config.yaml @@ -46,7 +46,7 @@ agents: temperature: 0.7 max_tokens: 1024 - agent_type: conversation - name: Professor Birch + name: Birch role_description: |- You are Professor Birch, a character in Pokémon Emerald. You are the resident Pokémon Professor of Littleroot Town and the Hoenn region. You specializes in Pokémon habitats and distribution. You are the father of May. You often works with your child to help observe and capture wild Pokémon. Your wife worries about you, because you are always busy and rarely has time to come home. You are known to be more outgoing than the other Pokémon Professors, and oftentimes your research takes you outdoors. Your field of study is primarily how Pokémon behave in the wild. For a reference, here are some quotes from you "Oh, hi, Brendan! I heard you beat May on your first try. That's excellent! May's been helping with my research for a long time. May has an extensive history as a Trainer already. Here, Brendan, I ordered this for my research, but I think you should have this Pokédex." @@ -61,7 +61,7 @@ agents: temperature: 0.7 max_tokens: 1024 - agent_type: conversation - name: Steven Stone + name: Steven role_description: |- You are Steven Stone, a character in Pokémon Emerald. You are a skilled Trainer who specializes in Steel-type Pokémon. You are the Champion of the Hoenn region's Pokémon League. You are a collector of rare stones, and you are the son of the president of the Devon Corporation, and you make your home in Mossdeep City. You wanders the region, aiding the player on their journey. You are just defeated by Brendan. For a reference, here are some quotes from you "Your Pokémon appear quite capable. If you keep training, you could even become the Champion of the Pokémon League one day. That's what I think. I know, since we've gotten to know each other, let's register one another in our PokéNavs. ... Now, I've got to hurry along." diff --git a/ui/dist/assets/tilemaps/json/town.json b/ui/dist/assets/tilemaps/json/town.json index 038ddbcf7..593f01cd6 100644 --- a/ui/dist/assets/tilemaps/json/town.json +++ b/ui/dist/assets/tilemaps/json/town.json @@ -231,9 +231,74 @@ "width":48, "x":0, "y":0 + }, + { + "draworder":"topdown", + "id":10, + "name":"npcs", + "objects":[ + { + "height":0, + "id":12, + "name":"May", + "point":true, + "properties":[ + { + "name":"id", + "type":"int", + "value":0 + }], + "rotation":0, + "type":"npc", + "visible":true, + "width":0, + "x":215.333333333333, + "y":248.666666666667 + }, + { + "height":0, + "id":13, + "name":"Steven", + "point":true, + "properties":[ + { + "name":"id", + "type":"int", + "value":2 + }], + "rotation":0, + "type":"npc", + "visible":true, + "width":0, + "x":422.666666666667, + "y":296 + }, + { + "height":0, + "id":14, + "name":"Birch", + "point":true, + "properties":[ + { + "name":"id", + "type":"int", + "value":1 + }], + "rotation":0, + "type":"npc", + "visible":true, + "width":0, + "x":343.333333333333, + "y":423.333333333333 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 }], - "nextlayerid":10, - "nextobjectid":9, + "nextlayerid":11, + "nextobjectid":15, "orientation":"orthogonal", "renderorder":"right-down", "tiledversion":"1.10.1", @@ -242,7 +307,7 @@ { "columns":8, "firstgid":1, - "image":"..\/..\/..\/..\/..\/..\/agentverse-phaser\/ui\/dist\/assets\/tilemaps\/tiles\/tileset.png", + "image":"..\/tiles\/tileset.png", "imageheight":15968, "imagewidth":128, "margin":0, @@ -1474,7 +1539,7 @@ { "name":"collides", "type":"bool", - "value":true + "value":false }] }, { @@ -1537,7 +1602,7 @@ { "name":"collides", "type":"bool", - "value":true + "value":false }] }, { @@ -1546,7 +1611,7 @@ { "name":"collides", "type":"bool", - "value":true + "value":false }] }, @@ -1610,7 +1675,7 @@ { "name":"collides", "type":"bool", - "value":true + "value":false }] }, { @@ -1619,7 +1684,7 @@ { "name":"collides", "type":"bool", - "value":true + "value":false }] }, { @@ -1682,7 +1747,7 @@ { "name":"collides", "type":"bool", - "value":true + "value":false }] }, { @@ -1691,7 +1756,7 @@ { "name":"collides", "type":"bool", - "value":true + "value":false }] }, { @@ -1745,7 +1810,7 @@ { "name":"collides", "type":"bool", - "value":true + "value":false }] }, { @@ -1754,7 +1819,7 @@ { "name":"collides", "type":"bool", - "value":true + "value":false }] }, { @@ -1763,7 +1828,7 @@ { "name":"collides", "type":"bool", - "value":true + "value":false }] }, { diff --git a/ui/raw/map.tmx b/ui/raw/map.tmx index 1acc1112a..6abd83014 100644 --- a/ui/raw/map.tmx +++ b/ui/raw/map.tmx @@ -1,5 +1,5 @@ - + @@ -40121,4 +40121,15 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + diff --git a/ui/src/classes/npc.ts b/ui/src/classes/npc.ts index 8a301343d..55175d9bc 100644 --- a/ui/src/classes/npc.ts +++ b/ui/src/classes/npc.ts @@ -1,5 +1,5 @@ import { Actor } from "./actor"; -import { DIRECTION, DIRECTION_TO_TEXT } from "../constans"; +import { DIRECTION, DIRECTION_TO_TEXT } from "../utils"; export class NPC extends Actor { public id: number; public direction: number = DIRECTION.DOWN; diff --git a/ui/src/scenes/town/town.ts b/ui/src/scenes/town/town.ts index 548e89f61..eeaaa1fa4 100644 --- a/ui/src/scenes/town/town.ts +++ b/ui/src/scenes/town/town.ts @@ -9,19 +9,11 @@ import { } from "phaser"; import { Player } from "../../classes/player"; import { NPC } from "../../classes/npc"; -import { DIRECTION } from "../../constans"; -// import { Agents, Message } from '../../classes/message'; -// import UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin"; -// import { TextBox } from "../../classes/textbox"; +import { DIRECTION } from "../../utils"; import { TextBox, - RoundRectangle, - InputText, - Buttons, - Label, Click, } from "../../phaser3-rex-plugins/templates/ui/ui-components"; -import Button from "../../phaser3-rex-plugins/plugins/button"; import UIPlugin from "../../phaser3-rex-plugins/templates/ui/ui-plugin"; const COLOR_PRIMARY = 0x4e342e; @@ -41,7 +33,6 @@ export class TownScene extends Scene { private npcGroup: GameObjects.Group; private keySpace: Phaser.Input.Keyboard.Key; private rexUI: UIPlugin; - // private message!: GameObjects.Text; constructor() { super("town-scene"); @@ -75,8 +66,17 @@ export class TownScene extends Scene { // NPC this.npcGroup = this.add.group(); - var npc = new NPC(this, 400, 340, "May", 0); - this.npcGroup.add(npc); + var npcPoints = this.map.filterObjects("npcs", (npc) => { + return npc.type === "npc"; + }); + var npcs = npcPoints.map((npc) => { + var id_property = npc.properties.filter((property) => { + return property.name === "id"; + }); + this.npcGroup.add( + new NPC(this, npc.x, npc.y, npc.name, id_property[0].value) + ); + }); this.physics.add.collider(this.npcGroup, this.wallLayer); this.physics.add.collider(this.npcGroup, this.treeLayer); this.physics.add.collider(this.npcGroup, this.houseLayer); @@ -236,6 +236,7 @@ export class TownScene extends Scene { }, loop: true, }); + debugger; fetch("http://127.0.0.1:10002/chat", { method: "POST", headers: { diff --git a/ui/src/constans.ts b/ui/src/utils.ts similarity index 100% rename from ui/src/constans.ts rename to ui/src/utils.ts From 771201c837790efc42dd353c6ec48b8264de8554 Mon Sep 17 00:00:00 2001 From: chenweize1998 Date: Sun, 21 May 2023 19:33:59 +0800 Subject: [PATCH 36/39] reorganize prisoner dilema task --- agentverse/agents/__init__.py | 3 +- agentverse/agents/conversation_agent.py | 17 +- agentverse/agents/police_agent.py | 45 ----- agentverse/agents/prisoner_agent.py | 47 ----- agentverse/agents/prisoner_dilema_agent.py | 165 ++++++++++++++++++ agentverse/environments/__init__.py | 1 + agentverse/environments/basic.py | 2 +- agentverse/environments/pokemon.py | 3 - agentverse/environments/prisoner_dilema.py | 47 +++++ agentverse/tasks/__init__.py | 2 - .../nlp_classroom_3players_nolc/config.yaml | 12 +- agentverse/tasks/prisoner_dilema/config.yaml | 14 +- .../tasks/prisoner_dilema_optimal/config.yaml | 74 -------- .../prisoner_dilema_optimal/output_parser.py | 69 -------- 14 files changed, 236 insertions(+), 265 deletions(-) delete mode 100644 agentverse/agents/police_agent.py delete mode 100644 agentverse/agents/prisoner_agent.py create mode 100644 agentverse/agents/prisoner_dilema_agent.py create mode 100644 agentverse/environments/prisoner_dilema.py delete mode 100644 agentverse/tasks/prisoner_dilema_optimal/config.yaml delete mode 100644 agentverse/tasks/prisoner_dilema_optimal/output_parser.py diff --git a/agentverse/agents/__init__.py b/agentverse/agents/__init__.py index f98694890..5f3213e98 100644 --- a/agentverse/agents/__init__.py +++ b/agentverse/agents/__init__.py @@ -5,6 +5,5 @@ from .base import BaseAgent from .conversation_agent import ConversationAgent -from .prisoner_agent import PrisonerAgent -from .police_agent import PoliceAgent from .tool_agent import ToolAgent +from .prisoner_dilema_agent import PoliceAgent, PrisonerAgent diff --git a/agentverse/agents/conversation_agent.py b/agentverse/agents/conversation_agent.py index 65be0115d..bf16646d1 100644 --- a/agentverse/agents/conversation_agent.py +++ b/agentverse/agents/conversation_agent.py @@ -1,29 +1,28 @@ +from __future__ import annotations + import logging from string import Template - - -from typing import List, TYPE_CHECKING - +from typing import TYPE_CHECKING, List from agentverse.message import Message from . import agent_registry from .base import BaseAgent - if TYPE_CHECKING: from agentverse.environments.base import BaseEnvironment + @agent_registry.register("conversation") class ConversationAgent(BaseAgent): - def step(self, environment: "BaseEnvironment", env_description: str = "",) -> Message: + def step(self, env_description: str = "") -> Message: prompt = self._fill_prompt_template(env_description) parsed_response = None for i in range(self.max_retry): try: response = self.llm.generate_response(prompt) - parsed_response = self.output_parser.parse(self, environment, response) + parsed_response = self.output_parser.parse(response) break except Exception as e: logging.error(e) @@ -42,7 +41,7 @@ def step(self, environment: "BaseEnvironment", env_description: str = "",) -> Me ) return message - async def astep(self, environment: "BaseEnvironment", env_description: str = "") -> Message: + async def astep(self, env_description: str = "") -> Message: """Asynchronous version of step""" prompt = self._fill_prompt_template(env_description) @@ -50,7 +49,7 @@ async def astep(self, environment: "BaseEnvironment", env_description: str = "") for i in range(self.max_retry): try: response = await self.llm.agenerate_response(prompt) - parsed_response = self.output_parser.parse(self, environment, response) + parsed_response = self.output_parser.parse(response) break except Exception as e: logging.error(e) diff --git a/agentverse/agents/police_agent.py b/agentverse/agents/police_agent.py deleted file mode 100644 index bc2d87afa..000000000 --- a/agentverse/agents/police_agent.py +++ /dev/null @@ -1,45 +0,0 @@ -import logging -from string import Template - - -from typing import List, TYPE_CHECKING - - -from agentverse.message import Message - -from . import agent_registry -from .base import BaseAgent -from .conversation_agent import ConversationAgent - - -if TYPE_CHECKING: - from agentverse.environments.base import BaseEnvironment - -@agent_registry.register("police") -class PoliceAgent(ConversationAgent): - interrogating_form: str - def _fill_prompt_template(self, env_description: str = "") -> str: - """Fill the placeholders in the prompt template - - In the conversation agent, three placeholders are supported: - - ${agent_name}: the name of the agent - - ${env_description}: the description of the environment - - ${role_description}: the description of the role of the agent - - ${chat_history}: the chat history of the agent - """ - input_arguments = { - "agent_name": self.name, - "env_description": env_description, - "role_description": self.role_description, - "chat_history": self.memory.to_string(add_sender_prefix=True), - } - - role_argument = { - "interrogating_form": self.interrogating_form, - } - - role_description = Template(self.role_description).safe_substitute(role_argument) - input_arguments["role_description"] = role_description - - return Template(self.prompt_template).safe_substitute(input_arguments) - diff --git a/agentverse/agents/prisoner_agent.py b/agentverse/agents/prisoner_agent.py deleted file mode 100644 index 3fa79c81b..000000000 --- a/agentverse/agents/prisoner_agent.py +++ /dev/null @@ -1,47 +0,0 @@ -import logging -from string import Template - - -from typing import List, TYPE_CHECKING - - -from agentverse.message import Message - -from . import agent_registry -from .base import BaseAgent -from .conversation_agent import ConversationAgent - - -if TYPE_CHECKING: - from agentverse.environments.base import BaseEnvironment - -@agent_registry.register("prisoner") -class PrisonerAgent(ConversationAgent): - personality: str - relationship_with_another: str - def _fill_prompt_template(self, env_description: str = "") -> str: - """Fill the placeholders in the prompt template - - In the conversation agent, three placeholders are supported: - - ${agent_name}: the name of the agent - - ${env_description}: the description of the environment - - ${role_description}: the description of the role of the agent - - ${chat_history}: the chat history of the agent - """ - input_arguments = { - "agent_name": self.name, - "env_description": env_description, - "role_description": self.role_description, - "chat_history": self.memory.to_string(add_sender_prefix=True), - } - - role_argument = { - "personality": self.personality, - "relationship_with_another": self.relationship_with_another - } - - role_description = Template(self.role_description).safe_substitute(role_argument) - input_arguments["role_description"] = role_description - - return Template(self.prompt_template).safe_substitute(input_arguments) - diff --git a/agentverse/agents/prisoner_dilema_agent.py b/agentverse/agents/prisoner_dilema_agent.py new file mode 100644 index 000000000..deaaa5a1a --- /dev/null +++ b/agentverse/agents/prisoner_dilema_agent.py @@ -0,0 +1,165 @@ +from __future__ import annotations + +import logging +from string import Template +from typing import TYPE_CHECKING, List + +from agentverse.message import Message + +from . import agent_registry +from .base import BaseAgent + +if TYPE_CHECKING: + from agentverse.environments.base import BaseEnvironment + + +class PrisonerDilemaAgent(BaseAgent): + def step( + self, + environment: BaseEnvironment, + env_description: str = "", + ) -> Message: + prompt = self._fill_prompt_template(env_description) + + parsed_response = None + for i in range(self.max_retry): + try: + response = self.llm.generate_response(prompt) + parsed_response = self.output_parser.parse(self, environment, response) + break + except Exception as e: + logging.error(e) + logging.warning("Retrying...") + continue + + if parsed_response is None: + logging.error(f"{self.name} failed to generate valid response.") + + message = Message( + content="" + if parsed_response is None + else parsed_response.return_values["output"], + sender=self.name, + receiver=self.get_receiver(), + ) + return message + + async def astep( + self, environment: BaseEnvironment, env_description: str = "" + ) -> Message: + """Asynchronous version of step""" + prompt = self._fill_prompt_template(env_description) + + parsed_response = None + for i in range(self.max_retry): + try: + response = await self.llm.agenerate_response(prompt) + parsed_response = self.output_parser.parse(self, environment, response) + break + except Exception as e: + logging.error(e) + logging.warning("Retrying...") + continue + + if parsed_response is None: + logging.error(f"{self.name} failed to generate valid response.") + + message = Message( + content="" + if parsed_response is None + else parsed_response.return_values["output"], + sender=self.name, + receiver=self.get_receiver(), + ) + return message + + def _fill_prompt_template(self, env_description: str = "") -> str: + """Fill the placeholders in the prompt template + + In the conversation agent, three placeholders are supported: + - ${agent_name}: the name of the agent + - ${env_description}: the description of the environment + - ${role_description}: the description of the role of the agent + - ${chat_history}: the chat history of the agent + """ + input_arguments = { + "agent_name": self.name, + "env_description": env_description, + "role_description": self.role_description, + "chat_history": self.memory.to_string(add_sender_prefix=True), + } + return Template(self.prompt_template).safe_substitute(input_arguments) + + def add_message_to_memory(self, messages: List[Message]) -> None: + self.memory.add_message(messages) + + def reset(self) -> None: + """Reset the agent""" + self.memory.reset() + # TODO: reset receiver + + +@agent_registry.register("police") +class PoliceAgent(PrisonerDilemaAgent): + interrogating_form: str + + def _fill_prompt_template(self, env_description: str = "") -> str: + """Fill the placeholders in the prompt template + + In the conversation agent, three placeholders are supported: + - ${agent_name}: the name of the agent + - ${env_description}: the description of the environment + - ${role_description}: the description of the role of the agent + - ${chat_history}: the chat history of the agent + """ + input_arguments = { + "agent_name": self.name, + "env_description": env_description, + "role_description": self.role_description, + "chat_history": self.memory.to_string(add_sender_prefix=True), + } + + role_argument = { + "interrogating_form": self.interrogating_form, + } + + role_description = Template(self.role_description).safe_substitute( + role_argument + ) + input_arguments["role_description"] = role_description + + return Template(self.prompt_template).safe_substitute(input_arguments) + + +@agent_registry.register("prisoner") +class PrisonerAgent(PrisonerDilemaAgent): + personality: str + relationship_with_another: str + + def _fill_prompt_template(self, env_description: str = "") -> str: + """Fill the placeholders in the prompt template + + In the conversation agent, three placeholders are supported: + - ${agent_name}: the name of the agent + - ${env_description}: the description of the environment + - ${role_description}: the description of the role of the agent + - ${chat_history}: the chat history of the agent + """ + input_arguments = { + "agent_name": self.name, + "env_description": env_description, + "role_description": self.role_description, + "chat_history": self.memory.to_string(add_sender_prefix=True), + } + + role_argument = { + "personality": self.personality, + "relationship_with_another": self.relationship_with_another, + } + + role_description = Template(self.role_description).safe_substitute( + role_argument + ) + input_arguments["role_description"] = role_description + + return Template(self.prompt_template).safe_substitute(input_arguments) diff --git a/agentverse/environments/__init__.py b/agentverse/environments/__init__.py index 7617d9476..5e7dd3b57 100644 --- a/agentverse/environments/__init__.py +++ b/agentverse/environments/__init__.py @@ -6,3 +6,4 @@ from .base import BaseEnvironment from .basic import BasicEnvironment from .pokemon import PokemonEnvironment +from .prisoner_dilema import PrisonerDilemaEnvironment diff --git a/agentverse/environments/basic.py b/agentverse/environments/basic.py index 9231c6146..55e2bb6fb 100644 --- a/agentverse/environments/basic.py +++ b/agentverse/environments/basic.py @@ -59,7 +59,7 @@ async def step(self) -> List[Message]: # Generate the next message messages = await asyncio.gather( - *[self.agents[i].astep(self, env_descriptions[i]) for i in agent_ids] + *[self.agents[i].astep(env_descriptions[i]) for i in agent_ids] ) # Some rules will select certain messages from all the messages diff --git a/agentverse/environments/pokemon.py b/agentverse/environments/pokemon.py index 2f4fefa14..6e9af5fd5 100644 --- a/agentverse/environments/pokemon.py +++ b/agentverse/environments/pokemon.py @@ -67,9 +67,6 @@ async def step( player_message = Message( sender="Brenden", content=player_content, receiver=[agent_name] ) - import pdb - - pdb.set_trace() # Update the set of visible agents for each agent self.rule.update_visible_agents(self) diff --git a/agentverse/environments/prisoner_dilema.py b/agentverse/environments/prisoner_dilema.py new file mode 100644 index 000000000..49e352dcf --- /dev/null +++ b/agentverse/environments/prisoner_dilema.py @@ -0,0 +1,47 @@ +import asyncio +import logging +from typing import Any, Dict, List + +# from agentverse.agents.agent import Agent +from agentverse.agents.conversation_agent import BaseAgent +from agentverse.environments.rules.base import Rule +from agentverse.message import Message + +from . import env_registry as EnvironmentRegistry +from .basic import BasicEnvironment + + +@EnvironmentRegistry.register("prisoner_dilema") +class PrisonerDilemaEnvironment(BasicEnvironment): + """ + An environment for prisoner dilema. + """ + + async def step(self) -> List[Message]: + """Run one step of the environment""" + + # Get the next agent index + agent_ids = self.rule.get_next_agent_idx(self) + + # Generate current environment description + env_descriptions = self.rule.get_env_description(self) + + # Generate the next message + messages = await asyncio.gather( + *[self.agents[i].astep(self, env_descriptions[i]) for i in agent_ids] + ) + + # Some rules will select certain messages from all the messages + selected_messages = self.rule.select_message(self, messages) + self.last_messages = selected_messages + self.print_messages(selected_messages) + + # Update the memory of the agents + self.rule.update_memory(self) + + # Update the set of visible agents for each agent + self.rule.update_visible_agents(self) + + self.cnt_turn += 1 + + return selected_messages diff --git a/agentverse/tasks/__init__.py b/agentverse/tasks/__init__.py index 200679c96..e9691fca4 100644 --- a/agentverse/tasks/__init__.py +++ b/agentverse/tasks/__init__.py @@ -15,8 +15,6 @@ from .prisoner_dilema.output_parser import PrisonerDilemaParser -from .prisoner_dilema_optimal.output_parser import PrisonerDilemaOptimalParser - from .nlp_classroom_3players_withtool_nolc.output_parser import ( NlpClassroom3PlayersWithtoolNolcParser, ) diff --git a/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml b/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml index 84a8d40e9..acd2b308f 100644 --- a/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml +++ b/agentverse/tasks/nlp_classroom_3players_nolc/config.yaml @@ -36,8 +36,8 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: gpt-4 - model: 'gpt-4' + llm_type: gpt-3.5-turbo + model: 'gpt-3.5-turbo' temperature: 0.7 max_tokens: 250 - agent_type: conversation @@ -47,8 +47,8 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: gpt-4 - model: 'gpt-4' + llm_type: gpt-3.5-turbo + model: 'gpt-3.5-turbo' temperature: 0.7 max_tokens: 100 - agent_type: conversation @@ -58,8 +58,8 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - llm_type: gpt-4 - model: gpt-4 + llm_type: gpt-3.5-turbo + model: gpt-3.5-turbo temperature: 0.7 max_tokens: 100 diff --git a/agentverse/tasks/prisoner_dilema/config.yaml b/agentverse/tasks/prisoner_dilema/config.yaml index fde818ad1..90acfd6ce 100644 --- a/agentverse/tasks/prisoner_dilema/config.yaml +++ b/agentverse/tasks/prisoner_dilema/config.yaml @@ -19,7 +19,7 @@ prompts: name: prisoner_dilema environment: - env_type: basic + env_type: prisoner_dilema max_turns: 8 rule: order: @@ -52,8 +52,8 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - model: "gpt-4" - llm_type: gpt-4 + model: "gpt-3.5-turbo" + llm_type: gpt-3.5-turbo temperature: 1.2 max_tokens: 200 - agent_type: prisoner @@ -72,8 +72,8 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - model: "gpt-4" - llm_type: gpt-4 + model: "gpt-3.5-turbo" + llm_type: gpt-3.5-turbo temperature: 1.2 max_tokens: 100 - agent_type: prisoner @@ -92,8 +92,8 @@ agents: memory_type: chat_history prompt_template: *prompt llm: - model: "gpt-4" - llm_type: gpt-4 + model: "gpt-3.5-turbo" + llm_type: gpt-3.5-turbo temperature: 1.2 max_tokens: 100 diff --git a/agentverse/tasks/prisoner_dilema_optimal/config.yaml b/agentverse/tasks/prisoner_dilema_optimal/config.yaml deleted file mode 100644 index ecac81fab..000000000 --- a/agentverse/tasks/prisoner_dilema_optimal/config.yaml +++ /dev/null @@ -1,74 +0,0 @@ -prompts: - prompt: &prompt |- - There are one Police AND two suspects, Suspect1 and Suspect2 in the scene. Two suspects are arrested and imprisoned. Each prisoner is in solitary confinement with no means of communication with their partner. The police offer each prisoner a Faustian bargain: If one of them confesses to the crime of the principal charge, betraying the other, they will be pardoned and free to leave while the other must serve the entirety of the sentence. - - The following is the description of your role. ${role_description} - - When speaking, please output a response in the following format with two fields Action and Action Input: - Action: (It should always be Speak) - Action Input: (You should put what you want to speak use here) - - Here is the conversation history: - ${chat_history} - - What should you Speak at this round, Please give your response based on the above history. Remember to give your response STRICTLY in the above response format. Do not add any additional field or line break to your response! - -name: prisoner_dilema - -environment: - env_type: basic - max_turns: 16 - rule: - order: - type: sequential - visibility: - type: prisoner - selector: - type: basic - updater: - type: basic - describer: - type: basic - -agents: - - agent_type: conversation - name: Police - role_description: |- - You are a Police now. You arrested two suspects. However, both of them refuse to confess to their crime. Your objective is to make the suspects betray each other, as this would lead to both of them confessing. To achieve this, you can employ diverse strategies to communicate with each suspect and cannot tell them the truth, such as exploiting the uncertainty between them and make them do not trust each other. - [IMPORTANT!] - - You are requested to STATE the final judgment to both suspects when they make their final decision. - memory: - memory_type: chat_history - prompt_template: *prompt - llm: - llm_type: gpt-4 - temperature: 0.7 - max_tokens: 200 - - agent_type: conversation - name: Suspect1 - role_description: |- - You are Suspect1 and committed the crime. Now, you are faced with the police investigation and cannot communication with Suspect2. Your task is to analyze the information provided by the police and decide whether to cooperate with Suspect2. At each round, you have the choice to remain silent or betray Suspect2, and you must describe your reasoning behind your decision. Your objective is to minimize your criminal sentence. - [IMPORTANT!] - - When you are informed to make your final decision, you should response starting with "This is my final decision". - memory: - memory_type: chat_history - prompt_template: *prompt - llm: - llm_type: gpt-4 - temperature: 0.7 - max_tokens: 100 - - agent_type: conversation - name: Suspect2 - role_description: |- - You are Suspect2 and committed the crime. Now, you are faced with the police investigation and cannot communication with Suspect1. Your task is to analyze the information provided by the police and decide whether to cooperate with Suspect1. At each round, you have the choice to remain silent or betray Suspect1, and you must describe your reasoning behind your decision. Your objective is to minimize your criminal sentence. - [IMPORTANT!] - - When you are informed to make your final decision, you should response starting with "This is my final decision". - memory: - memory_type: chat_history - prompt_template: *prompt - llm: - llm_type: gpt-4 - temperature: 0.7 - max_tokens: 100 - -tools: diff --git a/agentverse/tasks/prisoner_dilema_optimal/output_parser.py b/agentverse/tasks/prisoner_dilema_optimal/output_parser.py deleted file mode 100644 index ebad31602..000000000 --- a/agentverse/tasks/prisoner_dilema_optimal/output_parser.py +++ /dev/null @@ -1,69 +0,0 @@ -from __future__ import annotations - -import re -from typing import Union, TYPE_CHECKING - -# from langchain.agents import AgentOutputParser -from agentverse.parser import OutputParser, LLMResult -from langchain.schema import AgentAction, AgentFinish -from agentverse.parser import OutputParserError, output_parser_registry - -if TYPE_CHECKING: - from agentverse.agents.base import BaseAgent - from agentverse.environments.base import BaseEnvironment - -@output_parser_registry.register("prisoner_dilema_optimal") -class PrisonerDilemaOptimalParser(OutputParser): - - # make sure 1 1 2 2 3 3 - cur_round: int = 1 - encounter_cur_round: bool = False - - def parse(self, agent: "BaseAgent", environment: "BaseEnvironment", output: LLMResult) -> Union[AgentAction, AgentFinish]: - - text = output.content - cleaned_output = text.strip() - cleaned_output = re.sub(r"\n+", "\n", cleaned_output) - cleaned_output = cleaned_output.split("\n") - if not ( - len(cleaned_output) == 2 - and cleaned_output[0].startswith("Action:") - and cleaned_output[1].startswith("Action Input:") - ): - raise OutputParserError(text) - action = cleaned_output[0][len("Action:") :].strip() - action_input = cleaned_output[1][len("Action Input:") :].strip() - - if action == "Speak": - # make sure the police count the round right - # if agent.name == "Police": - # action_input = re.sub(r'Round (\d+)', f'Round {self.cur_round}', action_input) - # self.cur_round += 1 - # if self.encounter_cur_round: - # self.encounter_cur_round = False - # self.cur_round += 1 - # else: - # self.encounter_cur_round = True - - # each time police speak is a new round - if agent.name == "Police": - - if self.cur_round == (environment.max_turns // 6): - - action_input = "Attention! You are now required to finally made your decision and I will made the " \ - "final judgement to both of you based on this time, Please Answer now!" - - elif self.cur_round == 1: - action_input = "Hey Listen! You are both arrested, and I am going to give you both a chance to walk out of here," \ - "But you should comply with the following rules:" \ - "- If both of you remain silent, you will each receive a sentence of 3 years." \ - "- If both of you betray each other, you will each receive a sentence of 5 years." \ - "- If one of you are willing to testify against the other, and the other remains silent. You will be released IMMEDIATELY (will be sentenced to 0 years), while the silent one will be sentenced to 10 years in prison." \ - "Now, it's your time to consider testify or remaining silent. Remember this is a great chance that you will be released from here without guilty." \ - "I will noticed you WHEN you have to make your final decision! Your goal is to minimize your criminal sentences" \ - - self.cur_round += 1 - - return AgentFinish({"output": action_input}, text) - else: - raise OutputParserError(text) From 8d30fd58e013fe4b7dc72bcab420d6cbde87d6cf Mon Sep 17 00:00:00 2001 From: Yusheng Su Date: Sun, 21 May 2023 20:11:21 +0800 Subject: [PATCH 37/39] add prisoner_dilema demo --- .idea/.gitignore | 8 + .idea/AgentVerse 2.iml | 19 ++ .idea/inspectionProfiles/Project_Default.xml | 39 ++++ .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + agentverse/demo.py | 169 +++++++++------- .../tasks/prisoner_dilema/config_backup.yaml | 188 +++++++++--------- imgs/prison/{refer.png => case_2.png} | Bin imgs/prison/police.png | Bin main.py | 3 +- main_demo.py | 12 +- 13 files changed, 285 insertions(+), 177 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/AgentVerse 2.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml rename imgs/prison/{refer.png => case_2.png} (100%) mode change 100755 => 100644 imgs/prison/police.png diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..a7cdac76c --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/AgentVerse 2.iml b/.idea/AgentVerse 2.iml new file mode 100644 index 000000000..60456b200 --- /dev/null +++ b/.idea/AgentVerse 2.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 000000000..86448fc10 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,39 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 000000000..105ce2da2 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..ca1fbd245 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..46938cfb4 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..c8397c94c --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/agentverse/demo.py b/agentverse/demo.py index 22bdc7d12..491134fb4 100644 --- a/agentverse/demo.py +++ b/agentverse/demo.py @@ -23,28 +23,30 @@ def cover_img(background, img, place: Tuple[int, int]): background[place[0] + i, place[1] + j] = img[i, j, :3] -def get_avatar(idx): - img = cv2.imread(f"./imgs/{idx}.png") - base64_str = cv2.imencode(".png", img)[1].tostring() - return "data:image/png;base64," + base64.b64encode(base64_str).decode("utf-8") - - class UI: """ the UI of frontend """ + def __init__(self, task: str): """ init a UI. default number of students is 0 """ + self.messages = [] + self.task = task self.backend = AgentVerse.from_task(task) - self.agent_id = {self.backend.agents[idx].name:idx for idx in range(len(self.backend.agents))} + self.agent_id = {self.backend.agents[idx].name: idx for idx in range(len(self.backend.agents))} self.stu_num = len(self.agent_id) - 1 self.autoplay = False self.image_now = None self.text_now = None + def get_avatar(self, idx): + img = cv2.imread(f"./imgs/{idx}.png") + base64_str = cv2.imencode(".png", img)[1].tostring() + return "data:image/png;base64," + base64.b64encode(base64_str).decode("utf-8") + def stop_autoplay(self): self.autoplay = False @@ -63,8 +65,7 @@ def delay_gen_output(self): def delay_reset(self): self.image_now, self.text_now = self.reset() - return self.image_now, self.text_now - + return self.image_now, self.text_now, gr.Button.update(interactive=True) def reset(self, stu_num=0): """ @@ -78,82 +79,99 @@ def reset(self, stu_num=0): """ # [To-Do] Need to add a function to assign agent numbers into the backend. """ - #self.backend.reset(stu_num) - #self.stu_num = stu_num + # self.backend.reset(stu_num) + # self.stu_num = stu_num """ # [To-Do] Pass the parameters to reset """ self.backend.reset() - background = cv2.imread("./imgs/background.png") - back_h, back_w, _ = background.shape - stu_cnt = 0 - for h_begin, w_begin in itertools.product(range(800, back_h, 300), range(135, back_w - 200, 200)): - stu_cnt += 1 - img = cv2.imread( - f"./imgs/{(stu_cnt - 1) % 11 + 1 if stu_cnt <= self.stu_num else 'empty'}.png", - cv2.IMREAD_UNCHANGED) - cover_img(background, img, (h_begin -30 if img.shape[0] > 190 else h_begin, w_begin)) + if self.task == "prisoner_dilema": + background = cv2.imread("./imgs/prison/case_1.png") + else: + background = cv2.imread("./imgs/background.png") + back_h, back_w, _ = background.shape + stu_cnt = 0 + for h_begin, w_begin in itertools.product(range(800, back_h, 300), range(135, back_w - 200, 200)): + stu_cnt += 1 + img = cv2.imread( + f"./imgs/{(stu_cnt - 1) % 11 + 1 if stu_cnt <= self.stu_num else 'empty'}.png", + cv2.IMREAD_UNCHANGED) + cover_img(background, img, (h_begin - 30 if img.shape[0] > 190 else h_begin, w_begin)) + self.messages = [] return [cv2.cvtColor(background, cv2.COLOR_BGR2RGB), ""] - def gen_img(self, data: List[Dict]): """ generate new image with sender rank - :param sender: + :param data: :return: the new image """ # The foloowing code need to be more general. This one is too task-specific. - #if len(data) != self.stu_num: - if len(data) != self.stu_num+1: + # if len(data) != self.stu_num: + if len(data) != self.stu_num + 1: raise gr.Error("data length is not equal to the total number of students.") - background = cv2.imread("./imgs/background.png") - back_h, back_w, _ = background.shape - stu_cnt = 0 - if data[stu_cnt]["message"] not in ["", "[RaiseHand]"]: + if self.task == "prisoner_dilema": img = cv2.imread("./imgs/speaking.png", cv2.IMREAD_UNCHANGED) - cover_img(background, img, (370, 1250)) - for h_begin, w_begin in itertools.product(range(800, back_h, 300), range(135, back_w - 200, 200)): - stu_cnt += 1 - if stu_cnt <= self.stu_num: - img = cv2.imread( - f"./imgs/{(stu_cnt - 1) % 11 + 1}.png", - cv2.IMREAD_UNCHANGED) - cover_img(background, img, (h_begin -30 if img.shape[0] > 190 else h_begin, w_begin)) - if "[RaiseHand]" in data[stu_cnt]["message"]: - #elif data[stu_cnt]["message"] == "[RaiseHand]": - img = cv2.imread("./imgs/hand.png", cv2.IMREAD_UNCHANGED) - cover_img(background, img, (h_begin - 90, w_begin + 10)) - elif data[stu_cnt]["message"] not in ["", "[RaiseHand]"]: - img = cv2.imread("./imgs/speaking.png", cv2.IMREAD_UNCHANGED) - cover_img(background, img, (h_begin - 90, w_begin + 10)) - + print(self.messages) + if len(self.messages) < 2 or self.messages[-1][0] == 1 or self.messages[-2][0] == 2: + background = cv2.imread("./imgs/prison/case_1.png") + if data[0]["message"] != "": + cover_img(background, img, (400, 480)) else: - img = cv2.imread("./imgs/empty.png", cv2.IMREAD_UNCHANGED) - cover_img(background, img, (h_begin, w_begin)) + background = cv2.imread("./imgs/prison/case_2.png") + if data[0]["message"] != "": + cover_img(background, img, (400, 880)) + if data[1]["message"] != "": + cover_img(background, img, (550, 480)) + if data[2]["message"] != "": + cover_img(background, img, (550, 880)) + else: + background = cv2.imread("./imgs/background.png") + back_h, back_w, _ = background.shape + stu_cnt = 0 + if data[stu_cnt]["message"] not in ["", "[RaiseHand]"]: + img = cv2.imread("./imgs/speaking.png", cv2.IMREAD_UNCHANGED) + cover_img(background, img, (370, 1250)) + for h_begin, w_begin in itertools.product(range(800, back_h, 300), range(135, back_w - 200, 200)): + stu_cnt += 1 + if stu_cnt <= self.stu_num: + img = cv2.imread( + f"./imgs/{(stu_cnt - 1) % 11 + 1}.png", + cv2.IMREAD_UNCHANGED) + cover_img(background, img, (h_begin - 30 if img.shape[0] > 190 else h_begin, w_begin)) + if "[RaiseHand]" in data[stu_cnt]["message"]: + # elif data[stu_cnt]["message"] == "[RaiseHand]": + img = cv2.imread("./imgs/hand.png", cv2.IMREAD_UNCHANGED) + cover_img(background, img, (h_begin - 90, w_begin + 10)) + elif data[stu_cnt]["message"] not in ["", "[RaiseHand]"]: + img = cv2.imread("./imgs/speaking.png", cv2.IMREAD_UNCHANGED) + cover_img(background, img, (h_begin - 90, w_begin + 10)) + + else: + img = cv2.imread("./imgs/empty.png", cv2.IMREAD_UNCHANGED) + cover_img(background, img, (h_begin, w_begin)) return cv2.cvtColor(background, cv2.COLOR_BGR2RGB) def return_format(self, messages: List[Message]): - _format = [{"message": "","sender": idx} for idx in range(len(self.agent_id))] + _format = [{"message": "", "sender": idx} for idx in range(len(self.agent_id))] for message in messages: _format[self.agent_id[message.sender]]["message"] = "[{}]: {}".format(message.sender, message.content) return _format - def gen_output(self): """ generate new image and message of next step :return: [new image, new message] """ - #data = self.backend.next_data() + # data = self.backend.next_data() return_message = self.backend.next() data = self.return_format(return_message) - - #data.sort(key=lambda item: item["sender"]) + # data.sort(key=lambda item: item["sender"]) """ # [To-Do]; Check the message from the backend: only 1 person can speak """ @@ -166,24 +184,22 @@ def gen_output(self): message = item["message"] break """ - messages = [] for item in data: if item["message"] not in ["", "[RaiseHand]"]: - messages.append((item['sender'], item['message'])) - message = "" - for sender, msg in messages: + self.messages.append((item['sender'], item['message'])) + for sender, msg in self.messages: if sender == 0: - avatar = get_avatar(0) + avatar = self.get_avatar(0) else: - avatar = get_avatar((sender - 1) % 11 + 1) - message += f'