Saiyaswanth007 commited on
Commit
fbe86b3
·
1 Parent(s): 678e06c

Code fixing

Browse files
Files changed (1) hide show
  1. app.py +54 -24
app.py CHANGED
@@ -9,7 +9,7 @@ import urllib.request
9
  import torchaudio
10
  from scipy.spatial.distance import cosine
11
  from RealtimeSTT import AudioToTextRecorder
12
- from fastapi import FastAPI
13
  from fastrtc import Stream, AsyncStreamHandler, ReplyOnPause, get_cloudflare_turn_credentials_async, get_cloudflare_turn_credentials
14
  import json
15
  import io
@@ -618,19 +618,16 @@ async def get_cloudflare_credentials():
618
  # Check if HF_TOKEN is set in environment
619
  hf_token = os.environ.get("HF_TOKEN")
620
 
621
- # If not set, use a default Hugging Face token if available
622
  if not hf_token:
623
- # Log a warning that user should set their own token
624
- print("Warning: HF_TOKEN environment variable not set. Please set your own Hugging Face token.")
625
- # Try to use the Hugging Face token from the environment
626
- from huggingface_hub import HfApi
627
  try:
 
628
  api = HfApi()
629
  hf_token = api.token
630
- if not hf_token:
631
- print("Error: No Hugging Face token available. TURN relay may not work properly.")
632
- except:
633
- print("Error: Failed to get Hugging Face token. TURN relay may not work properly.")
634
 
635
  # Get Cloudflare TURN credentials using the Hugging Face token
636
  if hf_token:
@@ -639,7 +636,7 @@ async def get_cloudflare_credentials():
639
  except Exception as e:
640
  print(f"Error getting Cloudflare TURN credentials: {e}")
641
 
642
- # Fallback to a default configuration that may not work
643
  return {
644
  "iceServers": [
645
  {
@@ -655,16 +652,35 @@ def setup_fastrtc_handler():
655
  handler = DiarizationHandler(diarization_system)
656
 
657
  # Get server-side credentials (longer TTL)
658
- server_credentials = get_cloudflare_turn_credentials(ttl=360000)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
659
 
 
660
  stream = Stream(
661
  handler=handler,
662
  modality="audio",
663
  mode="receive",
664
- rtc_configuration=get_cloudflare_credentials, # Async function for client-side credentials
665
- server_rtc_configuration=server_credentials # Server-side credentials with longer TTL
666
  )
667
 
 
 
 
 
668
  return stream
669
 
670
 
@@ -689,14 +705,23 @@ def create_interface():
689
  document.getElementById('start-fastrtc').addEventListener('click', function() {
690
  document.getElementById('fastrtc-status').textContent = 'Connecting...';
691
  // FastRTC will initialize the connection
692
- fetch('/start-rtc', { method: 'POST' })
693
- .then(response => response.text())
694
- .then(data => {
 
 
 
 
 
 
695
  document.getElementById('fastrtc-status').textContent = 'Connected! Speak now...';
696
- })
697
- .catch(error => {
698
- document.getElementById('fastrtc-status').textContent = 'Connection error: ' + error;
699
- });
 
 
 
700
  });
701
  </script>
702
  </div>
@@ -872,9 +897,14 @@ rtc_stream.mount(app)
872
 
873
  # 5) Expose an endpoint to trigger the client-side RTC handshake
874
  @app.post("/start-rtc")
875
- async def start_rtc():
876
- await rtc_stream.start_client()
877
- return {"status": "success"}
 
 
 
 
 
878
 
879
  # 6) Local dev via uvicorn; HF Spaces will auto-detect 'app' and ignore this
880
  if __name__ == "__main__":
 
9
  import torchaudio
10
  from scipy.spatial.distance import cosine
11
  from RealtimeSTT import AudioToTextRecorder
12
+ from fastapi import FastAPI, Request
13
  from fastrtc import Stream, AsyncStreamHandler, ReplyOnPause, get_cloudflare_turn_credentials_async, get_cloudflare_turn_credentials
14
  import json
15
  import io
 
618
  # Check if HF_TOKEN is set in environment
619
  hf_token = os.environ.get("HF_TOKEN")
620
 
621
+ # If not set, try to get from huggingface_hub
622
  if not hf_token:
623
+ print("Warning: HF_TOKEN environment variable not set. Trying to get token from huggingface_hub.")
 
 
 
624
  try:
625
+ from huggingface_hub import HfApi
626
  api = HfApi()
627
  hf_token = api.token
628
+ except Exception as e:
629
+ print(f"Error getting Hugging Face token: {e}")
630
+ hf_token = None
 
631
 
632
  # Get Cloudflare TURN credentials using the Hugging Face token
633
  if hf_token:
 
636
  except Exception as e:
637
  print(f"Error getting Cloudflare TURN credentials: {e}")
638
 
639
+ # Fallback configuration if no token
640
  return {
641
  "iceServers": [
642
  {
 
652
  handler = DiarizationHandler(diarization_system)
653
 
654
  # Get server-side credentials (longer TTL)
655
+ server_credentials = None
656
+ try:
657
+ hf_token = os.environ.get("HF_TOKEN")
658
+ if hf_token:
659
+ server_credentials = get_cloudflare_turn_credentials(hf_token=hf_token, ttl=360000)
660
+ else:
661
+ try:
662
+ from huggingface_hub import HfApi
663
+ api = HfApi()
664
+ hf_token = api.token
665
+ if hf_token:
666
+ server_credentials = get_cloudflare_turn_credentials(hf_token=hf_token, ttl=360000)
667
+ except:
668
+ print("Could not get server-side credentials. Using client-side only.")
669
+ except Exception as e:
670
+ print(f"Error getting server credentials: {e}")
671
 
672
+ # Create the Stream with appropriate configuration
673
  stream = Stream(
674
  handler=handler,
675
  modality="audio",
676
  mode="receive",
677
+ rtc_configuration=get_cloudflare_credentials # Async function for client-side credentials
 
678
  )
679
 
680
+ # Set server-side credentials if available
681
+ if server_credentials:
682
+ stream.server_rtc_configuration = server_credentials
683
+
684
  return stream
685
 
686
 
 
705
  document.getElementById('start-fastrtc').addEventListener('click', function() {
706
  document.getElementById('fastrtc-status').textContent = 'Connecting...';
707
  // FastRTC will initialize the connection
708
+ fetch('/start-rtc', {
709
+ method: 'POST',
710
+ headers: {
711
+ 'Content-Type': 'application/json'
712
+ }
713
+ })
714
+ .then(response => response.json())
715
+ .then(data => {
716
+ if (data.status === 'success') {
717
  document.getElementById('fastrtc-status').textContent = 'Connected! Speak now...';
718
+ } else {
719
+ document.getElementById('fastrtc-status').textContent = 'Connection error: ' + data.error;
720
+ }
721
+ })
722
+ .catch(error => {
723
+ document.getElementById('fastrtc-status').textContent = 'Connection error: ' + error;
724
+ });
725
  });
726
  </script>
727
  </div>
 
897
 
898
  # 5) Expose an endpoint to trigger the client-side RTC handshake
899
  @app.post("/start-rtc")
900
+ async def start_rtc(request: Request):
901
+ try:
902
+ # Initialize client connection
903
+ await rtc_stream.start_client()
904
+ return {"status": "success"}
905
+ except Exception as e:
906
+ print(f"Error starting RTC client: {e}")
907
+ return {"status": "error", "error": str(e)}
908
 
909
  # 6) Local dev via uvicorn; HF Spaces will auto-detect 'app' and ignore this
910
  if __name__ == "__main__":