Metadata-Version: 2.4
Name: candy-ai
Version: 2.0.0
Summary: Client Python pour cedric-8EF — 50 personnalités IA, système de profils, zéro configuration.
License: MIT
Project-URL: Homepage, https://client.hubworld.net
Keywords: ai,cedric-8EF,candy,llm,chatbot,api
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: httpx>=0.27.0

# 🍬 candy-ai v2

**candy** est un client Python pour **cedric-8EF**, un moteur IA multi-personnalités.  
**Zéro configuration.** L'URL de l'API est récupérée automatiquement.  
**Système de profils** : configure chaque appel indépendamment avec des profils nommés.

---

## Installation

```bash
pip install candy-ai
```

---

## Démarrage immédiat

```python
from candy import Coding

print(Coding.ask("Write a quicksort in Python"))
```

Pas de clé API. Pas d'URL à configurer. Ça marche directement.

---

## Système de profils

En v2, tu peux définir des **profils nommés** — lettres, mots, n'importe quoi — avec leurs propres paramètres. Chaque profil est indépendant.

```python
import candy.config as cfg

# ── Profil A — réponses françaises, longues et détaillées
cfg.A.lang         = "FR"
cfg.A.max_tokens   = 2000
cfg.A.style        = "detailed"
cfg.A.tone         = "encouraging"
cfg.A.expertise    = "beginner"

# ── Profil B — réponses anglaises, courtes et techniques
cfg.B.lang         = "EN"
cfg.B.max_tokens   = 300
cfg.B.style        = "technical"
cfg.B.tone         = "strict"
cfg.B.expertise    = "expert"

# ── Profil "rapide" — ultra court
cfg.rapide.lang       = "FR"
cfg.rapide.max_tokens = 100
cfg.rapide.style      = "concise"

# ── Profil "cours" — style académique
cfg.cours.lang          = "FR"
cfg.cours.style         = "academic"
cfg.cours.output_format = "markdown"
cfg.cours.expertise     = "beginner"
cfg.cours.max_tokens    = 1500

# ── Profil default — utilisé quand on n'utilise pas .use()
cfg.default.lang  = "FR"
cfg.default.style = "concise"
```

```python
from candy import Coding, Math, Full, Tutor

# Sans profil → utilise "default"
print(Coding.ask("Explique les générateurs Python"))

# Avec profil A
print(Math.use("A").ask("Résous : ∫x²sin(x)dx"))

# Avec profil B
print(Coding.use("B").ask("Optimise cette fonction"))

# Avec profil nommé
print(Tutor.use("cours").ask("C'est quoi la récursion ?"))
print(Full.use("rapide").ask("Résume la Seconde Guerre mondiale"))
```

---

## Tous les paramètres disponibles par profil

### `lang` — Langue de réponse

```python
cfg.A.lang = "FR"  # défaut : "EN"
```

| Code | Langue      | Code | Langue      |
|------|-------------|------|-------------|
| `EN` | Anglais     | `ZH` | Chinois     |
| `FR` | Français    | `JA` | Japonais    |
| `ES` | Espagnol    | `AR` | Arabe       |
| `DE` | Allemand    | `RU` | Russe       |
| `IT` | Italien     | `KO` | Coréen      |
| `PT` | Portugais   | `HI` | Hindi       |
| `NL` | Néerlandais | `TR` | Turc        |
| `PL` | Polonais    | `SV` | Suédois     |
| `CS` | Tchèque     | `RO` | Roumain     |
| `VI` | Vietnamien  | `ID` | Indonésien  |

---

### `max_tokens` — Longueur de la réponse

```python
cfg.A.max_tokens = 1024  # défaut : 1024
```

| Valeur | Résultat attendu           |
|--------|----------------------------|
| `100`  | 1-2 phrases max            |
| `300`  | Quelques paragraphes       |
| `600`  | Réponse moyenne            |
| `1024` | Standard (défaut)          |
| `2000` | Long, très détaillé        |
| `4096` | Maximum, exhaustif         |

---

### `temperature` — Créativité

```python
cfg.A.temperature = 0.7  # défaut : 0.7
```

| Valeur | Comportement                        |
|--------|-------------------------------------|
| `0.0`  | Déterministe, factuel, répétable    |
| `0.3`  | Prudent                             |
| `0.7`  | Équilibré (recommandé)              |
| `1.0`  | Créatif, varié                      |
| `1.5`  | Très créatif, imprévisible          |

---

### `style` — Style de réponse

```python
cfg.A.style = "default"  # défaut
```

| Valeur        | Description                                 |
|---------------|---------------------------------------------|
| `"default"`   | Style naturel adapté à la personnalité      |
| `"concise"`   | Court et direct, sans blabla                |
| `"detailed"`  | Approfondi, avec nuances et exemples        |
| `"bullet"`    | Toujours en liste à puces                   |
| `"academic"`  | Formel et structuré                         |
| `"casual"`    | Ton décontracté et friendly                 |
| `"technical"` | Jargon technique, précision maximale        |
| `"eli5"`      | Explique comme à un enfant de 5 ans         |

---

### `tone` — Ton / attitude

```python
cfg.A.tone = "neutral"  # défaut
```

| Valeur           | Description                               |
|------------------|-------------------------------------------|
| `"neutral"`      | Objectif et équilibré                     |
| `"encouraging"`  | Positif et motivant                       |
| `"strict"`       | Direct, sans fioritures                   |
| `"humorous"`     | Avec une touche d'humour                  |
| `"empathetic"`   | Chaleureux et compréhensif                |
| `"socratic"`     | Guide par des questions                   |

---

### `output_format` — Format de sortie

```python
cfg.A.output_format = "text"  # défaut
```

| Valeur        | Description                                |
|---------------|--------------------------------------------|
| `"text"`      | Texte brut                                 |
| `"markdown"`  | Markdown (titres, listes, blocs de code)   |
| `"json"`      | JSON structuré                             |
| `"html"`      | HTML basique                               |

---

### `expertise` — Niveau de l'utilisateur

```python
cfg.A.expertise = "intermediate"  # défaut
```

| Valeur            | Description                              |
|-------------------|------------------------------------------|
| `"beginner"`      | Tout expliqué depuis zéro                |
| `"intermediate"`  | Connaissances de base supposées          |
| `"expert"`        | Va droit au but, pas d'explications      |

---

### Autres paramètres

```python
cfg.A.include_examples = True   # inclure des exemples (défaut : True)
cfg.A.safe_mode        = True   # refuser les sujets dangereux (défaut : True)
cfg.A.timeout          = 120    # timeout réseau en secondes (défaut : 120)
cfg.A.cache_url        = True   # mémoriser l'URL Cloudflare (défaut : True)
```

---

## Streaming

```python
import candy.config as cfg
cfg.A.lang  = "FR"
cfg.A.style = "casual"

from candy import Writing

for token in Writing.use("A").stream("Écris une courte histoire de pirates"):
    print(token, end="", flush=True)
```

---

## Contexte

```python
from candy import Analytic

data = """
Mois,Revenu
Jan,12000
Fév,15400
Mar,9800
"""

print(Analytic.use("A").ask("Quelle tendance vois-tu ?", context=data))
```

---

## Métadonnées et quota

```python
from candy import Coding

# Quota du profil default
print(Coding.quota())

# Quota d'un profil spécifique
print(Coding.use("A").quota())

# Réponse avec métadonnées
data = Coding.use("A").ask_with_meta("Hello ?")
print(data["response"])
print("Quota restant :", data["quota_remaining"])
```

---

## Voir les profils définis

```python
import candy.config as cfg

# Voir un profil
print(cfg.A)

# Lister tous les profils
from candy.config import list_profiles
print(list_profiles())  # ['default', 'A', 'B', 'rapide', ...]
```

---

## Les 50 personnalités

| Import | Domaine |
|--------|---------|
| `Math` | Mathématiques |
| `Coding` | Ingénierie logicielle |
| `Reflexion` | Pensée critique |
| `Analytic` | Analyse de données |
| `Full` | Toutes disciplines |
| `Science` | Sciences |
| `Writing` | Écriture |
| `History` | Histoire |
| `Law` | Droit |
| `Medicine` | Médecine |
| `Finance` | Finance |
| `Marketing` | Marketing |
| `Security` | Cybersécurité |
| `Design` | UI/UX Design |
| `Language` | Linguistique |
| `Psychology` | Psychologie |
| `Education` | Pédagogie |
| `Research` | Recherche |
| `Business` | Stratégie |
| `Productivity` | Productivité |
| `Cooking` | Cuisine |
| `Travel` | Voyages |
| `Music` | Musique |
| `Film` | Cinéma |
| `Sports` | Sports |
| `Philosophy` | Philosophie |
| `Environment` | Environnement |
| `Architecture` | Architecture |
| `Automotive` | Automobile |
| `Astronomy` | Astronomie |
| `Biology` | Biologie |
| `Chemistry` | Chimie |
| `Physics` | Physique |
| `Engineering` | Ingénierie |
| `Entrepreneur` | Entrepreneuriat |
| `Ethics` | Éthique |
| `Geopolitics` | Géopolitique |
| `Crypto` | Crypto / Blockchain |
| `AI` | Intelligence Artificielle |
| `DevOps` | DevOps / Cloud |
| `Database` | Bases de données |
| `GameDev` | Jeux vidéo |
| `Comic` | Humour |
| `Storyteller` | Narration |
| `Translator` | Traduction |
| `Summarizer` | Résumé |
| `Debugger` | Débogage |
| `Reviewer` | Revue de code |
| `Planner` | Planification |
| `Tutor` | Tutorat |

---

## Propulsé par cedric-8EF

candy se connecte automatiquement au moteur **cedric-8EF**.  
Quota : 500 requêtes/jour par défaut. Disponibilité dépend du moteur.

---

## Licence

MIT
