package kb_test import ( "context" "encoding/json" "net/http" "net/http/httptest" "testing" "chat-agent-system/internal/kb" ) func TestEmbedder_MockServer(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/v1/embeddings" { t.Errorf("unexpected path: %s", r.URL.Path) } var req struct { Model string `json:"model"` Input []string `json:"input"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } type item struct { Embedding []float32 `json:"embedding"` Index int `json:"index"` } var data []item for i := range req.Input { vec := make([]float32, kb.EmbeddingDim) vec[0] = float32(i + 1) data = append(data, item{ Embedding: vec, Index: i, }) } resp := map[string]any{"data": data} w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(resp) })) defer server.Close() embedder := kb.NewEmbedder(server.URL, "test-key", "bge-m3") vec, err := embedder.EmbedOne(context.Background(), "医用电气安全") if err != nil { t.Fatalf("EmbedOne failed: %v", err) } if len(vec) != kb.EmbeddingDim { t.Fatalf("expected dim %d, got %d", kb.EmbeddingDim, len(vec)) } if vec[0] != 1.0 { t.Fatalf("expected vec[0]=1.0, got %f", vec[0]) } }