mirror of
https://github.com/amithkoujalgi/ollama4j.git
synced 2025-10-30 08:00:42 +01:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6c93b8304a | ||
|
|
85acf0fe78 | ||
|
|
fe64c6dd10 | ||
|
|
b15066a204 | ||
|
|
e2b29b6a07 | ||
|
|
7470ebe846 | ||
|
|
422efa68aa | ||
|
|
f4d8671922 | ||
|
|
70b136c9fc |
14
Makefile
14
Makefile
@@ -10,4 +10,16 @@ it:
|
|||||||
list-releases:
|
list-releases:
|
||||||
curl 'https://central.sonatype.com/api/internal/browse/component/versions?sortField=normalizedVersion&sortDirection=asc&page=0&size=12&filter=namespace%3Aio.github.amithkoujalgi%2Cname%3Aollama4j' \
|
curl 'https://central.sonatype.com/api/internal/browse/component/versions?sortField=normalizedVersion&sortDirection=asc&page=0&size=12&filter=namespace%3Aio.github.amithkoujalgi%2Cname%3Aollama4j' \
|
||||||
--compressed \
|
--compressed \
|
||||||
--silent | jq '.components[].version'
|
--silent | jq '.components[].version'
|
||||||
|
|
||||||
|
build-docs:
|
||||||
|
npm i --prefix docs && npm run build --prefix docs
|
||||||
|
|
||||||
|
start-docs:
|
||||||
|
npm i --prefix docs && npm run start --prefix docs
|
||||||
|
|
||||||
|
start-cpu:
|
||||||
|
docker run -it -v ~/ollama:/root/.ollama -p 11434:11434 ollama/ollama
|
||||||
|
|
||||||
|
start-gpu:
|
||||||
|
docker run -it --gpus=all -v ~/ollama:/root/.ollama -p 11434:11434 ollama/ollama
|
||||||
@@ -8,7 +8,7 @@ This API lets you ask questions along with the image files to the LLMs.
|
|||||||
These APIs correlate to
|
These APIs correlate to
|
||||||
the [completion](https://github.com/jmorganca/ollama/blob/main/docs/api.md#generate-a-completion) APIs.
|
the [completion](https://github.com/jmorganca/ollama/blob/main/docs/api.md#generate-a-completion) APIs.
|
||||||
|
|
||||||
:::caution
|
:::note
|
||||||
|
|
||||||
Executing this on Ollama server running in CPU-mode will take longer to generate response. Hence, GPU-mode is
|
Executing this on Ollama server running in CPU-mode will take longer to generate response. Hence, GPU-mode is
|
||||||
recommended.
|
recommended.
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ This API lets you ask questions along with the image files to the LLMs.
|
|||||||
These APIs correlate to
|
These APIs correlate to
|
||||||
the [completion](https://github.com/jmorganca/ollama/blob/main/docs/api.md#generate-a-completion) APIs.
|
the [completion](https://github.com/jmorganca/ollama/blob/main/docs/api.md#generate-a-completion) APIs.
|
||||||
|
|
||||||
:::caution
|
:::note
|
||||||
|
|
||||||
Executing this on Ollama server running in CPU-mode will take longer to generate response. Hence, GPU-mode is
|
Executing this on Ollama server running in CPU-mode will take longer to generate response. Hence, GPU-mode is
|
||||||
recommended.
|
recommended.
|
||||||
|
|||||||
@@ -8,6 +8,11 @@ This API lets you ask questions to the LLMs in a synchronous way.
|
|||||||
These APIs correlate to
|
These APIs correlate to
|
||||||
the [completion](https://github.com/jmorganca/ollama/blob/main/docs/api.md#generate-a-completion) APIs.
|
the [completion](https://github.com/jmorganca/ollama/blob/main/docs/api.md#generate-a-completion) APIs.
|
||||||
|
|
||||||
|
Use the `OptionBuilder` to build the `Options` object
|
||||||
|
with [extra parameters](https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values).
|
||||||
|
Refer
|
||||||
|
to [this](/docs/apis-extras/options-builder).
|
||||||
|
|
||||||
## Try asking a question about the model.
|
## Try asking a question about the model.
|
||||||
|
|
||||||
```java
|
```java
|
||||||
@@ -19,11 +24,13 @@ public class Main {
|
|||||||
|
|
||||||
OllamaAPI ollamaAPI = new OllamaAPI(host);
|
OllamaAPI ollamaAPI = new OllamaAPI(host);
|
||||||
|
|
||||||
OllamaResult result = ollamaAPI.ask(OllamaModelType.LLAMA2, "Who are you?");
|
OllamaResult result =
|
||||||
|
ollamaAPI.ask(OllamaModelType.LLAMA2, "Who are you?", new OptionsBuilder().build());
|
||||||
|
|
||||||
System.out.println(result.getResponse());
|
System.out.println(result.getResponse());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
You will get a response similar to:
|
You will get a response similar to:
|
||||||
@@ -47,11 +54,13 @@ public class Main {
|
|||||||
|
|
||||||
String prompt = "List all cricket world cup teams of 2019.";
|
String prompt = "List all cricket world cup teams of 2019.";
|
||||||
|
|
||||||
OllamaResult result = ollamaAPI.ask(OllamaModelType.LLAMA2, prompt);
|
OllamaResult result =
|
||||||
|
ollamaAPI.ask(OllamaModelType.LLAMA2, prompt, new OptionsBuilder().build());
|
||||||
|
|
||||||
System.out.println(result.getResponse());
|
System.out.println(result.getResponse());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
You'd then get a response from the model:
|
You'd then get a response from the model:
|
||||||
@@ -84,12 +93,15 @@ public class Main {
|
|||||||
String host = "http://localhost:11434/";
|
String host = "http://localhost:11434/";
|
||||||
OllamaAPI ollamaAPI = new OllamaAPI(host);
|
OllamaAPI ollamaAPI = new OllamaAPI(host);
|
||||||
|
|
||||||
String prompt = SamplePrompts.getSampleDatabasePromptWithQuestion(
|
String prompt =
|
||||||
"List all customer names who have bought one or more products");
|
SamplePrompts.getSampleDatabasePromptWithQuestion(
|
||||||
OllamaResult result = ollamaAPI.ask(OllamaModelType.SQLCODER, prompt);
|
"List all customer names who have bought one or more products");
|
||||||
|
OllamaResult result =
|
||||||
|
ollamaAPI.ask(OllamaModelType.SQLCODER, prompt, new OptionsBuilder().build());
|
||||||
System.out.println(result.getResponse());
|
System.out.println(result.getResponse());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
_Note: Here I've used
|
_Note: Here I've used
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 5
|
sidebar_position: 6
|
||||||
---
|
---
|
||||||
|
|
||||||
# Generate Embeddings
|
# Generate Embeddings
|
||||||
@@ -30,17 +30,17 @@ public class Main {
|
|||||||
|
|
||||||
You will get a response similar to:
|
You will get a response similar to:
|
||||||
|
|
||||||
```json
|
```javascript
|
||||||
[
|
[
|
||||||
0.5670403838157654,
|
0.5670403838157654,
|
||||||
0.009260174818336964,
|
0.009260174818336964,
|
||||||
0.23178744316101074,
|
0.23178744316101074,
|
||||||
-0.2916173040866852,
|
-0.2916173040866852,
|
||||||
-0.8924556970596313,
|
-0.8924556970596313,
|
||||||
0.8785552978515625,
|
0.8785552978515625,
|
||||||
-0.34576427936553955,
|
-0.34576427936553955,
|
||||||
0.5742510557174683,
|
0.5742510557174683,
|
||||||
-0.04222835972905159,
|
-0.04222835972905159,
|
||||||
-0.137906014919281
|
-0.137906014919281
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
73
docs/docs/apis-ask/prompt-builder.md
Normal file
73
docs/docs/apis-ask/prompt-builder.md
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 5
|
||||||
|
---
|
||||||
|
|
||||||
|
# Prompt Builder
|
||||||
|
|
||||||
|
This is designed for prompt engineering. It allows you to easily build the prompt text for zero-shot, one-shot, few-shot
|
||||||
|
inferences.
|
||||||
|
|
||||||
|
```java
|
||||||
|
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.OllamaAPI;
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.models.OllamaResult;
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.types.OllamaModelType;
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.utils.PromptBuilder;
|
||||||
|
|
||||||
|
public class AskPhi {
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
|
String host = "http://localhost:11434/";
|
||||||
|
OllamaAPI ollamaAPI = new OllamaAPI(host);
|
||||||
|
ollamaAPI.setRequestTimeoutSeconds(10);
|
||||||
|
|
||||||
|
String model = OllamaModelType.PHI;
|
||||||
|
|
||||||
|
PromptBuilder promptBuilder =
|
||||||
|
new PromptBuilder()
|
||||||
|
.addLine("You are an expert coder and understand different programming languages.")
|
||||||
|
.addLine("Given a question, answer ONLY with code.")
|
||||||
|
.addLine("Produce clean, formatted and indented code in markdown format.")
|
||||||
|
.addLine(
|
||||||
|
"DO NOT include ANY extra text apart from code. Follow this instruction very strictly!")
|
||||||
|
.addLine("If there's any additional information you want to add, use comments within code.")
|
||||||
|
.addLine("Answer only in the programming language that has been asked for.")
|
||||||
|
.addSeparator()
|
||||||
|
.addLine("Example: Sum 2 numbers in Python")
|
||||||
|
.addLine("Answer:")
|
||||||
|
.addLine("```python")
|
||||||
|
.addLine("def sum(num1: int, num2: int) -> int:")
|
||||||
|
.addLine(" return num1 + num2")
|
||||||
|
.addLine("```")
|
||||||
|
.addSeparator()
|
||||||
|
.add("How do I read a file in Go and print its contents to stdout?");
|
||||||
|
|
||||||
|
OllamaResult response = ollamaAPI.ask(model, promptBuilder.build());
|
||||||
|
System.out.println(response.getResponse());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You will get a response similar to:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
func readFile(fileName string) {
|
||||||
|
file, err := ioutil.ReadFile(fileName)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, "Error reading file:", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
f, _ := ioutil.ReadFile("file.txt")
|
||||||
|
if f != nil {
|
||||||
|
fmt.Println(f.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
53
docs/docs/apis-extras/options-builder.md
Normal file
53
docs/docs/apis-extras/options-builder.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
# Options Builder
|
||||||
|
|
||||||
|
This lets you build options for the `ask()` API.
|
||||||
|
Check out the supported
|
||||||
|
options [here](https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values).
|
||||||
|
|
||||||
|
## Build an empty Options object
|
||||||
|
|
||||||
|
```java
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.utils.Options;
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
String host = "http://localhost:11434/";
|
||||||
|
|
||||||
|
OllamaAPI ollamaAPI = new OllamaAPI(host);
|
||||||
|
|
||||||
|
Options options = new OptionsBuilder().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build an empty Options object
|
||||||
|
|
||||||
|
```java
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.utils.Options;
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
String host = "http://localhost:11434/";
|
||||||
|
|
||||||
|
OllamaAPI ollamaAPI = new OllamaAPI(host);
|
||||||
|
|
||||||
|
Options options =
|
||||||
|
new OptionsBuilder()
|
||||||
|
.setMirostat(10)
|
||||||
|
.setMirostatEta(0.5f)
|
||||||
|
.setNumGpu(2)
|
||||||
|
.setTemperature(1.5f)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -2,10 +2,38 @@
|
|||||||
sidebar_position: 1
|
sidebar_position: 1
|
||||||
---
|
---
|
||||||
|
|
||||||
# Intro
|
# Introduction
|
||||||
|
|
||||||
Let's get started with **Ollama4j**.
|
Let's get started with **Ollama4j**.
|
||||||
|
|
||||||
|
## 🦙 What is Ollama?
|
||||||
|
|
||||||
|
[Ollama](https://ollama.ai/) is an advanced AI tool that allows users to easily set up and run large language models
|
||||||
|
locally (in CPU and GPU
|
||||||
|
modes). With Ollama, users can leverage powerful language models such as Llama 2 and even customize and create their own
|
||||||
|
models.
|
||||||
|
|
||||||
|
## 👨💻 Why Ollama4j?
|
||||||
|
|
||||||
|
Ollama4j was built for the simple purpose of integrating Ollama with Java applications.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
o4j[Ollama4j]
|
||||||
|
o[Ollama Server]
|
||||||
|
o4j -->|Communicates with| o;
|
||||||
|
m[Models]
|
||||||
|
p[Your Java Project]
|
||||||
|
subgraph Your Java Environment
|
||||||
|
direction TB
|
||||||
|
p -->|Uses| o4j
|
||||||
|
end
|
||||||
|
subgraph Ollama Setup
|
||||||
|
direction TB
|
||||||
|
o -->|Manages| m
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
### What you'll need
|
### What you'll need
|
||||||
|
|||||||
@@ -131,8 +131,13 @@ const config = {
|
|||||||
prism: {
|
prism: {
|
||||||
theme: prismThemes.github,
|
theme: prismThemes.github,
|
||||||
darkTheme: prismThemes.dracula,
|
darkTheme: prismThemes.dracula,
|
||||||
|
additionalLanguages: ['java'],
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
markdown: {
|
||||||
|
mermaid: true,
|
||||||
|
},
|
||||||
|
themes: ['@docusaurus/theme-mermaid']
|
||||||
};
|
};
|
||||||
|
|
||||||
export default config;
|
export default config;
|
||||||
|
|||||||
1136
docs/package-lock.json
generated
1136
docs/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -16,6 +16,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@docusaurus/core": "3.0.1",
|
"@docusaurus/core": "3.0.1",
|
||||||
"@docusaurus/preset-classic": "3.0.1",
|
"@docusaurus/preset-classic": "3.0.1",
|
||||||
|
"@docusaurus/theme-mermaid": "^3.0.1",
|
||||||
"@mdx-js/react": "^3.0.0",
|
"@mdx-js/react": "^3.0.0",
|
||||||
"clsx": "^2.0.0",
|
"clsx": "^2.0.0",
|
||||||
"prism-react-renderer": "^2.3.0",
|
"prism-react-renderer": "^2.3.0",
|
||||||
|
|||||||
4
pom.xml
4
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.38</version>
|
<version>1.0.41</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.38</tag>
|
<tag>v1.0.41</tag>
|
||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import io.github.amithkoujalgi.ollama4j.core.models.request.CustomModelFileConte
|
|||||||
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.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.utils.Options;
|
||||||
import io.github.amithkoujalgi.ollama4j.core.utils.Utils;
|
import io.github.amithkoujalgi.ollama4j.core.utils.Utils;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
@@ -332,11 +333,15 @@ public class OllamaAPI {
|
|||||||
*
|
*
|
||||||
* @param model the ollama model to ask the question to
|
* @param model the ollama model to ask the question to
|
||||||
* @param prompt the prompt/question text
|
* @param prompt the prompt/question text
|
||||||
|
* @param options the Options object - <a
|
||||||
|
* href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">More
|
||||||
|
* details on the options</a>
|
||||||
* @return OllamaResult that includes response text and time taken for response
|
* @return OllamaResult that includes response text and time taken for response
|
||||||
*/
|
*/
|
||||||
public OllamaResult ask(String model, String prompt)
|
public OllamaResult ask(String model, String prompt, Options options)
|
||||||
throws OllamaBaseException, IOException, InterruptedException {
|
throws OllamaBaseException, IOException, InterruptedException {
|
||||||
OllamaRequestModel ollamaRequestModel = new OllamaRequestModel(model, prompt);
|
OllamaRequestModel ollamaRequestModel = new OllamaRequestModel(model, prompt);
|
||||||
|
ollamaRequestModel.setOptions(options.getOptionsMap());
|
||||||
return askSync(ollamaRequestModel);
|
return askSync(ollamaRequestModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package io.github.amithkoujalgi.ollama4j.core.models;
|
package io.github.amithkoujalgi.ollama4j.core.models;
|
||||||
|
|
||||||
|
|
||||||
import static io.github.amithkoujalgi.ollama4j.core.utils.Utils.getObjectMapper;
|
import static io.github.amithkoujalgi.ollama4j.core.utils.Utils.getObjectMapper;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@@ -13,6 +13,7 @@ public class OllamaRequestModel {
|
|||||||
private String model;
|
private String model;
|
||||||
private String prompt;
|
private String prompt;
|
||||||
private List<String> images;
|
private List<String> images;
|
||||||
|
private Map<String, Object> options;
|
||||||
|
|
||||||
public OllamaRequestModel(String model, String prompt) {
|
public OllamaRequestModel(String model, String prompt) {
|
||||||
this.model = model;
|
this.model = model;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public class OllamaModelType {
|
|||||||
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 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 WIZARDCODER = "wizardcoder";
|
public static final String WIZARDCODER = "wizardcoder";
|
||||||
public static final String MISTRAL_OPENORCA = "mistral-openorca";
|
public static final String MISTRAL_OPENORCA = "mistral-openorca";
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package io.github.amithkoujalgi.ollama4j.core.utils;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/** Class for options for Ollama model. */
|
||||||
|
@Data
|
||||||
|
public class Options {
|
||||||
|
|
||||||
|
private final Map<String, Object> optionsMap;
|
||||||
|
}
|
||||||
@@ -0,0 +1,218 @@
|
|||||||
|
package io.github.amithkoujalgi.ollama4j.core.utils;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
/** Builder class for creating options for Ollama model. */
|
||||||
|
public class OptionsBuilder {
|
||||||
|
|
||||||
|
private final Options options;
|
||||||
|
|
||||||
|
/** Constructs a new OptionsBuilder with an empty options map. */
|
||||||
|
public OptionsBuilder() {
|
||||||
|
this.options = new Options(new HashMap<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable Mirostat sampling for controlling perplexity. (default: 0, 0 = disabled, 1 = Mirostat, 2
|
||||||
|
* = Mirostat 2.0)
|
||||||
|
*
|
||||||
|
* @param value The value for the "mirostat" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setMirostat(int value) {
|
||||||
|
options.getOptionsMap().put("mirostat", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Influences how quickly the algorithm responds to feedback from the generated text. A lower
|
||||||
|
* learning rate will result in slower adjustments, while a higher learning rate will make the
|
||||||
|
* algorithm more responsive. (Default: 0.1)
|
||||||
|
*
|
||||||
|
* @param value The value for the "mirostat_eta" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setMirostatEta(float value) {
|
||||||
|
options.getOptionsMap().put("mirostat_eta", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls the balance between coherence and diversity of the output. A lower value will result
|
||||||
|
* in more focused and coherent text. (Default: 5.0)
|
||||||
|
*
|
||||||
|
* @param value The value for the "mirostat_tau" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setMirostatTau(float value) {
|
||||||
|
options.getOptionsMap().put("mirostat_tau", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the size of the context window used to generate the next token. (Default: 2048)
|
||||||
|
*
|
||||||
|
* @param value The value for the "num_ctx" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setNumCtx(int value) {
|
||||||
|
options.getOptionsMap().put("num_ctx", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of GQA groups in the transformer layer. Required for some models, for example, it is
|
||||||
|
* 8 for llama2:70b.
|
||||||
|
*
|
||||||
|
* @param value The value for the "num_gqa" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setNumGqa(int value) {
|
||||||
|
options.getOptionsMap().put("num_gqa", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of layers to send to the GPU(s). On macOS it defaults to 1 to enable metal support,
|
||||||
|
* 0 to disable.
|
||||||
|
*
|
||||||
|
* @param value The value for the "num_gpu" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setNumGpu(int value) {
|
||||||
|
options.getOptionsMap().put("num_gpu", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the number of threads to use during computation. By default, Ollama will detect this for
|
||||||
|
* optimal performance. It is recommended to set this value to the number of physical CPU cores
|
||||||
|
* your system has (as opposed to the logical number of cores).
|
||||||
|
*
|
||||||
|
* @param value The value for the "num_thread" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setNumThread(int value) {
|
||||||
|
options.getOptionsMap().put("num_thread", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets how far back for the model to look back to prevent repetition. (Default: 64, 0 = disabled,
|
||||||
|
* -1 = num_ctx)
|
||||||
|
*
|
||||||
|
* @param value The value for the "repeat_last_n" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setRepeatLastN(int value) {
|
||||||
|
options.getOptionsMap().put("repeat_last_n", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets how strongly to penalize repetitions. A higher value (e.g., 1.5) will penalize repetitions
|
||||||
|
* more strongly, while a lower value (e.g., 0.9) will be more lenient. (Default: 1.1)
|
||||||
|
*
|
||||||
|
* @param value The value for the "repeat_penalty" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setRepeatPenalty(float value) {
|
||||||
|
options.getOptionsMap().put("repeat_penalty", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The temperature of the model. Increasing the temperature will make the model answer more
|
||||||
|
* creatively. (Default: 0.8)
|
||||||
|
*
|
||||||
|
* @param value The value for the "temperature" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setTemperature(float value) {
|
||||||
|
options.getOptionsMap().put("temperature", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the random number seed to use for generation. Setting this to a specific number will make
|
||||||
|
* the model generate the same text for the same prompt. (Default: 0)
|
||||||
|
*
|
||||||
|
* @param value The value for the "seed" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setSeed(int value) {
|
||||||
|
options.getOptionsMap().put("seed", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the stop sequences to use. When this pattern is encountered the LLM will stop generating
|
||||||
|
* text and return. Multiple stop patterns may be set by specifying multiple separate `stop`
|
||||||
|
* parameters in a modelfile.
|
||||||
|
*
|
||||||
|
* @param value The value for the "stop" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setStop(String value) {
|
||||||
|
options.getOptionsMap().put("stop", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tail free sampling is used to reduce the impact of less probable tokens from the output. A
|
||||||
|
* higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this
|
||||||
|
* setting. (default: 1)
|
||||||
|
*
|
||||||
|
* @param value The value for the "tfs_z" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setTfsZ(float value) {
|
||||||
|
options.getOptionsMap().put("tfs_z", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maximum number of tokens to predict when generating text. (Default: 128, -1 = infinite
|
||||||
|
* generation, -2 = fill context)
|
||||||
|
*
|
||||||
|
* @param value The value for the "num_predict" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setNumPredict(int value) {
|
||||||
|
options.getOptionsMap().put("num_predict", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more
|
||||||
|
* diverse answers, while a lower value (e.g. 10) will be more conservative. (Default: 40)
|
||||||
|
*
|
||||||
|
* @param value The value for the "top_k" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setTopK(int value) {
|
||||||
|
options.getOptionsMap().put("top_k", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a
|
||||||
|
* lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)
|
||||||
|
*
|
||||||
|
* @param value The value for the "top_p" parameter.
|
||||||
|
* @return The updated OptionsBuilder.
|
||||||
|
*/
|
||||||
|
public OptionsBuilder setTopP(float value) {
|
||||||
|
options.getOptionsMap().put("top_p", value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds the options map.
|
||||||
|
*
|
||||||
|
* @return The populated options map.
|
||||||
|
*/
|
||||||
|
public Options build() {
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
package io.github.amithkoujalgi.ollama4j.core.utils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@code PromptBuilder} class is used to construct prompt texts for language models (LLMs). It
|
||||||
|
* provides methods for adding text, adding lines, adding separators, and building the final prompt.
|
||||||
|
*
|
||||||
|
* <p>Example usage:
|
||||||
|
*
|
||||||
|
* <pre>{@code
|
||||||
|
* PromptBuilder promptBuilder = new PromptBuilder();
|
||||||
|
* promptBuilder.add("This is a sample prompt for language models.")
|
||||||
|
* .addLine("You can add lines to provide context.")
|
||||||
|
* .addSeparator()
|
||||||
|
* .add("Feel free to customize as needed.");
|
||||||
|
* String finalPrompt = promptBuilder.build();
|
||||||
|
* System.out.println(finalPrompt);
|
||||||
|
* }</pre>
|
||||||
|
*/
|
||||||
|
public class PromptBuilder {
|
||||||
|
|
||||||
|
private final StringBuilder prompt;
|
||||||
|
|
||||||
|
/** Constructs a new {@code PromptBuilder} with an empty prompt. */
|
||||||
|
public PromptBuilder() {
|
||||||
|
this.prompt = new StringBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends the specified text to the prompt.
|
||||||
|
*
|
||||||
|
* @param text the text to be added to the prompt
|
||||||
|
* @return a reference to this {@code PromptBuilder} instance for method chaining
|
||||||
|
*/
|
||||||
|
public PromptBuilder add(String text) {
|
||||||
|
prompt.append(text);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends the specified text followed by a newline character to the prompt.
|
||||||
|
*
|
||||||
|
* @param text the text to be added as a line to the prompt
|
||||||
|
* @return a reference to this {@code PromptBuilder} instance for method chaining
|
||||||
|
*/
|
||||||
|
public PromptBuilder addLine(String text) {
|
||||||
|
prompt.append(text).append("\n");
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends a separator line to the prompt. The separator is a newline followed by a line of
|
||||||
|
* dashes.
|
||||||
|
*
|
||||||
|
* @return a reference to this {@code PromptBuilder} instance for method chaining
|
||||||
|
*/
|
||||||
|
public PromptBuilder addSeparator() {
|
||||||
|
prompt.append("\n--------------------------------------------------\n");
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds and returns the final prompt as a string.
|
||||||
|
*
|
||||||
|
* @return the final prompt as a string
|
||||||
|
*/
|
||||||
|
public String build() {
|
||||||
|
return prompt.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ import io.github.amithkoujalgi.ollama4j.core.models.ModelDetail;
|
|||||||
import io.github.amithkoujalgi.ollama4j.core.models.OllamaAsyncResultCallback;
|
import io.github.amithkoujalgi.ollama4j.core.models.OllamaAsyncResultCallback;
|
||||||
import io.github.amithkoujalgi.ollama4j.core.models.OllamaResult;
|
import io.github.amithkoujalgi.ollama4j.core.models.OllamaResult;
|
||||||
import io.github.amithkoujalgi.ollama4j.core.types.OllamaModelType;
|
import io.github.amithkoujalgi.ollama4j.core.types.OllamaModelType;
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -100,10 +101,12 @@ class TestMockedAPIs {
|
|||||||
OllamaAPI ollamaAPI = Mockito.mock(OllamaAPI.class);
|
OllamaAPI ollamaAPI = Mockito.mock(OllamaAPI.class);
|
||||||
String model = OllamaModelType.LLAMA2;
|
String model = OllamaModelType.LLAMA2;
|
||||||
String prompt = "some prompt text";
|
String prompt = "some prompt text";
|
||||||
|
OptionsBuilder optionsBuilder = new OptionsBuilder();
|
||||||
try {
|
try {
|
||||||
when(ollamaAPI.ask(model, prompt)).thenReturn(new OllamaResult("", 0, 200));
|
when(ollamaAPI.ask(model, prompt, optionsBuilder.build()))
|
||||||
ollamaAPI.ask(model, prompt);
|
.thenReturn(new OllamaResult("", 0, 200));
|
||||||
verify(ollamaAPI, times(1)).ask(model, prompt);
|
ollamaAPI.ask(model, prompt, optionsBuilder.build());
|
||||||
|
verify(ollamaAPI, times(1)).ask(model, prompt, optionsBuilder.build());
|
||||||
} catch (IOException | OllamaBaseException | InterruptedException e) {
|
} catch (IOException | OllamaBaseException | InterruptedException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user