Spaces:
				
			
			
	
			
			
		Paused
		
	
	
	
			
			
	
	
	
	
		
		
		Paused
		
	| # 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() | |
| ``` | 

