mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-21 22:18:13 +02:00
Repris d'AJEAN : recherche d'images, aperçu du navigateur, vignettes, liens d'images
- web_images (amont v0.17.7) : recherche d'images DuckDuckGo, pendant de web_search ; les images du web s'affichent dans le fil avec la loupe, sans Referer, et disparaissent si le site les refuse. Schéma minimal pour tenir le budget du préambule. - Aperçu en direct du navigateur piloté (cu_autoshot.go) : une capture après chaque action browser_* qui change la page, gardée en RAM, jamais envoyée au modèle, retirée du journal en fin de tour ; une carte dans le fil, en fondu. - Vignettes calculées par le serveur (?thumb=, amont v0.17.9) : ~560 px au lieu de l'original (7 Ko au lieu de 550 Ko sur une capture), chargées deux par deux avec un nouvel essai ; la loupe ouvre l'original. - Un lien vers une image ([graphique](graph.png)) l'affiche au lieu d'un bouton de téléchargement. - Chrome du computer use tué avec Loki sous Linux (Pdeathsig), même en cas d'arrêt brutal : plus de navigateur orphelin dans le conteneur. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
502f23e833
commit
5016396998
20 files changed
+759
-30
No files matched your search
@@ -0,0 +1,47 @@
|
||||
package loki
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"image"
|
||||
"image/color"
|
||||
"image/png"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestChatThumbReduitEtCache(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
p := filepath.Join(dir, "capture.png")
|
||||
src := image.NewNRGBA(image.Rect(0, 0, 2400, 1500))
|
||||
x := uint32(1)
|
||||
for i := range src.Pix { // bruit : se comprime comme une photo, pas comme un motif
|
||||
x ^= x << 13
|
||||
x ^= x >> 17
|
||||
x ^= x << 5
|
||||
src.Pix[i] = byte(x)
|
||||
}
|
||||
src.Set(0, 0, color.NRGBA{0, 0, 0, 0})
|
||||
var buf bytes.Buffer
|
||||
_ = png.Encode(&buf, src)
|
||||
_ = os.WriteFile(p, buf.Bytes(), 0o644)
|
||||
st, _ := os.Stat(p)
|
||||
data, mime, err := chatThumb(p, st, 560)
|
||||
if err != nil || mime != "image/jpeg" {
|
||||
t.Fatalf("vignette : %v %s", err, mime)
|
||||
}
|
||||
img, _, err := image.Decode(bytes.NewReader(data))
|
||||
if err != nil || img.Bounds().Dx() != 560 {
|
||||
t.Fatalf("taille inattendue : %v %v", err, img.Bounds())
|
||||
}
|
||||
if len(data) >= buf.Len() {
|
||||
t.Fatalf("vignette (%d o) pas plus légère que l'original (%d o)", len(data), buf.Len())
|
||||
}
|
||||
again, _, _ := chatThumb(p, st, 560)
|
||||
if &again[0] != &data[0] {
|
||||
t.Fatal("la 2e demande aurait dû venir du cache")
|
||||
}
|
||||
if _, _, err := chatThumb(filepath.Join(dir, "x.webp"), st, 560); err == nil {
|
||||
t.Fatal("un fichier illisible doit renvoyer une erreur (repli client sur l'original)")
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user