Fix indentation error in concept_attention.py
🔧 **Indentation Fix**:
- Fixed IndentationError in _extract_concept_embeddings method
- Corrected else block indentation after if statement
- Properly aligned all code blocks within with torch.no_grad() context
- Ensures clean Python syntax for ComfyUI import
This commit is contained in:
+30
-30
@@ -399,40 +399,40 @@ class ConceptAttention:
|
||||
logger.error(f"❌ Text encoder or tokenizer is None for concept '{concept}'! Real text encoding is required.")
|
||||
raise RuntimeError(f"Text encoder and tokenizer are required for concept '{concept}'. No fallback allowed.")
|
||||
else:
|
||||
# Use ComfyUI CLIP's encode method directly (supports dual CLIP)
|
||||
with torch.no_grad():
|
||||
if hasattr(text_encoder, 'encode'):
|
||||
# ComfyUI CLIP.encode(text) method - works with dual CLIP
|
||||
embedding = text_encoder.encode(concept)
|
||||
logger.info(f"Using ComfyUI CLIP.encode for '{concept}': {type(embedding)}")
|
||||
elif hasattr(text_encoder, 'encode_from_tokens'):
|
||||
# ComfyUI CLIP.encode_from_tokens(tokens) method - works with dual CLIP
|
||||
tokens = tokenizer(concept, return_tensors="pt", padding=True, truncation=True)
|
||||
tokens = {k: v.to(self.device) for k, v in tokens.items()}
|
||||
embedding = text_encoder.encode_from_tokens(tokens)
|
||||
logger.info(f"Using ComfyUI CLIP.encode_from_tokens for '{concept}': {type(embedding)}")
|
||||
elif hasattr(text_encoder, 'cond_stage_model'):
|
||||
# Direct access to cond_stage_model (dual CLIP structure)
|
||||
if hasattr(text_encoder.cond_stage_model, 'encode_token_weights'):
|
||||
# Use ComfyUI CLIP's encode method directly (supports dual CLIP)
|
||||
with torch.no_grad():
|
||||
if hasattr(text_encoder, 'encode'):
|
||||
# ComfyUI CLIP.encode(text) method - works with dual CLIP
|
||||
embedding = text_encoder.encode(concept)
|
||||
logger.info(f"Using ComfyUI CLIP.encode for '{concept}': {type(embedding)}")
|
||||
elif hasattr(text_encoder, 'encode_from_tokens'):
|
||||
# ComfyUI CLIP.encode_from_tokens(tokens) method - works with dual CLIP
|
||||
tokens = tokenizer(concept, return_tensors="pt", padding=True, truncation=True)
|
||||
tokens = {k: v.to(self.device) for k, v in tokens.items()}
|
||||
embedding = text_encoder.cond_stage_model.encode_token_weights(tokens)
|
||||
logger.info(f"Using cond_stage_model.encode_token_weights for '{concept}': {type(embedding)}")
|
||||
embedding = text_encoder.encode_from_tokens(tokens)
|
||||
logger.info(f"Using ComfyUI CLIP.encode_from_tokens for '{concept}': {type(embedding)}")
|
||||
elif hasattr(text_encoder, 'cond_stage_model'):
|
||||
# Direct access to cond_stage_model (dual CLIP structure)
|
||||
if hasattr(text_encoder.cond_stage_model, 'encode_token_weights'):
|
||||
tokens = tokenizer(concept, return_tensors="pt", padding=True, truncation=True)
|
||||
tokens = {k: v.to(self.device) for k, v in tokens.items()}
|
||||
embedding = text_encoder.cond_stage_model.encode_token_weights(tokens)
|
||||
logger.info(f"Using cond_stage_model.encode_token_weights for '{concept}': {type(embedding)}")
|
||||
else:
|
||||
logger.error(f"❌ No recognized encoding method for concept '{concept}'!")
|
||||
raise RuntimeError(f"Text encoder must have encode, encode_from_tokens, or cond_stage_model.encode_token_weights method. No fallback allowed.")
|
||||
else:
|
||||
logger.error(f"❌ No recognized encoding method for concept '{concept}'!")
|
||||
raise RuntimeError(f"Text encoder must have encode, encode_from_tokens, or cond_stage_model.encode_token_weights method. No fallback allowed.")
|
||||
else:
|
||||
logger.error(f"❌ No recognized encoding method for concept '{concept}'!")
|
||||
raise RuntimeError(f"Text encoder must have encode, encode_from_tokens, or cond_stage_model method. No fallback allowed.")
|
||||
|
||||
# Handle multiple outputs (e.g., [hidden_states, pooled_output])
|
||||
if isinstance(embedding, (list, tuple)):
|
||||
embedding = embedding[0] if len(embedding) > 0 else embedding
|
||||
|
||||
# Ensure embedding is on correct device and dtype
|
||||
embedding = embedding.to(device=self.device)
|
||||
concept_embeddings[concept] = embedding
|
||||
logger.info(f"Extracted embedding for '{concept}': shape {embedding.shape}, dtype {embedding.dtype}")
|
||||
raise RuntimeError(f"Text encoder must have encode, encode_from_tokens, or cond_stage_model method. No fallback allowed.")
|
||||
|
||||
# Handle multiple outputs (e.g., [hidden_states, pooled_output])
|
||||
if isinstance(embedding, (list, tuple)):
|
||||
embedding = embedding[0] if len(embedding) > 0 else embedding
|
||||
|
||||
# Ensure embedding is on correct device and dtype
|
||||
embedding = embedding.to(device=self.device)
|
||||
concept_embeddings[concept] = embedding
|
||||
logger.info(f"Extracted embedding for '{concept}': shape {embedding.shape}, dtype {embedding.dtype}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error extracting concept embeddings: {e}")
|
||||
|
||||
Reference in New Issue
Block a user