use async_trait::async_trait;
use crate::llm::LlmRequest;
use crate::utils::model_name::is_gemini2_or_above;
use super::base::{CodeExecutor, CodeExecutorError};
use super::types::{CodeExecutionInput, CodeExecutionResult};
pub struct BuiltInCodeExecutor;
impl BuiltInCodeExecutor {
pub fn process_llm_request(
&self,
request: &mut LlmRequest,
model: &str,
) -> Result<(), CodeExecutorError> {
if !is_gemini2_or_above(model) {
return Err(CodeExecutorError::UnsupportedModel(format!(
"Built-in code execution requires Gemini 2.0+, got: {}",
model
)));
}
request
.tools
.push(rs_genai::prelude::Tool::code_execution());
Ok(())
}
}
#[async_trait]
impl CodeExecutor for BuiltInCodeExecutor {
async fn execute_code(
&self,
_input: CodeExecutionInput,
) -> Result<CodeExecutionResult, CodeExecutorError> {
Ok(CodeExecutionResult::empty())
}
}