MCPcopy Create free account
hub / github.com/PromtEngineer/localGPT / AdvancedRagApiHandler

Class AdvancedRagApiHandler

rag_system/api_server.py:115–741  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

113 return default_table
114
115class AdvancedRagApiHandler(http.server.BaseHTTPRequestHandler):
116 def do_OPTIONS(self):
117 """Handle CORS preflight requests for frontend integration."""
118 self.send_response(200)
119 self.send_header('Access-Control-Allow-Origin', '*')
120 self.send_header('Access-Control-Allow-Methods', 'POST, OPTIONS')
121 self.send_header('Access-Control-Allow-Headers', 'Content-Type')
122 self.end_headers()
123
124 def do_POST(self):
125 """Handle POST requests for chat and indexing."""
126 parsed_path = urlparse(self.path)
127
128 if parsed_path.path == '/chat':
129 self.handle_chat()
130 elif parsed_path.path == '/chat/stream':
131 self.handle_chat_stream()
132 elif parsed_path.path == '/index':
133 self.handle_index()
134 else:
135 self.send_json_response({"error": "Not Found"}, status_code=404)
136
137 def do_GET(self):
138 parsed_path = urlparse(self.path)
139
140 if parsed_path.path == '/models':
141 self.handle_models()
142 else:
143 self.send_json_response({"error": "Not Found"}, status_code=404)
144
145 def handle_chat(self):
146 """Handles a chat query by calling the agentic RAG pipeline."""
147 try:
148 content_length = int(self.headers['Content-Length'])
149 post_data = self.rfile.read(content_length)
150 data = json.loads(post_data.decode('utf-8'))
151
152 query = data.get('query')
153 session_id = data.get('session_id')
154 compose_flag = data.get('compose_sub_answers')
155 decomp_flag = data.get('query_decompose')
156 ai_rerank_flag = data.get('ai_rerank')
157 ctx_expand_flag = data.get('context_expand')
158 verify_flag = data.get('verify')
159
160 # ✨ NEW RETRIEVAL PARAMETERS
161 retrieval_k = data.get('retrieval_k', 20)
162 context_window_size = data.get('context_window_size', 1)
163 reranker_top_k = data.get('reranker_top_k', 10)
164 search_type = data.get('search_type', 'hybrid')
165 dense_weight = data.get('dense_weight', 0.7)
166
167 # 🚩 NEW: Force RAG override from frontend
168 force_rag = bool(data.get('force_rag', False))
169
170 # 🌿 Provence sentence pruning
171 provence_prune = data.get('provence_prune')
172 provence_threshold = data.get('provence_threshold')

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected