daemon: drop worker models.json bind (host-path bind of container path was invalid; image bakes it)
This commit is contained in:
@@ -43,7 +43,6 @@ const (
|
|||||||
volumeSessions string = "lvmh-sessions"
|
volumeSessions string = "lvmh-sessions"
|
||||||
workspaceMount string = "/workspace"
|
workspaceMount string = "/workspace"
|
||||||
sessionsMount string = "/pi-sessions"
|
sessionsMount string = "/pi-sessions"
|
||||||
modelsMountTarget string = "/root/.pi/agent/models.json"
|
|
||||||
|
|
||||||
envWorkerDockerfile string = "LVMH_WORKER_DOCKERFILE"
|
envWorkerDockerfile string = "LVMH_WORKER_DOCKERFILE"
|
||||||
defaultDockerfile string = "/app/build/docker/worker.Dockerfile"
|
defaultDockerfile string = "/app/build/docker/worker.Dockerfile"
|
||||||
@@ -54,8 +53,6 @@ const (
|
|||||||
defaultContainerURL string = "ws://lvmh:8686/agent/ws"
|
defaultContainerURL string = "ws://lvmh:8686/agent/ws"
|
||||||
envContainerNetwork string = "LVMH_CONTAINER_NETWORK"
|
envContainerNetwork string = "LVMH_CONTAINER_NETWORK"
|
||||||
defaultNetwork string = "lvmh-net"
|
defaultNetwork string = "lvmh-net"
|
||||||
envWorkerModels string = "LVMH_WORKER_MODELS"
|
|
||||||
defaultWorkerModels string = "/app/build/docker/worker-models.json"
|
|
||||||
envProviderAPIKey string = "ZAI_RENAUD_API_KEY"
|
envProviderAPIKey string = "ZAI_RENAUD_API_KEY"
|
||||||
envLVMHSessionID string = "LVMH_SESSION_ID"
|
envLVMHSessionID string = "LVMH_SESSION_ID"
|
||||||
envLVMHAgent string = "LVMH_AGENT"
|
envLVMHAgent string = "LVMH_AGENT"
|
||||||
@@ -123,7 +120,6 @@ type Spawner struct {
|
|||||||
buildContext string
|
buildContext string
|
||||||
containerURL string
|
containerURL string
|
||||||
network string
|
network string
|
||||||
modelsPath string
|
|
||||||
|
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
jobs map[string]*SpawnJob // keyed by sessionId
|
jobs map[string]*SpawnJob // keyed by sessionId
|
||||||
@@ -146,7 +142,6 @@ func NewSpawner(store *Store, hub *Hub, baseURL string) (*Spawner, error) {
|
|||||||
buildContext: envOr(envWorkerContext, filepath.Dir(filepath.Dir(dockerfile))),
|
buildContext: envOr(envWorkerContext, filepath.Dir(filepath.Dir(dockerfile))),
|
||||||
containerURL: envOr(envContainerLVMHURL, defaultContainerURL),
|
containerURL: envOr(envContainerLVMHURL, defaultContainerURL),
|
||||||
network: envOr(envContainerNetwork, defaultNetwork),
|
network: envOr(envContainerNetwork, defaultNetwork),
|
||||||
modelsPath: envOr(envWorkerModels, defaultWorkerModels),
|
|
||||||
jobs: make(map[string]*SpawnJob),
|
jobs: make(map[string]*SpawnJob),
|
||||||
slugLocks: make(map[string]*sync.Mutex),
|
slugLocks: make(map[string]*sync.Mutex),
|
||||||
}, nil
|
}, nil
|
||||||
@@ -389,9 +384,6 @@ func (s *Spawner) createAndStart(ctx context.Context, repo, slug, sessionID stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
binds := []string{repoVolume + ":" + workspaceMount, volumeSessions + ":" + sessionsMount}
|
binds := []string{repoVolume + ":" + workspaceMount, volumeSessions + ":" + sessionsMount}
|
||||||
if _, err := os.Stat(s.modelsPath); err == nil {
|
|
||||||
binds = append(binds, s.modelsPath+":"+modelsMountTarget+":ro")
|
|
||||||
}
|
|
||||||
cfg := &container.Config{
|
cfg := &container.Config{
|
||||||
Image: imageRefWorker,
|
Image: imageRefWorker,
|
||||||
Env: []string{
|
Env: []string{
|
||||||
|
|||||||
@@ -322,7 +322,6 @@ func newTestSpawner(t *testing.T, f *fakeDocker) (*Spawner, *Store) {
|
|||||||
t.Setenv(envWorkerContext, buildCtx)
|
t.Setenv(envWorkerContext, buildCtx)
|
||||||
t.Setenv(envRepoDir, t.TempDir())
|
t.Setenv(envRepoDir, t.TempDir())
|
||||||
t.Setenv(envProviderAPIKey, "key-123")
|
t.Setenv(envProviderAPIKey, "key-123")
|
||||||
t.Setenv(envWorkerModels, "") // fall back to default path (absent) → no models bind
|
|
||||||
|
|
||||||
daemonToken = testToken
|
daemonToken = testToken
|
||||||
store := openTestStore(t)
|
store := openTestStore(t)
|
||||||
|
|||||||
@@ -276,36 +276,6 @@ func TestSpawnerCloneURLInjectsPAT(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSpawnerModelsBindWhenPresent(t *testing.T) {
|
|
||||||
useFakeGit(t, fakeGitModeOK)
|
|
||||||
f := newFakeDocker()
|
|
||||||
sp, _ := newTestSpawner(t, f)
|
|
||||||
models := filepath.Join(t.TempDir(), "models.json")
|
|
||||||
if err := os.WriteFile(models, []byte("{}"), 0o644); err != nil {
|
|
||||||
t.Fatalf("write models: %v", err)
|
|
||||||
}
|
|
||||||
sp.modelsPath = models
|
|
||||||
|
|
||||||
res, err := sp.Start(context.Background(), "group/project", "")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Start: %v", err)
|
|
||||||
}
|
|
||||||
waitJobState(t, sp, res.SessionID, stateRunning)
|
|
||||||
creates := f.createsByName("lvmh-agent-")
|
|
||||||
if len(creates) != 1 {
|
|
||||||
t.Fatalf("creates = %d", len(creates))
|
|
||||||
}
|
|
||||||
roFound := false
|
|
||||||
for _, b := range creates[0].HostConfig.Binds {
|
|
||||||
if b == models+":"+modelsMountTarget+":ro" {
|
|
||||||
roFound = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !roFound {
|
|
||||||
t.Fatalf("models read-only bind missing: %v", creates[0].HostConfig.Binds)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSpawnerRemoveSession(t *testing.T) {
|
func TestSpawnerRemoveSession(t *testing.T) {
|
||||||
useFakeGit(t, fakeGitModeOK)
|
useFakeGit(t, fakeGitModeOK)
|
||||||
f := newFakeDocker()
|
f := newFakeDocker()
|
||||||
|
|||||||
Reference in New Issue
Block a user