rag-bajaj / config /config.py
quantumbit's picture
Upload 39 files
e8051be verified
# RAG Configuration File
# Update these settings as needed
import os
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
# Common LLM Settings
MAX_TOKENS = 1200
TEMPERATURE = 0.4
# OCR Settings
OCR_SPACE_API_KEY = os.getenv("OCR_SPACE_API_KEY", "")
# OpenAI Settings
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "")
OPENAI_MODEL = "gpt-3.5-turbo"
# Gemini Settings
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY", "")
GEMINI_MODEL = "gemini-1.5-flash"
# Groq Settings
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
GROQ_MODEL = os.getenv("GROQ_MODEL", "llama3-70b-8192")
GROQ_API_KEY_LITE = os.getenv("GROQ_API_KEY_LITE")
GROQ_MODEL_LITE = "llama3-8b-8192"
# API Authentication
BEARER_TOKEN = os.getenv("BEARER_TOKEN", "c6cee5b5046310e401632a7effe9c684d071a9ef5ce09b96c9ec5c3ebd13085e")
# Chunking (TOKEN-BASED)
CHUNK_SIZE = 1600 #
CHUNK_OVERLAP = 200
# Retrieval Settings
TOP_K = 12
SCORE_THRESHOLD = 0.3
RERANK_TOP_K = 9
BM25_WEIGHT = 0.3
SEMANTIC_WEIGHT = 0.7
# Advanced RAG Settings
ENABLE_RERANKING = True
ENABLE_HYBRID_SEARCH = True
ENABLE_QUERY_EXPANSION = True
RERANKER_MODEL = "cross-encoder/ms-marco-MiniLM-L-6-v2"
QUERY_EXPANSION_COUNT = 3
MAX_CONTEXT_LENGTH = 15000
USE_TOTAL_BUDGET_APPROACH = True
# Embedding Settings
EMBEDDING_MODEL = "BAAI/bge-large-en"
BATCH_SIZE = 16
# Paths
OUTPUT_DIR = os.getenv("RAG_EMBEDDINGS_PATH", "./RAG/rag_embeddings")
# API Settings
API_HOST = "0.0.0.0"
API_PORT = 8000
API_RELOAD = True
# Multi-LLM failover system
sequence = ["primary", "secondary", "ternary", "quaternary", "quinary", "senary", "septenary", "octonary", "nonary", "denary"]
def get_provider_configs():
"""
Get configurations for all provider instances with failover support.
Supports multiple instances of each provider type for reliability.
"""
configs = {
"groq": [],
"gemini": [],
"openai": []
}
# Groq configurations with multiple API keys for failover
DEFAULT_GROQ_MODEL = "qwen/qwen3-32b"
configs["groq"] = [{
"name": sequence[i-1],
"api_key": os.getenv(f"GROQ_API_KEY_{i}"),
"model": os.getenv(f"GROQ_MODEL_{i}", DEFAULT_GROQ_MODEL)} for i in range(1, 10) if os.getenv(f"GROQ_API_KEY_{i}", "")
]
# Add main GROQ key as primary
if os.getenv("GROQ_API_KEY"):
configs["groq"].insert(0, {
"name": "main",
"api_key": os.getenv("GROQ_API_KEY"),
"model": DEFAULT_GROQ_MODEL
})
# Gemini configurations with multiple API keys for failover
DEFAULT_GEMINI_MODEL = "gemini-1.5-flash"
configs["gemini"] = [{
"name": sequence[i-1],
"api_key": os.getenv(f"GEMINI_API_KEY_{i}"),
"model": os.getenv(f"GEMINI_MODEL_{i}", DEFAULT_GEMINI_MODEL)
} for i in range(1, 10) if os.getenv(f"GEMINI_API_KEY_{i}", "")
]
# Add main GEMINI key as primary
if os.getenv("GEMINI_API_KEY"):
configs["gemini"].insert(0, {
"name": "main",
"api_key": os.getenv("GEMINI_API_KEY"),
"model": DEFAULT_GEMINI_MODEL
})
# OpenAI configurations with multiple API keys for failover
DEFAULT_OPENAI_MODEL = "gpt-4o-mini"
configs["openai"] = [{
"name": sequence[i-1],
"api_key": os.getenv(f"OPENAI_API_KEY_{i}"),
"model": os.getenv(f"OPENAI_MODEL_{i}", DEFAULT_OPENAI_MODEL)
} for i in range(1, 10) if os.getenv(f"OPENAI_API_KEY_{i}", "")
]
# Add main OPENAI key as primary
if os.getenv("OPENAI_API_KEY"):
configs["openai"].insert(0, {
"name": "main",
"api_key": os.getenv("OPENAI_API_KEY"),
"model": DEFAULT_OPENAI_MODEL
})
return configs
# Specialized API keys for different tasks
GROQ_API_KEY_TABULAR = os.getenv("GROQ_API_KEY_TABULAR", GROQ_API_KEY)
GEMINI_API_KEY_IMAGE = os.getenv("GEMINI_API_KEY_IMAGE", GEMINI_API_KEY)
GEMINI_API_KEY_MULTILINGUAL = os.getenv("GEMINI_API_KEY_MULTILINGUAL", GEMINI_API_KEY)
# Validation (optional - comment out for production)
# assert OPENAI_API_KEY, "OPENAI KEY NOT SET"
# assert GEMINI_API_KEY, "GEMINI KEY NOT SET"
# assert GROQ_API_KEY, "GROQ KEY NOT SET"