Skip to content

Commit 96a9946

Browse files
Mikep86georgewallace
authored andcommitted
Remove matched text from chunks (elastic#123607)
1 parent 2a23d0d commit 96a9946

File tree

28 files changed

+119
-140
lines changed

28 files changed

+119
-140
lines changed

server/src/main/java/org/elasticsearch/inference/ChunkedInference.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,17 @@ public interface ChunkedInference {
2121
* Implementations of this function serialize their embeddings to {@link BytesReference} for storage in semantic text fields.
2222
*
2323
* @param xcontent provided by the SemanticTextField
24-
* @return an iterator of the serialized {@link Chunk} which includes the matched text (input) and bytes reference (output/embedding).
24+
* @return an iterator of the serialized {@link Chunk} which includes the offset into the input text and bytes reference
25+
* (output/embedding).
2526
*/
26-
Iterator<Chunk> chunksAsMatchedTextAndByteReference(XContent xcontent) throws IOException;
27+
Iterator<Chunk> chunksAsByteReference(XContent xcontent) throws IOException;
2728

2829
/**
29-
* A chunk of inference results containing matched text, the substring location
30-
* in the original text and the bytes reference.
31-
* @param matchedText
30+
* A chunk of inference results containing the substring location in the original text and the bytes reference.
3231
* @param textOffset
3332
* @param bytesReference
3433
*/
35-
record Chunk(String matchedText, TextOffset textOffset, BytesReference bytesReference) {}
34+
record Chunk(TextOffset textOffset, BytesReference bytesReference) {}
3635

3736
record TextOffset(int start, int end) {}
3837
}

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/inference/results/ChunkedInferenceEmbedding.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ public static List<ChunkedInference> listOf(List<String> inputs, SparseEmbedding
2929
List.of(
3030
new SparseEmbeddingResults.Chunk(
3131
sparseEmbeddingResults.embeddings().get(i).tokens(),
32-
inputs.get(i),
3332
new TextOffset(0, inputs.get(i).length())
3433
)
3534
)
@@ -41,7 +40,7 @@ public static List<ChunkedInference> listOf(List<String> inputs, SparseEmbedding
4140
}
4241

4342
@Override
44-
public Iterator<Chunk> chunksAsMatchedTextAndByteReference(XContent xcontent) throws IOException {
43+
public Iterator<Chunk> chunksAsByteReference(XContent xcontent) throws IOException {
4544
var asChunk = new ArrayList<Chunk>();
4645
for (var chunk : chunks()) {
4746
asChunk.add(chunk.toChunk(xcontent));

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/inference/results/ChunkedInferenceError.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,16 @@
77

88
package org.elasticsearch.xpack.core.inference.results;
99

10-
import org.elasticsearch.common.bytes.BytesArray;
1110
import org.elasticsearch.inference.ChunkedInference;
1211
import org.elasticsearch.xcontent.XContent;
1312

13+
import java.util.Collections;
1414
import java.util.Iterator;
15-
import java.util.stream.Stream;
1615

1716
public record ChunkedInferenceError(Exception exception) implements ChunkedInference {
1817

1918
@Override
20-
public Iterator<Chunk> chunksAsMatchedTextAndByteReference(XContent xcontent) {
21-
return Stream.of(exception).map(e -> new Chunk(e.getMessage(), new TextOffset(0, 0), BytesArray.EMPTY)).iterator();
19+
public Iterator<Chunk> chunksAsByteReference(XContent xcontent) {
20+
return Collections.emptyIterator();
2221
}
2322
}

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/inference/results/EmbeddingResults.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,11 @@ public interface EmbeddingResults<C extends EmbeddingResults.Chunk, E extends Em
2424
InferenceServiceResults {
2525

2626
/**
27-
* A resulting embedding together with its input text.
27+
* A resulting embedding together with the offset into the input text.
2828
*/
2929
interface Chunk {
3030
ChunkedInference.Chunk toChunk(XContent xcontent) throws IOException;
3131

32-
String matchedText();
33-
3432
ChunkedInference.TextOffset offset();
3533
}
3634

@@ -39,9 +37,9 @@ interface Chunk {
3937
*/
4038
interface Embedding<C extends Chunk> {
4139
/**
42-
* Combines the resulting embedding with the input into a chunk.
40+
* Combines the resulting embedding with the offset into the input text into a chunk.
4341
*/
44-
C toChunk(String text, ChunkedInference.TextOffset offset);
42+
C toChunk(ChunkedInference.TextOffset offset);
4543
}
4644

4745
/**

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/inference/results/SparseEmbeddingResults.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -175,17 +175,15 @@ public String toString() {
175175
}
176176

177177
@Override
178-
public Chunk toChunk(String text, ChunkedInference.TextOffset offset) {
179-
return new Chunk(tokens, text, offset);
178+
public Chunk toChunk(ChunkedInference.TextOffset offset) {
179+
return new Chunk(tokens, offset);
180180
}
181181
}
182182

183-
public record Chunk(List<WeightedToken> weightedTokens, String matchedText, ChunkedInference.TextOffset offset)
184-
implements
185-
EmbeddingResults.Chunk {
183+
public record Chunk(List<WeightedToken> weightedTokens, ChunkedInference.TextOffset offset) implements EmbeddingResults.Chunk {
186184

187185
public ChunkedInference.Chunk toChunk(XContent xcontent) throws IOException {
188-
return new ChunkedInference.Chunk(matchedText, offset, toBytesReference(xcontent, weightedTokens));
186+
return new ChunkedInference.Chunk(offset, toBytesReference(xcontent, weightedTokens));
189187
}
190188

191189
private static BytesReference toBytesReference(XContent xContent, List<WeightedToken> tokens) throws IOException {

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/inference/results/TextEmbeddingByteResults.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,18 +187,18 @@ public int hashCode() {
187187
}
188188

189189
@Override
190-
public Chunk toChunk(String text, ChunkedInference.TextOffset offset) {
191-
return new Chunk(values, text, offset);
190+
public Chunk toChunk(ChunkedInference.TextOffset offset) {
191+
return new Chunk(values, offset);
192192
}
193193
}
194194

195195
/**
196196
* Serialises the {@code value} array, according to the provided {@link XContent}, into a {@link BytesReference}.
197197
*/
198-
public record Chunk(byte[] embedding, String matchedText, ChunkedInference.TextOffset offset) implements EmbeddingResults.Chunk {
198+
public record Chunk(byte[] embedding, ChunkedInference.TextOffset offset) implements EmbeddingResults.Chunk {
199199

200200
public ChunkedInference.Chunk toChunk(XContent xcontent) throws IOException {
201-
return new ChunkedInference.Chunk(matchedText, offset, toBytesReference(xcontent, embedding));
201+
return new ChunkedInference.Chunk(offset, toBytesReference(xcontent, embedding));
202202
}
203203

204204
private static BytesReference toBytesReference(XContent xContent, byte[] value) throws IOException {

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/inference/results/TextEmbeddingFloatResults.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,15 +221,15 @@ public int hashCode() {
221221
}
222222

223223
@Override
224-
public Chunk toChunk(String text, ChunkedInference.TextOffset offset) {
225-
return new Chunk(values, text, offset);
224+
public Chunk toChunk(ChunkedInference.TextOffset offset) {
225+
return new Chunk(values, offset);
226226
}
227227
}
228228

229-
public record Chunk(float[] embedding, String matchedText, ChunkedInference.TextOffset offset) implements EmbeddingResults.Chunk {
229+
public record Chunk(float[] embedding, ChunkedInference.TextOffset offset) implements EmbeddingResults.Chunk {
230230

231231
public ChunkedInference.Chunk toChunk(XContent xcontent) throws IOException {
232-
return new ChunkedInference.Chunk(matchedText, offset, toBytesReference(xcontent, embedding));
232+
return new ChunkedInference.Chunk(offset, toBytesReference(xcontent, embedding));
233233
}
234234

235235
/**

x-pack/plugin/inference/qa/test-service-plugin/src/main/java/org/elasticsearch/xpack/inference/mock/TestDenseInferenceServiceExtension.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ private List<ChunkedInference> makeChunkedResults(List<String> input, int dimens
183183
List.of(
184184
new TextEmbeddingFloatResults.Chunk(
185185
nonChunkedResults.embeddings().get(i).values(),
186-
input.get(i),
187186
new ChunkedInference.TextOffset(0, input.get(i).length())
188187
)
189188
)

x-pack/plugin/inference/qa/test-service-plugin/src/main/java/org/elasticsearch/xpack/inference/mock/TestSparseInferenceServiceExtension.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,7 @@ private List<ChunkedInference> makeChunkedResults(List<String> input) {
172172
}
173173
results.add(
174174
new ChunkedInferenceEmbedding(
175-
List.of(
176-
new SparseEmbeddingResults.Chunk(
177-
tokens,
178-
input.get(i),
179-
new ChunkedInference.TextOffset(0, input.get(i).length())
180-
)
181-
)
175+
List.of(new SparseEmbeddingResults.Chunk(tokens, new ChunkedInference.TextOffset(0, input.get(i).length())))
182176
)
183177
);
184178
}

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/filter/ShardBulkInferenceActionFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,7 @@ static IndexRequest getIndexRequestOrNull(DocWriteRequest<?> docWriteRequest) {
606606

607607
private static class EmptyChunkedInference implements ChunkedInference {
608608
@Override
609-
public Iterator<Chunk> chunksAsMatchedTextAndByteReference(XContent xcontent) {
609+
public Iterator<Chunk> chunksAsByteReference(XContent xcontent) {
610610
return Collections.emptyIterator();
611611
}
612612
}

0 commit comments

Comments
 (0)