From 8cb8b09da0f4dd8db65fbc609138b92cbbd2c0c9 Mon Sep 17 00:00:00 2001 From: raulraja Date: Tue, 4 Jul 2023 10:56:09 +0200 Subject: [PATCH] Move `ai` block to xef-kotlin module --- .../commonMain/kotlin/com/xebia/functional/xef/auto/AI.kt | 3 --- .../kotlin/com/xebia/functional/gpt4all/Gpt4AllRuntime.kt | 5 +---- .../kotlin/com/xebia/functional/xef/auto/DSLExtensions.kt | 4 ++++ .../xebia/functional/xef/auto/llm/openai/OpenAIRuntime.kt | 7 +------ 4 files changed, 6 insertions(+), 13 deletions(-) create mode 100644 kotlin/src/commonMain/kotlin/com/xebia/functional/xef/auto/DSLExtensions.kt diff --git a/core/src/commonMain/kotlin/com/xebia/functional/xef/auto/AI.kt b/core/src/commonMain/kotlin/com/xebia/functional/xef/auto/AI.kt index 03ec0ce25..b01f457e7 100644 --- a/core/src/commonMain/kotlin/com/xebia/functional/xef/auto/AI.kt +++ b/core/src/commonMain/kotlin/com/xebia/functional/xef/auto/AI.kt @@ -11,6 +11,3 @@ import com.xebia.functional.xef.vectorstores.VectorStore * [VectorStore], [OpenAIEmbeddings] and [AIClient] instances. */ typealias AI = suspend CoreAIScope.() -> A - -/** A DSL block that makes it more convenient to construct [AI] values. */ -inline fun ai(noinline block: suspend CoreAIScope.() -> A): AI = block diff --git a/gpt4all-kotlin/src/jvmMain/kotlin/com/xebia/functional/gpt4all/Gpt4AllRuntime.kt b/gpt4all-kotlin/src/jvmMain/kotlin/com/xebia/functional/gpt4all/Gpt4AllRuntime.kt index 733610c4e..6162a4bfe 100644 --- a/gpt4all-kotlin/src/jvmMain/kotlin/com/xebia/functional/gpt4all/Gpt4AllRuntime.kt +++ b/gpt4all-kotlin/src/jvmMain/kotlin/com/xebia/functional/gpt4all/Gpt4AllRuntime.kt @@ -1,12 +1,9 @@ package com.xebia.functional.gpt4all import arrow.core.Either -import arrow.core.left -import arrow.core.right import com.xebia.functional.xef.AIError import com.xebia.functional.xef.auto.AI import com.xebia.functional.xef.auto.CoreAIScope -import com.xebia.functional.xef.auto.ai /** * Run the [AI] value to produce an [A], this method initialises all the dependencies required to @@ -38,7 +35,7 @@ suspend inline fun AI.getOrThrow(): A = getOrElse { throw it } * @see getOrElse for an operator that allow directly handling the [AIError] case. */ suspend inline fun AI.toEither(): Either = - ai { invoke().right() }.getOrElse { it.left() } + Either.catchOrThrow { getOrThrow() } suspend fun AIScope(block: AI, orElse: suspend (AIError) -> A): A = try { diff --git a/kotlin/src/commonMain/kotlin/com/xebia/functional/xef/auto/DSLExtensions.kt b/kotlin/src/commonMain/kotlin/com/xebia/functional/xef/auto/DSLExtensions.kt new file mode 100644 index 000000000..4bb3c3d34 --- /dev/null +++ b/kotlin/src/commonMain/kotlin/com/xebia/functional/xef/auto/DSLExtensions.kt @@ -0,0 +1,4 @@ +package com.xebia.functional.xef.auto + +/** A DSL block that makes it more convenient to construct [AI] values. */ +inline fun ai(noinline block: suspend CoreAIScope.() -> A): AI = block diff --git a/openai/src/commonMain/kotlin/com/xebia/functional/xef/auto/llm/openai/OpenAIRuntime.kt b/openai/src/commonMain/kotlin/com/xebia/functional/xef/auto/llm/openai/OpenAIRuntime.kt index daae1fe92..6b95a7a8b 100644 --- a/openai/src/commonMain/kotlin/com/xebia/functional/xef/auto/llm/openai/OpenAIRuntime.kt +++ b/openai/src/commonMain/kotlin/com/xebia/functional/xef/auto/llm/openai/OpenAIRuntime.kt @@ -3,14 +3,10 @@ package com.xebia.functional.xef.auto.llm.openai import arrow.core.Either -import arrow.core.left -import arrow.core.right import com.xebia.functional.xef.AIError import com.xebia.functional.xef.auto.AI import com.xebia.functional.xef.auto.CoreAIScope -import com.xebia.functional.xef.auto.ai import kotlin.jvm.JvmName -import kotlin.time.ExperimentalTime /** * Run the [AI] value to produce an [A], this method initialises all the dependencies required to @@ -42,9 +38,8 @@ suspend inline fun AI.getOrThrow(): A = getOrElse { throw it } * @see getOrElse for an operator that allow directly handling the [AIError] case. */ suspend inline fun AI.toEither(): Either = - ai { invoke().right() }.getOrElse { it.left() } + Either.catchOrThrow { getOrThrow() } -@OptIn(ExperimentalTime::class) suspend fun AIScope(block: AI, orElse: suspend (AIError) -> A): A = try { val scope = CoreAIScope(OpenAIEmbeddings(OpenAI.DEFAULT_EMBEDDING))