prediction-market-agent-tooling 0.16.0__tar.gz → 0.17.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/PKG-INFO +1 -1
  2. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/benchmark/agents.py +5 -2
  3. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/benchmark/utils.py +2 -3
  4. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/deploy/agent.py +40 -3
  5. prediction_market_agent_tooling-0.17.0/prediction_market_agent_tooling/deploy/agent_example.py +28 -0
  6. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/pyproject.toml +1 -1
  7. prediction_market_agent_tooling-0.16.0/prediction_market_agent_tooling/deploy/agent_example.py +0 -18
  8. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/LICENSE +0 -0
  9. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/README.md +0 -0
  10. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/abis/erc20.abi.json +0 -0
  11. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/abis/omen_dxdao.abi.json +0 -0
  12. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/abis/omen_fpmm.abi.json +0 -0
  13. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/abis/omen_fpmm_conditionaltokens.abi.json +0 -0
  14. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/abis/omen_fpmm_factory.abi.json +0 -0
  15. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/abis/omen_kleros.abi.json +0 -0
  16. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/abis/omen_oracle.abi.json +0 -0
  17. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/abis/omen_realitio.abi.json +0 -0
  18. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/abis/wxdai.abi.json +0 -0
  19. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/benchmark/__init__.py +0 -0
  20. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/benchmark/benchmark.py +0 -0
  21. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/config.py +0 -0
  22. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/deploy/constants.py +0 -0
  23. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/deploy/gcp/deploy.py +0 -0
  24. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py +0 -0
  25. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/deploy/gcp/utils.py +0 -0
  26. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/gtypes.py +0 -0
  27. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/agent_market.py +0 -0
  28. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/categorize.py +0 -0
  29. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/data_models.py +0 -0
  30. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/manifold/__init__.py +0 -0
  31. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/manifold/api.py +0 -0
  32. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/manifold/data_models.py +0 -0
  33. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/manifold/manifold.py +0 -0
  34. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/manifold/utils.py +0 -0
  35. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/markets.py +0 -0
  36. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/omen/__init__.py +0 -0
  37. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/omen/data_models.py +0 -0
  38. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/omen/omen.py +0 -0
  39. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/omen/omen_contracts.py +0 -0
  40. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/omen/omen_resolving.py +0 -0
  41. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py +0 -0
  42. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/polymarket/api.py +0 -0
  43. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/polymarket/data_models.py +0 -0
  44. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/polymarket/data_models_web.py +0 -0
  45. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/polymarket/polymarket.py +0 -0
  46. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/markets/polymarket/utils.py +0 -0
  47. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/monitor/markets/manifold.py +0 -0
  48. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/monitor/markets/omen.py +0 -0
  49. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/monitor/markets/polymarket.py +0 -0
  50. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/monitor/monitor.py +0 -0
  51. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/monitor/monitor_app.py +0 -0
  52. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/monitor/monitor_settings.py +0 -0
  53. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/py.typed +0 -0
  54. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/balances.py +0 -0
  55. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/betting_strategies/kelly_criterion.py +0 -0
  56. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/betting_strategies/market_moving.py +0 -0
  57. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py +0 -0
  58. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py +0 -0
  59. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/cache.py +0 -0
  60. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/contract.py +0 -0
  61. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/costs.py +0 -0
  62. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/gnosis_rpc.py +0 -0
  63. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/google.py +0 -0
  64. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/hexbytes_custom.py +0 -0
  65. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/is_predictable.py +0 -0
  66. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/parallelism.py +0 -0
  67. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/safe.py +0 -0
  68. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/singleton.py +0 -0
  69. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/utils.py +0 -0
  70. {prediction_market_agent_tooling-0.16.0 → prediction_market_agent_tooling-0.17.0}/prediction_market_agent_tooling/tools/web3_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.16.0
3
+ Version: 0.17.0
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.12
@@ -6,6 +6,7 @@ from prediction_market_agent_tooling.benchmark.utils import (
6
6
  OutcomePrediction,
7
7
  Prediction,
8
8
  )
9
+ from prediction_market_agent_tooling.gtypes import Probability
9
10
 
10
11
 
11
12
  class AbstractBenchmarkedAgent:
@@ -86,7 +87,8 @@ class RandomAgent(AbstractBenchmarkedAgent):
86
87
  p_yes, confidence = random.random(), random.random()
87
88
  return Prediction(
88
89
  outcome_prediction=OutcomePrediction(
89
- p_yes=p_yes,
90
+ decision=p_yes > 0.5,
91
+ p_yes=Probability(p_yes),
90
92
  confidence=confidence,
91
93
  info_utility=None,
92
94
  ),
@@ -109,7 +111,8 @@ class FixedAgent(AbstractBenchmarkedAgent):
109
111
  p_yes, confidence = 1.0 if self.fixed_answer else 0.0, 1.0
110
112
  return Prediction(
111
113
  outcome_prediction=OutcomePrediction(
112
- p_yes=p_yes,
114
+ decision=self.fixed_answer,
115
+ p_yes=Probability(p_yes),
113
116
  confidence=confidence,
114
117
  info_utility=None,
115
118
  ),
@@ -3,12 +3,11 @@ import typing as t
3
3
 
4
4
  from pydantic import BaseModel
5
5
 
6
+ from prediction_market_agent_tooling.deploy.agent import Answer
6
7
  from prediction_market_agent_tooling.markets.data_models import Resolution
7
8
 
8
9
 
9
- class OutcomePrediction(BaseModel):
10
- p_yes: float
11
- confidence: float
10
+ class OutcomePrediction(Answer):
12
11
  info_utility: t.Optional[float]
13
12
 
14
13
  @property
@@ -6,6 +6,8 @@ import typing as t
6
6
  from datetime import datetime
7
7
 
8
8
  from loguru import logger
9
+ from pydantic import BaseModel, BeforeValidator
10
+ from typing_extensions import Annotated
9
11
 
10
12
  from prediction_market_agent_tooling.config import APIKeys, PrivateCredentials
11
13
  from prediction_market_agent_tooling.deploy.constants import (
@@ -21,6 +23,7 @@ from prediction_market_agent_tooling.deploy.gcp.utils import (
21
23
  gcp_function_is_active,
22
24
  gcp_resolve_api_keys_secrets,
23
25
  )
26
+ from prediction_market_agent_tooling.gtypes import Probability
24
27
  from prediction_market_agent_tooling.markets.agent_market import (
25
28
  AgentMarket,
26
29
  FilterBy,
@@ -39,6 +42,40 @@ from prediction_market_agent_tooling.tools.utils import DatetimeWithTimezone, ut
39
42
  MAX_AVAILABLE_MARKETS = 20
40
43
 
41
44
 
45
+ def to_boolean_outcome(value: str | bool) -> bool:
46
+ if isinstance(value, bool):
47
+ return value
48
+
49
+ elif isinstance(value, str):
50
+ value = value.lower().strip()
51
+
52
+ if value in {"true", "yes", "y", "1"}:
53
+ return True
54
+
55
+ elif value in {"false", "no", "n", "0"}:
56
+ return False
57
+
58
+ else:
59
+ raise ValueError(f"Expected a boolean string, but got {value}")
60
+
61
+ else:
62
+ raise ValueError(f"Expected a boolean or a string, but got {value}")
63
+
64
+
65
+ Decision = Annotated[bool, BeforeValidator(to_boolean_outcome)]
66
+
67
+
68
+ class Answer(BaseModel):
69
+ decision: Decision # Warning: p_yes > 0.5 doesn't necessarily mean decision is True! For example, if our p_yes is 55%, but market's p_yes is 80%, then it might be profitable to bet on False.
70
+ p_yes: Probability
71
+ confidence: float
72
+ reasoning: str | None = None
73
+
74
+ @property
75
+ def p_no(self) -> Probability:
76
+ return Probability(1 - self.p_yes)
77
+
78
+
42
79
  class DeployableAgent:
43
80
  def __init__(self) -> None:
44
81
  self.load()
@@ -58,7 +95,7 @@ class DeployableAgent:
58
95
  """
59
96
  return markets[:1]
60
97
 
61
- def answer_binary_market(self, market: AgentMarket) -> bool | None:
98
+ def answer_binary_market(self, market: AgentMarket) -> Answer | None:
62
99
  """
63
100
  Answer the binary market. This method must be implemented by the subclass.
64
101
  """
@@ -157,7 +194,7 @@ def {entrypoint_function_name}(request) -> str:
157
194
  if cron_schedule:
158
195
  schedule_deployed_gcp_function(fname, cron_schedule=cron_schedule)
159
196
 
160
- def calculate_bet_amount(self, answer: bool, market: AgentMarket) -> BetAmount:
197
+ def calculate_bet_amount(self, answer: Answer, market: AgentMarket) -> BetAmount:
161
198
  """
162
199
  Calculate the bet amount. By default, it returns the minimum bet amount.
163
200
  """
@@ -205,7 +242,7 @@ def {entrypoint_function_name}(request) -> str:
205
242
  )
206
243
  market.place_bet(
207
244
  amount=amount,
208
- outcome=result,
245
+ outcome=result.decision,
209
246
  )
210
247
 
211
248
  def after(self, market_type: MarketType) -> None:
@@ -0,0 +1,28 @@
1
+ import random
2
+ import typing as t
3
+
4
+ from prediction_market_agent_tooling.deploy.agent import (
5
+ Answer,
6
+ DeployableAgent,
7
+ Probability,
8
+ )
9
+ from prediction_market_agent_tooling.markets.agent_market import AgentMarket
10
+
11
+
12
+ class DeployableCoinFlipAgent(DeployableAgent):
13
+ def pick_markets(self, markets: t.Sequence[AgentMarket]) -> t.Sequence[AgentMarket]:
14
+ return random.sample(markets, 1)
15
+
16
+ def answer_binary_market(self, market: AgentMarket) -> Answer | None:
17
+ decision = random.choice([True, False])
18
+ return Answer(
19
+ decision=decision,
20
+ p_yes=Probability(float(decision)),
21
+ confidence=0.5,
22
+ reasoning="I flipped a coin to decide.",
23
+ )
24
+
25
+
26
+ class DeployableAlwaysRaiseAgent(DeployableAgent):
27
+ def answer_binary_market(self, market: AgentMarket) -> Answer | None:
28
+ raise RuntimeError("I always raise!")
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "prediction-market-agent-tooling"
3
- version = "0.16.0"
3
+ version = "0.17.0"
4
4
  description = "Tools to benchmark, deploy and monitor prediction market agents."
5
5
  authors = ["Gnosis"]
6
6
  readme = "README.md"
@@ -1,18 +0,0 @@
1
- import random
2
- import typing as t
3
-
4
- from prediction_market_agent_tooling.deploy.agent import DeployableAgent
5
- from prediction_market_agent_tooling.markets.agent_market import AgentMarket
6
-
7
-
8
- class DeployableCoinFlipAgent(DeployableAgent):
9
- def pick_markets(self, markets: t.Sequence[AgentMarket]) -> t.Sequence[AgentMarket]:
10
- return random.sample(markets, 1)
11
-
12
- def answer_binary_market(self, market: AgentMarket) -> bool | None:
13
- return random.choice([True, False])
14
-
15
-
16
- class DeployableAlwaysRaiseAgent(DeployableAgent):
17
- def answer_binary_market(self, market: AgentMarket) -> bool | None:
18
- raise RuntimeError("I always raise!")