Skip to content
This repository was archived by the owner on May 11, 2026. It is now read-only.

Commit b4f14ad

Browse files
author
TheophilusChinomona
committed
feat: support any OpenAI-compatible LLM provider (OpenRouter, Groq, etc.)
executor.py: - Constructor accepts api_key, base_url, model params - Reads LLM_API_KEY, LLM_BASE_URL, LLM_MODEL env vars - Falls back to OPENAI_API_KEY for backwards compat - ChatOpenAI works with any OpenAI-compatible endpoint chroma.py: - Configurable embedding model, key, base_url via env vars - EMBEDDING_MODEL, LLM_API_KEY, LLM_BASE_URL - Falls back to OPENAI_API_KEY Example .env for OpenRouter: LLM_API_KEY=sk-or-v1-xxx LLM_BASE_URL=https://openrouter.ai/api/v1 LLM_MODEL=anthropic/claude-sonnet-4 EMBEDDING_MODEL=openai/text-embedding-3-small
1 parent f292ed9 commit b4f14ad

2 files changed

Lines changed: 47 additions & 12 deletions

File tree

agents/application/executor.py

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,38 @@ def retain_keys(data, keys_to_retain):
3131
return data
3232

3333
class Executor:
34-
def __init__(self, default_model='gpt-3.5-turbo-16k') -> None:
34+
def __init__(
35+
self,
36+
default_model: str = None,
37+
api_key: str = None,
38+
base_url: str = None,
39+
) -> None:
3540
load_dotenv()
36-
max_token_model = {'gpt-3.5-turbo-16k':15000, 'gpt-4-1106-preview':95000}
37-
self.token_limit = max_token_model.get(default_model)
3841
self.prompter = Prompter()
39-
self.openai_api_key = os.getenv("OPENAI_API_KEY")
40-
self.llm = ChatOpenAI(
41-
model=default_model, #gpt-3.5-turbo"
42-
temperature=0,
43-
)
42+
43+
# Support any OpenAI-compatible provider via env vars or args
44+
self.api_key = api_key or os.getenv("OPENAI_API_KEY") or os.getenv("LLM_API_KEY")
45+
self.base_url = base_url or os.getenv("LLM_BASE_URL")
46+
self.model = default_model or os.getenv("LLM_MODEL", "gpt-3.5-turbo-16k")
47+
48+
llm_kwargs = {
49+
"model": self.model,
50+
"temperature": 0,
51+
"api_key": self.api_key,
52+
}
53+
if self.base_url:
54+
llm_kwargs["base_url"] = self.base_url
55+
56+
self.llm = ChatOpenAI(**llm_kwargs)
57+
58+
max_token_model = {
59+
"gpt-3.5-turbo-16k": 15000,
60+
"gpt-4-1106-preview": 95000,
61+
"gpt-4o-mini": 125000,
62+
"gpt-4o": 125000,
63+
}
64+
self.token_limit = max_token_model.get(self.model, 15000)
65+
4466
self.gamma = Gamma()
4567
self.chroma = Chroma()
4668
self.polymarket = Polymarket()

agents/connectors/chroma.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,19 @@ def __init__(self, local_db_directory=None, embedding_function=None) -> None:
1818
self.gamma_client = GammaMarketClient()
1919
self.local_db_directory = local_db_directory
2020
self.embedding_function = embedding_function
21+
# Embedding config — supports any OpenAI-compatible provider
22+
self.embedding_model = os.getenv("EMBEDDING_MODEL", "text-embedding-3-small")
23+
self.embedding_api_key = os.getenv("OPENAI_API_KEY") or os.getenv("LLM_API_KEY")
24+
self.embedding_base_url = os.getenv("LLM_BASE_URL")
25+
26+
def _get_embedding_function(self):
27+
kwargs = {
28+
"model": self.embedding_model,
29+
"api_key": self.embedding_api_key,
30+
}
31+
if self.embedding_base_url:
32+
kwargs["base_url"] = self.embedding_base_url
33+
return OpenAIEmbeddings(**kwargs)
2134

2235
def load_json_from_local(
2336
self, json_file_path=None, vector_db_directory="./local_db"
@@ -27,7 +40,7 @@ def load_json_from_local(
2740
)
2841
loaded_docs = loader.load()
2942

30-
embedding_function = OpenAIEmbeddings(model="text-embedding-3-small")
43+
embedding_function = self._get_embedding_function()
3144
Chroma.from_documents(
3245
loaded_docs, embedding_function, persist_directory=vector_db_directory
3346
)
@@ -50,7 +63,7 @@ def create_local_markets_rag(self, local_directory="./local_db") -> None:
5063
def query_local_markets_rag(
5164
self, local_directory=None, query=None
5265
) -> "list[tuple]":
53-
embedding_function = OpenAIEmbeddings(model="text-embedding-3-small")
66+
embedding_function = self._get_embedding_function()
5467
local_db = Chroma(
5568
persist_directory=local_directory, embedding_function=embedding_function
5669
)
@@ -83,7 +96,7 @@ def metadata_func(record: dict, metadata: dict) -> dict:
8396
metadata_func=metadata_func,
8497
)
8598
loaded_docs = loader.load()
86-
embedding_function = OpenAIEmbeddings(model="text-embedding-3-small")
99+
embedding_function = self._get_embedding_function()
87100
vector_db_directory = f"{local_events_directory}/chroma"
88101
local_db = Chroma.from_documents(
89102
loaded_docs, embedding_function, persist_directory=vector_db_directory
@@ -120,7 +133,7 @@ def metadata_func(record: dict, metadata: dict) -> dict:
120133
metadata_func=metadata_func,
121134
)
122135
loaded_docs = loader.load()
123-
embedding_function = OpenAIEmbeddings(model="text-embedding-3-small")
136+
embedding_function = self._get_embedding_function()
124137
vector_db_directory = f"{local_events_directory}/chroma"
125138
local_db = Chroma.from_documents(
126139
loaded_docs, embedding_function, persist_directory=vector_db_directory

0 commit comments

Comments
 (0)