Detailed changes
@@ -68,6 +68,7 @@ type Model struct {
type sessionAgent struct {
largeModel Model
smallModel Model
+ systemPromptPrefix string
systemPrompt string
tools []fantasy.AgentTool
sessions session.Service
@@ -82,6 +83,7 @@ type sessionAgent struct {
type SessionAgentOptions struct {
LargeModel Model
SmallModel Model
+ SystemPromptPrefix string
SystemPrompt string
DisableAutoSummarize bool
IsYolo bool
@@ -96,6 +98,7 @@ func NewSessionAgent(
return &sessionAgent{
largeModel: opts.LargeModel,
smallModel: opts.SmallModel,
+ systemPromptPrefix: opts.SystemPromptPrefix,
systemPrompt: opts.SystemPrompt,
sessions: opts.Sessions,
messages: opts.Messages,
@@ -225,6 +228,10 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
}
}
+ if a.systemPromptPrefix != "" {
+ prepared.Messages = append([]fantasy.Message{fantasy.NewSystemMessage(a.systemPromptPrefix)}, prepared.Messages...)
+ }
+
var assistantMsg message.Message
assistantMsg, err = a.messages.Create(callContext, call.SessionID, message.CreateMessageParams{
Role: message.Assistant,
@@ -145,7 +145,7 @@ func testSessionAgent(env env, large, small fantasy.LanguageModel, systemPrompt
DefaultMaxTokens: 10000,
},
}
- agent := NewSessionAgent(SessionAgentOptions{largeModel, smallModel, systemPrompt, false, true, env.sessions, env.messages, tools})
+ agent := NewSessionAgent(SessionAgentOptions{largeModel, smallModel, "", systemPrompt, false, true, env.sessions, env.messages, tools})
return agent
}
@@ -276,11 +276,12 @@ func (c *coordinator) buildAgent(ctx context.Context, prompt *prompt.Prompt, age
return nil, err
}
+ largeProviderCfg, _ := c.cfg.Providers.Get(large.ModelCfg.Provider)
tools, err := c.buildTools(ctx, agent)
if err != nil {
return nil, err
}
- return NewSessionAgent(SessionAgentOptions{large, small, systemPrompt, c.cfg.Options.DisableAutoSummarize, c.permissions.SkipRequests(), c.sessions, c.messages, tools}), nil
+ return NewSessionAgent(SessionAgentOptions{large, small, largeProviderCfg.SystemPromptPrefix, systemPrompt, c.cfg.Options.DisableAutoSummarize, c.permissions.SkipRequests(), c.sessions, c.messages, tools}), nil
}
func (c *coordinator) buildTools(ctx context.Context, agent config.Agent) ([]fantasy.AgentTool, error) {
@@ -450,11 +451,17 @@ func (c *coordinator) buildAnthropicProvider(baseURL, apiKey string, headers map
break
}
}
- if hasBearerAuth {
- apiKey = "" // clear apiKey to avoid using X-Api-Key header
- }
+
+ isBearerToken := strings.HasPrefix(apiKey, "Bearer ")
var opts []anthropic.Option
+ if apiKey != "" && !hasBearerAuth {
+ if isBearerToken {
+ slog.Debug("API key starts with 'Bearer ', using as Authorization header")
+ headers["Authorization"] = apiKey
+ apiKey = "" // clear apiKey to avoid using X-Api-Key header
+ }
+ }
if apiKey != "" {
// Use standard X-Api-Key header