Spaces:
Sleeping
Sleeping
| """core/transfer_engine.py — Moteur de transfert analogique""" | |
| import time, hashlib | |
| from typing import Dict, List | |
| class TransferEngine: | |
| def __init__(self): | |
| self.experiences = [] | |
| def add_experience(self, problem: str, solution: str, score: float = 0.8): | |
| eid = hashlib.sha256(problem.encode()).hexdigest()[:16] | |
| # Éviter les doublons | |
| existing_ids = {e["id"] for e in self.experiences} | |
| if eid not in existing_ids: | |
| self.experiences.append({ | |
| "id": eid, "problem": problem, "solution": solution, | |
| "score": score, "ts": time.time() | |
| }) | |
| def find_analogy(self, problem: str, top_k: int = 3) -> List[Dict]: | |
| if not self.experiences: | |
| return [] | |
| words = set(problem.lower().split()) | |
| scored = [] | |
| for exp in self.experiences: | |
| exp_words = set(exp["problem"].lower().split()) | |
| overlap = len(words & exp_words) | |
| if overlap > 0: | |
| sim = overlap / max(len(words), 1) | |
| scored.append({ | |
| "problem": exp["problem"], | |
| "solution": exp["solution"], | |
| "similarity": round(sim, 3), | |
| "score": exp["score"] | |
| }) | |
| scored.sort(key=lambda x: x["similarity"], reverse=True) | |
| return scored[:top_k] | |
| def stats(self) -> Dict: | |
| return {"experiences": len(self.experiences)} | |