Malaji71's picture
Update config.py
6715d2b verified
"""
Configuration file for Frame 0 Laboratory for MIA
BAGEL 7B integration with FLUX prompt optimization
"""
import os
import torch
from typing import Dict, Any
# Application Configuration
APP_CONFIG = {
"title": "Frame 0 Laboratory for MIA",
"description": "Advanced image analysis with BAGEL 7B and FLUX prompt optimization",
"version": "2.0.0",
"author": "Frame 0 Laboratory for MIA"
}
# BAGEL Model Configuration
BAGEL_CONFIG = {
"model_repo": "ByteDance-Seed/BAGEL-7B-MoT",
"local_model_path": "./model",
"cache_dir": "./model/cache",
"download_patterns": ["*.json", "*.safetensors", "*.bin", "*.py", "*.md", "*.txt"],
# Model parameters
"dtype": torch.bfloat16,
"device_map_strategy": "auto",
"max_memory_per_gpu": "80GiB",
"offload_buffers": True,
"force_hooks": True,
# Image processing
"vae_transform_size": (1024, 512, 16),
"vit_transform_size": (980, 224, 14),
# Inference parameters
"max_new_tokens": 512,
"temperature": 0.7,
"top_p": 0.9,
"do_sample": True
}
# Device Configuration for ZeroGPU
def get_device_config() -> Dict[str, Any]:
"""Determine optimal device configuration for BAGEL"""
device_config = {
"device": "cpu",
"use_gpu": False,
"gpu_count": 0,
"memory_efficient": True
}
if torch.cuda.is_available():
gpu_count = torch.cuda.device_count()
device_config.update({
"device": "cuda",
"use_gpu": True,
"gpu_count": gpu_count,
"gpu_memory_gb": torch.cuda.get_device_properties(0).total_memory / 1e9,
"multi_gpu": gpu_count > 1
})
elif hasattr(torch.backends, 'mps') and torch.backends.mps.is_available():
device_config.update({
"device": "mps",
"use_gpu": True,
"gpu_count": 1
})
return device_config
# BAGEL Device Mapping Configuration
def get_bagel_device_map(gpu_count: int) -> Dict[str, str]:
"""Configure device mapping for BAGEL model"""
# Same device modules that need to be on the same GPU
same_device_modules = [
'language_model.model.embed_tokens',
'time_embedder',
'latent_pos_embed',
'vae2llm',
'llm2vae',
'connector',
'vit_pos_embed'
]
device_map = {}
if gpu_count == 1:
# Single GPU configuration
for module in same_device_modules:
device_map[module] = "cuda:0"
else:
# Multi-GPU configuration - keep critical modules on same device
first_device = "cuda:0"
for module in same_device_modules:
device_map[module] = first_device
return device_map
# Processing Configuration
PROCESSING_CONFIG = {
"max_image_size": 1024,
"image_quality": 95,
"supported_formats": [".jpg", ".jpeg", ".png", ".webp"],
"batch_size": 1,
"timeout_seconds": 120 # Increased for BAGEL processing
}
# FLUX Prompt Rules
FLUX_RULES = {
"remove_patterns": [
r',\s*trending on artstation',
r',\s*trending on [^,]+',
r',\s*\d+k\s*',
r',\s*\d+k resolution',
r',\s*artstation',
r',\s*concept art',
r',\s*digital art',
r',\s*by greg rutkowski',
],
"camera_configs": {
"portrait": ", Shot on Hasselblad X2D 100C, 90mm f/2.5 lens at f/2.8, professional portrait photography",
"landscape": ", Shot on Phase One XT, 40mm f/4 lens at f/8, epic landscape photography",
"street": ", Shot on Leica M11, 35mm f/1.4 lens at f/2.8, documentary street photography",
"default": ", Shot on Phase One XF IQ4, 80mm f/2.8 lens at f/4, professional photography"
},
"lighting_enhancements": {
"dramatic": ", dramatic cinematic lighting",
"portrait": ", professional studio lighting with subtle rim light",
"default": ", masterful natural lighting"
}
}
# Scoring Configuration
SCORING_CONFIG = {
"max_score": 100,
"score_weights": {
"prompt_quality": 0.3,
"technical_details": 0.25,
"artistic_value": 0.25,
"flux_optimization": 0.2
},
"grade_thresholds": {
95: {"grade": "LEGENDARY", "color": "#059669"},
90: {"grade": "EXCELLENT", "color": "#10b981"},
80: {"grade": "VERY GOOD", "color": "#22c55e"},
70: {"grade": "GOOD", "color": "#f59e0b"},
60: {"grade": "FAIR", "color": "#f97316"},
0: {"grade": "NEEDS WORK", "color": "#ef4444"}
}
}
# Environment Configuration
ENVIRONMENT = {
"is_spaces": os.getenv("SPACE_ID") is not None,
"is_local": os.getenv("SPACE_ID") is None,
"log_level": os.getenv("LOG_LEVEL", "INFO"),
"debug_mode": os.getenv("DEBUG", "false").lower() == "true",
"space_id": os.getenv("SPACE_ID", ""),
"space_author": os.getenv("SPACE_AUTHOR_NAME", "")
}
# BAGEL Inference Prompts
BAGEL_PROMPTS = {
"image_analysis": "Describe this image in detail, including objects, people, setting, mood, and visual elements:",
"flux_prompt": "Generate a detailed FLUX prompt for this image, focusing on photographic and artistic elements:",
"detailed_description": "Provide a comprehensive analysis of this image including composition, lighting, colors, and artistic style:",
}
# Flash Attention Installation Command
FLASH_ATTN_INSTALL = {
"command": "pip install flash-attn --no-build-isolation",
"env": {"FLASH_ATTENTION_SKIP_CUDA_BUILD": "TRUE"},
"shell": True
}
# Export main configurations
__all__ = [
"APP_CONFIG",
"BAGEL_CONFIG",
"get_device_config",
"get_bagel_device_map",
"PROCESSING_CONFIG",
"FLUX_RULES",
"SCORING_CONFIG",
"ENVIRONMENT",
"BAGEL_PROMPTS",
"FLASH_ATTN_INSTALL"
]