From 681dfaedcc632c22eb3e4b0c48e4ec906f171d26 Mon Sep 17 00:00:00 2001 From: Parth Sareen Date: Mon, 20 Jul 2026 11:25:31 -0700 Subject: [PATCH] cmd: remove standalone agent command (#17229) --- cmd/agent_tui.go | 137 ------------------------------------------ cmd/agent_tui_test.go | 18 ------ cmd/cmd.go | 11 ---- 3 files changed, 166 deletions(-) diff --git a/cmd/agent_tui.go b/cmd/agent_tui.go index 21fca90a4..447ecbeb2 100644 --- a/cmd/agent_tui.go +++ b/cmd/agent_tui.go @@ -28,7 +28,6 @@ import ( type agentTUIOptions struct { Model string - OpenModelPicker bool System string Format string Options map[string]any @@ -40,142 +39,6 @@ type agentTUIOptions struct { MultiModal bool } -func registerAgentFlags(cmd *cobra.Command) { - cmd.Flags().String("model", "", "Model to use") - cmd.Flags().String("keepalive", "", "Duration to keep a model loaded (e.g. 5m)") - cmd.Flags().String("format", "", "Response format (e.g. json)") - cmd.Flags().String("think", "", "Enable thinking mode: true/false or high/medium/low for supported models") - cmd.Flags().Lookup("think").NoOptDefVal = "true" - cmd.Flags().Bool("auto-approve-tools", false, "Allow agent tools to run without prompting") - cmd.Flags().Bool("yolo", false, "Alias for --auto-approve-tools") - cmd.Flags().Bool("no-tools", false, "Disable agent tools") -} - -func AgentHandler(cmd *cobra.Command, _ []string) error { - opts := agentTUIOptions{ - Model: strings.TrimSpace(config.LastModel()), - Options: map[string]any{}, - } - thinkExplicit, err := applyAgentFlags(cmd, &opts) - if err != nil { - return err - } - - if strings.TrimSpace(opts.Model) == "" { - opts.OpenModelPicker = true - } else if cmd.Flags().Lookup("model") == nil || !cmd.Flags().Lookup("model").Changed { - opts.OpenModelPicker = true - } - - client, err := api.ClientFromEnvironment() - if err != nil { - return err - } - - if opts.OpenModelPicker { - modelName, err := selectAgentModel(cmd.Context(), client, opts.Model) - if errors.Is(err, launch.ErrCancelled) { - return nil - } - if err != nil { - return err - } - opts.Model = modelName - opts.OpenModelPicker = false - } - - if strings.TrimSpace(opts.Model) != "" { - info, err := prepareAgentModel(cmd, client, &opts, thinkExplicit) - if err != nil { - if handleCloudAuthorizationError(err) { - return nil - } - return err - } - opts.System = info.System - if err := saveLastAgentModel(opts.Model); err != nil { - return err - } - } - - if err := GenerateAgentTUI(cmd, client, opts); err != nil { - if handleCloudAuthorizationError(err) { - return nil - } - return fmt.Errorf("error running agent: %w", err) - } - return nil -} - -func applyAgentFlags(cmd *cobra.Command, opts *agentTUIOptions) (bool, error) { - if flag := cmd.Flags().Lookup("model"); flag != nil && flag.Changed { - modelName, err := cmd.Flags().GetString("model") - if err != nil { - return false, err - } - modelName = strings.TrimSpace(modelName) - if modelName == "" { - return false, errors.New("--model cannot be empty") - } - opts.Model = modelName - opts.OpenModelPicker = false - } - - format, err := cmd.Flags().GetString("format") - if err != nil { - return false, err - } - opts.Format = format - - thinkExplicit := false - thinkFlag := cmd.Flags().Lookup("think") - if thinkFlag != nil && thinkFlag.Changed { - thinkExplicit = true - thinkStr, err := cmd.Flags().GetString("think") - if err != nil { - return false, err - } - switch thinkStr { - case "", "true": - opts.Think = &api.ThinkValue{Value: true} - case "false": - opts.Think = &api.ThinkValue{Value: false} - case "high", "medium", "low", "max": - opts.Think = &api.ThinkValue{Value: thinkStr} - default: - return false, fmt.Errorf("invalid value for --think: %q (must be true, false, high, medium, low, or max)", thinkStr) - } - } - - keepAlive, err := cmd.Flags().GetString("keepalive") - if err != nil { - return false, err - } - if keepAlive != "" { - d, err := time.ParseDuration(keepAlive) - if err != nil { - return false, err - } - opts.KeepAlive = &api.Duration{Duration: d} - } - - autoApprove, err := cmd.Flags().GetBool("auto-approve-tools") - if err != nil { - return false, err - } - yolo, err := cmd.Flags().GetBool("yolo") - if err != nil { - return false, err - } - opts.AllowAllTools = autoApprove || yolo - toolsDisabled, err := cmd.Flags().GetBool("no-tools") - if err != nil { - return false, err - } - opts.ToolsDisabled = toolsDisabled - return thinkExplicit, nil -} - func saveLastAgentModel(model string) error { model = strings.TrimSpace(model) if model == "" { diff --git a/cmd/agent_tui_test.go b/cmd/agent_tui_test.go index 78db64033..ad12fbd67 100644 --- a/cmd/agent_tui_test.go +++ b/cmd/agent_tui_test.go @@ -9,8 +9,6 @@ import ( "testing" "time" - "github.com/spf13/cobra" - coreagent "github.com/ollama/ollama/agent" agenttools "github.com/ollama/ollama/agent/tools" "github.com/ollama/ollama/api" @@ -168,19 +166,3 @@ func TestSaveLastAgentModel(t *testing.T) { t.Fatalf("blank save changed last model to %q", got) } } - -func TestApplyAgentFlagsNoTools(t *testing.T) { - cmd := &cobra.Command{} - registerAgentFlags(cmd) - if err := cmd.Flags().Set("no-tools", "true"); err != nil { - t.Fatal(err) - } - - var opts agentTUIOptions - if _, err := applyAgentFlags(cmd, &opts); err != nil { - t.Fatalf("applyAgentFlags returned error: %v", err) - } - if !opts.ToolsDisabled { - t.Fatal("--no-tools should disable tools") - } -} diff --git a/cmd/cmd.go b/cmd/cmd.go index 4a91eb450..e65d125b4 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -2336,15 +2336,6 @@ func NewCLI() *cobra.Command { runCmd.Flags().Bool("imagegen", false, "Use the imagegen runner for LLM inference") runCmd.Flags().MarkHidden("imagegen") - agentCmd := &cobra.Command{ - Use: "agent", - Short: "Run an agent", - Args: cobra.ExactArgs(0), - PreRunE: checkServerHeartbeat, - RunE: AgentHandler, - } - registerAgentFlags(agentCmd) - stopCmd := &cobra.Command{ Use: "stop MODEL", Short: "Stop a running model", @@ -2475,7 +2466,6 @@ func NewCLI() *cobra.Command { createCmd, showCmd, runCmd, - agentCmd, stopCmd, pullCmd, pushCmd, @@ -2523,7 +2513,6 @@ func NewCLI() *cobra.Command { createCmd, showCmd, runCmd, - agentCmd, stopCmd, pullCmd, pushCmd,