Spaces:
Running
on
Zero
Running
on
Zero
Bellok
commited on
Commit
Β·
514a289
1
Parent(s):
2ce0e5e
feat: integrate HuggingFace Spaces GPU acceleration
Browse files- Added HuggingFace Spaces GPU decorator import with fallback
- Wrapped system initialization and query functions with
@GPU
decorator for GPU acceleration
- Updated query logic to support hybrid retrieval mode
- Added huggingface_hub[spaces] dependency to requirements.txt
This enables efficient GPU utilization on HuggingFace Spaces for improved performance in embedding and retrieval operations.
- app.py +37 -19
- requirements.txt +3 -0
app.py
CHANGED
|
@@ -8,6 +8,13 @@ Provides a web UI for the FractalStat RAG system with GPU acceleration.
|
|
| 8 |
import gradio as gr
|
| 9 |
import time
|
| 10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
# Import Warbler CDA components
|
| 12 |
from warbler_cda.retrieval_api import RetrievalAPI, RetrievalQuery, RetrievalMode
|
| 13 |
from warbler_cda.embeddings import EmbeddingProviderFactory
|
|
@@ -18,26 +25,34 @@ from warbler_cda.pack_loader import PackLoader
|
|
| 18 |
# Initialize the system
|
| 19 |
print("π Initializing Warbler CDA...")
|
| 20 |
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
|
| 25 |
-
# Create
|
| 26 |
-
|
| 27 |
-
print("β
|
| 28 |
|
| 29 |
-
# Create
|
| 30 |
-
|
| 31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
fractalstat_bridge=fractalstat_bridge,
|
| 38 |
-
config={"enable_fractalstat_hybrid": True}
|
| 39 |
-
)
|
| 40 |
-
print("β
RetrievalAPI initialized")
|
| 41 |
|
| 42 |
# Load packs
|
| 43 |
print("π Loading Warbler packs...")
|
|
@@ -109,6 +124,7 @@ else:
|
|
| 109 |
print(f"π Warbler CDA ready with {api.get_context_store_size()} documents!")
|
| 110 |
|
| 111 |
|
|
|
|
| 112 |
def query_warbler(query_text: str, max_results: int = 5, use_hybrid: bool = True) -> str:
|
| 113 |
"""Query the Warbler CDA system."""
|
| 114 |
if not query_text.strip():
|
|
@@ -116,10 +132,12 @@ def query_warbler(query_text: str, max_results: int = 5, use_hybrid: bool = True
|
|
| 116 |
|
| 117 |
start_time = time.time()
|
| 118 |
|
| 119 |
-
# Create query
|
|
|
|
|
|
|
| 120 |
query = RetrievalQuery(
|
| 121 |
query_id=f"gradio_{int(time.time())}",
|
| 122 |
-
mode=
|
| 123 |
semantic_query=query_text,
|
| 124 |
max_results=max_results,
|
| 125 |
fractalstat_hybrid=use_hybrid
|
|
|
|
| 8 |
import gradio as gr
|
| 9 |
import time
|
| 10 |
|
| 11 |
+
# Import HuggingFace Spaces GPU decorator
|
| 12 |
+
try:
|
| 13 |
+
from spaces import GPU
|
| 14 |
+
except ImportError:
|
| 15 |
+
# Fallback if not available
|
| 16 |
+
GPU = lambda func: func
|
| 17 |
+
|
| 18 |
# Import Warbler CDA components
|
| 19 |
from warbler_cda.retrieval_api import RetrievalAPI, RetrievalQuery, RetrievalMode
|
| 20 |
from warbler_cda.embeddings import EmbeddingProviderFactory
|
|
|
|
| 25 |
# Initialize the system
|
| 26 |
print("π Initializing Warbler CDA...")
|
| 27 |
|
| 28 |
+
@GPU
|
| 29 |
+
def initialize_system():
|
| 30 |
+
"""Initialize the Warbler CDA system with GPU support."""
|
| 31 |
+
# Create embedding provider (will use sentence-transformers with GPU if available)
|
| 32 |
+
embedding_provider = EmbeddingProviderFactory.get_default_provider()
|
| 33 |
+
print(f"β
Embedding provider: {embedding_provider.get_provider_info()['provider_id']}")
|
| 34 |
+
|
| 35 |
+
# Create semantic anchors (required by RetrievalAPI)
|
| 36 |
+
semantic_anchors = SemanticAnchorGraph(embedding_provider=embedding_provider)
|
| 37 |
+
print("β
Semantic anchors initialized")
|
| 38 |
|
| 39 |
+
# Create FractalStat bridge
|
| 40 |
+
fractalstat_bridge = FractalStatRAGBridge()
|
| 41 |
+
print("β
FractalStat bridge initialized")
|
| 42 |
|
| 43 |
+
# Create RetrievalAPI with proper components
|
| 44 |
+
api = RetrievalAPI(
|
| 45 |
+
semantic_anchors=semantic_anchors,
|
| 46 |
+
embedding_provider=embedding_provider,
|
| 47 |
+
fractalstat_bridge=fractalstat_bridge,
|
| 48 |
+
config={"enable_fractalstat_hybrid": True}
|
| 49 |
+
)
|
| 50 |
+
print("β
RetrievalAPI initialized")
|
| 51 |
|
| 52 |
+
return api
|
| 53 |
+
|
| 54 |
+
# Initialize with GPU support
|
| 55 |
+
api = initialize_system()
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
|
| 57 |
# Load packs
|
| 58 |
print("π Loading Warbler packs...")
|
|
|
|
| 124 |
print(f"π Warbler CDA ready with {api.get_context_store_size()} documents!")
|
| 125 |
|
| 126 |
|
| 127 |
+
@GPU
|
| 128 |
def query_warbler(query_text: str, max_results: int = 5, use_hybrid: bool = True) -> str:
|
| 129 |
"""Query the Warbler CDA system."""
|
| 130 |
if not query_text.strip():
|
|
|
|
| 132 |
|
| 133 |
start_time = time.time()
|
| 134 |
|
| 135 |
+
# Create query - use hybrid mode when requested
|
| 136 |
+
query_mode = RetrievalMode.HYBRID_SEMANTIC_FRACTALSTAT if use_hybrid else RetrievalMode.SEMANTIC_SIMILARITY
|
| 137 |
+
|
| 138 |
query = RetrievalQuery(
|
| 139 |
query_id=f"gradio_{int(time.time())}",
|
| 140 |
+
mode=query_mode,
|
| 141 |
semantic_query=query_text,
|
| 142 |
max_results=max_results,
|
| 143 |
fractalstat_hybrid=use_hybrid
|
requirements.txt
CHANGED
|
@@ -16,6 +16,9 @@ python-multipart>=0.0.6
|
|
| 16 |
# Gradio for HuggingFace Space
|
| 17 |
gradio>=5.5.0
|
| 18 |
|
|
|
|
|
|
|
|
|
|
| 19 |
# CLI
|
| 20 |
click>=8.1.0
|
| 21 |
|
|
|
|
| 16 |
# Gradio for HuggingFace Space
|
| 17 |
gradio>=5.5.0
|
| 18 |
|
| 19 |
+
# HuggingFace Spaces SDK
|
| 20 |
+
huggingface_hub[spaces]>=0.25.0
|
| 21 |
+
|
| 22 |
# CLI
|
| 23 |
click>=8.1.0
|
| 24 |
|