skabandclient: send model name on start of session
For #60
diff --git a/cmd/sketch/main.go b/cmd/sketch/main.go
index 23d6297..f709a3b 100644
--- a/cmd/sketch/main.go
+++ b/cmd/sketch/main.go
@@ -233,7 +233,7 @@
if err != nil {
return err
}
- pubKey, antURL, apiKey, err := skabandclient.Login(os.Stdout, privKey, flags.skabandAddr, flags.sessionID)
+ pubKey, antURL, apiKey, err := skabandclient.Login(os.Stdout, privKey, flags.skabandAddr, flags.sessionID, flags.modelName)
if err != nil {
return err
}
@@ -303,10 +303,13 @@
var apiKey, antURL, pubKey string
if flags.skabandAddr == "" {
- // Direct mode with Anthropic API key
- apiKey = os.Getenv("ANTHROPIC_API_KEY")
+ envName := "ANTHROPIC_API_KEY"
+ if flags.modelName == "gemini" {
+ envName = gem.GeminiAPIKeyEnv
+ }
+ apiKey = os.Getenv(envName)
if apiKey == "" {
- return fmt.Errorf("ANTHROPIC_API_KEY environment variable is not set")
+ return fmt.Errorf("%s environment variable is not set", envName)
}
} else {
// Connect to skaband
@@ -314,7 +317,7 @@
if err != nil {
return err
}
- pubKey, antURL, apiKey, err = skabandclient.Login(os.Stdout, privKey, flags.skabandAddr, flags.sessionID)
+ pubKey, antURL, apiKey, err = skabandclient.Login(os.Stdout, privKey, flags.skabandAddr, flags.sessionID, flags.modelName)
if err != nil {
return err
}
@@ -587,9 +590,8 @@
}
if modelName == "gemini" {
- apiKey = os.Getenv(gem.GeminiAPIKeyEnv)
if apiKey == "" {
- return nil, fmt.Errorf("missing API key for Gemini model, set %s environment variable", gem.GeminiAPIKeyEnv)
+ return nil, fmt.Errorf("missing %s", gem.GeminiAPIKeyEnv)
}
return &gem.Service{
HTTPC: client,
diff --git a/skabandclient/skabandclient.go b/skabandclient/skabandclient.go
index 39f6a45..cea4fbe 100644
--- a/skabandclient/skabandclient.go
+++ b/skabandclient/skabandclient.go
@@ -186,6 +186,9 @@
return nil, err
}
b, err := encodePrivateKey(privKey)
+ if err != nil {
+ return nil, err
+ }
if err := os.WriteFile(path, b, 0o600); err != nil {
return nil, err
}
@@ -200,7 +203,7 @@
return key, nil
}
-func Login(stdout io.Writer, privKey ed25519.PrivateKey, skabandAddr, sessionID string) (pubKey, apiURL, apiKey string, err error) {
+func Login(stdout io.Writer, privKey ed25519.PrivateKey, skabandAddr, sessionID, model string) (pubKey, apiURL, apiKey string, err error) {
sig := ed25519.Sign(privKey, []byte(sessionID))
req, err := http.NewRequest("POST", skabandAddr+"/authclient", nil)
@@ -211,6 +214,7 @@
req.Header.Set("Public-Key", pubKey)
req.Header.Set("Session-ID", sessionID)
req.Header.Set("Session-ID-Sig", hex.EncodeToString(sig))
+ req.Header.Set("X-Model", model)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return "", "", "", fmt.Errorf("skaband login: %w", err)