Buenas @Kurro Lopez.

Para una demo que tuve que hace utilicé un simple Ens.InboundAdapter en el que configuré una simple consulta SQL a la tabla que quería controlar:

Class Local.BS.GetAppointmentBS Extends Ens.BusinessService
{

Property Target As Ens.DataType.ConfigName;

Parameter SETTINGS = "Target:Basic";

Parameter ADAPTER = "Ens.InboundAdapter";

Method OnProcessInput(pRequest As %RegisteredObject, pResponse As %RegisteredObject) As %Status
{
    set tSC = $$$OK

    set selectAppointments = "SELECT PatientId, Facility, AppointmentId FROM Local_Object.Appointment WHERE AppointmentDate = ?"
    set statementAppointments = ##class(%SQL.Statement).%New()
    set statusAppointments = statementAppointments.%Prepare(selectAppointments)
    if ($$$ISOK(statusAppointments)) {
        set resultSetAppointments = statementAppointments.%Execute($H+1)
        if (resultSetAppointments.%SQLCODE = 0) {
            $$$TRACE($ZDT($H+1,4))
            while resultSetAppointments.%Next() {
                $$$TRACE("Consulta con resultados")
                set appointmentRequest = ##class(Local.Message.PatientInfoRequest).%New()
                set appointmentRequest.PatientId = resultSetAppointments.%GetData("PatientId")
                set appointmentRequest.Facility = resultSetAppointments.%GetData("Facility")
                set appointmentRequest.AppointmentId = resultSetAppointments.%GetData("AppointmentId")
                set tSC=..SendRequestAsync(..Target, appointmentRequest)            
            }
        }
    }

    Quit tSC
}

}

Le configuré un bonito intervalo de llamada:

Y con esto para mi demo fue suficiente.

Para tu caso necesitarías además controlar un campo que te permita identificar los registros nuevos o modificados (que es lo que hace en EnsLib.SQL.InboundAdapter por debajo), si tu tabla dispone de un campo de tipo fecha que refleje la última actualización/creación te bastará con almacenar en un global cuando fue la última vez que lanzaste una consulta para buscar todos los nuevos registros entre la ejecución actual y la anterior.

Si no dispones de un campo de última actualización puedes usar siempre la clave primaria en el caso de que sea un tipo numérico autoincremental, en ese caso sólo podrías controlar los nuevos registros insertados. La implementación sería igual al punto anterior, grabas el último identificador en un global y a la siguiente ejecución buscas todos los registros mayores al identificador del global.

¡Buenas @Laura Blázquez García !

Por aquí tienes un artíc@Evgeny.Shvarov al respecto de la creación y publicación de proyectos en el IPM, básicamente es añadir el archivo module.xml con determinados parámetros para que capture el código que quieras publicar. Posteriormente le mandas un mensaje y el incluye vuestro proyecto al repositorio del IPM.
 

Buenas @Kurro Lopez , parece que no es compatible el modelo que has descargado usando Ollama con lo que requiere la librería sentence transformers, te recomiendo que descargues el modelo directamente como se indica desde la página de hugginfaces:

https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2

from sentence_transformers import SentenceTransformer
sentences = ["This is an example sentence", "Each sentence is converted"]

model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
embeddings = model.encode(sentences)
print(embeddings)

Puedes descargarlo en local directamente así:

if not os.path.isdir('/app/data/model/'):
    model = sentence_transformers.SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')            
    model.save('/app/data/model/')

Una vez descargado podrás hacer referencia directamente al modelo descargado.