Skip to content

AIDotNet/Mem0.NET

Repository files navigation

Mem0.NET

NuGet Version NuGet Downloads License

δΈ­ζ–‡ζ–‡ζ‘£ | English

A .NET client library for Mem0, providing easy-to-use APIs for memory management in AI applications.

Features

  • πŸš€ Easy Integration - Simple and intuitive API design
  • πŸ“¦ Multiple .NET Versions - Supports .NET 6.0, 7.0, 8.0, and 9.0
  • πŸ”§ Dependency Injection - Built-in support for Microsoft.Extensions.DependencyInjection
  • 🌐 HTTP Client Management - Flexible HTTP client configuration
  • πŸ“ Full API Coverage - Complete implementation of Mem0 API
  • ⚑ Async/Await Support - Modern asynchronous programming patterns

Installation

Install the package via NuGet Package Manager:

dotnet add package Mem0.NET

Or via Package Manager Console:

Install-Package Mem0.NET

Quick Start

Basic Usage

using Mem0.NET;

// Initialize the client
var client = new Mem0Client("https://api.mem0.ai", "your-api-key");

// Create a memory
var createRequest = new MemoryCreateRequest
{
    Messages = new List<Message>
    {
        new Message { Role = "user", Content = "I love playing basketball" }
    },
    UserId = "user123"
};

var memories = await client.CreateMemoryAsync(createRequest);

// Search memories
var searchRequest = new SearchRequest
{
    Query = "What sports does the user like?",
    UserId = "user123"
};

var results = await client.SearchMemoriesAsync(searchRequest);

// Get all memories for a user
var userMemories = await client.GetAllMemoriesAsync(userId: "user123");

Dependency Injection

using Mem0.NET.Extensions;

// In your Program.cs or Startup.cs
services.AddMem0Client(options =>
{
    options.BaseUrl = "https://api.mem0.ai";
    options.ApiKey = "your-api-key";
});

// Use in your service
public class MyService
{
    private readonly Mem0Client _mem0Client;

    public MyService(Mem0Client mem0Client)
    {
        _mem0Client = mem0Client;
    }

    public async Task DoSomethingAsync()
    {
        var memories = await _mem0Client.GetAllMemoriesAsync();
        // Your logic here
    }
}

API Reference

Core Methods

Memory Management

  • CreateMemoryAsync(MemoryCreateRequest request) - Create new memories
  • GetAllMemoriesAsync(string? userId, string? runId, string? agentId) - Retrieve all memories
  • GetMemoryAsync(string memoryId) - Get a specific memory by ID
  • UpdateMemoryAsync(string memoryId, Dictionary<string, object> updatedMemory) - Update a memory
  • DeleteMemoryAsync(string memoryId) - Delete a specific memory
  • DeleteAllMemoriesAsync(string? userId, string? runId, string? agentId) - Delete all memories

Search and History

  • SearchMemoriesAsync(SearchRequest request) - Search memories with queries
  • GetMemoryHistoryAsync(string memoryId) - Get memory history

Configuration

  • ConfigureAsync(Dictionary<string, object> config) - Configure Mem0 settings
  • ResetMemoryAsync() - Reset all memories

Data Models

MemoryCreateRequest

public class MemoryCreateRequest
{
    public List<Message> Messages { get; set; }
    public string? UserId { get; set; }
    public string? AgentId { get; set; }
    public string? RunId { get; set; }
    public Dictionary<string, object>? Metadata { get; set; }
}

SearchRequest

public class SearchRequest
{
    public string Query { get; set; }
    public string? UserId { get; set; }
    public string? RunId { get; set; }
    public string? AgentId { get; set; }
    public Dictionary<string, object>? Filters { get; set; }
}

Memory

public class Memory
{
    public string Id { get; set; }
    public string Content { get; set; }
    public string? UserId { get; set; }
    public string? AgentId { get; set; }
    public string? RunId { get; set; }
    public Dictionary<string, object>? Metadata { get; set; }
    public DateTime? CreatedAt { get; set; }
    public DateTime? UpdatedAt { get; set; }
}

Examples

Creating Memories with Metadata

var createRequest = new MemoryCreateRequest
{
    Messages = new List<Message>
    {
        new Message { Role = "user", Content = "I prefer working in the morning" },
        new Message { Role = "assistant", Content = "I'll remember your morning preference" }
    },
    UserId = "user123",
    Metadata = new Dictionary<string, object>
    {
        ["category"] = "preference",
        ["priority"] = "high"
    }
};

var memories = await client.CreateMemoryAsync(createRequest);

Advanced Search with Filters

var searchRequest = new SearchRequest
{
    Query = "user preferences",
    UserId = "user123",
    Filters = new Dictionary<string, object>
    {
        ["category"] = "preference",
        ["priority"] = "high"
    }
};

var results = await client.SearchMemoriesAsync(searchRequest);

Custom HTTP Client Configuration

var httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromSeconds(30);

var client = new Mem0Client("https://api.mem0.ai", "your-api-key", httpClient);

Error Handling

The client throws exceptions for HTTP errors. Always wrap your calls in try-catch blocks:

try
{
    var memories = await client.GetAllMemoriesAsync();
}
catch (HttpRequestException ex)
{
    // Handle HTTP errors
    Console.WriteLine($"HTTP Error: {ex.Message}");
}
catch (Exception ex)
{
    // Handle other errors
    Console.WriteLine($"Error: {ex.Message}");
}

Contributing

We welcome contributions! Please see our Contributing Guidelines for details.

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for your changes
  5. Submit a pull request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

Changelog

See CHANGELOG.md for a list of changes and updates.


Made with ❀️ by AIDotNet

About

Mem0.NET Client SDK

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages