diff --git a/go.mod b/go.mod index 9cf0aab1..124ef20c 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/larksuite/oapi-sdk-go/v3 v3.5.3 github.com/mailgun/mailgun-go/v5 v5.14.0 github.com/memohai/acgo v0.0.0-20260221232113-babac0d6acd7 - github.com/memohai/twilight-ai v0.3.4-0.20260329101319-3ebcc563f5d9 + github.com/memohai/twilight-ai v0.3.4-0.20260402155501-497ad09c6724 github.com/modelcontextprotocol/go-sdk v1.4.1 github.com/opencontainers/image-spec v1.1.1 github.com/opencontainers/runtime-spec v1.3.0 diff --git a/go.sum b/go.sum index 5cefe5be..547872b2 100644 --- a/go.sum +++ b/go.sum @@ -230,6 +230,10 @@ github.com/memohai/acgo v0.0.0-20260221232113-babac0d6acd7 h1:beehwOQperqGWj4m4E github.com/memohai/acgo v0.0.0-20260221232113-babac0d6acd7/go.mod h1:OvmxM7JmnXBmwJWWVqtreL3HSHSKuzPbtbhlg5MvBg0= github.com/memohai/twilight-ai v0.3.4-0.20260329101319-3ebcc563f5d9 h1:vpq3FgZ7UJAWr63M4mAtB8wvUWHSAdrgWibTFocXFBk= github.com/memohai/twilight-ai v0.3.4-0.20260329101319-3ebcc563f5d9/go.mod h1:GZTT9GUT3uSs6zram/FcF24GLTZMFSpiybbYmjr+gH8= +github.com/memohai/twilight-ai v0.3.4-0.20260402145441-9e9f798cbd2d h1:tZYwJ0YDc6FUlh3mXYv+Tkw5dLfMD6IgP8VY5/+AfB0= +github.com/memohai/twilight-ai v0.3.4-0.20260402145441-9e9f798cbd2d/go.mod h1:GZTT9GUT3uSs6zram/FcF24GLTZMFSpiybbYmjr+gH8= +github.com/memohai/twilight-ai v0.3.4-0.20260402155501-497ad09c6724 h1:/Hw5vHfAeHRGx+duPKyetT5n2t6J5cYMfUysN/Xh9U0= +github.com/memohai/twilight-ai v0.3.4-0.20260402155501-497ad09c6724/go.mod h1:GZTT9GUT3uSs6zram/FcF24GLTZMFSpiybbYmjr+gH8= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= diff --git a/internal/agent/agent.go b/internal/agent/agent.go index 2c706cce..f11af9a8 100644 --- a/internal/agent/agent.go +++ b/internal/agent/agent.go @@ -366,7 +366,7 @@ func (*Agent) buildGenerateOptions(cfg RunConfig, tools []sdk.Tool, prepareStep sdk.WithSystem(cfg.System), sdk.WithMaxSteps(-1), } - if len(tools) > 0 { + if len(tools) > 0 && cfg.SupportsToolCall { opts = append(opts, sdk.WithTools(tools)) } if prepareStep != nil { diff --git a/internal/agent/read_media_test.go b/internal/agent/read_media_test.go index 7c5a7b31..51915baf 100644 --- a/internal/agent/read_media_test.go +++ b/internal/agent/read_media_test.go @@ -246,6 +246,7 @@ func TestAgentGenerateReadMediaInjectsImageIntoNextStep(t *testing.T) { Model: &sdk.Model{ID: "mock-model", Provider: modelProvider}, Messages: []sdk.Message{sdk.UserMessage("look at the image")}, SupportsImageInput: true, + SupportsToolCall: true, Identity: SessionContext{ BotID: "bot-1", }, @@ -321,6 +322,7 @@ func TestAgentGenerateReadMediaInjectsAnthropicSafeImageIntoNextStep(t *testing. Model: &sdk.Model{ID: "mock-model", Provider: modelProvider}, Messages: []sdk.Message{sdk.UserMessage("look at the image")}, SupportsImageInput: true, + SupportsToolCall: true, Identity: SessionContext{ BotID: "bot-1", }, @@ -367,6 +369,7 @@ func TestAgentStreamReadMediaPersistsInjectedImageInTerminalMessages(t *testing. Model: &sdk.Model{ID: "mock-model", Provider: modelProvider}, Messages: []sdk.Message{sdk.UserMessage("look at the image")}, SupportsImageInput: true, + SupportsToolCall: true, Identity: SessionContext{ BotID: "bot-1", }, diff --git a/internal/agent/spawn_adapter.go b/internal/agent/spawn_adapter.go index 61bfe2bc..36b38b92 100644 --- a/internal/agent/spawn_adapter.go +++ b/internal/agent/spawn_adapter.go @@ -31,12 +31,13 @@ func (s *SpawnAdapter) Generate(ctx context.Context, cfg tools.SpawnRunConfig) ( } rc := RunConfig{ - Model: cfg.Model, - System: cfg.System, - Query: cfg.Query, - SessionType: cfg.SessionType, - Messages: messages, - ReasoningEffort: cfg.ReasoningEffort, + Model: cfg.Model, + System: cfg.System, + Query: cfg.Query, + SessionType: cfg.SessionType, + Messages: messages, + ReasoningEffort: cfg.ReasoningEffort, + SupportsToolCall: true, Identity: SessionContext{ BotID: cfg.Identity.BotID, ChatID: cfg.Identity.ChatID, diff --git a/internal/agent/types.go b/internal/agent/types.go index c0db8404..3b7956c5 100644 --- a/internal/agent/types.go +++ b/internal/agent/types.go @@ -55,6 +55,7 @@ type RunConfig struct { System string SessionType string SupportsImageInput bool + SupportsToolCall bool InlineImages []sdk.ImagePart Identity SessionContext Skills []SkillEntry diff --git a/internal/conversation/flow/resolver.go b/internal/conversation/flow/resolver.go index 3562d976..edbe2afa 100644 --- a/internal/conversation/flow/resolver.go +++ b/internal/conversation/flow/resolver.go @@ -274,6 +274,7 @@ func (r *Resolver) resolve(ctx context.Context, req conversation.ChatRequest) (r Messages: sdkMessages, Query: headerifiedQuery, SupportsImageInput: chatModel.HasCompatibility(models.CompatVision), + SupportsToolCall: chatModel.HasCompatibility(models.CompatToolCall), InlineImages: inlineImages, Identity: agentpkg.SessionContext{ BotID: req.BotID,