Skip to content

Commit

Permalink
Updated Readme
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrew-Forman committed Aug 5, 2024
1 parent 2c147dc commit 2bffebd
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 25 deletions.
131 changes: 128 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,133 @@
# Agents
# Polymarket Agents

Polymarket Agents is an advanced developer framework and set of utilities for building AI agents for Polymarket. estimating outcomes in information market, or bots that can trade in Polymarkets.

This code is free and publicly available under MIT License open source license!

## Features

- Integration with Polymarket API
- AI agent utilities for prediction markets
- Local and remote RAG (Retrieval-Augmented Generation) support
- Data sourcing from betting services, news providers, and web search
- Comphrehensive LLM tools for prompt engineering

# Getting started

This repo is inteded for use with Python 3.9

1. Clone the repository

```
git clone https://github.com/yourusername/polymarket-agents.git`
cd polymarket-agents
```

2. Create the virtual environment
````
python -m venv venv
```
````
3. Activate the virtual environment

- On Windows:

```
venv\Scripts\activate
```

- On macOS and Linux:

```
source venv/bin/activate
```

4. Install the required dependencies:

```
pip install -r requirements.txt
```

5. Set up your environment variables:

- Create a `.env` file in the project root directory
- Add the following environment variables:

```
POLYMARKET_API_KEY=your_polymarket_api_key
POLYMARKET_SECRET=your_polymarket_secret
POLYMARKET_PASS_PHRASE=your_polymarket_pass_phrase
```

6. Load wallet with USDC

## Architecture

The Polymarket Agents architecture features modular components that can be maintained and extended by individual community members.

### Connectors

Polymarket Agents connectors standardize data sources and order types.

- `Polymarket.py`: defines a Polymarket class that interacts with the Polymarket API to retrieve and manage market and event data, and to execute orders on the Polymarket DEX. It includes methods for API key initialization, market and event data retrieval, and trade execution. The file also provides utility functions for building and signing orders, as well as examples for testing API interactions.

- `Objects.py`: data models using Pydantic; representations for trades, markets, events, and related entities.

- `Chroma.py`: chroma DB for vectorizing news sources and other API data. Developers are able to add their own vector database implementations.

- `Gamma.py`: defines `GammaMarketClient` class, which interfaces with the Polymarket Gamma API to fetch and parse market and event data. Methods to retrieve current and tradable markets, as well as defined information on specific markets and events.

### Scripts

Files for managing your local environment, server set-up to run the application remotely, and cli for end-user commands.

`Cli.py` is the primary user interface for the repo. Users can run various commands to interact with the Polymarket API, retrieve relevant news articles, query local data, send data/prompts to LLMs, and execute trades in Polymarkets.

Commands should follow this format:

`python cli.py command_name [attribute value] [attribute value]`

Example:

`get_all_markets`
Retrieve and display a list of markets from Polymarket, sorted by volume.

```
virtualenv --python=python3.9 .venv
source .venv/bin/activate
python cli.py get_all_markets --limit <LIMIT> --sort-by <SORT_BY>
```

- limit: The number of markets to retrieve (default: 5).
- sort_by: The sorting criterion, either volume (default) or another valid attribute.

# Contributing

If you would like to contribute to this project, please follow these steps:

1. Fork the repository.
2. Create a new branch.
3. Make your changes.
4. Submit a pull request.

# Related Repos

- [py-clob-client](https://github.com/Polymarket/py-clob-client): Python client for the Polymarket CLOB
- [python-order-utils](https://github.com/Polymarket/python-order-utils): Python utilities to generate and sign orders from Polymarket's CLOB
- [Polymarket CLOB client](https://github.com/Polymarket/clob-client): Typescript client for Polymarket CLOB
- [Langchain](https://github.com/langchain-ai/langchain): Utility for building context-aware reasoning applications
- [Chroma](https://docs.trychroma.com/getting-started): Chroma is an AI-native open-source vector database

# Prediction markets reading

- Prediction Markets: Bottlenecks and the Next Major Unlocks, Mikey 0x: https://mirror.xyz/1kx.eth/jnQhA56Kx9p3RODKiGzqzHGGEODpbskivUUNdd7hwh0
- The promise and challenges of crypto + AI applications, Vitalik Buterin: https://vitalik.eth.limo/general/2024/01/30/cryptoai.html
- Superforecasting: How to Upgrade Your Company's Judgement, Schoemaker and Tetlock: https://hbr.org/2016/05/superforecasting-how-to-upgrade-your-companys-judgment

# License

This project is licensed under the MIT License. See the LICENSE file for details.

# Contact

For any questions or inquiries, please contact [email protected].

Enjoy using the CLI application! If you encounter any issues, feel free to open an issue on the repository.
6 changes: 6 additions & 0 deletions ai/llm/prompt_executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI
from langchain_core.runnables import RunnablePassthrough
from langchain.prompts import ChatPromptTemplate
from ai.llm import prompts
from api.polymarket.gamma_market_client import GammaMarketClient

Expand Down Expand Up @@ -47,4 +48,9 @@ def get_polymarket_llm(user_input: str) -> str:
return result.content


def generate_queries(user_input: str) -> str:
prompt_perspectives = ChatPromptTemplate.from_template(prompts.decomposition_prompt)
generate_queries = prompt_perspectives | ChatOpenAI(temperature=0)


# add prompts on market data and news data
25 changes: 6 additions & 19 deletions ai/llm/prompts.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def superforecaster(event_title: str, market_question: str, outcome: str) -> str
- Seek out diverse sources of information.
- Look for both quantitative data and qualitative insights.
- Stay updated on relevant news and expert analyses.
3. Considere Base Rates:
3. Consider Base Rates:
- Use statistical baselines or historical averages as a starting point.
- Compare the current situation to similar past events to establish a benchmark probability.
4. Identify and Evaluate Factors:
Expand All @@ -68,24 +68,6 @@ def superforecaster(event_title: str, market_question: str, outcome: str) -> str
"""


def prompts_polymarket(data1: str, data2: str, user_input: str) -> str:
current_market_data = str(data1)
current_event_data = str(data2)
return f"""
You are an AI assistant for users of a prediction market called Polymarket.
Users want to place bets based on their beliefs of market outcomes such as political or sports events.
Here is data for current Polymarket markets {current_market_data} and
current Polymarket events {current_event_data}.
Help users identify markets to trade based on their interests or queries.
Provide specific information for markets including probabilities of outcomes.
Give your response in the following format:
I believe {market_question} has a likelihood {float} for outcome of {outcome}.
"""


def prompts_polymarket(data1: str, data2: str, user_input: str) -> str:
current_market_data = str(data1)
current_event_data = str(data2)
Expand Down Expand Up @@ -115,6 +97,11 @@ def multiquery(question: str) -> str:
"""

def decomposition_prompt(question: str) -> str:
return f"""You are a helpful assistant that generates multiple sub-questions related to an input question. \n
The goal is to break down the input into a set of sub-problems / sub-questions that can be answers in isolation. \n
Generate multiple search queries related to: {question} \n
Output (3 queries):""" """
def read_polymarket() -> str:
return f"""
Expand Down
2 changes: 2 additions & 0 deletions ai/llm/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
from typing import Annotated
from json import tool
from langchain.tools import tool

# def get_market_news(market_question)
7 changes: 4 additions & 3 deletions cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from ai.llm import prompt_executor, prompts
from data_sources.news_providers.newsapi_org.newsapi_caller import NewsApiCaller
from langchain_core.output_parsers import StrOutputParser
from data_sources.news_providers.newsapi_org.newsapi_caller import NewsApiCaller
from langchain.prompts import ChatPromptTemplate
from local_rag import run_query_on_local_data

app = typer.Typer()
Expand Down Expand Up @@ -95,10 +95,11 @@ def ask_llm(user_input: str):


@app.command()
def ask_polymarket_llm(user_input: str):
def advanced_rag(user_input: str):
"""
What types of markets do you want trade?
Ask a question, reference Polymarket data, send to LLM, get a response.
"""
prompt_perspectives = Chat

rag_chain = (
{"context": retriever, "question": user_input}
Expand Down

0 comments on commit 2bffebd

Please sign in to comment.