cmd/sketch, dockerimg: more gemini key plumbing
Next up: SKETCH_* env vars
For #60
diff --git a/dockerimg/dockerimg.go b/dockerimg/dockerimg.go
index 5e49392..611901a 100644
--- a/dockerimg/dockerimg.go
+++ b/dockerimg/dockerimg.go
@@ -39,11 +39,14 @@
// SkabandAddr is the address of the skaband service if available
SkabandAddr string
- // AntURL is the URL of the LLM service.
- AntURL string
+ // Model is the name of the LLM model to use.
+ Model string
- // AntAPIKey is the API key for LLM service.
- AntAPIKey string
+ // ModelURL is the URL of the LLM service.
+ ModelURL string
+
+ // ModelAPIKey is the API key for LLM service.
+ ModelAPIKey string
// Path is the local filesystem path to use
Path string
@@ -124,7 +127,7 @@
return err
}
- imgName, err := findOrBuildDockerImage(ctx, config.Path, gitRoot, config.AntURL, config.AntAPIKey, config.ForceRebuild, config.Verbose)
+ imgName, err := findOrBuildDockerImage(ctx, config.Path, gitRoot, config.Model, config.ModelURL, config.ModelAPIKey, config.ForceRebuild, config.Verbose)
if err != nil {
return err
}
@@ -427,7 +430,7 @@
"-i",
"--name", cntrName,
"-p", hostPort + ":80", // forward container port 80 to a host port
- "-e", "SKETCH_ANTHROPIC_API_KEY=" + config.AntAPIKey,
+ "-e", "SKETCH_ANTHROPIC_API_KEY=" + config.ModelAPIKey,
}
if !config.OneShot {
cmdArgs = append(cmdArgs, "-t")
@@ -436,8 +439,8 @@
for _, envVar := range getEnvForwardingFromGitConfig(ctx) {
cmdArgs = append(cmdArgs, "-e", envVar)
}
- if config.AntURL != "" {
- cmdArgs = append(cmdArgs, "-e", "SKETCH_ANT_URL="+config.AntURL)
+ if config.ModelURL != "" {
+ cmdArgs = append(cmdArgs, "-e", "SKETCH_ANT_URL="+config.ModelURL)
}
if config.SketchPubKey != "" {
cmdArgs = append(cmdArgs, "-e", "SKETCH_PUB_KEY="+config.SketchPubKey)
@@ -466,6 +469,9 @@
"-outside-working-dir="+config.OutsideWorkingDir,
"-open=false",
)
+ if config.Model != "" {
+ cmdArgs = append(cmdArgs, "-model="+config.Model)
+ }
if config.SkabandAddr != "" {
cmdArgs = append(cmdArgs, "-skaband-addr="+config.SkabandAddr)
}
@@ -613,7 +619,7 @@
return nil
}
-func findOrBuildDockerImage(ctx context.Context, cwd, gitRoot, antURL, antAPIKey string, forceRebuild, verbose bool) (imgName string, err error) {
+func findOrBuildDockerImage(ctx context.Context, cwd, gitRoot, model, modelURL, modelAPIKey string, forceRebuild, verbose bool) (imgName string, err error) {
h := sha256.Sum256([]byte(gitRoot))
imgName = "sketch-" + hex.EncodeToString(h[:6])
@@ -666,10 +672,19 @@
return imgName, nil
}
+ if model == "gemini" {
+ if strings.HasSuffix(modelURL, "/gemmsgs") {
+ // Horrible hack! Switch back to anthropic for container building.
+ modelURL = strings.Replace(modelURL, "/gemmsgs", "/antmsgs", 1)
+ } else {
+ return "", fmt.Errorf("building docker image with gemini model is not supported yet; start with -model=anthropic first then use gemini")
+ }
+ }
+
start := time.Now()
srv := &ant.Service{
- URL: antURL,
- APIKey: antAPIKey,
+ URL: modelURL,
+ APIKey: modelAPIKey,
HTTPC: http.DefaultClient,
}
dockerfile, err := createDockerfile(ctx, srv, initFiles, subPathWorkingDir)