Spaces:
Configuration error
Configuration error
package e2e_test | |
import ( | |
"context" | |
"fmt" | |
"os" | |
"runtime" | |
"testing" | |
. "github.com/onsi/ginkgo/v2" | |
. "github.com/onsi/gomega" | |
"github.com/ory/dockertest/v3" | |
"github.com/ory/dockertest/v3/docker" | |
"github.com/sashabaranov/go-openai" | |
) | |
var pool *dockertest.Pool | |
var resource *dockertest.Resource | |
var client *openai.Client | |
var containerImage = os.Getenv("LOCALAI_IMAGE") | |
var containerImageTag = os.Getenv("LOCALAI_IMAGE_TAG") | |
var modelsDir = os.Getenv("LOCALAI_MODELS_DIR") | |
var apiPort = os.Getenv("LOCALAI_API_PORT") | |
var apiEndpoint = os.Getenv("LOCALAI_API_ENDPOINT") | |
var apiKey = os.Getenv("LOCALAI_API_KEY") | |
func TestLocalAI(t *testing.T) { | |
RegisterFailHandler(Fail) | |
RunSpecs(t, "LocalAI E2E test suite") | |
} | |
var _ = BeforeSuite(func() { | |
if apiPort == "" { | |
apiPort = "8080" | |
} | |
var defaultConfig openai.ClientConfig | |
if apiEndpoint == "" { | |
startDockerImage() | |
defaultConfig = openai.DefaultConfig(apiKey) | |
apiEndpoint = "http://localhost:" + apiPort + "/v1" // So that other tests can reference this value safely. | |
defaultConfig.BaseURL = apiEndpoint | |
} else { | |
fmt.Println("Default ", apiEndpoint) | |
defaultConfig = openai.DefaultConfig(apiKey) | |
defaultConfig.BaseURL = apiEndpoint | |
} | |
// Wait for API to be ready | |
client = openai.NewClientWithConfig(defaultConfig) | |
Eventually(func() error { | |
_, err := client.ListModels(context.TODO()) | |
return err | |
}, "20m").ShouldNot(HaveOccurred()) | |
}) | |
var _ = AfterSuite(func() { | |
if resource != nil { | |
Expect(pool.Purge(resource)).To(Succeed()) | |
} | |
//dat, err := os.ReadFile(resource.Container.LogPath) | |
//Expect(err).To(Not(HaveOccurred())) | |
//Expect(string(dat)).To(ContainSubstring("GRPC Service Ready")) | |
//fmt.Println(string(dat)) | |
}) | |
var _ = AfterEach(func() { | |
//Expect(dbClient.Clear()).To(Succeed()) | |
}) | |
func startDockerImage() { | |
p, err := dockertest.NewPool("") | |
Expect(err).To(Not(HaveOccurred())) | |
Expect(p.Client.Ping()).To(Succeed()) | |
pool = p | |
// get cwd | |
cwd, err := os.Getwd() | |
Expect(err).To(Not(HaveOccurred())) | |
md := cwd + "/models" | |
if modelsDir != "" { | |
md = modelsDir | |
} | |
proc := runtime.NumCPU() | |
options := &dockertest.RunOptions{ | |
Repository: containerImage, | |
Tag: containerImageTag, | |
// Cmd: []string{"server", "/data"}, | |
PortBindings: map[docker.Port][]docker.PortBinding{ | |
"8080/tcp": []docker.PortBinding{{HostPort: apiPort}}, | |
}, | |
Env: []string{"MODELS_PATH=/models", "DEBUG=true", "THREADS=" + fmt.Sprint(proc)}, | |
Mounts: []string{md + ":/models"}, | |
} | |
r, err := pool.RunWithOptions(options) | |
Expect(err).To(Not(HaveOccurred())) | |
resource = r | |
} | |