on main help sign in
fix: handle no content for gemini provider
commit60d85105ec8875b3a03ffec00eaa3621863408d2 authorKujtim Hoxha <kujtimii.h@gmail.com> dateSat 6 Sep 2025, 23:09 (1 year ago) parent39de90f
2 files changed+17−2
internal/llm/agent/agent.go+8−2 internal/llm/provider/gemini.go+9
internal/llm/agent/agent.go+8−2
@@ -395,7 +395,7 @@ func (a *agent) processGeneration(ctx context.Context, sessionID, content string
395395 defer log.RecoverPanic("agent.Run", func() {
396396 slog.Error("panic while generating title")
397397 })
398− titleErr := a.generateTitle(context.Background(), sessionID, content)
398+ titleErr := a.generateTitle(ctx, sessionID, content)
399399 if titleErr != nil && !errors.Is(titleErr, context.Canceled) && !errors.Is(titleErr, context.DeadlineExceeded) {
400400 slog.Error("failed to generate title", "error", titleErr)
401401 }
@@ -996,11 +996,17 @@ func (a *agent) UpdateModel() error {
996996 return fmt.Errorf("provider %s not found in config", largeModelCfg.Provider)
997997 }
998998
999+ var maxTitleTokens int64 = 40
1000+
1001+ // if the max output is too low for the gemini provider it won't return anything
1002+ if smallModelCfg.Provider == "gemini" {
1003+ maxTitleTokens = 1000
1004+ }
9991005 // Recreate title provider
10001006 titleOpts := []provider.ProviderClientOption{
10011007 provider.WithModel(config.SelectedModelTypeSmall),
10021008 provider.WithSystemMessage(prompt.GetPrompt(prompt.PromptTitle, smallModelProviderCfg.ID)),
1003− provider.WithMaxTokens(40),
1009+ provider.WithMaxTokens(maxTitleTokens),
10041010 }
10051011 newTitleProvider, err := provider.NewProvider(smallModelProviderCfg, titleOpts...)
10061012 if err != nil {
internal/llm/provider/gemini.go+9
@@ -322,6 +322,7 @@ func (g *geminiClient) stream(ctx context.Context, messages []message.Message, t
322322 for _, part := range lastMsg.Parts {
323323 lastMsgParts = append(lastMsgParts, *part)
324324 }
325+
325326 for resp, err := range chat.SendMessageStream(ctx, lastMsgParts...) {
326327 if err != nil {
327328 retry, after, retryErr := g.shouldRetry(attempts, err)
@@ -385,6 +386,9 @@ func (g *geminiClient) stream(ctx context.Context, messages []message.Message, t
385386 }
386387 }
387388 }
389+ } else {
390+ // no content received
391+ break
388392 }
389393 }
390394
@@ -408,6 +412,11 @@ func (g *geminiClient) stream(ctx context.Context, messages []message.Message, t
408412 },
409413 }
410414 return
415+ } else {
416+ eventChan <- ProviderEvent{
417+ Type: EventError,
418+ Error: errors.New("no content received"),
419+ }
411420 }
412421 }
413422 }()