Skip to content

Commit

Permalink
added markdown and refactor (#717)
Browse files Browse the repository at this point in the history
  • Loading branch information
Montagon committed Apr 15, 2024
1 parent cbfc38c commit 6b36284
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,7 @@ package com.xebia.functional.xef.evaluator

import com.xebia.functional.openai.generated.model.CreateChatCompletionRequestModel
import com.xebia.functional.xef.AI
import com.xebia.functional.xef.evaluator.models.ItemResult
import com.xebia.functional.xef.evaluator.models.OutputResponse
import com.xebia.functional.xef.evaluator.models.OutputResult
import com.xebia.functional.xef.evaluator.models.SuiteResults
import com.xebia.functional.xef.evaluator.output.Html
import java.io.File
import com.xebia.functional.xef.evaluator.models.*
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
Expand Down Expand Up @@ -67,18 +62,15 @@ data class SuiteSpec(
block: suspend SuiteBuilder.() -> Unit
): SuiteSpec = SuiteBuilder(description, model).apply { block() }.build()

inline fun <reified E> toHtml(
inline fun <reified E> toHtml(result: SuiteResults<E>, suiteName: String): Html where
E : AI.PromptClassifier,
E : Enum<E> =
Html.get(Json.encodeToString(SuiteResults.serializer(serializer<E>()), result), suiteName)

inline fun <reified E> toMarkdown(
result: SuiteResults<E>,
htmlFilename: String = "index.html"
) where E : AI.PromptClassifier, E : Enum<E> {
val content = Json.encodeToString(SuiteResults.serializer(serializer<E>()), result)
// Copy file inside build folder
val outputPath = System.getProperty("user.dir") + "/build/testSuite"
File(outputPath).mkdirs()
val htmlFile = File("$outputPath/$htmlFilename")
htmlFile.writeText(Html.get(content))
println("Test suite exported to ${htmlFile.absoluteFile}")
}
suiteName: String,
): Markdown where E : AI.PromptClassifier, E : Enum<E> = Markdown.get(result, suiteName)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.xebia.functional.xef.evaluator.output
package com.xebia.functional.xef.evaluator.models

class Html {
@JvmInline
value class Html(val value: String) {

companion object {

Expand Down Expand Up @@ -168,9 +169,10 @@ class Html {
"""
.trimIndent()

fun get(contentJson: String): String {
fun get(contentJson: String, suiteName: String): Html {
// language=html
return """
return Html(
"""
<!DOCTYPE html>
<html lang="es">
<head>
Expand All @@ -180,14 +182,16 @@ class Html {
<script>
$jsContent
const testData = $contentJson;
const suiteName = $suiteName
</script>
</head>
<body>
<div id="test-container"></div>
</body>
</html>
"""
.trimIndent()
.trimIndent()
)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.xebia.functional.xef.evaluator.models

import com.xebia.functional.xef.AI
import com.xebia.functional.xef.evaluator.metrics.ContextualRelevancy

@JvmInline
value class Markdown(val value: String) {
companion object {
fun <E> get(result: SuiteResults<E>, suiteName: String): Markdown where
E : AI.PromptClassifier,
E : Enum<E> {
val content =
"""|
|# Suite Results: $suiteName
|- Description: ${result.description}
|- Model: ${result.model}
|- Metric: ${ContextualRelevancy::class.simpleName}
|${
result.items.joinToString("\n") { item ->
"""
|#### Input: ${item.description}
|${
item.items.joinToString("\n") { outputResult ->
"""
|- Description: ${outputResult.description}
|- Context: ${outputResult.contextDescription}
|- Output:
|<blockquote>
|${outputResult.output}
|</blockquote>
|
|Result: ${if (outputResult.success) "✅ Success" else "❌ Failure"} (${outputResult.result})
""".trimMargin()
}
}
""".trimMargin()
}
}
"""
.trimMargin()
return Markdown(content)
}
}
}

0 comments on commit 6b36284

Please sign in to comment.