Documentation ¶
Index ¶
- Variables
- func CosineDistance(a, b []float32) (float32, error)
- func EuclideanDistance(a, b []float32) (float32, error)
- func RegisterDistanceFunc(name string, fn DistanceFunc)
- type Analyzer
- type DistanceFunc
- type Graph
- func (g *Graph[K]) Add(nodes ...Node[K]) error
- func (h *Graph[K]) Delete(key K) bool
- func (h *Graph[K]) DeleteWithLock(key K) bool
- func (g *Graph[K]) Dims() int
- func (h *Graph[K]) Export(w io.Writer) error
- func (h *Graph[K]) Import(r io.Reader) error
- func (h *Graph[K]) Len() int
- func (h *Graph[K]) Lookup(key K) (Vector, bool)
- func (h *Graph[K]) Search(near Vector, k int) ([]SearchResultNode[K], error)
- type Node
- type SavedGraph
- type SearchResultNode
- type Vector
Constants ¶
This section is empty.
Variables ¶
var (
ErrDifferentVectorLengths = fmt.Errorf("vectors have different lengths")
)
Functions ¶
func CosineDistance ¶
CosineDistance computes the cosine distance between two vectors.
func EuclideanDistance ¶
EuclideanDistance computes the Euclidean distance between two vectors.
func RegisterDistanceFunc ¶
func RegisterDistanceFunc(name string, fn DistanceFunc)
RegisterDistanceFunc registers a distance function with a name. A distance function must be registered here before a graph can be exported and imported.
Types ¶
type Analyzer ¶
Analyzer is a struct that holds a graph and provides methods for analyzing it. It offers no compatibility guarantee as the methods of measuring the graph's health with change with the implementation.
func (*Analyzer[T]) Connectivity ¶
Connectivity returns the average number of edges in the graph for each non-empty layer.
func (*Analyzer[T]) Topography ¶
Topography returns the number of nodes in each layer of the graph.
type DistanceFunc ¶
DistanceFunc is a function that computes the distance between two vectors.
type Graph ¶
type Graph[K cmp.Ordered] struct { // Distance is the distance function used to compare embeddings. Distance DistanceFunc // Rng is used for level generation. It may be set to a deterministic value // for reproducibility. Note that deterministic number generation can lead to // degenerate graphs when exposed to adversarial inputs. Rng *rand.Rand // M is the maximum number of neighbors to keep for each node. // A good default for OpenAI embeddings is 16. M int // Ml is the level generation factor. // E.g., for Ml = 0.25, each layer is 1/4 the size of the previous layer. Ml float64 // EfSearch is the number of nodes to consider in the search phase. // 20 is a reasonable default. Higher values improve search accuracy at // the expense of memory. EfSearch int // EfConstruction is the number of nodes to consider in the construction phase. // 16 is a reasonable default. Higher values improve graph quality at the // expense of memory. EfConstruction int // contains filtered or unexported fields }
Graph is a Hierarchical Navigable Small World graph. All public parameters must be set before adding nodes to the graph. K is cmp.Ordered instead of of comparable so that they can be sorted.
func NewGraph ¶
NewGraph returns a new graph with default parameters, roughly designed for storing OpenAI embeddings.
func (*Graph[K]) Add ¶
Add inserts nodes into the graph. If another node with the same ID exists, it is replaced.
func (*Graph[K]) Delete ¶
Delete removes a node from the graph by key. It tries to preserve the clustering properties of the graph by replenishing connectivity in the affected neighborhoods.
func (*Graph[K]) DeleteWithLock ¶
func (*Graph[K]) Dims ¶
Dims returns the number of dimensions in the graph, or 0 if the graph is empty.
func (*Graph[K]) Import ¶
Import reads the graph from a reader. T must implement io.ReaderFrom. The imported graph does not have to match the exported graph's parameters (except for dimensionality). The graph will converge onto the new parameters.
type SavedGraph ¶
SavedGraph is a wrapper around a graph that persists changes to a file upon calls to Save. It is more convenient but less powerful than calling Graph.Export and Graph.Import directly.
func LoadSavedGraph ¶
func LoadSavedGraph[K cmp.Ordered](path string) (*SavedGraph[K], error)
LoadSavedGraph opens a graph from a file, reads it, and returns it.
If the file does not exist (i.e. this is a new graph), the equivalent of NewGraph is returned.
It does not hold open a file descriptor, so SavedGraph can be forgotten without ever calling Save.
func (*SavedGraph[K]) Save ¶
func (g *SavedGraph[K]) Save() error
Save writes the graph to the file.