Spaces:
Sleeping
Sleeping
| """Integration tests for the full GGUF splitting workflow""" | |
| import os | |
| import subprocess | |
| import pathlib | |
| import pytest | |
| from src.gguf_utils import ( | |
| get_llama_gguf_split_path, | |
| calculate_optimal_split_size, | |
| split_gguf_file, | |
| ) | |
| from src.hf_utils import get_gguf_files_from_repo | |
| class TestFullSplitWorkflow: | |
| """Integration tests for the complete splitting workflow""" | |
| def test_full_split_workflow_smollm2(self, temp_dir, test_gguf_url, test_gguf_filename): | |
| llama_path = get_llama_gguf_split_path() | |
| assert os.path.isfile(llama_path), f"llama-gguf-split not found at {llama_path}" | |
| gguf_path = temp_dir / test_gguf_filename | |
| print(f"\nDownloading {test_gguf_url}...") | |
| result = subprocess.run( | |
| ["curl", "-L", "-o", str(gguf_path), test_gguf_url], | |
| capture_output=True, | |
| text=True, | |
| ) | |
| assert result.returncode == 0, f"Download failed: {result.stderr}" | |
| assert gguf_path.exists(), "Downloaded file does not exist" | |
| file_size_mb = gguf_path.stat().st_size / (1024 * 1024) | |
| print(f"Downloaded file size: {file_size_mb:.1f} MB") | |
| assert file_size_mb > 50, "Downloaded file is too small, might be corrupted" | |
| output_prefix = temp_dir / "gguf_split" | |
| max_size_mb = calculate_optimal_split_size(str(gguf_path), str(output_prefix)) | |
| print(f"Calculated optimal split size: {max_size_mb} MB") | |
| assert max_size_mb > 0, "Split size should be positive" | |
| output_pattern = temp_dir / "gguf_split-" | |
| success = split_gguf_file(str(gguf_path), str(output_pattern), max_size_mb) | |
| assert success, "Splitting failed" | |
| split_files = sorted(temp_dir.glob("gguf_split-*.gguf")) | |
| print(f"Generated {len(split_files)} split files:") | |
| total_split_size = 0 | |
| for f in split_files: | |
| size_mb = f.stat().st_size / (1024 * 1024) | |
| total_split_size += f.stat().st_size | |
| print(f" - {f.name}: {size_mb:.1f} MB") | |
| assert len(split_files) >= 2, "Should have at least 2 split files" | |
| assert len(split_files) <= 10, "Should not have more than 10 split files for a 100MB model" | |
| for f in split_files: | |
| size_mb = f.stat().st_size / (1024 * 1024) | |
| assert size_mb <= max_size_mb * 1.1, f"Split file {f.name} exceeds max size" | |
| original_size = gguf_path.stat().st_size | |
| assert total_split_size >= original_size * 0.9, "Total split size is too small" | |
| assert total_split_size <= original_size * 1.5, "Total split size is too large" | |
| print(f"\nSplit verification passed!") | |
| print(f" Original size: {original_size / (1024 * 1024):.1f} MB") | |
| print(f" Total split size: {total_split_size / (1024 * 1024):.1f} MB") | |
| print(f" Number of parts: {len(split_files)}") | |
| class TestHuggingFaceIntegration: | |
| """Integration tests for Hugging Face API interactions""" | |
| def test_list_gguf_files_from_real_repo(self, test_repo_id): | |
| from huggingface_hub import HfApi | |
| api = HfApi() | |
| gguf_files = get_gguf_files_from_repo(test_repo_id, api) | |
| print(f"\nFound {len(gguf_files)} GGUF files in {test_repo_id}:") | |
| for f in gguf_files[:5]: | |
| print(f" - {f}") | |
| assert len(gguf_files) > 0, f"No GGUF files found in {test_repo_id}" | |
| assert any("Q4_K_M" in f for f in gguf_files), "Test file Q4_K_M not found in repo" | |
| class TestEnvironmentSetup: | |
| """Tests to verify the test environment is correctly set up""" | |
| def test_llama_gguf_split_available(self): | |
| path = get_llama_gguf_split_path() | |
| assert os.path.isfile(path), f"Binary not found at {path}" | |
| assert os.access(path, os.X_OK), f"Binary not executable at {path}" | |
| result = subprocess.run([path, "--help"], capture_output=True, text=True) | |
| assert result.returncode == 0, f"Binary failed to run: {result.stderr}" | |
| print(f"\nllama-gguf-split found at: {path}") | |
| print(f"Version info from --help (first 3 lines):") | |
| for line in result.stdout.split('\n')[:3]: | |
| print(f" {line}") | |
| def test_curl_available(self): | |
| result = subprocess.run(["curl", "--version"], capture_output=True, text=True) | |
| assert result.returncode == 0, "curl not available" | |
| print(f"\ncurl version: {result.stdout.split(chr(10))[0]}") | |
| def test_python_dependencies(self): | |
| import gradio | |
| import huggingface_hub | |
| print(f"\ngradio version: {gradio.__version__}") | |
| print(f"huggingface_hub version: {huggingface_hub.__version__}") | |