mirror of
https://github.com/microsoft/semantic-kernel.git
synced 2026-10-12 11:19:56 +00:00
### Motivation and Context Closes #1271 and addresses several TODOs in ChromaMemoryStore ### Description - added field `additional_metadata` to `MemoryRecord` and all downstream methods/classes (see `SemanticTextMemoryBase`, `SemanticTextMemory`, `MemoryQueryResult`, and `ChromaMemoryStore`) - addressed ChromaMemoryStore TODO 'what is key used for?' For chromadb, key and id are effectively the same value, but the two fields are differentiated for memory stores like Qdrant which require that key be a uuid. I updated the logic so that this is more apparent. Note that this results in no change in end-user functionality. - Updated ChromaMemoryStore TODO 'get_async say embedding is optional but Record constructor requires it.` MemoryRecord constructor no longer requires an embedding. Logic is updated and a test added to show that embedding retrieval is functionally optional.
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
# Copyright (c) Microsoft. All rights reserved.
|
|
|
|
from typing import Optional
|
|
|
|
from numpy import ndarray
|
|
|
|
from semantic_kernel.memory.memory_record import MemoryRecord
|
|
|
|
|
|
class MemoryQueryResult:
|
|
is_reference: bool
|
|
external_source_name: Optional[str]
|
|
id: str
|
|
description: Optional[str]
|
|
text: Optional[str]
|
|
additional_metadata: Optional[str]
|
|
relevance: float
|
|
embedding: Optional[ndarray]
|
|
|
|
def __init__(
|
|
self,
|
|
is_reference: bool,
|
|
external_source_name: Optional[str],
|
|
id: str,
|
|
description: Optional[str],
|
|
text: Optional[str],
|
|
additional_metadata: Optional[str],
|
|
embedding: Optional[ndarray],
|
|
relevance: float,
|
|
) -> None:
|
|
"""Initialize a new instance of MemoryQueryResult.
|
|
|
|
Arguments:
|
|
is_reference {bool} -- Whether the record is a reference record.
|
|
external_source_name {Optional[str]} -- The name of the external source.
|
|
id {str} -- A unique for the record.
|
|
description {Optional[str]} -- The description of the record.
|
|
text {Optional[str]} -- The text of the record.
|
|
embedding {ndarray} -- The embedding of the record.
|
|
relevance {float} -- The relevance of the record to a known query.
|
|
|
|
Returns:
|
|
None -- None.
|
|
"""
|
|
self.is_reference = is_reference
|
|
self.external_source_name = external_source_name
|
|
self.id = id
|
|
self.description = description
|
|
self.text = text
|
|
self.additional_metadata = additional_metadata
|
|
self.relevance = relevance
|
|
self.embedding = embedding
|
|
|
|
@staticmethod
|
|
def from_memory_record(
|
|
record: MemoryRecord,
|
|
relevance: float,
|
|
) -> "MemoryQueryResult":
|
|
"""Create a new instance of MemoryQueryResult from a MemoryRecord.
|
|
|
|
Arguments:
|
|
record {MemoryRecord} -- The MemoryRecord to create the MemoryQueryResult from.
|
|
relevance {float} -- The relevance of the record to a known query.
|
|
|
|
Returns:
|
|
MemoryQueryResult -- The created MemoryQueryResult.
|
|
"""
|
|
return MemoryQueryResult(
|
|
is_reference=record._is_reference,
|
|
external_source_name=record._external_source_name,
|
|
id=record._id,
|
|
description=record._description,
|
|
text=record._text,
|
|
additional_metadata=record._additional_metadata,
|
|
embedding=record._embedding,
|
|
relevance=relevance,
|
|
)
|