fix(danisman): H3 (3) — bedelsiz onay yolu yalnız gerçek onayda açılsın [KARAR]
Onay mesajı artık baştan sona evet/hayır sözlerinden oluşmalı; "evet. <gerçek soru>" normal (kredili) soru sayılır, 0 kredide 402 döner. "Profil onayı kredi harcamaz" kararı (26 Eyl) gerçek onay için aynen duruyor. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -14,7 +14,7 @@ import { kullanicininRaporu, sohbetGecmisiGetir } from "@/features/rapor/rapor-q
|
|||||||
import type { AracBaglami } from "@/lib/ai/araclar";
|
import type { AracBaglami } from "@/lib/ai/araclar";
|
||||||
import { danismanAkisi } from "@/lib/ai/sohbet-akisi";
|
import { danismanAkisi } from "@/lib/ai/sohbet-akisi";
|
||||||
import { sistemPromptu } from "@/lib/ai/danisman-prompt";
|
import { sistemPromptu } from "@/lib/ai/danisman-prompt";
|
||||||
import { modelPenceresi } from "@/lib/ai/sohbet-gecmisi";
|
import { modelPenceresi, onayMesajiMi } from "@/lib/ai/sohbet-gecmisi";
|
||||||
import { profilGetir } from "@/lib/danisman-profil-db";
|
import { profilGetir } from "@/lib/danisman-profil-db";
|
||||||
import { listeOzetiCikar } from "@/lib/ai/rapor";
|
import { listeOzetiCikar } from "@/lib/ai/rapor";
|
||||||
import type { RaporSonuc } from "@/features/rapor/types/rapor";
|
import type { RaporSonuc } from "@/features/rapor/types/rapor";
|
||||||
@@ -28,22 +28,6 @@ const akisBasliklari = (bedelsiz: boolean) => ({
|
|||||||
"Cache-Control": "no-store",
|
"Cache-Control": "no-store",
|
||||||
"X-Kredi-Dusuldu": bedelsiz ? "0" : "1",
|
"X-Kredi-Dusuldu": bedelsiz ? "0" : "1",
|
||||||
});
|
});
|
||||||
|
|
||||||
/** Danışmanın onay sorusunda geçen sabit ibare; istemci de bunu görmez, yalnız sunucu arar. */
|
|
||||||
const ONAY_SORUSU = "profiline kaydedeyim mi";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Onay mesajı mı: son danışman mesajı "kaydedeyim mi?" diye sormuş VE aday
|
|
||||||
* kısa bir evet/hayır yazmış. Bu mesaj kredi harcamaz (Bilal, 26 Eyl 2026).
|
|
||||||
* Kısa tutulur ki "evet ama İzmir'de hukuk kaç sırayla alıyor" gibi gerçek
|
|
||||||
* sorular bedava geçmesin.
|
|
||||||
*/
|
|
||||||
function onayMesajiMi(mesaj: string, sonAsistan: string | undefined): boolean {
|
|
||||||
if (!sonAsistan || !sonAsistan.toLocaleLowerCase("tr-TR").includes(ONAY_SORUSU)) return false;
|
|
||||||
const m = mesaj.trim().toLocaleLowerCase("tr-TR");
|
|
||||||
if (m.length > 40) return false;
|
|
||||||
return /^(evet|olur|tamam|kaydet|kaydedebilirsin|kaydedelim|hayır|hayir|kaydetme|gerek yok|istemiyorum|şimdilik hayır)\b/.test(m);
|
|
||||||
}
|
|
||||||
const MAX_MESAJ_UZUNLUK = 2000;
|
const MAX_MESAJ_UZUNLUK = 2000;
|
||||||
|
|
||||||
// Widget açıldığında geçmişi ve kredi bakiyesini döner
|
// Widget açıldığında geçmişi ve kredi bakiyesini döner
|
||||||
|
|||||||
@@ -27,3 +27,42 @@ export function modelPenceresi(gecmis: SohbetMesaji[], yeniSoru: string): Sohbet
|
|||||||
}
|
}
|
||||||
return gruplar.map((g) => ({ role: g.role, content: g.parcalar.join("\n\n") }));
|
return gruplar.map((g) => ({ role: g.role, content: g.parcalar.join("\n\n") }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Danışmanın onay sorusunda geçen sabit ibare; istemci de bunu görmez, yalnız sunucu arar. */
|
||||||
|
const ONAY_SORUSU = "profiline kaydedeyim mi";
|
||||||
|
|
||||||
|
const ONAY_SOZLERI = [
|
||||||
|
"evet",
|
||||||
|
"olur",
|
||||||
|
"tamam",
|
||||||
|
"kaydet",
|
||||||
|
"kaydedebilirsin",
|
||||||
|
"kaydedelim",
|
||||||
|
"hayır",
|
||||||
|
"hayir",
|
||||||
|
"yok",
|
||||||
|
"kaydetme",
|
||||||
|
"gerek yok",
|
||||||
|
"istemiyorum",
|
||||||
|
"şimdilik hayır",
|
||||||
|
];
|
||||||
|
/** Onay sözünün ardından gelebilecek dolgu; bunların dışındaki her kelime mesajı soru yapar. */
|
||||||
|
const ONAY_DOLGU = [...ONAY_SOZLERI, "bunu", "lütfen", "lutfen", "teşekkürler", "tesekkurler", "teşekkür ederim", "sağ ol"];
|
||||||
|
const ONAY_KALIBI = new RegExp(`^(?:${ONAY_SOZLERI.join("|")})(?: (?:${ONAY_DOLGU.join("|")}))*$`);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Onay mesajı mı: son danışman mesajı "kaydedeyim mi?" diye sormuş VE adayın
|
||||||
|
* mesajı BAŞTAN SONA evet/hayır sözlerinden oluşuyor. Bu mesaj kredi harcamaz
|
||||||
|
* (Bilal, 26 Eyl 2026). Yalnız başına bakmak yetmiyordu: "evet. Ege hukuk
|
||||||
|
* taban sırası kaç?" kredisiz tam cevap alıyordu. Kalıba uymayan mesaj
|
||||||
|
* normal (kredili) soru sayılır.
|
||||||
|
*/
|
||||||
|
export function onayMesajiMi(mesaj: string, sonAsistan: string | undefined): boolean {
|
||||||
|
if (!sonAsistan || !sonAsistan.toLocaleLowerCase("tr-TR").includes(ONAY_SORUSU)) return false;
|
||||||
|
const m = mesaj
|
||||||
|
.toLocaleLowerCase("tr-TR")
|
||||||
|
.replace(/[.,!?;:…'"()]+/g, " ")
|
||||||
|
.replace(/\s+/g, " ")
|
||||||
|
.trim();
|
||||||
|
return ONAY_KALIBI.test(m);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user