ciyidogan commited on
Commit
584c6e7
·
verified ·
1 Parent(s): ec380a0

Upload 2 files

Browse files
Files changed (2) hide show
  1. flare-tasarim.md +379 -0
  2. flare-ui-tasarim.md +516 -0
flare-tasarim.md ADDED
@@ -0,0 +1,379 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Güncellenmiş flare-tasarim.md
2
+ markdown# 🏗 Genel Mimari
3
+
4
+ Flare, Spark LLM motorunun üstünde çalışan, çok adımlı ve akıllı bir orchestration katmanıdır. Görevleri:
5
+
6
+ ✅ Kullanıcıdan gelen mesajları Spark kullanarak sohbet halinde sürdürmek,
7
+ ✅ Spark ile, kullanıcı mesajından intent ve parametre extraction akışını yönetmek,
8
+ ✅ Eksik parametre değerleri için system prompt oluşturup, Spark ile insani mesaja dönüştürerek bu parametrelerin değerlerini kullanıcıya tamamlatmak,
9
+ ✅ Doğru parameter değerleri ile API çağrıları yapmak,
10
+ ✅ API cevabını Spark üzerinden insanileştirilmiş metne dönüştürmek ve kullanıcıya iletmek,
11
+ ✅ Her şeyi session bazında, state machine mantığında takip etmek.
12
+
13
+ Bu yapı Parloa gibi sistemlerde kullanılan "flow engine + LLM + tool orchestration" yaklaşımına dayanır.
14
+
15
+ # Spark Entegrasyonu
16
+
17
+ Spark servisinin base url'i service_config.jsonc dosyasında config.spark_endpoint olarak tanımlanmıştır.
18
+
19
+ Spark'a gönderilecek tüm request'lerde header'a Authorization: Bearer <SPARK_TOKEN> eklenmelidir. SPARK_TOKEN, .env dosyasında tanımlıdır.
20
+
21
+ # Internal Prompt Mekanizması
22
+
23
+ Flare servisi, tüm Spark isteklerinde kullanılmak üzere merkezi bir internal_prompt tanımına sahiptir. Bu prompt, service_config.jsonc dosyasında config.internal_prompt olarak saklanır ve her intent detection işleminde project version'daki general_prompt'un başına otomatik olarak eklenir.
24
+
25
+ Internal prompt, Spark'ın tutarlı davranış sergilemesi için gerekli temel kuralları içerir:
26
+ - Intent detection formatı ve kuralları
27
+ - Dil ayarları (<project language> placeholder'ı ile)
28
+ - Intent isimleri ve caption'ları (<intent names> ve <intent captions> placeholder'ları ile)
29
+ - Selamlama ve small talk davranışları
30
+ - Güvenlik kuralları
31
+
32
+ Bu mekanizma sayesinde tüm projeler arasında tutarlı bir Spark davranışı sağlanır. Internal prompt içindeki placeholder'lar runtime'da gerçek değerlerle değiştirilir:
33
+ - <intent names>: Proje versiyonu içinde tanımlı intentlerin name'leri, tırnak içinde ve virgülle ayrılmış şekilde
34
+ - <intent captions>: Proje versiyonu içinde tanımlı intentlerin caption'ları, tırnak içinde ve virgülle ayrılmış şekilde
35
+ - <project language>: Projenin default_language alanından alınan dil (Turkish, English, German, vb.)
36
+
37
+ # Startup
38
+
39
+ Flare servisi ayağa kalktıktan sonra ilk iş olarak service_config.jsonc dosyasında tanımlı enabled=true olan her bir project için, projenin published=true olan en büyük id'ye sahip versiyonundaki bilgilerle ve dosyadaki config nesnesi altındaki work_mode ve cloud_token bilgisi ile birlikte, spark_endpoint url'indeki Spark servisine bir /startup request'i gönderir.
40
+
41
+ Bu request'in body formatı şu şekilde:
42
+
43
+ ```json
44
+ {
45
+ "work_mode": "<config.work_mode>",
46
+ "cloud_token": "<config.cloud_token>",
47
+ "project_name": "<project.name>",
48
+ "project_version": <project.version.id>,
49
+ "repo_id": "<project.version.llm.repo_id>",
50
+ "generation_config": <project.version.llm.generation_config>,
51
+ "use_fine_tune": <project.version.llm.use_fine_tune>,
52
+ "fine_tune_zip": "<project.version.llm.fine_tune_zip>"
53
+ }
54
+ Başarılı response örneği:
55
+ json{ "message": "✅ project1 versiyon 1 yükleniyor (arka planda)." }
56
+ Başarısız response örneği:
57
+ json{ "error": "<error mesajı>" }
58
+ Chat
59
+ Chat request'lerini Spark'ın /generate endpoint'ine gönderiyoruz. Json request format şu şekilde:
60
+ json{
61
+ "project_name": "project1",
62
+ "system_prompt": "you are an helpful virtual assistant. answer the questions of the user with a formal manner.",
63
+ "user_input": "en ekşi meyve nedir?",
64
+ "context": [
65
+ { "role": "user", "content": "Merhaba!" },
66
+ { "role": "assistant", "content": "Merhaba, nasıl yardımcı olabilirim?" }
67
+ ]
68
+ }
69
+ Response format:
70
+ json{
71
+ "model_answer": "En ekşi meyve..."
72
+ }
73
+ 🧠 İş Akışı
74
+ Sohbet için bir session ve state takibi yapılacağından, Flare'e öncelikle, request body'de project_name bilgisi içeren bir /start_session request'i gönderilir.
75
+ Flare unique bir session_id üretir ve bir session objesi yaratıp, session_id üzerinden indekslenmiş olan session dictionary'sine ekler ve response'ta session_id değerini döndürür. Session objesi içinde, gönderilen project_name'e karşılık gelen proje bilgileri (id, name, caption) ve proje tanımı altındaki versions array'indeki published=true olan version'lardan en büyük id'ye sahip olanın altındaki bilgileri (llm nesnesi hariç) alıp session nesnesine set eder. Oluşturduğu session'ın işleyişinde bundan sonra bu bilgileri kullanır.
76
+ Session nesnesi içinde ayrıca sohbetin context'ini takip edeceği chat_history array'i ve intent tespit etmesi durumunda, tespit ettiği intent, extract edilen parametreler ve eksik parametreleri takip edeceği property'ler, session state gibi sohbet akışında ihtiyaç duyacağı bilgileri tutar.
77
+ Ardından Flare'e bu session ile gönderilen tüm request'lerin header'ında X-Session-ID key içinde session_id değeri gönderilir.
78
+ Flare, kendisine gelen /chat request'lerini işletirken header'daki X-Session-ID değerini alır (yoksa hata döndürür) ve gönderilen session_id ile session dictionary'sinden ilgili session nesnesini bulur, sohbeti işletmek için session nesnesindeki değerleri kullanır.
79
+ Sohbet sırasında user_input bilgisi, session_id header'ıyla Flare'in /chat endpoint'ine gönderilir.
80
+ 1️⃣ Intent Detection
81
+ Kullanıcı mesajı alınır.
82
+ Spark LLM'e, kullanıcı mesajı, session'da tutulan sohbet tarihçesi ve session'da tutulan project version nesnesindeki intent tanımları birleştirilerek (detection_prompt ve intent detection'ı kolaylaştırma amaçlı örnek cümleler içeren examples kısmı) bir system prompt halinde gönderilir.
83
+ Eğer kullanıcının söyledikleri bir intent içermiyorsa, Spark kullanıcıyla normal sohbet eder.
84
+ Spark eğer intent belirlerse, parametreleri bu aşamada extract etmez. Bulduğu intent'in adını özel bir formatta döndürür. Örnek: #DETECTED_INTENT:search_flight_intent
85
+ 2️⃣ Parametre Extraction
86
+ Belirlenen intent'e göre beklenen parametre listesi çıkarılır.
87
+ Spark'a, user_input ile birlikte parametre extraction_prompt'ları birleştirilip tek bir system prompt olarak gönderilir. Spark buradan parametre değerlerini extract eder ve özel bir formatta döndürür. Örnek:
88
+ #PARAMETERS:{ "extracted": [ { "to_city": "İstanbul" } ], "missing": [ "to_city", "date"] }
89
+ Döndürülen parametreler tanımdaki variable_name key'i ile session'a eklenir. Eğer birden fazla intent'te aynı variable_name'e sahip parametreler varsa, aynı değişken değerini paylaşırlar.
90
+ 3️⃣ Eksik Parametre Tamamlama
91
+ Zorunlu parametrelerden eksik olanlar varsa, Flare bunları kullanıcıdan istemek için uygun prompt'u hazırlar ve Spark'a gönderir. Bunun için, eksik parametrelerin tanımlarındaki name ve intent.parameters.extraction_prompt'lar birleştirilerek tek bir system prompt haline getirilir.
92
+ Spark, kullanıcı cevabını işleyip tekrar extraction yapar ve yukarıdaki #PARAMETERS formatında Flare'e dönüş yapar. Eksik parametre değeri kalmayan kadar Flare-Spark iletişimi bu şekilde döner.
93
+ Sohbette bir intent tespit edildiğinde, bu intent'in zorunlu bir parametresinin variable_name'i session'da zaten mevcutsa ve değer içeriyorsa, bu parametre tekrar extract edilmeye çalışılmaz, session'daki ilgili variable'dan alınıp kullanılır.
94
+ 4️⃣ Parametre Validation
95
+ Alınan her parameter değeri, parameter tanımındaki tip ve regex (min/max uzunluk gibi) kurallarla doğrulanır.
96
+ Hatalı değerler varsa, bu parametrelerin invalid_prompt'ları birleştirilip Spark'a tek bir system prompt olarak gönderilir ve Spark kullanıcıya doğrudan döndürülecek insani hata mesajını oluşturup döndürür. Örnek: "Söylediğiniz uçuş numarası hatalı. Uçuş numaranız 6 haneli bir numara olmalıdır."
97
+ 5️⃣ API Çağrısı
98
+ Tüm parametreler tamamlanınca Flare, intent'e bağlı API çağrısını yapar.
99
+ Intent'e bağlı API adı, service_config.json'da ilgili intent nesnesinin action alanında tanımlıdır. Bu adı kullanarak apis altındaki ilgili api tanımına ulaşılabilir.
100
+ Bu aşamada kritik bir detay:
101
+ 🔑 Eğer API tanımında auth bölümü varsa,
102
+
103
+ Api çağırılmadan önce, session içinde auth_tokens[api_name] var mı control edilir. Varsa bu token kullanılır.
104
+ Eğer yoksa, token alma işlemi yapılır.
105
+ Token almak için, token_endpoint ve body_template kullanılarak token api servisine request gönderilir, dönen json response içinden response_token_path json path'i kullanılarak token değeri alınır.
106
+ Alınan token session içinde auth_tokens[api_name] olarak saklanır.
107
+ Token expire ederse, token_refresh_endpoint ve token_refresh_body kullanılarak mevcut token refresh edilir.
108
+ Header ve body'lerdeki {auth_tokens.api_name.token} placeholder'ları bu token ile doldurulur.
109
+ Eğer auth tanımı yoksa, API çağrısı doğrudan yapılır.
110
+
111
+ Bu mekanizma API erişiminde güvenlik ve süreklilik sağlar.
112
+ 6️⃣ Response Mapping
113
+ API'den dönen JSON response'tan belirli değerleri session değişkenlerine aktarma mekanizmasıdır. Her API tanımında response_mappings array'i ile tanımlanır:
114
+ json"response_mappings": [
115
+ {
116
+ "variable_name": "booking_id",
117
+ "type": "str",
118
+ "json_path": "booking.confirmation_number"
119
+ },
120
+ {
121
+ "variable_name": "departure_time",
122
+ "type": "date",
123
+ "json_path": "flight_details.departure.time"
124
+ }
125
+ ]
126
+ Bu mapping'ler API başarılı response döndüğünde (status 200) otomatik olarak işlenir. Belirtilen json_path'teki değerler, tanımlanan type'a göre dönüştürülüp session.variables içine variable_name ile kaydedilir.
127
+ Desteklenen type'lar: str, int, float, bool, date
128
+ Bu mekanizma sayesinde API response'larından alınan değerler, sonraki intent'lerde veya API çağrılarında kullanılabilir hale gelir.
129
+ 7️⃣ API Cevabını İnsanileştirme
130
+ Api'den dönen ham json, api tanımı altındaki response_prompt ile birlikte Spark'a gönderilir ve akıcı, insani bir cevap üretilir.
131
+ Not: Api tanımındaki response_prompt içindeki {{api_response}} değeri, api'den dönen json string ile replace edilir.
132
+ Örnek: "response_prompt": "Aşağıdaki JSON döviz kuru bilgilerini içeriyor. Kullanıcıya anlaşılır bir Türkçe özet hazırla:\n\n{{api_response}}"
133
+ 8️⃣ Session ve State Takibi
134
+ Her kullanıcı sohbeti bir session ID ile takip edilir.
135
+ Session üzerinde:
136
+
137
+ Son 10 adet konuşma tarihçesi,
138
+ Son intent,
139
+ Toplanan parametreler,
140
+ Eksik parametreler,
141
+ Akışın neresinde olduğumuz (intent detection, parameter extraction, api call, response humanization)
142
+ Api token'ları
143
+ tutulur.
144
+
145
+ Bu, çok adımlı akışlarda state kaybını engeller.
146
+ Date Type Desteği
147
+ Parametre tanımlarında "date" type'ı desteklenmektedir. Date parametreleri:
148
+
149
+ ISO format (YYYY-MM-DD) olarak saklanır
150
+ Türkçe tarih ifadeleri otomatik olarak parse edilir (bugün, yarın, 15 Temmuz, vb.)
151
+ Extraction prompt'larında güncel tarih context'i sağlanır
152
+ Validation sırasında geçerli tarih formatı kontrolü yapılır
153
+
154
+ 🏗 Mimari Bileşenler
155
+ BileşenGörevSpark LLMIntent tespiti, parametre extraction, eksik tamamlama ve humanizationFlare Session ManagerHer kullanıcı için session ve state takibiFlare Prompt EngineHer aşamada Spark'a gönderilecek uygun system prompt'u dinamik hazırlayan yapıAPI ConnectorTanımlı API'lere parametrelerle çağrı yapan, auth/refresh yöneten katmanValidation EngineParametre değerlerini tip ve format bazlı doğrulayan yapıUI ve Config KatmanıFlare işleyiş konfigürasyonu ve api tanımları; version bazlı project tanımlamaları; project tanımı altında intent tanımları; intent tanımı altında parametre tanımlarını yöneten arayüz
156
+ 📋 Yapılacaklar
157
+ ✅ Spark ile intent tespiti için system prompt tasarımı → Örnek cümlelerle zenginleştirme
158
+ ✅ Parametre extraction için intent bazlı prompt şablonları hazırlanması
159
+ ✅ Eksik parametre tamamlama için eksik parametre bazlı prompt oluşturma
160
+ ✅ Parametre tip tanımları ve validation engine geliştirilmesi
161
+ ✅ API connector modülü → auth, refresh, token yönetimi, timeout, retry mantığı ile geliştirme
162
+ ✅ Humanization prompt'larının API cevabına göre dinamik hazırlanması
163
+ ✅ Session ve state machine geliştirme
164
+ ✅ Response mapping mekanizması
165
+ ✅ Internal prompt sistemi
166
+ ✅ Date type desteği
167
+ 🔑 Önemli Notlar (Unutulmaması Gerekenler)
168
+
169
+ LLM prompt'ları tek seferde şişirilmemeli; sohbetin her aşamasında sadece gereken system prompt dinamik oluşturulup gönderilmeli.
170
+ Parametre extraction'da ek bir model (BERT vb.) yerine sadece Spark kullanılacak.
171
+ Intent başına (proje başına max ~8-10 intent), her bir intent için max ~5-6 örnek cümle şeklinde bir kapasite planlaması düşünülebilir.
172
+ Parametre tip ve regex validation başarısızsa, Spark üzerinden insani bir hata mesajı oluşturulup kullanıcıya döndürülmeli,
173
+ API response'larının insanileştirilmesi, kullanıcıya daha iyi bir deneyim sunmak için Spark'tan geçmeli.
174
+ API token yönetimi ve refresh mekanizması, Flare içinde güvenli ve izlenebilir şekilde tutulmalı.
175
+
176
+ Servis Konfigürasyonu
177
+ Flare'in tanımlarını tutan bir document database gibi kullanacağımız service_config.jsonc dosyasının yapısı, örnek data ve alan açıklamaları ile birlikte aşağıdadır.
178
+ jsonc{
179
+ // =====================================================
180
+ // FLARE GLOBAL CONFIGURATION
181
+ // =====================================================
182
+ "config": {
183
+ "work_mode": "hfcloud", // "hfcloud" | "cloud" | "on-premise"
184
+ "cloud_token": "<your cloud token>", // eğer workmode hfcloud ya da cloud ise zorunlu, on-premise'de kullanılmayacak.
185
+ "spark_endpoint": "https://ucsturkey-spark.hf.space", // Spark servisine erişim için kullanılacak url
186
+ "internal_prompt": "⚠️ **NEVER output \"#DETECTED_INTENT:\"...", // Merkezi Spark kuralları
187
+ "project_id_counter": 1, // Yeni proje ID'leri için counter
188
+ "last_update_date": "2025-06-08T12:00:00.000Z", // Race condition kontrolü için
189
+ "last_update_user": "admin",
190
+
191
+ // === Login Users (bcrypt hash + salt): Flare UI kullanılabilecek user'lar ==============
192
+ "users": [
193
+ {
194
+ "username": "admin",
195
+ "password_hash": "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918",
196
+ "salt": "random_salt_string"
197
+ }
198
+ ]
199
+ },
200
+
201
+ // =====================================================
202
+ // PROJECTS: Her bir proje bir virtual agent'ı tanımlar
203
+ // =====================================================
204
+ "projects": [
205
+ {
206
+ "id": 1,
207
+ "name": "coronos_assistant", // Virtual agent adı
208
+ "caption": "Coronos Sanal Asistan",
209
+ "icon": "folder", // Material icon adı
210
+ "description": "Coronos müşteri hizmetleri asistanı", // Proje açıklaması
211
+ "enabled": true, // Kullanımda olma durumu
212
+ "default_language": "tr", // Varsayılan dil kodu
213
+ "supported_languages": ["tr", "en"], // Desteklenen diller
214
+ "timezone": "Europe/Istanbul", // Saat dilimi
215
+ "region": "tr-TR", // Bölge kodu
216
+ "last_version_number": 1, // Projelerin version_number için versiyon counter. Artarak ilerler.
217
+ "last_update_date": "2025-06-08T12:00:00.000Z",
218
+ "last_update_user": "admin",
219
+ "deleted": false,
220
+ "created_date": "2025-06-08T12:00:00.000Z",
221
+ "created_by": "admin",
222
+
223
+ // --------------------------------------------------------
224
+ // VERSIONS: Proje revizyonları ayrı bir version_number ile takip edilir.
225
+ // Yayınlanmış versiyonlar üzerinde düzenleme yapılamaz.
226
+ // Yeni versiyon oluşturumak için published versiyonlardan biri seçilir ve kopyası oluştulur, bu kopya üzerinde düzenleme yapılabilir.
227
+ // --------------------------------------------------------
228
+ "versions": [
229
+ {
230
+ "id": 1, // Proje versiyonu
231
+ "caption": "v1",
232
+ "published": true, // Versiyonun yayınlanma durumu.
233
+
234
+ // === Virtual agent'ın yapabileceği işleri tarifler =========
235
+ "general_prompt": "You are an airline assistant. You can book tickets, give information about booked tickets ...",
236
+
237
+ // === LLM configuration =======================
238
+ "llm": {
239
+ "repo_id": "ytu-ce-cosmos/Turkish-Llama-8b-DPO-v0.1", // eğer workmode hfcloud ve cloud ise, kullanılacak llm'in repo id'si. Eğer on-premise ise, llm'in indirileceği url ya da llm'in indirilmeden kullanılacağı network folder path
240
+ "generation_config": { // Llm'in kullanımı için gerekli konfigürasyon parametreleri
241
+ "max_new_tokens": 128,
242
+ "temperature": 0.3,
243
+ "top_p": 0.7,
244
+ "repetition_penalty": 1.1
245
+ },
246
+ "use_fine_tune": false, // LoRA fine-tune model kullanılma durumu
247
+ "fine_tune_zip": "" // use_fine_tune: true ise, kullanılacak LoRA adapter zip'in indirleceği url, ya da network file path.
248
+ },
249
+
250
+ // === INTENTS =================================
251
+ "intents": [
252
+ {
253
+ "name": "currency_rate_intent", // alt çizgi, tire yok
254
+ "caption": "Kur sorgulama",
255
+ "locale": "tr-TR",
256
+ "dependencies": [], // intent bağımlılıkları.
257
+
258
+ // Intent detection
259
+ "examples": [
260
+ "What is the dollar rate?",
261
+ "How much is the euro?"
262
+ ],
263
+ "detection_prompt": "Identify if user is asking for currency rate information.", // Intent detection için kullanılacak system prompt.
264
+
265
+ // Parameters: Intent tespit edildiğinde, kullanıcının ifadesinden extract edilecek parametreler
266
+ "parameters": [
267
+ {
268
+ "name": "currency",
269
+ "caption": "Döviz cinsi", // Eksik parametreyi tamamlarken kullanıcıya söylenebilecek parametre adı
270
+ "type": "str", // "str" | "int" | "float" | "bool" | "date"
271
+ "required": true,
272
+ "variable_name": "currency", // Parametre değerini set edeceğimiz session değişkeni adı
273
+ "extraction_prompt": "Extract the currency code (USD, EUR, TRY) from the user message.", // Parametre extraction için kullanılacak system prompt
274
+ "validation_regex": "^(USD|EUR|TRY)$", // kullanıcıdan alınan parametre değerini validate etmek için kullanılacak regex. Opsiyonel.
275
+ "invalid_prompt": "Geçersiz para birimi girdiniz. USD, EUR veya TRY şeklinde giriniz.", // Parametre değeri invalid ise kullanıcıya söylenecek mesajı oluşturacak system prompt
276
+ "type_error_prompt": "Para birimi metin olmalıdır (ör: USD)." // Eğer parametre tipi hatalıysa kullanıcıya söylenecek mesajı oluşturacak system prompt
277
+ }
278
+ ],
279
+
280
+ // API to call
281
+ "action": "currency_api", // Bu intent tespit edilip, parametreleri tamamlandığında çağırılacak api'nin adı.
282
+
283
+ // Fallbacks
284
+ "fallback_timeout_prompt": "Kur servisinde gecikme yaşanıyor. Lütfen biraz sonra tekrar deneyin.", // Api timeout durumunda kullanıcıya söylenecek mesajı oluşturacak system prompt
285
+ "fallback_error_prompt": "Kur bilgileri alınırken bir hata oluştu, daha sonra tekrar deneyebilir misiniz?" // Api hatası durumunda kullanıcıya söylenecek mesajı oluşturacak system prompt
286
+ }
287
+ // ... başka intent'ler
288
+ ],
289
+
290
+ "last_update_date": "2025-06-08T12:00:00.000Z",
291
+ "last_update_user": "admin",
292
+ "deleted": false,
293
+ "created_date": "2025-06-08T12:00:00.000Z",
294
+ "created_by": "admin",
295
+ "publish_date": "2025-06-08T12:00:00.000Z",
296
+ "published_by": "admin"
297
+ }
298
+ // ... yeni versiyonlar
299
+ ]
300
+ }
301
+ // ... başka projeler
302
+ ],
303
+
304
+ // =====================================================
305
+ // API DEFINITIONS (dict by name): Intent'lerde action olarak kullanılacak api tanımları
306
+ // =====================================================
307
+ "apis": [
308
+ {
309
+ "name": "currency_api",
310
+ "url": "https://mock.api/currency",
311
+ "method": "POST",
312
+
313
+ // Headers as dict; placeholders destekler
314
+ "headers": {
315
+ "Content-Type": "application/json",
316
+ "Authorization": "Bearer {{auth_tokens.currency_api.token}}"
317
+ },
318
+
319
+ // Body template
320
+ "body_template": {
321
+ "currency": "{{variables.currency}}"
322
+ },
323
+
324
+ // Timeout & retry
325
+ "timeout_seconds": 5,
326
+ "retry": {
327
+ "retry_count": 3,
328
+ "backoff_seconds": 2,
329
+ "strategy": "static" // "static" | "exponential"
330
+ },
331
+
332
+ // Auth (optional)
333
+ "auth": {
334
+ "enabled": false,
335
+ "token_endpoint": "https://mock.api/auth",
336
+ "token_request_body": {},
337
+ "response_token_path": "token", // json-path style. Ex: xx.yy.z
338
+ "token_refresh_endpoint": null, // opsiyonel
339
+ "token_refresh_body": {} // token_refresh_endpoint varsa zorunlu, yoksa opsiyonel.
340
+ },
341
+
342
+ "proxy": "", // Proxy (optional)
343
+
344
+ // API response → human-friendly answer
345
+ "response_prompt": "Aşağıdaki JSON döviz kuru bilgilerini içeriyor. Kullanıcıya anlaşılır bir Türkçe özet hazırla:\n\n{{api_response}}",
346
+
347
+ // Response mapping
348
+ "response_mappings": [
349
+ {
350
+ "variable_name": "exchange_rate",
351
+ "type": "float",
352
+ "json_path": "data.rate"
353
+ }
354
+ ],
355
+
356
+ "last_update_date": "2025-06-08T12:00:00.000Z",
357
+ "last_update_user": "admin",
358
+ "deleted": false,
359
+ "created_date": "2025-06-08T12:00:00.000Z",
360
+ "created_by": "admin"
361
+ }
362
+ ],
363
+
364
+ // =====================================================
365
+ // ACTIVITY LOG
366
+ // =====================================================
367
+ "activity_log": [
368
+ {
369
+ "id": 1,
370
+ "timestamp": "2025-06-08T12:00:00.000Z",
371
+ "user": "admin",
372
+ "action": "CREATE_PROJECT",
373
+ "entity_type": "project",
374
+ "entity_id": 1,
375
+ "entity_name": "airline_agent",
376
+ "details": "Created new project"
377
+ }
378
+ ]
379
+ }
flare-ui-tasarim.md ADDED
@@ -0,0 +1,516 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## Güncellenmiş flare-ui-2.0.md
2
+
3
+ ```markdown
4
+ # Flare Administration UI - Tasarım Dokümanı
5
+
6
+ ## 📌 Amaç
7
+
8
+ Flare Administration UI (Flare Admin), kullanıcıların Flare platformunda proje tanımlayıp yönetebileceği bir web arayüzüdür. Angular ile geliştirilir, backend olarak Python ile geliştirilmiş olan Flare backend'i kullanır.
9
+
10
+ Flare Admin ekranlarında; proje tanımlama, mevcut projeyi düzenleme, projeye versiyon çıkarma, versiyonu publish etme, projeyi enable-disable etme, proje tanımını silme gibi işlemler yapılabilir.
11
+
12
+ Document database olarak Flare'in service_config.jsonc dosyasını kullanır. Tüm tanım, düzenleme, silme ve listeleme işlemlerini bu dosya üzerinde yapar.
13
+
14
+ Flare Admin, Flare backend servisi üzerinden Spark ile entegre çalışır.
15
+
16
+ ## Genel Kurallar
17
+
18
+ Flare Admin, login ekranıyla başlar. Kullanıcı login olduktan sonra tanım ekranları görüntülenir.
19
+
20
+ Tanım ekranları, tab window'lar şeklinde gruplandırılmıştır. Her tab'da birbiriyle alakalı işlemler yapılır.
21
+
22
+ Tüm hatalı işlemler, işlemin yapıldığı ekranın alt kısmında kırmızı font ile uyarı şeklinde görüntülenir ve uyarı 5 sn sonra kaybolur.
23
+
24
+ Boolean alanlar ekranda (hem input olarak, hem de tablo üzerinde) checkbox olarak görüntülenir.
25
+
26
+ Silme işlemleri öncesinde, silinecek nesnenin diğer nesneler altında kullanımda olup olmadığı kontrol edilir. Eğer kullanımdaysa, silinmesine izin verilmez ve hangi nesneler tarafından kullanıldığını içeren bir mesaj ve hata kodu ile döndürülür. Kullanımda olmayan nesneyi silme öncesinde açılacak bir dialog'da kullanıcıdan onay alınır. Onayın ardından silme işlemi yapılır.
27
+
28
+ Nesnenin **deleted** alanı varsa silme işlemi fiziksel olarak yapılmaz, deleted=true olarak değiştirilir.
29
+
30
+ Ortam çok kullanıcılı olduğundan kayıt düzenleme işlemlerinde race condition kontrolü yapılır. Bunun için service_config.jsonc içinde config, project, version ve api nesnelerine **last_update_date** alanı eklenir.
31
+
32
+ Kullanıcı, düzenlemek için nesneyi ekrana yüklediğinde nesne içindeki bu değeri de yükler. Save butonuna bastığında backend'e bu değeri de gönderir ve backend kayıt öncesi bu değerin service_config.jsonc'deki ilgili nesnedeki değerle aynı olup olmadığını kontrol eder, aynı ise kaydı yapar ve kaydederken bu değeri o andaki tarih-saat-dakika-saniye-milisaniye değeri ile günceller.
33
+
34
+ Eğer bir başka kullanıcı aynı kaydı düzenliyorsa ve ilk kullanıcıdan sonra save'e bastıysa dosyadaki bu değer değişmiş olacağından backend kayda izin vermez ve "Kayıt başka kullanıcı tarafından düzenlendi. Lütfen tekrar yükleyin." tarzı bir uyarı ile birlikte bir hata kodu döndürür.
35
+
36
+ Bir diğer durum da, kullanıcı tarafından düzenlenen kaydın, bu kullanıcı kaydetmeden önce başka bir kullanıcı tarafından silinmiş olması durumudur. Backend kayıt öncesi dosyada bu nesneyi bulamazsa "Kayıt başka kullanıcı tarafından silindi." gibi bir uyarı ve bir hata kodu döndürür, kayda izin vermez.
37
+
38
+ ## Auto-save ve Undo/Redo Mekanizması
39
+
40
+ - Published olmayan version'lar üzerinde çalışırken her 30 saniyede bir otomatik draft kayıt yapılır
41
+ - Son 10 işlem için undo/redo desteği (Ctrl+Z / Ctrl+Y)
42
+ - Draft kayıtlar drafts/ klasöründe tutulur ve UI açıldığında "Recover unsaved changes?" dialog'u gösterilir
43
+
44
+ ## Klavye Kısayolları
45
+
46
+ - Ctrl+S: Save
47
+ - Ctrl+N: New (context'e göre project/version/intent)
48
+ - Ctrl+F: Search/Filter
49
+ - Ctrl+D: Duplicate
50
+ - Esc: Cancel/Close dialog
51
+
52
+ ## Flare Backend Düzenlemeleri
53
+
54
+ Flare backend'de Flare Admin UI işleyişi için bazı eklemeler yapılması gerekiyor.
55
+
56
+ ### Eklenecek endpoint'ler:
57
+
58
+ #### Temel CRUD Endpoint'leri
59
+
60
+ - POST /api/login - Kullanıcı girişi ve token üretimi
61
+ - GET /api/environment - Environment bilgileri alma
62
+ - PUT /api/environment - Environment bilgilerini kaydetme
63
+ - GET /api/projects - Proje listeleme (pagination, filter, sort destekli)
64
+ - POST /api/projects - Yeni proje oluşturma: Yeni proje oluşturulduğunda backend, version_id_counter alanını **1**'e ayarlar ve otomatik **Version 1** kaydını ekler. Frontend ekstra çağrı yapmaz.
65
+ - PUT /api/projects/{id} - Mevcut projeyi düzenleme
66
+ - DELETE /api/projects/{id} - Mevcut projeyi silme
67
+ - PATCH /api/projects/{id}/toggle - Proje enable/disable
68
+ - POST /api/projects/{id}/versions - Proje versiyonu oluşturma
69
+ - DELETE /api/projects/{id}/versions/{version_id} - Versiyon silme
70
+ - PUT /api/projects/{id}/versions/{version_id} - Versiyon düzenleme
71
+ - POST /api/projects/{id}/versions/{version_id}/publish - Versiyon yayınlama
72
+ - GET /api/apis - API listeleme
73
+ - POST /api/apis - Yeni API ekleme
74
+ - PUT /api/apis/{name} - Mevcut API'yi düzenleme
75
+ - DELETE /api/apis/{name} - Mevcut API'yi silme
76
+
77
+ #### Spark Integration Endpoint'leri (Yeni)
78
+
79
+ - POST /api/spark/startup - Projeyi Spark'a yükle
80
+ - GET /api/spark/projects - Spark proje listesi
81
+ - POST /api/spark/project/enable - Projeyi aktifleştir
82
+ - POST /api/spark/project/disable - Projeyi devre dışı bırak
83
+ - DELETE /api/spark/project/{name} - Projeyi Spark'tan sil
84
+
85
+ #### Chat Endpoint'leri (Yeni)
86
+
87
+ - GET /api/projects/names - Chat için enabled proje listesi
88
+ - POST /api/start_session - Chat session başlat
89
+ - POST /api/chat - Mesaj gönder/al (Header: X-Session-ID)
90
+
91
+ #### Ek Yardımcı Endpoint'ler
92
+
93
+ - POST /api/validate/regex - Regex pattern validasyonu
94
+ - POST /api/apis/test - API endpoint test etme
95
+ - GET /api/projects/{id}/versions/diff - Version karşılaştırma
96
+ - POST /api/projects/{id}/intents/bulk-delete - Toplu intent silme
97
+ - GET /api/activity-log - Aktivite logları
98
+ - POST /api/projects/import - Proje import
99
+ - GET /api/projects/{id}/export - Proje export
100
+ - POST /api/test/run-all - Tüm testleri çalıştır
101
+ - GET /api/test/status - Test durumu sorgula
102
+
103
+ ### Service_config.jsonc düzenlemeleri:
104
+
105
+ ```jsonc
106
+ {
107
+ "config": {
108
+ // Mevcut alanlar...
109
+ "internal_prompt": "⚠️ **NEVER output \"#DETECTED_INTENT:\"...", // Yeni
110
+ "project_id_counter": 1, // Yeni
111
+ "last_update_date": "2025-06-08T12:00:00.000Z", // Yeni
112
+ "last_update_user": "admin" // Yeni
113
+ },
114
+
115
+ "projects": [{
116
+ // Mevcut alanlar...
117
+ "icon": "folder", // Yeni
118
+ "description": "", // Yeni
119
+ "default_language": "tr", // Yeni
120
+ "supported_languages": ["tr"], // Yeni
121
+ "timezone": "Europe/Istanbul", // Yeni
122
+ "region": "tr-TR", // Yeni
123
+ "version_id_counter": 1, // Yeni
124
+ "last_update_date": "2025-06-08T12:00:00.000Z", // Yeni
125
+ "last_update_user": "admin", // Yeni
126
+ "deleted": false, // Yeni
127
+ "created_date": "2025-06-08T12:00:00.000Z", // Yeni
128
+ "created_by": "admin", // Yeni
129
+
130
+ "versions": [{
131
+ // Mevcut alanlar...
132
+ "last_update_date": "2025-06-08T12:00:00.000Z", // Yeni
133
+ "last_update_user": "admin", // Yeni
134
+ "deleted": false, // Yeni
135
+ "created_date": "2025-06-08T12:00:00.000Z", // Yeni
136
+ "created_by": "admin", // Yeni
137
+ "publish_date": null, // Yeni
138
+ "published_by": null // Yeni
139
+ }]
140
+ }],
141
+
142
+ "apis": [{
143
+ // Mevcut alanlar...
144
+ "response_mappings": [ // Yeni
145
+ {
146
+ "variable_name": "booking_id",
147
+ "type": "str",
148
+ "json_path": "confirmation.id"
149
+ }
150
+ ],
151
+ "last_update_date": "2025-06-08T12:00:00.000Z", // Yeni
152
+ "last_update_user": "admin", // Yeni
153
+ "deleted": false, // Yeni
154
+ "created_date": "2025-06-08T12:00:00.000Z", // Yeni
155
+ "created_by": "admin" // Yeni
156
+ }],
157
+
158
+ // Yeni: Activity log
159
+ "activity_log": [{
160
+ "id": 1,
161
+ "timestamp": "2025-06-08T12:00:00.000Z",
162
+ "user": "admin",
163
+ "action": "CREATE_PROJECT",
164
+ "entity_type": "project",
165
+ "entity_id": 1,
166
+ "entity_name": "airline_agent",
167
+ "details": "Created new project"
168
+ }]
169
+ }
170
+
171
+ Tab Ekranları
172
+ 1. User Info Tab'ı
173
+ Bu tab penceresinde login olan kullanıcı mevcut şifresini değiştirebilir. Ekrandaki alanlar:
174
+
175
+ Current Password (maskeli)
176
+ New Password (maskeli)
177
+ New Password (tekrar, maskeli)
178
+ Password Strength Indicator: Şifre girilirken güvenlik seviyesini gösterir (Weak/Medium/Strong)
179
+ Save butonu
180
+
181
+ Şifre değiştirebilmek için kullanıcı, maskeli alanlardan mevcut şifresini, yeni şifresini ve ikinci bir alanda teyit amaçlı olarak tekrar yeni şifresini girer ve kaydet butonuna basar. Şifre en az 8 karakter, büyük/küçük harf ve rakam içermelidir.
182
+ 2. Environment Tab'ı
183
+ Bu tab'da aşağıdaki alanlar bulunur:
184
+
185
+ Work Mode: Seçenekleri hfcloud, cloud ve on-premise olan bir combo. Zorunlu.
186
+ Cloud Token (maskeli): Work Mode on-premise seçildiğinde disable olur.
187
+ Spark Endpoint: URL formatında. Zorunlu. Yanında "Test Connection" butonu.
188
+ Internal System Prompt (Yeni): Expansion panel içinde multi-line textarea. Spark'ın tüm projeler için kullanacağı temel kuralları içerir. Placeholder'lar:
189
+
190
+ <intent names>: Runtime'da intent listesiyle değiştirilir
191
+ <intent captions>: Intent caption'larıyla değiştirilir
192
+ <project language>: Proje diline göre değiştirilir
193
+
194
+
195
+ Save butonu
196
+ Reload from Spark butonu: Spark'tan güncel config'i çeker
197
+
198
+ 3. APIs Tab'ı
199
+ Tab açıldığında, üstte bir toolbar bulunur:
200
+ Toolbar:
201
+
202
+ New API butonu
203
+ Import butonu: JSON dosyasından API tanımları yükler
204
+ Export butonu: Seçili API'leri JSON olarak export eder
205
+ Search alanı: API adı veya URL'de arama
206
+ Display Deleted checkbox
207
+
208
+ API Listesi Tablosu:
209
+ NameURLMethodTimeoutAuthDeletedActionsbook_flight_apihttps://api.example.com/bookPOST10s✓✗🖊️ 🧪 📋 🗑️
210
+ Action İkonları:
211
+
212
+ 🖊️ Edit: Edit API dialog'unu açar
213
+ 🧪 Test: API'yi test eder
214
+ 📋 Duplicate: API'nin kopyasını oluşturur
215
+ 🗑️ Delete: API'yi siler (kullanımda değilse)
216
+
217
+ 4. Projects Tab'ı
218
+ Tab ekranına girildiğinde üstte toolbar bulunur:
219
+ Toolbar:
220
+
221
+ New Project butonu
222
+ Import Project butonu
223
+ Search alanı
224
+ Display Deleted checkbox
225
+ View: List/Card view toggle
226
+
227
+ Proje Listesi: Kart görünümünde her proje için:
228
+ ┌─────────────────────────────────┐
229
+ │ 🛩️ airline_agent │
230
+ │ Havayolu Müşteri Temsilcisi │
231
+ │ Language: Turkish (tr) │
232
+ │ Versions: 3 (1 published) │
233
+ │ Status: ✓ Enabled │
234
+ │ Last update: 2 hours ago │
235
+ │ [Edit] [Versions] [Export] [⚙️] │
236
+ └─────────────────────────────────┘
237
+ 5. Chat Tab'ı (Yeni)
238
+ Flare chat sistemini test etmek için kullanılır.
239
+ İşleyiş:
240
+
241
+ Project Selection: Enabled ve published version'u olan projeler listelenir
242
+ Start Chat: Session başlatır, session_id alır
243
+ Chat Interface:
244
+
245
+ Mesaj history'si
246
+ Input alanı
247
+ Send butonu
248
+ Session bilgileri (ID, project)
249
+
250
+
251
+ End Session: Chat'i sonlandırır
252
+
253
+ Özellikler:
254
+
255
+ Real-time mesajlaşma
256
+ Session takibi
257
+ Auto-scroll
258
+ Error handling
259
+ Loading states
260
+
261
+ 6. Spark Integration Tab'ı (Yeni)
262
+ Bu tab'da Spark servisi ile doğrudan etkileşim sağlanır.
263
+ Üst Bölüm:
264
+
265
+ Project Selection: Dropdown ile proje seçimi
266
+ Proje seçildiğinde butonlar aktif olur
267
+
268
+ Butonlar ve İşlevleri:
269
+ Project Startup
270
+
271
+ Seçili projeyi Spark'a yükler
272
+ Backend üzerinden /spark/startup endpoint'ine istek atar
273
+ Response'u detaylı olarak gösterir
274
+
275
+ Get Project Status
276
+
277
+ Spark'taki tüm projelerin durumunu listeler
278
+ Tablo formatında: project_name, version, status, enabled, last_accessed
279
+ Status badge'leri: ready (yeşil), loading (turuncu), error (kırmızı), unloaded (gri)
280
+
281
+ Enable Project
282
+
283
+ Seçili projeyi Spark'ta aktif hale getirir
284
+
285
+ Disable Project
286
+
287
+ Seçili projeyi Spark'ta devre dışı bırakır
288
+
289
+ Delete Project
290
+
291
+ Seçili projeyi Spark'tan tamamen siler
292
+ Onay dialog'u gösterir
293
+
294
+ Response Panel:
295
+
296
+ Her işlemden sonra açılan expansion panel
297
+ Request ve response JSON'larını gösterir
298
+ Timestamp bilgisi
299
+ Success/error durumu
300
+ Son 10 işlem history'si
301
+
302
+ 7. Test Tab'ı
303
+ Bu tab'da sistemin end-to-end testi yapılabilir:
304
+ Test Kategorileri:
305
+
306
+ UI Tests: Component render, navigation, form validation
307
+ Backend Tests: API endpoint'leri, data integrity
308
+ Integration Tests: UI-Backend entegrasyonu
309
+ Spark Tests: LLM bağlantısı ve response kalitesi
310
+
311
+ Ekran Düzeni:
312
+ ┌─────────────────────────────────────────────┐
313
+ │ [Run All Tests] [Run Selected] [Stop] │
314
+ ├─────────────────────────────────────────────┤
315
+ │ □ All Tests │
316
+ │ □ UI Tests (15 tests) │
317
+ │ □ Login Flow │
318
+ │ □ Project CRUD │
319
+ │ □ Version Management │
320
+ │ □ Backend Tests (22 tests) │
321
+ │ □ Authentication │
322
+ │ □ API Endpoints │
323
+ │ □ Race Conditions │
324
+ │ □ Integration Tests (18 tests) │
325
+ │ □ Spark Tests (8 tests) │
326
+ ├─────────────────────────────────────────────┤
327
+ │ Test Results: │
328
+ │ ✓ Login with valid credentials - 120ms │
329
+ │ ✓ Create new project - 340ms │
330
+ │ ✗ Delete API in use - Expected behavior │
331
+ │ ⏳ Testing Spark connection... │
332
+ │ │
333
+ │ Progress: ████████░░ 80% (48/60) │
334
+ │ Passed: 45 | Failed: 3 | Running: 5 │
335
+ └─────────────────────────────────────────────┤
336
+ Test Detayları: Her test için:
337
+
338
+ Test adı ve açıklaması
339
+ Çalışma süresi
340
+ Hata durumunda detaylı log
341
+ "Re-run" butonu
342
+
343
+ 8. Activity Log (Sağ üst notification icon'a tıklandığında açılır)
344
+ ┌─────────────────────────────────────┐
345
+ │ 🔔 Recent Activities │
346
+ ├─────────────────────────────────────┤
347
+ │ 2 min ago │
348
+ │ 👤 admin published version 2 │
349
+ │ of airline_agent │
350
+ ├─────────────────────────────────────┤
351
+ │ 15 min ago │
352
+ │ 👤 user1 updated flight_info_api │
353
+ ├────���────────────────────────────────┤
354
+ │ 1 hour ago │
355
+ │ 👤 admin created new project │
356
+ │ hotel_booking │
357
+ ├─────────────────────────────────────┤
358
+ │ [View All Activities] │
359
+ └─────────────────────────────────────┘
360
+ Dialog Ekranları
361
+ Edit API Dialog (Güncelleme)
362
+ General Tab'a eklenenler:
363
+ Response Mappings Bölümü:
364
+
365
+ Variable Name: snake_case zorunlu
366
+ Type: str, int, float, bool, date seçenekleri
367
+ JSON Path: Dot notation ile path (örn: data.result.value)
368
+ Add/Remove mapping butonları
369
+ Validation: Variable name uniqueness
370
+
371
+ Template Variables (Geliştirilmiş):
372
+
373
+ Tüm intent parametrelerinden otomatik liste
374
+ Response mapping değişkenleri
375
+ Auth token değişkenleri
376
+ Config değişkenleri (work_mode, vb.)
377
+ Tıklanabilir chip'ler ile kolay ekleme
378
+
379
+ JSON Validation (Geliştirilmiş):
380
+
381
+ Numeric değişkenler için akıllı validation
382
+ Template variable type checking
383
+ Syntax highlighting
384
+
385
+ Test Tab (Geliştirilmiş):
386
+
387
+ Editable test request JSON
388
+ Placeholder değerlerle doldurma
389
+ Reset to template butonu
390
+ Response preview
391
+
392
+ Edit Project Dialog (Güncelleme)
393
+ Yeni alanlar eklendi:
394
+
395
+ Icon: Material icon seçimi (folder, work, shopping_cart, vb.)
396
+ Description: Proje açıklaması
397
+ Default Language: Varsayılan dil (tr, en, de, fr, es)
398
+ Supported Languages: Desteklenen diller (çoklu seçim)
399
+ Timezone: Saat dilimi (Europe/Istanbul, vb.)
400
+ Region: Bölge kodu (tr-TR, vb.)
401
+
402
+ Edit Version Dialog
403
+ [Mevcut içerik korunacak, değişiklik yok]
404
+ Edit Intent Dialog
405
+ [Mevcut içerik korunacak, değişiklik yok]
406
+ Edit Parameter Dialog
407
+ Date type desteği eklendi:
408
+
409
+ Type combo'suna "date" seçeneği
410
+ Date formatı: YYYY-MM-DD (ISO format)
411
+ Türkçe tarih ifadeleri için özel extraction prompt'lar
412
+
413
+ Version Comparison Dialog
414
+ [Mevcut içerik korunacak, değişiklik yok]
415
+ Flare Admin Test Planı
416
+ [Mevcut test planına ek olarak:]
417
+ Spark Integration Test Senaryoları:
418
+
419
+ Spark Startup Testi:
420
+
421
+ Proje seç
422
+ Startup butonuna bas
423
+ Response'u kontrol et
424
+ Get Status ile doğrula
425
+
426
+
427
+ Spark Project Lifecycle:
428
+
429
+ Enable → Disable → Delete akışı
430
+ Her adımda status kontrolü
431
+ Error handling testleri
432
+
433
+
434
+
435
+ Chat Test Senaryoları:
436
+
437
+ Full Chat Flow:
438
+
439
+ Session başlat
440
+ Intent detection testi
441
+ Parameter extraction testi
442
+ API call testi
443
+ Session sonlandır
444
+
445
+
446
+ Multi-turn Conversation:
447
+
448
+ Eksik parametre tamamlama
449
+ Context retention
450
+ Session state takibi
451
+
452
+
453
+
454
+ Response Mapping Testleri:
455
+
456
+ Mapping Validation:
457
+
458
+ Valid/invalid variable names
459
+ Type conversion testleri
460
+ Nested JSON path resolution
461
+
462
+
463
+ Runtime Mapping:
464
+
465
+ API response'tan değer extraction
466
+ Session variable update
467
+ Subsequent intent'lerde kullanım
468
+
469
+
470
+
471
+ Internal Prompt Testleri:
472
+
473
+ Placeholder Replacement:
474
+
475
+ <intent names> doğru değişiyor mu?
476
+ <intent captions> doğru değişiyor mu?
477
+ <project language> project default_language'den alınıyor mu?
478
+
479
+
480
+ Prompt Combination:
481
+
482
+ Internal prompt + general prompt birleşimi
483
+ Prompt öncelik sırası
484
+
485
+
486
+
487
+ Güvenlik ve Performans
488
+ Token Yönetimi:
489
+
490
+ SPARK_TOKEN environment variable'dan alınır
491
+ Tüm Spark isteklerinde Authorization header
492
+ Token rotation desteği
493
+
494
+ Race Condition Handling:
495
+
496
+ last_update_date kontrolü tüm CRUD işlemlerinde
497
+ Concurrent edit detection
498
+ Optimistic locking pattern
499
+
500
+ Session Management:
501
+
502
+ 30 dakika inactivity timeout
503
+ Session cleanup thread
504
+ Memory-efficient storage
505
+
506
+ Teknoloji Stack
507
+
508
+ Frontend: Angular 17+ (standalone components)
509
+ UI Framework: Angular Material
510
+ State Management: RxJS
511
+ Backend: Python FastAPI
512
+ Authentication: JWT
513
+ Database: service_config.jsonc (document database pattern)
514
+ LLM Integration: Spark servisi
515
+
516
+ Bu güncellemelerle Flare Administration UI, tam fonksiyonel bir orchestration platform yönetim arayüzü haline gelmiştir.