mirror of
				https://github.com/amithkoujalgi/ollama4j.git
				synced 2025-11-03 18:10:42 +01:00 
			
		
		
		
	Compare commits
	
		
			32 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					78a5eedc8f | ||
| 
						 | 
					364f961ee2 | ||
| 
						 | 
					b21aa6add2 | ||
| 
						 | 
					ec4abd1c2d | ||
| 
						 | 
					9900ae92fb | ||
| 
						 | 
					fa20daf6e5 | ||
| 
						 | 
					44949c0559 | ||
| 
						 | 
					e88711a017 | ||
| 
						 | 
					32169ded18 | ||
| 
						 | 
					4b2d566fd9 | ||
| 
						 | 
					fb4b7a7ce5 | ||
| 
						 | 
					18f27775b0 | ||
| 
						 | 
					cb462ad05a | ||
| 
						 | 
					1eec22ca1a | ||
| 
						 | 
					c1f3c51f88 | ||
| 
						 | 
					7dd556293f | ||
| 
						 | 
					ee50131ce4 | ||
| 
						 | 
					2cd47dbfaa | ||
| 
						 | 
					e5296c1067 | ||
| 
						 | 
					0f00f05e3d | ||
| 
						 | 
					976a3b82e5 | ||
| 
						 | 
					ba26d620c4 | ||
| 
						 | 
					e45246a767 | ||
| 
						 | 
					7336668f0c | ||
| 
						 | 
					11701fb222 | ||
| 
						 | 
					b1ec12c4e9 | ||
| 
						 | 
					d0b0a0fc97 | ||
| 
						 | 
					20774fca6b | ||
| 
						 | 
					9c46b510d8 | ||
| 
						 | 
					9d887b60a8 | ||
| 
						 | 
					63d4de4e24 | ||
| 
						 | 
					a10692e2f1 | 
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							@@ -67,7 +67,7 @@ In your Maven project, add this dependency:
 | 
				
			|||||||
<dependency>
 | 
					<dependency>
 | 
				
			||||||
    <groupId>io.github.amithkoujalgi</groupId>
 | 
					    <groupId>io.github.amithkoujalgi</groupId>
 | 
				
			||||||
    <artifactId>ollama4j</artifactId>
 | 
					    <artifactId>ollama4j</artifactId>
 | 
				
			||||||
    <version>1.0.47</version>
 | 
					    <version>1.0.57</version>
 | 
				
			||||||
</dependency>
 | 
					</dependency>
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -125,15 +125,15 @@ Actions CI workflow.
 | 
				
			|||||||
- [x] Update request body creation with Java objects
 | 
					- [x] Update request body creation with Java objects
 | 
				
			||||||
- [ ] Async APIs for images
 | 
					- [ ] Async APIs for images
 | 
				
			||||||
- [ ] Add custom headers to requests
 | 
					- [ ] Add custom headers to requests
 | 
				
			||||||
- [ ] Add additional params for `ask` APIs such as:
 | 
					- [x] Add additional params for `ask` APIs such as:
 | 
				
			||||||
    - [x] `options`: additional model parameters for the Modelfile such as `temperature` -
 | 
					    - [x] `options`: additional model parameters for the Modelfile such as `temperature` -
 | 
				
			||||||
      Supported [params](https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values).
 | 
					      Supported [params](https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values).
 | 
				
			||||||
    - [ ] `system`: system prompt to (overrides what is defined in the Modelfile)
 | 
					    - [x] `system`: system prompt to (overrides what is defined in the Modelfile)
 | 
				
			||||||
    - [ ] `template`: the full prompt or prompt template (overrides what is defined in the Modelfile)
 | 
					    - [x] `template`: the full prompt or prompt template (overrides what is defined in the Modelfile)
 | 
				
			||||||
    - [ ] `context`: the context parameter returned from a previous request, which can be used to keep a
 | 
					    - [x] `context`: the context parameter returned from a previous request, which can be used to keep a
 | 
				
			||||||
      short
 | 
					      short
 | 
				
			||||||
      conversational memory
 | 
					      conversational memory
 | 
				
			||||||
    - [ ] `stream`: Add support for streaming responses from the model
 | 
					    - [x] `stream`: Add support for streaming responses from the model
 | 
				
			||||||
- [ ] Add test cases
 | 
					- [ ] Add test cases
 | 
				
			||||||
- [ ] Handle exceptions better (maybe throw more appropriate exceptions)
 | 
					- [ ] Handle exceptions better (maybe throw more appropriate exceptions)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,7 +42,7 @@ public class AskPhi {
 | 
				
			|||||||
                        .addSeparator()
 | 
					                        .addSeparator()
 | 
				
			||||||
                        .add("How do I read a file in Go and print its contents to stdout?");
 | 
					                        .add("How do I read a file in Go and print its contents to stdout?");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        OllamaResult response = ollamaAPI.generate(model, promptBuilder.build());
 | 
					        OllamaResult response = ollamaAPI.generate(model, promptBuilder.build(), new OptionsBuilder().build());
 | 
				
			||||||
        System.out.println(response.getResponse());
 | 
					        System.out.println(response.getResponse());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								pom.xml
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <groupId>io.github.amithkoujalgi</groupId>
 | 
					    <groupId>io.github.amithkoujalgi</groupId>
 | 
				
			||||||
    <artifactId>ollama4j</artifactId>
 | 
					    <artifactId>ollama4j</artifactId>
 | 
				
			||||||
    <version>1.0.56</version>
 | 
					    <version>1.0.64</version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <name>Ollama4j</name>
 | 
					    <name>Ollama4j</name>
 | 
				
			||||||
    <description>Java library for interacting with Ollama API.</description>
 | 
					    <description>Java library for interacting with Ollama API.</description>
 | 
				
			||||||
@@ -39,7 +39,7 @@
 | 
				
			|||||||
        <connection>scm:git:git@github.com:amithkoujalgi/ollama4j.git</connection>
 | 
					        <connection>scm:git:git@github.com:amithkoujalgi/ollama4j.git</connection>
 | 
				
			||||||
        <developerConnection>scm:git:https://github.com/amithkoujalgi/ollama4j.git</developerConnection>
 | 
					        <developerConnection>scm:git:https://github.com/amithkoujalgi/ollama4j.git</developerConnection>
 | 
				
			||||||
        <url>https://github.com/amithkoujalgi/ollama4j</url>
 | 
					        <url>https://github.com/amithkoujalgi/ollama4j</url>
 | 
				
			||||||
        <tag>v1.0.56</tag>
 | 
					        <tag>v1.0.64</tag>
 | 
				
			||||||
    </scm>
 | 
					    </scm>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <build>
 | 
					    <build>
 | 
				
			||||||
@@ -99,7 +99,7 @@
 | 
				
			|||||||
                <configuration>
 | 
					                <configuration>
 | 
				
			||||||
                    <skipTests>${skipUnitTests}</skipTests>
 | 
					                    <skipTests>${skipUnitTests}</skipTests>
 | 
				
			||||||
                    <includes>
 | 
					                    <includes>
 | 
				
			||||||
                        <include>**/unittests/*.java</include>
 | 
					                        <include>**/unittests/**/*.java</include>
 | 
				
			||||||
                    </includes>
 | 
					                    </includes>
 | 
				
			||||||
                </configuration>
 | 
					                </configuration>
 | 
				
			||||||
            </plugin>
 | 
					            </plugin>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,10 +6,11 @@ import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatMessage;
 | 
				
			|||||||
import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestBuilder;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestBuilder;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestModel;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestModel;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatResult;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatResult;
 | 
				
			||||||
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.embeddings.OllamaEmbeddingResponseModel;
 | 
				
			||||||
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.embeddings.OllamaEmbeddingsRequestModel;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.generate.OllamaGenerateRequestModel;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.generate.OllamaGenerateRequestModel;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.request.CustomModelFileContentsRequest;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.request.CustomModelFileContentsRequest;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.request.CustomModelFilePathRequest;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.request.CustomModelFilePathRequest;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.request.ModelEmbeddingsRequest;
 | 
					 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.request.ModelRequest;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.request.ModelRequest;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.request.OllamaChatEndpointCaller;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.request.OllamaChatEndpointCaller;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.request.OllamaGenerateEndpointCaller;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.request.OllamaGenerateEndpointCaller;
 | 
				
			||||||
@@ -313,8 +314,18 @@ public class OllamaAPI {
 | 
				
			|||||||
   */
 | 
					   */
 | 
				
			||||||
  public List<Double> generateEmbeddings(String model, String prompt)
 | 
					  public List<Double> generateEmbeddings(String model, String prompt)
 | 
				
			||||||
      throws IOException, InterruptedException, OllamaBaseException {
 | 
					      throws IOException, InterruptedException, OllamaBaseException {
 | 
				
			||||||
 | 
					        return generateEmbeddings(new OllamaEmbeddingsRequestModel(model, prompt));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					   * Generate embeddings using a {@link OllamaEmbeddingsRequestModel}.
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   * @param modelRequest request for '/api/embeddings' endpoint
 | 
				
			||||||
 | 
					   * @return embeddings
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public List<Double> generateEmbeddings(OllamaEmbeddingsRequestModel modelRequest) throws IOException, InterruptedException, OllamaBaseException{
 | 
				
			||||||
    URI uri = URI.create(this.host + "/api/embeddings");
 | 
					    URI uri = URI.create(this.host + "/api/embeddings");
 | 
				
			||||||
    String jsonData = new ModelEmbeddingsRequest(model, prompt).toString();
 | 
					    String jsonData = modelRequest.toString();
 | 
				
			||||||
    HttpClient httpClient = HttpClient.newHttpClient();
 | 
					    HttpClient httpClient = HttpClient.newHttpClient();
 | 
				
			||||||
    HttpRequest.Builder requestBuilder =
 | 
					    HttpRequest.Builder requestBuilder =
 | 
				
			||||||
        getRequestBuilderDefault(uri)
 | 
					        getRequestBuilderDefault(uri)
 | 
				
			||||||
@@ -325,8 +336,8 @@ public class OllamaAPI {
 | 
				
			|||||||
    int statusCode = response.statusCode();
 | 
					    int statusCode = response.statusCode();
 | 
				
			||||||
    String responseBody = response.body();
 | 
					    String responseBody = response.body();
 | 
				
			||||||
    if (statusCode == 200) {
 | 
					    if (statusCode == 200) {
 | 
				
			||||||
      EmbeddingResponse embeddingResponse =
 | 
					      OllamaEmbeddingResponseModel embeddingResponse =
 | 
				
			||||||
          Utils.getObjectMapper().readValue(responseBody, EmbeddingResponse.class);
 | 
					          Utils.getObjectMapper().readValue(responseBody, OllamaEmbeddingResponseModel.class);
 | 
				
			||||||
      return embeddingResponse.getEmbedding();
 | 
					      return embeddingResponse.getEmbedding();
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      throw new OllamaBaseException(statusCode + " - " + responseBody);
 | 
					      throw new OllamaBaseException(statusCode + " - " + responseBody);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
package io.github.amithkoujalgi.ollama4j.core.models;
 | 
					package io.github.amithkoujalgi.ollama4j.core.models.embeddings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.fasterxml.jackson.annotation.JsonProperty;
 | 
					import com.fasterxml.jackson.annotation.JsonProperty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -7,7 +7,7 @@ import lombok.Data;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@SuppressWarnings("unused")
 | 
					@SuppressWarnings("unused")
 | 
				
			||||||
@Data
 | 
					@Data
 | 
				
			||||||
public class EmbeddingResponse {
 | 
					public class OllamaEmbeddingResponseModel {
 | 
				
			||||||
    @JsonProperty("embedding")
 | 
					    @JsonProperty("embedding")
 | 
				
			||||||
    private List<Double> embedding;
 | 
					    private List<Double> embedding;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					package io.github.amithkoujalgi.ollama4j.core.models.embeddings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.amithkoujalgi.ollama4j.core.utils.Options;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class OllamaEmbeddingsRequestBuilder {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private OllamaEmbeddingsRequestBuilder(String model, String prompt){
 | 
				
			||||||
 | 
					        request = new OllamaEmbeddingsRequestModel(model, prompt);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private OllamaEmbeddingsRequestModel request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static OllamaEmbeddingsRequestBuilder getInstance(String model, String prompt){
 | 
				
			||||||
 | 
					        return new OllamaEmbeddingsRequestBuilder(model, prompt);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public OllamaEmbeddingsRequestModel build(){
 | 
				
			||||||
 | 
					        return request;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public OllamaEmbeddingsRequestBuilder withOptions(Options options){
 | 
				
			||||||
 | 
					        this.request.setOptions(options.getOptionsMap());
 | 
				
			||||||
 | 
					        return this;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public OllamaEmbeddingsRequestBuilder withKeepAlive(String keepAlive){
 | 
				
			||||||
 | 
					        this.request.setKeepAlive(keepAlive);
 | 
				
			||||||
 | 
					        return this;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					package io.github.amithkoujalgi.ollama4j.core.models.embeddings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static io.github.amithkoujalgi.ollama4j.core.utils.Utils.getObjectMapper;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import com.fasterxml.jackson.annotation.JsonProperty;
 | 
				
			||||||
 | 
					import com.fasterxml.jackson.core.JsonProcessingException;
 | 
				
			||||||
 | 
					import lombok.Data;
 | 
				
			||||||
 | 
					import lombok.NoArgsConstructor;
 | 
				
			||||||
 | 
					import lombok.NonNull;
 | 
				
			||||||
 | 
					import lombok.RequiredArgsConstructor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Data
 | 
				
			||||||
 | 
					@RequiredArgsConstructor
 | 
				
			||||||
 | 
					@NoArgsConstructor
 | 
				
			||||||
 | 
					public class OllamaEmbeddingsRequestModel {
 | 
				
			||||||
 | 
					  @NonNull
 | 
				
			||||||
 | 
					  private String model;
 | 
				
			||||||
 | 
					  @NonNull
 | 
				
			||||||
 | 
					  private String prompt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected Map<String, Object> options;
 | 
				
			||||||
 | 
					  @JsonProperty(value = "keep_alive")
 | 
				
			||||||
 | 
					  private String keepAlive;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @Override
 | 
				
			||||||
 | 
					  public String toString() {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      return getObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this);
 | 
				
			||||||
 | 
					    } catch (JsonProcessingException e) {
 | 
				
			||||||
 | 
					      throw new RuntimeException(e);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
package io.github.amithkoujalgi.ollama4j.core.models.request;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import static io.github.amithkoujalgi.ollama4j.core.utils.Utils.getObjectMapper;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.fasterxml.jackson.core.JsonProcessingException;
 | 
					 | 
				
			||||||
import lombok.AllArgsConstructor;
 | 
					 | 
				
			||||||
import lombok.Data;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@Data
 | 
					 | 
				
			||||||
@AllArgsConstructor
 | 
					 | 
				
			||||||
public class ModelEmbeddingsRequest {
 | 
					 | 
				
			||||||
  private String model;
 | 
					 | 
				
			||||||
  private String prompt;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Override
 | 
					 | 
				
			||||||
  public String toString() {
 | 
					 | 
				
			||||||
    try {
 | 
					 | 
				
			||||||
      return getObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this);
 | 
					 | 
				
			||||||
    } catch (JsonProcessingException e) {
 | 
					 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -8,57 +8,72 @@ package io.github.amithkoujalgi.ollama4j.core.types;
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
@SuppressWarnings("ALL")
 | 
					@SuppressWarnings("ALL")
 | 
				
			||||||
public class OllamaModelType {
 | 
					public class OllamaModelType {
 | 
				
			||||||
 | 
					  public static final String GEMMA = "gemma";
 | 
				
			||||||
  public static final String LLAMA2 = "llama2";
 | 
					  public static final String LLAMA2 = "llama2";
 | 
				
			||||||
  public static final String MISTRAL = "mistral";
 | 
					  public static final String MISTRAL = "mistral";
 | 
				
			||||||
  public static final String LLAVA = "llava";
 | 
					 | 
				
			||||||
  public static final String MIXTRAL = "mixtral";
 | 
					  public static final String MIXTRAL = "mixtral";
 | 
				
			||||||
  public static final String STARLING_LM = "starling-lm";
 | 
					  public static final String LLAVA = "llava";
 | 
				
			||||||
  public static final String NEURAL_CHAT = "neural-chat";
 | 
					  public static final String NEURAL_CHAT = "neural-chat";
 | 
				
			||||||
  public static final String CODELLAMA = "codellama";
 | 
					  public static final String CODELLAMA = "codellama";
 | 
				
			||||||
  public static final String LLAMA2_UNCENSORED = "llama2-uncensored";
 | 
					 | 
				
			||||||
  public static final String DOLPHIN_MIXTRAL = "dolphin-mixtral";
 | 
					  public static final String DOLPHIN_MIXTRAL = "dolphin-mixtral";
 | 
				
			||||||
 | 
					  public static final String MISTRAL_OPENORCA = "mistral-openorca";
 | 
				
			||||||
 | 
					  public static final String LLAMA2_UNCENSORED = "llama2-uncensored";
 | 
				
			||||||
 | 
					  public static final String PHI = "phi";
 | 
				
			||||||
  public static final String ORCA_MINI = "orca-mini";
 | 
					  public static final String ORCA_MINI = "orca-mini";
 | 
				
			||||||
 | 
					  public static final String DEEPSEEK_CODER = "deepseek-coder";
 | 
				
			||||||
 | 
					  public static final String DOLPHIN_MISTRAL = "dolphin-mistral";
 | 
				
			||||||
  public static final String VICUNA = "vicuna";
 | 
					  public static final String VICUNA = "vicuna";
 | 
				
			||||||
  public static final String WIZARD_VICUNA_UNCENSORED = "wizard-vicuna-uncensored";
 | 
					  public static final String WIZARD_VICUNA_UNCENSORED = "wizard-vicuna-uncensored";
 | 
				
			||||||
  public static final String PHIND_CODELLAMA = "phind-codellama";
 | 
					 | 
				
			||||||
  public static final String PHI = "phi";
 | 
					 | 
				
			||||||
  public static final String ZEPHYR = "zephyr";
 | 
					  public static final String ZEPHYR = "zephyr";
 | 
				
			||||||
 | 
					  public static final String OPENHERMES = "openhermes";
 | 
				
			||||||
 | 
					  public static final String QWEN = "qwen";
 | 
				
			||||||
  public static final String WIZARDCODER = "wizardcoder";
 | 
					  public static final String WIZARDCODER = "wizardcoder";
 | 
				
			||||||
  public static final String MISTRAL_OPENORCA = "mistral-openorca";
 | 
					 | 
				
			||||||
  public static final String NOUS_HERMES = "nous-hermes";
 | 
					 | 
				
			||||||
  public static final String DEEPSEEK_CODER = "deepseek-coder";
 | 
					 | 
				
			||||||
  public static final String WIZARD_MATH = "wizard-math";
 | 
					 | 
				
			||||||
  public static final String LLAMA2_CHINESE = "llama2-chinese";
 | 
					  public static final String LLAMA2_CHINESE = "llama2-chinese";
 | 
				
			||||||
  public static final String FALCON = "falcon";
 | 
					  public static final String TINYLLAMA = "tinyllama";
 | 
				
			||||||
  public static final String ORCA2 = "orca2";
 | 
					  public static final String PHIND_CODELLAMA = "phind-codellama";
 | 
				
			||||||
  public static final String STABLE_BELUGA = "stable-beluga";
 | 
					 | 
				
			||||||
  public static final String CODEUP = "codeup";
 | 
					 | 
				
			||||||
  public static final String EVERYTHINGLM = "everythinglm";
 | 
					 | 
				
			||||||
  public static final String MEDLLAMA2 = "medllama2";
 | 
					 | 
				
			||||||
  public static final String WIZARDLM_UNCENSORED = "wizardlm-uncensored";
 | 
					 | 
				
			||||||
  public static final String STARCODER = "starcoder";
 | 
					 | 
				
			||||||
  public static final String DOLPHIN22_MISTRAL = "dolphin2.2-mistral";
 | 
					 | 
				
			||||||
  public static final String OPENCHAT = "openchat";
 | 
					  public static final String OPENCHAT = "openchat";
 | 
				
			||||||
  public static final String WIZARD_VICUNA = "wizard-vicuna";
 | 
					  public static final String ORCA2 = "orca2";
 | 
				
			||||||
  public static final String OPENHERMES25_MISTRAL = "openhermes2.5-mistral";
 | 
					  public static final String FALCON = "falcon";
 | 
				
			||||||
  public static final String OPEN_ORCA_PLATYPUS2 = "open-orca-platypus2";
 | 
					  public static final String WIZARD_MATH = "wizard-math";
 | 
				
			||||||
 | 
					  public static final String TINYDOLPHIN = "tinydolphin";
 | 
				
			||||||
 | 
					  public static final String NOUS_HERMES = "nous-hermes";
 | 
				
			||||||
  public static final String YI = "yi";
 | 
					  public static final String YI = "yi";
 | 
				
			||||||
  public static final String YARN_MISTRAL = "yarn-mistral";
 | 
					  public static final String DOLPHIN_PHI = "dolphin-phi";
 | 
				
			||||||
  public static final String SAMANTHA_MISTRAL = "samantha-mistral";
 | 
					  public static final String STARLING_LM = "starling-lm";
 | 
				
			||||||
  public static final String SQLCODER = "sqlcoder";
 | 
					  public static final String STARCODER = "starcoder";
 | 
				
			||||||
  public static final String YARN_LLAMA2 = "yarn-llama2";
 | 
					  public static final String CODEUP = "codeup";
 | 
				
			||||||
  public static final String MEDITRON = "meditron";
 | 
					  public static final String MEDLLAMA2 = "medllama2";
 | 
				
			||||||
  public static final String STABLELM_ZEPHYR = "stablelm-zephyr";
 | 
					  public static final String STABLE_CODE = "stable-code";
 | 
				
			||||||
  public static final String OPENHERMES2_MISTRAL = "openhermes2-mistral";
 | 
					  public static final String WIZARDLM_UNCENSORED = "wizardlm-uncensored";
 | 
				
			||||||
  public static final String DEEPSEEK_LLM = "deepseek-llm";
 | 
					 | 
				
			||||||
  public static final String MISTRALLITE = "mistrallite";
 | 
					 | 
				
			||||||
  public static final String DOLPHIN21_MISTRAL = "dolphin2.1-mistral";
 | 
					 | 
				
			||||||
  public static final String WIZARDLM = "wizardlm";
 | 
					 | 
				
			||||||
  public static final String CODEBOOGA = "codebooga";
 | 
					 | 
				
			||||||
  public static final String MAGICODER = "magicoder";
 | 
					 | 
				
			||||||
  public static final String GOLIATH = "goliath";
 | 
					 | 
				
			||||||
  public static final String NEXUSRAVEN = "nexusraven";
 | 
					 | 
				
			||||||
  public static final String ALFRED = "alfred";
 | 
					 | 
				
			||||||
  public static final String XWINLM = "xwinlm";
 | 
					 | 
				
			||||||
  public static final String BAKLLAVA = "bakllava";
 | 
					  public static final String BAKLLAVA = "bakllava";
 | 
				
			||||||
 | 
					  public static final String EVERYTHINGLM = "everythinglm";
 | 
				
			||||||
 | 
					  public static final String SOLAR = "solar";
 | 
				
			||||||
 | 
					  public static final String STABLE_BELUGA = "stable-beluga";
 | 
				
			||||||
 | 
					  public static final String SQLCODER = "sqlcoder";
 | 
				
			||||||
 | 
					  public static final String YARN_MISTRAL = "yarn-mistral";
 | 
				
			||||||
 | 
					  public static final String NOUS_HERMES2_MIXTRAL = "nous-hermes2-mixtral";
 | 
				
			||||||
 | 
					  public static final String SAMANTHA_MISTRAL = "samantha-mistral";
 | 
				
			||||||
 | 
					  public static final String STABLELM_ZEPHYR = "stablelm-zephyr";
 | 
				
			||||||
 | 
					  public static final String MEDITRON = "meditron";
 | 
				
			||||||
 | 
					  public static final String WIZARD_VICUNA = "wizard-vicuna";
 | 
				
			||||||
 | 
					  public static final String STABLELM2 = "stablelm2";
 | 
				
			||||||
 | 
					  public static final String MAGICODER = "magicoder";
 | 
				
			||||||
 | 
					  public static final String YARN_LLAMA2 = "yarn-llama2";
 | 
				
			||||||
 | 
					  public static final String NOUS_HERMES2 = "nous-hermes2";
 | 
				
			||||||
 | 
					  public static final String DEEPSEEK_LLM = "deepseek-llm";
 | 
				
			||||||
 | 
					  public static final String LLAMA_PRO = "llama-pro";
 | 
				
			||||||
 | 
					  public static final String OPEN_ORCA_PLATYPUS2 = "open-orca-platypus2";
 | 
				
			||||||
 | 
					  public static final String CODEBOOGA = "codebooga";
 | 
				
			||||||
 | 
					  public static final String MISTRALLITE = "mistrallite";
 | 
				
			||||||
 | 
					  public static final String NEXUSRAVEN = "nexusraven";
 | 
				
			||||||
 | 
					  public static final String GOLIATH = "goliath";
 | 
				
			||||||
 | 
					  public static final String NOMIC_EMBED_TEXT = "nomic-embed-text";
 | 
				
			||||||
 | 
					  public static final String NOTUX = "notux";
 | 
				
			||||||
 | 
					  public static final String ALFRED = "alfred";
 | 
				
			||||||
 | 
					  public static final String MEGADOLPHIN = "megadolphin";
 | 
				
			||||||
 | 
					  public static final String WIZARDLM = "wizardlm";
 | 
				
			||||||
 | 
					  public static final String XWINLM = "xwinlm";
 | 
				
			||||||
 | 
					  public static final String NOTUS = "notus";
 | 
				
			||||||
 | 
					  public static final String DUCKDB_NSQL = "duckdb-nsql";
 | 
				
			||||||
 | 
					  public static final String ALL_MINILM = "all-minilm";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,8 @@ import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatMessageRole;
 | 
				
			|||||||
import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestBuilder;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestBuilder;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestModel;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestModel;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatResult;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatResult;
 | 
				
			||||||
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.embeddings.OllamaEmbeddingsRequestModel;
 | 
				
			||||||
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.embeddings.OllamaEmbeddingsRequestBuilder;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
 | 
					import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
@@ -61,7 +63,7 @@ class TestRealAPIs {
 | 
				
			|||||||
    } catch (HttpConnectTimeoutException e) {
 | 
					    } catch (HttpConnectTimeoutException e) {
 | 
				
			||||||
      fail(e.getMessage());
 | 
					      fail(e.getMessage());
 | 
				
			||||||
    } catch (Exception e) {
 | 
					    } catch (Exception e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -73,7 +75,7 @@ class TestRealAPIs {
 | 
				
			|||||||
      assertNotNull(ollamaAPI.listModels());
 | 
					      assertNotNull(ollamaAPI.listModels());
 | 
				
			||||||
      ollamaAPI.listModels().forEach(System.out::println);
 | 
					      ollamaAPI.listModels().forEach(System.out::println);
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException | URISyntaxException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException | URISyntaxException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -88,7 +90,7 @@ class TestRealAPIs {
 | 
				
			|||||||
              .anyMatch(model -> model.getModel().equalsIgnoreCase(config.getModel()));
 | 
					              .anyMatch(model -> model.getModel().equalsIgnoreCase(config.getModel()));
 | 
				
			||||||
      assertTrue(found);
 | 
					      assertTrue(found);
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException | URISyntaxException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException | URISyntaxException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -101,7 +103,7 @@ class TestRealAPIs {
 | 
				
			|||||||
      assertNotNull(modelDetails);
 | 
					      assertNotNull(modelDetails);
 | 
				
			||||||
      System.out.println(modelDetails);
 | 
					      System.out.println(modelDetails);
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException | URISyntaxException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException | URISyntaxException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -119,7 +121,7 @@ class TestRealAPIs {
 | 
				
			|||||||
      assertNotNull(result.getResponse());
 | 
					      assertNotNull(result.getResponse());
 | 
				
			||||||
      assertFalse(result.getResponse().isEmpty());
 | 
					      assertFalse(result.getResponse().isEmpty());
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -145,7 +147,7 @@ class TestRealAPIs {
 | 
				
			|||||||
      assertFalse(result.getResponse().isEmpty());
 | 
					      assertFalse(result.getResponse().isEmpty());
 | 
				
			||||||
      assertEquals(sb.toString().trim(), result.getResponse().trim());
 | 
					      assertEquals(sb.toString().trim(), result.getResponse().trim());
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -163,7 +165,7 @@ class TestRealAPIs {
 | 
				
			|||||||
      assertNotNull(result.getResponse());
 | 
					      assertNotNull(result.getResponse());
 | 
				
			||||||
      assertFalse(result.getResponse().isEmpty());
 | 
					      assertFalse(result.getResponse().isEmpty());
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -183,7 +185,7 @@ class TestRealAPIs {
 | 
				
			|||||||
      assertFalse(chatResult.getResponse().isBlank());
 | 
					      assertFalse(chatResult.getResponse().isBlank());
 | 
				
			||||||
      assertEquals(4,chatResult.getChatHistory().size());
 | 
					      assertEquals(4,chatResult.getChatHistory().size());
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -205,7 +207,7 @@ class TestRealAPIs {
 | 
				
			|||||||
      assertTrue(chatResult.getResponse().startsWith("NI"));
 | 
					      assertTrue(chatResult.getResponse().startsWith("NI"));
 | 
				
			||||||
      assertEquals(3, chatResult.getChatHistory().size());
 | 
					      assertEquals(3, chatResult.getChatHistory().size());
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -230,7 +232,7 @@ class TestRealAPIs {
 | 
				
			|||||||
      assertNotNull(chatResult);
 | 
					      assertNotNull(chatResult);
 | 
				
			||||||
      assertEquals(sb.toString().trim(), chatResult.getResponse().trim());
 | 
					      assertEquals(sb.toString().trim(), chatResult.getResponse().trim());
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -261,7 +263,7 @@ class TestRealAPIs {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -278,7 +280,7 @@ class TestRealAPIs {
 | 
				
			|||||||
      OllamaChatResult chatResult = ollamaAPI.chat(requestModel);
 | 
					      OllamaChatResult chatResult = ollamaAPI.chat(requestModel);
 | 
				
			||||||
      assertNotNull(chatResult);
 | 
					      assertNotNull(chatResult);
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -298,7 +300,7 @@ class TestRealAPIs {
 | 
				
			|||||||
      assertNotNull(result.getResponse());
 | 
					      assertNotNull(result.getResponse());
 | 
				
			||||||
      assertFalse(result.getResponse().isEmpty());
 | 
					      assertFalse(result.getResponse().isEmpty());
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -322,7 +324,7 @@ class TestRealAPIs {
 | 
				
			|||||||
      assertFalse(result.getResponse().isEmpty());
 | 
					      assertFalse(result.getResponse().isEmpty());
 | 
				
			||||||
      assertEquals(sb.toString().trim(), result.getResponse().trim());
 | 
					      assertEquals(sb.toString().trim(), result.getResponse().trim());
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -342,7 +344,24 @@ class TestRealAPIs {
 | 
				
			|||||||
      assertNotNull(result.getResponse());
 | 
					      assertNotNull(result.getResponse());
 | 
				
			||||||
      assertFalse(result.getResponse().isEmpty());
 | 
					      assertFalse(result.getResponse().isEmpty());
 | 
				
			||||||
    } catch (IOException | OllamaBaseException | InterruptedException | URISyntaxException e) {
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException | URISyntaxException e) {
 | 
				
			||||||
      throw new RuntimeException(e);
 | 
					      fail(e);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @Test
 | 
				
			||||||
 | 
					  @Order(3)
 | 
				
			||||||
 | 
					  public void testEmbedding() {
 | 
				
			||||||
 | 
					    testEndpointReachability();
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      OllamaEmbeddingsRequestModel request = OllamaEmbeddingsRequestBuilder
 | 
				
			||||||
 | 
					          .getInstance(config.getModel(), "What is the capital of France?").build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      List<Double> embeddings = ollamaAPI.generateEmbeddings(request);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      assertNotNull(embeddings);
 | 
				
			||||||
 | 
					      assertFalse(embeddings.isEmpty());
 | 
				
			||||||
 | 
					    } catch (IOException | OllamaBaseException | InterruptedException e) {
 | 
				
			||||||
 | 
					      fail(e);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					package io.github.amithkoujalgi.ollama4j.unittests.jackson;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
				
			||||||
 | 
					import static org.junit.jupiter.api.Assertions.fail;
 | 
				
			||||||
 | 
					import com.fasterxml.jackson.core.JsonProcessingException;
 | 
				
			||||||
 | 
					import com.fasterxml.jackson.databind.ObjectMapper;
 | 
				
			||||||
 | 
					import io.github.amithkoujalgi.ollama4j.core.utils.Utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public abstract class AbstractRequestSerializationTest<T> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected ObjectMapper mapper = Utils.getObjectMapper();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected String serializeRequest(T req) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            return mapper.writeValueAsString(req);
 | 
				
			||||||
 | 
					        } catch (JsonProcessingException e) {
 | 
				
			||||||
 | 
					            fail("Could not serialize request!", e);
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected T deserializeRequest(String jsonRequest, Class<T> requestClass) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            return mapper.readValue(jsonRequest, requestClass);
 | 
				
			||||||
 | 
					        } catch (JsonProcessingException e) {
 | 
				
			||||||
 | 
					            fail("Could not deserialize jsonRequest!", e);
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected void assertEqualsAfterUnmarshalling(T unmarshalledRequest,
 | 
				
			||||||
 | 
					        T req) {
 | 
				
			||||||
 | 
					        assertEquals(req, unmarshalledRequest);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
package io.github.amithkoujalgi.ollama4j.unittests.jackson;
 | 
					package io.github.amithkoujalgi.ollama4j.unittests.jackson;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
					import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.fail;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@@ -10,21 +9,15 @@ import org.json.JSONObject;
 | 
				
			|||||||
import org.junit.jupiter.api.BeforeEach;
 | 
					import org.junit.jupiter.api.BeforeEach;
 | 
				
			||||||
import org.junit.jupiter.api.Test;
 | 
					import org.junit.jupiter.api.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.fasterxml.jackson.core.JsonProcessingException;
 | 
					 | 
				
			||||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatMessageRole;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatMessageRole;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestBuilder;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestBuilder;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestModel;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.chat.OllamaChatRequestModel;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
 | 
					import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.utils.Utils;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class TestChatRequestSerialization {
 | 
					public class TestChatRequestSerialization extends AbstractRequestSerializationTest<OllamaChatRequestModel>{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private OllamaChatRequestBuilder builder;
 | 
					    private OllamaChatRequestBuilder builder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private ObjectMapper mapper = Utils.getObjectMapper();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @BeforeEach
 | 
					    @BeforeEach
 | 
				
			||||||
    public void init() {
 | 
					    public void init() {
 | 
				
			||||||
        builder = OllamaChatRequestBuilder.getInstance("DummyModel");
 | 
					        builder = OllamaChatRequestBuilder.getInstance("DummyModel");
 | 
				
			||||||
@@ -32,10 +25,9 @@ public class TestChatRequestSerialization {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testRequestOnlyMandatoryFields() {
 | 
					    public void testRequestOnlyMandatoryFields() {
 | 
				
			||||||
        OllamaChatRequestModel req = builder.withMessage(OllamaChatMessageRole.USER, "Some prompt",
 | 
					        OllamaChatRequestModel req = builder.withMessage(OllamaChatMessageRole.USER, "Some prompt").build();
 | 
				
			||||||
                List.of(new File("src/test/resources/dog-on-a-boat.jpg"))).build();
 | 
					 | 
				
			||||||
        String jsonRequest = serializeRequest(req);
 | 
					        String jsonRequest = serializeRequest(req);
 | 
				
			||||||
        assertEqualsAfterUnmarshalling(deserializeRequest(jsonRequest), req);
 | 
					        assertEqualsAfterUnmarshalling(deserializeRequest(jsonRequest,OllamaChatRequestModel.class), req);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -44,7 +36,7 @@ public class TestChatRequestSerialization {
 | 
				
			|||||||
        .withMessage(OllamaChatMessageRole.USER, "Some prompt")
 | 
					        .withMessage(OllamaChatMessageRole.USER, "Some prompt")
 | 
				
			||||||
        .build();
 | 
					        .build();
 | 
				
			||||||
        String jsonRequest = serializeRequest(req);
 | 
					        String jsonRequest = serializeRequest(req);
 | 
				
			||||||
        assertEqualsAfterUnmarshalling(deserializeRequest(jsonRequest), req);
 | 
					        assertEqualsAfterUnmarshalling(deserializeRequest(jsonRequest,OllamaChatRequestModel.class), req);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -52,19 +44,34 @@ public class TestChatRequestSerialization {
 | 
				
			|||||||
        OllamaChatRequestModel req = builder.withMessage(OllamaChatMessageRole.USER, "Some prompt",
 | 
					        OllamaChatRequestModel req = builder.withMessage(OllamaChatMessageRole.USER, "Some prompt",
 | 
				
			||||||
                List.of(new File("src/test/resources/dog-on-a-boat.jpg"))).build();
 | 
					                List.of(new File("src/test/resources/dog-on-a-boat.jpg"))).build();
 | 
				
			||||||
        String jsonRequest = serializeRequest(req);
 | 
					        String jsonRequest = serializeRequest(req);
 | 
				
			||||||
        assertEqualsAfterUnmarshalling(deserializeRequest(jsonRequest), req);
 | 
					        assertEqualsAfterUnmarshalling(deserializeRequest(jsonRequest,OllamaChatRequestModel.class), req);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testRequestWithOptions() {
 | 
					    public void testRequestWithOptions() {
 | 
				
			||||||
        OptionsBuilder b = new OptionsBuilder();
 | 
					        OptionsBuilder b = new OptionsBuilder();
 | 
				
			||||||
        OllamaChatRequestModel req = builder.withMessage(OllamaChatMessageRole.USER, "Some prompt")
 | 
					        OllamaChatRequestModel req = builder.withMessage(OllamaChatMessageRole.USER, "Some prompt")
 | 
				
			||||||
                .withOptions(b.setMirostat(1).build()).build();
 | 
					            .withOptions(b.setMirostat(1).build())
 | 
				
			||||||
 | 
					            .withOptions(b.setTemperature(1L).build())
 | 
				
			||||||
 | 
					            .withOptions(b.setMirostatEta(1L).build())
 | 
				
			||||||
 | 
					            .withOptions(b.setMirostatTau(1L).build())
 | 
				
			||||||
 | 
					            .withOptions(b.setNumGpu(1).build())
 | 
				
			||||||
 | 
					            .withOptions(b.setSeed(1).build())
 | 
				
			||||||
 | 
					            .withOptions(b.setTopK(1).build())
 | 
				
			||||||
 | 
					            .withOptions(b.setTopP(1).build())
 | 
				
			||||||
 | 
					            .build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        String jsonRequest = serializeRequest(req);
 | 
					        String jsonRequest = serializeRequest(req);
 | 
				
			||||||
        OllamaChatRequestModel deserializeRequest = deserializeRequest(jsonRequest);
 | 
					        OllamaChatRequestModel deserializeRequest = deserializeRequest(jsonRequest, OllamaChatRequestModel.class);
 | 
				
			||||||
        assertEqualsAfterUnmarshalling(deserializeRequest, req);
 | 
					        assertEqualsAfterUnmarshalling(deserializeRequest, req);
 | 
				
			||||||
        assertEquals(1, deserializeRequest.getOptions().get("mirostat"));
 | 
					        assertEquals(1, deserializeRequest.getOptions().get("mirostat"));
 | 
				
			||||||
 | 
					        assertEquals(1.0, deserializeRequest.getOptions().get("temperature"));
 | 
				
			||||||
 | 
					        assertEquals(1.0, deserializeRequest.getOptions().get("mirostat_eta"));
 | 
				
			||||||
 | 
					        assertEquals(1.0, deserializeRequest.getOptions().get("mirostat_tau"));
 | 
				
			||||||
 | 
					        assertEquals(1, deserializeRequest.getOptions().get("num_gpu"));
 | 
				
			||||||
 | 
					        assertEquals(1, deserializeRequest.getOptions().get("seed"));
 | 
				
			||||||
 | 
					        assertEquals(1, deserializeRequest.getOptions().get("top_k"));
 | 
				
			||||||
 | 
					        assertEquals(1.0, deserializeRequest.getOptions().get("top_p"));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -80,27 +87,27 @@ public class TestChatRequestSerialization {
 | 
				
			|||||||
        assertEquals("json", requestFormatProperty);
 | 
					        assertEquals("json", requestFormatProperty);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private String serializeRequest(OllamaChatRequestModel req) {
 | 
					    @Test
 | 
				
			||||||
        try {
 | 
					    public void testWithTemplate() {
 | 
				
			||||||
            return mapper.writeValueAsString(req);
 | 
					        OllamaChatRequestModel req = builder.withTemplate("System Template")
 | 
				
			||||||
        } catch (JsonProcessingException e) {
 | 
					            .build();
 | 
				
			||||||
            fail("Could not serialize request!", e);
 | 
					        String jsonRequest = serializeRequest(req);
 | 
				
			||||||
            return null;
 | 
					        assertEqualsAfterUnmarshalling(deserializeRequest(jsonRequest, OllamaChatRequestModel.class), req);
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private OllamaChatRequestModel deserializeRequest(String jsonRequest) {
 | 
					    @Test
 | 
				
			||||||
        try {
 | 
					    public void testWithStreaming() {
 | 
				
			||||||
            return mapper.readValue(jsonRequest, OllamaChatRequestModel.class);
 | 
					        OllamaChatRequestModel req = builder.withStreaming().build();
 | 
				
			||||||
        } catch (JsonProcessingException e) {
 | 
					        String jsonRequest = serializeRequest(req);
 | 
				
			||||||
            fail("Could not deserialize jsonRequest!", e);
 | 
					        assertEquals(deserializeRequest(jsonRequest, OllamaChatRequestModel.class).isStream(), true);
 | 
				
			||||||
            return null;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void assertEqualsAfterUnmarshalling(OllamaChatRequestModel unmarshalledRequest,
 | 
					    @Test
 | 
				
			||||||
            OllamaChatRequestModel req) {
 | 
					    public void testWithKeepAlive() {
 | 
				
			||||||
        assertEquals(req, unmarshalledRequest);
 | 
					        String expectedKeepAlive = "5m";
 | 
				
			||||||
 | 
					        OllamaChatRequestModel req = builder.withKeepAlive(expectedKeepAlive)
 | 
				
			||||||
 | 
					            .build();
 | 
				
			||||||
 | 
					        String jsonRequest = serializeRequest(req);
 | 
				
			||||||
 | 
					        assertEquals(deserializeRequest(jsonRequest, OllamaChatRequestModel.class).getKeepAlive(), expectedKeepAlive);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					package io.github.amithkoujalgi.ollama4j.unittests.jackson;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
				
			||||||
 | 
					import org.junit.jupiter.api.BeforeEach;
 | 
				
			||||||
 | 
					import org.junit.jupiter.api.Test;
 | 
				
			||||||
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.embeddings.OllamaEmbeddingsRequestModel;
 | 
				
			||||||
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.embeddings.OllamaEmbeddingsRequestBuilder;
 | 
				
			||||||
 | 
					import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TestEmbeddingsRequestSerialization extends AbstractRequestSerializationTest<OllamaEmbeddingsRequestModel>{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private OllamaEmbeddingsRequestBuilder builder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        @BeforeEach
 | 
				
			||||||
 | 
					        public void init() {
 | 
				
			||||||
 | 
					            builder = OllamaEmbeddingsRequestBuilder.getInstance("DummyModel","DummyPrompt");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Test
 | 
				
			||||||
 | 
					    public void testRequestOnlyMandatoryFields() {
 | 
				
			||||||
 | 
					        OllamaEmbeddingsRequestModel req = builder.build();
 | 
				
			||||||
 | 
					        String jsonRequest = serializeRequest(req);
 | 
				
			||||||
 | 
					        assertEqualsAfterUnmarshalling(deserializeRequest(jsonRequest,OllamaEmbeddingsRequestModel.class), req);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        @Test
 | 
				
			||||||
 | 
					        public void testRequestWithOptions() {
 | 
				
			||||||
 | 
					            OptionsBuilder b = new OptionsBuilder();
 | 
				
			||||||
 | 
					            OllamaEmbeddingsRequestModel req = builder
 | 
				
			||||||
 | 
					                    .withOptions(b.setMirostat(1).build()).build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            String jsonRequest = serializeRequest(req);
 | 
				
			||||||
 | 
					            OllamaEmbeddingsRequestModel deserializeRequest = deserializeRequest(jsonRequest,OllamaEmbeddingsRequestModel.class);
 | 
				
			||||||
 | 
					            assertEqualsAfterUnmarshalling(deserializeRequest, req);
 | 
				
			||||||
 | 
					            assertEquals(1, deserializeRequest.getOptions().get("mirostat"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,26 +1,20 @@
 | 
				
			|||||||
package io.github.amithkoujalgi.ollama4j.unittests.jackson;
 | 
					package io.github.amithkoujalgi.ollama4j.unittests.jackson;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
					import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.fail;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.json.JSONObject;
 | 
					import org.json.JSONObject;
 | 
				
			||||||
import org.junit.jupiter.api.BeforeEach;
 | 
					import org.junit.jupiter.api.BeforeEach;
 | 
				
			||||||
import org.junit.jupiter.api.Test;
 | 
					import org.junit.jupiter.api.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.fasterxml.jackson.core.JsonProcessingException;
 | 
					 | 
				
			||||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.generate.OllamaGenerateRequestBuilder;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.generate.OllamaGenerateRequestBuilder;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.models.generate.OllamaGenerateRequestModel;
 | 
					import io.github.amithkoujalgi.ollama4j.core.models.generate.OllamaGenerateRequestModel;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
 | 
					import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
 | 
				
			||||||
import io.github.amithkoujalgi.ollama4j.core.utils.Utils;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class TestGenerateRequestSerialization {
 | 
					public class TestGenerateRequestSerialization extends AbstractRequestSerializationTest<OllamaGenerateRequestModel>{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private OllamaGenerateRequestBuilder builder;
 | 
					    private OllamaGenerateRequestBuilder builder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private ObjectMapper mapper = Utils.getObjectMapper();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @BeforeEach
 | 
					    @BeforeEach
 | 
				
			||||||
    public void init() {
 | 
					    public void init() {
 | 
				
			||||||
        builder = OllamaGenerateRequestBuilder.getInstance("DummyModel");
 | 
					        builder = OllamaGenerateRequestBuilder.getInstance("DummyModel");
 | 
				
			||||||
@@ -31,7 +25,7 @@ public class TestGenerateRequestSerialization {
 | 
				
			|||||||
        OllamaGenerateRequestModel req = builder.withPrompt("Some prompt").build();
 | 
					        OllamaGenerateRequestModel req = builder.withPrompt("Some prompt").build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        String jsonRequest = serializeRequest(req);
 | 
					        String jsonRequest = serializeRequest(req);
 | 
				
			||||||
        assertEqualsAfterUnmarshalling(deserializeRequest(jsonRequest), req);
 | 
					        assertEqualsAfterUnmarshalling(deserializeRequest(jsonRequest, OllamaGenerateRequestModel.class), req);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -41,7 +35,7 @@ public class TestGenerateRequestSerialization {
 | 
				
			|||||||
                builder.withPrompt("Some prompt").withOptions(b.setMirostat(1).build()).build();
 | 
					                builder.withPrompt("Some prompt").withOptions(b.setMirostat(1).build()).build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        String jsonRequest = serializeRequest(req);
 | 
					        String jsonRequest = serializeRequest(req);
 | 
				
			||||||
        OllamaGenerateRequestModel deserializeRequest = deserializeRequest(jsonRequest);
 | 
					        OllamaGenerateRequestModel deserializeRequest = deserializeRequest(jsonRequest, OllamaGenerateRequestModel.class);
 | 
				
			||||||
        assertEqualsAfterUnmarshalling(deserializeRequest, req);
 | 
					        assertEqualsAfterUnmarshalling(deserializeRequest, req);
 | 
				
			||||||
        assertEquals(1, deserializeRequest.getOptions().get("mirostat"));
 | 
					        assertEquals(1, deserializeRequest.getOptions().get("mirostat"));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -59,27 +53,4 @@ public class TestGenerateRequestSerialization {
 | 
				
			|||||||
        assertEquals("json", requestFormatProperty);
 | 
					        assertEquals("json", requestFormatProperty);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private String serializeRequest(OllamaGenerateRequestModel req) {
 | 
					 | 
				
			||||||
        try {
 | 
					 | 
				
			||||||
            return mapper.writeValueAsString(req);
 | 
					 | 
				
			||||||
        } catch (JsonProcessingException e) {
 | 
					 | 
				
			||||||
            fail("Could not serialize request!", e);
 | 
					 | 
				
			||||||
            return null;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private OllamaGenerateRequestModel deserializeRequest(String jsonRequest) {
 | 
					 | 
				
			||||||
        try {
 | 
					 | 
				
			||||||
            return mapper.readValue(jsonRequest, OllamaGenerateRequestModel.class);
 | 
					 | 
				
			||||||
        } catch (JsonProcessingException e) {
 | 
					 | 
				
			||||||
            fail("Could not deserialize jsonRequest!", e);
 | 
					 | 
				
			||||||
            return null;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private void assertEqualsAfterUnmarshalling(OllamaGenerateRequestModel unmarshalledRequest,
 | 
					 | 
				
			||||||
            OllamaGenerateRequestModel req) {
 | 
					 | 
				
			||||||
        assertEquals(req, unmarshalledRequest);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user