Joseph Pollack commited on
Commit
4d542a9
Β·
unverified Β·
1 Parent(s): 1244652

adds repo creation with fallback , skip creation

Browse files
Files changed (1) hide show
  1. scripts/deploy_demo_space.py +81 -10
scripts/deploy_demo_space.py CHANGED
@@ -483,13 +483,13 @@ os.environ['BRAND_PROJECT_URL'] = json.dumps({_json.dumps(self.brand_project_url
483
  # Try multiple CLI variants depending on installed version
484
  cli_attempts = [
485
  ["huggingface-cli", "repo", "create", self.space_id, "--repo-type", "space", "--space_sdk", "gradio"],
486
- ["hf", "repo", "create", self.space_id, "--repo-type", "space", "--space-sdk", "gradio"],
487
- ["huggingface-cli", "repo", "create", self.space_id, "--repo-type", "space"],
488
- ["hf", "repo", "create", self.space_id, "--repo-type", "space"],
489
  ]
490
 
491
  last_err = None
492
- for cmd in cli_attempts:
493
  logger.info(f"Running command: {' '.join(cmd)}")
494
  result = subprocess.run(cmd, capture_output=True, text=True)
495
  if result.returncode == 0:
@@ -497,10 +497,15 @@ os.environ['BRAND_PROJECT_URL'] = json.dumps({_json.dumps(self.brand_project_url
497
  break
498
  else:
499
  last_err = result.stderr
 
 
 
 
500
  logger.warning(f"CLI attempt failed: {last_err}")
501
  else:
502
  logger.error(f"❌ Failed to create space via CLI: {last_err}")
503
- return False
 
504
 
505
  # Verify the space exists and is recognized as a space
506
  try:
@@ -520,6 +525,57 @@ os.environ['BRAND_PROJECT_URL'] = json.dumps({_json.dumps(self.brand_project_url
520
 
521
  except Exception as e:
522
  logger.error(f"❌ Error creating space with CLI: {e}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
523
  return False
524
 
525
  def prepare_space_files(self) -> str:
@@ -827,7 +883,7 @@ os.environ['BRAND_PROJECT_URL'] = json.dumps({_json.dumps(self.brand_project_url
827
  logger.error(f"❌ Error testing space: {e}")
828
  return False
829
 
830
- def deploy(self) -> bool:
831
  """Main deployment method"""
832
  logger.info(f"πŸš€ Starting demo space deployment for {self.model_id}")
833
 
@@ -835,9 +891,23 @@ os.environ['BRAND_PROJECT_URL'] = json.dumps({_json.dumps(self.brand_project_url
835
  if not self.validate_model_exists():
836
  return False
837
 
838
- # Step 2: Create space repository
839
- if not self.create_space_repository():
840
- return False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
841
 
842
  # Step 3: Prepare files
843
  temp_dir = self.prepare_space_files()
@@ -904,6 +974,7 @@ def main():
904
  parser.add_argument("--brand-gh-url", help="Custom GitHub link URL (defaults to https://github.com/<org>)")
905
  parser.add_argument("--brand-project-name", help="Project name to link in Join Us")
906
  parser.add_argument("--brand-project-url", help="Project URL to link in Join Us")
 
907
 
908
  args = parser.parse_args()
909
 
@@ -932,7 +1003,7 @@ def main():
932
  brand_project_url=args.brand_project_url,
933
  )
934
 
935
- success = deployer.deploy()
936
 
937
  if success:
938
  print("\nβœ… Deployment successful!")
 
483
  # Try multiple CLI variants depending on installed version
484
  cli_attempts = [
485
  ["huggingface-cli", "repo", "create", self.space_id, "--repo-type", "space", "--space_sdk", "gradio"],
486
+ ["hf", "repo", "create", self.space_id, "--repo-type", "space", "--space_sdk", "gradio"],
487
+ ["huggingface-cli", "repo", "create", self.space_id, "--repo-type", "space", "--space_sdk", "gradio", "--exist-ok"],
488
+ ["hf", "repo", "create", self.space_id, "--repo-type", "space", "--space_sdk", "gradio", "--exist-ok"],
489
  ]
490
 
491
  last_err = None
492
+ for attempt, cmd in enumerate(cli_attempts):
493
  logger.info(f"Running command: {' '.join(cmd)}")
494
  result = subprocess.run(cmd, capture_output=True, text=True)
495
  if result.returncode == 0:
 
497
  break
498
  else:
499
  last_err = result.stderr
500
+ if "429" in str(result.stderr) or "Too Many Requests" in str(result.stderr):
501
+ logger.warning(f"Rate limited on attempt {attempt + 1}. Waiting 30 seconds before next attempt...")
502
+ time.sleep(30)
503
+ continue
504
  logger.warning(f"CLI attempt failed: {last_err}")
505
  else:
506
  logger.error(f"❌ Failed to create space via CLI: {last_err}")
507
+ logger.info("πŸ”„ Attempting manual space creation fallback...")
508
+ return self._manual_space_creation_fallback()
509
 
510
  # Verify the space exists and is recognized as a space
511
  try:
 
525
 
526
  except Exception as e:
527
  logger.error(f"❌ Error creating space with CLI: {e}")
528
+ return self._manual_space_creation_fallback()
529
+
530
+ def _manual_space_creation_fallback(self) -> bool:
531
+ """Manual fallback when all automated methods fail due to rate limiting"""
532
+ try:
533
+ logger.info("πŸ“ Manual Space Creation Instructions:")
534
+ logger.info(f" Space ID: {self.space_id}")
535
+ logger.info(f" Space URL: {self.space_url}")
536
+ logger.info(f" Model ID: {self.model_id}")
537
+ logger.info(f" Demo Type: {self.demo_type}")
538
+
539
+ logger.info("\nπŸ”§ To create the space manually:")
540
+ logger.info("1. Go to https://huggingface.co/new-space")
541
+ logger.info(f"2. Set Space name to: {self.space_name}")
542
+ logger.info("3. Select 'Gradio' as the SDK")
543
+ logger.info("4. Set to Public")
544
+ logger.info("5. Click 'Create Space'")
545
+ logger.info("\nπŸ“‹ After creating the space, run this command to upload files:")
546
+ logger.info(f" python scripts/deploy_demo_space.py --hf-token <token> --hf-username {self.hf_username} --model-id {self.model_id} --demo-type {self.demo_type} --space-name {self.space_name} --skip-creation")
547
+
548
+ # Check if space exists (user might have created it manually)
549
+ try:
550
+ if HF_HUB_AVAILABLE:
551
+ info = self.api.repo_info(self.space_id, repo_type="space")
552
+ if info:
553
+ logger.info("βœ… Space found! Proceeding with file upload...")
554
+ return True
555
+ except Exception:
556
+ pass
557
+
558
+ logger.info("\n⏳ Waiting for manual space creation...")
559
+ logger.info(" (The script will continue once the space is created)")
560
+
561
+ # Wait for user to create space manually
562
+ for i in range(30): # Wait up to 5 minutes
563
+ try:
564
+ if HF_HUB_AVAILABLE:
565
+ info = self.api.repo_info(self.space_id, repo_type="space")
566
+ if info:
567
+ logger.info("βœ… Space created manually! Proceeding...")
568
+ return True
569
+ except Exception:
570
+ pass
571
+ logger.info(f" Waiting... ({i+1}/30)")
572
+ time.sleep(10)
573
+
574
+ logger.error("❌ Space not created within timeout period")
575
+ return False
576
+
577
+ except Exception as e:
578
+ logger.error(f"❌ Error in manual fallback: {e}")
579
  return False
580
 
581
  def prepare_space_files(self) -> str:
 
883
  logger.error(f"❌ Error testing space: {e}")
884
  return False
885
 
886
+ def deploy(self, skip_creation: bool = False) -> bool:
887
  """Main deployment method"""
888
  logger.info(f"πŸš€ Starting demo space deployment for {self.model_id}")
889
 
 
891
  if not self.validate_model_exists():
892
  return False
893
 
894
+ # Step 2: Create space repository (skip if requested)
895
+ if not skip_creation:
896
+ if not self.create_space_repository():
897
+ return False
898
+ else:
899
+ logger.info("⏭️ Skipping space creation (--skip-creation flag)")
900
+ # Verify space exists
901
+ try:
902
+ if HF_HUB_AVAILABLE:
903
+ info = self.api.repo_info(self.space_id, repo_type="space")
904
+ if not info:
905
+ logger.error(f"❌ Space {self.space_id} not found. Please create it first.")
906
+ return False
907
+ logger.info(f"βœ… Found existing space: {self.space_url}")
908
+ except Exception as e:
909
+ logger.error(f"❌ Error verifying space: {e}")
910
+ return False
911
 
912
  # Step 3: Prepare files
913
  temp_dir = self.prepare_space_files()
 
974
  parser.add_argument("--brand-gh-url", help="Custom GitHub link URL (defaults to https://github.com/<org>)")
975
  parser.add_argument("--brand-project-name", help="Project name to link in Join Us")
976
  parser.add_argument("--brand-project-url", help="Project URL to link in Join Us")
977
+ parser.add_argument("--skip-creation", action="store_true", help="Skip space creation and only upload files (for manual space creation)")
978
 
979
  args = parser.parse_args()
980
 
 
1003
  brand_project_url=args.brand_project_url,
1004
  )
1005
 
1006
+ success = deployer.deploy(skip_creation=getattr(args, 'skip_creation', False))
1007
 
1008
  if success:
1009
  print("\nβœ… Deployment successful!")