prediction-market-agent-tooling 0.57.6__py3-none-any.whl → 0.57.8__py3-none-any.whl

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.
@@ -0,0 +1,291 @@
1
+ [
2
+ {
3
+ "type": "constructor",
4
+ "inputs": [],
5
+ "stateMutability": "nonpayable"
6
+ },
7
+ {
8
+ "type": "function",
9
+ "name": "adjustMinimumValueForSendingMessage",
10
+ "inputs": [
11
+ {
12
+ "name": "newValue",
13
+ "type": "uint256",
14
+ "internalType": "uint256"
15
+ }
16
+ ],
17
+ "outputs": [],
18
+ "stateMutability": "nonpayable"
19
+ },
20
+ {
21
+ "type": "function",
22
+ "name": "countMessages",
23
+ "inputs": [
24
+ {
25
+ "name": "agentAddress",
26
+ "type": "address",
27
+ "internalType": "address"
28
+ }
29
+ ],
30
+ "outputs": [
31
+ {
32
+ "name": "",
33
+ "type": "uint256",
34
+ "internalType": "uint256"
35
+ }
36
+ ],
37
+ "stateMutability": "view"
38
+ },
39
+ {
40
+ "type": "function",
41
+ "name": "getAtIndex",
42
+ "inputs": [
43
+ {
44
+ "name": "agentAddress",
45
+ "type": "address",
46
+ "internalType": "address"
47
+ },
48
+ {
49
+ "name": "idx",
50
+ "type": "uint256",
51
+ "internalType": "uint256"
52
+ }
53
+ ],
54
+ "outputs": [
55
+ {
56
+ "name": "",
57
+ "type": "tuple",
58
+ "internalType": "struct DoubleEndedStructQueue.MessageContainer",
59
+ "components": [
60
+ {
61
+ "name": "sender",
62
+ "type": "address",
63
+ "internalType": "address"
64
+ },
65
+ {
66
+ "name": "recipient",
67
+ "type": "address",
68
+ "internalType": "address"
69
+ },
70
+ {
71
+ "name": "message",
72
+ "type": "bytes",
73
+ "internalType": "bytes"
74
+ },
75
+ {
76
+ "name": "value",
77
+ "type": "uint256",
78
+ "internalType": "uint256"
79
+ }
80
+ ]
81
+ }
82
+ ],
83
+ "stateMutability": "view"
84
+ },
85
+ {
86
+ "type": "function",
87
+ "name": "minimumValueForSendingMessageInWei",
88
+ "inputs": [],
89
+ "outputs": [
90
+ {
91
+ "name": "",
92
+ "type": "uint256",
93
+ "internalType": "uint256"
94
+ }
95
+ ],
96
+ "stateMutability": "view"
97
+ },
98
+ {
99
+ "type": "function",
100
+ "name": "owner",
101
+ "inputs": [],
102
+ "outputs": [
103
+ {
104
+ "name": "",
105
+ "type": "address",
106
+ "internalType": "address"
107
+ }
108
+ ],
109
+ "stateMutability": "view"
110
+ },
111
+ {
112
+ "type": "function",
113
+ "name": "popNextMessage",
114
+ "inputs": [
115
+ {
116
+ "name": "agentAddress",
117
+ "type": "address",
118
+ "internalType": "address"
119
+ }
120
+ ],
121
+ "outputs": [
122
+ {
123
+ "name": "",
124
+ "type": "tuple",
125
+ "internalType": "struct DoubleEndedStructQueue.MessageContainer",
126
+ "components": [
127
+ {
128
+ "name": "sender",
129
+ "type": "address",
130
+ "internalType": "address"
131
+ },
132
+ {
133
+ "name": "recipient",
134
+ "type": "address",
135
+ "internalType": "address"
136
+ },
137
+ {
138
+ "name": "message",
139
+ "type": "bytes",
140
+ "internalType": "bytes"
141
+ },
142
+ {
143
+ "name": "value",
144
+ "type": "uint256",
145
+ "internalType": "uint256"
146
+ }
147
+ ]
148
+ }
149
+ ],
150
+ "stateMutability": "nonpayable"
151
+ },
152
+ {
153
+ "type": "function",
154
+ "name": "queues",
155
+ "inputs": [
156
+ {
157
+ "name": "",
158
+ "type": "address",
159
+ "internalType": "address"
160
+ }
161
+ ],
162
+ "outputs": [
163
+ {
164
+ "name": "_begin",
165
+ "type": "uint128",
166
+ "internalType": "uint128"
167
+ },
168
+ {
169
+ "name": "_end",
170
+ "type": "uint128",
171
+ "internalType": "uint128"
172
+ }
173
+ ],
174
+ "stateMutability": "view"
175
+ },
176
+ {
177
+ "type": "function",
178
+ "name": "renounceOwnership",
179
+ "inputs": [],
180
+ "outputs": [],
181
+ "stateMutability": "nonpayable"
182
+ },
183
+ {
184
+ "type": "function",
185
+ "name": "sendMessage",
186
+ "inputs": [
187
+ {
188
+ "name": "agentAddress",
189
+ "type": "address",
190
+ "internalType": "address"
191
+ },
192
+ {
193
+ "name": "message",
194
+ "type": "bytes",
195
+ "internalType": "bytes"
196
+ }
197
+ ],
198
+ "outputs": [],
199
+ "stateMutability": "payable"
200
+ },
201
+ {
202
+ "type": "function",
203
+ "name": "transferOwnership",
204
+ "inputs": [
205
+ {
206
+ "name": "newOwner",
207
+ "type": "address",
208
+ "internalType": "address"
209
+ }
210
+ ],
211
+ "outputs": [],
212
+ "stateMutability": "nonpayable"
213
+ },
214
+ {
215
+ "type": "event",
216
+ "name": "LogMessage",
217
+ "inputs": [
218
+ {
219
+ "name": "sender",
220
+ "type": "address",
221
+ "indexed": true,
222
+ "internalType": "address"
223
+ },
224
+ {
225
+ "name": "agentAddress",
226
+ "type": "address",
227
+ "indexed": true,
228
+ "internalType": "address"
229
+ },
230
+ {
231
+ "name": "message",
232
+ "type": "bytes",
233
+ "indexed": false,
234
+ "internalType": "bytes"
235
+ },
236
+ {
237
+ "name": "value",
238
+ "type": "uint256",
239
+ "indexed": false,
240
+ "internalType": "uint256"
241
+ }
242
+ ],
243
+ "anonymous": false
244
+ },
245
+ {
246
+ "type": "event",
247
+ "name": "OwnershipTransferred",
248
+ "inputs": [
249
+ {
250
+ "name": "previousOwner",
251
+ "type": "address",
252
+ "indexed": true,
253
+ "internalType": "address"
254
+ },
255
+ {
256
+ "name": "newOwner",
257
+ "type": "address",
258
+ "indexed": true,
259
+ "internalType": "address"
260
+ }
261
+ ],
262
+ "anonymous": false
263
+ },
264
+ {
265
+ "type": "error",
266
+ "name": "MessageNotSentByAgent",
267
+ "inputs": []
268
+ },
269
+ {
270
+ "type": "error",
271
+ "name": "OwnableInvalidOwner",
272
+ "inputs": [
273
+ {
274
+ "name": "owner",
275
+ "type": "address",
276
+ "internalType": "address"
277
+ }
278
+ ]
279
+ },
280
+ {
281
+ "type": "error",
282
+ "name": "OwnableUnauthorizedAccount",
283
+ "inputs": [
284
+ {
285
+ "name": "account",
286
+ "type": "address",
287
+ "internalType": "address"
288
+ }
289
+ ]
290
+ }
291
+ ]
@@ -3,13 +3,17 @@ from pydantic import BaseModel, ConfigDict, Field
3
3
  from prediction_market_agent_tooling.gtypes import HexBytes
4
4
 
5
5
 
6
+ class SeerParentMarket(BaseModel):
7
+ id: HexBytes
8
+
9
+
6
10
  class SeerMarket(BaseModel):
7
11
  model_config = ConfigDict(populate_by_name=True)
8
12
 
9
13
  id: HexBytes
10
14
  title: str = Field(alias="marketName")
11
15
  outcomes: list[str]
12
- parent_market: HexBytes = Field(alias="parentMarket")
16
+ parent_market: SeerParentMarket | None = Field(alias="parentMarket")
13
17
  wrapped_tokens: list[HexBytes] = Field(alias="wrappedTokens")
14
18
 
15
19
 
@@ -47,7 +47,7 @@ class SeerSubgraphHandler(BaseSubgraphHandler):
47
47
  markets_field.creator,
48
48
  markets_field.marketName,
49
49
  markets_field.outcomes,
50
- markets_field.parentMarket,
50
+ markets_field.parentMarket.id,
51
51
  markets_field.finalizeTs,
52
52
  markets_field.wrappedTokens,
53
53
  ]
@@ -98,7 +98,9 @@ def db_cache(
98
98
  if not api_keys.ENABLE_CACHE:
99
99
  return func(*args, **kwargs)
100
100
 
101
- DBManager(api_keys).create_tables([FunctionCache])
101
+ DBManager(api_keys.sqlalchemy_db_url.get_secret_value()).create_tables(
102
+ [FunctionCache]
103
+ )
102
104
 
103
105
  # Convert *args and **kwargs to a single dictionary, where we have names for arguments passed as args as well.
104
106
  signature = inspect.signature(func)
@@ -143,7 +145,9 @@ def db_cache(
143
145
  return_type
144
146
  )
145
147
 
146
- with DBManager(api_keys).get_session() as session:
148
+ with DBManager(
149
+ api_keys.sqlalchemy_db_url.get_secret_value()
150
+ ).get_session() as session:
147
151
  # Try to get cached result
148
152
  statement = (
149
153
  select(FunctionCache)
@@ -196,7 +200,9 @@ def db_cache(
196
200
  result=computed_result,
197
201
  created_at=utcnow(),
198
202
  )
199
- with DBManager(api_keys).get_session() as session:
203
+ with DBManager(
204
+ api_keys.sqlalchemy_db_url.get_secret_value()
205
+ ).get_session() as session:
200
206
  logger.info(f"Saving {cache_entry} into database.")
201
207
  session.add(cache_entry)
202
208
  session.commit()
@@ -18,6 +18,8 @@ from prediction_market_agent_tooling.gtypes import (
18
18
  TxReceipt,
19
19
  Wei,
20
20
  )
21
+ from prediction_market_agent_tooling.tools.data_models import MessageContainer
22
+ from prediction_market_agent_tooling.tools.hexbytes_custom import HexBytes
21
23
  from prediction_market_agent_tooling.tools.utils import DatetimeUTC, should_not_happen
22
24
  from prediction_market_agent_tooling.tools.web3_utils import (
23
25
  call_function_on_contract,
@@ -533,6 +535,88 @@ class DebuggingContract(ContractOnGnosisChain):
533
535
  )
534
536
 
535
537
 
538
+ class AgentCommunicationContract(ContractOnGnosisChain):
539
+ # Contract ABI taken from built https://github.com/gnosis/labs-contracts.
540
+ abi: ABI = abi_field_validator(
541
+ os.path.join(
542
+ os.path.dirname(os.path.realpath(__file__)),
543
+ "../abis/agentcommunication.abi.json",
544
+ )
545
+ )
546
+
547
+ address: ChecksumAddress = Web3.to_checksum_address(
548
+ "0x62872578920427ae24b2527697dAb90CD1F4CA45"
549
+ )
550
+
551
+ def count_unseen_messages(
552
+ self,
553
+ agent_address: ChecksumAddress,
554
+ web3: Web3 | None = None,
555
+ ) -> int:
556
+ unseen_message_count: int = self.call(
557
+ "countMessages", function_params=[agent_address], web3=web3
558
+ )
559
+ return unseen_message_count
560
+
561
+ def get_at_index(
562
+ self,
563
+ agent_address: ChecksumAddress,
564
+ idx: int,
565
+ web3: Web3 | None = None,
566
+ ) -> MessageContainer:
567
+ message_container_raw: t.Tuple[t.Any] = self.call(
568
+ "getAtIndex", function_params=[agent_address, idx], web3=web3
569
+ )
570
+ return MessageContainer.from_tuple(message_container_raw)
571
+
572
+ def pop_message(
573
+ self,
574
+ api_keys: APIKeys,
575
+ agent_address: ChecksumAddress,
576
+ web3: Web3 | None = None,
577
+ ) -> MessageContainer:
578
+ """
579
+ Retrieves and removes the first message from the agent's message queue.
580
+
581
+ This method first retrieves the message at the front of the queue without removing it,
582
+ allowing us to return the message content directly. The actual removal of the message
583
+ from the queue is performed by sending a transaction to the contract, which executes
584
+ the `popNextMessage` function. The transaction receipt is not used to obtain the message
585
+ content, as it only contains event data, not the returned struct.
586
+ """
587
+
588
+ # Peek first element before popping.
589
+ message_container = self.get_at_index(
590
+ agent_address=agent_address, idx=0, web3=web3
591
+ )
592
+
593
+ # Next, pop that element and discard the transaction receipt.
594
+ self.send(
595
+ api_keys=api_keys,
596
+ function_name="popNextMessage",
597
+ function_params=[agent_address],
598
+ web3=web3,
599
+ )
600
+
601
+ return message_container
602
+
603
+ def send_message(
604
+ self,
605
+ api_keys: APIKeys,
606
+ agent_address: ChecksumAddress,
607
+ message: HexBytes,
608
+ amount_wei: Wei,
609
+ web3: Web3 | None = None,
610
+ ) -> TxReceipt:
611
+ return self.send_with_value(
612
+ api_keys=api_keys,
613
+ function_name="sendMessage",
614
+ amount_wei=amount_wei,
615
+ function_params=[agent_address, message],
616
+ web3=web3,
617
+ )
618
+
619
+
536
620
  def contract_implements_function(
537
621
  contract_address: ChecksumAddress,
538
622
  function_name: str,
@@ -0,0 +1,23 @@
1
+ import typing as t
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+
5
+ from prediction_market_agent_tooling.gtypes import ChecksumAddress, HexBytes, Wei
6
+
7
+
8
+ # Taken from https://github.com/gnosis/labs-contracts/blob/main/src/NFT/DoubleEndedStructQueue.sol
9
+ class MessageContainer(BaseModel):
10
+ model_config = ConfigDict(populate_by_name=True)
11
+ sender: ChecksumAddress
12
+ recipient: ChecksumAddress = Field(alias="agentAddress")
13
+ message: HexBytes
14
+ value: Wei
15
+
16
+ @staticmethod
17
+ def from_tuple(values: tuple[t.Any, ...]) -> "MessageContainer":
18
+ return MessageContainer(
19
+ sender=values[0],
20
+ recipient=values[1],
21
+ message=HexBytes(values[2]),
22
+ value=values[3],
23
+ )
@@ -15,24 +15,26 @@ from prediction_market_agent_tooling.tools.caches.serializers import (
15
15
  class DBManager:
16
16
  _instances: dict[str, "DBManager"] = {}
17
17
 
18
- def __new__(cls, api_keys: APIKeys | None = None) -> "DBManager":
19
- sqlalchemy_db_url = (api_keys or APIKeys()).sqlalchemy_db_url
18
+ def __new__(cls, sqlalchemy_db_url: str | None = None) -> "DBManager":
19
+ if sqlalchemy_db_url is None:
20
+ sqlalchemy_db_url = APIKeys().sqlalchemy_db_url.get_secret_value()
21
+
20
22
  # Hash the secret value to not store secrets in plain text.
21
- url_hash = hashlib.md5(
22
- sqlalchemy_db_url.get_secret_value().encode()
23
- ).hexdigest()
23
+ url_hash = hashlib.md5(sqlalchemy_db_url.encode()).hexdigest()
24
24
  # Return singleton per database connection.
25
25
  if url_hash not in cls._instances:
26
26
  instance = super(DBManager, cls).__new__(cls)
27
27
  cls._instances[url_hash] = instance
28
28
  return cls._instances[url_hash]
29
29
 
30
- def __init__(self, api_keys: APIKeys | None = None) -> None:
30
+ def __init__(self, sqlalchemy_db_url: str | None = None) -> None:
31
31
  if hasattr(self, "_initialized"):
32
32
  return
33
- sqlalchemy_db_url = (api_keys or APIKeys()).sqlalchemy_db_url
33
+ sqlalchemy_db_url = (
34
+ sqlalchemy_db_url or APIKeys().sqlalchemy_db_url.get_secret_value()
35
+ )
34
36
  self._engine = create_engine(
35
- sqlalchemy_db_url.get_secret_value(),
37
+ sqlalchemy_db_url,
36
38
  json_serializer=json_serializer,
37
39
  json_deserializer=json_deserializer,
38
40
  pool_size=2,
@@ -53,7 +55,6 @@ class DBManager:
53
55
  def create_tables(
54
56
  self, sqlmodel_tables: Sequence[type[SQLModel]] | None = None
55
57
  ) -> None:
56
- # Determine tables to create
57
58
  if sqlmodel_tables is not None:
58
59
  tables_to_create = []
59
60
  for sqlmodel_table in sqlmodel_tables:
@@ -25,7 +25,9 @@ class RelevantNewsCacheModel(SQLModel, table=True):
25
25
 
26
26
  class RelevantNewsResponseCache:
27
27
  def __init__(self, api_keys: APIKeys | None = None):
28
- self.db_manager = DBManager(api_keys)
28
+ self.db_manager = DBManager(
29
+ (api_keys or APIKeys()).sqlalchemy_db_url.get_secret_value()
30
+ )
29
31
  self._initialize_db()
30
32
 
31
33
  def _initialize_db(self) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.57.6
3
+ Version: 0.57.8
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.12
@@ -1,3 +1,4 @@
1
+ prediction_market_agent_tooling/abis/agentcommunication.abi.json,sha256=mNF-20obU-ntbNSybQNd1ozVV6Joc1chq97vmsgbPCo,8707
1
2
  prediction_market_agent_tooling/abis/debuggingcontract.abi.json,sha256=KdkCWmif_WO421RFKhc03kGJiccFqsxsZNrgCd8EH_4,571
2
3
  prediction_market_agent_tooling/abis/depositablewrapper_erc20.abi.json,sha256=m0Wk3uQyLM8apWRRvX4d3u1d77bWVuXfV38D-aV48t0,4612
3
4
  prediction_market_agent_tooling/abis/erc20.abi.json,sha256=b8t6tPUhjBo5dHFq8ipsK-ih_g29dOTbWI0GBZiEWL8,3685
@@ -56,8 +57,8 @@ prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=Fd5PI5y
56
57
  prediction_market_agent_tooling/markets/polymarket/data_models_web.py,sha256=VZhVccTApygSKMmy6Au2G02JCJOKJnR_oVeKlaesuSg,12548
57
58
  prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=NRoZK71PtH8kkangMqme7twcAXhRJSSabbmOir-UnAI,3418
58
59
  prediction_market_agent_tooling/markets/polymarket/utils.py,sha256=DImFxeMg8lTfsEDZ8FavndW38TfUsCkawcVGnucsuGo,2029
59
- prediction_market_agent_tooling/markets/seer/data_models.py,sha256=2f6DOXhGerYbTSk5vUvw_y87TcUxOtSfca8-Et7imtU,643
60
- prediction_market_agent_tooling/markets/seer/seer_subgraph_handler.py,sha256=Jola8AxmNDljBCzl6Gvjb9qH75Y7D5dAwbdZl_jndN8,5478
60
+ prediction_market_agent_tooling/markets/seer/data_models.py,sha256=afbwmwGJXUw-F7SE3OgL4ClpXp5yHs5v1Ae7xlFgJdQ,712
61
+ prediction_market_agent_tooling/markets/seer/seer_subgraph_handler.py,sha256=gVzmLhN9YQdmeYVNAwdZ4_t_bND09ioIJOmXnb8UOvo,5481
61
62
  prediction_market_agent_tooling/monitor/financial_metrics/financial_metrics.py,sha256=fjIgjDIx5MhH5mwf7S0cspLOOSU3elYLhGYoIiM26mU,2746
62
63
  prediction_market_agent_tooling/monitor/markets/manifold.py,sha256=TS4ERwTfQnot8dhekNyVNhJYf5ysYsjF-9v5_kM3aVI,3334
63
64
  prediction_market_agent_tooling/monitor/markets/metaculus.py,sha256=LOnyWWBFdg10-cTWdb76nOsNjDloO8OfMT85GBzRCFI,1455
@@ -73,14 +74,15 @@ prediction_market_agent_tooling/tools/betting_strategies/market_moving.py,sha256
73
74
  prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py,sha256=-FUSuQQgjcWSSnoFxnlAyTeilY6raJABJVM2QKkFqAY,438
74
75
  prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py,sha256=THMXwFlskvzbjnX_OiYtDSzI8XVFyULWfP2525_9UGc,429
75
76
  prediction_market_agent_tooling/tools/betting_strategies/utils.py,sha256=kpIb-ci67Vc1Yqqaa-_S4OUkbhWSIYog4_Iwp69HU_k,97
76
- prediction_market_agent_tooling/tools/caches/db_cache.py,sha256=rkA7somZZo5G6OZVvNrCuCVc4kn7TUoPxmOq4J6BZ54,10391
77
+ prediction_market_agent_tooling/tools/caches/db_cache.py,sha256=aafau_n_AUbLIwkyIRiTPgKB0dmM0767mSqyPDLF2A4,10576
77
78
  prediction_market_agent_tooling/tools/caches/inmemory_cache.py,sha256=ZW5iI5rmjqeAebu5T7ftRnlkxiL02IC-MxCfDB80x7w,1506
78
79
  prediction_market_agent_tooling/tools/caches/serializers.py,sha256=upSXN5__rmRlzJ6tv1h7FodKzJu9eCkFrN_zeuwroJM,2151
79
- prediction_market_agent_tooling/tools/contract.py,sha256=tJHwbDXRRRS7g-vIzqfYTOPQBcU5lqb9o_FF9OECZQ8,22941
80
+ prediction_market_agent_tooling/tools/contract.py,sha256=qRGpr--1FVObPVzXTKV3DpHCqwUAuTt5UmiyGyfhMbg,25796
80
81
  prediction_market_agent_tooling/tools/costs.py,sha256=EaAJ7v9laD4VEV3d8B44M4u3_oEO_H16jRVCdoZ93Uw,954
81
82
  prediction_market_agent_tooling/tools/custom_exceptions.py,sha256=Fh8z1fbwONvP4-j7AmV_PuEcoqb6-QXa9PJ9m7guMcM,93
83
+ prediction_market_agent_tooling/tools/data_models.py,sha256=jDQ7FU0QQhXlcgJh5VZZGwDTYP2OPAqKPHZFewCPAUY,732
82
84
  prediction_market_agent_tooling/tools/datetime_utc.py,sha256=2JSWF7AXQnv04_D_cu9Vmdkq0TWmGJ1QcK9AeqrA-U8,2765
83
- prediction_market_agent_tooling/tools/db/db_manager.py,sha256=_d_oJe4GZ59Htq0iOosRz8yEps2c6MmfTNvNvMLpL8Y,3002
85
+ prediction_market_agent_tooling/tools/db/db_manager.py,sha256=GtzHH1NLl8HwqC8Z7s6eTlIQXuV0blxfaV2PeQrBnfQ,3013
84
86
  prediction_market_agent_tooling/tools/google_utils.py,sha256=t3_UEEvKX3L0biSIQ560GdRbllQ6eprhK_upE243A-0,3185
85
87
  prediction_market_agent_tooling/tools/hexbytes_custom.py,sha256=Bp94qgPjvjWf1Vb4lNzGFDXRdThw1rJ91vL6r2PWq5E,2096
86
88
  prediction_market_agent_tooling/tools/httpx_cached_client.py,sha256=RxD-hwtZCMctnMwfzy8t51W9Z9gxFGtDYxBIMChazpc,406
@@ -95,7 +97,7 @@ prediction_market_agent_tooling/tools/omen/reality_accuracy.py,sha256=M1SF7iSW1g
95
97
  prediction_market_agent_tooling/tools/parallelism.py,sha256=6Gou0hbjtMZrYvxjTDFUDZuxmE2nqZVbb6hkg1hF82A,1022
96
98
  prediction_market_agent_tooling/tools/relevant_news_analysis/data_models.py,sha256=95l84aztFaxcRLLcRQ46yKJbIlOEuDAbIGLouyliDzA,1316
97
99
  prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_analysis.py,sha256=CddJem7tk15NAudJDwmuL8znTycbR-YI8kTNtd3LzG8,5474
98
- prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_cache.py,sha256=ErLp284YlD7k_M8Si9OT86HuzfmSo1bPlLJtegXx1TA,3011
100
+ prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_cache.py,sha256=kNWq92T11Knb9mYBZlMiZUzOpKgCd-5adanylQUMRJA,3085
99
101
  prediction_market_agent_tooling/tools/safe.py,sha256=9vxGGLvSPnfy-sxUFDpBTe8omqpGXP7MzvGPp6bRxrU,5197
100
102
  prediction_market_agent_tooling/tools/singleton.py,sha256=CiIELUiI-OeS7U7eeHEt0rnVhtQGzwoUdAgn_7u_GBM,729
101
103
  prediction_market_agent_tooling/tools/streamlit_user_login.py,sha256=NXEqfjT9Lc9QtliwSGRASIz1opjQ7Btme43H4qJbzgE,3010
@@ -104,8 +106,8 @@ prediction_market_agent_tooling/tools/tavily/tavily_search.py,sha256=Kw2mXNkMTYT
104
106
  prediction_market_agent_tooling/tools/transaction_cache.py,sha256=K5YKNL2_tR10Iw2TD9fuP-CTGpBbZtNdgbd0B_R7pjg,1814
105
107
  prediction_market_agent_tooling/tools/utils.py,sha256=WvuUCHgMCiMq8_wMm5PHNwvLhcdDk2zGKaAM8OUC-qY,6438
106
108
  prediction_market_agent_tooling/tools/web3_utils.py,sha256=wqUDCed3iNrn1Wao1iwGN6tzIrhpzrTRj319wlveJEo,12275
107
- prediction_market_agent_tooling-0.57.6.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
108
- prediction_market_agent_tooling-0.57.6.dist-info/METADATA,sha256=VCWshrH1hcQnfq30Exw4IinOZLRsS0gS4AqtpO0vYhY,8188
109
- prediction_market_agent_tooling-0.57.6.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
110
- prediction_market_agent_tooling-0.57.6.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
111
- prediction_market_agent_tooling-0.57.6.dist-info/RECORD,,
109
+ prediction_market_agent_tooling-0.57.8.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
110
+ prediction_market_agent_tooling-0.57.8.dist-info/METADATA,sha256=Gr3x1leFpFFxK-NiQuvm2_NeZAB8zKNUwfmXP_LUNY8,8188
111
+ prediction_market_agent_tooling-0.57.8.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
112
+ prediction_market_agent_tooling-0.57.8.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
113
+ prediction_market_agent_tooling-0.57.8.dist-info/RECORD,,