Skip to content

specialists/grammar_specialist.cpp

Grammar specialist implementation. More...

Namespaces

Name
sgns
sgns::neoswarm
sgns::neoswarm::specialists

Detailed Description

Grammar specialist implementation.

Date: 2026-05-06

Source code

#include "grammar_specialist.hpp"
#include "common/logging.hpp"

#include <functional>

namespace sgns::neoswarm::specialists
{
    namespace
    {
        auto GrammarLogger()
        {
            return neoswarm::CreateLogger( "GrammarSpecialist" );
        }
    } // namespace

    GrammarSpecialist::GrammarSpecialist( std::shared_ptr<core::InferenceEngine> engine )
        : m_engine( std::move( engine ) )
    {
    }

    // -----------------------------------------------------------------------
    // Load
    // -----------------------------------------------------------------------
    outcome::result<void> GrammarSpecialist::Load( const std::string& model_path )
    {
        if ( !m_engine )
        {
            return outcome::failure( Error::ModelLoadFailed );
        }
        BOOST_OUTCOME_TRY( m_engine->LoadModel( model_path ) );
        m_loaded = true;
        GrammarLogger()->info( "GrammarSpecialist loaded: {}", model_path );
        return outcome::success();
    }

    // -----------------------------------------------------------------------
    // BuildPrompt
    // -----------------------------------------------------------------------
    std::string GrammarSpecialist::BuildPrompt( const std::string& input ) const
    {
        return "[INST] Correct the grammar, spelling, and fluency of the following text. "
               "Return only the corrected text without explanation.\n\n"
               "Text: " +
               input + "\n\nCorrected: [/INST]";
    }

    // -----------------------------------------------------------------------
    // Process
    // -----------------------------------------------------------------------
    outcome::result<std::string> GrammarSpecialist::Process( const std::string& input )
    {
        if ( !m_loaded || !m_engine )
        {
            GrammarLogger()->warn( "GrammarSpecialist not loaded — returning input unchanged" );
            last_confidence_ = 0.0f;
            return outcome::success( input );
        }

        Task task;
        task.m_id = "grammar-" + std::to_string( std::hash<std::string>{}( input ) );
        task.m_prompt = BuildPrompt( input );
        task.m_maxTokens = static_cast<uint32_t>( input.size() + 64 );
        task.m_temperature = 0.1f;

        auto res = m_engine->Infer( task );
        if ( !res.has_value() )
        {
            GrammarLogger()->warn( "GrammarSpecialist inference failed — returning input unchanged" );
            last_confidence_ = 0.0f;
            return outcome::success( input );
        }

        last_confidence_ = 1.0f - std::min( res.value().m_perplexity / 10.0f, 1.0f );
        return outcome::success( res.value().m_output );
    }

} // namespace sgns::neoswarm::specialists

Updated on 2026-07-25 at 22:56:57 +0000