Skip to content

Add support for OpenAI-compatible APIs via OpenAIGenericAPIModel#5

Open
Leopc1977 wants to merge 11 commits into
google-deepmind:mainfrom
Leopc1977:main
Open

Add support for OpenAI-compatible APIs via OpenAIGenericAPIModel#5
Leopc1977 wants to merge 11 commits into
google-deepmind:mainfrom
Leopc1977:main

Conversation

@Leopc1977

Copy link
Copy Markdown

Summary

This PR introduces OpenAIGenericAPIModel, enabling the use of any OpenAI-compatible API endpoint (local or remote) within Game Arena.

Changes

  • README.md

    • Added documentation for OpenAIGenericAPIModel usage with local or remote endpoints.
  • game_arena/harness/model_generation_http.py

    • Implemented OpenAIGenericAPIModel, a generic wrapper around any OpenAI-compatible API endpoint.
    • Supports:
      • Custom api_endpoint (HTTP/HTTPS).
      • Local or remote models hosting.
      • API key handling (optional for local).
      • Streaming and non-streaming completions.
      • Optional image input support.
  • game_arena/harness/harness_demo_openai_generic.py

    • Same demo as harness_demo, but using OpenAIGenericAPIModel.

Motivation

This makes it possible to integrate any OpenAI-compatible API into Game Arena without needing special integration code.
For example:

  • Local LLMs via vLLM / LM Studio.
  • Cloud-hosted OpenAI-compatible APIs.
  • Gemini / OpenAI side-by-side.

Example Usage

from game_arena.harness import model_generation_http

model = model_generation_http.OpenAIGenericAPIModel(
    model_name="my-local-model",
    api_endpoint="http://127.0.0.1:8082/v1/chat/completions",
    local_model=True,
    model_options={"image_support": False},
)

### Next Steps
- Extend examples beyond chess.
- Add test coverage for error handling and streaming completions.
- Consider creating a general base class for model classes in `model_generation_http.py` to reduce duplication and unify error handling, logging, and request building.

Leopc1977 and others added 11 commits August 21, 2025 14:40
Update model initialization and API handling in model_generation_http.py.
…l parser

Improve error logging in model_generation_http.py.
… instead of 'self_hosted'.

Update model options to include 'image_support' flag in model_generation_http.py for better configuration management.
… error handling for non-local models.

Remove unnecessary print statement in response handling.
…dpoint and image input validation.

Add 'max_tokens' option to model request parameters for better configuration.
…d update example usage.

Adjust image support default value in OpenAIGenericAPIModel.
@google-cla

google-cla Bot commented Aug 22, 2025

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

paulsgh added a commit to taso-labs/game_arena that referenced this pull request Mar 10, 2026
Cherry-picked from upstream PR google-deepmind#5.

Adds OpenAIGenericAPIModel class that enables using any OpenAI-compatible
API endpoint (vLLM, LM Studio, local models, etc.) with Game Arena.
Includes streaming support, multimodal input, and a chess demo script.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
paulsgh added a commit to taso-labs/game_arena that referenced this pull request Mar 11, 2026
…) (#14)

* feat: merge upstream poker refactor with conflict resolution

Cherry-picked from resolve-pr-12 (PR #13) — Matan's conflict resolution
of Google DeepMind's poker refactor.

- Games reorganized into game_arena/harness/games/{chess,go,poker,connect_four,tic_tac_toe}/
- New poker game support added
- Updated model registry, telemetry, game state renderer
- Conflicts resolved favoring upstream patterns
- FreeCiv integration and GitHub workflows preserved

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: Sanitize sensitive data in logging to address CodeQL alerts

Add _sanitize_request_for_logging() to redact Authorization headers

Co-authored-by: Matan <matanhalevy@users.noreply.github.com>

* fix: sanitize headers in _post_request_async to resolve CodeQL alerts

Break taint flow from headers parameter by copying through a sanitize
function and using logging instead of print for request lifecycle messages.
Resolves 4 remaining py/clear-text-logging-sensitive-data alerts on lines
626, 631, 641, 644.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add OpenAIGenericAPIModel for any OpenAI-compatible API

Cherry-picked from upstream PR google-deepmind#5.

Adds OpenAIGenericAPIModel class that enables using any OpenAI-compatible
API endpoint (vLLM, LM Studio, local models, etc.) with Game Arena.
Includes streaming support, multimodal input, and a chess demo script.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: resolve merge conflicts between fork and upstream prompts/templates

- Re-add PromptTemplate enum to prompt_templates.py for backward compat
  with fork's FreeCiv code and demo scripts
- Merge upstream prompts.py constants (CORE_PROMPTS, RETHINK_PROMPTS,
  IMAGE_TEXT_PROMPTS) into prompts/__init__.py to resolve module shadowing
- Remove standalone prompts.py (shadowed by prompts/ package)
- Fix tournament_util references in OpenAIGenericAPIModel (PR #5) to use
  model_generation (renamed in upstream poker refactor)
- Add frozendict to dependencies (required by chess sprite_utils)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address code review — sanitize logging, fix ternary precedence

BLOCKER fixes:
- Sanitize request/headers in OpenAIGenericAPIModel._post_request error
  path using _sanitize_request_for_logging and logging instead of print
- Use _sanitize_request_for_logging(request) for request_for_logging in
  _generate and _generate_streaming returns, and in warning logs

MAJOR fixes:
- Rename _sanitize_headers_for_request to _copy_headers with accurate
  docstring (it copies, not sanitizes)
- Fix operator precedence bug in main_response_and_thoughts ternary:
  `else ""` dropped full_content when reasoning was empty, now correctly
  falls back to `else full_content`

MINOR fixes:
- Fix double space typo in error message
- Use logging instead of print for error output consistency

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Matan <matanhalevy@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant