@@ -11,6 +11,7 @@ import (
11 "github.com/cloudwego/eino/schema"
11 "github.com/cloudwego/eino/schema"
12 "github.com/google/uuid"
12 "github.com/google/uuid"
13 "github.com/kujtimiihoxha/termai/internal/llm/agent"
13 "github.com/kujtimiihoxha/termai/internal/llm/agent"
14+ "github.com/kujtimiihoxha/termai/internal/llm/models"
14 "github.com/kujtimiihoxha/termai/internal/logging"
15 "github.com/kujtimiihoxha/termai/internal/logging"
15 "github.com/kujtimiihoxha/termai/internal/message"
16 "github.com/kujtimiihoxha/termai/internal/message"
16 "github.com/kujtimiihoxha/termai/internal/pubsub"
17 "github.com/kujtimiihoxha/termai/internal/pubsub"
@@ -88,7 +89,7 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
90 log.Printf("Request: %s", content)
91 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"))
92 if err != nil {
93 if err != nil {
93 s.Publish(AgentErrorEvent, AgentEvent{
94 s.Publish(AgentErrorEvent, AgentEvent{
@@ -110,6 +111,7 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
110 for _, m := range history {
111 for _, m := range history {
111 messages = append(messages, &m.MessageData)
112 messages = append(messages, &m.MessageData)
113 builder := callbacks.NewHandlerBuilder()
115 builder := callbacks.NewHandlerBuilder()
114 builder.OnStartFn(func(ctx context.Context, info *callbacks.RunInfo, input callbacks.CallbackInput) context.Context {
116 builder.OnStartFn(func(ctx context.Context, info *callbacks.RunInfo, input callbacks.CallbackInput) context.Context {
115 i, ok := input.(*eModel.CallbackInput)
117 i, ok := input.(*eModel.CallbackInput)
@@ -140,7 +142,7 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
140 return ctx
142 return ctx
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())))
144 if err != nil {
146 if err != nil {
145 s.Publish(AgentErrorEvent, AgentEvent{
147 s.Publish(AgentErrorEvent, AgentEvent{
@@ -153,6 +155,7 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
155 usage := out.ResponseMeta.Usage
157 usage := out.ResponseMeta.Usage
158+ s.messages.Create(sessionID, *out)
156 if usage != nil {
159 if usage != nil {
157 log.Printf("Prompt Tokens: %d, Completion Tokens: %d, Total Tokens: %d", usage.PromptTokens, usage.CompletionTokens, usage.TotalTokens)
160 log.Printf("Prompt Tokens: %d, Completion Tokens: %d, Total Tokens: %d", usage.PromptTokens, usage.CompletionTokens, usage.TotalTokens)
158 session, err := s.sessions.Get(sessionID)
161 session, err := s.sessions.Get(sessionID)
@@ -170,6 +173,29 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
170 session.PromptTokens += int64(usage.PromptTokens)
173 session.PromptTokens += int64(usage.PromptTokens)
171 session.CompletionTokens += int64(usage.CompletionTokens)
174 session.CompletionTokens += int64(usage.CompletionTokens)
172 // TODO: calculate cost
175 // 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)
180+ if len(history) == 1 {
181+ // first message generate the title
182+ newTitle, err = agent.GenerateTitle(s.ctx, content)
184+ s.Publish(AgentErrorEvent, AgentEvent{
186+ Type: AgentMessageTypeError,
189+ SessionID: sessionID,
190+ Content: err.Error(),
196+ session.Title = newTitle
173 _, err = s.sessions.Save(session)
199 _, err = s.sessions.Save(session)
174 if err != nil {
200 if err != nil {
175 s.Publish(AgentErrorEvent, AgentEvent{
201 s.Publish(AgentErrorEvent, AgentEvent{
@@ -183,7 +209,6 @@ func (s *service) handleRequest(id string, sessionID string, content string) {
186− s.messages.Create(sessionID, *out)
189func (s *service) SendRequest(sessionID string, content string) {
214func (s *service) SendRequest(sessionID string, content string) {