Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
12492df
initial commit
gsmithline Nov 29, 2025
4537101
cleaned up
gsmithline Nov 29, 2025
190073b
inital test working
gsmithline Nov 29, 2025
7a35340
add in rl agents and prompt circles
gsmithline Dec 1, 2025
872c866
add in google cli
gsmithline Dec 4, 2025
710f6ee
adding files
gsmithline Dec 5, 2025
86a1df6
adding
gsmithline Dec 6, 2025
ab31277
Add walk baseline synthesis and caching in bargaining environment; ha…
gsmithline Dec 6, 2025
311cf45
add docker file
gsmithline Dec 6, 2025
99f759c
Add meta-game analysis fixes and GitHub Actions workflow
gsmithline Dec 30, 2025
dd963e9
Add missing OpenSpiel source files for Docker build
gsmithline Dec 30, 2025
c2c9634
Fix GitHub Actions checkout and add debug step
gsmithline Dec 30, 2025
98f238d
Use pip install open-spiel instead of building from source
gsmithline Dec 30, 2025
fe247fa
Fix OpenSpiel build: download abseil-cpp and pybind11 dependencies
gsmithline Dec 30, 2025
bb5777e
Fix dependency paths: clone to correct subdirectories
gsmithline Dec 30, 2025
02dd375
Clone OpenSpiel dependencies during Docker build
gsmithline Dec 30, 2025
252f371
Update READMEs for meta-game competition submission
gsmithline Dec 30, 2025
731ef62
Fix regret formula and clarify payoff matrix construction
gsmithline Dec 31, 2025
1ec17a3
Update uv.lock with cvxpy and numpy dependencies
gsmithline Dec 31, 2025
cbd29c0
Remove 'Interpreting Results' section from README
gsmithline Dec 31, 2025
c702c7d
commit extra files
gsmithline Jan 1, 2026
924f570
adding fixes
gsmithline Jan 4, 2026
b3ed329
fix
gsmithline Jan 5, 2026
fe17fc4
Add confidence intervals (standard errors) to bootstrap results
gsmithline Jan 12, 2026
2868a2e
Fix bootstrap SE computation: use std not std/sqrt(n)
gsmithline Jan 12, 2026
5979095
Add leaderboard structure with baseline evaluation results
gsmithline Jan 13, 2026
aba8496
Add results README
gsmithline Jan 13, 2026
9893142
Fix results format: flatten to individual files for DuckDB queries
gsmithline Jan 13, 2026
7a65666
Remove manual results - leaderboard needs separate repo with CI-gener…
gsmithline Jan 13, 2026
f6cad41
Fix Dockerfile: use ENTRYPOINT for compose compatibility
gsmithline Jan 13, 2026
2c240dd
Increase Nash equilibrium tolerance from 1e-6 to 1e-4
gsmithline Jan 13, 2026
4c76c72
Make Nash equilibrium solver more robust
gsmithline Jan 13, 2026
d19398d
Add links to leaderboard and example purple agent
gsmithline Jan 13, 2026
ff4f20e
Fix challenger fallback: treat as walk instead of balanced
gsmithline Jan 14, 2026
7d6fba6
Fix challenger fallback: recognize in _policy_kind
gsmithline Jan 15, 2026
9fc936e
Fix walk baseline trace file path for metrics calculation
gsmithline Jan 15, 2026
6387dec
Allow challenger to play real games instead of synthetic walk baseline
gsmithline Jan 15, 2026
cd83091
Fix: Remote agents always play real games, not synthetic walk baseline
gsmithline Jan 15, 2026
3c8f9bf
update readme
gsmithline Jan 16, 2026
1d88334
Fix: Move RNAD/NFSP agent creation outside game loop
gsmithline Jan 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
36 changes: 36 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
.git
.gitignore
__pycache__/
*.pyc
*.pyo
*.pyd
.Python
env/
venv/
.venv/
build/
dist/
*.egg-info/
.cache
.mypy_cache
.pytest_cache
.DS_Store
.vscode
.idea
node_modules/
terminals/

# OpenSpiel dependencies (will be cloned fresh in Docker)
scenarios/bargaining/open_spiel/open_spiel/abseil-cpp/
scenarios/bargaining/open_spiel/pybind11/
scenarios/bargaining/open_spiel/open_spiel/pybind11_abseil/
scenarios/bargaining/open_spiel/open_spiel/games/bridge/double_dummy_solver/
scenarios/bargaining/open_spiel/*.so
scenarios/bargaining/open_spiel/build/

# Large files not needed for build
bargaining_runs/
meta_game_analysis/
*.pkl
*.npy

67 changes: 67 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Build and Publish Docker Image

on:
push:
branches: [main]
tags: ['v*']
pull_request:
branches: [main]
workflow_dispatch: # Allow manual triggering

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
lfs: true

- name: Debug - List OpenSpiel files
run: |
echo "=== Checking open_spiel directory ==="
ls -la scenarios/bargaining/open_spiel/ || echo "Directory not found"
echo "=== Checking for setup.py ==="
cat scenarios/bargaining/open_spiel/setup.py | head -5 || echo "setup.py not found"

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Container Registry
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels)
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=raw,value=latest,enable={{is_default_branch}}

- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
OPEN_AI_API_KEY.txt
.env
.DS_Store
.python-version
.venv/
__pycache__/
*.pyc
*.pyc

# Runtime data directories
bargaining_llm_traces/
bargaining_runs/
meta_game_analysis/
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"python-envs.defaultEnvManager": "ms-python.python:pyenv",
"python-envs.defaultPackageManager": "ms-python.python:pip",
"python-envs.pythonProjects": []
}
52 changes: 52 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
FROM python:3.11-slim

# Install system dependencies for OpenSpiel build and MILP solvers
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
g++ \
clang \
cmake \
git \
curl \
python3-dev \
libffi-dev \
libglpk-dev \
glpk-utils && \
rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Install Python deps first
COPY pyproject.toml* uv.lock* requirements.txt* ./
RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \
pip install --no-cache-dir -r requirements.txt

# Copy source
COPY . .

# Download OpenSpiel dependencies to correct locations and build
WORKDIR /app/scenarios/bargaining/open_spiel
RUN echo "=== Cloning dependencies ===" && \
git clone --depth 1 https://github.com/abseil/abseil-cpp.git open_spiel/abseil-cpp && \
git clone --depth 1 https://github.com/pybind/pybind11.git pybind11 && \
git clone --depth 1 https://github.com/pybind/pybind11_abseil.git open_spiel/pybind11_abseil && \
git clone -b develop --depth 1 https://github.com/jblespiau/dds.git open_spiel/games/bridge/double_dummy_solver && \
echo "=== Building OpenSpiel ===" && \
export CXX=g++ && \
python setup.py build_ext --inplace 2>&1 && \
python setup.py install

WORKDIR /app

# Ensure local src is importable
ENV PYTHONPATH=/app/src:/app/scenarios/bargaining/open_spiel

# Cloud Run sets PORT; default to 8080 locally
ENV PORT=8080

EXPOSE 8080

# Use ENTRYPOINT so compose commands append to it
ENTRYPOINT ["python", "-m", "scenarios.bargaining.bargaining_green", "serve"]
CMD ["--host", "0.0.0.0", "--port", "8080"]
1 change: 1 addition & 0 deletions Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
web: python -m scenarios.bargaining.controller
Loading