Skip to content

Commit 01498d9

Browse files
authored
Merge pull request #53 from Paulanerus/dev
Dev
2 parents f2f47b0 + 4952b4f commit 01498d9

12 files changed

Lines changed: 455 additions & 86 deletions

File tree

api/src/main/kotlin/dev/paulee/api/data/IDataService.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ interface IDataService : Closeable {
3232

3333
suspend fun exportPool(dataInfo: DataInfo, path: Path): Boolean
3434

35-
fun getPage(
35+
suspend fun getPage(
3636
query: String,
37-
isSemantic: Boolean,
37+
similarityScore: Float,
3838
order: QueryOrder?,
3939
pageCount: Int,
4040
): Pair<List<Map<String, String>>, Map<String, List<Map<String, String>>>>
4141

42-
fun getPageCount(query: String, isSemantic: Boolean): Triple<Long, Long, Set<String>>
42+
suspend fun getPageCount(query: String, similarityScore: Float): Triple<Long, Long, Set<String>>
4343

4444
fun createStorageProvider(infoName: String, path: Path): IStorageProvider?
4545

core/src/main/kotlin/dev/paulee/core/data/DataServiceImpl.kt

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import kotlin.coroutines.cancellation.CancellationException
2626
import kotlin.io.path.*
2727
import kotlin.math.ceil
2828

29-
typealias QueryKey = Triple<Int, String, QueryOrder?>
29+
private data class QueryKey(val pageCount: Int, val query: String, val order: QueryOrder?, val similarity: Float)
3030

3131
typealias PageResult = Pair<List<Map<String, String>>, Map<String, List<Map<String, String>>>>
3232

@@ -537,13 +537,18 @@ object DataServiceImpl : IDataService {
537537
return result
538538
}
539539

540-
override fun getPage(query: String, isSemantic: Boolean, order: QueryOrder?, pageCount: Int): PageResult {
540+
override suspend fun getPage(
541+
query: String,
542+
similarityScore: Float,
543+
order: QueryOrder?,
544+
pageCount: Int,
545+
): PageResult {
541546

542547
if (this.currentPool == null || this.currentField == null) return Pair(emptyList(), emptyMap())
543548

544-
logger.info("Query (${order ?: "None"} | Semantic: $isSemantic): $query")
549+
logger.info("Query (${order ?: "None"} | Similarity: $similarityScore): $query")
545550

546-
val key = Triple(pageCount, query, order)
551+
val key = QueryKey(pageCount, query, order, similarityScore)
547552

548553
pageCache.getIfPresent(key)?.let { return it }
549554

@@ -553,7 +558,8 @@ object DataServiceImpl : IDataService {
553558

554559
val (filterQuery, filter) = this.getPreFilter(query)
555560

556-
val indexResult = dataPool.search(this.handleReplacements(dataPool.metadata, filterQuery), isSemantic)
561+
val indexResult =
562+
dataPool.search(this.handleReplacements(dataPool.metadata, filterQuery), similarityScore)
557563

558564
if (filter.isEmpty() && indexResult.isEmpty()) return Pair(emptyList(), emptyMap())
559565

@@ -589,7 +595,7 @@ object DataServiceImpl : IDataService {
589595
return result
590596
}
591597

592-
override fun getPageCount(query: String, isSemantic: Boolean): Triple<Long, Long, Set<String>> {
598+
override suspend fun getPageCount(query: String, similarityScore: Float): Triple<Long, Long, Set<String>> {
593599
if (this.currentPool == null || this.currentField == null) return Triple(-1, -1, emptySet())
594600

595601
val dataPool = this.dataPools[this.currentPool] ?: return Triple(-1, -1, emptySet())
@@ -598,7 +604,8 @@ object DataServiceImpl : IDataService {
598604

599605
val (filterQuery, filter) = this.getPreFilter(query)
600606

601-
val indexResult = dataPool.search(handleReplacements(dataPool.metadata, filterQuery), isSemantic)
607+
val indexResult =
608+
dataPool.search(handleReplacements(dataPool.metadata, filterQuery), similarityScore)
602609

603610
if (filter.isEmpty() && indexResult.isEmpty()) return Triple(0, 0, emptySet())
604611

@@ -717,5 +724,4 @@ object DataServiceImpl : IDataService {
717724
) null
718725
else token.trim()
719726
}
720-
}
721-
727+
}

core/src/main/kotlin/dev/paulee/core/data/model/DataPool.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ internal class DataPool(val indexer: Indexer?, val dataInfo: DataInfo, val stora
9090
}
9191
}
9292

93-
fun search(query: String, semantic: Boolean): IndexSearchResult {
93+
fun search(query: String, similarityThreshold: Float): IndexSearchResult {
9494
if (indexer == null) return IndexSearchResult()
9595

9696
val ids = LinkedHashSet<Long>()
@@ -102,7 +102,7 @@ internal class DataPool(val indexer: Indexer?, val dataInfo: DataInfo, val stora
102102
docs.forEach { it.getField(idFieldName)?.numericValue()?.toLong()?.let(ids::add) }
103103
}
104104

105-
val similarityThreshold = 0.85f
105+
val isSemantic = similarityThreshold > 0 && similarityThreshold <= 1.0
106106

107107
val indexedValues = mutableSetOf<String>()
108108

@@ -139,7 +139,7 @@ internal class DataPool(val indexer: Indexer?, val dataInfo: DataInfo, val stora
139139
indexedValues.add(value)
140140

141141
val docs =
142-
if (semantic) indexer.searchMatchingVec(field, value, similarityThreshold)
142+
if (isSemantic) indexer.searchMatchingVec(field, value, similarityThreshold)
143143
else indexer.searchFieldIndex(field, value)
144144

145145
addIdsFrom(docs, fieldClass)
@@ -153,7 +153,7 @@ internal class DataPool(val indexer: Indexer?, val dataInfo: DataInfo, val stora
153153

154154
defaultIndexField?.let { defaultField ->
155155
val docs =
156-
if (semantic) indexer.searchMatchingVec(defaultField, joined, similarityThreshold)
156+
if (isSemantic) indexer.searchMatchingVec(defaultField, joined, similarityThreshold)
157157
else indexer.searchFieldIndex(defaultField, joined)
158158

159159
addIdsFrom(docs, defaultClass)
@@ -162,7 +162,7 @@ internal class DataPool(val indexer: Indexer?, val dataInfo: DataInfo, val stora
162162
} else {
163163
defaultIndexField?.let {
164164
val docs =
165-
if (semantic) indexer.searchMatchingVec(it, query, similarityThreshold)
165+
if (isSemantic) indexer.searchMatchingVec(it, query, similarityThreshold)
166166
else indexer.searchFieldIndex(it, query)
167167

168168
addIdsFrom(docs, defaultClass)

gradle.properties

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
22
org.gradle.configuration-cache=true
33
kotlin.code.style=official
44
kotlin.version=2.2.20
5-
compose.version=1.8.2
5+
compose.version=1.9.2
66
icons.version=1.7.3
77
lucene.version=10.3.1
88
log4j.version=2.25.2
@@ -14,7 +14,7 @@ onnx.version=1.22.0
1414
duckdb.version=1.4.1.0
1515
caffeine.version=3.2.2
1616

17-
api.version=1.16.2
18-
core.version=1.18.7
19-
ui.version=1.18.5
20-
app.version=1.6.4
17+
api.version=1.16.4
18+
core.version=1.18.12
19+
ui.version=1.19.5
20+
app.version=1.6.5

ui/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ dependencies {
2020

2121
implementation(compose.desktop.currentOs)
2222
implementation("org.jetbrains.compose.material:material-icons-core:${rootProject.extra["icons.version"]}")
23+
implementation("org.jetbrains.compose.material:material-icons-extended:${rootProject.extra["icons.version"]}")
2324
}

ui/src/main/kotlin/dev/paulee/ui/Config.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ object Config {
3636

3737
var searchExpanded by mutableStateOf(true)
3838

39+
var queryEmbSimilarity by mutableStateOf(0.8f)
40+
3941
private var configFile = "config"
4042

4143
private var configPath = Path(configFile)

0 commit comments

Comments
 (0)