Go SDK
go get github.com/mnemosyne/sdk-goConstruct
package main
import (
"context"
"log"
mnemo "github.com/mnemosyne/sdk-go/mnemo"
)
func main() {
client := mnemo.New(mnemo.Config{
BaseURL: "http://localhost:3000",
APIKey: "mns_live_xxx",
WorkspaceID: "demo",
})
ctx := context.Background()
// Recall
result, err := client.Recall(ctx, &mnemo.RecallRequest{
Query: "coffee preferences",
TopK: 3,
})
if err != nil { log.Fatal(err) }
for _, hit := range result.Hits {
log.Printf("%.3f %s", hit.Score, hit.Statement)
}
// Remember
fact, err := client.Facts.Create(ctx, &mnemo.FactInput{
Content: "user prefers espresso",
Tags: []string{"coffee"},
})
if err != nil { log.Fatal(err) }
// Forget
if err := client.Facts.Forget(ctx, fact.ID, "user switched to tea"); err != nil {
log.Fatal(err)
}
}Typed errors
import "errors"
if errors.Is(err, mnemo.ErrConflictDetected) {
var ce *mnemo.ConflictError
errors.As(err, &ce)
log.Println("Conflicts:", ce.Conflicts)
}Streaming pagination
iter := client.Facts.List(ctx, &mnemo.ListFactsOptions{PageSize: 100})
for iter.Next() {
fact := iter.Current()
process(fact)
}
if err := iter.Err(); err != nil { log.Fatal(err) }Why this style
We follow the conventions of the AWS SDK v2 and the Stripe Go SDK: a config struct, resource subclients, context-first methods, and explicit iterators. If you’ve used those, this will feel familiar.