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.

Files changed (2) hide show
  1. app.py +37 -19
  2. 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
- # Create embedding provider (will use sentence-transformers with GPU if available)
22
- embedding_provider = EmbeddingProviderFactory.get_default_provider()
23
- print(f"βœ… Embedding provider: {embedding_provider.get_provider_info()['provider_id']}")
 
 
 
 
 
 
 
24
 
25
- # Create semantic anchors (required by RetrievalAPI)
26
- semantic_anchors = SemanticAnchorGraph(embedding_provider=embedding_provider)
27
- print("βœ… Semantic anchors initialized")
28
 
29
- # Create FractalStat bridge
30
- fractalstat_bridge = FractalStatRAGBridge()
31
- print("βœ… FractalStat bridge initialized")
 
 
 
 
 
32
 
33
- # Create RetrievalAPI with proper components
34
- api = RetrievalAPI(
35
- semantic_anchors=semantic_anchors,
36
- embedding_provider=embedding_provider,
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=RetrievalMode.SEMANTIC_SIMILARITY,
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