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ı

{
  "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

{
  "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

{
  "name": "provider_name",
  "api_key": "enc:encrypted_key",
  "endpoint": "https://endpoint",
  "settings": {
    // Provider-specific ayarlar
  }
}

Project Yapısı

{
  "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ı

{
  "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ı

{
  "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ı

{
  "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ı

{
  "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

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

# 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

# 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ı

# 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

{
  "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

{
  "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

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

@app.get("/")
def health():
    return {"status": "ok"}

# Hugging Face için daemon thread
threading.Thread(target=run_health_server, daemon=True).start()