@@ -12,6 +12,8 @@ import ai.koog.agents.core.feature.AIAgentFeature
12
12
import ai.koog.agents.core.tools.ToolDescriptor
13
13
import ai.koog.agents.core.tools.ToolRegistry
14
14
import ai.koog.agents.features.common.config.FeatureConfig
15
+ import ai.koog.ktor.utils.config.getModelFromIdentifier
16
+ import ai.koog.ktor.utils.config.loadEnvironmentConfig
15
17
import ai.koog.prompt.dsl.ModerationResult
16
18
import ai.koog.prompt.dsl.Prompt
17
19
import ai.koog.prompt.dsl.PromptBuilder
@@ -986,154 +988,6 @@ public val Koog: RouteScopedPlugin<KoogAgentsConfig> = createRouteScopedPlugin(
986
988
application.attributes.put(KoogPluginKey , koogInstance)
987
989
}
988
990
989
- private fun loadEnvironmentConfig (envConfig : ApplicationConfig ): KoogAgentsConfig {
990
- val koogConfig = KoogAgentsConfig ()
991
-
992
- // Check if koog configuration exists
993
- if (envConfig.propertyOrNull(" koog" ) != null ) {
994
- // OpenAI configuration
995
- if (envConfig.propertyOrNull(" koog.openai" ) != null ) {
996
- val apiKey = envConfig.propertyOrNull(" koog.openai.apikey" )?.getString()
997
- if (apiKey != null && apiKey.isNotEmpty()) {
998
- koogConfig.openAI(apiKey) {
999
- envConfig.propertyOrNull(" koog.openai.baseUrl" )?.getString()?.let { baseUrl = it }
1000
-
1001
- // Configure timeouts if present
1002
- if (envConfig.propertyOrNull(" koog.openai.timeout" ) != null ) {
1003
- timeouts {
1004
- envConfig.propertyOrNull(" koog.openai.timeout.requestTimeoutMillis" )?.getString()
1005
- ?.toLongOrNull()?.let {
1006
- requestTimeoutMillis = it
1007
- }
1008
- envConfig.propertyOrNull(" koog.openai.timeout.connectTimeoutMillis" )?.getString()
1009
- ?.toLongOrNull()?.let {
1010
- connectTimeoutMillis = it
1011
- }
1012
- envConfig.propertyOrNull(" koog.openai.timeout.socketTimeoutMillis" )?.getString()
1013
- ?.toLongOrNull()?.let {
1014
- socketTimeoutMillis = it
1015
- }
1016
- }
1017
- }
1018
- }
1019
- }
1020
- }
1021
-
1022
- // Anthropic configuration
1023
- if (envConfig.propertyOrNull(" koog.anthropic" ) != null ) {
1024
- val apiKey = envConfig.propertyOrNull(" koog.anthropic.apikey" )?.getString()
1025
- if (apiKey != null && apiKey.isNotEmpty()) {
1026
- koogConfig.anthropic(apiKey) {
1027
- envConfig.propertyOrNull(" koog.anthropic.baseUrl" )?.getString()?.let { baseUrl = it }
1028
-
1029
- // Configure timeouts if present
1030
- if (envConfig.propertyOrNull(" koog.anthropic.timeout" ) != null ) {
1031
- timeouts {
1032
- envConfig.propertyOrNull(" koog.anthropic.timeout.requestTimeoutMillis" )?.getString()
1033
- ?.toLongOrNull()?.let {
1034
- requestTimeoutMillis = it
1035
- }
1036
- envConfig.propertyOrNull(" koog.anthropic.timeout.connectTimeoutMillis" )?.getString()
1037
- ?.toLongOrNull()?.let {
1038
- connectTimeoutMillis = it
1039
- }
1040
- envConfig.propertyOrNull(" koog.anthropic.timeout.socketTimeoutMillis" )?.getString()
1041
- ?.toLongOrNull()?.let {
1042
- socketTimeoutMillis = it
1043
- }
1044
- }
1045
- }
1046
- }
1047
- }
1048
- }
1049
-
1050
- // Google configuration
1051
- if (envConfig.propertyOrNull(" koog.google" ) != null ) {
1052
- val apiKey = envConfig.propertyOrNull(" koog.google.apikey" )?.getString()
1053
- if (apiKey != null && apiKey.isNotEmpty()) {
1054
- koogConfig.google(apiKey) {
1055
- envConfig.propertyOrNull(" koog.google.baseUrl" )?.getString()?.let { baseUrl = it }
1056
-
1057
- // Configure timeouts if present
1058
- if (envConfig.propertyOrNull(" koog.google.timeout" ) != null ) {
1059
- timeouts {
1060
- envConfig.propertyOrNull(" koog.google.timeout.requestTimeoutMillis" )?.getString()
1061
- ?.toLongOrNull()?.let {
1062
- requestTimeoutMillis = it
1063
- }
1064
- envConfig.propertyOrNull(" koog.google.timeout.connectTimeoutMillis" )?.getString()
1065
- ?.toLongOrNull()?.let {
1066
- connectTimeoutMillis = it
1067
- }
1068
- envConfig.propertyOrNull(" koog.google.timeout.socketTimeoutMillis" )?.getString()
1069
- ?.toLongOrNull()?.let {
1070
- socketTimeoutMillis = it
1071
- }
1072
- }
1073
- }
1074
- }
1075
- }
1076
- }
1077
-
1078
- // OpenRouter configuration
1079
- if (envConfig.propertyOrNull(" koog.openrouter" ) != null ) {
1080
- val apiKey = envConfig.propertyOrNull(" koog.openrouter.apikey" )?.getString()
1081
- if (apiKey != null && apiKey.isNotEmpty()) {
1082
- koogConfig.openRouter(apiKey) {
1083
- envConfig.propertyOrNull(" koog.openrouter.baseUrl" )?.getString()?.let { baseUrl = it }
1084
-
1085
- // Configure timeouts if present
1086
- if (envConfig.propertyOrNull(" koog.openrouter.timeout" ) != null ) {
1087
- timeouts {
1088
- envConfig.propertyOrNull(" koog.openrouter.timeout.requestTimeoutMillis" )?.getString()
1089
- ?.toLongOrNull()?.let {
1090
- requestTimeoutMillis = it
1091
- }
1092
- envConfig.propertyOrNull(" koog.openrouter.timeout.connectTimeoutMillis" )?.getString()
1093
- ?.toLongOrNull()?.let {
1094
- connectTimeoutMillis = it
1095
- }
1096
- envConfig.propertyOrNull(" koog.openrouter.timeout.socketTimeoutMillis" )?.getString()
1097
- ?.toLongOrNull()?.let {
1098
- socketTimeoutMillis = it
1099
- }
1100
- }
1101
- }
1102
- }
1103
- }
1104
- }
1105
-
1106
- // Ollama configuration
1107
- if (envConfig.propertyOrNull(" koog.ollama" ) != null ) {
1108
- koogConfig.ollama {
1109
- envConfig.propertyOrNull(" koog.ollama.baseUrl" )?.getString()?.let { baseUrl = it }
1110
-
1111
- // Configure timeouts if present
1112
- if (envConfig.propertyOrNull(" koog.ollama.timeout" ) != null ) {
1113
- timeouts {
1114
- envConfig.propertyOrNull(" koog.ollama.timeout.requestTimeoutMillis" )?.getString()
1115
- ?.toLongOrNull()
1116
- ?.let {
1117
- requestTimeoutMillis = it
1118
- }
1119
- envConfig.propertyOrNull(" koog.ollama.timeout.connectTimeoutMillis" )?.getString()
1120
- ?.toLongOrNull()
1121
- ?.let {
1122
- connectTimeoutMillis = it
1123
- }
1124
- envConfig.propertyOrNull(" koog.ollama.timeout.socketTimeoutMillis" )?.getString()?.toLongOrNull()
1125
- ?.let {
1126
- socketTimeoutMillis = it
1127
- }
1128
- }
1129
- }
1130
- }
1131
- }
1132
- }
1133
-
1134
- return koogConfig
1135
- }
1136
-
1137
991
/* *
1138
992
* Represents a type alias for a lambda function that extends the [FeatureContext] receiver,
1139
993
* allowing the configuration or addition of specific features to a Kotlin AI Agent instance.
0 commit comments