Modifications:
- flask_app.py:
* Ajout de "docx" dans ALLOWED_EXTENSIONS
* Nouvelle fonction run_word_processing_job() avec:
- Gestion tempfile pour python-docx (besoin d'un path)
- Intégration du callback de progression SSE
- Nettoyage automatique du fichier temporaire
* Modification upload() route:
- Détection du type de fichier (PDF/Word)
- Routage vers le bon processeur (run_processing_job vs run_word_processing_job)
- Messages d'erreur adaptés pour PDF et Word
* Mise à jour des docstrings
- templates/upload.html:
* Titre: "Parser PDF/Word/Markdown" (au lieu de PDF/Markdown)
* Accept attribute: ".pdf,.docx,.md"
* Tooltips: Explique que Word n'a pas besoin d'OCR
* Pipeline de traitement: Section séparée pour PDF vs Word
* Labels mis à jour pour inclure Word
Fonctionnalités:
✅ Upload de fichiers .docx via interface web
✅ Traitement en arrière-plan avec SSE
✅ Pas d'OCR nécessaire pour Word (économie ~0.003€/page)
✅ Réutilisation complète des modules LLM existants
✅ Extraction directe via python-docx
✅ Construction TOC depuis styles Heading 1-9
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Backend:
- Nouveau dictionnaire global tts_jobs pour tracker les jobs TTS
- Fonction _generate_audio_background() pour génération en thread
- POST /chat/generate-audio: lance génération et retourne job_id
- GET /chat/audio-status/<job_id>: polling du statut
- GET /chat/download-audio/<job_id>: télécharge l'audio terminé
- États: pending → processing → completed/failed
Frontend:
- Fonction exportToAudio() asynchrone avec polling (1s)
- Spinner animé pendant génération ("Génération...")
- Téléchargement automatique quand prêt
- Restauration bouton en cas d'erreur
- Animation CSS @keyframes spin pour le spinner
Avantages:
- Flask reste responsive pendant génération TTS
- Navigation possible pendant génération audio
- Expérience utilisateur améliorée avec feedback visuel
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Nouvelle fonction _clean_markdown() pour supprimer le formatage markdown
- Supprime headers (#), bold (**), italic (*), code blocks (```)
- Supprime liens [text](url), citations (>), marqueurs de listes (-)
- Nettoie les espaces multiples pour un texte propre
- Évite la lecture à voix haute des caractères markdown
- Tests validés: tous les patterns markdown correctement nettoyés
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Header fixe positionné à côté du menu hamburger (80px de gauche)
- Suppression du sous-titre "Visualiseur de base Weaviate"
- Fix variable CSS: var(--color-bg-primary) → var(--color-bg-main)
- Ajustement hauteur chat: fenêtres RAG descendent jusqu'en bas
- Barres de conversation touchent le bas de l'écran
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Ajout de TTS>=0.22.0 aux dépendances
- Création du module utils/tts_generator.py avec Coqui XTTS v2
* Support GPU avec mixed precision (FP16)
* Lazy loading avec singleton pattern
* Chunking automatique pour textes longs
* Support multilingue (fr, en, es, de, etc.)
- Ajout de la route /chat/export-audio dans flask_app.py
- Ajout du bouton Audio dans chat.html (côté Word/PDF)
- Génération audio WAV téléchargeable depuis les réponses
Optimisé pour GPU 4070 (8GB VRAM) : utilise 4-6GB, génération rapide
Qualité : voix naturelle française avec prosodie expressive
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Ajout de python-docx et reportlab aux dépendances
- Création du module utils/word_exporter.py pour l'export Word
- Création du module utils/pdf_exporter.py pour l'export PDF
- Ajout des routes /chat/export-word et /chat/export-pdf dans flask_app.py
- Ajout des boutons d'export (Word et PDF) dans chat.html
- Les boutons apparaissent après chaque réponse de l'assistant
- Support des questions reformulées avec question originale
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
## Nouvelles fonctionnalités
### 1. Recherche RAG avec diversification par auteur (flask_app.py)
- Fonction `diverse_author_search()` : agrégation intelligente par auteur
- Résout le problème de biais corpus (auteurs prolifiques vs peu représentés)
- Allocation adaptative :
* 1 auteur → jusqu'à 25 chunks pour contexte riche
* 2-3 auteurs → distribution équitable (12 chunks/auteur)
* 4+ auteurs → limitation à 3 chunks/auteur pour diversité
- Pool initial de 200 chunks pour identifier tous les auteurs pertinents
### 2. Re-ranking LLM amélioré (flask_app.py)
- Prompt ultra-strict : force réponse sans markdown ni explications
- Parsing robuste : nettoie markdown (**texte**, __texte__)
- Fallback intelligent : garde tous les chunks si re-ranking trop strict (<50%)
- Logs détaillés des chunks exclus pour debugging
### 3. Interface utilisateur améliorée (chat.html)
- **Accordéon pour chunks RAG** : expansion/collapse avec chevron
- **Reformulation avec choix utilisateur** :
* Endpoint `/chat/reformulate` séparé
* Affichage côte-à-côte (originale vs reformulée)
* Boutons de sélection avant lancement RAG
* Badge "✓ Utilisée" sur version choisie
- **Layout full-width** : 60% conversation / 40% contexte RAG
- **Sidebar navigation** : menu hamburger avec overlay
### 4. Logs et debugging
- Logs détaillés à chaque étape du pipeline
- Affichage des auteurs trouvés et scores moyens
- Liste des chunks exclus par re-ranking avec extraits
## Améliorations techniques
- Reformulation expansive 4-6 lignes (concepts, filiations, contextes)
- Re-ranking avec minimum 8 chunks garantis
- Gestion des modèles GPT-5.x et o1 (max_completion_tokens)
- Prompts optimisés pour réponses longues (500-800 mots)
🤖 Generated with Claude Code (https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added comprehensive guide for accessing Weaviate on remote servers
(Synology NAS or VPS) from LLM applications.
Covers 4 deployment options:
1. API REST Custom (recommended for VPS/production)
2. VPN + Direct Access (recommended for Synology)
3. SSH Tunnel (dev/temporary)
4. MCP HTTP (not recommended)
Includes comparisons, code examples, and deployment recommendations.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added explicit rules requiring the assistant to always ask for confirmation
before creating/modifying files, executing commands, or making changes.
Changes:
- Added "Comportement de l'assistant" section at the top
- Defined required workflow: Analyze → Explain → Wait → Implement
- Listed exceptions for read-only operations
- Emphasizes "ask first" approach to prevent unwanted modifications
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Problem:
- Library RAG MCP server was failing to connect with timeout error
- Backend status showed "connected: false" with "MCP error -32001: Request timed out"
- Documents uploaded via upload_document tool were never processed
Root Cause:
- MISTRAL_API_KEY was commented out in .env file
- MCP server requires this key for OCR and LLM processing
- Without the key, the Python subprocess fails to start
- This caused connection timeout in the Node.js backend
Solution:
- Uncommented MISTRAL_API_KEY in .env (not committed, in .gitignore)
- Added LIBRARY_RAG_SETUP.md with complete setup guide
- Updated .claude/settings.local.json with bash permissions
Changes:
- Added LIBRARY_RAG_SETUP.md (setup documentation)
- Updated .claude/settings.local.json (auto-approved bash commands)
Verified:
- MCP server now connects successfully
- Status endpoint shows "connected: true"
- All 7 Library RAG tools available (upload_document, search_library, etc.)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Updated all references from 'my_project' to 'ikario_body':
- Renamed dockerize_my_project.py → dockerize_ikario_body.py
- Renamed docker-compose.my_project.yml → docker-compose.ikario_body.yml
- Updated Docker service names (ikario_body_frontend, ikario_body_server)
- Updated paths in .claude/settings.local.json
- Updated paths in README.md, navette.txt, patch_stats.py, project_progress.md
- Updated all volume mounts and working directories
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Major changes:
- Added current date/time to system prompt so Ikario always knows when it is
- Created comprehensive Tavily MCP integration spec (10 features)
- Updated .gitignore to exclude node_modules
Time Access Feature:
- Modified buildSystemPrompt in server/routes/messages.js
- Modified buildSystemPrompt in server/routes/claude.js
- Ikario now receives: date, time, ISO timestamp, timezone
- Added debug logging to verify system prompt
Tavily MCP Spec (app_spec_tavily_mcp.txt):
- Internet access via Tavily search API
- 10 detailed features with implementation steps
- Compatible with existing ikario-memory MCP
- Provides real-time web search and news search
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Documentation:
- MODIFICATIONS_BACKUP_SYSTEM.md: Complete documentation of the new backup system
- Problem analysis (old system truncated to 200 chars)
- New architecture using append_to_conversation
- ChromaDB structure (1 principal + N individual message docs)
- Coverage comparison (1.2% → 100% for long conversations)
- Migration guide and test procedures
Utility Scripts:
- test_backup_python.py: Direct Python test of backup system
- Bypasses Node.js MCP layer
- Tests append_to_conversation with complete messages
- Displays embedding coverage statistics
- fix_stats.mjs: JavaScript patch for getMemoryStats()
- patch_stats.py: Python patch for getMemoryStats() function
Key Documentation Sections:
- Old vs New system comparison table
- ChromaDB document structure explanation
- Step-by-step migration instructions
- Test procedures with expected outputs
- Troubleshooting guide
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Updated app_spec_ikario_rag_UI.txt to document new 8th MCP tool and thinking feature:
CHANGES:
- Updated from 7 to 8 MCP tools (added append_to_conversation)
- Added route: POST /api/memory/conversations/append
- Documented thinking field support for LLM reasoning capture
- Added appendToConversation() function in Memory Service Layer
- Updated Chat Integration with thinking examples
- Added tests for append_to_conversation with thinking
- Updated success criteria and constraints (8 tools)
KEY ADDITIONS:
- Format message with thinking documented
- Auto-create behavior explained
- Extended Thinking integration guidelines
- Distinction: add_conversation (complete) vs append_to_conversation (incremental)
8 sections modified with complete documentation.
Spec ready for issue creation.
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Created comprehensive spec for integrating Claude's Extended Thinking feature into
the my_project application. This spec follows the standard XML .txt format used
by the project's initializer agents.
Key features (15 total):
- Backend thinking parameter support in API routes
- SSE streaming for thinking_delta events
- Database storage for thinking_content and thinking_signature
- Conversation-level thinking settings (enable/disable + budget)
- Frontend ThinkingBlock component for collapsible display
- Settings panel integration (toggle + budget slider)
- Thinking badge in conversation list
- Token tracking and usage stats for thinking
- Tool use compatibility (thinking preservation)
- Error handling for thinking timeouts
- Complete user documentation
Technologies:
- Claude API thinking parameter: { type: "enabled", budget_tokens: 1024-200000 }
- Server-Sent Events (SSE) for streaming thinking deltas
- SQLite database extensions (2 new columns per table)
- React components with blue color scheme for thinking blocks
- @anthropic-ai/sdk already installed
Database changes:
- conversations: enable_thinking, thinking_budget_tokens
- messages: thinking_content, thinking_signature
Model support: Claude 4+ (Sonnet 4.5, Haiku 4.5, Opus 4.5/4.1/4, Sonnet 4)
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
New feature specification to add native Markdown (.md) file support:
- Skip OCR for .md files (0€ cost vs ~0.003€/page for PDF)
- Process Markdown directly through LLM pipeline
- Maintain full compatibility with existing PDF workflow
- Includes 10 features, 5 implementation steps, comprehensive tests
This will enable users to upload pre-digitized philosophical texts
in Markdown format without incurring OCR costs while still benefiting
from LLM-based metadata extraction, TOC generation, semantic chunking,
and Weaviate vectorization.
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Created comprehensive spec for integrating Ikario RAG MCP client into existing
Claude.ai Clone project. Features Tool Use API for autonomous memory management.
Key features (10 total):
- MCP client connection and wrapper services (backend)
- Memory API routes (/api/memory/*) (backend)
- Tool Use API integration with save_memory and search_memories tools (backend)
- Tool execution handler and enriched system prompt (backend)
- Manual save button in chat interface (frontend)
- Memory search panel in sidebar (frontend)
- Memory status indicator in header (frontend)
- Automatic conversation backup (backend)
Technologies:
- @modelcontextprotocol/sdk for MCP client
- Claude Tool Use API for autonomous memory operations
- ChromaDB via MCP for semantic search (managed by Ikario RAG server)
- Minimal SQLite changes (1 column addition)
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>