Skip to content

Commit

Permalink
🎡 Multiple upgrades to infra and linting
Browse files Browse the repository at this point in the history
  • Loading branch information
asaf-kali committed Jan 6, 2025
1 parent eb56710 commit 1ea772c
Show file tree
Hide file tree
Showing 12 changed files with 1,388 additions and 1,301 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ check-isort:
isort --check .

check-mypy:
mypy .
mypy codenames_solvers/

check-pylint:
pylint codenames_solvers/ --fail-under=10
Expand Down
7 changes: 4 additions & 3 deletions codenames_solvers/gpt/gpt_operative.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
import logging
from typing import Optional

from codenames.classic.player import ClassicOperative
from codenames.classic.state import ClassicOperativeState
from codenames.generic.board import Board
from codenames.generic.card import Card
from codenames.generic.move import PASS_GUESS, GivenClue, Guess
from codenames.generic.player import Operative
from codenames.generic.state import OperativeState

from codenames_solvers.gpt.gpt_player import (
Expand All @@ -17,8 +18,8 @@
log = logging.getLogger(__name__)


class GPTOperative(GPTPlayer, Operative):
def guess(self, game_state: OperativeState) -> Guess:
class GPTOperative(GPTPlayer, ClassicOperative):
def guess(self, game_state: ClassicOperativeState) -> Guess: # type: ignore[override]
# legal_guesses = self.build_legal_guesses(board=game_state.board)
# illegal_guesses = self.build_illegal_guesses(board=game_state.board)
board_repr = self.build_board_repr(board=game_state.board)
Expand Down
12 changes: 6 additions & 6 deletions codenames_solvers/gpt/gpt_player.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import json
import logging
import re
from abc import ABC
from typing import List, Optional

from codenames.classic.player import ClassicPlayer, ClassicTeam
from codenames.classic.score import Score
from codenames.classic.state import ClassicPlayerState
from codenames.generic.move import GivenClue, GivenGuess
from codenames.generic.player import Player, Spymaster, Team
from codenames.generic.state import PlayerState
from codenames.generic.player import Spymaster
from openai import ChatCompletion

from codenames_solvers.gpt.instructions import load_instructions
Expand All @@ -21,12 +21,12 @@
GUESSER_TURN_COMMAND = INSTRUCTIONS["operative_turn_command"]


class GPTPlayer(Player, ABC):
class GPTPlayer(ClassicPlayer):
def __init__(
self,
name: str,
api_key: str,
team: Optional[Team] = None,
team: ClassicTeam,
model_name: str = "gpt-3.5-turbo",
temperature: float = 0,
):
Expand All @@ -51,7 +51,7 @@ def build_score_repr(cls, score: Score) -> str:
)

@classmethod
def build_moves_repr(cls, state: PlayerState) -> Optional[str]:
def build_moves_repr(cls, state: ClassicPlayerState) -> Optional[str]:
moves: List[Move] = get_moves(state)
if not moves:
return None
Expand Down
12 changes: 8 additions & 4 deletions codenames_solvers/gpt/gpt_spymaster.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
from typing import List, Optional

from codenames.classic.color import ClassicColor
from codenames.classic.player import ClassicSpymaster
from codenames.classic.state import ClassicSpymasterState
from codenames.generic.board import Board
from codenames.generic.move import Clue, GivenClue
from codenames.generic.player import Spymaster, Team
from codenames.generic.player import Team
from codenames.generic.state import SpymasterState
from codenames.utils.vocabulary.english import ENGLISH_WORDS

Expand All @@ -18,8 +20,8 @@
log = logging.getLogger(__name__)


class GPTSpymaster(GPTPlayer, Spymaster):
def give_clue(self, game_state: SpymasterState) -> Clue:
class GPTSpymaster(GPTPlayer, ClassicSpymaster):
def give_clue(self, game_state: ClassicSpymasterState) -> Clue: # type: ignore[override]
board_repr = self.build_board_repr(board=game_state.board)
team = self.build_team_repr()
moves = self.build_moves_repr(state=game_state)
Expand Down Expand Up @@ -66,8 +68,10 @@ def give_clue(self, game_state: SpymasterState) -> Clue:
self._verify_clue(clue=clue, game_state=game_state)
return clue

def _verify_clue(self, clue: Clue, game_state: SpymasterState):
def _verify_clue(self, clue: Clue, game_state: ClassicSpymasterState):
good_clue = True
if not clue.for_words:
raise ValueError(f"Clue {clue} does not refer to any word")
for word in clue.for_words:
if not self._card_valid_for_clue(clue=clue, game_state=game_state, word=word):
good_clue = False
Expand Down
4 changes: 2 additions & 2 deletions codenames_solvers/gpt/moves.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from dataclasses import dataclass

from codenames.classic.state import ClassicPlayerState
from codenames.generic.move import GivenClue, GivenGuess
from codenames.generic.player import PlayerRole, Team
from codenames.generic.state import PlayerState


@dataclass
Expand Down Expand Up @@ -39,7 +39,7 @@ def team_color(self) -> Team:
return self.team


def get_moves(state: PlayerState) -> list[Move]:
def get_moves(state: ClassicPlayerState) -> list[Move]:
return _get_moves(
given_clues=state.given_clues,
given_guesses=state.given_guesses,
Expand Down
6 changes: 3 additions & 3 deletions codenames_solvers/naive/naive_player.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from abc import ABC
from typing import Optional

from codenames.generic.board import Board
from codenames.generic.card import CardColor
from codenames.generic.player import Player, Team
from gensim.models import KeyedVectors

Expand All @@ -14,11 +14,11 @@
)


class NaivePlayer(Player, ABC):
class NaivePlayer[C: CardColor, T: Team](Player[C, T]):
def __init__(
self,
name: str,
team: Team,
team: T,
model: Optional[KeyedVectors] = None,
model_identifier: Optional[ModelIdentifier] = None,
model_adapter: Optional[ModelFormatAdapter] = None,
Expand Down
2 changes: 1 addition & 1 deletion codenames_solvers/naive/proposal_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ def create_proposals_for_word_group(self, word_group: WordGroup) -> List[Proposa
centroid = np.mean(vectors, axis=0)
group_indices = self.word_group_indices(word_group)
group_vectors = self.get_vectors(group_indices)
centroid_to_group = cosine_distance(centroid, group_vectors)
centroid_to_group = cosine_distance(centroid, group_vectors) # type: ignore
max_centroid_to_group = np.max(centroid_to_group)
if self.thresholds_filter_active and max_centroid_to_group > self.proposals_thresholds.max_distance_group:
return []
Expand Down
2 changes: 1 addition & 1 deletion playground/online_codenames_game.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging
import os

from codenames.classic.color import ClassicTeam
from codenames.classic.player import ClassicTeam
from codenames.generic.exceptions import QuitGame
from codenames.online.codenames_game.adapter import CodenamesGameLanguage, GameConfigs
from codenames.online.codenames_game.runner import CodenamesGameRunner
Expand Down
Loading

0 comments on commit 1ea772c

Please sign in to comment.