@@ -11,6 +11,7 @@ import (
1111 "github.com/cloudwego/eino/schema"
1212 "github.com/google/uuid"
1313 "github.com/kujtimiihoxha/termai/internal/llm/agent"
14+ "github.com/kujtimiihoxha/termai/internal/llm/models"
1415 "github.com/kujtimiihoxha/termai/internal/logging"
1516 "github.com/kujtimiihoxha/termai/internal/message"
1617 "github.com/kujtimiihoxha/termai/internal/pubsub"
@@ -88,7 +89,7 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
8889 }
8990
9091 log.Printf("Request: %s", content)
91− agent, systemMessage, err := agent.GetAgent(s.ctx, viper.GetString("agents.default"))
92+ currentAgent, systemMessage, err := agent.GetAgent(s.ctx, viper.GetString("agents.default"))
9293 if err != nil {
9394 s.Publish(AgentErrorEvent, AgentEvent{
9495 ID: id,
@@ -110,6 +111,7 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
110111 for _, m := range history {
111112 messages = append(messages, &m.MessageData)
112113 }
114+
113115 builder := callbacks.NewHandlerBuilder()
114116 builder.OnStartFn(func(ctx context.Context, info *callbacks.RunInfo, input callbacks.CallbackInput) context.Context {
115117 i, ok := input.(*eModel.CallbackInput)
@@ -140,7 +142,7 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
140142 return ctx
141143 })
142144
143− out, err := agent.Generate(s.ctx, messages, enioAgent.WithComposeOptions(compose.WithCallbacks(builder.Build())))
145+ out, err := currentAgent.Generate(s.ctx, messages, enioAgent.WithComposeOptions(compose.WithCallbacks(builder.Build())))
144146 if err != nil {
145147 s.Publish(AgentErrorEvent, AgentEvent{
146148 ID: id,
@@ -153,6 +155,7 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
153155 return
154156 }
155157 usage := out.ResponseMeta.Usage
158+ s.messages.Create(sessionID, *out)
156159 if usage != nil {
157160 log.Printf("Prompt Tokens: %d, Completion Tokens: %d, Total Tokens: %d", usage.PromptTokens, usage.CompletionTokens, usage.TotalTokens)
158161 session, err := s.sessions.Get(sessionID)
@@ -170,6 +173,29 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
170173 session.PromptTokens += int64(usage.PromptTokens)
171174 session.CompletionTokens += int64(usage.CompletionTokens)
172175 // TODO: calculate cost
176+ model := models.SupportedModels[models.ModelID(viper.GetString("models.big"))]
177+ session.Cost += float64(usage.PromptTokens)*(model.CostPer1MIn/1_000_000) +
178+ float64(usage.CompletionTokens)*(model.CostPer1MOut/1_000_000)
179+ var newTitle string
180+ if len(history) == 1 {
181+ // first message generate the title
182+ newTitle, err = agent.GenerateTitle(s.ctx, content)
183+ if err != nil {
184+ s.Publish(AgentErrorEvent, AgentEvent{
185+ ID: id,
186+ Type: AgentMessageTypeError,
187+ AgentID: RootAgent,
188+ MessageID: "",
189+ SessionID: sessionID,
190+ Content: err.Error(),
191+ })
192+ return
193+ }
194+ }
195+ if newTitle != "" {
196+ session.Title = newTitle
197+ }
198+
173199 _, err = s.sessions.Save(session)
174200 if err != nil {
175201 s.Publish(AgentErrorEvent, AgentEvent{
@@ -183,7 +209,6 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
183209 return
184210 }
185211 }
186− s.messages.Create(sessionID, *out)
187212}
188213
189214func (s *service) SendRequest(sessionID string, content string) {