MCPcopy Create free account
hub / github.com/evilsocket/cake / generate_text_blocking

Function generate_text_blocking

cake-core/src/cake/sharding/api/text.rs:121–180  ·  view source on GitHub ↗
(
    state: web::Data<Arc<RwLock<Master<M>>>>,
    request: ChatRequest,
)

Source from the content-addressed store, hash-verified

119}
120
121async fn generate_text_blocking<M: Model>(
122 state: web::Data<Arc<RwLock<Master<M>>>>,
123 request: ChatRequest,
124) -> HttpResponse {
125 let mut master = state.write().await;
126
127 if !master.model.as_ref().is_some_and(|m| m.output_modality() == OutputModality::Text) {
128 return HttpResponse::NotFound()
129 .json(serde_json::json!({"error": "No text model loaded"}));
130 }
131
132 if let Err(e) = master.reset() {
133 return HttpResponse::InternalServerError().json(serde_json::json!({"error": format!("{e}")}));
134 }
135
136 let num_messages = request.messages.len();
137 let model = master.model.as_mut().unwrap();
138 for message in request.messages {
139 if let Err(e) = model.add_message(message) {
140 return HttpResponse::InternalServerError().json(serde_json::json!({"error": format!("{e}")}));
141 }
142 }
143
144 let mut resp = String::new();
145 let mut finish_reason = "length".to_string();
146
147 let gen_result = master
148 .generate_text(request.max_tokens, |data| {
149 if data.is_empty() {
150 finish_reason = "stop".to_string();
151 } else {
152 resp += data;
153 }
154 })
155 .await;
156
157 println!();
158
159 let completion_tokens = master
160 .model
161 .as_ref()
162 .map(|m| m.generated_tokens())
163 .unwrap_or(0);
164
165 let _ = master.goodbye().await;
166
167 if let Err(e) = gen_result {
168 return HttpResponse::InternalServerError().json(serde_json::json!({"error": format!("{e}")}));
169 }
170
171 let response = ChatResponse::new(
172 M::MODEL_NAME.to_string(),
173 resp,
174 num_messages,
175 completion_tokens,
176 finish_reason,
177 );
178

Callers 1

generate_textFunction · 0.85

Calls 6

output_modalityMethod · 0.80
generate_textMethod · 0.80
resetMethod · 0.45
add_messageMethod · 0.45
generated_tokensMethod · 0.45
goodbyeMethod · 0.45

Tested by

no test coverage detected