File size: 4,267 Bytes
e8051be
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# 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"