Category CTA on condensed query + memoized effective_question

This commit is contained in:
grgmro 2026-09-17 11:01:34 +02:00
parent 9ef74547ce
commit a24ae90ecb
2 changed files with 15 additions and 5 deletions

View file

@ -281,9 +281,14 @@ module DepiedencapAiCitations
def self.effective_question(post)
return "" if post.blank?
# Mémoïsé par post : PlaygroundHook (génération) puis Sanitizer (for_post
# + suggested_category) appellent tous effective_question — un seul appel
# de condensation par message utilisateur au lieu de trois.
Discourse.cache.fetch("dpec_effq:#{post.id}", expires_in: CACHE_TTL) do
latest = post.raw.to_s.gsub(/<[^>]+>/, " ").squish
condense_query(latest, history_for(post))
end
end
def self.history_for(post)
return [] if post.blank? || post.topic.blank?
@ -303,8 +308,8 @@ module DepiedencapAiCitations
# Réécrit le dernier message en requête autonome à partir de l'historique
# (ex. "Ok, box calf goodyear" après "mes Carmina" → "entretien Carmina
# box calf Goodyear"). Modèle dédié léger (pas Qwen 30B : pas de mode
# thinking à gérer, latence courte) — indispo/erreur → dernier message tel quel.
# box calf Goodyear"). Même LLM que la génération (qwen3:30b MoE, rapide
# à ~3B actifs, think:false forcé) — indispo/erreur → dernier message tel quel.
def self.condense_query(latest, history)
return latest if history.blank?

View file

@ -25,8 +25,13 @@ module DepiedencapAiCitations
return if post.custom_fields["depiedencap_ai_citations"] == "t"
question = user_question(post)
user_post = originating_user_post(post)
# La suggestion de catégorie doit voir la requête reformulée (qui porte
# l'intention, ex. « entretenir »), pas le dernier message brut —
# sinon un tour de suivi (« ok, box calf goodyear ») suggère la mauvaise
# catégorie. effective_question est mémoïsé par post : pas d'appel en plus.
question =
user_post ? Retrieval.effective_question(user_post) : user_question(post)
# Mêmes reformulation/cache que ce que le LLM a vu (PlaygroundHook) : sans
# ça, la question réécrite par condense_query pour la génération et la
# question brute utilisée ici pour les citations divergeraient.