Files
my-ia/EXAMPLES.md
2026-03-31 13:10:44 +02:00

13 KiB

Exemples d'utilisation - AI Code Assistant

🔌 Intégrations API

1. Utiliser l'API depuis Python

import requests
import json

API_URL = "http://localhost:9001"

# Exemple 1: Chat simple
def ask_ai(question, model="qwen2.5-coder:7b"):
    response = requests.post(
        f"{API_URL}/chat",
        json={
            "messages": [{"role": "user", "content": question}],
            "model": model,
            "stream": False
        }
    )
    return response.json()["response"]

# Utilisation
result = ask_ai("Écris une fonction pour valider un email")
print(result)


# Exemple 2: Exécuter du code
def run_code(code, language="python"):
    response = requests.post(
        f"{API_URL}/execute",
        json={"code": code, "language": language}
    )
    result = response.json()
    
    if result["success"]:
        return result["stdout"]
    else:
        return f"Erreur: {result['stderr']}"

# Utilisation
code = """
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(10))
"""

output = run_code(code)
print(output)


# Exemple 3: Analyse de code
def analyze_code(code, language="python"):
    response = requests.post(
        f"{API_URL}/analyze-code",
        json={"code": code, "language": language}
    )
    return response.json()["analysis"]

# Utilisation
code_to_analyze = """
def divide(a, b):
    return a / b
"""

analysis = analyze_code(code_to_analyze)
print(analysis)

2. WebSocket en Python

import asyncio
import websockets
import json

async def chat_websocket():
    uri = "ws://localhost:9001/ws/chat"
    
    async with websockets.connect(uri) as websocket:
        # Envoyer un message
        message = {
            "message": "Explique les decorators Python",
            "model": "qwen2.5-coder:7b"
        }
        await websocket.send(json.dumps(message))
        
        # Recevoir la réponse en streaming
        full_response = ""
        while True:
            response = await websocket.recv()
            data = json.loads(response)
            
            if data["type"] == "stream":
                full_response += data["content"]
                print(data["content"], end="", flush=True)
            
            elif data["type"] == "done":
                print("\n\nRéponse complète reçue!")
                break
            
            elif data["type"] == "error":
                print(f"\nErreur: {data['content']}")
                break

# Exécuter
asyncio.run(chat_websocket())

3. Intégration JavaScript/Node.js

// chat.js - Utilisation depuis Node.js
const axios = require('axios');

const API_URL = 'http://localhost:9001';

// Chat simple
async function askAI(question, model = 'qwen2.5-coder:7b') {
    const response = await axios.post(`${API_URL}/chat`, {
        messages: [{ role: 'user', content: question }],
        model: model,
        stream: false
    });
    
    return response.data.response;
}

// Exécution de code
async function executeCode(code, language = 'python') {
    const response = await axios.post(`${API_URL}/execute`, {
        code: code,
        language: language
    });
    
    return response.data;
}

// Utilisation
(async () => {
    // Question à l'IA
    const answer = await askAI('Crée une fonction pour trier un array');
    console.log(answer);
    
    // Exécuter du code
    const result = await executeCode('print("Hello from AI!")');
    console.log(result.stdout);
})();

4. WebSocket depuis le navigateur

// Dans votre page HTML
const ws = new WebSocket('ws://localhost:9001/ws/chat');

ws.onopen = () => {
    console.log('Connecté au serveur');
    
    // Envoyer un message
    ws.send(JSON.stringify({
        message: 'Explique les promises en JavaScript',
        model: 'qwen2.5-coder:7b'
    }));
};

ws.onmessage = (event) => {
    const data = JSON.parse(event.data);
    
    if (data.type === 'stream') {
        // Afficher le contenu au fur et à mesure
        document.getElementById('response').innerHTML += data.content;
    } else if (data.type === 'done') {
        console.log('Réponse complète');
    } else if (data.type === 'error') {
        console.error('Erreur:', data.content);
    }
};

ws.onerror = (error) => {
    console.error('Erreur WebSocket:', error);
};

🛠️ Scripts utilitaires

Script de génération automatique de tests

#!/usr/bin/env python3
"""
Génère automatiquement des tests unitaires pour un fichier Python
"""

import requests
import sys
import os

API_URL = "http://localhost:9001"

def generate_tests(code_file):
    # Lire le code
    with open(code_file, 'r') as f:
        code = f.read()
    
    # Demander à l'IA de générer les tests
    prompt = f"""
Génère des tests unitaires complets avec pytest pour ce code:

```python
{code}

Inclus:

  • Tests pour tous les cas normaux

  • Tests pour les cas limites

  • Tests pour les erreurs attendues

  • Fixtures si nécessaire """

    response = requests.post( f"{API_URL}/chat", json={ "messages": [{"role": "user", "content": prompt}], "model": "code-expert", "stream": False } )

    tests = response.json()["response"]

    Sauvegarder les tests

    test_file = f"test_{os.path.basename(code_file)}"

    Extraire le code des blocs markdown

    import re code_blocks = re.findall(r'python\n(.*?)', tests, re.DOTALL)

    if code_blocks: with open(test_file, 'w') as f: f.write(code_blocks[0]) print(f" Tests générés: {test_file}") else: print(" Impossible d'extraire les tests") print(tests)

if name == "main": if len(sys.argv) != 2: print("Usage: python generate_tests.py <fichier.py>") sys.exit(1)

generate_tests(sys.argv[1])

### Script de revue de code automatique

```python
#!/usr/bin/env python3
"""
Effectue une revue de code automatique sur un fichier
"""

import requests
import sys
from pathlib import Path

API_URL = "http://localhost:9001"

def review_file(filepath):
    # Lire le fichier
    code = Path(filepath).read_text()
    language = filepath.split('.')[-1]
    
    # Analyser avec l'IA
    response = requests.post(
        f"{API_URL}/analyze-code",
        json={"code": code, "language": language}
    )
    
    analysis = response.json()["analysis"]
    
    # Afficher la revue
    print(f"\n{'='*60}")
    print(f"📝 Revue de code: {filepath}")
    print(f"{'='*60}\n")
    print(analysis)
    print(f"\n{'='*60}\n")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python code_review.py <fichier>")
        sys.exit(1)
    
    review_file(sys.argv[1])

Script de documentation automatique

#!/usr/bin/env python3
"""
Génère automatiquement de la documentation pour un fichier de code
"""

import requests
import sys

API_URL = "http://localhost:9001"

def generate_docs(code_file):
    with open(code_file, 'r') as f:
        code = f.read()
    
    prompt = f"""
Génère une documentation complète en français pour ce code:

```python
{code}

Inclus:

  • Description générale du module

  • Documentation de chaque fonction/classe

  • Exemples d'utilisation

  • Notes importantes

  • Format: docstrings Google style """

    response = requests.post( f"{API_URL}/chat", json={ "messages": [{"role": "user", "content": prompt}], "model": "code-expert", "stream": False } )

    docs = response.json()["response"]

    Sauvegarder

    doc_file = f"{code_file}.md" with open(doc_file, 'w') as f: f.write(f"# Documentation - {code_file}\n\n") f.write(docs)

    print(f" Documentation générée: {doc_file}")

if name == "main": if len(sys.argv) != 2: print("Usage: python generate_docs.py <fichier.py>") sys.exit(1)

generate_docs(sys.argv[1])

## 🔄 Intégration Git Hooks

### Pre-commit hook pour revue automatique

```bash
#!/bin/bash
# .git/hooks/pre-commit

# Revue automatique des fichiers Python modifiés

echo "🔍 Revue de code automatique..."

# Trouver les fichiers Python modifiés
PYTHON_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '\.py$')

if [ -z "$PYTHON_FILES" ]; then
    echo "Aucun fichier Python à vérifier"
    exit 0
fi

# Analyser chaque fichier
for file in $PYTHON_FILES; do
    echo "Analyse: $file"
    
    # Appeler l'API d'analyse
    CODE=$(cat "$file")
    ANALYSIS=$(curl -s -X POST http://localhost:9001/analyze-code \
        -H "Content-Type: application/json" \
        -d "{\"code\": $(echo "$CODE" | jq -Rs .), \"language\": \"python\"}" \
        | jq -r '.analysis')
    
    # Vérifier si des problèmes critiques sont détectés
    if echo "$ANALYSIS" | grep -qi "CRITIQUE\|ERREUR\|BUG"; then
        echo "⚠️  Problèmes détectés dans $file:"
        echo "$ANALYSIS"
        echo ""
        
        read -p "Voulez-vous continuer le commit ? (o/n) " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Oo]$ ]]; then
            exit 1
        fi
    fi
done

echo "✅ Revue terminée"
exit 0

🎯 Cas d'usage avancés

1. Assistant de refactoring

def refactor_code(code, instructions):
    prompt = f"""
Code actuel:
```python
{code}

Instructions de refactoring: {instructions}

Fournis le code refactoré en suivant les best practices. """

response = requests.post(
    f"{API_URL}/chat",
    json={
        "messages": [{"role": "user", "content": prompt}],
        "model": "code-expert",
        "stream": False
    }
)

return response.json()["response"]

Exemple

old_code = """ def calc(x, y, op): if op == '+': return x + y elif op == '-': return x - y elif op == '*': return x * y elif op == '/': return x / y """

refactored = refactor_code(old_code, "Utilise un dict avec des lambdas") print(refactored)


### 2. Générateur de migrations DB

```python
def generate_migration(old_schema, new_schema):
    prompt = f"""
Ancien schéma:
{old_schema}

Nouveau schéma:
{new_schema}

Génère une migration Alembic pour passer de l'ancien au nouveau schéma.
"""
    
    response = requests.post(
        f"{API_URL}/chat",
        json={
            "messages": [{"role": "user", "content": prompt}],
            "model": "code-expert",
            "stream": False
        }
    )
    
    return response.json()["response"]

3. Détection de code dupliqué

def find_duplicates(project_dir):
    import os
    
    files_content = {}
    
    # Lire tous les fichiers Python
    for root, dirs, files in os.walk(project_dir):
        for file in files:
            if file.endswith('.py'):
                filepath = os.path.join(root, file)
                with open(filepath, 'r') as f:
                    files_content[filepath] = f.read()
    
    # Demander à l'IA d'analyser
    prompt = f"""
Analyse ces fichiers et identifie le code dupliqué:

{json.dumps(files_content, indent=2)}

Liste:
1. Les blocs de code dupliqués
2. Les fonctions similaires qui pourraient être mutualisées
3. Des suggestions de refactoring
"""
    
    response = requests.post(
        f"{API_URL}/chat",
        json={
            "messages": [{"role": "user", "content": prompt}],
            "model": "code-expert",
            "stream": False
        }
    )
    
    return response.json()["response"]

📱 Intégration VS Code

Extension VS Code custom

// .vscode/tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "AI Code Review",
            "type": "shell",
            "command": "python",
            "args": [
                "${workspaceFolder}/scripts/code_review.py",
                "${file}"
            ],
            "presentation": {
                "reveal": "always",
                "panel": "new"
            }
        },
        {
            "label": "Generate Tests",
            "type": "shell",
            "command": "python",
            "args": [
                "${workspaceFolder}/scripts/generate_tests.py",
                "${file}"
            ]
        }
    ]
}

🔥 Performance Tips

Batch processing de fichiers

async def analyze_multiple_files(files):
    import aiohttp
    import asyncio
    
    async with aiohttp.ClientSession() as session:
        tasks = []
        
        for filepath in files:
            with open(filepath, 'r') as f:
                code = f.read()
            
            task = session.post(
                f"{API_URL}/analyze-code",
                json={"code": code, "language": "python"}
            )
            tasks.append(task)
        
        results = await asyncio.gather(*tasks)
        
        return [await r.json() for r in results]

# Utilisation
files = ['file1.py', 'file2.py', 'file3.py']
results = asyncio.run(analyze_multiple_files(files))

Bon coding avec votre assistant IA ! 🚀