GoodMem
ReferenceClient SDKsJava SDK

Java SDK

Java client SDK for GoodMem with Maven/Gradle support

  • API version:
    • Build date: 2025-11-20T00:19:55.021606826Z[Etc/UTC]
    • Generator version: 7.14.0-SNAPSHOT

No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

Automatically generated by the OpenAPI Generator

Requirements

Building the API client library requires:

  1. Java 1.8+
  2. Maven (3.8.3+)/Gradle (7.2+)

Installation

To install the API client library to your local Maven repository, simply execute:

mvn clean install

To deploy it to a remote Maven repository instead, configure the settings of the repository and execute:

mvn clean deploy

Refer to the OSSRH Guide for more information.

Maven users

Add this dependency to your project's POM:

<dependency>
  <groupId>ai.pairsys.goodmem</groupId>
  <artifactId>goodmem-client-java</artifactId>
  <version>1.0.0</version>
  <scope>compile</scope>
</dependency>

Gradle users

Add this dependency to your project's build file:

  repositories {
    mavenCentral()     // Needed if the 'goodmem-client-java' jar has been published to maven central.
    mavenLocal()       // Needed if the 'goodmem-client-java' jar has been published to the local maven repo.
  }

  dependencies {
     implementation "ai.pairsys.goodmem:goodmem-client-java:1.0.0"
  }

Others

At first generate the JAR by executing:

mvn clean package

Then manually install the following JARs:

  • target/goodmem-client-java-1.0.0.jar
  • target/lib/*.jar

Getting Started

Please follow the installation instruction and execute the following Java code:


// Import classes:
import ai.pairsys.goodmem.client.ApiClient;
import ai.pairsys.goodmem.client.ApiException;
import ai.pairsys.goodmem.client.Configuration;
import ai.pairsys.goodmem.client.auth.*;
import ai.pairsys.goodmem.client.model.*;
import ai.pairsys.goodmem.client.api.AdministrationApi;

public class Example {
  public static void main(String[] args) {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    defaultClient.setBasePath("http://localhost:8080");
    
    // Configure API key authorization: ApiKeyAuth
    ApiKeyAuth ApiKeyAuth = (ApiKeyAuth) defaultClient.getAuthentication("ApiKeyAuth");
    ApiKeyAuth.setApiKey("YOUR API KEY");
    // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
    //ApiKeyAuth.setApiKeyPrefix("Token");

    AdministrationApi apiInstance = new AdministrationApi(defaultClient);
    AdminDrainRequest adminDrainRequest = new AdminDrainRequest(); // AdminDrainRequest | 
    try {
      AdminDrainResponse result = apiInstance.drainServer(adminDrainRequest);
      System.out.println(result);
    } catch (ApiException e) {
      System.err.println("Exception when calling AdministrationApi#drainServer");
      System.err.println("Status code: " + e.getCode());
      System.err.println("Reason: " + e.getResponseBody());
      System.err.println("Response headers: " + e.getResponseHeaders());
      e.printStackTrace();
    }
  }
}

Streaming Memory Retrieval

The GoodMem Java client provides a StreamingClient class for real-time streaming memory retrieval. This is the recommended approach for memory retrieval operations.

Supported Formats

The StreamingClient supports two streaming formats:

  • NDJSON (application/x-ndjson) - Newline-delimited JSON (default, recommended)
  • SSE (text/event-stream) - Server-Sent Events

Basic Streaming with ChatPostProcessor

Use retrieveMemoryStreamChat() for streaming with automatic ChatPostProcessor configuration:

import ai.pairsys.goodmem.client.ApiClient;
import ai.pairsys.goodmem.client.StreamingClient;
import ai.pairsys.goodmem.client.StreamingClient.*;

import java.util.List;
import java.util.stream.Stream;

// Configure client
ApiClient apiClient = new ApiClient();
apiClient.setBasePath("http://localhost:8080");
apiClient.setApiKey("your-api-key");

// Create streaming client
StreamingClient streamingClient = new StreamingClient(apiClient);

// Stream with ChatPostProcessor (NDJSON format)
Stream<MemoryStreamResponse> stream = streamingClient.retrieveMemoryStreamChat(
    "your search query",
    List.of("space-uuid"),
    10,                                           // requested size
    true,                                         // fetch memory
    false,                                        // fetch memory content
    StreamingFormat.NDJSON,                       // format (NDJSON or SSE)
    "llm-uuid",                                   // LLM ID
    "reranker-uuid",                              // reranker ID
    0.5,                                          // relevance threshold
    0.3,                                          // LLM temperature
    10,                                           // max results
    true                                          // chronological resort
);

// Process events
stream.forEach(event -> {
    if (event.getAbstractReply() != null) {
        System.out.println("Abstract: " + event.getAbstractReply().getText());
    } else if (event.getRetrievedItem() != null
            && event.getRetrievedItem().getMemory() != null) {
        System.out.println("Memory: " + event.getRetrievedItem().getMemory());
    }
});

Advanced Streaming with Custom Post-Processor

Use retrieveMemoryStreamAdvanced() for custom post-processor configuration:

import java.util.HashMap;
import java.util.Map;

// Create advanced request
AdvancedMemoryStreamRequest request = new AdvancedMemoryStreamRequest(
    "your search query",
    List.of("space-uuid")
);
request.setRequestedSize(10);
request.setFetchMemory(true);
request.setFormat(StreamingFormat.NDJSON);  // or StreamingFormat.SSE

// Configure custom post-processor
request.setPostProcessorName("com.goodmem.retrieval.postprocess.ChatPostProcessorFactory");

Map<String, Object> config = new HashMap<>();
config.put("llm_id", "llm-uuid");
config.put("reranker_id", "reranker-uuid");
config.put("relevance_threshold", 0.5);
config.put("llm_temp", 0.3);
config.put("max_results", 10);
config.put("chronological_resort", true);
request.setPostProcessorConfig(config);

// Execute streaming
Stream<MemoryStreamResponse> stream = streamingClient.retrieveMemoryStreamAdvanced(request);

// Process events
stream.forEach(event -> {
    if (event.getAbstractReply() != null) {
        System.out.println("Abstract: " + event.getAbstractReply().getText());
    } else if (event.getRetrievedItem() != null) {
        System.out.println("Retrieved: " + event.getRetrievedItem());
    }
});

Choosing Between NDJSON and SSE

  • NDJSON (recommended): Simpler parsing, better for most use cases
  • SSE: Standard browser EventSource API compatible, useful for web applications

Documentation for API Endpoints

All URIs are relative to http://localhost:8080

ClassMethodHTTP requestDescription
AdministrationApidrainServerPOST /v1/admin:drainRequest the server to enter drain mode
AdministrationApipurgeBackgroundJobsPOST /v1/admin/background-jobs:purgePurge completed background jobs
AdministrationApireloadLicensePOST /v1/admin/license:reloadReload the active license from disk
ApiKeysApicreateApiKeyPOST /v1/apikeysCreate a new API key
ApiKeysApideleteApiKeyDELETE /v1/apikeys/{id}Delete an API key
ApiKeysApilistApiKeysGET /v1/apikeysList API keys
ApiKeysApiupdateApiKeyPUT /v1/apikeys/{id}Update an API key
EmbeddersApicreateEmbedderPOST /v1/embeddersCreate a new embedder
EmbeddersApideleteEmbedderDELETE /v1/embedders/{id}Delete an embedder
EmbeddersApigetEmbedderGET /v1/embedders/{id}Get an embedder by ID
EmbeddersApilistEmbeddersGET /v1/embeddersList embedders
EmbeddersApiupdateEmbedderPUT /v1/embedders/{id}Update an embedder
LlmsApicreateLLMPOST /v1/llmsCreate a new LLM
LlmsApideleteLLMDELETE /v1/llms/{id}Delete an LLM
LlmsApigetLLMGET /v1/llms/{id}Get an LLM by ID
LlmsApilistLLMsGET /v1/llmsList LLMs
LlmsApiupdateLLMPUT /v1/llms/{id}Update an LLM
MemoriesApibatchCreateMemoryPOST /v1/memories:batchCreateCreate multiple memories in a batch
MemoriesApibatchDeleteMemoryPOST /v1/memories:batchDeleteDelete multiple memories by ID
MemoriesApibatchGetMemoryPOST /v1/memories:batchGetGet multiple memories by ID
MemoriesApicreateMemoryPOST /v1/memoriesCreate a new memory
MemoriesApideleteMemoryDELETE /v1/memories/{id}Delete a memory
MemoriesApigetMemoryGET /v1/memories/{id}Get a memory by ID
MemoriesApigetMemoryContentGET /v1/memories/{id}/contentDownload memory content
MemoriesApilistMemoriesGET /v1/spaces/{spaceId}/memoriesList memories in a space
MemoriesApiretrieveMemoryGET /v1/memories:retrieveStream semantic memory retrieval
MemoriesApiretrieveMemoryAdvancedPOST /v1/memories:retrieveAdvanced semantic memory retrieval with JSON
RerankersApicreateRerankerPOST /v1/rerankersCreate a new reranker
RerankersApideleteRerankerDELETE /v1/rerankers/{id}Delete a reranker
RerankersApigetRerankerGET /v1/rerankers/{id}Get a reranker by ID
RerankersApilistRerankersGET /v1/rerankersList rerankers
RerankersApiupdateRerankerPUT /v1/rerankers/{id}Update a reranker
SpacesApicreateSpacePOST /v1/spacesCreate a new Space
SpacesApideleteSpaceDELETE /v1/spaces/{id}Delete a space
SpacesApigetSpaceGET /v1/spaces/{id}Get a space by ID
SpacesApilistSpacesGET /v1/spacesList spaces
SpacesApiupdateSpacePUT /v1/spaces/{id}Update a space
SystemApigetSystemInfoGET /v1/system/infoRetrieve server build metadata
SystemApiinitializeSystemPOST /v1/system/initInitialize the system
UsersApigetCurrentUserGET /v1/users/meGet current user profile
UsersApigetUserGET /v1/users/{id}Get a user by ID
UsersApigetUserByEmailGET /v1/users/email/{email}Get user by email address

Documentation for Models

Documentation for Authorization

Authentication schemes defined for the API:

ApiKeyAuth

  • Type: API key
  • API key parameter name: X-API-Key
  • Location: HTTP header

Recommendation

It's recommended to create an instance of ApiClient per thread in a multithreaded environment to avoid any potential issues.

Author