-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathresult.json
57 lines (57 loc) · 12.7 KB
/
result.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
{
"name": "project",
"type": "folder",
"children": [
{
"name": "src/",
"type": "folder",
"children": [
{
"name": "__init__.py",
"type": "code",
"content": "from .role_assignment import role_assignment # noqa: F401\nfrom .dialogue_generation import dialogue_generation # noqa: F401\nfrom .playerDialogue import playerDialogue # noqa: F401\nfrom .game_engine import game_engine # noqa: F401\nfrom .voting import voting # noqa: F401\nfrom .role_assignment_module import role_assignment_module # noqa: F401\nfrom .dialogue_generation_module import dialogue_generation_module # noqa: F401\n\n__all__ = [\n 'role_assignment',\n 'dialogue_generation',\n 'playerDialogue',\n 'game_engine',\n 'voting',\n 'role_assignment_module',\n 'dialogue_generation_module'\n]"
},
{
"name": "role_assignment.py",
"type": "code",
"content": "# project/src/role_assignment.py\n\nfrom enum import Enum\nfrom typing import List, Dict\n\nclass Role(Enum):\n \"\"\"Roles in the game.\"\"\"\n PLAYER = 1\n GAME_MASTER = 2\n JUDGE = 3\n\n\nclass RoleAssignmentModule:\n def __init__(self, role_store: Chroma):\n self.role_store = role_store\n\n @property\n def roles(self) -> List[Dict[str, str]]:\n \"\"\"Returns a list of available roles.\"\"\"\n return [dict(name=role.name, id=role.value) for role in Role]\n\n# \u5728\u4e0a\u8ff0\u4ee3\u7801\u4e2d\uff0croles\u5217\u8868\u5305\u542b\u4e86Role\u7684name\u548cvalue\uff0c\u65b9\u4fbf\u4e8e\u4f7f\u7528\u3002"
},
{
"name": "dialogue_generation.py",
"type": "code",
"content": "# src/dialogue_generation.py\n\nimport random\n\nclass DialogueGenerator:\n \"\"\"\n A class responsible for generating dialogues.\n \"\"\"\n\n def __init__(self):\n \"\"\"\n Initializes the DialogueGenerator with no arguments.\n \"\"\"\n pass\n\n def generate_dialogue(self, context: str, response_generator: 'ResponseGenerator') -> str:\n \"\"\"\n Generates a dialogue based on the given context and response generator.\n\n Args:\n context (str): The context of the dialogue.\n response_generator (ResponseGenerator): A generator that produces responses.\n\n Returns:\n str: A generated dialogue.\n \"\"\"\n dialogue = []\n lines = context.split('\\n')\n for line in lines:\n # Add a random response to each line\n response = response_generator.generate_response(line)\n dialogue.append(response)\n return '\\n'.join(dialogue)\n\nclass ResponseGenerator:\n \"\"\"\n A class responsible for generating responses.\n \"\"\"\n\n def __init__(self):\n \"\"\"\n Initializes the ResponseGenerator with no arguments.\n \"\"\"\n pass\n\n def generate_response(self, context: str) -> str:\n \"\"\"\n Generates a response based on the given context.\n\n Args:\n context (str): The context of the dialogue.\n\n Returns:\n str: A generated response.\n \"\"\"\n # For demonstration purposes, we will use a simple response\n return f\"Context: {context}\"\n\n# Example usage\nif __name__ == \"__main__\":\n dialogue_generator = DialogueGenerator()\n response_generator = ResponseGenerator()\n\n context = \"Hello, how are you?\"\n dialogue = dialogue_generator.generate_dialogue(context, response_generator)\n print(dialogue)"
},
{
"name": "playerDialogue.py",
"type": "code",
"content": "# playerDialogue.py\n\nfrom abc import ABC, abstractmethod\nimport random\n\nclass PlayerDialogue(ABC):\n @abstractmethod\n def get_dialogue(self) -> str:\n pass\n\nclass NormalPlayerDialogue(PlayerDialogue):\n def __init__(self, name: str):\n self.name = name\n\n def get_dialogue(self) -> str:\n dialogue_options = [\n f\"Hello, I'm {self.name}. Nice to meet you!\",\n \"Hi there! How are you today?\",\n \"Hey, what's up? Want to talk about something?\"\n ]\n\n return random.choice(dialogue_options)\n\nclass GamePlayerDialogue(PlayerDialogue):\n def __init__(self, name: str, role: str):\n self.name = name\n self.role = role\n\n def get_dialogue(self) -> str:\n dialogue_options = [\n f\"{self.name} says, 'I'm on a quest for the ultimate treasure!'\",\n f\"Uh oh! {self.name} has just received a warning from the kingdom.\",\n f\"{self.name} is feeling quite confident about their chances of winning.\"\n ]\n\n return random.choice(dialogue_options)\n\n# Example usage:\nif __name__ == \"__main__\":\n player_name = \"John Doe\"\n player_dialogue = NormalPlayerDialogue(player_name)\n print(player_dialogue.get_dialogue())\n\n game_player_name = \"Jane Smith\"\n game_player_role = \"Knight\"\n game_player_dialogue = GamePlayerDialogue(game_player_name, game_player_role)\n print(game_player_dialogue.get_dialogue())"
},
{
"name": "game_engine.py",
"type": "code",
"content": "# game_engine.py\nimport random\nfrom role_assignment_module import RoleAssignmentModule\nfrom dialogue_generation_module import DialogueGenerationModule\nfrom playerDialogue import PlayerDialogue\nfrom voting import Voting\n\nclass GameEngine:\n def __init__(self):\n self.role_assignment = RoleAssignmentModule()\n self.dialogue_generation = DialogueGenerationModule()\n self.player_dialogue = PlayerDialogue()\n self.voting = Voting()\n\n def start_game(self):\n # Start the game logic here\n pass\n\n def handle_user_input(self, user_input):\n # Handle user input and update game state here\n pass\n\n def generatedialogue(self):\n # Generate dialogue based on player role and context here\n return self.dialogue_generation.generate_dialogue()\n\n def play_game(self):\n # Play the game by calling start_game and handle_user_input until the game is over\n while not self.voting.game_over():\n self.start_game()\n user_input = input(\"Enter your choice: \")\n self.handle_user_input(user_input)\n print(self.generatedialogue())\n\n# Example usage:\nif __name__ == \"__main__\":\n engine = GameEngine()\n engine.play_game()"
},
{
"name": "voting.py",
"type": "code",
"content": "# src/voting.py\n\nfrom abc import ABC, abstractmethod\nfrom enum import Enum\nimport random\n\nclass VoteType(Enum):\n \"\"\"Enum representing different types of votes.\"\"\"\n YES = \"YES\"\n NO = \"NO\"\n\nclass Voter(ABC):\n \"\"\"Abstract base class for voters.\"\"\"\n\n @abstractmethod\n def vote(self) -> str:\n \"\"\"Voter's choice (YES or NO).\"\"\"\n pass\n\nclass RandomVoter(Voter):\n \"\"\"Random voter that randomly votes YES or NO.\"\"\"\n def __init__(self, probability: float = 0.5):\n self.probability = probability\n\n def vote(self) -> VoteType:\n if random.random() < self.probability:\n return VoteType.YES\n else:\n return VoteType.NO\n\nclass VotingSystem:\n \"\"\"Simple voting system with voters and a leader.\"\"\"\n\n def __init__(self, voters: list[Voter]):\n self.voters = voters\n self.leader_votes = 0\n\n def add_voter(self, voter: Voter):\n self.voters.append(voter)\n\n def vote(self) -> VoteType:\n random_voter = random.choice(self.voters)\n return random_voter.vote()\n\n# Example usage:\nif __name__ == \"__main__\":\n voters = [RandomVoter(), RandomVoter(probability=0.8)]\n voting_system = VotingSystem(voters)\n\n for _ in range(10):\n print(f\"Leader vote: {voting_system.vote().value}\")"
},
{
"name": "role_assignment_module.py",
"type": "code",
"content": "# role_assignment_module.py\n\nfrom langchain.vectorstores import VectorStore\n\nclass RoleAssignment:\n def __init__(self, vectorstore: VectorStore):\n self.vectorstore = vectorstore\n\n def assign_role(self, user_id: str, role_vector: str) -> dict:\n \"\"\"\n Assigns a role to a user based on the given role vector.\n\n Args:\n user_id (str): The ID of the user.\n role_vector (str): The vector representing the desired role.\n\n Returns:\n dict: A dictionary containing the assigned role and other relevant information.\n \"\"\"\n # Use the Chroma VectorStore to find a matching role\n result = self.vectorstore.find_vectors(role_vector)\n\n if not result:\n return {\"error\": \"No matching role found\"}\n\n # Assign the role to the user\n return {\"role\": result[0], \"user_id\": user_id}\n\n def update_role(self, user_id: str, new_role_vector: str) -> dict:\n \"\"\"\n Updates a user's role based on the given new role vector.\n\n Args:\n user_id (str): The ID of the user.\n new_role_vector (str): The vector representing the desired new role.\n\n Returns:\n dict: A dictionary containing the updated role and other relevant information.\n \"\"\"\n # Use the Chroma VectorStore to find a matching new role\n result = self.vectorstore.find_vectors(new_role_vector)\n\n if not result:\n return {\"error\": \"No matching role found\"}\n\n # Update the user's role\n return {\"role\": result[0], \"user_id\": user_id}"
},
{
"name": "dialogue_generation_module.py",
"type": "code",
"content": "# project/src/dialogue_generation_module.py\n\nimport torch\nfrom transformers import AutoTokenizer, AutoModelForSeq2SeqLM\nfrom langchain.vectorstores.chroma import Chroma\nfrom langchain import LLM\nfrom langchain.modules.store import StoreModule\n\nclass DialogueGenerationModule:\n def __init__(self):\n # Initialize the BGE embeddings and Chroma vector store\n self.bge_embeddings = AutoTokenizer.from_pretrained(\"huggingface/bge-embeddings\")\n self.chroma_vector_store = Chroma()\n\n # Initialize the LLM and StoreModule for storing generated dialogue\n self.llm = AutoModelForSeq2SeqLM.from_pretrained(\"t5-small\")\n self.store_module = StoreModule(self.chroma_vector_store)\n\n def generate_dialogue(self, context, topic):\n # Encode the input context and topic into vectors\n context_vecs = self.bge_embeddings.encode(context)\n topic_vecs = self.bge_embeddings.encode(topic)\n\n # Generate a dialogue using the LLM\n generated_text = self.llm.generate(context_vecs, topic_vecs, max_length=100)\n\n # Store the generated text in the vector store for future reference\n self.store_module.store(generated_text)\n\n return generated_text\n\n# Usage example:\nif __name__ == \"__main__\":\n module = DialogueGenerationModule()\n context = \"Welcome to the game!\"\n topic = \"Your character's quest\"\n dialogue = module.generate_dialogue(context, topic)\n print(dialogue)"
},
{
"name": "main.py",
"type": "code",
"content": "import sys\nfrom src.role_assignment import RoleAssignment\nfrom src.dialogue_generation import DialogueGeneration\nfrom src.playerDialogue import PlayerDialogue\nfrom src.game_engine import GameEngine\nfrom src.voting import Voting\nfrom src.role_assignment_module import RoleAssignmentModule\nfrom src.dialogue_generation_module import DialogueGenerationModule\n\ndef main():\n # Initialize modules and systems\n role_assignment = RoleAssignment()\n dialogue_generation = DialogueGeneration()\n player_dialogue = PlayerDialogue()\n game_engine = GameEngine()\n voting = Voting()\n\n # Create instances of role assignment module and dialogue generation module\n role_assignment_module = RoleAssignmentModule(role_assignment)\n dialogue_generation_module = DialogueGenerationModule(dialogue_generation)\n\n # Run the game engine\n game_engine.run()\n\nif __name__ == \"__main__\":\n main()"
}
]
}
]
}