This commit is contained in:
9 files changed
+480
-22
No files matched your search
@@ -13,6 +13,7 @@ import com.m57.hermescontrol.data.session.ActiveSessionHolder
|
||||
import com.m57.hermescontrol.data.ws.contract.PromptSubmitParams
|
||||
import com.m57.hermescontrol.data.ws.contract.RpcMethod
|
||||
import com.m57.hermescontrol.data.ws.contract.RpcMethods
|
||||
import com.m57.hermescontrol.data.ws.contract.SessionCorrectionParams
|
||||
import com.m57.hermescontrol.data.ws.contract.SessionEventsSinceParams
|
||||
import kotlinx.coroutines.CancellationException
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
@@ -1115,8 +1116,12 @@ object HermesWsClient {
|
||||
onSent: ((String) -> Unit)? = null,
|
||||
): String =
|
||||
send(
|
||||
method = WsMethods.SESSION_REDIRECT,
|
||||
params = mapOf("session_id" to sessionId, "text" to text),
|
||||
method = RpcMethods.SESSION_REDIRECT,
|
||||
params =
|
||||
SessionCorrectionParams(
|
||||
sessionId = sessionId,
|
||||
text = text,
|
||||
),
|
||||
onSent = onSent,
|
||||
)
|
||||
|
||||
|
||||
@@ -38,6 +38,27 @@ object RpcMethods {
|
||||
PromptSubmitResult.serializer(),
|
||||
)
|
||||
|
||||
val SESSION_INTERRUPT: RpcMethod<SessionInterruptParams, SessionInterruptResult> =
|
||||
RpcMethod(
|
||||
WsMethods.SESSION_INTERRUPT,
|
||||
SessionInterruptParams.serializer(),
|
||||
SessionInterruptResult.serializer(),
|
||||
)
|
||||
|
||||
val SESSION_STEER: RpcMethod<SessionCorrectionParams, SessionCorrectionResult> =
|
||||
RpcMethod(
|
||||
WsMethods.SESSION_STEER,
|
||||
SessionCorrectionParams.serializer(),
|
||||
SessionCorrectionResult.serializer(),
|
||||
)
|
||||
|
||||
val SESSION_REDIRECT: RpcMethod<SessionCorrectionParams, SessionCorrectionResult> =
|
||||
RpcMethod(
|
||||
WsMethods.SESSION_REDIRECT,
|
||||
SessionCorrectionParams.serializer(),
|
||||
SessionCorrectionResult.serializer(),
|
||||
)
|
||||
|
||||
/** Every typed method. GatewayContractTest iterates this; future migrations append here. */
|
||||
val all: List<RpcMethod<*, *>> =
|
||||
listOf(
|
||||
@@ -45,5 +66,8 @@ object RpcMethods {
|
||||
SESSION_CREATE,
|
||||
SESSION_RESUME,
|
||||
PROMPT_SUBMIT,
|
||||
SESSION_INTERRUPT,
|
||||
SESSION_STEER,
|
||||
SESSION_REDIRECT,
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.m57.hermescontrol.data.ws.contract
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class SessionInterruptParams(
|
||||
@SerialName("session_id") val sessionId: String,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class SessionCorrectionParams(
|
||||
@SerialName("session_id") val sessionId: String,
|
||||
@SerialName("text") val text: String,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class SessionInterruptResult(
|
||||
val status: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class SessionCorrectionResult(
|
||||
val status: String? = null,
|
||||
val text: String? = null,
|
||||
)
|
||||
@@ -20,6 +20,7 @@ import com.m57.hermescontrol.data.ws.WsMethods
|
||||
import com.m57.hermescontrol.data.ws.contract.PromptSubmitParams
|
||||
import com.m57.hermescontrol.data.ws.contract.RpcMethods
|
||||
import com.m57.hermescontrol.data.ws.contract.SessionCreateParams
|
||||
import com.m57.hermescontrol.data.ws.contract.SessionInterruptParams
|
||||
import com.m57.hermescontrol.data.ws.toJsonElement
|
||||
import com.m57.hermescontrol.ui.chat.tool.ToolResultSummary
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
@@ -909,8 +910,8 @@ class GroupChatViewModel(
|
||||
for (sid in activeSessions.distinct()) {
|
||||
try {
|
||||
HermesWsClient.send(
|
||||
WsMethods.SESSION_INTERRUPT,
|
||||
mapOf("session_id" to sid),
|
||||
RpcMethods.SESSION_INTERRUPT,
|
||||
SessionInterruptParams(sid),
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
Log.w("GroupChatViewModel", "Failed to send interrupt for session $sid: ${e.message}")
|
||||
|
||||
@@ -37,6 +37,9 @@ import com.m57.hermescontrol.data.ws.HermesWsClient
|
||||
import com.m57.hermescontrol.data.ws.JsonRpcError
|
||||
import com.m57.hermescontrol.data.ws.WsEvent
|
||||
import com.m57.hermescontrol.data.ws.WsMethods
|
||||
import com.m57.hermescontrol.data.ws.contract.RpcMethods
|
||||
import com.m57.hermescontrol.data.ws.contract.SessionCorrectionParams
|
||||
import com.m57.hermescontrol.data.ws.contract.SessionInterruptParams
|
||||
import com.m57.hermescontrol.data.ws.toAny
|
||||
import com.m57.hermescontrol.data.ws.toJsonElement
|
||||
import com.m57.hermescontrol.notification.ReplyNotificationTracker
|
||||
@@ -2454,8 +2457,8 @@ class ChatViewModel(
|
||||
deleteSnapshotOnRollback = true,
|
||||
) {
|
||||
wsClient.send(
|
||||
WsMethods.SESSION_INTERRUPT,
|
||||
mapOf("session_id" to owner.agentSessionId),
|
||||
RpcMethods.SESSION_INTERRUPT,
|
||||
SessionInterruptParams(owner.agentSessionId),
|
||||
onSent = { id -> trackHardInterrupt(id, staged.id, owner, reservation.mainTurnEpoch) },
|
||||
)
|
||||
}
|
||||
@@ -2821,8 +2824,8 @@ class ChatViewModel(
|
||||
deleteSnapshotOnRollback = false,
|
||||
) {
|
||||
wsClient.send(
|
||||
WsMethods.SESSION_INTERRUPT,
|
||||
mapOf("session_id" to owner.agentSessionId),
|
||||
RpcMethods.SESSION_INTERRUPT,
|
||||
SessionInterruptParams(owner.agentSessionId),
|
||||
onSent = { requestId -> trackHardInterrupt(requestId, id, owner, interruptedTurnEpoch) },
|
||||
)
|
||||
}
|
||||
@@ -3043,8 +3046,8 @@ class ChatViewModel(
|
||||
viewModelScope.launch {
|
||||
commitReceiptAndEnqueue(owner, receipt, null, deleteSnapshotOnRollback = false) {
|
||||
wsClient.send(
|
||||
WsMethods.SESSION_INTERRUPT,
|
||||
mapOf("session_id" to owner.agentSessionId),
|
||||
RpcMethods.SESSION_INTERRUPT,
|
||||
SessionInterruptParams(owner.agentSessionId),
|
||||
onSent = { id -> trackHardInterrupt(id, userMessage.id, owner, interruptedTurnEpoch) },
|
||||
)
|
||||
}
|
||||
@@ -3437,8 +3440,8 @@ class ChatViewModel(
|
||||
if (mode == BusySendMode.GUIDE) {
|
||||
enqueueOwned {
|
||||
wsClient.send(
|
||||
WsMethods.SESSION_STEER,
|
||||
mapOf("session_id" to owner.agentSessionId, "text" to fullText),
|
||||
RpcMethods.SESSION_STEER,
|
||||
SessionCorrectionParams(owner.agentSessionId, fullText),
|
||||
onSent = { id ->
|
||||
trackOutgoingRequest(
|
||||
id,
|
||||
@@ -4328,8 +4331,8 @@ class ChatViewModel(
|
||||
}
|
||||
viewModelScope.launch(ioDispatcher) {
|
||||
wsClient.send(
|
||||
WsMethods.SESSION_INTERRUPT,
|
||||
mapOf("session_id" to sessionId),
|
||||
RpcMethods.SESSION_INTERRUPT,
|
||||
SessionInterruptParams(sessionId),
|
||||
onSent = { id -> trackRequest(id, WsMethods.SESSION_INTERRUPT) },
|
||||
)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user