Reuse assistant name across conversations #296

Merged
m merged 2 commits from codex/chat-semantic-inventory into main 2026-08-24 23:38:47 +00:00
2 changed files with 22 additions and 0 deletions
@@ -3,6 +3,7 @@ package postgres
import (
"context"
"git.cin.su/m/Assistant/contracts/identity"
"git.cin.su/m/Assistant/contracts/interaction"
"github.com/jackc/pgx/v5/pgxpool"
)
@@ -98,3 +99,22 @@ func (r *InteractionRepository) Utterances(ctx context.Context, id interaction.C
}
return out, rows.Err()
}
// RecentUtterancesForPrincipal provides durable conversational context when a
// client starts a fresh conversation instead of carrying the previous ID.
func (r *InteractionRepository) RecentUtterancesForPrincipal(ctx context.Context, actorID identity.ActorID, principalID identity.PrincipalID, limit int) ([]interaction.HumanUtterance, error) {
rows, err := r.pool.Query(ctx, `SELECT utterance_id,conversation_id,actor_id,principal_id,channel,received_at_unix_millis,correlation_id,content,content_ref,speech_act,interpretation_state,corrects_utterance_id FROM interaction.utterances WHERE actor_id=$1 AND principal_id=$2 ORDER BY received_at_unix_millis DESC, utterance_id DESC LIMIT $3`, actorID, principalID, limit)
if err != nil {
return nil, err
}
defer rows.Close()
var out []interaction.HumanUtterance
for rows.Next() {
var u interaction.HumanUtterance
if err := rows.Scan(&u.ID, &u.ConversationID, &u.ActorID, &u.PrincipalID, &u.Channel, &u.ReceivedAtUnixMillis, &u.CorrelationID, &u.Content, &u.ContentRef, &u.SpeechAct, &u.InterpretationState, &u.CorrectsUtteranceID); err != nil {
return nil, err
}
out = append(out, u)
}
return out, rows.Err()
}
+2
View File
@@ -513,6 +513,8 @@ func main() {
var conversationHistory []interaction.HumanUtterance
if request.ConversationID != "" {
conversationHistory, _ = interactionRepository.Utterances(r.Context(), conversation.ID)
} else {
conversationHistory, _ = interactionRepository.RecentUtterancesForPrincipal(r.Context(), session.ActorID, session.PrincipalID, 64)
}
if request.ConversationID != "" && interactiondomain.IsRetryRequest(utterance.Content) {
if len(conversationHistory) > 0 {