prediction-market-agent-tooling 0.18.0__tar.gz → 0.20.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.18.0 → prediction_market_agent_tooling-0.20.0}/PKG-INFO +1 -1
  2. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/deploy/agent.py +29 -4
  3. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/markets.py +43 -1
  4. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/balances.py +1 -1
  5. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/pyproject.toml +1 -1
  6. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/LICENSE +0 -0
  7. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/README.md +0 -0
  8. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/abis/erc20.abi.json +0 -0
  9. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/abis/omen_dxdao.abi.json +0 -0
  10. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/abis/omen_fpmm.abi.json +0 -0
  11. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/abis/omen_fpmm_conditionaltokens.abi.json +0 -0
  12. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/abis/omen_fpmm_factory.abi.json +0 -0
  13. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/abis/omen_kleros.abi.json +0 -0
  14. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/abis/omen_oracle.abi.json +0 -0
  15. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/abis/omen_realitio.abi.json +0 -0
  16. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/abis/wxdai.abi.json +0 -0
  17. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/benchmark/__init__.py +0 -0
  18. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/benchmark/agents.py +0 -0
  19. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/benchmark/benchmark.py +0 -0
  20. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/benchmark/utils.py +0 -0
  21. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/config.py +0 -0
  22. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/deploy/agent_example.py +0 -0
  23. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/deploy/constants.py +0 -0
  24. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/deploy/gcp/deploy.py +0 -0
  25. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py +0 -0
  26. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/deploy/gcp/utils.py +0 -0
  27. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/gtypes.py +0 -0
  28. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/agent_market.py +0 -0
  29. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/categorize.py +0 -0
  30. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/data_models.py +0 -0
  31. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/manifold/__init__.py +0 -0
  32. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/manifold/api.py +0 -0
  33. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/manifold/data_models.py +0 -0
  34. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/manifold/manifold.py +0 -0
  35. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/manifold/utils.py +0 -0
  36. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/omen/__init__.py +0 -0
  37. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/omen/data_models.py +0 -0
  38. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/omen/omen.py +0 -0
  39. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/omen/omen_contracts.py +0 -0
  40. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/omen/omen_resolving.py +0 -0
  41. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py +0 -0
  42. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/polymarket/api.py +0 -0
  43. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/polymarket/data_models.py +0 -0
  44. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/polymarket/data_models_web.py +0 -0
  45. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/polymarket/polymarket.py +0 -0
  46. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/markets/polymarket/utils.py +0 -0
  47. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/monitor/langfuse/langfuse_wrapper.py +0 -0
  48. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/monitor/markets/manifold.py +0 -0
  49. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/monitor/markets/omen.py +0 -0
  50. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/monitor/markets/polymarket.py +0 -0
  51. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/monitor/monitor.py +0 -0
  52. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/monitor/monitor_app.py +0 -0
  53. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/monitor/monitor_settings.py +0 -0
  54. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/py.typed +0 -0
  55. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/betting_strategies/kelly_criterion.py +0 -0
  56. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/betting_strategies/market_moving.py +0 -0
  57. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py +0 -0
  58. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py +0 -0
  59. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/cache.py +0 -0
  60. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/contract.py +0 -0
  61. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/costs.py +0 -0
  62. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/gnosis_rpc.py +0 -0
  63. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/google.py +0 -0
  64. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/hexbytes_custom.py +0 -0
  65. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/is_predictable.py +0 -0
  66. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/parallelism.py +0 -0
  67. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/safe.py +0 -0
  68. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/singleton.py +0 -0
  69. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.0}/prediction_market_agent_tooling/tools/utils.py +0 -0
  70. {prediction_market_agent_tooling-0.18.0 → prediction_market_agent_tooling-0.20.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.18.0
3
+ Version: 0.20.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
@@ -3,7 +3,7 @@ import os
3
3
  import tempfile
4
4
  import time
5
5
  import typing as t
6
- from datetime import datetime
6
+ from datetime import datetime, timedelta
7
7
 
8
8
  from loguru import logger
9
9
  from pydantic import BaseModel, BeforeValidator
@@ -30,7 +30,10 @@ from prediction_market_agent_tooling.markets.agent_market import (
30
30
  SortBy,
31
31
  )
32
32
  from prediction_market_agent_tooling.markets.data_models import BetAmount
33
- from prediction_market_agent_tooling.markets.markets import MarketType
33
+ from prediction_market_agent_tooling.markets.markets import (
34
+ MarketType,
35
+ have_bet_on_market_since,
36
+ )
34
37
  from prediction_market_agent_tooling.markets.omen.omen import (
35
38
  redeem_from_all_user_positions,
36
39
  )
@@ -40,6 +43,7 @@ from prediction_market_agent_tooling.monitor.langfuse.langfuse_wrapper import (
40
43
  from prediction_market_agent_tooling.monitor.monitor_app import (
41
44
  MARKET_TYPE_TO_DEPLOYED_AGENT,
42
45
  )
46
+ from prediction_market_agent_tooling.tools.is_predictable import is_predictable_binary
43
47
  from prediction_market_agent_tooling.tools.utils import DatetimeWithTimezone, utcnow
44
48
 
45
49
  MAX_AVAILABLE_MARKETS = 20
@@ -80,6 +84,8 @@ class Answer(BaseModel):
80
84
 
81
85
 
82
86
  class DeployableAgent:
87
+ bet_on_n_markets_per_run: int = 1
88
+
83
89
  def __init__(self) -> None:
84
90
  self.langfuse_wrapper = LangfuseWrapper(agent_name=self.__class__.__name__)
85
91
  self.load()
@@ -93,11 +99,30 @@ class DeployableAgent:
93
99
  def load(self) -> None:
94
100
  pass
95
101
 
102
+ def have_bet_on_market_since(self, market: AgentMarket, since: timedelta) -> bool:
103
+ return have_bet_on_market_since(keys=APIKeys(), market=market, since=since)
104
+
96
105
  def pick_markets(self, markets: t.Sequence[AgentMarket]) -> t.Sequence[AgentMarket]:
97
106
  """
98
- This method should be implemented by the subclass to pick the markets to bet on. By default, it picks only the first market.
107
+ Subclasses can implement their own logic instead of this one, or on top of this one.
108
+ By default, it picks only the first {n_markets_per_run} markets where user didn't bet recently and it's a reasonable question.
99
109
  """
100
- return markets[:1]
110
+ picked: list[AgentMarket] = []
111
+
112
+ for market in markets:
113
+ if len(picked) >= self.bet_on_n_markets_per_run:
114
+ break
115
+
116
+ if self.have_bet_on_market_since(market, since=timedelta(hours=24)):
117
+ continue
118
+
119
+ # Do as a last check, as it uses paid OpenAI API.
120
+ if not is_predictable_binary(market.question):
121
+ continue
122
+
123
+ picked.append(market)
124
+
125
+ return picked
101
126
 
102
127
  def answer_binary_market(self, market: AgentMarket) -> Answer | None:
103
128
  """
@@ -1,19 +1,29 @@
1
1
  import typing as t
2
- from datetime import datetime
2
+ from datetime import datetime, timedelta
3
3
  from enum import Enum
4
4
 
5
+ from prediction_market_agent_tooling.config import APIKeys, PrivateCredentials
5
6
  from prediction_market_agent_tooling.markets.agent_market import (
6
7
  AgentMarket,
7
8
  FilterBy,
8
9
  SortBy,
9
10
  )
11
+ from prediction_market_agent_tooling.markets.manifold.api import (
12
+ get_authenticated_user,
13
+ get_manifold_bets,
14
+ get_manifold_market,
15
+ )
10
16
  from prediction_market_agent_tooling.markets.manifold.manifold import (
11
17
  ManifoldAgentMarket,
12
18
  )
13
19
  from prediction_market_agent_tooling.markets.omen.omen import OmenAgentMarket
20
+ from prediction_market_agent_tooling.markets.omen.omen_subgraph_handler import (
21
+ OmenSubgraphHandler,
22
+ )
14
23
  from prediction_market_agent_tooling.markets.polymarket.polymarket import (
15
24
  PolymarketAgentMarket,
16
25
  )
26
+ from prediction_market_agent_tooling.tools.utils import should_not_happen, utcnow
17
27
 
18
28
 
19
29
  class MarketType(str, Enum):
@@ -52,3 +62,35 @@ def get_binary_markets(
52
62
  excluded_questions=excluded_questions,
53
63
  )
54
64
  return markets
65
+
66
+
67
+ def have_bet_on_market_since(
68
+ keys: APIKeys, market: AgentMarket, since: timedelta
69
+ ) -> bool:
70
+ start_time = utcnow() - since
71
+ credentials = PrivateCredentials.from_api_keys(keys)
72
+ recently_betted_questions = (
73
+ set(
74
+ get_manifold_market(b.contractId).question
75
+ for b in get_manifold_bets(
76
+ user_id=get_authenticated_user(
77
+ keys.manifold_api_key.get_secret_value()
78
+ ).id,
79
+ start_time=start_time,
80
+ end_time=None,
81
+ )
82
+ )
83
+ if isinstance(market, ManifoldAgentMarket)
84
+ else (
85
+ set(
86
+ b.title
87
+ for b in OmenSubgraphHandler().get_bets(
88
+ better_address=credentials.public_key,
89
+ start_time=start_time,
90
+ )
91
+ )
92
+ if isinstance(market, OmenAgentMarket)
93
+ else should_not_happen(f"Uknown market: {market}")
94
+ )
95
+ )
96
+ return market.question in recently_betted_questions
@@ -14,7 +14,7 @@ class Balances(BaseModel):
14
14
  wxdai: xDai
15
15
 
16
16
 
17
- def get_balances(address: ChecksumAddress, web3: Web3 | None) -> Balances:
17
+ def get_balances(address: ChecksumAddress, web3: Web3 | None = None) -> Balances:
18
18
  if not web3:
19
19
  web3 = WrappedxDaiContract().get_web3()
20
20
  xdai_balance = Wei(web3.eth.get_balance(address))
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "prediction-market-agent-tooling"
3
- version = "0.18.0"
3
+ version = "0.20.0"
4
4
  description = "Tools to benchmark, deploy and monitor prediction market agents."
5
5
  authors = ["Gnosis"]
6
6
  readme = "README.md"