48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
"""Debate state management."""
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
from typing import Literal, TypedDict
|
|
|
|
from debate_ops import frontmatter
|
|
|
|
|
|
Phase = Literal['awaiting_arguments', 'awaiting_judgment']
|
|
|
|
|
|
class DebateState(TypedDict):
|
|
"""Debate state from frontmatter."""
|
|
debate_id: str
|
|
current_exchange: int
|
|
current_phase: Phase
|
|
|
|
|
|
def read_debate_state(debate: str) -> DebateState:
|
|
"""Read current debate state from debate.md frontmatter."""
|
|
debate_file = Path.cwd() / debate / 'debate.md'
|
|
doc = frontmatter.load(debate_file)
|
|
|
|
return DebateState(
|
|
debate_id=doc['debate_id'],
|
|
current_exchange=doc['current_exchange'],
|
|
current_phase=doc['current_phase'] # type: ignore
|
|
)
|
|
|
|
|
|
def update_debate_state(
|
|
debate: str,
|
|
current_exchange: int | None = None,
|
|
current_phase: Phase | None = None
|
|
) -> None:
|
|
"""Update debate.md frontmatter with new state values."""
|
|
debate_file = Path.cwd() / debate / 'debate.md'
|
|
doc = frontmatter.load(debate_file)
|
|
|
|
if current_exchange is not None:
|
|
doc.metadata['current_exchange'] = current_exchange
|
|
|
|
if current_phase is not None:
|
|
doc.metadata['current_phase'] = current_phase
|
|
|
|
frontmatter.dump(doc, debate_file)
|