Photographies
Un souvenir peut porter une image. Le moteur indexe l'image : une requête textuelle dans n'importe quelle langue y correspond donc même lorsque l'enregistrement n'a ni légende, ni titre, ni texte alternatif.
En stocker une
Passez un objet image à l'appel add ordinaire. content peut être vide ; l’image est alors trouvable par recherche à elle seule.
mem.add("at the beach", image={"data": b64}) # caption + image
mem.add("", image={"data": b64}) # the image IS the memorydata est obligatoire. Un préfixe data:image/jpeg;base64, et les retours à la ligne ajoutés par base64 et openssl sont supprimés automatiquement.
| Champ | Ce qu'il fait |
|---|---|
| data | Base64 de l'image. Obligatoire. Le plafond de taille est un réglage serveur, pas une constante du SDK : /health le publie sous memory.images.max_bytes. |
| reference | L'emplacement de votre propre copie de l'original. Stocké sous forme de chaîne et jamais récupéré par nos soins - et c'est bien sa place, puisque ce que nous conservons est réduit. |
| taken_at | RFC3339, généralement issu de l'EXIF. Renseigne event_date lorsque ce champ est vide, de sorte que le souvenir est trié selon la date de prise de vue et non selon la date d'envoi. |
En trouver une
Il n'existe pas de recherche de images distincte. search et recall renvoient les images avec le texte, classés ensemble.
Manipuler celles que vous avez
data, mime = mem.get_image(memory_id=mid)
page = mem.list_images(limit=50) # page["count"] = store total
mem.forget_image(memory_id=mid, preview=True)| Appel | Ce qu'il fait |
|---|---|
| get_image | L'image que nous conservons, sous la forme (bytes, content_type) - pas nécessairement celle que vous avez envoyée. Une image dont le grand côté dépassait 1 568 px a été stockée réduite et réencodée en WebP sauf s'il s'agissait d'un JPEG : un PNG revient donc en image/webp. Le type est déduit des octets, pas du nom donné au fichier envoyé ; nommez le fichier d'après content_type. Un souvenir sans image lève une erreur au lieu de renvoyer un contenu vide. |
| list_images | Une page, du plus récent au plus ancien, plus count - le total du store, pas la taille de la page. La pagination se fait par curseur : renvoyez next_before et next_skip_ids. Les deux sont nécessaires car plusieurs images peuvent partager un même horodatage. |
| forget_image | Supprime l’image et conserve le texte. Une image stockée sans légende est le souvenir : dans ce cas, le souvenir est supprimé lui aussi. |
Passez preview=True à forget_image pour obtenir memory_kept sans rien modifier. iter_images gère la pagination à votre place.
Ce que coûte une image
Une image est facturée en jetons, la même unité que le texte. Jetons = surface en pixels / 556,7. Au-delà de 1 568 px sur le côté long, le décompte se fait à 1 568 px : une image de 2 500 px coûte donc autant qu’une de 1 568 px.
| Image | Compté à | Tokens |
|---|---|---|
| 700 × 700 | as sent | 881 |
| 1000 × 1000 | as sent | 1,797 |
| 1568 × 1568 | as sent | 4,417 |
| 1920 × 1080 | 1568 × 882 | 2,485 |
| 2500 × 1875 | 1568 × 1176 | 3,313 |
| 2500 × 2500 | 1568 × 1568 | 4,417 |
Plafond : 4 417 jetons par image. Nous réservons ce plafond sur votre solde avant l’appel et facturons ensuite la valeur mesurée, qui n’est jamais supérieure.
image/webp. Le JPEG reste du JPEG, et en dessous de 1 568 px les octets ne sont pas touchés. (Si le réencodage devait alourdir le fichier, nous gardons vos octets tels quels.) Les deux côtés doivent toujours mesurer ≥ 700 px et le grand côté ≤ 2 500 px, sinon l'appel est refusé avec un 400 : en dessous de 700 px un minimum forfaitaire s'applique, une image plus petite coûte donc autant à stocker, et au-delà de 2 500 px nous ne décodons pas le fichier du tout. Conservez votre propre copie, ou mettez son URL dans reference, s'il vous faut le fichier en pleine résolution.Combien en reviennent
Valeur par défaut 1, maximum 5 images par réponse. Cinq images représentent près de 20 000 tokens.
| Champ | Ce qu'il fait |
|---|---|
| max_images | 0 à 5. Nombre de images qu'une seule réponse peut porter. Valeur par défaut 1. 0 ne renvoie que le texte. Une valeur hors bornes est rejetée plutôt que ramenée dans les bornes. |