Skip to content
Open
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 @@ -2,6 +2,7 @@ package ai.koog.a2a.model

import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonObject
import kotlin.jvm.JvmOverloads

/**
* Defines the parameters for a request to send a message to an agent. This can be used
Expand All @@ -12,7 +13,7 @@ import kotlinx.serialization.json.JsonObject
* @property metadata Optional metadata for extensions.
*/
@Serializable
public data class MessageSendParams(
public data class MessageSendParams @JvmOverloads constructor(
public val message: Message,
public val configuration: MessageSendConfiguration? = null,
public val metadata: JsonObject? = null,
Expand All @@ -27,7 +28,7 @@ public data class MessageSendParams(
* @property blocking If true, the client will wait for the task to complete. The server may reject this if the task is long-running.
*/
@Serializable
public data class MessageSendConfiguration(
public data class MessageSendConfiguration @JvmOverloads constructor(
public val blocking: Boolean? = null,
public val acceptedOutputModes: List<String>? = null,
public val historyLength: Int? = null,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
@file:Suppress("MissingKDocForPublicAPI", "EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")

package ai.koog.agents.core.agent

import ai.koog.agents.core.agent.config.AIAgentConfig
import ai.koog.agents.core.agent.config.AIAgentConfigBase
import ai.koog.agents.core.agent.entity.AIAgentGraphStrategy
import ai.koog.agents.core.tools.ToolRegistry
import ai.koog.prompt.executor.model.PromptExecutor
import ai.koog.prompt.llm.LLModel
import ai.koog.utils.io.Closeable
import kotlinx.datetime.Clock
import kotlin.uuid.ExperimentalUuidApi

@Suppress("ACTUAL_ANNOTATIONS_NOT_MATCH_EXPECT")
public actual abstract class AIAgent<Input, Output> : Closeable {
public actual abstract val id: String
public actual abstract val agentConfig: AIAgentConfigBase

public actual abstract suspend fun getState(): AIAgentState<Output>

public actual open suspend fun result(): Output = AIAgentHelper.result(this)

public actual abstract suspend fun run(agentInput: Input): Output

public actual companion object {
@OptIn(markerClass = [ExperimentalUuidApi::class])
public actual inline operator fun <reified Input, reified Output> invoke(
promptExecutor: PromptExecutor,
agentConfig: AIAgentConfig,
strategy: AIAgentGraphStrategy<Input, Output>,
toolRegistry: ToolRegistry,
id: String?,
clock: Clock,
noinline installFeatures: GraphAIAgent.FeatureContext.() -> Unit
): AIAgent<Input, Output> =
AIAgentHelper.invoke(promptExecutor, agentConfig, strategy, toolRegistry, id, clock, installFeatures)

@OptIn(markerClass = [ExperimentalUuidApi::class])
public actual operator fun invoke(
promptExecutor: PromptExecutor,
agentConfig: AIAgentConfig,
strategy: AIAgentGraphStrategy<String, String>,
toolRegistry: ToolRegistry,
id: String?,
installFeatures: GraphAIAgent.FeatureContext.() -> Unit
): AIAgent<String, String> = AIAgentHelper.invoke(
promptExecutor,
agentConfig,
strategy,
toolRegistry,
id,
installFeatures = installFeatures
)

@OptIn(markerClass = [ExperimentalUuidApi::class])
public actual operator fun <Input, Output> invoke(
promptExecutor: PromptExecutor,
agentConfig: AIAgentConfig,
strategy: AIAgentFunctionalStrategy<Input, Output>,
toolRegistry: ToolRegistry,
id: String?,
clock: Clock,
installFeatures: FunctionalAIAgent.FeatureContext.() -> Unit
): FunctionalAIAgent<Input, Output> =
AIAgentHelper.invoke(promptExecutor, agentConfig, strategy, toolRegistry, id, clock, installFeatures)

@OptIn(markerClass = [ExperimentalUuidApi::class])
public actual operator fun invoke(
promptExecutor: PromptExecutor,
llmModel: LLModel,
strategy: AIAgentGraphStrategy<String, String>,
toolRegistry: ToolRegistry,
id: String?,
systemPrompt: String,
temperature: Double,
numberOfChoices: Int,
maxIterations: Int,
installFeatures: GraphAIAgent.FeatureContext.() -> Unit
): AIAgent<String, String> = AIAgentHelper.invoke(
promptExecutor,
llmModel,
strategy,
toolRegistry,
id,
systemPrompt,
temperature,
numberOfChoices,
maxIterations,
installFeatures
)

@OptIn(markerClass = [ExperimentalUuidApi::class])
public actual inline operator fun <reified Input, reified Output> invoke(
promptExecutor: PromptExecutor,
llmModel: LLModel,
strategy: AIAgentGraphStrategy<Input, Output>,
toolRegistry: ToolRegistry,
id: String?,
clock: Clock,
systemPrompt: String,
temperature: Double,
numberOfChoices: Int,
maxIterations: Int,
noinline installFeatures: GraphAIAgent.FeatureContext.() -> Unit
): AIAgent<Input, Output> = AIAgentHelper.invoke(
promptExecutor,
llmModel,
strategy,
toolRegistry,
id,
clock,
systemPrompt,
temperature,
numberOfChoices,
maxIterations,
installFeatures
)

public actual operator fun <Input, Output> invoke(
promptExecutor: PromptExecutor,
llmModel: LLModel,
toolRegistry: ToolRegistry,
strategy: AIAgentFunctionalStrategy<Input, Output>,
id: String?,
systemPrompt: String,
temperature: Double,
numberOfChoices: Int,
maxIterations: Int,
installFeatures: FunctionalAIAgent.FeatureContext.() -> Unit
): AIAgent<Input, Output> = AIAgentHelper.invoke(
promptExecutor,
llmModel,
toolRegistry,
strategy,
id,
systemPrompt,
temperature,
numberOfChoices,
maxIterations,
installFeatures
)

public actual fun builder(): AIAgentBuilder = AIAgentBuilder()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING", "MissingKDocForPublicAPI")

package ai.koog.agents.core.agent

import ai.koog.agents.core.agent.config.AIAgentConfig
import ai.koog.agents.core.agent.entity.AIAgentGraphStrategy
import ai.koog.agents.core.annotation.InternalAgentsApi
import ai.koog.agents.core.tools.ToolRegistry
import ai.koog.prompt.executor.model.PromptExecutor
import ai.koog.prompt.llm.LLModel
import kotlinx.datetime.Clock

public actual interface AIAgentService<Input, Output, TAgent : AIAgent<Input, Output>> {
public actual val promptExecutor: PromptExecutor
public actual val agentConfig: AIAgentConfig
public actual val toolRegistry: ToolRegistry
public actual suspend fun createAgent(id: String?, clock: Clock): TAgent
public actual suspend fun createAgentAndRun(agentInput: Input, id: String?, clock: Clock): Output
public actual suspend fun removeAgent(agent: TAgent): Boolean
public actual suspend fun removeAgentWithId(id: String): Boolean
public actual suspend fun agentById(id: String): TAgent?
public actual suspend fun listAllAgents(): List<TAgent>
public actual suspend fun listActiveAgents(): List<TAgent>
public actual suspend fun listInactiveAgents(): List<TAgent>
public actual suspend fun listFinishedAgents(): List<TAgent>
public actual suspend fun closeAll()

@Suppress("ACTUAL_ANNOTATIONS_NOT_MATCH_EXPECT")
public actual companion object {
public actual fun builder(): AIAgentServiceBuilder = AIAgentServiceBuilder()

@OptIn(markerClass = [InternalAgentsApi::class])
public actual inline fun <reified Input, reified Output> fromAgent(
agent: GraphAIAgent<Input, Output>
): AIAgentService<Input, Output, GraphAIAgent<Input, Output>> = AIAgentServiceHelper.fromAgent(agent)

@OptIn(markerClass = [InternalAgentsApi::class])
public actual fun <Input, Output> fromAgent(
agent: FunctionalAIAgent<Input, Output>
): AIAgentService<Input, Output, FunctionalAIAgent<Input, Output>> = AIAgentServiceHelper.fromAgent(agent)

@OptIn(markerClass = [InternalAgentsApi::class])
public actual inline operator fun <reified Input, reified Output> invoke(
promptExecutor: PromptExecutor,
agentConfig: AIAgentConfig,
strategy: AIAgentGraphStrategy<Input, Output>,
toolRegistry: ToolRegistry,
noinline installFeatures: GraphAIAgent.FeatureContext.() -> Unit
): GraphAIAgentService<Input, Output> =
AIAgentServiceHelper.invoke(promptExecutor, agentConfig, strategy, toolRegistry, installFeatures)

public actual operator fun invoke(
promptExecutor: PromptExecutor,
llmModel: LLModel,
strategy: AIAgentGraphStrategy<String, String>,
toolRegistry: ToolRegistry,
systemPrompt: String,
temperature: Double,
numberOfChoices: Int,
maxIterations: Int,
installFeatures: GraphAIAgent.FeatureContext.() -> Unit
): GraphAIAgentService<String, String> = AIAgentServiceHelper.invoke(
promptExecutor,
llmModel,
strategy,
toolRegistry,
systemPrompt,
temperature,
numberOfChoices,
maxIterations,
installFeatures
)

@OptIn(markerClass = [InternalAgentsApi::class])
public actual operator fun <Input, Output> invoke(
promptExecutor: PromptExecutor,
agentConfig: AIAgentConfig,
strategy: AIAgentFunctionalStrategy<Input, Output>,
toolRegistry: ToolRegistry,
installFeatures: FunctionalAIAgent.FeatureContext.() -> Unit
): FunctionalAIAgentService<Input, Output> =
AIAgentServiceHelper.invoke(promptExecutor, agentConfig, strategy, toolRegistry, installFeatures)
}
}
Loading