File size: 1,292 Bytes
337a5ce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from enum import Enum
import openai
from pydantic import BaseModel, Field
from typing import Optional
from typing import List
import json
import random


class TackleboxCard(BaseModel):
    description: str
    share_with_other_player: bool = False

class TackleboxDeck(BaseModel):
    cards: List[TackleboxCard] = Field(default_factory=list)

    def draw_card(self) -> Optional[TackleboxCard]:
        # shuffle and draw the top card
        if self.cards and len(self.cards) > 0:
            return self.cards.pop(random.randint(0, len(self.cards) - 1))
        return None

class Hand(BaseModel):
    cards: List[TackleboxCard] = Field(default_factory=list)

    def add_card(self, card: TackleboxCard):
        self.cards.append(card)

class Personality(BaseModel):
    baseline: str
    traits: list[str]


class SpeechStyle(BaseModel):
    average_sentence_count: int
    allows_small_action_descriptions: bool
    forbidden_topics: list[str]


class Character(BaseModel):
    name: str
    age: int
    gender: str
    relationship_to_robin: str
    recent_event: str
    shared_past_event: str
    reason_for_fishing_today: Optional[str] = None
    relationship_type: Optional[str] = None
    pronouns: Optional[str] = None
    personality: Personality
    speech_style: SpeechStyle