Exercises / config /llm_config.py
BtB-ExpC's picture
Adding Opus 4, o3-pro
5ff9822
# config/llm_config.py
import os
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_deepseek import ChatDeepSeek
from langchain_google_genai import ChatGoogleGenerativeAI
from openai import api_key
# Retrieve API keys from environment variables
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
# Define temperature presets (adjust as needed)
ZERO = 0
LOW = 0.2
MID = 0.6
HIGH = 1
# Factory functions for each provider
def create_openai_llm(model_name: str, temperature: float):
return ChatOpenAI(api_key=OPENAI_API_KEY, model_name=model_name, temperature=temperature)
def create_openai_reasoning_llm(model_name: str, reasoning_effort: str = None):
# If reasoning_effort is provided, pass it; otherwise, avoid sending the parameter.
if reasoning_effort:
return ChatOpenAI(api_key=OPENAI_API_KEY, model_name=model_name, reasoning_effort=reasoning_effort)
else:
return ChatOpenAI(api_key=OPENAI_API_KEY, model_name=model_name)
def create_anthropic_llm(model_name: str, temperature: float):
return ChatAnthropic(api_key=ANTHROPIC_API_KEY, model_name=model_name, temperature=temperature)
def create_anthropic_reasoning_llm(model_name: str, reasoning_effort: str = None):
# If reasoning_effort is provided, pass it; otherwise, avoid sending the parameter.
if reasoning_effort:
return ChatAnthropic(api_key=ANTHROPIC_API_KEY, model_name=model_name, reasoning_effort=reasoning_effort)
else:
return ChatAnthropic(api_key=ANTHROPIC_API_KEY, model_name=model_name)
def create_deepseek_llm(model_name: str, temperature: float):
return ChatDeepSeek(api_key=DEEPSEEK_API_KEY, model_name=model_name, temperature=temperature)
def create_google_reasoning_llm(model_name: str):
return ChatGoogleGenerativeAI(api_key=GOOGLE_API_KEY, model=model_name)
# all of them in one dictionary
llms = {
# OpenAI models with temperature
"GPT-4o (zero temp)": create_openai_llm("gpt-4o", ZERO),
"GPT-4o (low temp)": create_openai_llm("gpt-4o", LOW),
"GPT-4o (mid temp)": create_openai_llm("gpt-4o", MID),
"GPT-4o (high temp)": create_openai_llm("gpt-4o", HIGH),
"GPT-4.1-mini (zero temp)": create_openai_llm("gpt-4.1-mini", ZERO),
"GPT-4.1-mini (low temp)": create_openai_llm("gpt-4.1-mini", LOW),
"GPT-4 Turbo (low temp)": create_openai_llm("gpt-4-turbo-2024-04-09", LOW),
"GPT-4.1 (low temp)": create_openai_llm("gpt-4.1", LOW),
"GPT-4.1 (mid temp)": create_openai_llm("gpt-4.1", MID),
"GPT-4.5 (low temp)": create_openai_llm("gpt-4.5-preview-2025-02-27", LOW),
"GPT-4.5 (mid temp)": create_openai_llm("gpt-4.5-preview-2025-02-27", MID),
# OpenAI reasoning models (no temperature)
"o1 (low reasoning_effort)": create_openai_reasoning_llm("o1", reasoning_effort="low"),
"o1 (high reasoning_effort)": create_openai_reasoning_llm("o1", reasoning_effort="high"),
"o3-mini (low reasoning_effort)": create_openai_reasoning_llm("o3-mini", reasoning_effort="low"),
"o3-mini (medium reasoning_effort)": create_openai_reasoning_llm("o3-mini", reasoning_effort="medium"),
"o3-mini (high reasoning_effort)": create_openai_reasoning_llm("o3-mini", reasoning_effort="high"),
"o3 (high reasoning_effort)": create_openai_reasoning_llm("o3", reasoning_effort="high"),
"o3-pro": create_openai_reasoning_llm("o3-pro-2025-06-10"),
# Anthropic models (Claude)
"Claude 4 Sonnet (zero temp)": create_anthropic_llm("claude-4-sonnet-latest", ZERO),
"Claude 4 Sonnet (low temp)": create_anthropic_llm("claude-4-sonnet-latest", LOW),
"Claude 4 Sonnet (mid temp)": create_anthropic_llm("claude-4-sonnet-latest", MID),
"Claude 4 Sonnet (high temp)": create_anthropic_llm("claude-4-sonnet-latest", HIGH),
"Claude 4 Opus (zero temp)": create_anthropic_llm("claude-4-opus-latest", ZERO),
"Claude 4 Opus (low temp)": create_anthropic_llm("claude-4-opus-latest", LOW),
"Claude 4 Opus (mid temp)": create_anthropic_llm("claude-4-opus-latest", MID),
"Claude 4 Opus (high temp)": create_anthropic_llm("claude-4-opus-latest", HIGH),
"Claude 3.5 Haiku (zero temp)": create_anthropic_llm("claude-3-5-haiku-latest", ZERO),
"Claude 3.5 Haiku (low temp)": create_anthropic_llm("claude-3-5-haiku-latest", LOW),
"Claude 3.7": create_anthropic_reasoning_llm("claude-3-7-sonnet-latest"),
# DeepSeek
"DeepSeek-R1 (zero temp)": create_deepseek_llm("deepseek-reasoner", ZERO),
"DeepSeek-R1 (low temp)": create_deepseek_llm("deepseek-reasoner", LOW),
"DeepSeek-R1 (mid temp)": create_deepseek_llm("deepseek-reasoner", MID),
"DeepSeek-R1 (high temp)": create_deepseek_llm("deepseek-reasoner", HIGH),
"DeepSeek-V3 (low temp)": create_deepseek_llm("deepseek-chat", LOW),
# Google models (Gemini)
"Gemini 2.5 Pro": create_google_reasoning_llm(model_name= "gemini-2.5-pro"),
}
# specific for Diagnosis tab
llms_most_wanted = {
# OpenAI models
"GPT-4o (zero temp)": create_openai_llm("gpt-4o", ZERO),
"GPT-4o (low temp)": create_openai_llm("gpt-4o", LOW),
"GPT-4o (mid temp)": create_openai_llm("gpt-4o", MID),
"GPT-4o (high temp)": create_openai_llm("gpt-4o", HIGH),
"GPT-4.1-mini (zero temp)": create_openai_llm("GPT-4.1-mini", ZERO),
"GPT-4.1-mini (low temp)": create_openai_llm("GPT-4.1-mini", LOW),
"GPT-4 Turbo (low temp)": create_openai_llm("gpt-4-turbo-2024-04-09", LOW),
# OpenAI reasoning models (no temperature)
"o1": create_openai_reasoning_llm("o1-2024-12-17"),
"o3-mini (low-reasoning effort version)": create_openai_reasoning_llm("o3-mini", reasoning_effort="low"),
"o3-mini (medium-reasoning effort version)": create_openai_reasoning_llm("o3-mini", reasoning_effort="medium"),
"o3-mini (high-reasoning effort version)": create_openai_reasoning_llm("o3-mini", reasoning_effort="high"),
# Anthropic models
"Claude 3.5 (zero temp)": create_anthropic_llm("claude-3-5-sonnet-latest", ZERO),
"Claude 3.5 (low temp)": create_anthropic_llm("claude-3-5-sonnet-latest", LOW),
"Claude 3.5 (mid temp)": create_anthropic_llm("claude-3-5-sonnet-latest", MID),
"Claude 3.5 (high temp)": create_anthropic_llm("claude-3-5-sonnet-latest", HIGH),
"Claude 3.5 Haiku (zero temp)": create_anthropic_llm("claude-3-5-haiku-latest", ZERO),
"Claude 3.5 Haiku (low temp)": create_anthropic_llm("claude-3-5-haiku-latest", LOW),
# DeepSeek
"Deepseek R1 (zero temp)🚧": create_anthropic_llm("deepseek-reasoner", ZERO),
"Deepseek R1 (low temp)🚧": create_anthropic_llm("deepseek-reasoner", LOW),
"Deepseek R1 (mid temp)🚧": create_anthropic_llm("deepseek-reasoner", MID),
"Deepseek R1 (high temp)🚧": create_anthropic_llm("deepseek-reasoner", HIGH),
}