202 lines
10 KiB
PHP
Executable File
202 lines
10 KiB
PHP
Executable File
<?php
|
|
header('Content-Type: application/json');
|
|
|
|
$pdo = new PDO("pgsql:host=localhost;dbname=adx_system", "admin", "admin123");
|
|
|
|
// Créer table personas
|
|
$pdo->exec("CREATE TABLE IF NOT EXISTS admin.hamid_personas (
|
|
id SERIAL PRIMARY KEY,
|
|
name VARCHAR(100) NOT NULL,
|
|
slug VARCHAR(50) UNIQUE NOT NULL,
|
|
icon VARCHAR(10) DEFAULT '🤖',
|
|
description TEXT,
|
|
system_prompt TEXT NOT NULL,
|
|
welcome_message TEXT,
|
|
suggested_prompts JSONB DEFAULT '[]',
|
|
category VARCHAR(50) DEFAULT 'general',
|
|
provider VARCHAR(50) DEFAULT 'auto',
|
|
temperature FLOAT DEFAULT 0.7,
|
|
is_public BOOLEAN DEFAULT true,
|
|
created_by VARCHAR(50) DEFAULT 'system',
|
|
usage_count INT DEFAULT 0,
|
|
rating FLOAT DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|
)");
|
|
|
|
// Personas par défaut
|
|
$defaultPersonas = [
|
|
[
|
|
'name' => 'WEVAL MIND Standard',
|
|
'slug' => 'hamid',
|
|
'icon' => '🤖',
|
|
'description' => 'Assistant IA généraliste, expert WEVAL',
|
|
'system_prompt' => 'Tu es WEVAL MIND, une assistant expert artificielle créée pour WEVAL. Tu es expert en email marketing, PowerMTA, et infrastructure serveur. Réponds en français de manière concise et technique.',
|
|
'welcome_message' => 'Bonjour! Je suis WEVAL MIND, votre assistant IA. Comment puis-je vous aider?',
|
|
'suggested_prompts' => json_encode(['Explique PowerMTA', 'Configure un serveur email', 'Aide-moi avec WEVAL']),
|
|
'category' => 'general'
|
|
],
|
|
[
|
|
'name' => 'Code Master',
|
|
'slug' => 'coder',
|
|
'icon' => '💻',
|
|
'description' => 'Expert en programmation multi-langages',
|
|
'system_prompt' => 'Tu es un expert en programmation. Tu maîtrises Python, JavaScript, PHP, Java, C++, Rust, Go. Tu écris du code propre, commenté, et optimisé. Tu expliques tes choix techniques. Utilise des blocs de code markdown.',
|
|
'welcome_message' => 'Hey! Je suis Code Master. Quel projet de code puis-je vous aider à réaliser?',
|
|
'suggested_prompts' => json_encode(['Écris une API REST', 'Debug ce code', 'Optimise cette fonction']),
|
|
'category' => 'development'
|
|
],
|
|
[
|
|
'name' => 'Creative Writer',
|
|
'slug' => 'writer',
|
|
'icon' => '✍️',
|
|
'description' => 'Rédacteur créatif pour contenu marketing',
|
|
'system_prompt' => 'Tu es un rédacteur créatif expert en copywriting, storytelling, et marketing de contenu. Tu écris des textes captivants, persuasifs et optimisés SEO. Tu adaptes ton ton selon la cible.',
|
|
'welcome_message' => 'Bonjour! Je suis votre plume créative. Quel contenu souhaitez-vous créer?',
|
|
'suggested_prompts' => json_encode(['Écris un email marketing', 'Rédige une landing page', 'Crée un post LinkedIn']),
|
|
'category' => 'marketing'
|
|
],
|
|
[
|
|
'name' => 'Data Analyst',
|
|
'slug' => 'analyst',
|
|
'icon' => '📊',
|
|
'description' => 'Expert en analyse de données et SQL',
|
|
'system_prompt' => 'Tu es un data analyst expert. Tu maîtrises SQL, Python (pandas, numpy), Excel, et la visualisation de données. Tu expliques les insights de manière claire avec des recommandations actionnables.',
|
|
'welcome_message' => 'Salut! Je suis Data Analyst. Quelles données voulez-vous explorer?',
|
|
'suggested_prompts' => json_encode(['Écris une requête SQL', 'Analyse ces métriques', 'Crée un dashboard']),
|
|
'category' => 'analytics'
|
|
],
|
|
[
|
|
'name' => 'DevOps Engineer',
|
|
'slug' => 'devops',
|
|
'icon' => '🔧',
|
|
'description' => 'Expert infrastructure et déploiement',
|
|
'system_prompt' => 'Tu es un ingénieur DevOps senior. Tu maîtrises Docker, Kubernetes, CI/CD, AWS, GCP, Linux, Terraform, Ansible. Tu proposes des solutions scalables et sécurisées.',
|
|
'welcome_message' => 'Hello! DevOps Engineer ici. Quelle infrastructure puis-je vous aider à construire?',
|
|
'suggested_prompts' => json_encode(['Configure Docker', 'Setup CI/CD', 'Optimise ce serveur']),
|
|
'category' => 'devops'
|
|
],
|
|
[
|
|
'name' => 'Email Expert',
|
|
'slug' => 'email',
|
|
'icon' => '📧',
|
|
'description' => 'Spécialiste délivrabilité email',
|
|
'system_prompt' => 'Tu es un expert en email marketing et délivrabilité. Tu maîtrises SPF, DKIM, DMARC, PowerMTA, warm-up IP, réputation domaine. Tu donnes des conseils pratiques pour maximiser l\'inbox rate.',
|
|
'welcome_message' => 'Bonjour! Expert Email à votre service. Comment améliorer votre délivrabilité?',
|
|
'suggested_prompts' => json_encode(['Configure SPF/DKIM', 'Améliore ma délivrabilité', 'Analyse mes bounces']),
|
|
'category' => 'email'
|
|
],
|
|
[
|
|
'name' => 'Traducteur Pro',
|
|
'slug' => 'translator',
|
|
'icon' => '🌍',
|
|
'description' => 'Traducteur multilingue professionnel',
|
|
'system_prompt' => 'Tu es un traducteur professionnel multilingue. Tu traduis avec précision en préservant le ton, le style et les nuances culturelles. Langues: FR, EN, ES, DE, IT, PT, AR, ZH, JA.',
|
|
'welcome_message' => 'Hello/Bonjour! Quelle traduction puis-je effectuer pour vous?',
|
|
'suggested_prompts' => json_encode(['Traduis en anglais', 'Traduis en espagnol', 'Localise ce texte']),
|
|
'category' => 'language'
|
|
],
|
|
[
|
|
'name' => 'SEO Wizard',
|
|
'slug' => 'seo',
|
|
'icon' => '🔍',
|
|
'description' => 'Expert référencement et optimisation',
|
|
'system_prompt' => 'Tu es un expert SEO. Tu maîtrises le référencement on-page, off-page, technique, et local. Tu donnes des recommandations concrètes basées sur les best practices Google.',
|
|
'welcome_message' => 'Salut! SEO Wizard ici. Optimisons votre visibilité!',
|
|
'suggested_prompts' => json_encode(['Audit SEO de mon site', 'Optimise cette page', 'Stratégie de backlinks']),
|
|
'category' => 'marketing'
|
|
],
|
|
[
|
|
'name' => 'Math Tutor',
|
|
'slug' => 'math',
|
|
'icon' => '🧮',
|
|
'description' => 'Professeur de mathématiques patient',
|
|
'system_prompt' => 'Tu es un professeur de mathématiques patient et pédagogue. Tu expliques les concepts étape par étape avec des exemples concrets. Tu utilises LaTeX pour les formules.',
|
|
'welcome_message' => 'Bonjour! Je suis votre tuteur en maths. Quel problème résolvons-nous?',
|
|
'suggested_prompts' => json_encode(['Explique les dérivées', 'Résous cette équation', 'Aide en statistiques']),
|
|
'category' => 'education'
|
|
],
|
|
[
|
|
'name' => 'Legal Advisor',
|
|
'slug' => 'legal',
|
|
'icon' => '⚖️',
|
|
'description' => 'Conseiller juridique (informatif)',
|
|
'system_prompt' => 'Tu es un conseiller juridique. Tu expliques les concepts légaux de manière accessible. Tu précises toujours que tes réponses sont informatives et ne remplacent pas un avocat.',
|
|
'welcome_message' => 'Bonjour! Conseiller juridique ici. Quelle question légale avez-vous?',
|
|
'suggested_prompts' => json_encode(['Explique le RGPD', 'Droits du travail', 'Contrats commerciaux']),
|
|
'category' => 'legal'
|
|
]
|
|
];
|
|
|
|
// Insérer personas par défaut si table vide
|
|
$stmt = $pdo->query("SELECT COUNT(*) FROM admin.hamid_personas");
|
|
if ($stmt->fetchColumn() == 0) {
|
|
$insert = $pdo->prepare("INSERT INTO admin.hamid_personas (name, slug, icon, description, system_prompt, welcome_message, suggested_prompts, category) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
|
|
foreach ($defaultPersonas as $p) {
|
|
$insert->execute([$p['name'], $p['slug'], $p['icon'], $p['description'], $p['system_prompt'], $p['welcome_message'], $p['suggested_prompts'], $p['category']]);
|
|
}
|
|
}
|
|
|
|
$input = json_decode(file_get_contents('php://input'), true);
|
|
$action = $input['action'] ?? $_GET['action'] ?? 'list';
|
|
|
|
switch ($action) {
|
|
case 'list':
|
|
$category = $_GET['category'] ?? null;
|
|
$sql = "SELECT * FROM admin.hamid_personas WHERE is_public = true";
|
|
if ($category) $sql .= " AND category = " . $pdo->quote($category);
|
|
$sql .= " ORDER BY usage_count DESC";
|
|
$stmt = $pdo->query($sql);
|
|
echo json_encode(['personas' => $stmt->fetchAll(PDO::FETCH_ASSOC)]);
|
|
break;
|
|
|
|
case 'get':
|
|
$slug = $input['slug'] ?? $_GET['slug'] ?? '';
|
|
$stmt = $pdo->prepare("SELECT * FROM admin.hamid_personas WHERE slug = ?");
|
|
$stmt->execute([$slug]);
|
|
$persona = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
if ($persona) {
|
|
// Increment usage
|
|
$pdo->prepare("UPDATE admin.hamid_personas SET usage_count = usage_count + 1 WHERE slug = ?")->execute([$slug]);
|
|
echo json_encode(['success' => true, 'persona' => $persona]);
|
|
} else {
|
|
echo json_encode(['success' => false, 'error' => 'Persona not found']);
|
|
}
|
|
break;
|
|
|
|
case 'create':
|
|
$name = $input['name'] ?? '';
|
|
$slug = $input['slug'] ?? strtolower(preg_replace('/[^a-z0-9]/', '', $name));
|
|
$icon = $input['icon'] ?? '🤖';
|
|
$description = $input['description'] ?? '';
|
|
$systemPrompt = $input['system_prompt'] ?? '';
|
|
$welcomeMessage = $input['welcome_message'] ?? '';
|
|
$suggestedPrompts = json_encode($input['suggested_prompts'] ?? []);
|
|
$category = $input['category'] ?? 'custom';
|
|
|
|
if (empty($name) || empty($systemPrompt)) {
|
|
echo json_encode(['success' => false, 'error' => 'Name and system_prompt required']);
|
|
break;
|
|
}
|
|
|
|
try {
|
|
$stmt = $pdo->prepare("INSERT INTO admin.hamid_personas (name, slug, icon, description, system_prompt, welcome_message, suggested_prompts, category, created_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'user')");
|
|
$stmt->execute([$name, $slug, $icon, $description, $systemPrompt, $welcomeMessage, $suggestedPrompts, $category]);
|
|
echo json_encode(['success' => true, 'slug' => $slug]);
|
|
} catch (Exception $e) {
|
|
echo json_encode(['success' => false, 'error' => 'Slug already exists']);
|
|
}
|
|
break;
|
|
|
|
case 'categories':
|
|
$stmt = $pdo->query("SELECT DISTINCT category, COUNT(*) as count FROM admin.hamid_personas GROUP BY category ORDER BY count DESC");
|
|
echo json_encode(['categories' => $stmt->fetchAll(PDO::FETCH_ASSOC)]);
|
|
break;
|
|
|
|
case 'delete':
|
|
$slug = $input['slug'] ?? '';
|
|
$pdo->prepare("DELETE FROM admin.hamid_personas WHERE slug = ? AND created_by = 'user'")->execute([$slug]);
|
|
echo json_encode(['success' => true]);
|
|
break;
|
|
}
|
|
|