Skip to content

Commit d5318a2

Browse files
committed
add client settings endpoint to the api
1 parent aba73e0 commit d5318a2

File tree

5 files changed

+57
-18
lines changed

5 files changed

+57
-18
lines changed

cmd/lk/agent.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,10 @@ func createAgent(ctx context.Context, cmd *cli.Command) error {
331331

332332
logger.Debugw("using existing agent toml")
333333
} else if !exists && !cmd.Bool("silent") {
334+
if cmd.String("name") == "" {
335+
return fmt.Errorf("name is required")
336+
}
337+
334338
var createFile bool
335339
form := huh.NewForm(
336340
huh.NewGroup(
@@ -472,7 +476,17 @@ func createAgent(ctx context.Context, cmd *cli.Command) error {
472476
return fmt.Errorf("dockerfile is required to create agent")
473477
}
474478

475-
err = agentfs.CreateDockerfile(workingDir)
479+
clientSettingsResponse, err := agentsClient.GetClientSettings(ctx, &lkproto.ClientSettingsRequest{})
480+
if err != nil {
481+
return err
482+
}
483+
484+
settingsMap := make(map[string]string)
485+
for _, setting := range clientSettingsResponse.Params {
486+
settingsMap[setting.Name] = setting.Value
487+
}
488+
489+
err = agentfs.CreateDockerfile(workingDir, settingsMap)
476490
if err != nil {
477491
return err
478492
}

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ require (
1414
github.com/go-logr/logr v1.4.2
1515
github.com/go-task/task/v3 v3.41.0
1616
github.com/joho/godotenv v1.5.1
17-
github.com/livekit/protocol v1.35.1-0.20250318183545-6398b13899ef
18-
github.com/livekit/server-sdk-go/v2 v2.5.1-0.20250318183233-08dd3a3be254
17+
github.com/livekit/protocol v1.35.1-0.20250318204333-4d4ff652a17d
18+
github.com/livekit/server-sdk-go/v2 v2.5.1-0.20250318212316-91c09b0802df
1919
github.com/moby/buildkit v0.20.1
2020
github.com/pion/rtcp v1.2.15
2121
github.com/pion/rtp v1.8.13

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,10 +262,14 @@ github.com/livekit/mediatransportutil v0.0.0-20250310153736-45596af895b6 h1:6Zht
262262
github.com/livekit/mediatransportutil v0.0.0-20250310153736-45596af895b6/go.mod h1:36s+wwmU3O40IAhE+MjBWP3W71QRiEE9SfooSBvtBqY=
263263
github.com/livekit/protocol v1.35.1-0.20250318183545-6398b13899ef h1:ode6TNcDsOMa4NriI2uaRsP636Ck4u6Qtw/kX34lcUE=
264264
github.com/livekit/protocol v1.35.1-0.20250318183545-6398b13899ef/go.mod h1:WrT/CYRxtMNOVUjnIPm5OjWtEkmreffTeE1PRZwlRg4=
265+
github.com/livekit/protocol v1.35.1-0.20250318204333-4d4ff652a17d h1:ZfNCLWTqbOhTGl/Hpm27KXo9emfXU+ZKHqV6PjG/2B8=
266+
github.com/livekit/protocol v1.35.1-0.20250318204333-4d4ff652a17d/go.mod h1:WrT/CYRxtMNOVUjnIPm5OjWtEkmreffTeE1PRZwlRg4=
265267
github.com/livekit/psrpc v0.6.1-0.20250205181828-a0beed2e4126 h1:fzuYpAQbCid7ySPpQWWePfQOWUrs8x6dJ0T3Wl07n+Y=
266268
github.com/livekit/psrpc v0.6.1-0.20250205181828-a0beed2e4126/go.mod h1:X5WtEZ7OnEs72Fi5/J+i0on3964F1aynQpCalcgMqRo=
267269
github.com/livekit/server-sdk-go/v2 v2.5.1-0.20250318183233-08dd3a3be254 h1:PZQRohKe3BgpCOW5o4OASJwcM57PevH9fzDdRiZWbrk=
268270
github.com/livekit/server-sdk-go/v2 v2.5.1-0.20250318183233-08dd3a3be254/go.mod h1:eowx46iqkpz5YmUak7iwAW6jgc9Id5oH9Yc5U4UMvl8=
271+
github.com/livekit/server-sdk-go/v2 v2.5.1-0.20250318212316-91c09b0802df h1:/hG3IEbDxn0hFiVFi6m9MytZ40ufj6U4X2bEy7iaZ0c=
272+
github.com/livekit/server-sdk-go/v2 v2.5.1-0.20250318212316-91c09b0802df/go.mod h1:vLpNwytvvqrRXroOz6EjRNXmuKeJaKfTHPZjLE7xw7s=
269273
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
270274
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
271275
github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg=

pkg/agentfs/docker.go

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,6 @@ import (
1515
"github.com/livekit/protocol/logger"
1616
)
1717

18-
const (
19-
pythonDockerfileURL = "https://raw.githubusercontent.com/livekit-examples/agent-deployment/refs/heads/main/python-agent-example-app/Dockerfile"
20-
pythonDockerIgnoreURL = "https://raw.githubusercontent.com/livekit-examples/agent-deployment/refs/heads/main/python-agent-example-app/.dockerignore"
21-
pythonEntrypoint = "main.py"
22-
nodeDockerfileURL = "https://raw.githubusercontent.com/livekit-examples/agent-deployment/refs/heads/main/node-agent-example-docker/Dockerfile"
23-
nodeDockerIgnoreURL = "https://raw.githubusercontent.com/livekit-examples/agent-deployment/refs/heads/main/node-agent-example-docker/.dockerignore"
24-
)
25-
2618
func FindDockerfile(dir string) (bool, error) {
2719
entries, err := os.ReadDir(dir)
2820
if err != nil {
@@ -37,7 +29,11 @@ func FindDockerfile(dir string) (bool, error) {
3729
return false, nil
3830
}
3931

40-
func CreateDockerfile(dir string) error {
32+
func CreateDockerfile(dir string, settingsMap map[string]string) error {
33+
if len(settingsMap) == 0 {
34+
return fmt.Errorf("unable to fetch client settings from server, please try again later")
35+
}
36+
4137
projectType := ""
4238
if isNode(dir) {
4339
projectType = "node"
@@ -52,27 +48,37 @@ func CreateDockerfile(dir string) error {
5248
var err error
5349
switch projectType {
5450
case "python":
55-
dockerfileContent, err = downloadFile(pythonDockerfileURL)
51+
err = validateSettingsMap(settingsMap, []string{"python_docker_file", "python_docker_ignore"})
5652
if err != nil {
5753
return err
5854
}
59-
dockerIgnoreContent, err = downloadFile(pythonDockerIgnoreURL)
55+
dockerfileContent, err = downloadFile(settingsMap["python_docker_file"])
56+
if err != nil {
57+
return err
58+
}
59+
60+
dockerIgnoreContent, err = downloadFile(settingsMap["python_docker_ignore"])
6061
if err != nil {
6162
return err
6263
}
6364
case "node":
64-
dockerfileContent, err = downloadFile(nodeDockerfileURL)
65+
err = validateSettingsMap(settingsMap, []string{"node_docker_file", "node_docker_ignore"})
6566
if err != nil {
6667
return err
6768
}
68-
dockerIgnoreContent, err = downloadFile(nodeDockerIgnoreURL)
69+
70+
dockerfileContent, err = downloadFile(settingsMap["node_docker_file"])
71+
if err != nil {
72+
return err
73+
}
74+
dockerIgnoreContent, err = downloadFile(settingsMap["node_docker_ignore"])
6975
if err != nil {
7076
return err
7177
}
7278
}
7379

7480
if projectType == "python" {
75-
dockerfileContent, err = validateEntrypoint(dir, dockerfileContent, projectType)
81+
dockerfileContent, err = validateEntrypoint(dir, dockerfileContent, projectType, settingsMap)
7682
if err != nil {
7783
return err
7884
}
@@ -110,7 +116,7 @@ func downloadFile(url string) ([]byte, error) {
110116
return data, nil
111117
}
112118

113-
func validateEntrypoint(dir string, dockerfileContent []byte, projectType string) ([]byte, error) {
119+
func validateEntrypoint(dir string, dockerfileContent []byte, projectType string, settingsMap map[string]string) ([]byte, error) {
114120
fileList := make(map[string]bool)
115121
entries, err := os.ReadDir(dir)
116122
if err != nil {
@@ -168,6 +174,12 @@ func validateEntrypoint(dir string, dockerfileContent []byte, projectType string
168174
return selected, nil
169175
}
170176

177+
err = validateSettingsMap(settingsMap, []string{"python_entrypoint"})
178+
if err != nil {
179+
return nil, err
180+
}
181+
182+
pythonEntrypoint := settingsMap["python_entrypoint"]
171183
newEntrypoint, err := valFile(pythonEntrypoint)
172184
if err != nil {
173185
return nil, err

pkg/agentfs/utils.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,12 @@ func ParseMem(mem string, suffix bool) (string, error) {
5050
}
5151
return fmt.Sprintf("%.2g", memGB), nil
5252
}
53+
54+
func validateSettingsMap(settingsMap map[string]string, keys []string) error {
55+
for _, key := range keys {
56+
if _, ok := settingsMap[key]; !ok {
57+
return fmt.Errorf("client setting %s is required, please try again later", key)
58+
}
59+
}
60+
return nil
61+
}

0 commit comments

Comments
 (0)