File size: 1,863 Bytes
afa0cbf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | use codex_code_mode_protocol::grpc;
use codex_code_mode_protocol::host::MAX_FRAME_BYTES;
use prost::Message;
pub(super) fn request(
session_id: &str,
invocation_id: &str,
result: Result<serde_json::Value, String>,
) -> grpc::CompleteToolCallRequest {
request_with_maximum(session_id, invocation_id, result, MAX_FRAME_BYTES)
}
fn request_with_maximum(
session_id: &str,
invocation_id: &str,
result: Result<serde_json::Value, String>,
maximum_message_bytes: usize,
) -> grpc::CompleteToolCallRequest {
let outcome = match result {
Ok(value) => match serde_json::to_vec(&value) {
Ok(output_json) => {
grpc::complete_tool_call_request::Outcome::Succeeded(grpc::ToolCallSucceeded {
output_json,
})
}
Err(error) => grpc::complete_tool_call_request::Outcome::Failed(grpc::ToolCallFailed {
message: format!("failed to encode code-mode tool result: {error}"),
}),
},
Err(message) => {
grpc::complete_tool_call_request::Outcome::Failed(grpc::ToolCallFailed { message })
}
};
let mut request = grpc::CompleteToolCallRequest {
session_id: session_id.to_string(),
invocation_id: invocation_id.to_string(),
outcome: Some(outcome),
};
let encoded_bytes = request.encoded_len();
if encoded_bytes > maximum_message_bytes {
request.outcome = Some(grpc::complete_tool_call_request::Outcome::Failed(
grpc::ToolCallFailed {
message: format!(
"code-mode tool result of {encoded_bytes} encoded bytes exceeds the gRPC message limit of {maximum_message_bytes} bytes"
),
},
));
}
request
}
#[cfg(test)]
#[path = "completion_tests.rs"]
mod tests;
|