mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-03 09:11:59 +08:00
### What problem does this PR solve? - Replace embedding model `dimension` metadata with `max_dimension`. - Add optional `dimensions` metadata for models with fixed selectable output dimensions. - Include `max_dimension` and `dimensions` in model list responses. - Validate requested embedding dimensions before calling provider embedding APIs. - Forward SiliconFlow embedding dimensions with the correct `dimensions` request field. - Add unit coverage for embedding dimension validation rules.
71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package service
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
modelModule "ragflow/internal/entity/models"
|
|
)
|
|
|
|
func TestValidateEmbeddingDimension(t *testing.T) {
|
|
maxDimension := 2048
|
|
|
|
tests := []struct {
|
|
name string
|
|
model *modelModule.Model
|
|
requested int
|
|
wantErr string
|
|
}{
|
|
{
|
|
name: "allows unset requested dimension",
|
|
model: &modelModule.Model{MaxDimension: &maxDimension, Dimensions: []int{256, 512}},
|
|
requested: 0,
|
|
},
|
|
{
|
|
name: "allows missing model schema",
|
|
model: nil,
|
|
requested: 256,
|
|
},
|
|
{
|
|
name: "allows dimension listed in explicit options",
|
|
model: &modelModule.Model{Name: "embedding-3", MaxDimension: &maxDimension, Dimensions: []int{256, 512, 1024, 2048}},
|
|
requested: 1024,
|
|
},
|
|
{
|
|
name: "rejects dimension not listed in explicit options",
|
|
model: &modelModule.Model{Name: "embedding-3", MaxDimension: &maxDimension, Dimensions: []int{256, 512, 1024, 2048}},
|
|
requested: 1536,
|
|
wantErr: "supported dimensions",
|
|
},
|
|
{
|
|
name: "allows custom dimension within max dimension",
|
|
model: &modelModule.Model{Name: "flex-embedding", MaxDimension: &maxDimension},
|
|
requested: 1536,
|
|
},
|
|
{
|
|
name: "rejects custom dimension above max dimension",
|
|
model: &modelModule.Model{Name: "flex-embedding", MaxDimension: &maxDimension},
|
|
requested: 4096,
|
|
wantErr: "max dimension",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := validateEmbeddingDimension(tt.model, tt.requested)
|
|
if tt.wantErr == "" {
|
|
if err != nil {
|
|
t.Fatalf("validateEmbeddingDimension() error = %v", err)
|
|
}
|
|
return
|
|
}
|
|
if err == nil {
|
|
t.Fatalf("validateEmbeddingDimension() expected error containing %q", tt.wantErr)
|
|
}
|
|
if !strings.Contains(err.Error(), tt.wantErr) {
|
|
t.Fatalf("validateEmbeddingDimension() error = %v, want substring %q", err, tt.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|