raktimhugging commited on
Commit
3592121
Β·
verified Β·
1 Parent(s): c6792e2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -62
app.py CHANGED
@@ -721,11 +721,10 @@ demo = gr.TabbedInterface(
721
  title="πŸ”₯ Hybrid Search RAGtim Bot - Vector + BM25 Fusion"
722
  )
723
 
724
- # Add API routes for external access
725
- def api_search(request: gr.Request):
726
- """Handle API search requests"""
727
  try:
728
- # Get query parameters
729
  query = request.query_params.get('query', '')
730
  top_k = int(request.query_params.get('top_k', 5))
731
  search_type = request.query_params.get('search_type', 'hybrid')
@@ -739,15 +738,60 @@ def api_search(request: gr.Request):
739
  except Exception as e:
740
  return {"error": str(e)}
741
 
742
- def api_stats(request: gr.Request):
743
- """Handle API stats requests"""
 
 
 
 
 
 
 
 
 
 
744
  try:
745
  return get_stats_api()
746
  except Exception as e:
747
  return {"error": str(e)}
748
 
749
- # Mount API endpoints
750
- demo.mount_gradio_app = lambda: None # Disable default mounting
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
751
 
752
  if __name__ == "__main__":
753
  print("πŸš€ Launching Hybrid Search RAGtim Bot...")
@@ -756,60 +800,6 @@ if __name__ == "__main__":
756
  print(f"🧠 Vector embeddings: {len(bot.embeddings)} documents")
757
  print("πŸ”₯ Hybrid search ready: Semantic + Keyword fusion!")
758
 
759
- # Create a custom app with API routes
760
- import uvicorn
761
- from fastapi import FastAPI, Request
762
- from fastapi.responses import JSONResponse
763
-
764
- app = FastAPI()
765
-
766
- @app.get("/api/search")
767
- async def search_endpoint(request: Request):
768
- try:
769
- query = request.query_params.get('query', '')
770
- top_k = int(request.query_params.get('top_k', 5))
771
- search_type = request.query_params.get('search_type', 'hybrid')
772
- vector_weight = float(request.query_params.get('vector_weight', 0.6))
773
- bm25_weight = float(request.query_params.get('bm25_weight', 0.4))
774
-
775
- if not query:
776
- return JSONResponse({"error": "Query parameter is required"}, status_code=400)
777
-
778
- result = search_api(query, top_k, search_type, vector_weight, bm25_weight)
779
- return JSONResponse(result)
780
- except Exception as e:
781
- return JSONResponse({"error": str(e)}, status_code=500)
782
-
783
- @app.post("/api/search")
784
- async def search_endpoint_post(request: Request):
785
- try:
786
- body = await request.json()
787
- query = body.get('query', '')
788
- top_k = body.get('top_k', 5)
789
- search_type = body.get('search_type', 'hybrid')
790
- vector_weight = body.get('vector_weight', 0.6)
791
- bm25_weight = body.get('bm25_weight', 0.4)
792
-
793
- if not query:
794
- return JSONResponse({"error": "Query is required"}, status_code=400)
795
-
796
- result = search_api(query, top_k, search_type, vector_weight, bm25_weight)
797
- return JSONResponse(result)
798
- except Exception as e:
799
- return JSONResponse({"error": str(e)}, status_code=500)
800
-
801
- @app.get("/api/stats")
802
- async def stats_endpoint():
803
- try:
804
- result = get_stats_api()
805
- return JSONResponse(result)
806
- except Exception as e:
807
- return JSONResponse({"error": str(e)}, status_code=500)
808
-
809
- # Mount Gradio app
810
- app = gr.mount_gradio_app(app, demo, path="/")
811
-
812
- # For Hugging Face Spaces, just launch the demo
813
  demo.launch(
814
  server_name="0.0.0.0",
815
  server_port=7860,
 
721
  title="πŸ”₯ Hybrid Search RAGtim Bot - Vector + BM25 Fusion"
722
  )
723
 
724
+ # Create API endpoints using Gradio's built-in API functionality
725
+ def api_search_get(request: gr.Request):
726
+ """Handle GET requests to /api/search"""
727
  try:
 
728
  query = request.query_params.get('query', '')
729
  top_k = int(request.query_params.get('top_k', 5))
730
  search_type = request.query_params.get('search_type', 'hybrid')
 
738
  except Exception as e:
739
  return {"error": str(e)}
740
 
741
+ def api_search_post(query: str, top_k: int = 5, search_type: str = "hybrid", vector_weight: float = 0.6, bm25_weight: float = 0.4):
742
+ """Handle POST requests to /api/search"""
743
+ try:
744
+ if not query:
745
+ return {"error": "Query is required"}
746
+
747
+ return search_api(query, top_k, search_type, vector_weight, bm25_weight)
748
+ except Exception as e:
749
+ return {"error": str(e)}
750
+
751
+ def api_stats():
752
+ """Handle requests to /api/stats"""
753
  try:
754
  return get_stats_api()
755
  except Exception as e:
756
  return {"error": str(e)}
757
 
758
+ # Add API endpoints to the demo
759
+ demo.api_name = "hybrid_search_api"
760
+
761
+ # Add the API functions as named endpoints
762
+ demo.fn_index_to_fn_name = {
763
+ len(demo.fns): "search_get",
764
+ len(demo.fns) + 1: "search_post",
765
+ len(demo.fns) + 2: "stats"
766
+ }
767
+
768
+ # Add API functions to the demo
769
+ demo.fns.append(gr.Interface(
770
+ fn=api_search_get,
771
+ inputs=gr.Request(),
772
+ outputs=gr.JSON(),
773
+ api_name="search_get"
774
+ ))
775
+
776
+ demo.fns.append(gr.Interface(
777
+ fn=api_search_post,
778
+ inputs=[
779
+ gr.Textbox(label="query"),
780
+ gr.Number(label="top_k", value=5),
781
+ gr.Textbox(label="search_type", value="hybrid"),
782
+ gr.Number(label="vector_weight", value=0.6),
783
+ gr.Number(label="bm25_weight", value=0.4)
784
+ ],
785
+ outputs=gr.JSON(),
786
+ api_name="search_post"
787
+ ))
788
+
789
+ demo.fns.append(gr.Interface(
790
+ fn=api_stats,
791
+ inputs=[],
792
+ outputs=gr.JSON(),
793
+ api_name="stats"
794
+ ))
795
 
796
  if __name__ == "__main__":
797
  print("πŸš€ Launching Hybrid Search RAGtim Bot...")
 
800
  print(f"🧠 Vector embeddings: {len(bot.embeddings)} documents")
801
  print("πŸ”₯ Hybrid search ready: Semantic + Keyword fusion!")
802
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
803
  demo.launch(
804
  server_name="0.0.0.0",
805
  server_port=7860,