diff --git a/convention-plugins/src/main/kotlin/root.publication.gradle.kts b/convention-plugins/src/main/kotlin/root.publication.gradle.kts index 8b0b7e4..297cd0c 100644 --- a/convention-plugins/src/main/kotlin/root.publication.gradle.kts +++ b/convention-plugins/src/main/kotlin/root.publication.gradle.kts @@ -4,7 +4,7 @@ plugins { allprojects { group = "community.flock.aigentic" - version = "0.0.7-SNAPSHOT" + version = "0.0.8-SNAPSHOT" } nexusPublishing { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0ce1f36..34a1772 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,17 +1,18 @@ [versions] -kotlin = "1.9.23" -kotlinx-datetime = "0.6.0-RC.2" -coroutines = "1.7.2" +kotlin = "2.1.0" +kotlinx-datetime = "0.6.1" +coroutines = "1.10.1" serialization = "1.6.3" -ktor = "2.3.10" +ktor = "3.0.3" nexus-publish = "2.0.0" kotlinOpenapiBindings = "0.0.24" kotest = "5.8.1" mockk = "1.13.10" -openaiClient = "3.8.2" -google-cloud-functions-framework = "^3.4.0" +openaiClient = "4.0.0-beta01" +google-cloud-functions-framework = "^3.4.4" wirespec = "0.9.23" logback = "1.5.6" +nodejs = "20.13.1" [libraries] kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } diff --git a/src/cloud/google-cloud-function/build.gradle.kts b/src/cloud/google-cloud-function/build.gradle.kts index 3e022f3..a121ef3 100644 --- a/src/cloud/google-cloud-function/build.gradle.kts +++ b/src/cloud/google-cloud-function/build.gradle.kts @@ -8,7 +8,7 @@ plugins { kotlin { js(IR) { - nodejs() + nodejs () generateTypeScriptDefinitions() } diff --git a/src/core/src/commonMain/kotlin/community/flock/aigentic/core/dsl/AgentConfig.kt b/src/core/src/commonMain/kotlin/community/flock/aigentic/core/dsl/AgentConfig.kt index 39c738b..9b5fa27 100644 --- a/src/core/src/commonMain/kotlin/community/flock/aigentic/core/dsl/AgentConfig.kt +++ b/src/core/src/commonMain/kotlin/community/flock/aigentic/core/dsl/AgentConfig.kt @@ -60,11 +60,7 @@ class AgentConfig : Config { systemPromptBuilder = systemPromptBuilder, model = checkNotNull(model, builderPropertyMissingErrorMessage("model", "model()")), task = checkNotNull(task?.build(), builderPropertyMissingErrorMessage("task", "task()")), - tools = - check( - tools.isNotEmpty(), - builderPropertyMissingErrorMessage("tools", "addTool()"), - ).let { tools.associateBy { it.name } }, + tools = tools.let { tools.associateBy { it.name } }.also { if (it.isEmpty()) println("Warning: No tools provided") }, contexts = contexts, responseParameter = responseParameter, ) diff --git a/src/core/src/jvmTest/kotlin/community/flock/aigentic/core/dsl/AgentConfigTest.kt b/src/core/src/jvmTest/kotlin/community/flock/aigentic/core/dsl/AgentConfigTest.kt index 5108681..30b5b22 100644 --- a/src/core/src/jvmTest/kotlin/community/flock/aigentic/core/dsl/AgentConfigTest.kt +++ b/src/core/src/jvmTest/kotlin/community/flock/aigentic/core/dsl/AgentConfigTest.kt @@ -87,13 +87,6 @@ class AgentConfigTest : DescribeSpec({ }, expectedMessage = "Cannot build Agent, property 'task' is missing, please use 'task()' to provide it", ), - MissingPropertyTestCase( - agentConfig = { - model(mockk(relaxed = true)) - task("Task description") {} - }, - expectedMessage = "Cannot build Agent, property 'tools' is missing, please use 'addTool()' to provide it", - ), ) { testCase -> shouldThrow { agent(testCase.agentConfig) diff --git a/src/platform/src/commonMain/kotlin/community/flock/aigentic/platform/client/PlatformClient.kt b/src/platform/src/commonMain/kotlin/community/flock/aigentic/platform/client/PlatformClient.kt index 06cb837..d5e2b81 100644 --- a/src/platform/src/commonMain/kotlin/community/flock/aigentic/platform/client/PlatformClient.kt +++ b/src/platform/src/commonMain/kotlin/community/flock/aigentic/platform/client/PlatformClient.kt @@ -36,9 +36,9 @@ import io.ktor.http.HttpHeaders import io.ktor.http.HttpMethod import io.ktor.http.contentType import io.ktor.serialization.kotlinx.json.json -import io.ktor.util.toByteArray import io.ktor.util.toMap import io.ktor.utils.io.core.toByteArray +import io.ktor.utils.io.toByteArray import kotlinx.serialization.json.Json import kotlinx.serialization.serializer import kotlin.reflect.KType diff --git a/src/providers/gemini/src/commonMain/kotlin/community/flock/aigentic/gemini/model/GeminiModel.kt b/src/providers/gemini/src/commonMain/kotlin/community/flock/aigentic/gemini/model/GeminiModel.kt index 1129238..f9937dc 100644 --- a/src/providers/gemini/src/commonMain/kotlin/community/flock/aigentic/gemini/model/GeminiModel.kt +++ b/src/providers/gemini/src/commonMain/kotlin/community/flock/aigentic/gemini/model/GeminiModel.kt @@ -17,12 +17,15 @@ import community.flock.aigentic.gemini.mapper.toModelResponse sealed class GeminiModelIdentifier( override val stringValue: String, ) : ModelIdentifier { + data object Gemini2FlashExperimental : GeminiModelIdentifier("gemini-2.0-flash-exp") data object GeminiPro : GeminiModelIdentifier("gemini-pro") data object GeminiProVision : GeminiModelIdentifier("gemini-pro-vision") data object Gemini1_5ProLatest : GeminiModelIdentifier("gemini-1.5-pro-latest") data object Gemini1_5ProLatestStable : GeminiModelIdentifier("gemini-1.5-pro") data object Gemini1_5FlashLatest : GeminiModelIdentifier("gemini-1.5-flash-latest") data object Gemini1_5FlashLatestStable : GeminiModelIdentifier("gemini-1.5-flash") + + data class Gemini_Custom_Identifier(val modelIdentifier: String) : GeminiModelIdentifier(modelIdentifier) } class GeminiModel( diff --git a/src/providers/openai/src/commonMain/kotlin/community/flock/aigentic/openai/model/OpenAIModel.kt b/src/providers/openai/src/commonMain/kotlin/community/flock/aigentic/openai/model/OpenAIModel.kt index 413624d..be33db9 100644 --- a/src/providers/openai/src/commonMain/kotlin/community/flock/aigentic/openai/model/OpenAIModel.kt +++ b/src/providers/openai/src/commonMain/kotlin/community/flock/aigentic/openai/model/OpenAIModel.kt @@ -23,10 +23,16 @@ import kotlin.time.Duration.Companion.seconds sealed class OpenAIModelIdentifier( override val stringValue: String, ) : ModelIdentifier { + data object GPTO1 : OpenAIModelIdentifier("o1") + data object GPTO1Mini : OpenAIModelIdentifier("o1-mini") + data object GPTO1Preview : OpenAIModelIdentifier("o1-preview") data object GPT4O : OpenAIModelIdentifier("gpt-4o") + data object GPT4OLatest : OpenAIModelIdentifier("chatgpt-4o-latest") data object GPT4OMini : OpenAIModelIdentifier("gpt-4o-mini") data object GPT4Turbo : OpenAIModelIdentifier("gpt-4-turbo") data object GPT3_5Turbo : OpenAIModelIdentifier("gpt-3.5-turbo") + + data class GPT_Custom_Identifier(val modelIdentifier: String) : OpenAIModelIdentifier(modelIdentifier) } class OpenAIModel(