prediction-market-agent-tooling 0.39.2__tar.gz → 0.39.5__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 (75) hide show
  1. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/PKG-INFO +1 -1
  2. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/data_models.py +2 -1
  3. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/manifold/data_models.py +1 -1
  4. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/omen/omen_contracts.py +6 -2
  5. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py +43 -2
  6. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/pyproject.toml +1 -1
  7. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/LICENSE +0 -0
  8. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/README.md +0 -0
  9. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/abis/erc20.abi.json +0 -0
  10. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/abis/omen_dxdao.abi.json +0 -0
  11. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/abis/omen_fpmm.abi.json +0 -0
  12. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/abis/omen_fpmm_conditionaltokens.abi.json +0 -0
  13. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/abis/omen_fpmm_factory.abi.json +0 -0
  14. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/abis/omen_kleros.abi.json +0 -0
  15. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/abis/omen_oracle.abi.json +0 -0
  16. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/abis/omen_realitio.abi.json +0 -0
  17. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/abis/omen_thumbnailmapping.abi.json +0 -0
  18. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/abis/wxdai.abi.json +0 -0
  19. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/benchmark/__init__.py +0 -0
  20. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/benchmark/agents.py +0 -0
  21. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/benchmark/benchmark.py +0 -0
  22. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/benchmark/utils.py +0 -0
  23. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/config.py +0 -0
  24. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/deploy/agent.py +0 -0
  25. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/deploy/agent_example.py +0 -0
  26. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/deploy/constants.py +0 -0
  27. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/deploy/gcp/deploy.py +0 -0
  28. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py +0 -0
  29. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/deploy/gcp/utils.py +0 -0
  30. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/gtypes.py +0 -0
  31. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/loggers.py +0 -0
  32. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/agent_market.py +0 -0
  33. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/categorize.py +0 -0
  34. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/manifold/__init__.py +0 -0
  35. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/manifold/api.py +0 -0
  36. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/manifold/manifold.py +0 -0
  37. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/manifold/utils.py +0 -0
  38. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/markets.py +0 -0
  39. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/omen/__init__.py +0 -0
  40. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/omen/data_models.py +0 -0
  41. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/omen/omen.py +0 -0
  42. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/omen/omen_resolving.py +0 -0
  43. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/polymarket/api.py +0 -0
  44. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/polymarket/data_models.py +0 -0
  45. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/polymarket/data_models_web.py +0 -0
  46. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/polymarket/polymarket.py +0 -0
  47. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/markets/polymarket/utils.py +0 -0
  48. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/monitor/langfuse/langfuse_wrapper.py +0 -0
  49. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/monitor/markets/manifold.py +0 -0
  50. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/monitor/markets/omen.py +0 -0
  51. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/monitor/markets/polymarket.py +0 -0
  52. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/monitor/monitor.py +0 -0
  53. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/monitor/monitor_app.py +0 -0
  54. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/monitor/monitor_settings.py +0 -0
  55. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/py.typed +0 -0
  56. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/balances.py +0 -0
  57. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/betting_strategies/kelly_criterion.py +0 -0
  58. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/betting_strategies/market_moving.py +0 -0
  59. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py +0 -0
  60. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py +0 -0
  61. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/cache.py +0 -0
  62. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/contract.py +0 -0
  63. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/costs.py +0 -0
  64. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/gnosis_rpc.py +0 -0
  65. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/google.py +0 -0
  66. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/hexbytes_custom.py +0 -0
  67. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/image_gen/image_gen.py +0 -0
  68. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/image_gen/market_thumbnail_gen.py +0 -0
  69. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/is_predictable.py +0 -0
  70. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/parallelism.py +0 -0
  71. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/safe.py +0 -0
  72. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/singleton.py +0 -0
  73. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/streamlit_user_login.py +0 -0
  74. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/prediction_market_agent_tooling/tools/utils.py +0 -0
  75. {prediction_market_agent_tooling-0.39.2 → prediction_market_agent_tooling-0.39.5}/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.39.2
3
+ Version: 0.39.5
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.12
@@ -2,7 +2,7 @@ from datetime import datetime
2
2
  from enum import Enum
3
3
  from typing import TypeAlias
4
4
 
5
- from pydantic import BaseModel
5
+ from pydantic import BaseModel, computed_field
6
6
 
7
7
  from prediction_market_agent_tooling.gtypes import OutcomeStr
8
8
 
@@ -41,6 +41,7 @@ class ResolvedBet(Bet):
41
41
  resolved_time: datetime
42
42
  profit: ProfitAmount
43
43
 
44
+ @computed_field # type: ignore[misc]
44
45
  @property
45
46
  def is_correct(self) -> bool:
46
47
  return self.outcome == self.market_outcome
@@ -150,7 +150,7 @@ class ManifoldBet(BaseModel):
150
150
  id: str
151
151
  fees: ManifoldBetFees
152
152
  isCancelled: t.Optional[bool] = None
153
- loanAmount: Mana
153
+ loanAmount: Mana | None
154
154
  orderAmount: t.Optional[Mana] = None
155
155
  fills: t.Optional[list[ManifoldBetFills]] = None
156
156
  createdTime: datetime
@@ -627,9 +627,13 @@ class OmenThumbnailMapping(ContractOnGnosisChain):
627
627
  )
628
628
  )
629
629
  address: ChecksumAddress = Web3.to_checksum_address(
630
- "0x5D8B7B619EcdE05B8A94C0a0E99E0A0727A0e2e7"
630
+ "0xe0cf08311F03850497B0ed6A2cf067f1750C3eFc"
631
631
  )
632
632
 
633
+ @staticmethod
634
+ def construct_ipfs_url(ipfs_hash: IPFSCIDVersion0) -> str:
635
+ return f"https://ipfs.io/ipfs/{ipfs_hash}"
636
+
633
637
  def get(
634
638
  self,
635
639
  market_address: ChecksumAddress,
@@ -646,7 +650,7 @@ class OmenThumbnailMapping(ContractOnGnosisChain):
646
650
  web3: Web3 | None = None,
647
651
  ) -> str | None:
648
652
  hash_ = self.get(market_address, web3)
649
- return f"https://ipfs.io/ipfs/{hash_}" if hash_ is not None else None
653
+ return self.construct_ipfs_url(hash_) if hash_ is not None else None
650
654
 
651
655
  def set(
652
656
  self,
@@ -2,8 +2,11 @@ import sys
2
2
  import typing as t
3
3
  from datetime import datetime
4
4
 
5
+ import requests
5
6
  import tenacity
6
7
  from eth_typing import ChecksumAddress
8
+ from PIL import Image
9
+ from PIL.Image import Image as ImageType
7
10
  from subgrounds import FieldPath, Subgrounds
8
11
 
9
12
  from prediction_market_agent_tooling.config import APIKeys
@@ -20,9 +23,15 @@ from prediction_market_agent_tooling.markets.omen.data_models import (
20
23
  RealityAnswer,
21
24
  RealityQuestion,
22
25
  )
26
+ from prediction_market_agent_tooling.markets.omen.omen_contracts import (
27
+ OmenThumbnailMapping,
28
+ )
23
29
  from prediction_market_agent_tooling.tools.singleton import SingletonMeta
24
30
  from prediction_market_agent_tooling.tools.utils import to_int_timestamp, utcnow
25
- from prediction_market_agent_tooling.tools.web3_utils import ZERO_BYTES
31
+ from prediction_market_agent_tooling.tools.web3_utils import (
32
+ ZERO_BYTES,
33
+ byte32_to_ipfscidv0,
34
+ )
26
35
 
27
36
 
28
37
  class OmenSubgraphHandler(metaclass=SingletonMeta):
@@ -36,6 +45,11 @@ class OmenSubgraphHandler(metaclass=SingletonMeta):
36
45
 
37
46
  REALITYETH_GRAPH_URL = "https://gateway-arbitrum.network.thegraph.com/api/{graph_api_key}/subgraphs/id/E7ymrCnNcQdAAgLbdFWzGE5mvr5Mb5T9VfT43FqA7bNh"
38
47
 
48
+ # TODO: Switch to arbitrum subgraph once it's published.
49
+ OMEN_IMAGE_MAPPING_GRAPH_URL = (
50
+ "https://api.studio.thegraph.com/query/63564/omen-thumbnailmapping/v0.0.3"
51
+ )
52
+
39
53
  INVALID_ANSWER = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
40
54
 
41
55
  def __init__(self) -> None:
@@ -66,6 +80,11 @@ class OmenSubgraphHandler(metaclass=SingletonMeta):
66
80
  graph_api_key=keys.graph_api_key.get_secret_value()
67
81
  )
68
82
  )
83
+ self.omen_image_mapping_subgraph = self.sg.load_subgraph(
84
+ self.OMEN_IMAGE_MAPPING_GRAPH_URL.format(
85
+ graph_api_key=keys.graph_api_key.get_secret_value()
86
+ )
87
+ )
69
88
 
70
89
  def _get_fields_for_bets(self, bets_field: FieldPath) -> list[FieldPath]:
71
90
  markets = bets_field.fpmm
@@ -383,7 +402,9 @@ class OmenSubgraphHandler(metaclass=SingletonMeta):
383
402
  for result_chunk in result:
384
403
  for k, v in result_chunk.items():
385
404
  # subgrounds might pack all items as a list, indexed by a key, or pack it as a dictionary (if one single element)
386
- if isinstance(v, dict):
405
+ if v is None:
406
+ continue
407
+ elif isinstance(v, dict):
387
408
  items.extend([v])
388
409
  else:
389
410
  items.extend(v)
@@ -607,3 +628,23 @@ class OmenSubgraphHandler(metaclass=SingletonMeta):
607
628
  f"Incorrect number of markets fetched {len(markets)}, expected 1."
608
629
  )
609
630
  return markets[0]
631
+
632
+ def get_market_image_url(self, market_id: HexAddress) -> str | None:
633
+ image = self.omen_image_mapping_subgraph.Query.omenThumbnailMapping(
634
+ id=market_id.lower()
635
+ )
636
+ fields = [image.id, image.image_hash]
637
+ result = self.sg.query_json(fields)
638
+ items = self._parse_items_from_json(result)
639
+ if not items:
640
+ return None
641
+ parsed = byte32_to_ipfscidv0(HexBytes(items[0]["image_hash"]))
642
+ return OmenThumbnailMapping.construct_ipfs_url(parsed)
643
+
644
+ def get_market_image(self, market_id: HexAddress) -> ImageType | None:
645
+ image_url = self.get_market_image_url(market_id)
646
+ return (
647
+ Image.open(requests.get(image_url, stream=True).raw)
648
+ if image_url is not None
649
+ else None
650
+ )
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "prediction-market-agent-tooling"
3
- version = "0.39.2"
3
+ version = "0.39.5"
4
4
  description = "Tools to benchmark, deploy and monitor prediction market agents."
5
5
  authors = ["Gnosis"]
6
6
  readme = "README.md"