on main help sign in
fix: prompt prefix
086e4ffKujtim Hoxha
internal/agent/agent.go+7
@@ -68,6 +68,7 @@ type Model struct {
68type sessionAgent struct {
68type sessionAgent struct {
69 largeModel Model
69 largeModel Model
70 smallModel Model
70 smallModel Model
71+ systemPromptPrefix string
71 systemPrompt string
72 systemPrompt string
72 tools []fantasy.AgentTool
73 tools []fantasy.AgentTool
73 sessions session.Service
74 sessions session.Service
@@ -82,6 +83,7 @@ type sessionAgent struct {
82type SessionAgentOptions struct {
83type SessionAgentOptions struct {
83 LargeModel Model
84 LargeModel Model
84 SmallModel Model
85 SmallModel Model
86+ SystemPromptPrefix string
85 SystemPrompt string
87 SystemPrompt string
86 DisableAutoSummarize bool
88 DisableAutoSummarize bool
87 IsYolo bool
89 IsYolo bool
@@ -96,6 +98,7 @@ func NewSessionAgent(
96 return &sessionAgent{
98 return &sessionAgent{
97 largeModel: opts.LargeModel,
99 largeModel: opts.LargeModel,
98 smallModel: opts.SmallModel,
100 smallModel: opts.SmallModel,
101+ systemPromptPrefix: opts.SystemPromptPrefix,
99 systemPrompt: opts.SystemPrompt,
102 systemPrompt: opts.SystemPrompt,
100 sessions: opts.Sessions,
103 sessions: opts.Sessions,
101 messages: opts.Messages,
104 messages: opts.Messages,
@@ -225,6 +228,10 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
225 }
228 }
226 }
229 }
227
230
231+ if a.systemPromptPrefix != "" {
232+ prepared.Messages = append([]fantasy.Message{fantasy.NewSystemMessage(a.systemPromptPrefix)}, prepared.Messages...)
233+ }
234+
228 var assistantMsg message.Message
235 var assistantMsg message.Message
229 assistantMsg, err = a.messages.Create(callContext, call.SessionID, message.CreateMessageParams{
236 assistantMsg, err = a.messages.Create(callContext, call.SessionID, message.CreateMessageParams{
230 Role: message.Assistant,
237 Role: message.Assistant,
internal/agent/common_test.go+1−1
@@ -145,7 +145,7 @@ func testSessionAgent(env env, large, small fantasy.LanguageModel, systemPrompt
145 DefaultMaxTokens: 10000,
145 DefaultMaxTokens: 10000,
146 },
146 },
147 }
147 }
148− agent := NewSessionAgent(SessionAgentOptions{largeModel, smallModel, systemPrompt, false, true, env.sessions, env.messages, tools})
148+ agent := NewSessionAgent(SessionAgentOptions{largeModel, smallModel, "", systemPrompt, false, true, env.sessions, env.messages, tools})
149 return agent
149 return agent
150}
150}
151
151
internal/agent/coordinator.go+11−4
@@ -276,11 +276,12 @@ func (c *coordinator) buildAgent(ctx context.Context, prompt *prompt.Prompt, age
276 return nil, err
276 return nil, err
277 }
277 }
278
278
279+ largeProviderCfg, _ := c.cfg.Providers.Get(large.ModelCfg.Provider)
279 tools, err := c.buildTools(ctx, agent)
280 tools, err := c.buildTools(ctx, agent)
280 if err != nil {
281 if err != nil {
281 return nil, err
282 return nil, err
282 }
283 }
283− return NewSessionAgent(SessionAgentOptions{large, small, systemPrompt, c.cfg.Options.DisableAutoSummarize, c.permissions.SkipRequests(), c.sessions, c.messages, tools}), nil
284+ return NewSessionAgent(SessionAgentOptions{large, small, largeProviderCfg.SystemPromptPrefix, systemPrompt, c.cfg.Options.DisableAutoSummarize, c.permissions.SkipRequests(), c.sessions, c.messages, tools}), nil
284}
285}
285
286
286func (c *coordinator) buildTools(ctx context.Context, agent config.Agent) ([]fantasy.AgentTool, error) {
287func (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
450 break
451 break
451 }
452 }
452 }
453 }
453− if hasBearerAuth {
454+
454− apiKey = "" // clear apiKey to avoid using X-Api-Key header
455+ isBearerToken := strings.HasPrefix(apiKey, "Bearer ")
455− }
456
456
457 var opts []anthropic.Option
457 var opts []anthropic.Option
458+ if apiKey != "" && !hasBearerAuth {
459+ if isBearerToken {
460+ slog.Debug("API key starts with 'Bearer ', using as Authorization header")
461+ headers["Authorization"] = apiKey
462+ apiKey = "" // clear apiKey to avoid using X-Api-Key header
463+ }
464+ }
458
465
459 if apiKey != "" {
466 if apiKey != "" {
460 // Use standard X-Api-Key header
467 // Use standard X-Api-Key header