# Genie Engine

Genie Engine APIs provide a method to instantiate a standalone engine, which later can bounded to a active dialog. This helps in switching engine in an active dialog.

Engine switching can be exercised by using “–allow\_engine\_switch &lt;ENGINE\_TYPE&gt;, &lt;path-to-engine-config&gt;” in genie-t2t-run.
After switching the engine, dialog will be queried with given prompt.

Note

Currently engine switching is only supported in multi-engine dialogs, and you can only switch “draft” engines.

## Example on how to perform Engine Switching APIs

// Create Dialog Config
    GenieDialogConfig_Handle_t dialogConfigHandle   = NULL;
    GenieDialogConfig_createFromJson(dialogConfigStr, &dialogConfigHandle);
    
    // Create Dialog
    GenieDialog_Handle_t dialogHandle = NULL;
    GenieDialog_create(dialogConfigHandle, &dialogHandle);
    
    // Create Engine Config
    GenieEngineConfig_Handle_t engineConfigHandle   = NULL;
    GenieEngineConfig_createFromJson(engineConfigStr, &engineConfigHandle);
    
    //Create Engine
    GenieEngine_Handle_t engineHandle = NULL;
    GenieEngine_create(engineConfigHandle, &engineHandle);
    
    //Get old Engine from Dialog, If not called, then the engine will be unloaded when switching occurs.
    GenieEngine_Handle_t dialogEngineHandle = NULL;
    std::string engineType = "draft";
    // Every call to getEngine API will increase the internal reference count of the engine and Engine will only
    // be freed once reference count reached zero.
    GenieDialog_getEngine(dialogHandle, engineType.c_str(), &dialogEngineHandle);
    
    // Bind Engine Handle to active Dialog
    GenieDialog_bindEngine(dialogHandle, engineType.c_str(), engineHandle);
    
    // In case dialog had previous query, need to flush the KV cache also.
    GenieDialog_reset(dialogHandle);
    
    // Run Dialog Query API
    GenieDialog_query(dialogHandle, promptStr, GenieDialog_SentenceCode_t::GENIE_DIALOG_SENTENCE_COMPLETE, queryCallback);
    
    // Free engine Handle, this will not free engine if ref count is non zero even after the call.
    GenieEngine_free(engineHandle);
    
    // Free old Dialog engine, as it is not associated with the dialog anymore.
    GenieEngine_free(dialogEngineHandle);
    
    // Free Dialog
    GenieDialog_free(dialogHandle);
    Copy to clipboard

Last Published: Oct 02, 2025

[Previous Topic
Tutorials](https://docs.qualcomm.com/bundle/publicresource/80-63442-100/topics/bge-large.md) [Next Topic
Genie Log](https://docs.qualcomm.com/bundle/publicresource/80-63442-100/topics/logger.md)