Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import ai.koog.agents.core.tools.ToolException
import ai.koog.agents.core.tools.annotations.LLMDescription
import ai.koog.agents.core.tools.validate
import ai.koog.agents.core.tools.validateNotNull
import ai.koog.agents.ext.tool.file.filter.GlobPattern
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
import ai.koog.agents.ext.tool.file.render.folder
import ai.koog.prompt.text.text
import ai.koog.rag.base.files.FileMetadata
import ai.koog.rag.base.files.FileSystemProvider
import ai.koog.rag.base.files.filter.GlobPattern
import ai.koog.rag.base.files.model.FileSystemEntry
import kotlinx.serialization.Serializable

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package ai.koog.agents.ext.tool.file

import ai.koog.agents.ext.tool.file.filter.GlobPattern
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
import ai.koog.agents.ext.tool.file.model.buildFileEntry
import ai.koog.agents.ext.tool.file.model.buildFolderEntry
import ai.koog.agents.ext.tool.file.render.norm
import ai.koog.rag.base.files.FileMetadata
import ai.koog.rag.base.files.FileSystemProvider
import ai.koog.rag.base.files.filter.GlobPattern
import ai.koog.rag.base.files.model.FileSystemEntry
import ai.koog.rag.base.files.model.buildFileEntry
import ai.koog.rag.base.files.model.buildFolderEntry
import kotlin.collections.plusAssign

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import ai.koog.agents.core.tools.ToolException
import ai.koog.agents.core.tools.annotations.LLMDescription
import ai.koog.agents.core.tools.validate
import ai.koog.agents.core.tools.validateNotNull
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
import ai.koog.agents.ext.tool.file.render.file
import ai.koog.prompt.text.text
import ai.koog.rag.base.files.FileMetadata
import ai.koog.rag.base.files.FileSystemProvider
import ai.koog.rag.base.files.model.FileSystemEntry
import kotlinx.serialization.Serializable

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package ai.koog.agents.ext.tool.file

import ai.koog.agents.ext.tool.file.model.FileSystemEntry.File
import ai.koog.agents.ext.tool.file.model.FileSystemEntry.File.Content
import ai.koog.agents.ext.tool.file.model.buildFileSize
import ai.koog.rag.base.files.DocumentProvider
import ai.koog.rag.base.files.FileMetadata
import ai.koog.rag.base.files.FileSystemProvider
import ai.koog.rag.base.files.model.FileSystemEntry
import ai.koog.rag.base.files.model.buildFileSize
import ai.koog.rag.base.files.readText

/**
Expand Down Expand Up @@ -35,8 +34,8 @@ internal suspend fun <Path> buildTextFileEntry(
startLine: Int,
endLine: Int,
onEndLineExceedsFileLength: ((endLine: Int, fileLineCount: Int) -> Unit)? = null
): File {
return File(
): FileSystemEntry.File {
return FileSystemEntry.File(
name = fs.name(path),
extension = fs.extension(path),
path = fs.toAbsolutePathString(path),
Expand All @@ -52,7 +51,7 @@ private fun buildContent(
startLine: Int,
endLine: Int,
onEndLineExceedsFileLength: ((requestedEndLine: Int, fileLineCount: Int) -> Unit)?
): Content {
): FileSystemEntry.File.Content {
val lineCount = content.lineSequence().count()

require(startLine >= 0) { "startLine=$startLine must be >= 0" }
Expand All @@ -68,17 +67,17 @@ private fun buildContent(
}

if (startLine == 0 && clampedEndLine == lineCount) {
return Content.Text(content)
return FileSystemEntry.File.Content.Text(content)
}

val range = DocumentProvider.DocumentRange(
DocumentProvider.Position(startLine, 0),
DocumentProvider.Position(clampedEndLine, 0)
)

return Content.Excerpt(
return FileSystemEntry.File.Content.Excerpt(
listOf(
Content.Excerpt.Snippet(
FileSystemEntry.File.Content.Excerpt.Snippet(
text = range.substring(content),
range = range,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import ai.koog.agents.core.tools.ToolException
import ai.koog.agents.core.tools.annotations.LLMDescription
import ai.koog.agents.core.tools.validate
import ai.koog.agents.core.tools.validateNotNull
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
import ai.koog.agents.ext.tool.file.model.buildFileSystemEntry
import ai.koog.agents.ext.tool.file.render.entry
import ai.koog.prompt.text.text
import ai.koog.rag.base.files.FileMetadata
import ai.koog.rag.base.files.FileSystemProvider
import ai.koog.rag.base.files.model.FileSystemEntry
import ai.koog.rag.base.files.model.buildFileSystemEntry
import ai.koog.rag.base.files.writeText
import kotlinx.serialization.Serializable

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package ai.koog.agents.ext.tool.file.render

import ai.koog.agents.ext.tool.file.model.FileSystemEntry
import ai.koog.prompt.text.TextContentBuilder
import ai.koog.rag.base.files.FileMetadata
import ai.koog.rag.base.files.model.FileSystemEntry

private const val FOLDER_INDENTATION = " "

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ package ai.koog.agents.ext.tool.search

import ai.koog.agents.core.tools.Tool
import ai.koog.agents.core.tools.annotations.LLMDescription
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
import ai.koog.agents.ext.tool.file.model.buildFileSize
import ai.koog.prompt.text.text
import ai.koog.rag.base.files.DocumentProvider
import ai.koog.rag.base.files.FileMetadata
import ai.koog.rag.base.files.FileSystemProvider
import ai.koog.rag.base.files.extendRangeByLines
import ai.koog.rag.base.files.model.FileSystemEntry
import ai.koog.rag.base.files.model.buildFileSize
import ai.koog.rag.base.files.readText
import ai.koog.rag.base.files.toPosition
import kotlinx.coroutines.CancellationException
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package ai.koog.agents.ext.tool.file.render

import ai.koog.agents.ext.tool.file.model.FileSize
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
import ai.koog.prompt.text.text
import ai.koog.rag.base.files.DocumentProvider
import ai.koog.rag.base.files.FileMetadata
import ai.koog.rag.base.files.model.FileSize
import ai.koog.rag.base.files.model.FileSystemEntry
import kotlin.test.Test
import kotlin.test.assertEquals

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package ai.koog.agents.ext.tool.file

import ai.koog.agents.ext.tool.file.filter.GlobPattern
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
import ai.koog.rag.base.files.JVMFileSystemProvider
import ai.koog.rag.base.files.filter.GlobPattern
import ai.koog.rag.base.files.model.FileSystemEntry
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.io.TempDir
import java.nio.file.Path
Expand Down Expand Up @@ -210,8 +210,8 @@ class ListDirectoryUtilJvmTest {
assertEquals("root", entry.name)
val singleChild = assertNotNull(entry.entries).single() as FileSystemEntry.Folder
assertEquals("single", singleChild.name)
assertNotNull(singleChild.entries)
assertTrue(singleChild.entries.isEmpty())
val entries = assertNotNull(singleChild.entries)
assertTrue(entries.isEmpty())
}

@Test
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ai.koog.agents.ext.tool.file

import ai.koog.agents.ext.tool.file.model.FileSystemEntry
import ai.koog.rag.base.files.JVMFileSystemProvider
import ai.koog.rag.base.files.model.FileSystemEntry
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.assertThrows
import org.junit.jupiter.api.io.TempDir
Expand Down Expand Up @@ -30,8 +30,9 @@ class ReadFileUtilJvmTest {

val entry = buildTextFileEntry(fs, file, metadata, 0, -1)

assertIs<FileSystemEntry.File.Content.Text>(entry.content)
assertEquals("line1\nline2\nline3", entry.content.text)
val content = entry.content
assertIs<FileSystemEntry.File.Content.Text>(content)
assertEquals("line1\nline2\nline3", content.text)
}

@Test
Expand All @@ -41,8 +42,9 @@ class ReadFileUtilJvmTest {

val entry = buildTextFileEntry(fs, file, metadata, 0, 3)

assertIs<FileSystemEntry.File.Content.Text>(entry.content)
assertEquals("line1\nline2\nline3", entry.content.text)
val content = entry.content
assertIs<FileSystemEntry.File.Content.Text>(content)
assertEquals("line1\nline2\nline3", content.text)
}

@Test
Expand All @@ -52,8 +54,9 @@ class ReadFileUtilJvmTest {

val entry = buildTextFileEntry(fs, file, metadata, 1, 3)

assertIs<FileSystemEntry.File.Content.Excerpt>(entry.content)
val snippet = entry.content.snippets.single()
val content = entry.content
assertIs<FileSystemEntry.File.Content.Excerpt>(content)
val snippet = content.snippets.single()
assertEquals("line1\nline2", snippet.text.trim())
assertEquals(1, snippet.range.start.line)
assertEquals(3, snippet.range.end.line)
Expand All @@ -66,8 +69,9 @@ class ReadFileUtilJvmTest {

val entry = buildTextFileEntry(fs, file, metadata, 0, -1)

assertIs<FileSystemEntry.File.Content.Text>(entry.content)
assertEquals("single line", entry.content.text)
val content = entry.content
assertIs<FileSystemEntry.File.Content.Text>(content)
assertEquals("single line", content.text)
}

@Test
Expand Down Expand Up @@ -146,8 +150,9 @@ class ReadFileUtilJvmTest {
invokedWithFileLineCount = fileLineCount
}

assertIs<FileSystemEntry.File.Content.Text>(entry.content)
assertEquals("line1\nline2", entry.content.text)
val content = entry.content
assertIs<FileSystemEntry.File.Content.Text>(content)
assertEquals("line1\nline2", content.text)
assertEquals(50, invokedWithRequestedEndLine)
assertEquals(2, invokedWithFileLineCount)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@ package ai.koog.agents.ext.tool.file.model

import ai.koog.rag.base.files.FileMetadata
import ai.koog.rag.base.files.JVMFileSystemProvider
import ai.koog.rag.base.files.model.FileSize
import ai.koog.rag.base.files.model.FileSystemEntry
import ai.koog.rag.base.files.model.buildFileEntry
import ai.koog.rag.base.files.model.buildFileSize
import ai.koog.rag.base.files.model.buildFileSystemEntry
import ai.koog.rag.base.files.model.buildFolderEntry
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.io.TempDir
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package ai.koog.agents.ext.tool.search

import ai.koog.agents.ext.tool.file.model.FileSystemEntry
import ai.koog.rag.base.files.FileSystemProvider
import ai.koog.rag.base.files.JVMFileSystemProvider
import ai.koog.rag.base.files.model.FileSystemEntry
import kotlinx.coroutines.runBlocking
import java.nio.file.Files
import java.nio.file.Path
Expand Down
6 changes: 6 additions & 0 deletions rag/rag-base/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ kotlin {
}
}

commonTest {
dependencies {
implementation(project(":test-utils"))
}
}

jvmTest {
dependencies {
implementation(kotlin("test-junit5"))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ai.koog.agents.ext.tool.file.filter
package ai.koog.rag.base.files.filter

/**
* A pattern for matching file paths using glob syntax.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ai.koog.agents.ext.tool.file.model
package ai.koog.rag.base.files.model

import kotlinx.serialization.Serializable
import kotlin.math.pow
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ai.koog.agents.ext.tool.file.model
package ai.koog.rag.base.files.model

import ai.koog.rag.base.files.DocumentProvider
import ai.koog.rag.base.files.FileMetadata
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package ai.koog.agents.ext.tool.file.model
package ai.koog.rag.base.files.model

import ai.koog.agents.ext.tool.file.model.FileSystemEntry.File
import ai.koog.agents.ext.tool.file.model.FileSystemEntry.File.Content
import ai.koog.agents.ext.tool.file.model.FileSystemEntry.Folder
import ai.koog.rag.base.files.FileMetadata
import ai.koog.rag.base.files.FileSystemProvider
import ai.koog.rag.base.files.readText
Expand All @@ -20,16 +17,16 @@ public suspend fun <Path> buildFileEntry(
fs: FileSystemProvider.ReadOnly<Path>,
path: Path,
metadata: FileMetadata
): File {
): FileSystemEntry.File {
val type = fs.getFileContentType(path)
return File(
return FileSystemEntry.File(
name = fs.name(path),
extension = fs.extension(path),
path = fs.toAbsolutePathString(path),
hidden = metadata.hidden,
size = buildFileSize(fs, path, type),
contentType = type,
content = Content.None,
content = FileSystemEntry.File.Content.None,
)
}

Expand All @@ -48,8 +45,8 @@ public fun <Path> buildFolderEntry(
path: Path,
metadata: FileMetadata,
entries: List<FileSystemEntry>?
): Folder {
return Folder(
): FileSystemEntry.Folder {
return FileSystemEntry.Folder(
name = fs.name(path),
path = fs.toAbsolutePathString(path),
hidden = metadata.hidden,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ai.koog.agents.ext.tool.file.filter
package ai.koog.rag.base.files.filter

import kotlin.test.Test
import kotlin.test.assertFalse
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ai.koog.agents.ext.tool.file.model
package ai.koog.rag.base.files.model

import kotlin.test.Test
import kotlin.test.assertEquals
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ai.koog.agents.ext.tool.file.model
package ai.koog.rag.base.files.model

import ai.koog.rag.base.files.DocumentProvider
import ai.koog.rag.base.files.FileMetadata
Expand Down