Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ jobs:
run: |
echo "Cache key: ${{ needs.setup.outputs.cache-key }}"
make helm-install
kubectl wait --for=condition=Accepted agents.kagent.dev -n kagent --all --timeout=60s
kubectl wait --for=condition=Ready agents.kagent.dev -n kagent --all --timeout=60s

- name: Run e2e tests
working-directory: go
Expand Down
22 changes: 22 additions & 0 deletions .github/workflows/tag.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,34 @@ jobs:
export VERSION=$(echo "$GITHUB_REF" | cut -c12-)
fi
make helm-publish
release-python-packages:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: 'Checkout GitHub Action'
uses: actions/checkout@main
- name: 'Release Python Packages'
working-directory: python
run: |
# if workflow_dispatch is used, use the version input
if [ -n "${{ github.event.inputs.version }}" ]; then
export VERSION=${{ github.event.inputs.version }}
else
export VERSION=$(echo "$GITHUB_REF" | cut -c12-)
fi
uv version $VERSION --package kagent-adk
uv build --package kagent-adk
uv publish --token ${{ secrets.PYPI_TOKEN }}

release:
# Only run release after images and helm chart are pushed
# In the future we can take the chart from the helm action,
# and build the CLI beforehand.
needs:
- push-helm-chart
- release-python-packages
runs-on: ubuntu-latest
permissions:
contents: write
Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ HELM_DIST_FOLDER ?= dist

BUILD_DATE := $(shell date -u '+%Y-%m-%d')
GIT_COMMIT := $(shell git rev-parse --short HEAD || echo "unknown")
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null | sed 's/-dirty//' | grep v || echo "v0.0.0+$(GIT_COMMIT)")
VERSION ?= $(shell git describe --tags --always 2>/dev/null | grep v || echo "v0.0.0+$(GIT_COMMIT)")

# Local architecture detection to build for the current platform
LOCALARCH ?= $(shell uname -m | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/')
Expand Down Expand Up @@ -52,7 +52,7 @@ LDFLAGS := "-X github.com/kagent-dev/kagent/go/internal/version.Version=$(VERSIO
TOOLS_UV_VERSION ?= 0.7.2
TOOLS_BUN_VERSION ?= 1.2.16
TOOLS_NODE_VERSION ?= 22.16.0
TOOLS_PYTHON_VERSION ?= 3.12
TOOLS_PYTHON_VERSION ?= 3.13
TOOLS_KIND_IMAGE_VERSION ?= 1.33.1

# build args
Expand Down
2 changes: 2 additions & 0 deletions go/cli/cmd/kagent/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ func main() {
invokeCmd.Flags().StringVarP(&invokeCfg.Agent, "agent", "a", "", "Agent")
invokeCmd.Flags().BoolVarP(&invokeCfg.Stream, "stream", "S", false, "Stream the response")
invokeCmd.Flags().StringVarP(&invokeCfg.File, "file", "f", "", "File to read the task from")
invokeCmd.Flags().StringVarP(&invokeCfg.URLOverride, "url-override", "u", "", "URL override")
invokeCmd.Flags().MarkHidden("url-override")

bugReportCmd := &cobra.Command{
Use: "bug-report",
Expand Down
13 changes: 6 additions & 7 deletions go/cli/internal/cli/chat.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,8 @@ func ChatCmd(c *ishell.Context) {
}

agentNames := make([]string, len(agentListResp.Data))
for i, team := range agentListResp.Data {
if team.Component.Label == "" {
continue
}
agentNames[i] = team.Component.Label
for i, agent := range agentListResp.Data {
agentNames[i] = utils.ConvertToKubernetesIdentifier(agent.ID)
}

selectedTeamIdx := c.MultiChoice(agentNames, "Select an agent:")
Expand Down Expand Up @@ -119,8 +116,10 @@ func ChatCmd(c *ishell.Context) {
session = existingSessions[selectedSessionIdx-1]
}

agentRef := utils.ConvertToKubernetesIdentifier(agentResp.ID)

// Setup A2A client
a2aURL := fmt.Sprintf("%s/a2a/%s/%s", cfg.APIURL, cfg.Namespace, agentResp.Component.Label)
a2aURL := fmt.Sprintf("%s/a2a/%s", cfg.APIURL, agentRef)
a2aClient, err := a2aclient.NewA2AClient(a2aURL)
if err != nil {
c.Printf("Failed to create A2A client: %v\n", err)
Expand All @@ -131,7 +130,7 @@ func ChatCmd(c *ishell.Context) {
cancel := startPortForward(context.Background())
defer cancel()

promptStr := config.BoldGreen(fmt.Sprintf("%s--%s> ", agentResp.Component.Label, session.ID))
promptStr := config.BoldGreen(fmt.Sprintf("%s--%s> ", agentRef, session.ID))
c.SetPrompt(promptStr)
c.ShowPrompt(true)

Expand Down
29 changes: 15 additions & 14 deletions go/cli/internal/cli/const.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package cli

import (
"github.com/kagent-dev/kagent/go/controller/api/v1alpha1"
"os"
"strings"

"github.com/kagent-dev/kagent/go/controller/api/v1alpha1"
)

const (
// Version is the current version of the kagent CLI
DefaultModelProvider = v1alpha1.OpenAI
DefaultModelProvider = v1alpha1.ModelProviderOpenAI
DefaultHelmOciRegistry = "oci://ghcr.io/kagent-dev/kagent/helm/"

//Provider specific env variables
Expand All @@ -31,16 +32,16 @@ func GetModelProvider() v1alpha1.ModelProvider {
return DefaultModelProvider
}
switch modelProvider {
case GetModelProviderHelmValuesKey(v1alpha1.OpenAI):
return v1alpha1.OpenAI
case GetModelProviderHelmValuesKey(v1alpha1.Ollama):
return v1alpha1.Ollama
case GetModelProviderHelmValuesKey(v1alpha1.Anthropic):
return v1alpha1.Anthropic
case GetModelProviderHelmValuesKey(v1alpha1.AzureOpenAI):
return v1alpha1.AzureOpenAI
case GetModelProviderHelmValuesKey(v1alpha1.ModelProviderOpenAI):
return v1alpha1.ModelProviderOpenAI
case GetModelProviderHelmValuesKey(v1alpha1.ModelProviderOllama):
return v1alpha1.ModelProviderOllama
case GetModelProviderHelmValuesKey(v1alpha1.ModelProviderAnthropic):
return v1alpha1.ModelProviderAnthropic
case GetModelProviderHelmValuesKey(v1alpha1.ModelProviderAzureOpenAI):
return v1alpha1.ModelProviderAzureOpenAI
default:
return v1alpha1.OpenAI
return v1alpha1.ModelProviderOpenAI
}
}

Expand All @@ -56,11 +57,11 @@ func GetModelProviderHelmValuesKey(provider v1alpha1.ModelProvider) string {
// GetProviderAPIKey returns API_KEY env var name from provider type
func GetProviderAPIKey(provider v1alpha1.ModelProvider) string {
switch provider {
case v1alpha1.OpenAI:
case v1alpha1.ModelProviderOpenAI:
return OPENAI_API_KEY
case v1alpha1.Anthropic:
case v1alpha1.ModelProviderAnthropic:
return ANTHROPIC_API_KEY
case v1alpha1.AzureOpenAI:
case v1alpha1.ModelProviderAzureOpenAI:
return AZUREOPENAI_API_KEY
default:
return ""
Expand Down
19 changes: 10 additions & 9 deletions go/cli/internal/cli/const_test.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package cli

import (
"github.com/kagent-dev/kagent/go/controller/api/v1alpha1"
"os"
"testing"

"github.com/kagent-dev/kagent/go/controller/api/v1alpha1"
)

func TestGetModelProvider(t *testing.T) {
Expand All @@ -23,29 +24,29 @@ func TestGetModelProvider(t *testing.T) {
},
{
name: "OpenAI provider",
envVarValue: string(v1alpha1.OpenAI),
expectedResult: v1alpha1.OpenAI,
envVarValue: string(v1alpha1.ModelProviderOpenAI),
expectedResult: v1alpha1.ModelProviderOpenAI,
expectedAPIKey: OPENAI_API_KEY,
expectedHelmKey: "openAI",
},
{
name: "AzureOpenAI provider",
envVarValue: string(v1alpha1.AzureOpenAI),
expectedResult: v1alpha1.AzureOpenAI,
envVarValue: string(v1alpha1.ModelProviderAzureOpenAI),
expectedResult: v1alpha1.ModelProviderAzureOpenAI,
expectedAPIKey: AZUREOPENAI_API_KEY,
expectedHelmKey: "azureOpenAI",
},
{
name: "Anthropic provider",
envVarValue: string(v1alpha1.Anthropic),
expectedResult: v1alpha1.Anthropic,
envVarValue: string(v1alpha1.ModelProviderAnthropic),
expectedResult: v1alpha1.ModelProviderAnthropic,
expectedAPIKey: "ANTHROPIC_API_KEY",
expectedHelmKey: "anthropic",
},
{
name: "Ollama provider",
envVarValue: string(v1alpha1.Ollama),
expectedResult: v1alpha1.Ollama,
envVarValue: string(v1alpha1.ModelProviderOllama),
expectedResult: v1alpha1.ModelProviderOllama,
expectedAPIKey: "",
expectedHelmKey: "ollama",
},
Expand Down
16 changes: 8 additions & 8 deletions go/cli/internal/cli/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,15 +88,15 @@ func GetToolCmd(cfg *config.Config) {
}

func printTools(tools []database.Tool) error {
headers := []string{"#", "ID", "PROVIDER", "LABEL", "CREATED"}
headers := []string{"#", "NAME", "SERVER_NAME", "DESCRIPTION", "CREATED"}
rows := make([][]string, len(tools))
for i, tool := range tools {
rows[i] = []string{
strconv.Itoa(i + 1),
strconv.Itoa(int(tool.Model.ID)),
tool.Component.Provider,
tool.Component.Label,
tool.Model.CreatedAt.String(),
tool.ID,
tool.ServerName,
tool.Description,
tool.CreatedAt.Format(time.RFC3339),
}
}

Expand All @@ -122,14 +122,14 @@ func printSessions(sessions []*database.Session) error {
headers := []string{"#", "NAME", "AGENT", "CREATED"}
rows := make([][]string, len(sessions))
for i, session := range sessions {
agentID := -1
agentID := ""
if session.AgentID != nil {
agentID = int(*session.AgentID)
agentID = *session.AgentID
}
rows[i] = []string{
strconv.Itoa(i + 1),
session.ID,
strconv.Itoa(agentID),
agentID,
session.CreatedAt.Format(time.RFC3339),
}
}
Expand Down
Loading
Loading