Skip to content

Commit

Permalink
Merge pull request #24 from gnosis/evan/deploy-agent
Browse files Browse the repository at this point in the history
Add agent deployment tooling
  • Loading branch information
evangriffiths authored Feb 8, 2024
2 parents 8b71d62 + b2be161 commit c737ded
Show file tree
Hide file tree
Showing 13 changed files with 1,762 additions and 189 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@ pytest tests

Note: these make actual API calls!

## Deploying

To deploy an agent to google cloud, see the example in `examples/cloud_deployment`.

Requires the gcloud cli (see [here](https://cloud.google.com/sdk/docs/install)), and auth to have been completed (i.e. `gcloud auth login`).

## Frameworks implemented

| Framework | Notes |
Expand Down
61 changes: 0 additions & 61 deletions agent.py

This file was deleted.

24 changes: 24 additions & 0 deletions examples/cloud_deployment/agent.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from flask.wrappers import Request
import functions_framework
import random

from prediction_market_agent.data_models.market_data_models import AgentMarket
from prediction_market_agent.deploy.deploy import DeployableAgent
from prediction_market_agent.markets.all_markets import MarketType
from prediction_market_agent.utils import get_keys


class DeployableCoinFlipAgent(DeployableAgent):
def pick_markets(self, markets: list[AgentMarket]) -> list[AgentMarket]:
if len(markets) > 1:
return random.sample(markets, 1)
return markets

def answer_binary_market(self, market: AgentMarket) -> bool:
return random.choice([True, False])


@functions_framework.http
def main(request: Request) -> str:
DeployableCoinFlipAgent().run(market_type=MarketType.MANIFOLD, api_keys=get_keys())
return "Success"
37 changes: 37 additions & 0 deletions examples/cloud_deployment/deploy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import os

from prediction_market_agent.deploy.deploy import (
deploy_to_gcp,
remove_deployed_gcp_function,
run_deployed_gcp_function,
schedule_deployed_gcp_function,
)
from prediction_market_agent.deploy.utils import gcp_function_is_active
from prediction_market_agent.markets.all_markets import MarketType
from prediction_market_agent.utils import get_keys

if __name__ == "__main__":
current_dir = os.path.dirname(os.path.realpath(__file__))
fname = deploy_to_gcp(
requirements_file=f"{current_dir}/../../pyproject.toml",
extra_deps=[
"git+https://github.com/gnosis/prediction-market-agent.git@evan/deploy-agent"
],
function_file=f"{current_dir}/agent.py",
market_type=MarketType.MANIFOLD,
api_keys={"MANIFOLD_API_KEY": get_keys().manifold},
memory=512,
)

# Check that the function is deployed
assert gcp_function_is_active(fname)

# Run the function
response = run_deployed_gcp_function(fname)
assert response.ok

# Schedule the function
schedule_deployed_gcp_function(fname, cron_schedule="* * * * *")

# Delete the function
remove_deployed_gcp_function(fname)
2 changes: 1 addition & 1 deletion mypy.ini
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[mypy]
python_version = 3.9
files = main.py, agent.py, prediction_market_agent/, scripts/, tests/
files = main.py, prediction_market_agent/, scripts/, tests/, examples/
plugins = pydantic.mypy
warn_redundant_casts = True
warn_unused_ignores = True
Expand Down
Loading

0 comments on commit c737ded

Please sign in to comment.