Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

use async methods

Aperta
#15 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Refactoring
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
csharp, redis
Ambito
databases

Direzione di ricerca

Inizia dal RedisChatMessageHistory.cs collegato, intorno alla riga 50, e analizza il contratto BaseChatMessageHistory. Determina come il recupero dei messaggi possa usare i metodi asincroni di StackExchange.Redis preservando l’ordine e la serializzazione; il lavoro è completato quando il percorso di lettura della cronologia Redis è asincrono senza modificare il comportamento di append o clear.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

todo

/ </summary>

/ Append the message to the record in Redis

/ </summary>

/ Clear session memory from Redis

/ </summary>

https://github.com/tryAGI/LangChain.Databases/blob/f753e0c87454ab9978786b3302ce986d2166c133/src/Redis/src/RedisChatMessageHistory.cs#L50


using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using LangChain.Memory;
using LangChain.Providers;
using StackExchange.Redis;

namespace LangChain.Databases;

/// <summary>
/// Chat message history stored in a Redis database.
/// </summary>
[RequiresDynamicCode("Requires dynamic code.")]
[RequiresUnreferencedCode("Requires unreferenced code.")]
public class RedisChatMessageHistory : BaseChatMessageHistory
{
    public TimeSpan? Ttl { get; set; }

    private readonly string _sessionId;
    private readonly string _keyPrefix;
    private readonly Lazy<ConnectionMultiplexer> _multiplexer;

    /// <inheritdoc />
    public RedisChatMessageHistory(
        string sessionId,
        string connectionString,
        string keyPrefix = "message_store:",
        TimeSpan? ttl = null)
    {
        _sessionId = sessionId;
        _keyPrefix = keyPrefix;
        Ttl = ttl;

        _multiplexer = new Lazy<ConnectionMultiplexer>(
            () =>
            {
                var multiplexer = ConnectionMultiplexer.Connect(connectionString);

                return multiplexer;
            },
            LazyThreadSafetyMode.ExecutionAndPublication);
    }

    /// <summary>
    /// Construct the record key to use
    /// </summary>
    private string Key => _keyPrefix + _sessionId;

    /// <summary>
    /// Retrieve the messages from Redis
    /// TODO: use async methods
    /// </summary>
    public override IReadOnlyList<Message> Messages
    {
        get
        {
            var database = _multiplexer.Value.GetDatabase();
            var values = database.ListRange(Key, start: 0, stop: -1);
            var messages = values.Select(v => JsonSerializer.Deserialize<Message>(v.ToString())).Reverse();

            return messages.ToList();
        }
    }

    /// <summary>
    /// Append the message to the record in Redis
    /// </summary>
    public override async Task AddMessage(Message message)
    {
        var database = _multiplexer.Value.GetDatabase();
        await database.ListLeftPushAsync(Key, JsonSerializer.Serialize(message)).ConfigureAwait(false);
        if (Ttl.HasValue)
        {
            await database.KeyExpireAsync(Key, Ttl).ConfigureAwait(false);
        }
    }

    /// <summary>
    /// Clear session memory from Redis
    /// </summary>
    public override async Task Clear()
    {
        var database = _multiplexer.Value.GetDatabase();
        await database.KeyDeleteAsync(Key).ConfigureAwait(false);
    }
}

Lingua principale
C#
Stelle
12
Fork
9
Merge medio
1g 14h
PR unite (30g)
5

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di tryAGI/LangChain.Databases

Tutte le issue di tryAGI/LangChain.Databases

Issue simili

Altre issue su C#

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.