prediction-market-agent-tooling 0.65.5__py3-none-any.whl → 0.65.7__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.
@@ -65,6 +65,8 @@ class APIKeys(BaseSettings):
65
65
 
66
66
  SQLALCHEMY_DB_URL: t.Optional[SecretStr] = None
67
67
 
68
+ PERPLEXITY_API_KEY: t.Optional[SecretStr] = None
69
+
68
70
  ENABLE_CACHE: bool = False
69
71
  CACHE_DIR: str = "./.cache"
70
72
 
@@ -259,6 +261,12 @@ class APIKeys(BaseSettings):
259
261
  if self.model_fields[k].annotation not in SECRET_TYPES and v is not None
260
262
  }
261
263
 
264
+ @property
265
+ def perplexity_api_key(self) -> SecretStr:
266
+ return check_not_none(
267
+ self.PERPLEXITY_API_KEY, "PERPLEXITY_API_KEY missing in the environment."
268
+ )
269
+
262
270
  def model_dump_secrets(self) -> dict[str, t.Any]:
263
271
  return {
264
272
  k: v.get_secret_value() if isinstance(v, SecretStr) else v
@@ -61,7 +61,8 @@ class LogprobsParser:
61
61
  (
62
62
  i
63
63
  for i in range(result_start_index, len(logprobs))
64
- if logprobs[i]["token"] in {",", '"', ",\n", "\",\n'", '",\n'}
64
+ if logprobs[i]["token"]
65
+ in {",", '"', ",\n", "\",\n'", '",\n', '"\n', "\n"}
65
66
  ),
66
67
  len(logprobs) - 1,
67
68
  )
@@ -1,5 +1,5 @@
1
1
  from enum import Enum
2
- from typing import Annotated
2
+ from typing import Annotated, Sequence
3
3
 
4
4
  from pydantic import BaseModel, BeforeValidator, computed_field
5
5
 
@@ -26,6 +26,26 @@ class Resolution(BaseModel):
26
26
  def from_answer(answer: OutcomeStr) -> "Resolution":
27
27
  return Resolution(outcome=answer, invalid=False)
28
28
 
29
+ def find_outcome_matching_market(
30
+ self, market_outcomes: Sequence[OutcomeStr]
31
+ ) -> OutcomeStr | None:
32
+ """
33
+ Finds a matching outcome in the provided market outcomes.
34
+
35
+ Performs case-insensitive matching between this resolution's outcome
36
+ and the provided market outcomes.
37
+
38
+ """
39
+
40
+ if not self.outcome:
41
+ return None
42
+
43
+ normalized_outcome = self.outcome.lower()
44
+ for outcome in market_outcomes:
45
+ if outcome.lower() == normalized_outcome:
46
+ return outcome
47
+ return None
48
+
29
49
 
30
50
  class Bet(BaseModel):
31
51
  id: str
@@ -31,7 +31,7 @@ from prediction_market_agent_tooling.markets.omen.omen_subgraph_handler import (
31
31
  from prediction_market_agent_tooling.tools.tokens.main_token import (
32
32
  MINIMUM_NATIVE_TOKEN_IN_EOA_FOR_FEES,
33
33
  )
34
- from prediction_market_agent_tooling.tools.utils import utcnow
34
+ from prediction_market_agent_tooling.tools.utils import check_not_none, utcnow
35
35
  from prediction_market_agent_tooling.tools.web3_utils import ZERO_BYTES
36
36
 
37
37
 
@@ -223,7 +223,10 @@ def omen_submit_answer_market_tx(
223
223
  And after the period is over, you need to resolve the market using `omen_resolve_market_tx`.
224
224
  """
225
225
  realitio_contract = OmenRealitioContract()
226
- outcome_index = market.outcomes.index(resolution.outcome)
226
+ outcome_matching_market = check_not_none(
227
+ resolution.find_outcome_matching_market(market.outcomes)
228
+ )
229
+ outcome_index = market.outcomes.index(outcome_matching_market)
227
230
  realitio_contract.submit_answer(
228
231
  api_keys=api_keys,
229
232
  question_id=market.question.id,
@@ -0,0 +1,2 @@
1
+ class PriceCalculationError(Exception):
2
+ """Raised when there's an error discovering prices for a market."""
@@ -12,6 +12,9 @@ from prediction_market_agent_tooling.gtypes import (
12
12
  )
13
13
  from prediction_market_agent_tooling.loggers import logger
14
14
  from prediction_market_agent_tooling.markets.seer.data_models import SeerMarket
15
+ from prediction_market_agent_tooling.markets.seer.exceptions import (
16
+ PriceCalculationError,
17
+ )
15
18
  from prediction_market_agent_tooling.markets.seer.seer_subgraph_handler import (
16
19
  SeerSubgraphHandler,
17
20
  )
@@ -128,7 +131,7 @@ class PriceManager:
128
131
  )
129
132
  # It's okay if invalid (last) outcome has price 0, but not the other outcomes.
130
133
  if price is None and idx != len(self.seer_market.wrapped_tokens) - 1:
131
- raise ValueError(
134
+ raise PriceCalculationError(
132
135
  f"Couldn't get price for {wrapped_token} for market {self.seer_market.url}."
133
136
  )
134
137
  price_data[wrapped_token] = (
@@ -142,7 +145,7 @@ class PriceManager:
142
145
  sum(price_data.values(), start=CollateralToken.zero())
143
146
  == CollateralToken.zero()
144
147
  ):
145
- raise ValueError(
148
+ raise PriceCalculationError(
146
149
  f"All prices for market {self.seer_market.url} are zero. This shouldn't happen."
147
150
  )
148
151
 
@@ -31,6 +31,9 @@ from prediction_market_agent_tooling.markets.seer.data_models import (
31
31
  RedeemParams,
32
32
  SeerMarket,
33
33
  )
34
+ from prediction_market_agent_tooling.markets.seer.exceptions import (
35
+ PriceCalculationError,
36
+ )
34
37
  from prediction_market_agent_tooling.markets.seer.price_manager import PriceManager
35
38
  from prediction_market_agent_tooling.markets.seer.seer_contracts import (
36
39
  GnosisRouter,
@@ -275,18 +278,24 @@ class SeerAgentMarket(AgentMarket):
275
278
 
276
279
  @staticmethod
277
280
  def from_data_model_with_subgraph(
278
- model: SeerMarket, seer_subgraph: SeerSubgraphHandler
281
+ model: SeerMarket,
282
+ seer_subgraph: SeerSubgraphHandler,
283
+ must_have_prices: bool,
279
284
  ) -> t.Optional["SeerAgentMarket"]:
280
- p = PriceManager(seer_market=model, seer_subgraph=seer_subgraph)
285
+ price_manager = PriceManager(seer_market=model, seer_subgraph=seer_subgraph)
281
286
 
282
- probability_map = p.build_probability_map()
283
- if not probability_map:
287
+ probability_map = {}
288
+ try:
289
+ probability_map = price_manager.build_probability_map()
290
+ except PriceCalculationError as e:
284
291
  logger.info(
285
- f"probability_map for market {model.id.hex()} could not be calculated. Skipping."
292
+ f"Error when calculating probabilities for market {model.id.hex()} - {e}"
286
293
  )
287
- return None
294
+ if must_have_prices:
295
+ # Price calculation failed, so don't return the market
296
+ return None
288
297
 
289
- return SeerAgentMarket(
298
+ market = SeerAgentMarket(
290
299
  id=model.id.hex(),
291
300
  question=model.title,
292
301
  creator=model.creator,
@@ -305,6 +314,8 @@ class SeerAgentMarket(AgentMarket):
305
314
  probabilities=probability_map,
306
315
  )
307
316
 
317
+ return market
318
+
308
319
  @staticmethod
309
320
  def get_markets(
310
321
  limit: int,
@@ -324,17 +335,25 @@ class SeerAgentMarket(AgentMarket):
324
335
 
325
336
  # We exclude the None values below because `from_data_model_with_subgraph` can return None, which
326
337
  # represents an invalid market.
327
- return [
338
+ seer_agent_markets = [
328
339
  market
329
340
  for m in markets
330
341
  if (
331
342
  market := SeerAgentMarket.from_data_model_with_subgraph(
332
- model=m, seer_subgraph=seer_subgraph
343
+ model=m,
344
+ seer_subgraph=seer_subgraph,
345
+ must_have_prices=filter_by == FilterBy.OPEN,
333
346
  )
334
347
  )
335
348
  is not None
336
349
  ]
337
350
 
351
+ if filter_by == FilterBy.OPEN:
352
+ # Extra manual filter for liquidity, as subgraph is sometimes unreliable.
353
+ seer_agent_markets = [m for m in seer_agent_markets if m.has_liquidity()]
354
+
355
+ return seer_agent_markets
356
+
338
357
  def get_outcome_str_from_idx(self, outcome_index: int) -> OutcomeStr:
339
358
  return self.outcomes[outcome_index]
340
359
 
@@ -0,0 +1,86 @@
1
+ from typing import Any, Dict, List, Optional
2
+
3
+ import httpx
4
+ from pydantic import SecretStr
5
+
6
+ from prediction_market_agent_tooling.tools.perplexity.perplexity_models import (
7
+ PerplexityModelSettings,
8
+ PerplexityRequestParameters,
9
+ PerplexityResponse,
10
+ )
11
+
12
+
13
+ class PerplexityModel:
14
+ def __init__(
15
+ self,
16
+ model_name: str,
17
+ *,
18
+ api_key: SecretStr,
19
+ completition_endpoint: str = "https://api.perplexity.ai/chat/completions",
20
+ ) -> None:
21
+ self.model_name = model_name
22
+ self.api_key = api_key
23
+ self.completition_endpoint = completition_endpoint
24
+
25
+ async def request(
26
+ self,
27
+ messages: List[dict[str, str]],
28
+ model_settings: Optional[PerplexityModelSettings],
29
+ model_request_parameters: PerplexityRequestParameters,
30
+ ) -> PerplexityResponse:
31
+ payload: Dict[str, Any] = {"model": self.model_name, "messages": messages}
32
+
33
+ if model_settings:
34
+ model_settings_dict = model_settings.model_dump()
35
+ model_settings_dict = {
36
+ k: v for k, v in model_settings_dict.items() if v is not None
37
+ }
38
+ payload.update(model_settings_dict)
39
+
40
+ params_dict = model_request_parameters.model_dump()
41
+ params_dict = {k: v for k, v in params_dict.items() if v is not None}
42
+
43
+ # Extract and handle search_context_size specially
44
+ if "search_context_size" in params_dict:
45
+ search_context_size = params_dict.pop("search_context_size")
46
+ payload["web_search_options"] = {"search_context_size": search_context_size}
47
+
48
+ # Add remaining Perplexity parameters to payload
49
+ payload.update(params_dict)
50
+
51
+ try:
52
+ async with httpx.AsyncClient(timeout=180) as client:
53
+ response = await client.post(
54
+ self.completition_endpoint,
55
+ headers={
56
+ "Authorization": f"Bearer {self.api_key.get_secret_value()}",
57
+ "Content-Type": "application/json",
58
+ },
59
+ json=payload,
60
+ )
61
+ response.raise_for_status()
62
+ result: dict[str, Any] = response.json()
63
+
64
+ choices = result.get("choices", [])
65
+ if not choices:
66
+ raise ValueError("Invalid response: no choices")
67
+
68
+ content = choices[0].get("message", {}).get("content")
69
+ if not content:
70
+ raise ValueError("Invalid response: no content")
71
+
72
+ return PerplexityResponse(
73
+ content=content,
74
+ citations=result.get("citations", []),
75
+ usage=result.get("usage", {}),
76
+ )
77
+ except httpx.HTTPStatusError as e:
78
+ raise ValueError(
79
+ f"HTTP error from Perplexity API: {e.response.status_code} - {e.response.text}"
80
+ ) from e
81
+ except httpx.RequestError as e:
82
+ raise ValueError(f"Request error to Perplexity API: {str(e)}") from e
83
+ except Exception as e:
84
+ raise ValueError(
85
+ f"Unexpected error in Perplexity API request: {str(e)}"
86
+ ) from e
@@ -0,0 +1,26 @@
1
+ from typing import Any, List, Literal, Optional
2
+
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class PerplexityRequestParameters(BaseModel):
7
+ search_context_size: Optional[Literal["low", "medium", "high"]]
8
+ search_recency_filter: Optional[Literal["any", "day", "week", "month", "year"]]
9
+ search_return_related_questions: Optional[bool]
10
+ search_domain_filter: Optional[List[str]]
11
+ search_after_date_filter: Optional[str]
12
+ search_before_date_filter: Optional[str]
13
+
14
+
15
+ class PerplexityResponse(BaseModel):
16
+ content: str
17
+ citations: list[str]
18
+ usage: dict[str, Any]
19
+
20
+
21
+ class PerplexityModelSettings(BaseModel):
22
+ max_tokens: Optional[int] = None
23
+ temperature: Optional[float] = None
24
+ top_p: Optional[float] = None
25
+ frequency_penalty: Optional[float] = None
26
+ presence_penalty: Optional[float] = None
@@ -0,0 +1,73 @@
1
+ import asyncio
2
+ import typing as t
3
+ from datetime import date, timedelta
4
+
5
+ import tenacity
6
+
7
+ from prediction_market_agent_tooling.config import APIKeys
8
+ from prediction_market_agent_tooling.tools.caches.db_cache import db_cache
9
+ from prediction_market_agent_tooling.tools.perplexity.perplexity_client import (
10
+ PerplexityModel,
11
+ )
12
+ from prediction_market_agent_tooling.tools.perplexity.perplexity_models import (
13
+ PerplexityModelSettings,
14
+ PerplexityRequestParameters,
15
+ PerplexityResponse,
16
+ )
17
+
18
+ SYSTEM_PROMPT = "You are a helpful search assistant. Your task is to provide accurate information based on web searches."
19
+
20
+
21
+ @tenacity.retry(stop=tenacity.stop_after_attempt(3), wait=tenacity.wait_fixed(1))
22
+ @db_cache(
23
+ max_age=timedelta(days=1),
24
+ ignore_args=["api_keys"],
25
+ log_error_on_unsavable_data=False,
26
+ )
27
+ def perplexity_search(
28
+ query: str,
29
+ api_keys: APIKeys,
30
+ search_context_size: t.Literal["low", "medium", "high"] = "medium",
31
+ search_recency_filter: t.Literal["any", "day", "week", "month", "year"]
32
+ | None = None,
33
+ search_filter_before_date: date | None = None,
34
+ search_filter_after_date: date | None = None,
35
+ search_return_related_questions: bool | None = None,
36
+ include_domains: list[str] | None = None,
37
+ temperature: float = 0,
38
+ model_name: str = "sonar-pro",
39
+ max_tokens: int = 2048,
40
+ ) -> PerplexityResponse:
41
+ # Create messages in ModelMessage format
42
+ messages = [
43
+ {"role": "system", "content": SYSTEM_PROMPT},
44
+ {"role": "user", "content": query},
45
+ ]
46
+
47
+ # Define special parameters for the request and create the settings
48
+ model_settings = PerplexityModelSettings(
49
+ max_tokens=max_tokens, temperature=temperature
50
+ )
51
+
52
+ # Create a basic request parameters object with required base parameters
53
+ request_params = PerplexityRequestParameters(
54
+ search_domain_filter=include_domains,
55
+ search_after_date_filter=search_filter_after_date.strftime("%Y-%m-%d")
56
+ if search_filter_after_date
57
+ else None,
58
+ search_before_date_filter=search_filter_before_date.strftime("%Y-%m-%d")
59
+ if search_filter_before_date
60
+ else None,
61
+ search_recency_filter=search_recency_filter,
62
+ search_context_size=search_context_size,
63
+ search_return_related_questions=search_return_related_questions,
64
+ )
65
+
66
+ model = PerplexityModel(model_name=model_name, api_key=api_keys.perplexity_api_key)
67
+ return asyncio.run(
68
+ model.request(
69
+ messages=messages,
70
+ model_settings=model_settings,
71
+ model_request_parameters=request_params,
72
+ )
73
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.65.5
3
+ Version: 0.65.7
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.13
@@ -23,7 +23,7 @@ prediction_market_agent_tooling/benchmark/agents.py,sha256=zC5tUM6pPTWtqSddOOSYV
23
23
  prediction_market_agent_tooling/benchmark/benchmark.py,sha256=KwMZzwise3sgmhdjw7xCgHMmjKHdHqQC-zc9untOLWg,17832
24
24
  prediction_market_agent_tooling/benchmark/utils.py,sha256=xQd7p9H08-OtN3iC4QT2i9bkUTmrXa6rxGXeg9yMhgU,2986
25
25
  prediction_market_agent_tooling/chains.py,sha256=1qQstoqXMwqwM7k-KH7MjMz8Ei-D83KZByvDbCZpAxs,116
26
- prediction_market_agent_tooling/config.py,sha256=UyhK6u261tBLVsRwvXJm9C0wy6UrUpfAKH6xk4CSfk8,11535
26
+ prediction_market_agent_tooling/config.py,sha256=-kJfdDr-m0R-tGZ1KRI-hJJk0mXDt142CAlvwaJ2N2I,11778
27
27
  prediction_market_agent_tooling/deploy/agent.py,sha256=ddFvBUhB_WVWtuUGkiZNKBME4Hd3AdquVv588c1rpu0,25602
28
28
  prediction_market_agent_tooling/deploy/agent_example.py,sha256=yS1fWkHynr9MYGNOM2WsCnRWLPaffY4bOc6bIudrdd4,1377
29
29
  prediction_market_agent_tooling/deploy/betting_strategy.py,sha256=YYayGjTKW02d3BUavJ8M3NmFk41oldEM3FHbwppZGRM,17184
@@ -37,12 +37,12 @@ prediction_market_agent_tooling/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
37
37
  prediction_market_agent_tooling/jobs/jobs_models.py,sha256=DoZ9dlvVhpNrnINiR1uy6YUOsuzI_L-avBt362y5xXM,2467
38
38
  prediction_market_agent_tooling/jobs/omen/omen_jobs.py,sha256=qbTZ9HVvu_iP4dDxuvOZxAp6JsRKejvEW2YDYCnRmd4,5039
39
39
  prediction_market_agent_tooling/loggers.py,sha256=kFZ1BrI8hvWgZO1vzptFnYiOEDx9Ozs86DA9yF3bSgY,5212
40
- prediction_market_agent_tooling/logprobs_parser.py,sha256=Du1Yc-fAVSixQX_Zx6KWpgSzI_ZYhv5tS1b8IcOPPr8,4979
40
+ prediction_market_agent_tooling/logprobs_parser.py,sha256=DBlBQtWX8_URXhzTU3YWIPa76Zx3QDHlx1ARqbgJsVI,5008
41
41
  prediction_market_agent_tooling/markets/agent_market.py,sha256=smKuMaP1zyTtw31Robbj3ospF03xptWX0EDKPJbHH9I,19070
42
42
  prediction_market_agent_tooling/markets/base_subgraph_handler.py,sha256=7RaYO_4qAmQ6ZGM8oPK2-CkiJfKmV9MxM-rJlduaecU,1971
43
43
  prediction_market_agent_tooling/markets/blockchain_utils.py,sha256=gZMwCTO-1d2ALXeY7-LP6U4kCpotJ6GMPZwN11kFOfE,2604
44
44
  prediction_market_agent_tooling/markets/categorize.py,sha256=orLZlPaHgeREU66m1amxfWikeV77idV4sZDPB8NgSD0,1300
45
- prediction_market_agent_tooling/markets/data_models.py,sha256=vFlX1iNWJcYZlImPkTOQCp2C0veIO7HuAxe0Wf_S8yg,6952
45
+ prediction_market_agent_tooling/markets/data_models.py,sha256=seifqxjVpzZdVKJQ7a5sKPPUM749EHV80SdI6pVQ3b4,7542
46
46
  prediction_market_agent_tooling/markets/manifold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
47
  prediction_market_agent_tooling/markets/manifold/api.py,sha256=tWnjuqvU8pcCuja2B_ynHeds1iiEFc6QWHjeSO_GSxY,7676
48
48
  prediction_market_agent_tooling/markets/manifold/data_models.py,sha256=QzRfR2g_3vzCw4azj_lOSKSFAZczjAWlM0lQy2dZry8,6704
@@ -59,7 +59,7 @@ prediction_market_agent_tooling/markets/omen/data_models.py,sha256=0jCxgUEVpaggt
59
59
  prediction_market_agent_tooling/markets/omen/omen.py,sha256=jyoAV-E_Qcbqqs4oi7junE3rHTG3kaYLMtIVzEkNC6M,49981
60
60
  prediction_market_agent_tooling/markets/omen/omen_constants.py,sha256=D9oflYKafLQiHYtB5sScMHqmXyzM8JP8J0yATmc4SQQ,233
61
61
  prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=f0dKbdVM2OUTSpkCSZdPtKqeckS2c48j3rjnK8oD3wE,29716
62
- prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=05x-Yb0bUsJSEtsWQLqSHyl4HqLChksIb64OGygN-Rw,10226
62
+ prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=h4iK7r57D0EaJqfk_n7ISaJHOB93ALL-fCPI1VztXbQ,10364
63
63
  prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=149T_tJxK2GFnGCulOlGr2Mwiaa7sa74E4lqYsuCv68,39962
64
64
  prediction_market_agent_tooling/markets/polymarket/api.py,sha256=UZ4_TG8ceb9Y-qgsOKs8Qiv8zDt957QkT8IX2c83yqo,4800
65
65
  prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=U1SXTz93FIG3GO1h5BJWSt1hPKn_YAMBeZ3k8IS-ook,4552
@@ -67,8 +67,9 @@ prediction_market_agent_tooling/markets/polymarket/data_models_web.py,sha256=wCw
67
67
  prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=meAhQ5_gwVDvlSxhGGVAvRB7B47zKLnRvZ-_13tKtwY,3433
68
68
  prediction_market_agent_tooling/markets/polymarket/utils.py,sha256=8kTeVjXPcXC6DkDvWYsZQLY7x8DS6CEp_yznSEazsNU,2037
69
69
  prediction_market_agent_tooling/markets/seer/data_models.py,sha256=G0i-fnVaK16KWDYVI6w3lvyte6Op7ca_iIC8IfrXmlM,4702
70
- prediction_market_agent_tooling/markets/seer/price_manager.py,sha256=4hSSDyxSj9po9-tRrdtNvJ2d9v0xXT08Ezgbk1JDE3c,6122
71
- prediction_market_agent_tooling/markets/seer/seer.py,sha256=5uSKUhyM_3PTguYi9yiD3-E5Famb6M_fayBX1NqebAE,20273
70
+ prediction_market_agent_tooling/markets/seer/exceptions.py,sha256=cEObdjluivD94tgOLzmimR7wgQEOt6SRakrYdhsRQtk,112
71
+ prediction_market_agent_tooling/markets/seer/price_manager.py,sha256=MClY2NGwOV70nZYIcmzXFy6Ogd8NBIq7telQcQ3VcU4,6243
72
+ prediction_market_agent_tooling/markets/seer/seer.py,sha256=9AsfvsCVxNvieDPqGtyjdESzFyPEzDVpTR-4P9mL9Y8,20966
72
73
  prediction_market_agent_tooling/markets/seer/seer_contracts.py,sha256=kH9nPXsx6UM5er42g2f3fLvy36sY5JM2f_beXeuNgUc,3790
73
74
  prediction_market_agent_tooling/markets/seer/seer_subgraph_handler.py,sha256=pJxch9_u0EdiIatQP1-UFClt8UEfMZAXBlk5wDO_ovk,9940
74
75
  prediction_market_agent_tooling/markets/seer/subgraph_data_models.py,sha256=0izxS8Mtzonfdl9UqvFVXrdj0hVzieroekXhogfZKCw,1817
@@ -100,6 +101,9 @@ prediction_market_agent_tooling/tools/langfuse_client_utils.py,sha256=6IvsqqNNfB
100
101
  prediction_market_agent_tooling/tools/omen/reality_accuracy.py,sha256=M1SF7iSW1gVlQSTskdVFTn09uPLST23YeipVIWj54io,2236
101
102
  prediction_market_agent_tooling/tools/omen/sell_positions.py,sha256=Q4oI7_QI3AkyxlH10VvxDahYVrphQa1Wnox2Ce_cf_k,2452
102
103
  prediction_market_agent_tooling/tools/parallelism.py,sha256=6Gou0hbjtMZrYvxjTDFUDZuxmE2nqZVbb6hkg1hF82A,1022
104
+ prediction_market_agent_tooling/tools/perplexity/perplexity_client.py,sha256=Oi5a_uaCAPtpTAEEVwD0SXWTsKkhCXOQjCBfa1eAuC0,3215
105
+ prediction_market_agent_tooling/tools/perplexity/perplexity_models.py,sha256=SfeR5FGQ2PqaxG4f4ij50LEnS9f2aeLplVwD7IZQh1s,820
106
+ prediction_market_agent_tooling/tools/perplexity/perplexity_search.py,sha256=Ii-5bqk6DygOCK1G78PDdz2sRTNvFYHVYVl2sajUbY4,2616
103
107
  prediction_market_agent_tooling/tools/relevant_news_analysis/data_models.py,sha256=95l84aztFaxcRLLcRQ46yKJbIlOEuDAbIGLouyliDzA,1316
104
108
  prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_analysis.py,sha256=r4MdP5uEMlaCwoa2XQZzGq3oZEqnoo9S4dg8uzXfSOY,5473
105
109
  prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_cache.py,sha256=kNWq92T11Knb9mYBZlMiZUzOpKgCd-5adanylQUMRJA,3085
@@ -116,8 +120,8 @@ prediction_market_agent_tooling/tools/tokens/usd.py,sha256=yuW8iPPtcpP4eLH2nORMD
116
120
  prediction_market_agent_tooling/tools/transaction_cache.py,sha256=K5YKNL2_tR10Iw2TD9fuP-CTGpBbZtNdgbd0B_R7pjg,1814
117
121
  prediction_market_agent_tooling/tools/utils.py,sha256=Jzpck3_QwShhejhgbAhmNxPSOPQJssBQep0eVemVjZ4,7064
118
122
  prediction_market_agent_tooling/tools/web3_utils.py,sha256=zRq-eeBGWt8uUGN9G_WfjmJ0eVvO8aWE9S0Pz_Y6AOA,12342
119
- prediction_market_agent_tooling-0.65.5.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
120
- prediction_market_agent_tooling-0.65.5.dist-info/METADATA,sha256=tPU9fNidxnBbaRgIYRy-e_lt_NL65wOg00vONLBnQOo,8734
121
- prediction_market_agent_tooling-0.65.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
122
- prediction_market_agent_tooling-0.65.5.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
123
- prediction_market_agent_tooling-0.65.5.dist-info/RECORD,,
123
+ prediction_market_agent_tooling-0.65.7.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
124
+ prediction_market_agent_tooling-0.65.7.dist-info/METADATA,sha256=Swm7dO-d5M0d1OqUB21l3QZ8gsrlORPKbG_UDDnZRZo,8734
125
+ prediction_market_agent_tooling-0.65.7.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
126
+ prediction_market_agent_tooling-0.65.7.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
127
+ prediction_market_agent_tooling-0.65.7.dist-info/RECORD,,