Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ RUN uv pip install setuptools && \
uv pip install -e . && \
uv pip install --no-build-isolation \
git+https://github.com/deepseek-ai/Janus.git \
git+https://github.com/huggingface/diffusers \
git+https://github.com/openai/CLIP.git

# ---------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion gas/cache/db/media_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import bittensor as bt

from gas.cache.types import ChallengeOutcome, PromptEntry, MediaEntry
from gas.cache.types import MediaEntry
from gas.types import Modality, MediaType, SourceType, SOURCE_TYPE_TO_DB_NAME_FIELD
from gas.cache.db.connection import ConnectionManager
from gas.cache.db.prompt_store import PromptStore
Expand Down
2 changes: 1 addition & 1 deletion gas/cache/db/prompt_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import re
import time
import uuid
from typing import List, Dict, Optional, Tuple, Any
from typing import List, Optional

import bittensor as bt

Expand Down
3 changes: 0 additions & 3 deletions gas/cache/media_storage.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import json
import random
import time
import uuid
from typing import Dict, Any, Optional, List
from pathlib import Path

import cv2
import numpy as np
from PIL import Image
from diffusers.utils import export_to_video

from gas.cache.util.video import sample_frames
Expand Down
3 changes: 1 addition & 2 deletions gas/cache/types.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from dataclasses import dataclass, asdict
from typing import Dict, Any, Optional, List
from typing import Dict, Any, Optional
import numpy as np
import time
import uuid

from gas.types import Modality, MediaType, SourceType

Expand Down
2 changes: 1 addition & 1 deletion gas/cache/util/filesystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import bittensor as bt
import pyarrow.parquet as pq

from gas.types import FileType, MediaType, Modality
from gas.types import Modality


def get_most_recent_update_time(directory: Path) -> float:
Expand Down
2 changes: 1 addition & 1 deletion gas/cache/util/miner_stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import sys
import time
from collections import defaultdict
from datetime import datetime, timezone
from datetime import datetime
from pathlib import Path


Expand Down
8 changes: 7 additions & 1 deletion gas/datasets/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,10 @@
load_all_datasets,
get_image_datasets,
get_video_datasets,
)
)

__all__ = [
"load_all_datasets",
"get_image_datasets",
"get_video_datasets",
]
2 changes: 1 addition & 1 deletion gas/datasets/datasets.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"""

from typing import List
from gas.types import DatasetConfig, MediaType, Modality
from gas.types import DatasetConfig
from gasbench.dataset.config import load_benchmark_datasets_from_yaml


Expand Down
7 changes: 1 addition & 6 deletions gas/datasets/download.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
import asyncio
import base64
import hashlib
import json
import random
import os
import traceback
import tempfile
import shutil
from datetime import datetime
from io import BytesIO
from pathlib import Path
from typing import List, Optional, Dict, Any, Generator, Tuple
Expand All @@ -16,13 +12,12 @@
from contextlib import closing

import bittensor as bt
import numpy as np
import pyarrow.parquet as pq
from PIL import Image


import requests
from gas.types import Modality, MediaType, DatasetConfig
from gas.types import Modality, DatasetConfig


IMAGE_FILE_EXTENSIONS = {".jpg", ".jpeg", ".png", ".bmp", ".gif", ".tiff", ".webp"}
Expand Down
9 changes: 8 additions & 1 deletion gas/evaluation/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,11 @@
from .rewards import (
get_generator_base_rewards,
get_generator_fool_bonuses
)
)

__all__ = [
"GenerativeChallengeManager",
"MinerTypeTracker",
"get_generator_base_rewards",
"get_generator_fool_bonuses",
]
6 changes: 2 additions & 4 deletions gas/evaluation/generative_challenge_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,11 @@
from bittensor.core.axon import FastAPIThreadedServer
from fastapi import APIRouter, Depends, FastAPI, Request, Response
from fastapi.responses import Response
from pathlib import Path
from PIL import Image
from typing import Any, Dict, Optional
from typing import Dict, Optional

from gas.cache.types import PromptEntry
from gas.cache.content_manager import ContentManager
from gas.protocol.epistula import generate_header, get_verifier
from gas.protocol.epistula import get_verifier
from gas.protocol.validator_requests import query_generative_miner
from gas.types import MediaType, MinerType, Modality
from gas.verification.c2pa_verification import verify_c2pa
Expand Down
2 changes: 1 addition & 1 deletion gas/evaluation/miner_type_tracker.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Dict, List, Optional, Any
from typing import Dict, List, Optional
import time

import bittensor as bt
Expand Down
5 changes: 2 additions & 3 deletions gas/generation/media/generation_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
import os
import random
import time
from pathlib import Path
from typing import Dict, Optional, Any, Union, List
from typing import Optional, Union, List
import traceback

import bittensor as bt
Expand All @@ -14,7 +13,7 @@
from PIL import Image
import cv2

from gas.types import ModelTask, Modality
from gas.types import Modality
from gas.generation.util.image import create_random_mask, is_black_output
from gas.generation.util.prompt import truncate_prompt_if_too_long
from gas.generation.media.model_registry import ModelRegistry
Expand Down
2 changes: 0 additions & 2 deletions gas/generation/media/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import torch
from diffusers import (
StableDiffusionXLPipeline,
StableDiffusionInpaintPipeline,
FluxPipeline,
StableDiffusionPipeline,
DEISMultistepScheduler,
Expand All @@ -18,7 +17,6 @@
CogVideoXImageToVideoPipeline,
WanPipeline,
ChromaPipeline,
DiffusionPipeline,
TextToVideoSDPipeline,
)

Expand Down
15 changes: 14 additions & 1 deletion gas/protocol/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,17 @@
image_to_bytes,
video_to_bytes,
media_to_bytes,
)
)

__all__ = [
"generate_header",
"verify_signature",
"create_header_hook",
"get_verifier",
"determine_epistula_version_and_verify",
"get_miner_type",
"query_generative_miner",
"image_to_bytes",
"video_to_bytes",
"media_to_bytes",
]
10 changes: 6 additions & 4 deletions gas/protocol/encoding.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import numpy as np
import cv2
import ffmpeg
import os
import tempfile
Expand Down Expand Up @@ -63,7 +62,8 @@ def video_to_bytes(
"""
# ------------- 0. validation / normalisation -------------------------------
if video.dtype == np.float32:
assert video.max() <= 1.0, video.max()
if video.max() > 1.0:
raise ValueError(f"float32 video must be in [0, 1], got max {video.max()}")
video = (video * 255).clip(0, 255).astype(np.uint8)
elif video.dtype != np.uint8:
raise ValueError(f"Unsupported dtype: {video.dtype}")
Expand Down Expand Up @@ -139,7 +139,9 @@ def video_to_bytes(


def media_to_bytes(media, fps=30):
"""Convert image or video array to bytes, using PNG encoding for both.
"""Convert image or video array to bytes.

Images are JPEG-encoded, videos are MP4-encoded.

Args:
media (np.ndarray): Either:
Expand All @@ -150,7 +152,7 @@ def media_to_bytes(media, fps=30):

Returns:
bytes: Encoded media bytes
str: Content type (either 'image/png' or 'video/avi')
str: Content type (either 'image/jpeg' or 'video/mp4')
"""
if len(media.shape) == 3: # Image
return image_to_bytes(media)
Expand Down
1 change: 0 additions & 1 deletion gas/protocol/epistula.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
from math import ceil
from typing import Annotated, Any, Dict, Optional

import traceback
import bittensor as bt
import time
import httpx
Expand Down
2 changes: 1 addition & 1 deletion gas/protocol/miner_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import os
import re
from pathlib import Path
from typing import Dict, List, Optional
from typing import Dict, Optional

import bittensor as bt
import httpx
Expand Down
2 changes: 1 addition & 1 deletion gas/protocol/validator_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from datetime import datetime, timedelta

from gas.protocol.epistula import generate_header
from gas.types import Modality, MediaType
from gas.types import Modality


async def get_miner_type(
Expand Down
2 changes: 1 addition & 1 deletion gas/protocol/webhooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import time
import threading
from collections import defaultdict
from dataclasses import dataclass, field, asdict
from dataclasses import dataclass, field
from datetime import datetime, timedelta
from typing import Optional, Dict, Any, TYPE_CHECKING
from urllib.parse import urlparse
Expand Down
3 changes: 1 addition & 2 deletions gas/types.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from pathlib import Path
from dataclasses import dataclass, field
from dataclasses import dataclass
from enum import Enum, auto
from pydantic import BaseModel
from typing import Dict, List, Any, Optional, Union
Expand Down
4 changes: 1 addition & 3 deletions gas/utils/huggingface_uploads.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@
from datetime import datetime, timezone

import bittensor as bt
import pandas as pd
from huggingface_hub import HfApi, create_repo, CommitOperationAdd
from datasets import Dataset, Features, Value, Image as HFImage
from PIL import Image
from datasets import Dataset, Features, Value

from gas.utils.model_zips import calculate_sha256

Expand Down
5 changes: 0 additions & 5 deletions gas/utils/transforms.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
import math
import random
from scipy import ndimage
import torchvision.transforms as transforms
import torchvision.transforms.functional as F
import numpy as np
import cv2
import os
from pathlib import Path
import time

from gas.generation.util.image import ensure_mask_3d

Expand Down
32 changes: 31 additions & 1 deletion gas/verification/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,34 @@
TRUSTED_CERT_ISSUERS,
TRUSTED_CA_ISSUERS,
detect_media_format,
)
)

__all__ = [
"run_verification",
"verify_media",
"get_verification_summary",
"preload_clip_models",
"clear_clip_models",
"calculate_clip_alignment",
"calculate_clip_alignment_consensus",
"serialize_features",
"deserialize_features",
"find_near_duplicate_by_embedding",
"DEFAULT_EMBEDDING_SIMILARITY_THRESHOLD",
"compute_image_hash",
"compute_video_hash",
"compute_media_hash",
"compute_crop_resistant_hash",
"hamming_distance",
"count_crop_segment_matches",
"is_duplicate",
"find_duplicates",
"check_duplicate_in_db",
"DEFAULT_HAMMING_THRESHOLD",
"DEFAULT_CROP_RESISTANT_MATCH_THRESHOLD",
"verify_c2pa",
"C2PAVerificationResult",
"TRUSTED_CERT_ISSUERS",
"TRUSTED_CA_ISSUERS",
"detect_media_format",
]
1 change: 0 additions & 1 deletion gas/verification/verification_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import bittensor as bt
import numpy as np
import torch

from gas.cache.content_manager import ContentManager
from gas.cache.types import MediaEntry, VerificationResult
Expand Down
1 change: 0 additions & 1 deletion neurons/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

from gas import (
__spec_version__,
__version__,
)
from gas.utils.metagraph import SubstrateConnectionManager
from gas.types import NeuronType
Expand Down
2 changes: 1 addition & 1 deletion neurons/generator/helper/verify_c2pa.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import json
import sys
from pathlib import Path
from typing import List, Optional
from typing import List

# Add project root to path
project_root = Path(__file__).parent.parent.parent.parent
Expand Down
Loading
Loading