review way to map metadata
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Inizia da src/SemanticKernel/src/SemanticKernelMemoryStoreCollection.cs, concentrandoti sulla gestione dei metadati in AddAsync e GetAsync. Esamina come i metadati di Vector vengono codificati in AdditionalMetadata e nuovamente decodificati, quindi stabilisci il comportamento previsto del round-trip prima di modificare il mapping. Il lavoro è completato quando la rappresentazione dei metadati viene gestita in modo coerente in entrambi i metodi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
using Microsoft.SemanticKernel.Memory;
namespace LangChain.Databases.SemanticKernel;
public class SemanticKernelMemoryStoreCollection(IMemoryStore store,
string name = VectorCollection.DefaultName,
string? id = null)
: VectorCollection(name, id), IVectorCollection
{
public async Task<IReadOnlyCollection<string>> AddAsync(IReadOnlyCollection<Vector> items, CancellationToken cancellationToken = default)
{
items = items ?? throw new ArgumentNullException(nameof(items));
List<string> list = [];
foreach (var item in items)
{
string? metadata = null;
//TODO: review way to map metadata
if (item.Metadata != null)
metadata = string.Join("#", item.Metadata.Select(kv => kv.Key + "&" + kv.Value));
var record = new MemoryRecord
(
new MemoryRecordMetadata
(
isReference: false,
id: item.Id,
text: item.Text,
description: string.Empty,
externalSourceName: item.Text,
additionalMetadata: metadata ?? string.Empty
),
item.Embedding,
null,
null
);
var insert = await store.UpsertAsync(Name, record, cancellationToken).ConfigureAwait(false);
list.Add(insert);
}
return list;
}
public async Task<bool> DeleteAsync(IEnumerable<string> ids, CancellationToken cancellationToken = default)
{
await store.RemoveBatchAsync(Name, ids, cancellationToken).ConfigureAwait(false);
return true;
}
public async Task<Vector?> GetAsync(string id, CancellationToken cancellationToken = default)
{
var record = await store.GetAsync(Name, id, cancellationToken: cancellationToken).ConfigureAwait(false);
Dictionary<string, object>? metadata = null;
if (record?.Metadata?.AdditionalMetadata != null)
metadata = record.Metadata.AdditionalMetadata
.Split('#')
.Select(part => part.Split('&'))
.ToDictionary(split => split[0], split => (object)split[1]);
return record != null ? new Vector { Id = id, Text = record.Metadata.ExternalSourceName, Metadata = metadata } : null;
}
public async Task<bool> IsEmptyAsync(CancellationToken cancellationToken = default)
{
var collections = store.GetCollectionsAsync(cancellationToken);
return !(await collections.CountAsync(cancellationToken).ConfigureAwait(false) > 0);
}
public async Task<VectorSearchResponse> SearchAsync(VectorSearchRequest request, VectorSearchSettings? settings = null, CancellationToken cancellationToken = default)
{
request = request ?? throw new ArgumentNullException(nameof(request));
settings ??= new VectorSearchSettings();
var results = await store.GetNearestMatchesAsync(Name, request.Embeddings.First(), limit: settings.NumberOfResults, cancellationToken: cancellationToken)
.ToListAsync(cancellationToken).ConfigureAwait(false);
return new VectorSearchResponse { Items = results.Select(x => new Vector { Text = x.Item1.Metadata.ExternalSourceName }).ToList() };
}
}
- Lingua principale
- C#
- Stelle
- 12
- Fork
- 8
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di tryAGI/LangChain.Databases
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
-
Weaviate does not work Apertabug dependencies documentation help wanted
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
tryAGI/LangChain.Databases#53 · 6 commenti ·
-
use async methods Apertatodo
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
-
todo
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
-
todo
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
Tutte le issue di tryAGI/LangChain.Databases
Issue simili
-
effort:S P3 refactor
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
nightscout/nocturne#1532 ·
-
core dependencies
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 80/100
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
C#/.NET Roslyn LSP Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Suspicious code fragments Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
DotNetNext/SqlSugar#1458 ·