diff --git a/modules/ai.py b/modules/ai.py index f613e46..dbeae7d 100644 --- a/modules/ai.py +++ b/modules/ai.py @@ -52,8 +52,9 @@ class ResilientModel: try: return self.model.generate_content(*args, **kwargs) except Exception as e: - is_quota = "429" in str(e) or "quota" in str(e).lower() - if is_quota and retries < max_retries: + err_str = str(e).lower() + is_retryable = "429" in err_str or "quota" in err_str or "500" in err_str or "503" in err_str or "504" in err_str or "deadline" in err_str or "internal error" in err_str + if is_retryable and retries < max_retries: delay = base_delay * (2 ** retries) utils.log("SYSTEM", f"⚠️ Quota error on {self.role} ({self.name}). Retrying in {delay}s...") time.sleep(delay) @@ -75,7 +76,7 @@ def get_optimal_model(base_type="pro"): if not candidates: return f"models/gemini-1.5-{base_type}" def score(n): # Prioritize stable models (higher quotas) over experimental/beta ones - if "exp" in n or "beta" in n: return 0 + if "exp" in n or "beta" in n or "preview" in n: return 0 if "latest" in n: return 50 return 100 return sorted(candidates, key=score, reverse=True)[0] @@ -138,7 +139,7 @@ def select_best_models(force_refresh=False): - ARTIST: Needs visual prompt understanding. CONSTRAINTS: - - Avoid 'experimental' unless no stable version exists. + - Avoid 'experimental' or 'preview' unless no stable version exists. - Prioritize 'latest' or stable versions. OUTPUT_FORMAT (JSON):