Skip to content

Commit

Permalink
feat: Available Ollama models support for
Browse files Browse the repository at this point in the history
quarkus.langchain4j.ollama.chat-model.model-id property value

Signed-off-by: azerr <azerr@redhat.com>
  • Loading branch information
angelozerr committed Aug 20, 2024
1 parent 9f4c520 commit aec0b5f
Show file tree
Hide file tree
Showing 4 changed files with 140 additions and 2 deletions.
4 changes: 2 additions & 2 deletions quarkus.ls.ext/com.redhat.quarkus.ls/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.11</maven.compiler.target>
<maven.compiler.source>1.11</maven.compiler.source>
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
<dev.build.timestamp>${maven.build.timestamp}</dev.build.timestamp>
<lsp4j.version>0.14.0</lsp4j.version>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
/*******************************************************************************
* Copyright (c) 2024 Red Hat Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
* which is available at https://www.apache.org/licenses/LICENSE-2.0.
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
*
* Contributors:
* Red Hat Inc. - initial API and implementation
*******************************************************************************/
package com.redhat.quarkus.extensions.ollama;

import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublisher;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import org.eclipse.lsp4mp.commons.metadata.ItemHint;
import org.eclipse.lsp4mp.commons.metadata.ItemMetadata;
import org.eclipse.lsp4mp.commons.metadata.ValueHint;
import org.eclipse.lsp4mp.extensions.ExtendedMicroProfileProjectInfo;
import org.eclipse.lsp4mp.extensions.ItemMetadataProvider;
import org.eclipse.lsp4mp.model.PropertiesModel;

/**
* Properties provider for available Ollama models.
*/
public class OllamaItemMetadataProvider implements ItemMetadataProvider {

private static final String QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_MODEL_ID_KEY = "quarkus.langchain4j.ollama.chat-model.model-id";

private static final String DEFAULT_SEARCH_API = "http://localhost:11434";

private ExtendedMicroProfileProjectInfo projectInfo;
private boolean available;

public OllamaItemMetadataProvider(ExtendedMicroProfileProjectInfo projectInfo) {
this.projectInfo = projectInfo;
this.available = this.projectInfo.getProperties().stream()
.anyMatch(p -> QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_MODEL_ID_KEY.equals(p.getName()));
if (available) {
String searchUri = getSearchUrl(projectInfo);
ItemHint hint = new ItemHint();
hint.setName(QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_MODEL_ID_KEY);
hint.setDescription("Ollama models");
hint.setValues(collectOllamaModels(searchUri));
this.projectInfo.getHints().add(hint);
}
}

private static String getSearchUrl(ExtendedMicroProfileProjectInfo projectInfo) {
return DEFAULT_SEARCH_API;
}

private List<ValueHint> collectOllamaModels(String searchUrl) {
List<ValueHint> models = new ArrayList<>();

try {
HttpRequest request = HttpRequest.newBuilder() //
.uri(new URI(searchUrl)) //
.GET() //
.build();
Optional<BodyPublisher> result = request.bodyPublisher();
if (result.isPresent()) {
// TODO...
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

ValueHint model1 = new ValueHint();
model1.setValue("Model 1");
models.add(model1);

ValueHint model2 = new ValueHint();
model2.setValue("Model 2");
models.add(model2);

return models;
}

@Override
public boolean isAvailable() {
return available;
}

@Override
public void update(PropertiesModel document) {

}

@Override
public List<ItemMetadata> getProperties() {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*******************************************************************************
* Copyright (c) 2024 Red Hat Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
* which is available at https://www.apache.org/licenses/LICENSE-2.0.
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
*
* Contributors:
* Red Hat Inc. - initial API and implementation
*******************************************************************************/
package com.redhat.quarkus.extensions.ollama;

import org.eclipse.lsp4mp.extensions.ExtendedMicroProfileProjectInfo;
import org.eclipse.lsp4mp.extensions.ItemMetadataProvider;
import org.eclipse.lsp4mp.extensions.ItemMetadataProviderFactory;

/**
* Factory for creating {@link ItemMetadataProvider} instance for available
* Ollama models.
*
* @author Angelo ZERR
*
*/
public class OllamaItemMetadataProviderFactory implements ItemMetadataProviderFactory {

@Override
public ItemMetadataProvider create(ExtendedMicroProfileProjectInfo projectInfo) {
return new OllamaItemMetadataProvider(projectInfo);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
com.redhat.quarkus.extensions.ollama.OllamaItemMetadataProviderFactory

0 comments on commit aec0b5f

Please sign in to comment.