Spaces:
Runtime error
Runtime error
File size: 2,992 Bytes
10e1b83 59506b5 36ab8c4 10e1b83 1ff818b 10e1b83 36ab8c4 1ff818b 36ab8c4 1ff818b ed78f98 36ab8c4 1ff818b 36ab8c4 1ff818b 36ab8c4 1ff818b 36ab8c4 1ff818b 36ab8c4 1ff818b 36ab8c4 1ff818b 36ab8c4 10e1b83 97cba10 36ab8c4 1ff818b 36ab8c4 10e1b83 36ab8c4 1ff818b 36ab8c4 10e1b83 1ff818b 10e1b83 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | from typing import Dict, Any, List
import json
from utils import (
call_llm,
safe_json_loads,
normalize_ir,
validate_ir
)
# =====================================================
# FALLBACK STRATEGY
# =====================================================
def fallback_optimization(
ir: Dict[str, Any],
idx: int
):
return {
"explanation": f"Fallback optimisation strategy {idx}",
"optimized_ir": normalize_ir(ir)
}
# =====================================================
# OPTIMIZATION
# =====================================================
def optimize_ir(
ir: Dict[str, Any],
num_strategies: int = 3,
provider: str = "openai"
) -> List[Dict[str, Any]]:
if not validate_ir(ir):
return [
fallback_optimization(ir, i + 1)
for i in range(num_strategies)
]
ir_text = json.dumps(
ir,
indent=2,
ensure_ascii=False
)
prompt = f"""
Tu es un expert en optimisation de graphes mathématiques.
Analyse cette IR.
Produis EXACTEMENT {num_strategies} stratégies
d'optimisation différentes.
Les optimisations possibles incluent :
- fusion d'opérations
- suppression de redondances
- réduction mémoire
- vectorisation
- parallélisation
- approximation numérique
- simplification algébrique
- réordonnancement
IMPORTANT :
- retourne UNIQUEMENT du JSON valide
- aucune explication hors JSON
- aucune balise markdown
FORMAT STRICT :
[
{{
"explanation": "description courte",
"optimized_ir": {{
"name": "Optimized IR",
"strategy": "fusion",
"nodes": [],
"edges": []
}}
}}
]
IR :
{ir_text}
"""
response = call_llm(
prompt,
provider=provider,
max_tokens=3500
)
parsed = safe_json_loads(response)
# -------------------------------------------------
# VALIDATION
# -------------------------------------------------
valid_results = []
if isinstance(parsed, list):
for item in parsed:
if not isinstance(item, dict):
continue
explanation = item.get(
"explanation",
"Optimisation automatique"
)
optimized_ir = item.get(
"optimized_ir",
ir
)
optimized_ir = normalize_ir(
optimized_ir
)
valid_results.append({
"explanation": explanation,
"optimized_ir": optimized_ir
})
# -------------------------------------------------
# SUCCESS
# -------------------------------------------------
if len(valid_results) > 0:
return valid_results[:num_strategies]
# -------------------------------------------------
# FALLBACK
# -------------------------------------------------
return [
fallback_optimization(ir, i + 1)
for i in range(num_strategies)
] |