mirror of
https://github.com/amithkoujalgi/ollama4j.git
synced 2025-10-26 22:20:41 +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:
|
||||
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 \
|
||||
--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
|
||||
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
|
||||
recommended.
|
||||
|
||||
@@ -8,7 +8,7 @@ This API lets you ask questions along with the image files to the LLMs.
|
||||
These APIs correlate to
|
||||
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
|
||||
recommended.
|
||||
|
||||
@@ -8,6 +8,11 @@ This API lets you ask questions to the LLMs in a synchronous way.
|
||||
These APIs correlate to
|
||||
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.
|
||||
|
||||
```java
|
||||
@@ -19,11 +24,13 @@ public class Main {
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
You will get a response similar to:
|
||||
@@ -47,11 +54,13 @@ public class Main {
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
You'd then get a response from the model:
|
||||
@@ -84,12 +93,15 @@ public class Main {
|
||||
String host = "http://localhost:11434/";
|
||||
OllamaAPI ollamaAPI = new OllamaAPI(host);
|
||||
|
||||
String prompt = SamplePrompts.getSampleDatabasePromptWithQuestion(
|
||||
"List all customer names who have bought one or more products");
|
||||
OllamaResult result = ollamaAPI.ask(OllamaModelType.SQLCODER, prompt);
|
||||
String prompt =
|
||||
SamplePrompts.getSampleDatabasePromptWithQuestion(
|
||||
"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());
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
_Note: Here I've used
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
sidebar_position: 6
|
||||
---
|
||||
|
||||
# Generate Embeddings
|
||||
@@ -30,17 +30,17 @@ public class Main {
|
||||
|
||||
You will get a response similar to:
|
||||
|
||||
```json
|
||||
```javascript
|
||||
[
|
||||
0.5670403838157654,
|
||||
0.009260174818336964,
|
||||
0.23178744316101074,
|
||||
-0.2916173040866852,
|
||||
-0.8924556970596313,
|
||||
0.8785552978515625,
|
||||
-0.34576427936553955,
|
||||
0.5742510557174683,
|
||||
-0.04222835972905159,
|
||||
-0.137906014919281
|
||||
0.5670403838157654,
|
||||
0.009260174818336964,
|
||||
0.23178744316101074,
|
||||
-0.2916173040866852,
|
||||
-0.8924556970596313,
|
||||
0.8785552978515625,
|
||||
-0.34576427936553955,
|
||||
0.5742510557174683,
|
||||
-0.04222835972905159,
|
||||
-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
|
||||
---
|
||||
|
||||
# Intro
|
||||
# Introduction
|
||||
|
||||
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
|
||||
|
||||
### What you'll need
|
||||
|
||||
@@ -131,8 +131,13 @@ const config = {
|
||||
prism: {
|
||||
theme: prismThemes.github,
|
||||
darkTheme: prismThemes.dracula,
|
||||
additionalLanguages: ['java'],
|
||||
},
|
||||
}),
|
||||
markdown: {
|
||||
mermaid: true,
|
||||
},
|
||||
themes: ['@docusaurus/theme-mermaid']
|
||||
};
|
||||
|
||||
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": {
|
||||
"@docusaurus/core": "3.0.1",
|
||||
"@docusaurus/preset-classic": "3.0.1",
|
||||
"@docusaurus/theme-mermaid": "^3.0.1",
|
||||
"@mdx-js/react": "^3.0.0",
|
||||
"clsx": "^2.0.0",
|
||||
"prism-react-renderer": "^2.3.0",
|
||||
|
||||
4
pom.xml
4
pom.xml
@@ -4,7 +4,7 @@
|
||||
|
||||
<groupId>io.github.amithkoujalgi</groupId>
|
||||
<artifactId>ollama4j</artifactId>
|
||||
<version>1.0.38</version>
|
||||
<version>1.0.41</version>
|
||||
|
||||
<name>Ollama4j</name>
|
||||
<description>Java library for interacting with Ollama API.</description>
|
||||
@@ -39,7 +39,7 @@
|
||||
<connection>scm:git:git@github.com:amithkoujalgi/ollama4j.git</connection>
|
||||
<developerConnection>scm:git:https://github.com/amithkoujalgi/ollama4j.git</developerConnection>
|
||||
<url>https://github.com/amithkoujalgi/ollama4j</url>
|
||||
<tag>v1.0.38</tag>
|
||||
<tag>v1.0.41</tag>
|
||||
</scm>
|
||||
|
||||
<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.ModelEmbeddingsRequest;
|
||||
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 java.io.BufferedReader;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@@ -332,11 +333,15 @@ public class OllamaAPI {
|
||||
*
|
||||
* @param model the ollama model to ask the question to
|
||||
* @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
|
||||
*/
|
||||
public OllamaResult ask(String model, String prompt)
|
||||
public OllamaResult ask(String model, String prompt, Options options)
|
||||
throws OllamaBaseException, IOException, InterruptedException {
|
||||
OllamaRequestModel ollamaRequestModel = new OllamaRequestModel(model, prompt);
|
||||
ollamaRequestModel.setOptions(options.getOptionsMap());
|
||||
return askSync(ollamaRequestModel);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package io.github.amithkoujalgi.ollama4j.core.models;
|
||||
|
||||
|
||||
import static io.github.amithkoujalgi.ollama4j.core.utils.Utils.getObjectMapper;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@@ -13,6 +13,7 @@ public class OllamaRequestModel {
|
||||
private String model;
|
||||
private String prompt;
|
||||
private List<String> images;
|
||||
private Map<String, Object> options;
|
||||
|
||||
public OllamaRequestModel(String model, String prompt) {
|
||||
this.model = model;
|
||||
|
||||
@@ -21,6 +21,7 @@ public class OllamaModelType {
|
||||
public static final String VICUNA = "vicuna";
|
||||
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 WIZARDCODER = "wizardcoder";
|
||||
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.OllamaResult;
|
||||
import io.github.amithkoujalgi.ollama4j.core.types.OllamaModelType;
|
||||
import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
@@ -100,10 +101,12 @@ class TestMockedAPIs {
|
||||
OllamaAPI ollamaAPI = Mockito.mock(OllamaAPI.class);
|
||||
String model = OllamaModelType.LLAMA2;
|
||||
String prompt = "some prompt text";
|
||||
OptionsBuilder optionsBuilder = new OptionsBuilder();
|
||||
try {
|
||||
when(ollamaAPI.ask(model, prompt)).thenReturn(new OllamaResult("", 0, 200));
|
||||
ollamaAPI.ask(model, prompt);
|
||||
verify(ollamaAPI, times(1)).ask(model, prompt);
|
||||
when(ollamaAPI.ask(model, prompt, optionsBuilder.build()))
|
||||
.thenReturn(new OllamaResult("", 0, 200));
|
||||
ollamaAPI.ask(model, prompt, optionsBuilder.build());
|
||||
verify(ollamaAPI, times(1)).ask(model, prompt, optionsBuilder.build());
|
||||
} catch (IOException | OllamaBaseException | InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user