Installation

Une seule commande. Aucune clé API. Aucun compte. Python 3.10+ requis.

terminal
pip install candy-ai

Fonctionne sur Windows, macOS et Linux. Candy se connecte automatiquement à l'API cedric-8EF — aucune configuration requise.


Premier appel

Un import, une ligne.

hello.py
from candy import Coding

print(Coding.ask("Écris une fonction Python qui inverse une chaîne"))

Pas de profil, pas de configuration — candy utilise le profil default automatiquement.


50 personnalités spécialisées

Chaque personnalité est optimisée pour son domaine. Importe celle dont tu as besoin.

personnalités.py
from candy import Math, Writing, Medicine, Law, Finance

print(Math.ask("Quelle est la dérivée de x³ + 2x ?"))
print(Writing.ask("Écris un email professionnel pour décliner une réunion"))
print(Medicine.ask("Quels sont les symptômes du diabète de type 2 ?"))
print(Law.ask("Différence entre droit civil et droit pénal ?"))
print(Finance.ask("Explique les intérêts composés avec un exemple"))

La liste complète des 50 personnalités est disponible sur la page d'accueil.


Système de profils

Les profils te permettent de contrôler la langue, le style, le ton, la longueur et bien plus.

profils.py
from candy import cfg, Coding, Math

cfg.A.lang        = "FR"
cfg.A.style       = "detailed"
cfg.A.tone        = "friendly"
cfg.A.expertise   = "beginner"
cfg.A.max_tokens  = 2000
cfg.A.temperature = 0.7
cfg.A.context     = "Réponds toujours avec des exemples concrets."

print(Coding.use("A").ask("Explique la récursivité"))
print(Math.use("A").ask("Résous ∫x²sin(x)dx"))

Paramètres disponibles

ParamètreTypeValeurs
langstrFR, EN, ES, DE, IT, PT, JA, ZH, AR, RU...
stylestrdetailed, concise, technical, casual, bullet, markdown
tonestrfriendly, professional, strict, encouraging, empathetic, dramatic
expertisestrbeginner, intermediate, expert
max_tokensintnombre de tokens max dans la réponse
temperaturefloat0.0 (précis) → 2.0 (très créatif)
contextstrinstruction système ajoutée à chaque appel
output_formatstrmarkdown, plain, json

Tu peux créer autant de profils nommés que tu veux : cfg.A, cfg.B, cfg.monprofil, etc. Le profil default est utilisé quand tu n'appelles pas .use().


Presets

14 profils prêts à l'emploi pour les cas d'usage courants.

presets.py
cfg.A = cfg.preset("coder")           # expert, markdown, 3000 tokens
cfg.B = cfg.preset("french_beginner") # FR, détaillé, encourageant
cfg.C = cfg.preset("creative")        # casual, temperature=1.1
cfg.D = cfg.preset("quick")           # concis, 120 tokens max
PresetLangueStyleTokens
french_beginnerFRdetailed · encouragingdefault
french_expertFRconcise · strict · expertdefault
english_beginnerENdetailed · encouragingdefault
english_expertENtechnical · strict · expertdefault
coderENmarkdown · expert3000
academicENmarkdown · expert2000
creativeENcasual · temp=1.11500
teacherENdetailed · encouraging2000
quickENconcise120
journalistENmarkdown2000
storytellerENcasual · temp=1.24096
analystENbullet · expert2000
coachENdetailed · encouraging1500
debugENmarkdown · expert3000

Streaming

Réponses token par token, comme ChatGPT. Idéal pour les apps web et les interfaces terminal.

streaming.py
from candy import Writing

# Méthode 1 — stream_print() affiche directement
Writing.stream_print("Raconte une histoire courte")

# Méthode 2 — itérer token par token
for token in Writing.stream("Raconte une histoire courte"):
    print(token, end="", flush=True)

Batch

Plusieurs prompts en un seul appel. Idéal pour traiter des listes de textes ou de questions.

batch.py
from candy import cfg, Summarizer

cfg.A.lang       = "FR"
cfg.A.max_tokens = 300
cfg.A.style      = "concise"

textes = ["Article 1...", "Article 2...", "Article 3..."]

resumes = Summarizer.use("A").batch(
    [f"Résume en 3 points :\n{t}" for t in textes]
)

for resume in resumes:
    print(resume)
    print("---")

Conversations multi-tours

Sessions avec mémoire du contexte. Sauvegarde JSON. Rechargement possible.

conversation.py
from candy import cfg, Tutor

cfg.s.lang      = "FR"
cfg.s.expertise = "beginner"
cfg.s.tone      = "encouraging"

session = Tutor.chat(profile="s")

print(session.say("Je veux apprendre Python. Par où commencer ?"))
print(session.say("Explique-moi les variables"))
print(session.say("Et les listes ?"))

session.save("session.json")
session.show_history()
session.clear()

Intégration web

candy s'intègre dans Flask, FastAPI et Django en quelques lignes.

Flask — API JSON + streaming SSE

app.py
from flask import Flask, request, jsonify, Response
from candy import cfg, Full

app = Flask(__name__)
cfg.web.lang = "FR"

@app.route("/ask", methods=["POST"])
def ask():
    question = request.get_json().get("question", "")
    return jsonify({"answer": Full.use("web").ask(question)})

@app.route("/stream", methods=["POST"])
def stream():
    question = request.get_json().get("question")
    def generate():
        for token in Full.use("web").stream(question):
            yield f"data: {token}\n\n"
    return Response(generate(), mimetype="text/event-stream")

if __name__ == "__main__":
    app.run(debug=True)

FastAPI

main.py
from fastapi import FastAPI
from pydantic import BaseModel
from candy import cfg, Full

app  = FastAPI()
cfg.web.lang = "FR"

class Query(BaseModel):
    question: str

@app.post("/ask")
def ask(query: Query):
    return {"answer": Full.use("web").ask(query.question)}

CLI & fichiers .cdy

candy est aussi une commande système. Les fichiers .cdy sont des scripts Python candy partageables et exécutables en une commande.

terminal
# Ouvrir la fenêtre Helper graphique
$ candy helper

# Exécuter un fichier .cdy
$ candy -- mon_script.cdy
mon_script.cdy
from candy import cfg, Coding

cfg.default.lang  = "FR"
cfg.default.style = "concise"

print(Coding.ask("C'est quoi un générateur Python ?"))

Helper — génération de code

Le Helper génère du code candy complet à partir d'une description ou d'un template.

helper.py
from candy import Helper

Helper.list()

code = Helper.write("chatbot", lang="FR", module="Full")
print(code)

Helper.run("livre", sujet="Napoléon", lang="FR")
Helper.run("traduction", texte="Bonjour", langues=["ES","DE","JA"])

Templates disponibles : livre, traduction, chatbot, pipeline, batch, resume, question.


Toutes les méthodes

MéthodeRetourDescription
.ask(prompt)strAppel simple, retourne la réponse complète
.use("profil")selfAttache un profil nommé à l'appel
.stream(prompt)generatorItère les tokens un par un
.stream_print(prompt)NoneAffiche les tokens directement dans le terminal
.batch(liste)list[str]Envoie plusieurs prompts en un appel
.chat(profile)SessionCrée une session multi-tours
session.say(msg)strEnvoie un message dans la session
session.save(path)NoneSauvegarde la session en JSON
session.load(path)NoneCharge une session depuis JSON
session.show_history()NoneAffiche l'historique de la conversation
session.clear()NoneRemet la session à zéro
cfg.A.reset()NoneRemet le profil A aux valeurs par défaut
ping()boolVérifie que l'API est accessible
is_online()boolAlias de ping()
Copié !