Skip to main content

DotaService

dotaservice icon

NOTE: The project that uses the dotaservice in a k8s environment is the DotaClient repo.

DotaService is a service to play Dota 2 through gRPC. There are first class python bindings and examples, so you can play dota as you would use the OpenAI gym API.

It's fully functional and super lightweight. Starting Dota obs = env.reset() takes 5 seconds, and each obs = env.step(action) in the environment takes between 10 and 30 ms.

You can even set the config of render=True and you can watch the game play live. Each game will have a uuid and folder associated where there's a Dota demo (replay) and console logs.

demo

Run DotaService Locally

Run the DotaService so you can connect your client to it later. Only one client per server is supported, and only one DotaService per VM (eg local or one per docker container).

python3 -m dotaservice
>>> Serving on 127.0.0.1:13337

Run DotaService Distributed

See docker/README.md.

To run two dockerservice instances, one on port 13337 and one on 13338, f.e. run:

docker run -dp 13337:13337 ds
docker run -dp 13338:13337 ds

You can run as many as you want, until you run out of ports or ip addresses. If you are wearing your fancy pants, use Kubernetes to deploy gazillions.

Client Code

from grpclib.client import Channel
from protobuf.DotaService_grpc import DotaServiceStub
from protobuf.DotaService_pb2 import Action
from protobuf.DotaService_pb2 import Config

# Connect to the DotaService.
env = DotaServiceStub(Channel('127.0.0.1', 13337))

# Get the initial observation.
observation = await env.reset(Config())
for i in range(8):
    # Sample an action from the action protobuf
    action = Action.MoveToLocation(x=.., y=.., z=..)
    # Take an action, returning the resulting observation.
    observation = await env.step(action)

This is very useful to provide an environment for reinforcement learning, and service aspect of it makes it especially useful for distributed training. I am planning to provide a client python module for this (PyDota) that mimics typical OpenAI gym APIs. Maybe I won't even make PyDota and the gRPC client is enough.

dotaservice connections

Requirements

  • Python 3.7
  • Unix: MacOS, Ubuntu. A dockerfile is also provided see: docker/README.md.

Installation

Installing from pypi:

pip3 install dotaservice

For development; installing from source:

pip3 install -e .

(Optional) Compile the protos for Python (run from repository root):

python3 -m grpc_tools.protoc -I. --python_out=. --python_grpc_out=. --grpc_python_out=. dotaservice/protos/*.proto

Notes

My dev notes: NOTES.md.


Acknowledgements

Metadata

Release files for dotaservice 0.3.9

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

Source distribution (sdist)

Source distribution for dotaservice 0.3.9
File Size Uploaded
dotaservice-0.3.9.tar.gz 71.5 kB Details

Built distribution (wheel)

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

Total release size: 146.9 kB

Release files / dotaservice-0.3.9.tar.gz

Download URL dotaservice-0.3.9.tar.gz
Size 71.5 kB
Tags Source
SHA-256 checksum
How to use checksums
aef9c17ca9d069dcdba9f33f83abb6fe76cbabc91604071e9c8a7b3f81243c32
BLAKE2b-256 checksum
How to use checksums
8e696de5b245aef4dcbdfd69541d07fec6283985ab3723c9c5a03bc13c2d7203
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

Release files / dotaservice-0.3.9-py3-none-any.whl

Download URL dotaservice-0.3.9-py3-none-any.whl
Size 75.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2c44794ee11e00f5e4e48d4e9b7d5791eb7811fdbc68c5cb23e72ddea9cd5a5b
BLAKE2b-256 checksum
How to use checksums
791923ddb41bf9457766d52729374993dc6cadf4bb055a3d4fce35bd9007ba56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2

Release history Release notifications | RSS feed

This release

0.3.9 This release

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

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