38980-vm/app-9w9pd00g5j41/PERSONA_ENGINE_BUG_FIX.md
2026-03-04 18:25:09 +00:00

3.9 KiB
Raw Permalink Blame History

Persona Engine Bug Fix

Sorun Tanımı

Persona motoru aktivite sinyallerini okuyamıyordu. İki kritik bug vardı:

  1. Interface Uyumsuzluğu: PersonaDetectionInput interface'inde planned_activities tipi string[] olarak tanımlanmışken, dışarıdan { name, type, time_block, date } şeklinde obje array'i geçiliyordu. Bu yüzden allInterests içinde [object Object] string'leri oluşuyor ve "balloon", "wine", "drone" gibi hiçbir keyword eşleşmiyordu.

  2. Eksik time_block Alanı: useTripEvents.ts dosyasında plannedActivities oluşturulurken time_block alanı eksikti, bu yüzden "dawn" (gündoğumu) gibi önemli zaman bilgileri persona motoruna iletilmiyordu.

Uygulanan Düzeltmeler

DEĞİŞİKLİK 1: Interface Güncellemesi (persona-engine.ts)

src/utils/persona-engine.ts dosyasında yeni bir ActivityInput interface'i eklendi ve PersonaDetectionInput güncellendi:

interface ActivityInput {
  name?: string;
  type?: string;
  time_block?: string;
  [key: string]: any;
}

interface PersonaDetectionInput {
  interests?: string[];
  planned_activities?: string[] | ActivityInput[];  // ✅ Hem string hem obje kabul ediyor
  number_of_travelers: number;
  start_date: string;
  end_date: string;
}

DEĞİŞİKLİK 1: analyzeSignals Fonksiyonu Güncellendi

allInterests oluşturma bloğu yeniden yazıldı:

// planned_activities'i normalize et: string veya obje olabilir
const activityStrings = (input.planned_activities || []).map(a => {
  if (typeof a === 'string') return a.toLowerCase();
  // Obje ise: name + type + time_block bilgisini birleştir
  const timeBlockKeyword = a.time_block === 'dawn' ? 'sunrise dawn gündoğumu sabah' : '';
  return `${a.name || ''} ${a.type || ''} ${timeBlockKeyword}`.toLowerCase();
});

const allInterests = [
  ...(input.interests || []).map(i => i.toLowerCase()),
  ...activityStrings,
];

DEĞİŞİKLİK 2: time_block Alanı Eklendi (useTripEvents.ts)

src/pages/TripPlanner/hooks/useTripEvents.ts dosyasında iki yerde plannedActivities oluşturulurken time_block alanı eklendi:

Konum 1: handleLeadSubmit fonksiyonu (~352. satır)

const plannedActivities = trip.days?.flatMap((day: any) => 
  day.places?.map((place: any) => ({
    name: place.name,
    type: place.type,
    date: day.date,
    time_block: place.time_block,  // ✅ Eklendi
  })) || []
) || [];

Konum 2: handleCreateLead fonksiyonu (~430. satır)

const plannedActivities = trip.days?.flatMap((day: any) => 
  day.places?.map((place: any) => ({
    name: place.name,
    type: place.type,
    date: day.date,
    time_block: place.time_block,  // ✅ Eklendi
  })) || []
) || [];

Sonuç

Persona motoru artık aktivite objelerini doğru şekilde parse edebiliyor "balloon", "wine", "drone" gibi keyword'ler artık eşleşiyor time_block === 'dawn' durumunda "sunrise dawn gündoğumu sabah" keyword'leri ekleniyor Gündoğumu balon turları gibi özel zaman dilimli aktiviteler artık doğru algılanıyor Geriye dönük uyumluluk korundu (string array'ler de çalışıyor) Lint kontrolü başarılı

Test Senaryosu

// Örnek kullanım
const result = detectPersona({
  number_of_travelers: 2,
  interests: ['fotoğraf', 'doğa'],
  planned_activities: [
    { name: 'Balon Turu', type: 'activity', time_block: 'dawn' },
    { name: 'Şarap Tadımı', type: 'wine_tasting' },
    { name: 'Drone Çekimi', type: 'photography' }
  ],
  start_date: '2026-03-01',
  end_date: '2026-03-03'
});

// Artık şu keyword'ler eşleşecek:
// - "balon turu activity sunrise dawn gündoğumu sabah"
// - "şarap tadımı wine_tasting"
// - "drone çekimi photography"

Etkilenen Dosyalar

  • src/utils/persona-engine.ts - Interface ve parsing logic güncellendi
  • src/pages/TripPlanner/hooks/useTripEvents.ts - İki yerde time_block alanı eklendi (handleLeadSubmit ve handleCreateLead fonksiyonları)