MCPcopy Create free account
hub / github.com/cactus-compute/cactus / update

Method update

cactus/engine/engine_constraints.cpp:407–656  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

405}
406
407void ToolCallConstrainer::update(uint32_t /*token_id*/, const std::string& decoded_text) {
408 if (!active_) return;
409
410 generated_text_ += decoded_text;
411
412 if (model_type_ == Config::ModelType::LFM2) {
413 switch (state_) {
414 case State::LFM_START:
415 if (generated_text_.find("<|tool_call_start|>") != std::string::npos) {
416 state_ = State::LFM_EXPECT_BRACKET;
417 generated_text_.clear();
418 }
419 break;
420
421 case State::LFM_EXPECT_BRACKET:
422 if (generated_text_.find("[") != std::string::npos) {
423 state_ = State::LFM_IN_FUNC_NAME;
424 generated_text_.clear();
425 }
426 break;
427
428 case State::LFM_IN_FUNC_NAME:
429 for (const auto& name : function_names_) {
430 if (generated_text_.find(name) != std::string::npos) {
431 state_ = State::LFM_EXPECT_PAREN;
432 generated_text_.clear();
433 break;
434 }
435 }
436 break;
437
438 case State::LFM_EXPECT_PAREN:
439 if (generated_text_.find("(") != std::string::npos) {
440 state_ = State::LFM_IN_ARGUMENTS;
441 generated_text_.clear();
442 }
443 break;
444
445 case State::LFM_IN_ARGUMENTS:
446 if (decoded_text.find(")") != std::string::npos) {
447 state_ = State::LFM_EXPECT_BRACKET_CLOSE;
448 generated_text_.clear();
449 } else {
450 generated_text_.clear();
451 }
452 break;
453
454 case State::LFM_EXPECT_BRACKET_CLOSE:
455 if (generated_text_.find("]") != std::string::npos) {
456 state_ = State::LFM_EXPECT_END;
457 generated_text_.clear();
458 }
459 break;
460
461 case State::LFM_EXPECT_END:
462 if (generated_text_.find("<|tool_call_end|>") != std::string::npos) {
463 state_ = State::DONE;
464 generated_text_.clear();

Callers 1

Calls 1

clearMethod · 0.45

Tested by

no test coverage detected