diff options
Diffstat (limited to 'model-integration/src/main/java/ai/vespa/llm')
11 files changed, 4 insertions, 279 deletions
diff --git a/model-integration/src/main/java/ai/vespa/llm/Completion.java b/model-integration/src/main/java/ai/vespa/llm/Completion.java deleted file mode 100644 index 5f483a65186..00000000000 --- a/model-integration/src/main/java/ai/vespa/llm/Completion.java +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package ai.vespa.llm; - -import com.yahoo.api.annotations.Beta; - -import java.util.Objects; - -/** - * A completion from a language model. - * - * @author bratseth - */ -@Beta -public record Completion(String text, FinishReason finishReason) { - - public enum FinishReason { - - /** The maximum length of a completion was reached. */ - length, - - /** The completion is the predicted ending of the prompt. */ - stop - - } - - public Completion(String text, FinishReason finishReason) { - this.text = Objects.requireNonNull(text); - this.finishReason = Objects.requireNonNull(finishReason); - } - - /** Returns the generated text completion. */ - public String text() { return text; } - - /** Returns the reason this completion ended. */ - public FinishReason finishReason() { return finishReason; } - - public static Completion from(String text) { - return new Completion(text, FinishReason.stop); - } - -} diff --git a/model-integration/src/main/java/ai/vespa/llm/LanguageModel.java b/model-integration/src/main/java/ai/vespa/llm/LanguageModel.java deleted file mode 100644 index 0739162c5ee..00000000000 --- a/model-integration/src/main/java/ai/vespa/llm/LanguageModel.java +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package ai.vespa.llm; - -import com.yahoo.api.annotations.Beta; - -import java.util.List; - -/** - * Interface to language models. - * - * @author bratseth - */ -@Beta -public interface LanguageModel { - - List<Completion> complete(Prompt prompt); - -} diff --git a/model-integration/src/main/java/ai/vespa/llm/Prompt.java b/model-integration/src/main/java/ai/vespa/llm/Prompt.java deleted file mode 100644 index 77093d5e21b..00000000000 --- a/model-integration/src/main/java/ai/vespa/llm/Prompt.java +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package ai.vespa.llm; - -import com.yahoo.api.annotations.Beta; - -/** - * A prompt that can be given to a large language model to generate a completion. - * - * @author bratseth - */ -@Beta -public abstract class Prompt { - - public abstract String asString(); - - /** Returns a new prompt with the text of the given completion appended. */ - public Prompt append(Completion completion) { - return append(completion.text()); - } - - public abstract Prompt append(String text); - -} diff --git a/model-integration/src/main/java/ai/vespa/llm/StringPrompt.java b/model-integration/src/main/java/ai/vespa/llm/StringPrompt.java deleted file mode 100644 index 0af8388dfb1..00000000000 --- a/model-integration/src/main/java/ai/vespa/llm/StringPrompt.java +++ /dev/null @@ -1,43 +0,0 @@ -package ai.vespa.llm; - -import com.yahoo.api.annotations.Beta; - -import java.util.Objects; - -/** - * A prompt which just consists of a string. - * - * @author bratseth - */ -@Beta -public class StringPrompt extends Prompt { - - private final String string; - - private StringPrompt(String string) { - this.string = Objects.requireNonNull(string); - } - - @Override - public String asString() { return string; } - - @Override - public StringPrompt append(String text) { - return StringPrompt.from(string + text); - } - - @Override - public StringPrompt append(Completion completion) { - return append(completion.text()); - } - - @Override - public String toString() { - return string; - } - - public static StringPrompt from(String string) { - return new StringPrompt(string); - } - -} diff --git a/model-integration/src/main/java/ai/vespa/llm/client/OpenAiClient.java b/model-integration/src/main/java/ai/vespa/llm/client/OpenAiClient.java deleted file mode 100644 index 3f4475b2482..00000000000 --- a/model-integration/src/main/java/ai/vespa/llm/client/OpenAiClient.java +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package ai.vespa.llm.client; - -import ai.vespa.llm.Completion; -import ai.vespa.llm.LanguageModel; -import ai.vespa.llm.Prompt; -import com.theokanning.openai.OpenAiHttpException; -import com.theokanning.openai.completion.CompletionRequest; -import com.theokanning.openai.service.OpenAiService; -import com.yahoo.api.annotations.Beta; -import com.yahoo.yolean.Exceptions; - -import java.util.List; - -/** - * A client to the OpenAI language model API. Refer to https://platform.openai.com/docs/api-reference/. - * - * @author bratseth - */ -@Beta -public class OpenAiClient implements LanguageModel { - - private final OpenAiService openAiService; - private final String model; - private final boolean echo; - - private OpenAiClient(Builder builder) { - openAiService = new OpenAiService(builder.token); - this.model = builder.model; - this.echo = builder.echo; - } - - @Override - public List<Completion> complete(Prompt prompt) { - try { - CompletionRequest completionRequest = CompletionRequest.builder() - .prompt(prompt.asString()) - .model(model) - .echo(echo) - .build(); - return openAiService.createCompletion(completionRequest).getChoices().stream() - .map(c -> new Completion(c.getText(), toFinishReason(c.getFinish_reason()))).toList(); - } - catch (OpenAiHttpException e) { - throw new RuntimeException(Exceptions.toMessageString(e)); - } - } - - private Completion.FinishReason toFinishReason(String finishReasonString) { - return switch(finishReasonString) { - case "length" -> Completion.FinishReason.length; - case "stop" -> Completion.FinishReason.stop; - default -> throw new IllegalStateException("Unknown OpenAi completion finish reason '" + finishReasonString + "'"); - }; - } - - public static class Builder { - - private final String token; - private String model = "text-davinci-003"; - private boolean echo = false; - - public Builder(String token) { - this.token = token; - } - - /** One of the language models listed at https://platform.openai.com/docs/models */ - public Builder model(String model) { - this.model = model; - return this; - } - - public Builder echo(boolean echo) { - this.echo = echo; - return this; - } - - public OpenAiClient build() { - return new OpenAiClient(this); - } - - } - -} diff --git a/model-integration/src/main/java/ai/vespa/llm/client/package-info.java b/model-integration/src/main/java/ai/vespa/llm/client/package-info.java deleted file mode 100644 index c95f87eec3c..00000000000 --- a/model-integration/src/main/java/ai/vespa/llm/client/package-info.java +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -@ExportPackage -@PublicApi -package ai.vespa.llm.client; - -import com.yahoo.api.annotations.PublicApi; -import com.yahoo.osgi.annotation.ExportPackage; - -/** - * Clients to externally hosted large language models. - */
\ No newline at end of file diff --git a/model-integration/src/main/java/ai/vespa/llm/Generator.java b/model-integration/src/main/java/ai/vespa/llm/generation/Generator.java index 6b60041947b..f20925b86ee 100644 --- a/model-integration/src/main/java/ai/vespa/llm/Generator.java +++ b/model-integration/src/main/java/ai/vespa/llm/generation/Generator.java @@ -1,4 +1,4 @@ -package ai.vespa.llm; +package ai.vespa.llm.generation; import ai.vespa.modelintegration.evaluator.OnnxEvaluator; import ai.vespa.modelintegration.evaluator.OnnxEvaluatorOptions; diff --git a/model-integration/src/main/java/ai/vespa/llm/GeneratorOptions.java b/model-integration/src/main/java/ai/vespa/llm/generation/GeneratorOptions.java index 8b490a733dd..79b466e5a74 100644 --- a/model-integration/src/main/java/ai/vespa/llm/GeneratorOptions.java +++ b/model-integration/src/main/java/ai/vespa/llm/generation/GeneratorOptions.java @@ -1,4 +1,4 @@ -package ai.vespa.llm; +package ai.vespa.llm.generation; import com.yahoo.api.annotations.Beta; diff --git a/model-integration/src/main/java/ai/vespa/llm/package-info.java b/model-integration/src/main/java/ai/vespa/llm/generation/package-info.java index 04fc24c51ee..ed3adb2f59e 100644 --- a/model-integration/src/main/java/ai/vespa/llm/package-info.java +++ b/model-integration/src/main/java/ai/vespa/llm/generation/package-info.java @@ -1,11 +1,11 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. @ExportPackage @PublicApi -package ai.vespa.llm; +package ai.vespa.llm.generation; import com.yahoo.api.annotations.PublicApi; import com.yahoo.osgi.annotation.ExportPackage; /** - * API for working with large language models. + * API for generating text with language models. */
\ No newline at end of file diff --git a/model-integration/src/main/java/ai/vespa/llm/test/MockLanguageModel.java b/model-integration/src/main/java/ai/vespa/llm/test/MockLanguageModel.java deleted file mode 100644 index 54b085a451c..00000000000 --- a/model-integration/src/main/java/ai/vespa/llm/test/MockLanguageModel.java +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package ai.vespa.llm.test; - -import ai.vespa.llm.Completion; -import ai.vespa.llm.LanguageModel; -import ai.vespa.llm.Prompt; -import com.yahoo.api.annotations.Beta; - -import java.util.List; -import java.util.function.Function; - -/** - * @author bratseth - */ -@Beta -public class MockLanguageModel implements LanguageModel { - - private final Function<Prompt, List<Completion>> completer; - - public MockLanguageModel(Builder builder) { - completer = builder.completer; - } - - @Override - public List<Completion> complete(Prompt prompt) { - return completer.apply(prompt); - } - - public static class Builder { - - private Function<Prompt, List<Completion>> completer = prompt -> List.of(Completion.from("")); - - public Builder completer(Function<Prompt, List<Completion>> completer) { - this.completer = completer; - return this; - } - - public Builder() {} - - public MockLanguageModel build() { return new MockLanguageModel(this); } - - } - -} diff --git a/model-integration/src/main/java/ai/vespa/llm/test/package-info.java b/model-integration/src/main/java/ai/vespa/llm/test/package-info.java deleted file mode 100644 index 0d51815fd6d..00000000000 --- a/model-integration/src/main/java/ai/vespa/llm/test/package-info.java +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -@ExportPackage -@PublicApi -package ai.vespa.llm.test; - -/** - * Tools for writing tests when working with large language models. - */ - -import com.yahoo.api.annotations.PublicApi; -import com.yahoo.osgi.annotation.ExportPackage;
\ No newline at end of file |