Skip to main content

Gymie - Server

PyPI npm

WebSocket server that exposes an API to train AI agents on OpenAI Gym and gym-api like environments such as Gym Retro or Unity ML-Agents, this last one with the help of gym wrapper

Content of this document

Installation

Gymie can be installed using:

$ pip install gymie

or by cloning the repo and pip-installing in editable mode from the folder:

$ git clone https://github.com/jscriptcoder/Gymie-Server.git
Cloning into 'Gymie-Server'...
...

$ cd Gymie-Server/
$ pip install -e .
Obtaining file:///path/to/Gymie-Server
...
Successfully installed gymie

How to start the server

You can start the server from the command line:

$ python -m gymie --host 0.0.0.0 --port 5000
(84581) wsgi starting up on http://0.0.0.0:5000

or programmatically:

import gymie

gymie.start('localhost', 9000)

API and how to consume it

A client can communicate with Gymie via JSON, with the following format:

{
  "method": "api_method_name",
  "params": {
    "param1": "string",
    "param2": 6,
    "param3": true,
    "param4": []
  }
}

List of methods exposed to the client

  • make: Instantiates an environment.
// Params:
{
  "env_id": "CartPole-v1",
  "seed":   0 // optional
}

// Response:
{
  "instance_id": "unique-id"
}
  • step: Performs a step on the environment.
// Params:
{
  "instance_id": "instance-id"
  "action":      [1, 0, 1] // MultiBinary action
}

// Response:
[
  [...], // next state
  -2.0,  // reward
  false, // done
  {...}, // info
]
  • reset: Resets the environment.
// Params:
{
  "instance_id": "instance-id"
}

// Response:
[...] // initial state
  • close: Closes the environment.
// Params:
{
  "instance_id": "instance-id"
}

// Response:
true
// Params:
{
  "instance_id": "instance-id"
}

// Response for Discreate observation space:
{
  "name": "Discreate",
  "n":    4
}

// Response for Box (Continuous) observation space:
{
  "name":  "Box",
  "shape": [3],
  "low":   [-5, -5, -5],
  "high":  [5, 5, 5]
}

// Response for MultiBinary observation space:
{
  "name":  "MultiBinary",
  "n":     5,
  "shape": [5]
}

// TODO MultiDiscrete
  • action_space: Generates a dictionary with action space info.
// Params:
{
  "instance_id": "instance-id"
}

// Response for Discreate actions:
{
  "name": "Discreate",
  "n":    4
}

// Response for Box (Continuous) actions:
{
  "name":  "Box",
  "shape": [2],
  "low":   [-1, -1],
  "high":  [1, 1]
}
// Params:
{
 "instance_id": "instance-id"
}

// Response for Discrete actions:
2

// Response for Continuous actions:
[1.52, -3.67]

Programmatic API

  • @override: Decorator to override internal functionality. It takes a string, function's name, as an argument. This is useful if we want to use different gym-like wrappers. For example, both Gym Retro and Unity ML-Agents have different ways to instantiate an environment. You can take a look at the tests to see how it's done for Gym Retro and Unity ML-Agents (with the help of gym-unity). At the moment there are two internal functions that can be overriden, get_env and process_step.

Signature:

def override(func_name: str) -> Callable

How to use:

import retro
from gymie import override
from gym_unity.envs import UnityToGymWrapper
from mlagents_envs.environment import UnityEnvironment, UnityEnvironmentException

@override('get_env')
def retro_get_env(env_id, seed=None):
    """Instantiates a Gym environment"""
    try:
        env = retro.make(game=env_id)
    except FileNotFoundError:
        raise EnvironmentNotFound
    else:
        if seed: 
            env.seed(seed)

        return env


@override('process_step')
def unity_process_step(step):
    """Does some processing of the step"""
    observation, reward, done, info = step
    return observation.tolist(), float(reward), done, {}
  • start: This function takes two arguments, host and port, and starts the server, listening on ws://host:port

Signature:

def start (host: str = '0.0.0.0', port: int = 5000) -> None

How to use:

import gymie

gymie.start('localhost', 8080)

Testing Gymie

You can run all the tests by executing run_tests.sh script:

$ ./run_tests.sh

In order to run test_gymie_retro.py you need to have gym-retro package installed. For tests/test_gymie_unity.py, you need mlagents-envs and gym-unity.

License

MIT License - Copyright (c) 2020 Francisco Ramos

Metadata

Release files for gymie 0.5.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gymie 0.5.4
File Size Uploaded Provenance Actions
gymie-0.5.4.tar.gz 7.3 kB Without provenance Details for gymie-0.5.4.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for gymie 0.5.4
File Interpreter ABI Platform Actions
gymie-0.5.4-py3-none-any.whl Python 3 none any Details for gymie-0.5.4-py3-none-any.whl

Total release size: 16.0 kB

Release files / gymie-0.5.4.tar.gz

Download URL gymie-0.5.4.tar.gz
Size 7.3 kB
Tags Source
SHA-256 checksum
How to use checksums
91bf1ba2ef45d8ff964e6eecd30c3520d2dd54bd66055cda0b815efbb5244fea
BLAKE2b-256 checksum
How to use checksums
10ec66619b4873f29db4c17165acc060800b41e0ae112906198819d9a0d6c62f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.12

Release files / gymie-0.5.4-py3-none-any.whl

Download URL gymie-0.5.4-py3-none-any.whl
Size 8.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a35c9a821d5cb2ab9dd861832dc2a3946e3408043e04e10ba7f1d3fa8a2ed356
BLAKE2b-256 checksum
How to use checksums
8747588430dd449262615c7ccda3afc16775b18545e9dcbe616ed5ef70544f25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.12

Security for gymie 0.5.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page