|
import os |
|
from typing import Optional |
|
|
|
from huggingface_hub import HfApi, create_repo |
|
from transformers import AutoConfig, AutoModelForCausalLM, AutoProcessor |
|
|
|
|
|
class SpecVisionModelRegistration: |
|
""" |
|
Handles the registration and pushing of SpecVision model to Hugging Face Hub. |
|
""" |
|
|
|
def __init__(self, |
|
model_path: str, |
|
repo_name: str, |
|
organization: Optional[str] = None, |
|
token: Optional[str] = None): |
|
""" |
|
Initialize the registration handler. |
|
|
|
Args: |
|
model_path: Local path to your model files |
|
repo_name: Name for the Hugging Face repository |
|
organization: Optional organization name on Hugging Face |
|
token: Hugging Face API token |
|
""" |
|
self.model_path = model_path |
|
self.repo_name = repo_name |
|
self.organization = organization |
|
self.token = token or os.getenv("HF_TOKEN") |
|
|
|
if not self.token: |
|
raise ValueError("Please provide a Hugging Face token either directly or via HF_TOKEN environment variable") |
|
|
|
self.api = HfApi() |
|
|
|
def register_model_components(self): |
|
""" |
|
Register the SpecVision model architecture components with the transformers library. |
|
""" |
|
|
|
from configuration_spec_vision import SpecVisionConfig |
|
from modeling_spec_vision import SpecVisionForCausalLM |
|
from processing_spec_vision import SpecVisionProcessor |
|
|
|
|
|
AutoConfig.register("spec_vision", SpecVisionConfig) |
|
AutoModelForCausalLM.register(SpecVisionConfig, SpecVisionForCausalLM) |
|
AutoProcessor.register(SpecVisionConfig, SpecVisionProcessor) |
|
|
|
print("✓ Successfully registered SpecVision model architecture") |
|
|
|
def create_huggingface_repo(self): |
|
""" |
|
Create a new repository on the Hugging Face Hub. |
|
""" |
|
repo_id = f"{self.organization}/{self.repo_name}" if self.organization else self.repo_name |
|
|
|
try: |
|
create_repo( |
|
repo_id, |
|
token=self.token, |
|
private=False, |
|
exist_ok=True |
|
) |
|
print(f"✓ Created/accessed repository: {repo_id}") |
|
return repo_id |
|
except Exception as e: |
|
raise Exception(f"Failed to create repository: {str(e)}") |
|
|
|
def update_model_card(self): |
|
""" |
|
Create or update the model card (README.md) with necessary information. |
|
""" |
|
model_card = f"""--- |
|
language: en |
|
tags: |
|
- spec-vision |
|
- vision-language-model |
|
- transformers |
|
license: apache-2.0 |
|
--- |
|
|
|
# SpecVision Model |
|
|
|
This is the SpecVision model, a vision-language model based on the transformers architecture. |
|
|
|
## Model Description |
|
|
|
SpecVision is designed for vision-language tasks, combining visual and textual understanding capabilities. |
|
|
|
## Usage |
|
|
|
```python |
|
from transformers import AutoConfig, AutoModelForCausalLM, AutoProcessor |
|
|
|
# Load the model and processor |
|
model = AutoModelForCausalLM.from_pretrained("{self.repo_name}") |
|
processor = AutoProcessor.from_pretrained("{self.repo_name}") |
|
|
|
# Process inputs |
|
inputs = processor(images=image, text=text, return_tensors="pt") |
|
outputs = model(**inputs) |
|
``` |
|
|
|
## Training and Evaluation |
|
|
|
[Add your training and evaluation details here] |
|
|
|
## Limitations and Biases |
|
|
|
[Add any known limitations and biases here] |
|
""" |
|
|
|
with open(os.path.join(self.model_path, "README.md"), "w") as f: |
|
f.write(model_card) |
|
|
|
print("✓ Created/updated model card") |
|
|
|
def push_to_hub(self): |
|
""" |
|
Push the model, configurations, and related files to Hugging Face Hub. |
|
""" |
|
repo_id = self.create_huggingface_repo() |
|
|
|
|
|
self.update_model_card() |
|
|
|
|
|
files_to_upload = {} |
|
for filename in os.listdir(self.model_path): |
|
if filename.endswith(('.json', '.py', '.md', '.txt', '.safetensors')): |
|
filepath = os.path.join(self.model_path, filename) |
|
files_to_upload[filename] = filepath |
|
|
|
|
|
for filename, filepath in files_to_upload.items(): |
|
self.api.upload_file( |
|
path_or_fileobj=filepath, |
|
path_in_repo=filename, |
|
repo_id=repo_id, |
|
token=self.token |
|
) |
|
print(f"✓ Uploaded {filename}") |
|
|
|
print(f"\nModel successfully pushed to https://huggingface.co/{repo_id}") |
|
|
|
def main(): |
|
""" |
|
Main function to execute the registration and push process. |
|
""" |
|
|
|
TOKEN = os.getenv("HF_TOKEN") |
|
|
|
registration = SpecVisionModelRegistration( |
|
model_path="./", |
|
repo_name="Spec-4B-Vision-V1", |
|
organization="SVECTOR-CORPORATION", |
|
token=TOKEN |
|
) |
|
|
|
|
|
registration.register_model_components() |
|
|
|
|
|
registration.push_to_hub() |
|
|
|
if __name__ == "__main__": |
|
main() |