flare / docs /flare-tasarim.md
ciyidogan's picture
Upload 2 files
c616f96 verified
# Flare Platform - Güncel Tasarım Dokümanı
## 🏗 Genel Mimari
Flare, modüler LLM provider desteği ile çalışan çok adımlı ve akıllı bir orchestration katmanıdır. Provider-agnostic tasarımı sayesinde farklı LLM, TTS ve STT motorları ile çalışabilir.
### Temel Özellikler
- ✅ Provider-based mimari (LLM, TTS, STT)
- ✅ Intent detection ve parameter extraction
- ✅ Akıllı parametre toplama (smart grouping)
- ✅ Onay mekanizması (requiresApproval)
- ✅ Multi-language destek (LocalizedExample, LocalizedCaption)
- ✅ Session-based state machine
- ✅ API orchestration ve response mapping
- ✅ Activity logging ve audit trail
## 📋 Konfigürasyon Yapısı
### service_config.jsonc - Ana Yapı
```json
{
"config": {
// Provider tanımları
"llm_provider": {
"name": "spark|gpt4o|gpt4o-mini",
"api_key": "enc:...", // Şifrelenmiş
"endpoint": "https://...",
"settings": {
"internal_prompt": "Global LLM yönergesi",
"parameter_collection_config": {
"max_params_per_question": 2,
"smart_grouping": true,
"retry_unanswered": true,
"collection_prompt": "..."
}
}
},
"tts_provider": {
"name": "no_tts|elevenlabs|blaze",
"api_key": "enc:...",
"endpoint": null,
"settings": {}
},
"stt_provider": {
"name": "no_stt|google|azure|flicker",
"api_key": "/path/to/credentials.json",
"endpoint": null,
"settings": {
"language": "tr-TR",
"model": "latest_long"
}
},
"providers": [
// Kullanılabilir provider tanımları
],
"users": [...]
},
"projects": [...],
"apis": [...],
"activity_log": [...],
"project_id_counter": 1,
"last_update_date": null,
"last_update_user": null
}
```
### Provider Sistemi
#### Provider Config
```json
{
"type": "llm|tts|stt",
"name": "spark",
"display_name": "Spark LLM",
"requires_endpoint": true,
"requires_api_key": true,
"requires_repo_info": false,
"description": "YTU Cosmos Spark LLM"
}
```
#### Provider Settings
```json
{
"name": "provider_name",
"api_key": "enc:encrypted_key",
"endpoint": "https://endpoint",
"settings": {
// Provider-specific ayarlar
}
}
```
### Project Yapısı
```json
{
"id": 1,
"name": "project_name",
"caption": "Proje Başlığı",
"icon": "folder",
"description": "Açıklama",
"enabled": true,
"default_locale": "tr",
"supported_locales": ["tr", "en"],
"timezone": "Europe/Istanbul",
"region": "tr-TR",
"versions": [...],
"version_id_counter": 1,
"deleted": false,
"created_date": "2024-01-01T00:00:00Z",
"created_by": "username",
"last_update_date": null,
"last_update_user": null
}
```
### Version Yapısı
```json
{
"id": 1,
"no": 1,
"caption": "v1",
"description": "Version açıklaması",
"published": true,
"deleted": false,
"general_prompt": "Asistan için genel yönerge",
"welcome_prompt": "Hoşgeldin mesajı yönergesi",
"llm": {
"repo_id": "model-id",
"generation_config": {},
"use_fine_tune": false,
"fine_tune_zip": ""
},
"intents": [...],
"created_date": "2024-01-01T00:00:00Z",
"created_by": "username",
"publish_date": null,
"published_by": null
}
```
### Intent Yapısı
```json
{
"name": "intent_name",
"caption": "Intent Başlığı",
"requiresApproval": false,
"dependencies": [],
"examples": [
{
"locale_code": "tr",
"example": "Örnek cümle"
}
],
"detection_prompt": "Intent algılama yönergesi",
"parameters": [...],
"action": "api_name",
"fallback_timeout_prompt": "Zaman aşımı mesajı",
"fallback_error_prompt": "Hata mesajı"
}
```
### Parameter Yapısı
```json
{
"name": "param_name",
"caption": [
{
"locale_code": "tr",
"caption": "Parametre Başlığı"
}
],
"type": "str|int|float|bool|date",
"required": true,
"variable_name": "variable_name",
"extraction_prompt": "Parametre çıkarma yönergesi",
"validation_regex": "^pattern$",
"invalid_prompt": "Geçersiz değer mesajı",
"type_error_prompt": "Tip hatası mesajı"
}
```
### API Yapısı
```json
{
"name": "api_name",
"description": "{{variables.x}} için işlem açıklaması",
"url": "https://api-endpoint",
"method": "GET|POST|PUT|DELETE",
"headers": "{}", // JSON string
"body_template": "{}", // JSON string
"timeout_seconds": 10,
"retry": {
"max_attempts": 3,
"backoff_seconds": 2,
"strategy": "static|exponential"
},
"auth": {
"enabled": true,
"token_endpoint": "https://auth-endpoint",
"response_token_path": "access_token",
"token_request_body": "{}",
"token_refresh_endpoint": null,
"token_refresh_body": "{}"
},
"response_mappings": [
{
"variable_name": "result",
"caption": "Sonuç",
"type": "str",
"json_path": "$.data.result"
}
],
"response_prompt": "Response insanileştirme yönergesi",
"deleted": false,
"created_date": "2024-01-01T00:00:00Z",
"created_by": "username"
}
```
## 🔄 Session ve State Yönetimi
### Session Özellikleri
```python
class Session:
session_id: str
project_name: str
version_number: int
version_config: VersionConfig
# State machine
state: str # idle | await_param | call_api | humanize
last_intent: str | None
awaiting_parameters: List[str]
missing_ask_count: int
# Data storage
variables: Dict[str, str]
auth_tokens: Dict[str, Dict]
chat_history: List[Dict[str, str]]
# Smart parameter tracking
asked_parameters: Dict[str, int]
unanswered_parameters: List[str]
parameter_ask_rounds: int
# Real-time support
is_realtime_session: bool
active_websocket: Any
```
### State Machine Flow
```
start_session → welcome_prompt
idle ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ←
↓ ↑
detect_intent → collect_params → approval? → call_api → humanize
↑ ↓
← await_param ←
```
## 🔐 Onay Mekanizması
Intent'te `requiresApproval: true` olduğunda:
1. **Otomatik parametre ekleme**: `is_approved` parametresi dinamik olarak eklenir
2. **Onay sorusu oluşturma**: API description'daki placeholder'lar değiştirilir
3. **Onay kontrolü**:
- Onay verilirse → API çağrısı
- Onay verilmezse → İşlem iptali
## 🌍 Multi-Language Destek
### Locale Yönetimi
- Project seviyesinde `default_locale` ve `supported_locales`
- LocalizedExample ve LocalizedCaption yapıları
- Locale JSON dosyaları (`tr.json`, `en.json`, vb.)
### LocaleManager
```python
# Locale bilgilerini yönetir
LocaleManager.get_locale("tr")
LocaleManager.format_date(date, "tr")
LocaleManager.parse_date_expression("yarın", "tr")
LocaleManager.format_number(1234.56, "tr")
```
## 🎤 TTS/STT Entegrasyonu
### TTS Providers
- **ElevenLabs**: Yüksek kaliteli, çok dilli
- **Blaze**: Alternatif TTS
- **No TTS**: Devre dışı
### STT Providers
- **Google**: Cloud Speech-to-Text
- **Azure**: Azure Speech Services
- **Flicker**: Alternatif STT
- **No STT**: Devre dışı
### Real-time Features
- WebSocket-based audio streaming
- Voice Activity Detection (VAD)
- Noise reduction
- Interim results
## 🚀 LLM Provider Desteği
### Spark
- YTU Cosmos modelleri
- HuggingFace Cloud veya on-premise
- Custom fine-tuning desteği
### GPT-4o / GPT-4o-mini
- OpenAI API entegrasyonu
- Temperature ve max_tokens kontrolü
- Maliyet optimizasyonu
### Provider Seçimi
```python
# chat_handler.py
if llm_provider.name == "spark":
llm = SparkLLM(endpoint, token)
elif llm_provider.name.startswith("gpt4o"):
llm = GPT4oLLM(api_key, model)
```
## 📡 API Yönetimi
### API Çağrı Süreci
1. **Variable substitution**: `{{variables.xxx}}` → gerçek değerler
2. **Auth token yönetimi**: Otomatik token alma ve yenileme
3. **Retry logic**: Configurable retry stratejisi
4. **Response mapping**: JSON path ile veri çıkarma
5. **Response humanization**: LLM ile insanileştirme
### Auth Mekanizması
```python
# Token alma ve cache'leme
if api.auth.enabled:
token = get_or_refresh_token(api, session)
headers["Authorization"] = f"Bearer {token}"
```
## 🔒 Güvenlik
### Encryption
- API key'ler `enc:` prefix ile şifrelenmiş saklanır
- Fernet encryption (symmetric)
- Environment variable: `FERNET_KEY`
### Authentication
- JWT-based session yönetimi
- Bcrypt password hashing
- Session timeout kontrolü
### Race Condition Koruması
- `last_update_date` ile optimistic locking
- Thread-safe session store
- Concurrent update kontrolü
## 📊 Monitoring ve Logging
### Activity Log
```json
{
"timestamp": "2024-01-01T00:00:00Z",
"username": "admin",
"action": "CREATE_PROJECT",
"entity_type": "project",
"entity_id": 1,
"entity_name": "project_name",
"details": "Additional info"
}
```
### Log Actions
- Project CRUD: CREATE, UPDATE, DELETE, ENABLE, DISABLE
- Version: CREATE, UPDATE, PUBLISH, DELETE
- API: CREATE, UPDATE, DELETE
- Environment: UPDATE_ENVIRONMENT
- Import/Export: IMPORT_PROJECT, EXPORT_PROJECT
## 🧪 Test ve Development
### Mock Backend
- Scenario-based testing
- Configurable responses
- Error simulation
### Debug Features
- Detailed timestamped logging
- Request/Response tracking
- Performance metrics
## 🔄 Import/Export
### Project Export Format
```json
{
"name": "project_name",
"caption": "Project Caption",
"icon": "folder",
"description": "Description",
"default_locale": "tr",
"supported_locales": ["tr", "en"],
"versions": [
{
"caption": "v1",
"general_prompt": "...",
"llm": {...},
"intents": [...]
}
]
}
```
## 🚦 Production Deployment
### Docker Support
- HuggingFace Spaces uyumlu
- Health check endpoint
- Environment-based configuration
- Volume mount için permission handling
### Environment Variables
```bash
FERNET_KEY=... # Encryption key
SPARK_TOKEN=... # Spark API token
OPENAI_API_KEY=... # GPT-4o key
GOOGLE_APPLICATION_CREDENTIALS=... # STT credentials
HF_HOME=/app/.cache # HuggingFace cache
```
### Health Check
```python
@app.get("/")
def health():
return {"status": "ok"}
# Hugging Face için daemon thread
threading.Thread(target=run_health_server, daemon=True).start()
```