forked from bernardladenthin/java-llama.cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJllamaEmbeddingModel.java
More file actions
44 lines (38 loc) · 1.5 KB
/
Copy pathJllamaEmbeddingModel.java
File metadata and controls
44 lines (38 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// SPDX-FileCopyrightText: 2026 Bernard Ladenthin <bernard.ladenthin@gmail.com>
//
// SPDX-License-Identifier: MIT
package net.ladenthin.llama.langchain4j;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.output.Response;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import net.ladenthin.llama.LlamaModel;
/**
* langchain4j {@link EmbeddingModel} backed by an in-process java-llama.cpp model.
*
* <p>The backing {@link LlamaModel} must be loaded in embedding mode
* ({@code ModelParameters.enableEmbedding()}). The model is <em>borrowed</em> (never closed here) —
* see {@link JllamaChatModel}.
*/
public final class JllamaEmbeddingModel implements EmbeddingModel {
private final LlamaModel model;
/**
* Creates an embedding model over a borrowed {@link LlamaModel}.
*
* @param model the loaded embedding-mode model to drive; not closed by this adapter
*/
public JllamaEmbeddingModel(LlamaModel model) {
this.model = Objects.requireNonNull(model, "model");
}
@Override
public Response<List<Embedding>> embedAll(List<TextSegment> textSegments) {
List<Embedding> embeddings = new ArrayList<>(textSegments.size());
for (TextSegment segment : textSegments) {
embeddings.add(Embedding.from(model.embed(segment.text())));
}
return Response.from(embeddings);
}
}