From 5002d40e7186622ab8034f47591a51fd23a6918e Mon Sep 17 00:00:00 2001 From: opus Date: Tue, 21 Apr 2026 15:59:46 +0200 Subject: [PATCH] auto-sync via WEVIA git_sync_all intent 2026-04-21T15:59:46+02:00 --- api/ambre-sov-scan.php | 32 ++ api/ambre-thinking.php | 70 +++++ api/blade-actions-surfaced.json | 2 +- api/em-kpi-cache.json | 281 ++++++++++++++++++ api/v83-business-kpi-latest.json | 2 +- ...via-strategie-Q3-20260421-135939-70370d.md | 39 +++ ...ia-strategie-Q3-20260421-135939-70370d.pdf | Bin 0 -> 24361 bytes .../wevia-tuto-20260421-135942-e0b9f9.docx | Bin 0 -> 12142 bytes .../wevia-tuto-20260421-135942-e0b9f9.md | 109 +++++++ wevia.html | 51 +++- 10 files changed, 581 insertions(+), 5 deletions(-) create mode 100644 api/ambre-sov-scan.php create mode 100644 api/ambre-thinking.php create mode 100644 generated/wevia-strategie-Q3-20260421-135939-70370d.md create mode 100644 generated/wevia-strategie-Q3-20260421-135939-70370d.pdf create mode 100644 generated/wevia-tuto-20260421-135942-e0b9f9.docx create mode 100644 generated/wevia-tuto-20260421-135942-e0b9f9.md diff --git a/api/ambre-sov-scan.php b/api/ambre-sov-scan.php new file mode 100644 index 000000000..26df3e925 --- /dev/null +++ b/api/ambre-sov-scan.php @@ -0,0 +1,32 @@ +/dev/null | head -30"; + $out["files"] = array_filter(array_map("trim", explode("\n", @shell_exec($cmd) ?: ""))); +} +// Nginx config that handles /api/sovereign/ +$ng = @shell_exec("grep -l sovereign /etc/nginx/sites-enabled/* 2>/dev/null"); +$out["nginx_configs"] = array_filter(array_map("trim", explode("\n", $ng ?: ""))); + +// If we have a config, extract the location block +foreach ($out["nginx_configs"] ?? [] as $f) { + if (!$f) continue; + $content = @file_get_contents($f); + if ($content) { + // find any location containing /api/sovereign or similar + if (preg_match_all("/location[^{]*\/api\/sovereign[^{]*\{[^}]+\}/m", $content, $matches)) { + $out["nginx_blocks_$f"] = $matches[0]; + } + if (preg_match_all("/proxy_pass[^;]+sovereign[^;]+;/", $content, $pp)) { + $out["proxy_pass_sov"] = $pp[0]; + } + if (preg_match_all("/\/api\/sovereign[^\s{}]+/", $content, $refs)) { + $out["sovereign_refs_$f"] = array_unique($refs[0]); + } + } +} + +echo json_encode($out, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES); diff --git a/api/ambre-thinking.php b/api/ambre-thinking.php new file mode 100644 index 000000000..7976a991a --- /dev/null +++ b/api/ambre-thinking.php @@ -0,0 +1,70 @@ +"Analyse de la demande en cours..."]); exit; } + +// Detect query pattern and build tailored reasoning +$lc = mb_strtolower($q); +$thinking = ""; + +// File gen patterns +if (preg_match("/g[eéèê]n[eéèê]re?.*(pdf|pptx?|powerpoint|docx?|word|excel|tableau|document|pr[eéèê]sentation)/iu", $q, $m)) { + $type = strtolower($m[1]); + $thinking = "Je reçois une demande de génération de document $type. Étape 1 : extraction du sujet depuis la requête. Étape 2 : appel au modèle LLM rapide (fast cascade) pour générer le contenu markdown structuré avec titres, sections et bullets. Étape 3 : conversion du markdown via pandoc vers le format $type cible. Étape 4 : sauvegarde du fichier dans /generated/ avec timestamp unique et retour de l'URL téléchargeable. Temps estimé : 400-1500ms selon la complexité. Engine : pandoc " . ($type === "pdf" ? "+ wkhtmltopdf" : "") . "."; +} +elseif (preg_match("/g[eéèê]n[eéèê]re?.*(sch[eéèê]ma|mermaid|diagramme|flowchart)/iu", $q)) { + $thinking = "Demande de diagramme Mermaid détectée. Étape 1 : extraction du sujet du flowchart. Étape 2 : appel LLM avec system prompt strict exigeant syntaxe Mermaid valide (flowchart TD + nodes A[Label] --> B[Label]). Étape 3 : validation regex de la sortie, ajout du header si manquant. Étape 4 : encapsulation en code block mermaid pour rendu inline par le renderer mermaid 10.9.0 de l'interface."; +} +elseif (preg_match("/g[eéèê]n[eéèê]re?.*image/iu", $q)) { + $thinking = "Demande d'image SVG. Étape 1 : extraction du sujet de l'image. Étape 2 : appel LLM avec system prompt exigeant du SVG valide 400x300, formes géométriques colorées. Étape 3 : nettoyage (strip backticks markdown). Étape 4 : sauvegarde .svg dans /generated/ et retour URL + aperçu inline. Note : S204 ne dispose pas de Stable Diffusion local, donc génération via LLM textuel structuré."; +} +elseif (preg_match("/(?:ecris?|[eéèê]cri).*code/iu", $q)) { + $thinking = "Demande de génération de code. Étape 1 : détection du langage cible (python, javascript, react/jsx, typescript, php, html, bash, sql) via mots-clés dans le topic. Étape 2 : extraction du sujet métier. Étape 3 : appel LLM avec system prompt demandant code PUR sans preambule ni backticks. Étape 4 : sauvegarde dans /generated/ avec extension correcte. Étape 5 : retour inline avec code block pour rendu syntax-highlighted."; +} +elseif (preg_match("/traduis?|traduire?|translate/iu", $q)) { + $thinking = "Demande de traduction. Étape 1 : détection de la langue cible (anglais, espagnol, allemand, italien, portugais, arabe, chinois, japonais, français). Étape 2 : extraction du texte à traduire. Étape 3 : appel LLM avec prompt 'translate only, no explanation'. Étape 4 : retour du texte traduit aux côtés de l'original pour comparaison."; +} +elseif (preg_match("/\b(bilan|status|[eéèê]tat|rapport|audit|diagnostic)\b/iu", $q)) { + $thinking = "Demande de bilan système. Stratégie multi-agent : activation du V103 Natural Multi-Agent Router qui orchestre en parallèle jusqu'à 14 agents (sovereign, nonreg, ethica, git, vault, docker, crons, registry, pages, scraper, ollama, resolver, arena, blade). Chaque agent rapporte son état. Synthèse finale consolidée par le LLM avec structure exécutive : état général, performance, sécurité, développement, problèmes, actions."; +} +elseif (preg_match("/\b(qui|what|whoa?|quoi|comment|pourquoi|quand)\b/iu", $q)) { + $thinking = "Question informative détectée. Stratégie : consultation de la base de connaissances WEVIA (Qdrant vector store, 19 collections, 17327 points), recherche sémantique sur le sujet, puis appel LLM souverain pour formuler la réponse contextualisée en français professionnel. Si le sujet est hors KB, fallback sur la connaissance générale du modèle."; +} +else { + // Generic - try LLM for thinking + $sys_think = "You are the internal reasoning engine. Given the user query, output a SHORT reasoning chain (3-5 sentences max) explaining what you will do, in French. No preamble, no quotes, just the reasoning."; + $raw = @file_get_contents("http://127.0.0.1:4000/v1/chat/completions", false, stream_context_create([ + "http" => [ + "method" => "POST", + "header" => "Content-Type: application/json\r\n", + "content" => json_encode([ + "model" => "fast", + "messages" => [ + ["role"=>"system","content"=>$sys_think], + ["role"=>"user","content"=>"Requête : $q"], + ], + "max_tokens" => 300, + "temperature" => 0.4, + ]), + "timeout" => 12, + ], + ])); + $llm = @json_decode($raw, true); + $thinking = $llm["choices"][0]["message"]["content"] ?? "Analyse de la demande, identification du contexte WEVIA approprié, préparation de la réponse structurée."; +} + +echo json_encode([ + "thinking" => trim($thinking), + "source" => "ambre-thinking-v1", + "ts" => date("c"), +], JSON_UNESCAPED_UNICODE); diff --git a/api/blade-actions-surfaced.json b/api/blade-actions-surfaced.json index 7b23074a8..7a2c569de 100644 --- a/api/blade-actions-surfaced.json +++ b/api/blade-actions-surfaced.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-04-21T15:50:02.021263", + "generated_at": "2026-04-21T15:55:01.779634", "stats": { "total": 48, "pending": 31, diff --git a/api/em-kpi-cache.json b/api/em-kpi-cache.json index e69de29bb..3d8dac3d1 100644 --- a/api/em-kpi-cache.json +++ b/api/em-kpi-cache.json @@ -0,0 +1,281 @@ +{ + "ts": "2026-04-21T13:55:01+00:00", + "server": "s204", + "s204": { + "load": 0.9, + "uptime": "2026-04-14 11:51:24", + "ram_total_mb": 31335, + "ram_used_mb": 11594, + "ram_free_mb": 19740, + "disk_total": "150G", + "disk_used": "117G", + "disk_free": "27G", + "disk_pct": "82%", + "fpm_workers": 140, + "docker_containers": 19, + "cpu_cores": 8 + }, + "s95": { + "load": 0.9, + "disk_pct": "81%", + "status": "UP", + "ram_total_mb": 15610, + "ram_free_mb": 12027 + }, + "pmta": [ + { + "name": "SER6", + "ip": "110.239.84.121", + "status": "DOWN" + }, + { + "name": "SER7", + "ip": "110.239.65.64", + "status": "DOWN" + }, + { + "name": "SER8", + "ip": "182.160.55.107", + "status": "DOWN" + }, + { + "name": "SER9", + "ip": "110.239.86.68", + "status": "DOWN" + } + ], + "assets": { + "html_pages": 315, + "php_apis": 803, + "wiki_entries": 1988, + "vault_doctrines": 74, + "vault_sessions": 104, + "vault_decisions": 12 + }, + "tools": { + "total": 627, + "registry_version": "?" + }, + "sovereign": { + "status": "UP", + "providers": [ + "Cerebras-fast", + "Cerebras-think", + "Groq", + "Cloudflare-AI", + "Gemini", + "SambaNova", + "NVIDIA-NIM", + "Mistral", + "Groq-OSS", + "HF-Space", + "HF-Router", + "OpenRouter", + "GitHub-Models" + ], + "active": 13, + "total": 13, + "primary": "Cerebras-fast", + "cost": "0€" + }, + "ethica": { + "total_hcps": 161733, + "with_email": 110609, + "with_phone": 155151, + "gap_email": 51124, + "pct_email": 68.4, + "pct_phone": 95.9, + "by_country": [ + { + "country": "DZ", + "hcps": 122337, + "with_email": 78506, + "with_tel": 119396, + "pct_email": 64.2, + "pct_tel": 97.6 + }, + { + "country": "MA", + "hcps": 19723, + "with_email": 15077, + "with_tel": 18737, + "pct_email": 76.4, + "pct_tel": 95 + }, + { + "country": "TN", + "hcps": 17794, + "with_email": 15147, + "with_tel": 17018, + "pct_email": 85.1, + "pct_tel": 95.6 + }, + { + "country": "INTL", + "hcps": 1879, + "with_email": 1879, + "with_tel": 0, + "pct_email": 100, + "pct_tel": 0 + } + ] + }, + "docker": [ + { + "name": "loki", + "status": "Up 5 days", + "ports": "" + }, + { + "name": "listmonk", + "status": "Up 5 days", + "ports": "" + }, + { + "name": "plausible-plausible-1", + "status": "Up 3 days", + "ports": "" + }, + { + "name": "plausible-plausible-db-1", + "status": "Up 3 days", + "ports": "" + }, + { + "name": "plausible-plausible-events-db-1", + "status": "Up 3 days", + "ports": "" + }, + { + "name": "n8n-docker-n8n-1", + "status": "Up 5 days", + "ports": "" + }, + { + "name": "mattermost-docker-mm-db-1", + "status": "Up 5 days", + "ports": "" + }, + { + "name": "mattermost-docker-mattermost-1", + "status": "Up 5 days (healthy)", + "ports": "" + }, + { + "name": "twenty", + "status": "Up 5 days", + "ports": "" + }, + { + "name": "twenty-redis", + "status": "Up 5 days", + "ports": "" + }, + { + "name": "langfuse", + "status": "Up 5 days", + "ports": "" + }, + { + "name": "redis-weval", + "status": "Up 7 days", + "ports": "" + }, + { + "name": "gitea", + "status": "Up 7 days", + "ports": "" + }, + { + "name": "node-exporter", + "status": "Up 7 days", + "ports": "" + }, + { + "name": "prometheus", + "status": "Up 7 days", + "ports": "" + }, + { + "name": "searxng", + "status": "Up 7 days", + "ports": "" + }, + { + "name": "uptime-kuma", + "status": "Up 38 hours (healthy)", + "ports": "" + }, + { + "name": "vaultwarden", + "status": "Up 7 days (healthy)", + "ports": "" + }, + { + "name": "qdrant", + "status": "Up 7 days", + "ports": "" + } + ], + "crons": { + "active": 35 + }, + "git": { + "head": "b3889d7f2 auto-sync-1555", + "dirty": 1, + "status": "DIRTY" + }, + "nonreg": { + "total": 153, + "passed": 153, + "score": "100%" + }, + "services": [ + { + "name": "DeerFlow", + "port": 3002, + "status": "UP" + }, + { + "name": "DeerFlow API", + "port": 8001, + "status": "UP" + }, + { + "name": "Qdrant", + "port": 6333, + "status": "UP" + }, + { + "name": "Ollama", + "port": 11434, + "status": "UP" + }, + { + "name": "Redis", + "port": 6379, + "status": "UP" + }, + { + "name": "Sovereign", + "port": 4000, + "status": "UP" + }, + { + "name": "SearXNG", + "port": 8080, + "status": "UP" + } + ], + "whisper": { + "binary": "COMPILED", + "model": "142MB" + }, + "grand_total": 3826, + "health": { + "score": 5, + "max": 6, + "pct": 83 + }, + "elapsed_ms": 10122 +} \ No newline at end of file diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json index 5fe2a4ac5..95aed8192 100644 --- a/api/v83-business-kpi-latest.json +++ b/api/v83-business-kpi-latest.json @@ -1,7 +1,7 @@ { "ok": true, "version": "V83-business-kpi", - "ts": "2026-04-21T13:54:03+00:00", + "ts": "2026-04-21T13:59:43+00:00", "summary": { "total_categories": 8, "total_kpis": 64, diff --git a/generated/wevia-strategie-Q3-20260421-135939-70370d.md b/generated/wevia-strategie-Q3-20260421-135939-70370d.md new file mode 100644 index 000000000..a3ab70395 --- /dev/null +++ b/generated/wevia-strategie-Q3-20260421-135939-70370d.md @@ -0,0 +1,39 @@ +# strategie Q3 + +# Stratégie Q3 + +## Présentation + +La troisième trimestre (Q3) est une période critique pour les entreprises, marquée par des objectifs à atteindre et des défis à relever. Dans ce document, nous présentons notre stratégie pour Q3, qui vise à atteindre nos objectifs de croissance et de développement. + +## Objectifs Q3 + +* **Augmentation des ventes** : 15% par rapport au Q2 +* **Développement de nouveaux produits** : lancement de 2 nouveaux produits dans le marché +* **Amélioration de la satisfaction client** : 90% de satisfaction client au Q3 + +## Stratégie Marketing + +* **Campagnes publicitaires** : lancement de 2 campagnes publicitaires ciblées pour atteindre les objectifs de vente +* **Contenu de qualité** : création de contenu de qualité pour attirer et fidéliser les clients +* **Réseaux sociaux** : augmentation de la présence sur les réseaux sociaux pour améliorer la visibilité et la communication avec les clients + +## Stratégie Commerciale + +* **Prix compétitifs** : mise en place de prix compétitifs pour attirer les clients +* **Promotions et offres** : mise en place de promotions et offres pour fidéliser les clients +* **Partenariats** : conclusion de partenariats avec des entreprises pour améliorer la gamme de produits et services + +## Stratégie Opérationnelle + +* **Amélioration de l'efficacité** : mise en place de processus plus efficaces pour améliorer la productivité +* **Réduction des coûts** : mise en place de mesures pour réduire les coûts sans affecter la qualité des produits +* **Investissement dans la formation** : investissement dans la formation des employés pour améliorer leurs compétences + +## Suivi et Évaluation + +* **Rapports réguliers** : présentation de rapports réguliers pour suivre les progrès et les résultats +* **Révisions et ajustements** : mise en place de révisions et ajustements pour s'assurer que la stratégie est sur la bonne voie +* **Récompenses et sanctions** : mise en place de récompenses et sanctions pour inciter les employés à atteindre les objectifs + +En suivant cette stratégie, nous sommes convaincus que nous pourrons atteindre nos objectifs de croissance et de développement pour Q3. Nous nous engageons à travailler dur pour atteindre ces objectifs et à améliorer notre performance continue. \ No newline at end of file diff --git a/generated/wevia-strategie-Q3-20260421-135939-70370d.pdf b/generated/wevia-strategie-Q3-20260421-135939-70370d.pdf new file mode 100644 index 0000000000000000000000000000000000000000..da5fd84f977592561fed5b16832a612f3ff00053 GIT binary patch literal 24361 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 literal 0 HcmV?d00001 diff --git a/generated/wevia-tuto-20260421-135942-e0b9f9.docx b/generated/wevia-tuto-20260421-135942-e0b9f9.docx new file mode 100644 index 0000000000000000000000000000000000000000..8d34b5d0d65b715f9cd7673f913a9956e6adc958 GIT binary patch literal 12142 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' + (data.provider||'').substring(0,20) + ''); + if(data.intent) badges.push('' + data.intent + ''); + badges.push('⚡ Gen'); + if(badges.length > 0 && msgEl && msgEl.querySelector('.msg-inner')) { + var badgeEl = document.createElement('div'); + badgeEl.className = 'nx-badges'; + badgeEl.innerHTML = badges.join(''); + msgEl.querySelector('.msg-inner').appendChild(badgeEl); + } + // Detect code/artifact blocks in response + var codeMatch = response.match(/```(\w+)?\n([\s\S]*?)```/); + if (codeMatch && window._artifactCode !== undefined) { + window._artifactCode = codeMatch[2]; + } + setTimeout(function(){ if(typeof generateFollowups==='function') generateFollowups(window._lastQuery, response); }, 500); + }) + .catch(function(err) { + hideThinking(); + addMsg('assistant', '❌ Erreur generation: ' + err.message, '0'); + }); + return; + } + // === END AMBRE-V2-GEN-ROUTER === + // Fast mode: direct to fast endpoint (2s response) if (effectiveMode === 'fast' && !pendingFile) { fetch('/api/sovereign/v1/chat/completions', {