This commit is contained in:
alorig
2025-11-09 23:10:10 +05:00
parent 7aad6bfa85
commit 69d58d8bef
4 changed files with 54 additions and 15 deletions

View File

@@ -121,6 +121,12 @@ class AutoClusterFunction(BaseAIFunction):
context=context
)
# Verify placeholder replacement
if '[IGNY8_KEYWORDS]' in prompt:
logger.error(f"[IGNY8_KEYWORDS] placeholder NOT replaced! Prompt length: {len(prompt)}")
else:
logger.info(f"Prompt placeholder replaced successfully. Prompt length: {len(prompt)}, Keywords text length: {len(keywords_text)}")
# IMPORTANT: When using JSON mode, OpenAI requires explicit JSON instruction
# The prompt template already includes "Format the output as a JSON object"
# but we need to ensure it's explicit for JSON mode compliance

View File

@@ -195,6 +195,16 @@ Make sure each prompt is detailed enough for image generation, describing the vi
if not context:
return prompt_template
rendered = prompt_template
# Step 1: Replace [IGNY8_*] placeholders first (always do this)
for key, value in context.items():
placeholder = f'[IGNY8_{key.upper()}]'
if placeholder in rendered:
rendered = rendered.replace(placeholder, str(value))
logger.debug(f"Replaced placeholder {placeholder} with {len(str(value))} characters")
# Step 2: Try .format() style for {variable} placeholders (if any remain)
# Normalize context keys - convert UPPER to lowercase for .format()
normalized_context = {}
for key, value in context.items():
@@ -202,17 +212,15 @@ Make sure each prompt is detailed enough for image generation, describing the vi
normalized_context[key] = value
normalized_context[key.lower()] = value
# Try .format() style first (for {variable} placeholders)
try:
return prompt_template.format(**normalized_context)
except (KeyError, ValueError):
# Fall back to simple string replacement for [IGNY8_*] placeholders
rendered = prompt_template
for key, value in context.items():
placeholder = f'[IGNY8_{key.upper()}]'
if placeholder in rendered:
rendered = rendered.replace(placeholder, str(value))
return rendered
# Only try .format() if there are {variable} placeholders
if '{' in rendered and '}' in rendered:
try:
rendered = rendered.format(**normalized_context)
except (KeyError, ValueError) as e:
# If .format() fails, log warning but keep the [IGNY8_*] replacements
logger.warning(f"Failed to format prompt with .format(): {e}. Using [IGNY8_*] replacements only.")
return rendered
@classmethod
def get_image_prompt_template(cls, account: Optional[Any] = None) -> str:

View File

@@ -25,9 +25,19 @@ except ImportError:
return decorator
# ============================================================================
# DEPRECATED: This function is deprecated. Use the new AI framework instead.
# New path: views.py -> run_ai_task -> AIEngine -> AutoClusterFunction
# This function is kept for backward compatibility but should not be used.
# ============================================================================
def _auto_cluster_keywords_core(keyword_ids: List[int], sector_id: int = None, account_id: int = None, progress_callback=None):
"""
Core logic for clustering keywords. Can be called with or without Celery.
[DEPRECATED] Core logic for clustering keywords. Can be called with or without Celery.
⚠️ WARNING: This function is deprecated. Use the new AI framework instead:
- New path: views.py -> run_ai_task -> AIEngine -> AutoClusterFunction
- This function uses the old AIProcessor and does not use PromptRegistry
- Console logging may not work correctly in this path
Args:
keyword_ids: List of keyword IDs to cluster
@@ -634,10 +644,18 @@ def _auto_cluster_keywords_core(keyword_ids: List[int], sector_id: int = None, a
@shared_task(bind=True, max_retries=3)
# ============================================================================
# DEPRECATED: This Celery task is deprecated. Use run_ai_task instead.
# New path: views.py -> run_ai_task -> AIEngine -> AutoClusterFunction
# ============================================================================
def auto_cluster_keywords_task(self, keyword_ids: List[int], sector_id: int = None, account_id: int = None):
"""
Celery task wrapper for clustering keywords using AI.
Calls the core function with progress callback.
[DEPRECATED] Celery task wrapper for clustering keywords using AI.
⚠️ WARNING: This task is deprecated. Use the new AI framework instead:
- New path: views.py -> run_ai_task -> AIEngine -> AutoClusterFunction
- This task uses the old _auto_cluster_keywords_core function
- Console logging may not work correctly in this path
Args:
keyword_ids: List of keyword IDs to cluster

View File

@@ -1053,7 +1053,13 @@ Make sure each prompt is detailed enough for image generation, describing the vi
**kwargs
) -> Dict[str, Any]:
"""
Cluster keywords using AI-based semantic similarity.
[DEPRECATED] Cluster keywords using AI-based semantic similarity.
⚠️ WARNING: This method is deprecated. Use the new AI framework instead:
- New path: views.py -> run_ai_task -> AIEngine -> AutoClusterFunction
- This method uses the old prompt system and does not use PromptRegistry
- Console logging may not work correctly in this path
Based on reference plugin's clustering prompt.
Args:
@@ -1064,6 +1070,7 @@ Make sure each prompt is detailed enough for image generation, describing the vi
Returns:
Dict with 'clusters' (list of cluster dicts with name, description, keywords)
"""
logger.warning("AIProcessor.cluster_keywords is deprecated. Use the new AI framework (AutoClusterFunction) instead.")
if not keywords:
return {
'clusters': [],