scooter7 commited on
Commit
da658bc
·
verified ·
1 Parent(s): 59c59d4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +12 -9
app.py CHANGED
@@ -13,7 +13,7 @@ from fastrtc import AsyncStreamHandler, Stream, wait_for_item
13
  from pydantic import BaseModel
14
  import uvicorn
15
 
16
- # --- Import get_space to detect Hugging Face Spaces (optional) ---
17
  from gradio.utils import get_space
18
 
19
  # --- Document processing and RAG libraries ---
@@ -37,7 +37,6 @@ current_dir = pathlib.Path(__file__).parent
37
  # 1. Document Ingestion & RAG Pipeline Setup
38
  # ====================================================
39
 
40
- # Folder containing PDFs, Word docs, and text files (place this folder alongside app.py)
41
  DOCS_FOLDER = current_dir / "docs"
42
 
43
  def extract_text_from_pdf(file_path: pathlib.Path) -> str:
@@ -78,20 +77,17 @@ def split_text(text: str, max_length: int = 500, overlap: int = 100) -> List[str
78
  start += max_length - overlap
79
  return chunks
80
 
81
- # Load and process documents
82
  documents = load_documents(DOCS_FOLDER)
83
  all_chunks = []
84
  for doc in documents:
85
  all_chunks.extend(split_text(doc))
86
 
87
- # Compute embeddings and build FAISS index
88
  embedding_model = SentenceTransformer("all-MiniLM-L6-v2")
89
  chunk_embeddings = embedding_model.encode(all_chunks)
90
  embedding_dim = chunk_embeddings.shape[1]
91
  index = faiss.IndexFlatL2(embedding_dim)
92
  index.add(np.array(chunk_embeddings))
93
 
94
- # Setup a text-generation pipeline (using GPT-2 here as an example)
95
  generator = pipeline("text-generation", model="gpt2", max_length=256)
96
 
97
  def retrieve_context(query: str, k: int = 5) -> List[str]:
@@ -119,7 +115,6 @@ def generate_answer(query: str) -> str:
119
  stt_model = whisper.load_model("base", device="cpu")
120
 
121
  def speech_to_text(audio_array: np.ndarray, sample_rate: int = 16000) -> str:
122
- # Convert int16 PCM to float32 normalized to [-1, 1]
123
  audio_float = audio_array.astype(np.float32) / 32768.0
124
  result = stt_model.transcribe(audio_float, fp16=False)
125
  return result["text"]
@@ -197,9 +192,17 @@ class RAGVoiceHandler(AsyncStreamHandler):
197
  # 4. Voice Streaming Setup & FastAPI Endpoints
198
  # ====================================================
199
 
200
- # For ZeroGPU spaces, supply a dummy RTC configuration.
201
- # (This avoids calling get_twilio_turn_credentials() which depends on NVML.)
202
- rtc_config = {"iceServers": [{"urls": "stun:stun.l.google.com:19302"}]}
 
 
 
 
 
 
 
 
203
 
204
  stream = Stream(
205
  modality="audio",
 
13
  from pydantic import BaseModel
14
  import uvicorn
15
 
16
+ # --- Import get_space (optional) ---
17
  from gradio.utils import get_space
18
 
19
  # --- Document processing and RAG libraries ---
 
37
  # 1. Document Ingestion & RAG Pipeline Setup
38
  # ====================================================
39
 
 
40
  DOCS_FOLDER = current_dir / "docs"
41
 
42
  def extract_text_from_pdf(file_path: pathlib.Path) -> str:
 
77
  start += max_length - overlap
78
  return chunks
79
 
 
80
  documents = load_documents(DOCS_FOLDER)
81
  all_chunks = []
82
  for doc in documents:
83
  all_chunks.extend(split_text(doc))
84
 
 
85
  embedding_model = SentenceTransformer("all-MiniLM-L6-v2")
86
  chunk_embeddings = embedding_model.encode(all_chunks)
87
  embedding_dim = chunk_embeddings.shape[1]
88
  index = faiss.IndexFlatL2(embedding_dim)
89
  index.add(np.array(chunk_embeddings))
90
 
 
91
  generator = pipeline("text-generation", model="gpt2", max_length=256)
92
 
93
  def retrieve_context(query: str, k: int = 5) -> List[str]:
 
115
  stt_model = whisper.load_model("base", device="cpu")
116
 
117
  def speech_to_text(audio_array: np.ndarray, sample_rate: int = 16000) -> str:
 
118
  audio_float = audio_array.astype(np.float32) / 32768.0
119
  result = stt_model.transcribe(audio_float, fp16=False)
120
  return result["text"]
 
192
  # 4. Voice Streaming Setup & FastAPI Endpoints
193
  # ====================================================
194
 
195
+ # Supply a dummy (but valid) RTC configuration to satisfy fastrtc.
196
+ rtc_config = {
197
+ "iceServers": [
198
+ {"urls": "stun:stun.l.google.com:19302"},
199
+ {
200
+ "urls": "turn:turn.anyfirewall.com:443?transport=tcp",
201
+ "username": "webrtc",
202
+ "credential": "webrtc"
203
+ }
204
+ ]
205
+ }
206
 
207
  stream = Stream(
208
  modality="audio",