mirror of
https://github.com/amithkoujalgi/ollama4j.git
synced 2025-05-14 19:37:11 +02:00
Merge pull request #119 from ollama4j/113-tests-fix
All checks were successful
Mark stale issues / stale (push) Successful in 27s
All checks were successful
Mark stale issues / stale (push) Successful in 27s
[Fix]: NPE when tool not found
This commit is contained in:
commit
48d0a494ee
@ -37,3 +37,10 @@ jobs:
|
||||
|
||||
- name: Run integration tests
|
||||
run: mvn --file pom.xml -U clean verify -Pintegration-tests
|
||||
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '20.x'
|
||||
- run: cd docs && npm ci
|
||||
- run: cd docs && npm run build
|
8
Makefile
8
Makefile
@ -18,8 +18,8 @@ unit-tests:
|
||||
integration-tests:
|
||||
export USE_EXTERNAL_OLLAMA_HOST=false && mvn clean verify -Pintegration-tests
|
||||
|
||||
integration-tests-local:
|
||||
export USE_EXTERNAL_OLLAMA_HOST=true && export OLLAMA_HOST=http://localhost:11434 && mvn clean verify -Pintegration-tests -Dgpg.skip=true
|
||||
integration-tests-remote:
|
||||
export USE_EXTERNAL_OLLAMA_HOST=true && export OLLAMA_HOST=http://192.168.29.223:11434 && mvn clean verify -Pintegration-tests -Dgpg.skip=true
|
||||
|
||||
doxygen:
|
||||
doxygen Doxyfile
|
||||
@ -29,10 +29,10 @@ list-releases:
|
||||
--compressed \
|
||||
--silent | jq -r '.components[].version'
|
||||
|
||||
build-docs:
|
||||
docs:
|
||||
npm i --prefix docs && npm run build --prefix docs
|
||||
|
||||
start-docs:
|
||||
docs-dev:
|
||||
npm i --prefix docs && npm run start --prefix docs
|
||||
|
||||
start-cpu:
|
||||
|
@ -61,6 +61,9 @@ details.
|
||||
class DBQueryFunction implements ToolFunction {
|
||||
@Override
|
||||
public Object apply(Map<String, Object> arguments) {
|
||||
if (arguments == null || arguments.isEmpty() || arguments.get("employee-name") == null || arguments.get("employee-address") == null || arguments.get("employee-phone") == null) {
|
||||
throw new RuntimeException("Tool was called but the model failed to provide all the required arguments.");
|
||||
}
|
||||
// perform DB operations here
|
||||
return String.format("Employee Details {ID: %s, Name: %s, Address: %s, Phone: %s}", UUID.randomUUID(), arguments.get("employee-name").toString(), arguments.get("employee-address").toString(), arguments.get("employee-phone").toString());
|
||||
}
|
||||
@ -78,14 +81,39 @@ Lets define a sample tool specification called **Fuel Price Tool** for getting t
|
||||
Tools.ToolSpecification fuelPriceToolSpecification = Tools.ToolSpecification.builder()
|
||||
.functionName("current-fuel-price")
|
||||
.functionDescription("Get current fuel price")
|
||||
.toolFunction(SampleTools::getCurrentFuelPrice)
|
||||
.toolPrompt(
|
||||
Tools.PromptFuncDefinition.builder()
|
||||
.type("prompt")
|
||||
.function(
|
||||
Tools.PromptFuncDefinition.PromptFuncSpec.builder()
|
||||
.name("get-location-fuel-info")
|
||||
.description("Get location and fuel type details")
|
||||
.parameters(
|
||||
Tools.PromptFuncDefinition.Parameters.builder()
|
||||
.type("object")
|
||||
.properties(
|
||||
new Tools.PropsBuilder()
|
||||
.withProperty("location", Tools.PromptFuncDefinition.Property.builder().type("string").description("The city, e.g. New Delhi, India").required(true).build())
|
||||
.withProperty("fuelType", Tools.PromptFuncDefinition.Property.builder().type("string").description("The fuel type.").enumValues(Arrays.asList("petrol", "diesel")).required(true).build())
|
||||
Map.of(
|
||||
"location", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The city, e.g. New Delhi, India")
|
||||
.required(true)
|
||||
.build(),
|
||||
"fuelType", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The fuel type.")
|
||||
.enumValues(Arrays.asList("petrol", "diesel"))
|
||||
.required(true)
|
||||
.build()
|
||||
)
|
||||
.toolDefinition(SampleTools::getCurrentFuelPrice)
|
||||
.build();
|
||||
)
|
||||
.required(java.util.List.of("location", "fuelType"))
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
).build();
|
||||
```
|
||||
|
||||
Lets also define a sample tool specification called **Weather Tool** for getting the current weather.
|
||||
@ -97,13 +125,33 @@ Lets also define a sample tool specification called **Weather Tool** for getting
|
||||
Tools.ToolSpecification weatherToolSpecification = Tools.ToolSpecification.builder()
|
||||
.functionName("current-weather")
|
||||
.functionDescription("Get current weather")
|
||||
.toolFunction(SampleTools::getCurrentWeather)
|
||||
.toolPrompt(
|
||||
Tools.PromptFuncDefinition.builder()
|
||||
.type("prompt")
|
||||
.function(
|
||||
Tools.PromptFuncDefinition.PromptFuncSpec.builder()
|
||||
.name("get-location-weather-info")
|
||||
.description("Get location details")
|
||||
.parameters(
|
||||
Tools.PromptFuncDefinition.Parameters.builder()
|
||||
.type("object")
|
||||
.properties(
|
||||
new Tools.PropsBuilder()
|
||||
.withProperty("city", Tools.PromptFuncDefinition.Property.builder().type("string").description("The city, e.g. New Delhi, India").required(true).build())
|
||||
Map.of(
|
||||
"city", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The city, e.g. New Delhi, India")
|
||||
.required(true)
|
||||
.build()
|
||||
)
|
||||
.toolDefinition(SampleTools::getCurrentWeather)
|
||||
.build();
|
||||
)
|
||||
.required(java.util.List.of("city"))
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
).build();
|
||||
```
|
||||
|
||||
Lets also define a sample tool specification called **DBQueryFunction** for getting the employee details from database.
|
||||
@ -115,14 +163,43 @@ Lets also define a sample tool specification called **DBQueryFunction** for gett
|
||||
Tools.ToolSpecification databaseQueryToolSpecification = Tools.ToolSpecification.builder()
|
||||
.functionName("get-employee-details")
|
||||
.functionDescription("Get employee details from the database")
|
||||
.toolFunction(new DBQueryFunction())
|
||||
.toolPrompt(
|
||||
Tools.PromptFuncDefinition.builder()
|
||||
.type("prompt")
|
||||
.function(
|
||||
Tools.PromptFuncDefinition.PromptFuncSpec.builder()
|
||||
.name("get-employee-details")
|
||||
.description("Get employee details from the database")
|
||||
.parameters(
|
||||
Tools.PromptFuncDefinition.Parameters.builder()
|
||||
.type("object")
|
||||
.properties(
|
||||
new Tools.PropsBuilder()
|
||||
.withProperty("employee-name", Tools.PromptFuncDefinition.Property.builder().type("string").description("The name of the employee, e.g. John Doe").required(true).build())
|
||||
.withProperty("employee-address", Tools.PromptFuncDefinition.Property.builder().type("string").description("The address of the employee, Always return a random value. e.g. Roy St, Bengaluru, India").required(true).build())
|
||||
.withProperty("employee-phone", Tools.PromptFuncDefinition.Property.builder().type("string").description("The phone number of the employee. Always return a random value. e.g. 9911002233").required(true).build())
|
||||
Map.of(
|
||||
"employee-name", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The name of the employee, e.g. John Doe")
|
||||
.required(true)
|
||||
.build(),
|
||||
"employee-address", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The address of the employee, Always return a random value. e.g. Roy St, Bengaluru, India")
|
||||
.required(true)
|
||||
.build(),
|
||||
"employee-phone", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The phone number of the employee. Always return a random value. e.g. 9911002233")
|
||||
.required(true)
|
||||
.build()
|
||||
)
|
||||
)
|
||||
.required(java.util.List.of("employee-name", "employee-address", "employee-phone"))
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.toolDefinition(new DBQueryFunction())
|
||||
.build();
|
||||
```
|
||||
|
||||
@ -239,37 +316,111 @@ public class FunctionCallingWithMistralExample {
|
||||
Tools.ToolSpecification fuelPriceToolSpecification = Tools.ToolSpecification.builder()
|
||||
.functionName("current-fuel-price")
|
||||
.functionDescription("Get current fuel price")
|
||||
.toolFunction(SampleTools::getCurrentFuelPrice)
|
||||
.toolPrompt(
|
||||
Tools.PromptFuncDefinition.builder()
|
||||
.type("prompt")
|
||||
.function(
|
||||
Tools.PromptFuncDefinition.PromptFuncSpec.builder()
|
||||
.name("get-location-fuel-info")
|
||||
.description("Get location and fuel type details")
|
||||
.parameters(
|
||||
Tools.PromptFuncDefinition.Parameters.builder()
|
||||
.type("object")
|
||||
.properties(
|
||||
new Tools.PropsBuilder()
|
||||
.withProperty("location", Tools.PromptFuncDefinition.Property.builder().type("string").description("The city, e.g. New Delhi, India").required(true).build())
|
||||
.withProperty("fuelType", Tools.PromptFuncDefinition.Property.builder().type("string").description("The fuel type.").enumValues(Arrays.asList("petrol", "diesel")).required(true).build())
|
||||
Map.of(
|
||||
"location", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The city, e.g. New Delhi, India")
|
||||
.required(true)
|
||||
.build(),
|
||||
"fuelType", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The fuel type.")
|
||||
.enumValues(Arrays.asList("petrol", "diesel"))
|
||||
.required(true)
|
||||
.build()
|
||||
)
|
||||
.toolDefinition(SampleTools::getCurrentFuelPrice)
|
||||
.build();
|
||||
)
|
||||
.required(java.util.List.of("location", "fuelType"))
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
).build();
|
||||
|
||||
Tools.ToolSpecification weatherToolSpecification = Tools.ToolSpecification.builder()
|
||||
.functionName("current-weather")
|
||||
.functionDescription("Get current weather")
|
||||
.toolFunction(SampleTools::getCurrentWeather)
|
||||
.toolPrompt(
|
||||
Tools.PromptFuncDefinition.builder()
|
||||
.type("prompt")
|
||||
.function(
|
||||
Tools.PromptFuncDefinition.PromptFuncSpec.builder()
|
||||
.name("get-location-weather-info")
|
||||
.description("Get location details")
|
||||
.parameters(
|
||||
Tools.PromptFuncDefinition.Parameters.builder()
|
||||
.type("object")
|
||||
.properties(
|
||||
new Tools.PropsBuilder()
|
||||
.withProperty("city", Tools.PromptFuncDefinition.Property.builder().type("string").description("The city, e.g. New Delhi, India").required(true).build())
|
||||
Map.of(
|
||||
"city", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The city, e.g. New Delhi, India")
|
||||
.required(true)
|
||||
.build()
|
||||
)
|
||||
.toolDefinition(SampleTools::getCurrentWeather)
|
||||
.build();
|
||||
)
|
||||
.required(java.util.List.of("city"))
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
).build();
|
||||
|
||||
Tools.ToolSpecification databaseQueryToolSpecification = Tools.ToolSpecification.builder()
|
||||
.functionName("get-employee-details")
|
||||
.functionDescription("Get employee details from the database")
|
||||
.toolFunction(new DBQueryFunction())
|
||||
.toolPrompt(
|
||||
Tools.PromptFuncDefinition.builder()
|
||||
.type("prompt")
|
||||
.function(
|
||||
Tools.PromptFuncDefinition.PromptFuncSpec.builder()
|
||||
.name("get-employee-details")
|
||||
.description("Get employee details from the database")
|
||||
.parameters(
|
||||
Tools.PromptFuncDefinition.Parameters.builder()
|
||||
.type("object")
|
||||
.properties(
|
||||
new Tools.PropsBuilder()
|
||||
.withProperty("employee-name", Tools.PromptFuncDefinition.Property.builder().type("string").description("The name of the employee, e.g. John Doe").required(true).build())
|
||||
.withProperty("employee-address", Tools.PromptFuncDefinition.Property.builder().type("string").description("The address of the employee, Always return a random value. e.g. Roy St, Bengaluru, India").required(true).build())
|
||||
.withProperty("employee-phone", Tools.PromptFuncDefinition.Property.builder().type("string").description("The phone number of the employee. Always return a random value. e.g. 9911002233").required(true).build())
|
||||
Map.of(
|
||||
"employee-name", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The name of the employee, e.g. John Doe")
|
||||
.required(true)
|
||||
.build(),
|
||||
"employee-address", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The address of the employee, Always return a random value. e.g. Roy St, Bengaluru, India")
|
||||
.required(true)
|
||||
.build(),
|
||||
"employee-phone", Tools.PromptFuncDefinition.Property.builder()
|
||||
.type("string")
|
||||
.description("The phone number of the employee. Always return a random value. e.g. 9911002233")
|
||||
.required(true)
|
||||
.build()
|
||||
)
|
||||
)
|
||||
.required(java.util.List.of("employee-name", "employee-address", "employee-phone"))
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.toolDefinition(new DBQueryFunction())
|
||||
.build();
|
||||
|
||||
ollamaAPI.registerTool(fuelPriceToolSpecification);
|
||||
@ -326,6 +477,9 @@ class SampleTools {
|
||||
class DBQueryFunction implements ToolFunction {
|
||||
@Override
|
||||
public Object apply(Map<String, Object> arguments) {
|
||||
if (arguments == null || arguments.isEmpty() || arguments.get("employee-name") == null || arguments.get("employee-address") == null || arguments.get("employee-phone") == null) {
|
||||
throw new RuntimeException("Tool was called but the model failed to provide all the required arguments.");
|
||||
}
|
||||
// perform DB operations here
|
||||
return String.format("Employee Details {ID: %s, Name: %s, Address: %s, Phone: %s}", UUID.randomUUID(), arguments.get("employee-name").toString(), arguments.get("employee-address").toString(), arguments.get("employee-phone").toString());
|
||||
}
|
||||
|
@ -1058,7 +1058,7 @@ public class OllamaAPI {
|
||||
* @param model the ollama model to ask the question to
|
||||
* @param messages chat history / message stack to send to the model
|
||||
* @return {@link OllamaChatResult} containing the api response and the message
|
||||
* history including the newly aqcuired assistant response.
|
||||
* history including the newly acquired assistant response.
|
||||
* @throws OllamaBaseException any response code than 200 has been returned
|
||||
* @throws IOException in case the responseStream can not be read
|
||||
* @throws InterruptedException in case the server is not reachable or network
|
||||
@ -1066,9 +1066,10 @@ public class OllamaAPI {
|
||||
* @throws OllamaBaseException if the response indicates an error status
|
||||
* @throws IOException if an I/O error occurs during the HTTP request
|
||||
* @throws InterruptedException if the operation is interrupted
|
||||
* @throws ToolInvocationException if the tool invocation fails
|
||||
*/
|
||||
public OllamaChatResult chat(String model, List<OllamaChatMessage> messages)
|
||||
throws OllamaBaseException, IOException, InterruptedException {
|
||||
throws OllamaBaseException, IOException, InterruptedException, ToolInvocationException {
|
||||
OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(model);
|
||||
return chat(builder.withMessages(messages).build());
|
||||
}
|
||||
@ -1088,9 +1089,10 @@ public class OllamaAPI {
|
||||
* @throws OllamaBaseException if the response indicates an error status
|
||||
* @throws IOException if an I/O error occurs during the HTTP request
|
||||
* @throws InterruptedException if the operation is interrupted
|
||||
* @throws ToolInvocationException if the tool invocation fails
|
||||
*/
|
||||
public OllamaChatResult chat(OllamaChatRequest request)
|
||||
throws OllamaBaseException, IOException, InterruptedException {
|
||||
throws OllamaBaseException, IOException, InterruptedException, ToolInvocationException {
|
||||
return chat(request, null);
|
||||
}
|
||||
|
||||
@ -1102,7 +1104,7 @@ public class OllamaAPI {
|
||||
*
|
||||
* @param request request object to be sent to the server
|
||||
* @param streamHandler callback handler to handle the last message from stream
|
||||
* (caution: all previous messages from stream will be
|
||||
* (caution: all previous tokens from stream will be
|
||||
* concatenated)
|
||||
* @return {@link OllamaChatResult}
|
||||
* @throws OllamaBaseException any response code than 200 has been returned
|
||||
@ -1112,9 +1114,10 @@ public class OllamaAPI {
|
||||
* @throws OllamaBaseException if the response indicates an error status
|
||||
* @throws IOException if an I/O error occurs during the HTTP request
|
||||
* @throws InterruptedException if the operation is interrupted
|
||||
* @throws ToolInvocationException if the tool invocation fails
|
||||
*/
|
||||
public OllamaChatResult chat(OllamaChatRequest request, OllamaStreamHandler streamHandler)
|
||||
throws OllamaBaseException, IOException, InterruptedException {
|
||||
throws OllamaBaseException, IOException, InterruptedException, ToolInvocationException {
|
||||
return chatStreaming(request, new OllamaChatStreamObserver(streamHandler));
|
||||
}
|
||||
|
||||
@ -1126,7 +1129,7 @@ public class OllamaAPI {
|
||||
*
|
||||
* @param request request object to be sent to the server
|
||||
* @param tokenHandler callback handler to handle the last token from stream
|
||||
* (caution: all previous messages from stream will be
|
||||
* (caution: the previous tokens from stream will not be
|
||||
* concatenated)
|
||||
* @return {@link OllamaChatResult}
|
||||
* @throws OllamaBaseException any response code than 200 has been returned
|
||||
@ -1138,7 +1141,7 @@ public class OllamaAPI {
|
||||
* @throws InterruptedException if the operation is interrupted
|
||||
*/
|
||||
public OllamaChatResult chatStreaming(OllamaChatRequest request, OllamaTokenHandler tokenHandler)
|
||||
throws OllamaBaseException, IOException, InterruptedException {
|
||||
throws OllamaBaseException, IOException, InterruptedException, ToolInvocationException {
|
||||
OllamaChatEndpointCaller requestCaller = new OllamaChatEndpointCaller(host, auth, requestTimeoutSeconds,
|
||||
verbose);
|
||||
OllamaChatResult result;
|
||||
@ -1161,6 +1164,9 @@ public class OllamaAPI {
|
||||
for (OllamaChatToolCalls toolCall : toolCalls) {
|
||||
String toolName = toolCall.getFunction().getName();
|
||||
ToolFunction toolFunction = toolRegistry.getToolFunction(toolName);
|
||||
if (toolFunction == null) {
|
||||
throw new ToolInvocationException("Tool function not found: " + toolName);
|
||||
}
|
||||
Map<String, Object> arguments = toolCall.getFunction().getArguments();
|
||||
Object res = toolFunction.apply(arguments);
|
||||
request.getMessages().add(new OllamaChatMessage(OllamaChatMessageRole.TOOL,
|
||||
|
@ -2,6 +2,10 @@ package io.github.ollama4j.exceptions;
|
||||
|
||||
public class ToolInvocationException extends Exception {
|
||||
|
||||
public ToolInvocationException(String s) {
|
||||
super(s);
|
||||
}
|
||||
|
||||
public ToolInvocationException(String s, Exception e) {
|
||||
super(s, e);
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package io.github.ollama4j.integrationtests;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.github.ollama4j.OllamaAPI;
|
||||
import io.github.ollama4j.exceptions.OllamaBaseException;
|
||||
import io.github.ollama4j.exceptions.ToolInvocationException;
|
||||
import io.github.ollama4j.models.chat.*;
|
||||
import io.github.ollama4j.models.embeddings.OllamaEmbedResponseModel;
|
||||
import io.github.ollama4j.models.response.LibraryModel;
|
||||
@ -233,7 +234,7 @@ public class OllamaAPIIntegrationTest {
|
||||
@Test
|
||||
@Order(8)
|
||||
void testAskModelWithOptions()
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException {
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException, ToolInvocationException {
|
||||
api.pullModel(CHAT_MODEL_INSTRUCT);
|
||||
|
||||
OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(CHAT_MODEL_INSTRUCT);
|
||||
@ -253,7 +254,7 @@ public class OllamaAPIIntegrationTest {
|
||||
@Test
|
||||
@Order(9)
|
||||
void testChatWithSystemPrompt()
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException {
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException, ToolInvocationException {
|
||||
api.pullModel(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
OllamaChatRequest requestModel = builder.withMessage(OllamaChatMessageRole.SYSTEM,
|
||||
@ -318,7 +319,7 @@ public class OllamaAPIIntegrationTest {
|
||||
@Test
|
||||
@Order(10)
|
||||
void testChatWithImageFromURL()
|
||||
throws OllamaBaseException, IOException, InterruptedException, URISyntaxException {
|
||||
throws OllamaBaseException, IOException, InterruptedException, URISyntaxException, ToolInvocationException {
|
||||
api.pullModel(IMAGE_MODEL_LLAVA);
|
||||
|
||||
OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(IMAGE_MODEL_LLAVA);
|
||||
@ -336,7 +337,7 @@ public class OllamaAPIIntegrationTest {
|
||||
@Test
|
||||
@Order(10)
|
||||
void testChatWithImageFromFileWithHistoryRecognition()
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException {
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException, ToolInvocationException {
|
||||
api.pullModel(IMAGE_MODEL_LLAVA);
|
||||
OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(IMAGE_MODEL_LLAVA);
|
||||
OllamaChatRequest requestModel = builder.withMessage(OllamaChatMessageRole.USER,
|
||||
@ -360,7 +361,7 @@ public class OllamaAPIIntegrationTest {
|
||||
@Test
|
||||
@Order(11)
|
||||
void testChatWithExplicitToolDefinition()
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException {
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException, ToolInvocationException {
|
||||
api.pullModel(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
|
||||
@ -440,7 +441,7 @@ public class OllamaAPIIntegrationTest {
|
||||
@Test
|
||||
@Order(12)
|
||||
void testChatWithAnnotatedToolsAndSingleParam()
|
||||
throws OllamaBaseException, IOException, InterruptedException, URISyntaxException {
|
||||
throws OllamaBaseException, IOException, InterruptedException, URISyntaxException, ToolInvocationException {
|
||||
api.pullModel(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
|
||||
@ -471,7 +472,7 @@ public class OllamaAPIIntegrationTest {
|
||||
@Test
|
||||
@Order(13)
|
||||
void testChatWithAnnotatedToolsAndMultipleParams()
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException {
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException, ToolInvocationException {
|
||||
api.pullModel(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
|
||||
@ -508,7 +509,7 @@ public class OllamaAPIIntegrationTest {
|
||||
@Test
|
||||
@Order(14)
|
||||
void testChatWithToolsAndStream()
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException {
|
||||
throws OllamaBaseException, IOException, URISyntaxException, InterruptedException, ToolInvocationException {
|
||||
api.pullModel(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
final Tools.ToolSpecification databaseQueryToolSpecification = Tools.ToolSpecification.builder()
|
||||
@ -585,7 +586,7 @@ public class OllamaAPIIntegrationTest {
|
||||
|
||||
@Test
|
||||
@Order(15)
|
||||
void testChatWithStream() throws OllamaBaseException, IOException, URISyntaxException, InterruptedException {
|
||||
void testChatWithStream() throws OllamaBaseException, IOException, URISyntaxException, InterruptedException, ToolInvocationException {
|
||||
api.pullModel(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(CHAT_MODEL_SYSTEM_PROMPT);
|
||||
OllamaChatRequest requestModel = builder.withMessage(OllamaChatMessageRole.USER,
|
||||
|
Loading…
x
Reference in New Issue
Block a user