mirror of
				https://github.com/amithkoujalgi/ollama4j.git
				synced 2025-11-04 02:20:50 +01:00 
			
		
		
		
	added findModelTagFromLibrary API
				
					
				
			This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
				
			|||||||
---
 | 
					---
 | 
				
			||||||
sidebar_position: 4
 | 
					sidebar_position: 5
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Create Model
 | 
					# Create Model
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
---
 | 
					---
 | 
				
			||||||
sidebar_position: 5
 | 
					sidebar_position: 6
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Delete Model
 | 
					# Delete Model
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
---
 | 
					---
 | 
				
			||||||
sidebar_position: 3
 | 
					sidebar_position: 4
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Get Model Details
 | 
					# Get Model Details
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,15 @@
 | 
				
			|||||||
---
 | 
					---
 | 
				
			||||||
sidebar_position: 6
 | 
					sidebar_position: 1
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# List Models from Ollama Library
 | 
					# Models from Ollama Library
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This API retrieves a list of models from the Ollama library. It fetches available models directly from the Ollama
 | 
					These API retrieves a list of models directly from the Ollama library.
 | 
				
			||||||
library page, including details such as the model's name, pull count, popular tags, tag count, and the last update time.
 | 
					
 | 
				
			||||||
 | 
					### List Models from Ollama Library
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This API fetches available models from the Ollama library page, including details such as the model's name, pull count,
 | 
				
			||||||
 | 
					popular tags, tag count, and the last update time.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```java title="ListLibraryModels.java"
 | 
					```java title="ListLibraryModels.java"
 | 
				
			||||||
import io.github.ollama4j.OllamaAPI;
 | 
					import io.github.ollama4j.OllamaAPI;
 | 
				
			||||||
@@ -28,7 +32,7 @@ public class Main {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The following is the sample response:
 | 
					The following is the sample output:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
[
 | 
					[
 | 
				
			||||||
@@ -37,7 +41,7 @@ The following is the sample response:
 | 
				
			|||||||
]
 | 
					]
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Get Tags of a Library Model
 | 
					### Get Tags of a Library Model
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This API Fetches the tags associated with a specific model from Ollama library.
 | 
					This API Fetches the tags associated with a specific model from Ollama library.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -63,6 +67,8 @@ public class Main {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following is the sample output:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
LibraryModelDetail(
 | 
					LibraryModelDetail(
 | 
				
			||||||
  model=LibraryModel(name=llama3.2-vision, description=Llama 3.2 Vision is a collection of instruction-tuned image reasoning generative models in 11B and 90B sizes., pullCount=21.1K, totalTags=9, popularTags=[vision, 11b, 90b], lastUpdated=yesterday), 
 | 
					  model=LibraryModel(name=llama3.2-vision, description=Llama 3.2 Vision is a collection of instruction-tuned image reasoning generative models in 11B and 90B sizes., pullCount=21.1K, totalTags=9, popularTags=[vision, 11b, 90b], lastUpdated=yesterday), 
 | 
				
			||||||
@@ -74,12 +80,12 @@ LibraryModelDetail(
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You can use this information to pull models into Ollama server.
 | 
					### Find a model from Ollama library
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```java title="PullLibraryModelTags.java"
 | 
					This API finds a specific model using model `name` and `tag` from Ollama library.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```java title="FindLibraryModel.java"
 | 
				
			||||||
import io.github.ollama4j.OllamaAPI;
 | 
					import io.github.ollama4j.OllamaAPI;
 | 
				
			||||||
import io.github.ollama4j.models.response.LibraryModel;
 | 
					 | 
				
			||||||
import io.github.ollama4j.models.response.LibraryModelDetail;
 | 
					 | 
				
			||||||
import io.github.ollama4j.models.response.LibraryModelTag;
 | 
					import io.github.ollama4j.models.response.LibraryModelTag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class Main {
 | 
					public class Main {
 | 
				
			||||||
@@ -90,11 +96,36 @@ public class Main {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        OllamaAPI ollamaAPI = new OllamaAPI(host);
 | 
					        OllamaAPI ollamaAPI = new OllamaAPI(host);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        List<LibraryModel> libraryModels = ollamaAPI.listModelsFromLibrary();
 | 
					        LibraryModelTag libraryModelTag = ollamaAPI.findModelTagFromLibrary("qwen2.5", "7b");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        LibraryModelDetail libraryModelDetail = ollamaAPI.getLibraryModelDetails(libraryModels.get(0));
 | 
					        System.out.println(libraryModelTag);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        LibraryModelTag libraryModelTag = libraryModelDetail.getTags().get(0);
 | 
					The following is the sample output:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					LibraryModelTag(name=qwen2.5, tag=7b, size=4.7GB, lastUpdated=7 weeks ago)
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Pull model using `LibraryModelTag`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can use `LibraryModelTag` to pull models into Ollama server.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```java title="PullLibraryModelTags.java"
 | 
				
			||||||
 | 
					import io.github.ollama4j.OllamaAPI;
 | 
				
			||||||
 | 
					import io.github.ollama4j.models.response.LibraryModelTag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Main {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void main(String[] args) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String host = "http://localhost:11434/";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        OllamaAPI ollamaAPI = new OllamaAPI(host);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        LibraryModelTag libraryModelTag = ollamaAPI.findModelTagFromLibrary("qwen2.5", "7b");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ollamaAPI.pullModel(libraryModelTag);
 | 
					        ollamaAPI.pullModel(libraryModelTag);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
---
 | 
					---
 | 
				
			||||||
sidebar_position: 1
 | 
					sidebar_position: 2
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# List Models
 | 
					# List Local Models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This API lets you list downloaded/available models on the Ollama server.
 | 
					This API lets you list downloaded/available models on the Ollama server.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
---
 | 
					---
 | 
				
			||||||
sidebar_position: 2
 | 
					sidebar_position: 3
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Pull Model
 | 
					# Pull Model
 | 
				
			||||||
@@ -24,3 +24,11 @@ public class Main {
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Once downloaded, you can see them when you use [list models](./list-models) API.
 | 
					Once downloaded, you can see them when you use [list models](./list-models) API.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:::info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can even pull models using Ollama model library APIs. This looks up the models directly on the Ollama model library page. Refer
 | 
				
			||||||
 | 
					to [this](./list-library-models#pull-model-using-librarymodeltag).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -204,18 +204,11 @@ public class OllamaAPI {
 | 
				
			|||||||
                    // if name cannot be extracted, skip.
 | 
					                    // if name cannot be extracted, skip.
 | 
				
			||||||
                    continue;
 | 
					                    continue;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                Optional.ofNullable(names.first())
 | 
					                Optional.ofNullable(names.first()).map(Element::text).ifPresent(model::setName);
 | 
				
			||||||
                        .map(Element::text)
 | 
					 | 
				
			||||||
                        .ifPresent(model::setName);
 | 
					 | 
				
			||||||
                model.setDescription(Optional.ofNullable(desc.first()).map(Element::text).orElse(""));
 | 
					                model.setDescription(Optional.ofNullable(desc.first()).map(Element::text).orElse(""));
 | 
				
			||||||
                model.setPopularTags(Optional.of(popularTags)
 | 
					                model.setPopularTags(Optional.of(popularTags).map(tags -> tags.stream().map(Element::text).collect(Collectors.toList())).orElse(new ArrayList<>()));
 | 
				
			||||||
                        .map(tags -> tags.stream().map(Element::text).collect(Collectors.toList()))
 | 
					 | 
				
			||||||
                        .orElse(new ArrayList<>()));
 | 
					 | 
				
			||||||
                model.setPullCount(Optional.ofNullable(pullCounts.first()).map(Element::text).orElse(""));
 | 
					                model.setPullCount(Optional.ofNullable(pullCounts.first()).map(Element::text).orElse(""));
 | 
				
			||||||
                model.setTotalTags(Optional.ofNullable(totalTags.first())
 | 
					                model.setTotalTags(Optional.ofNullable(totalTags.first()).map(Element::text).map(Integer::parseInt).orElse(0));
 | 
				
			||||||
                        .map(Element::text)
 | 
					 | 
				
			||||||
                        .map(Integer::parseInt)
 | 
					 | 
				
			||||||
                        .orElse(0));
 | 
					 | 
				
			||||||
                model.setLastUpdated(Optional.ofNullable(lastUpdatedTime.first()).map(Element::text).orElse(""));
 | 
					                model.setLastUpdated(Optional.ofNullable(lastUpdatedTime.first()).map(Element::text).orElse(""));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                models.add(model);
 | 
					                models.add(model);
 | 
				
			||||||
@@ -263,19 +256,9 @@ public class OllamaAPI {
 | 
				
			|||||||
                    continue;
 | 
					                    continue;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                libraryModelTag.setName(libraryModel.getName());
 | 
					                libraryModelTag.setName(libraryModel.getName());
 | 
				
			||||||
                Optional.ofNullable(tags.first())
 | 
					                Optional.ofNullable(tags.first()).map(Element::text).ifPresent(libraryModelTag::setTag);
 | 
				
			||||||
                        .map(Element::text)
 | 
					                libraryModelTag.setSize(Optional.ofNullable(tagsMetas.first()).map(element -> element.text().split("•")).filter(parts -> parts.length > 1).map(parts -> parts[1].trim()).orElse(""));
 | 
				
			||||||
                        .ifPresent(libraryModelTag::setTag);
 | 
					                libraryModelTag.setLastUpdated(Optional.ofNullable(tagsMetas.first()).map(element -> element.text().split("•")).filter(parts -> parts.length > 1).map(parts -> parts[2].trim()).orElse(""));
 | 
				
			||||||
                libraryModelTag.setSize(Optional.ofNullable(tagsMetas.first())
 | 
					 | 
				
			||||||
                        .map(element -> element.text().split("•"))
 | 
					 | 
				
			||||||
                        .filter(parts -> parts.length > 1)
 | 
					 | 
				
			||||||
                        .map(parts -> parts[1].trim())
 | 
					 | 
				
			||||||
                        .orElse(""));
 | 
					 | 
				
			||||||
                libraryModelTag.setLastUpdated(Optional.ofNullable(tagsMetas.first())
 | 
					 | 
				
			||||||
                        .map(element -> element.text().split("•"))
 | 
					 | 
				
			||||||
                        .filter(parts -> parts.length > 1)
 | 
					 | 
				
			||||||
                        .map(parts -> parts[2].trim())
 | 
					 | 
				
			||||||
                        .orElse(""));
 | 
					 | 
				
			||||||
                libraryModelTags.add(libraryModelTag);
 | 
					                libraryModelTags.add(libraryModelTag);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            LibraryModelDetail libraryModelDetail = new LibraryModelDetail();
 | 
					            LibraryModelDetail libraryModelDetail = new LibraryModelDetail();
 | 
				
			||||||
@@ -287,6 +270,30 @@ public class OllamaAPI {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Finds a specific model using model name and tag from Ollama library.
 | 
				
			||||||
 | 
					     * <p>
 | 
				
			||||||
 | 
					     * This method retrieves the model from the Ollama library by its name, then fetches its tags.
 | 
				
			||||||
 | 
					     * It searches through the tags of the model to find one that matches the specified tag name.
 | 
				
			||||||
 | 
					     * If the model or the tag is not found, it throws a {@link NoSuchElementException}.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param modelName The name of the model to search for in the library.
 | 
				
			||||||
 | 
					     * @param tag       The tag name to search for within the specified model.
 | 
				
			||||||
 | 
					     * @return The {@link LibraryModelTag} associated with the specified model and tag.
 | 
				
			||||||
 | 
					     * @throws OllamaBaseException    If there is a problem with the Ollama library operations.
 | 
				
			||||||
 | 
					     * @throws IOException            If an I/O error occurs during the operation.
 | 
				
			||||||
 | 
					     * @throws URISyntaxException     If there is an error with the URI syntax.
 | 
				
			||||||
 | 
					     * @throws InterruptedException   If the operation is interrupted.
 | 
				
			||||||
 | 
					     * @throws NoSuchElementException If the model or the tag is not found.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public LibraryModelTag findModelTagFromLibrary(String modelName, String tag) throws OllamaBaseException, IOException, URISyntaxException, InterruptedException {
 | 
				
			||||||
 | 
					        List<LibraryModel> libraryModels = this.listModelsFromLibrary();
 | 
				
			||||||
 | 
					        LibraryModel libraryModel = libraryModels.stream().filter(model -> model.getName().equals(modelName)).findFirst().orElseThrow(() -> new NoSuchElementException(String.format("Model by name '%s' not found", modelName)));
 | 
				
			||||||
 | 
					        LibraryModelDetail libraryModelDetail = this.getLibraryModelDetails(libraryModel);
 | 
				
			||||||
 | 
					        LibraryModelTag libraryModelTag = libraryModelDetail.getTags().stream().filter(tagName -> tagName.getTag().equals(tag)).findFirst().orElseThrow(() -> new NoSuchElementException(String.format("Tag '%s' for model '%s' not found", tag, modelName)));
 | 
				
			||||||
 | 
					        return libraryModelTag;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Pull a model on the Ollama server from the list of <a
 | 
					     * Pull a model on the Ollama server from the list of <a
 | 
				
			||||||
     * href="https://ollama.ai/library">available models</a>.
 | 
					     * href="https://ollama.ai/library">available models</a>.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user