Retry failed sends with their send_id until the server confirms them
This commit is contained in:
@@ -127,6 +127,16 @@ func (m *Manager) MessageLead(ctx context.Context, user api.User, text, model, s
|
||||
if err != nil {
|
||||
return api.AgentSession{}, err
|
||||
}
|
||||
prior, sent, err := m.priorSend(ctx, sendID)
|
||||
if err != nil {
|
||||
return api.AgentSession{}, err
|
||||
}
|
||||
if sent && prior.Id == "" {
|
||||
return sess, nil
|
||||
}
|
||||
if sent {
|
||||
return prior, nil
|
||||
}
|
||||
if !found {
|
||||
return m.createLead(ctx, user, text, model, user.Login, sendID, images)
|
||||
}
|
||||
|
||||
@@ -186,6 +186,22 @@ func (m *Manager) taskFor(ctx context.Context, sess api.AgentSession) (api.Task,
|
||||
}
|
||||
|
||||
func (m *Manager) Create(ctx context.Context, task api.Task, creator api.User, prompt, model, sendID string, images ...string) (api.AgentSession, error) {
|
||||
unlock := m.lockDelivery("create:" + task.Id)
|
||||
defer unlock()
|
||||
|
||||
ctx = context.WithoutCancel(ctx)
|
||||
prior, sent, err := m.priorSend(ctx, sendID)
|
||||
if err != nil || sent {
|
||||
return prior, err
|
||||
}
|
||||
unused, found, err := m.store.UnusedSession(ctx, task.Id, "")
|
||||
if err != nil {
|
||||
return api.AgentSession{}, err
|
||||
}
|
||||
if found {
|
||||
slog.Info("first message to an unused session", "session", unused, "task", task.Id)
|
||||
return m.Send(ctx, unused, creator.Login, prompt, model, sendID, images...)
|
||||
}
|
||||
return m.create(ctx, task, creator, "", prompt, model, creator.Login, sendID, images)
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,11 @@ func (m *Manager) Message(ctx context.Context, sessionID, actor, text, model, se
|
||||
unlock := m.lockDelivery(sessionID)
|
||||
defer unlock()
|
||||
|
||||
prior, sent, err := m.priorSend(ctx, sendID)
|
||||
if err != nil || sent {
|
||||
return prior, false, err
|
||||
}
|
||||
|
||||
sess, err := m.store.GetSession(ctx, sessionID)
|
||||
if err != nil {
|
||||
return api.AgentSession{}, false, err
|
||||
@@ -83,6 +88,22 @@ func (m *Manager) Message(ctx context.Context, sessionID, actor, text, model, se
|
||||
return sess, true, nil
|
||||
}
|
||||
|
||||
func (m *Manager) priorSend(ctx context.Context, sendID string) (api.AgentSession, bool, error) {
|
||||
if sendID == "" {
|
||||
return api.AgentSession{}, false, nil
|
||||
}
|
||||
sessionID, found, err := m.store.SendSession(ctx, sendID)
|
||||
if err != nil || !found || sessionID == "" {
|
||||
return api.AgentSession{}, found, err
|
||||
}
|
||||
sess, err := m.store.GetSession(ctx, sessionID)
|
||||
if err != nil {
|
||||
return api.AgentSession{}, false, err
|
||||
}
|
||||
slog.Info("send already accepted", "session", sess.Id, "send", sendID)
|
||||
return sess, true, nil
|
||||
}
|
||||
|
||||
func automatedActor(actor string) bool {
|
||||
return actor == "byre" || actor == agentActor || actor == boardActor
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user