53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package aifallback
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"time"
|
|
|
|
"kb-editor/internal/staging"
|
|
)
|
|
|
|
func TestGenerateUsesStructuredChatAndStoresResult(t *testing.T) {
|
|
var got map[string]any
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Path != "/api/chat" {
|
|
t.Fatalf("path=%s", r.URL.Path)
|
|
}
|
|
if err := json.NewDecoder(r.Body).Decode(&got); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
w.Header().Set("Content-Type", "application/json")
|
|
_ = json.NewEncoder(w).Encode(map[string]any{
|
|
"message": map[string]any{"content": `{"title":"Fehler 0x1234","text":"Symptom","answer":"1. Prüfen","categories":["Windows"],"keywords":["0x1234"]}`},
|
|
"done": true,
|
|
})
|
|
}))
|
|
defer server.Close()
|
|
|
|
st, err := staging.New(t.TempDir())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
svc, err := New(Config{BaseURL: server.URL, Model: "test:latest", Timeout: time.Second, MaxConcurrent: 1, MinScore: 0.78}, st)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
result, err := svc.Generate(context.Background(), "0x1234 unbekannter Fehler")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got["stream"] != false || got["format"] == nil {
|
|
t.Fatalf("request did not ask for structured non-streaming output: %+v", got)
|
|
}
|
|
if result.Document["title"] != "Fehler 0x1234" || result.Document["auto_reply"] != false {
|
|
t.Fatalf("result=%+v", result)
|
|
}
|
|
if _, err := svc.GetStaging(result.Key); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|