Go SDK

go get github.com/mnemosyne/sdk-go

Construct

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.