mirror of
https://github.com/ollama/ollama.git
synced 2026-09-21 13:38:14 -05:00
78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/ollama/ollama/api"
|
|
"github.com/ollama/ollama/cmd/config"
|
|
"github.com/ollama/ollama/cmd/launch"
|
|
"github.com/ollama/ollama/cmd/tui"
|
|
"github.com/spf13/cobra"
|
|
"golang.org/x/term"
|
|
)
|
|
|
|
func runWelcome(ctx context.Context) error {
|
|
if !term.IsTerminal(int(os.Stdin.Fd())) || !term.IsTerminal(int(os.Stdout.Fd())) {
|
|
return nil
|
|
}
|
|
return ensureWelcome(func() error {
|
|
return tui.RunWelcome(tui.WelcomeOptions{
|
|
CheckAccount: func() tui.WelcomeAccount { return checkWelcomeAccount(ctx) },
|
|
OpenBrowser: launch.OpenBrowser,
|
|
IsCompleted: func() bool {
|
|
needed, err := config.NeedsWelcome()
|
|
return err == nil && !needed
|
|
},
|
|
})
|
|
})
|
|
}
|
|
|
|
func checkWelcomeAccount(ctx context.Context) tui.WelcomeAccount {
|
|
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
|
|
defer cancel()
|
|
cmd := &cobra.Command{}
|
|
cmd.SetContext(ctx)
|
|
if err := checkServerHeartbeat(cmd, nil); err != nil {
|
|
return tui.WelcomeAccount{Err: err}
|
|
}
|
|
client, err := api.ClientFromEnvironment()
|
|
if err != nil {
|
|
return tui.WelcomeAccount{Err: err}
|
|
}
|
|
if status, err := client.CloudStatusExperimental(ctx); err == nil && status.Cloud.Disabled {
|
|
return tui.WelcomeAccount{CloudDisabled: true}
|
|
}
|
|
user, err := client.Whoami(ctx)
|
|
if err != nil {
|
|
var authErr api.AuthorizationError
|
|
if errors.As(err, &authErr) && authErr.StatusCode == http.StatusUnauthorized && authErr.SigninURL != "" {
|
|
return tui.WelcomeAccount{SigninURL: authErr.SigninURL}
|
|
}
|
|
return tui.WelcomeAccount{Err: err}
|
|
}
|
|
if user != nil && strings.TrimSpace(user.Name) != "" {
|
|
return tui.WelcomeAccount{SignedIn: true}
|
|
}
|
|
return tui.WelcomeAccount{Err: fmt.Errorf("could not verify the Ollama account")}
|
|
}
|
|
|
|
func ensureWelcome(show func() error) error {
|
|
needed, err := config.NeedsWelcome()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !needed {
|
|
return nil
|
|
}
|
|
if err := show(); err != nil {
|
|
return err
|
|
}
|
|
return config.CompleteWelcome()
|
|
}
|