prediction-market-agent-tooling 0.65.5__tar.gz → 0.65.6__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 (125) hide show
  1. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/PKG-INFO +1 -1
  2. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/config.py +8 -0
  3. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/logprobs_parser.py +2 -1
  4. prediction_market_agent_tooling-0.65.6/prediction_market_agent_tooling/tools/perplexity/perplexity_client.py +86 -0
  5. prediction_market_agent_tooling-0.65.6/prediction_market_agent_tooling/tools/perplexity/perplexity_models.py +26 -0
  6. prediction_market_agent_tooling-0.65.6/prediction_market_agent_tooling/tools/perplexity/perplexity_search.py +73 -0
  7. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/pyproject.toml +1 -1
  8. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/LICENSE +0 -0
  9. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/README.md +0 -0
  10. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/debuggingcontract.abi.json +0 -0
  11. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/depositablewrapper_erc20.abi.json +0 -0
  12. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/erc20.abi.json +0 -0
  13. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/erc4626.abi.json +0 -0
  14. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/erc721.abi.json +0 -0
  15. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/gvp2_settlement.abi.json +0 -0
  16. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/omen_agentresultmapping.abi.json +0 -0
  17. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/omen_dxdao.abi.json +0 -0
  18. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/omen_fpmm.abi.json +0 -0
  19. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/omen_fpmm_conditionaltokens.abi.json +0 -0
  20. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/omen_fpmm_factory.abi.json +0 -0
  21. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/omen_kleros.abi.json +0 -0
  22. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/omen_oracle.abi.json +0 -0
  23. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/omen_realitio.abi.json +0 -0
  24. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/omen_thumbnailmapping.abi.json +0 -0
  25. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/ownable.abi.json +0 -0
  26. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/ownable_erc721.abi.json +0 -0
  27. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/proxy.abi.json +0 -0
  28. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/seer_gnosis_router.abi.json +0 -0
  29. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/abis/seer_market_factory.abi.json +0 -0
  30. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/benchmark/__init__.py +0 -0
  31. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/benchmark/agents.py +0 -0
  32. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/benchmark/benchmark.py +0 -0
  33. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/benchmark/utils.py +0 -0
  34. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/chains.py +0 -0
  35. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/deploy/agent.py +0 -0
  36. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/deploy/agent_example.py +0 -0
  37. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/deploy/betting_strategy.py +0 -0
  38. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/deploy/constants.py +0 -0
  39. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/deploy/gcp/deploy.py +0 -0
  40. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py +0 -0
  41. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/deploy/gcp/utils.py +0 -0
  42. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/deploy/trade_interval.py +0 -0
  43. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/gtypes.py +0 -0
  44. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/jobs/__init__.py +0 -0
  45. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/jobs/jobs_models.py +0 -0
  46. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/jobs/omen/omen_jobs.py +0 -0
  47. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/loggers.py +0 -0
  48. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/agent_market.py +0 -0
  49. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/base_subgraph_handler.py +0 -0
  50. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/blockchain_utils.py +0 -0
  51. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/categorize.py +0 -0
  52. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/data_models.py +0 -0
  53. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/manifold/__init__.py +0 -0
  54. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/manifold/api.py +0 -0
  55. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/manifold/data_models.py +0 -0
  56. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/manifold/manifold.py +0 -0
  57. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/manifold/utils.py +0 -0
  58. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/market_fees.py +0 -0
  59. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/markets.py +0 -0
  60. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/metaculus/api.py +0 -0
  61. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/metaculus/data_models.py +0 -0
  62. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/metaculus/metaculus.py +0 -0
  63. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/omen/__init__.py +0 -0
  64. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/omen/cow_contracts.py +0 -0
  65. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/omen/data_models.py +0 -0
  66. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/omen/omen.py +0 -0
  67. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/omen/omen_constants.py +0 -0
  68. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/omen/omen_contracts.py +0 -0
  69. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/omen/omen_resolving.py +0 -0
  70. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py +0 -0
  71. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/polymarket/api.py +0 -0
  72. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/polymarket/data_models.py +0 -0
  73. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/polymarket/data_models_web.py +0 -0
  74. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/polymarket/polymarket.py +0 -0
  75. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/polymarket/utils.py +0 -0
  76. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/seer/data_models.py +0 -0
  77. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/seer/price_manager.py +0 -0
  78. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/seer/seer.py +0 -0
  79. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/seer/seer_contracts.py +0 -0
  80. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/seer/seer_subgraph_handler.py +0 -0
  81. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/markets/seer/subgraph_data_models.py +0 -0
  82. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/py.typed +0 -0
  83. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/_generic_value.py +0 -0
  84. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/balances.py +0 -0
  85. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/betting_strategies/kelly_criterion.py +0 -0
  86. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py +0 -0
  87. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/betting_strategies/utils.py +0 -0
  88. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/caches/db_cache.py +0 -0
  89. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/caches/inmemory_cache.py +0 -0
  90. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/caches/serializers.py +0 -0
  91. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/contract.py +0 -0
  92. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/costs.py +0 -0
  93. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/cow/cow_order.py +0 -0
  94. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/custom_exceptions.py +0 -0
  95. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/datetime_utc.py +0 -0
  96. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/db/db_manager.py +0 -0
  97. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/google_utils.py +0 -0
  98. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/hexbytes_custom.py +0 -0
  99. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/httpx_cached_client.py +0 -0
  100. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/image_gen/image_gen.py +0 -0
  101. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/image_gen/market_thumbnail_gen.py +0 -0
  102. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/ipfs/ipfs_handler.py +0 -0
  103. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/is_invalid.py +0 -0
  104. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/is_predictable.py +0 -0
  105. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/langfuse_.py +0 -0
  106. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/langfuse_client_utils.py +0 -0
  107. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/omen/reality_accuracy.py +0 -0
  108. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/omen/sell_positions.py +0 -0
  109. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/parallelism.py +0 -0
  110. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/relevant_news_analysis/data_models.py +0 -0
  111. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_analysis.py +0 -0
  112. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/relevant_news_analysis/relevant_news_cache.py +0 -0
  113. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/safe.py +0 -0
  114. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/singleton.py +0 -0
  115. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/streamlit_user_login.py +0 -0
  116. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/tavily/tavily_models.py +0 -0
  117. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/tavily/tavily_search.py +0 -0
  118. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/tokens/auto_deposit.py +0 -0
  119. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/tokens/auto_withdraw.py +0 -0
  120. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/tokens/main_token.py +0 -0
  121. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/tokens/token_utils.py +0 -0
  122. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/tokens/usd.py +0 -0
  123. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/transaction_cache.py +0 -0
  124. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/utils.py +0 -0
  125. {prediction_market_agent_tooling-0.65.5 → prediction_market_agent_tooling-0.65.6}/prediction_market_agent_tooling/tools/web3_utils.py +0 -0
@@ -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.6
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.13
@@ -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
  )
@@ -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
  [tool.poetry]
2
2
  name = "prediction-market-agent-tooling"
3
- version = "0.65.5"
3
+ version = "0.65.6"
4
4
  description = "Tools to benchmark, deploy and monitor prediction market agents."
5
5
  authors = ["Gnosis"]
6
6
  readme = "README.md"