Escrito por

Project Manager & Head of Interoperability at Salutic Soluciones, S.L.
MOD
Pregunta Kurro Lopez · mar 16

Método de Python no funciona en Business Process

Hola a todos.

Tengo un problema bastante extraño.

He creado un método en Python para crear un vector para una búsqueda vectorial. Hasta aquí todo correcto.

Si invoco a este método desde el termina, funciona correctamente:

Pero si hago esta misma llamada desde un bloque de código en una Business Process, se queda bloqueado, no responde y lanza el siguiente error:

¿Alguien sabe que está ocurriendo y como solucionarlo?

Muchas gracias por adelantado

Versión del producto: IRIS 2025.1
$ZV: IRIS for UNIX (Ubuntu Server LTS for x86-64 Containers) 2025.1 (Build 230.2U) Wed Jun 4 2025 18:54:4

Comments

Kurro Lopez  abr 12 to Luis Angel Pérez Ramos

Este es mi código

ClassMethod Embedding(Text) [ Language = python ]
{
   from transformers import AutoTokenizer, AutoModel
   import torch
   import torch.nn.functional as F
   #Mean Pooling - Take attention mask into account for correct averaging
   def mean_pooling(model_output, attention_mask):
       token_embeddings = model_output[0] #First element of model_output contains all token embeddings
       input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
       return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)

   # Sentences we want sentence embeddings for
   # sentences = ['This is an example sentence', 'Each sentence is converted']
   sentences = [Text]
   # Load model from HuggingFace Hub
   #; tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
   #; model = AutoModel.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
   
   # Load model from multilingual model
   tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')
   model = AutoModel.from_pretrained('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')
   # Tokenize sentences
   encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
   # Compute token embeddings
   with torch.no_grad():
       model_output = model(**encoded_input)
   # Perform pooling
   sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
   # Normalize embeddings
   sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)
   #print(sentence_embeddings)
   return str(sentence_embeddings[0].tolist())
}
0
Luis Angel Pérez Ramos  abr 13 to Kurro Lopez

Te sugeriría que añadas a tu código un try/catch y unas cuantas trazas para identificar el punto exacto que te genera el problema. Hace no mucho me pasó algo parecido, aunque en mi caso el problema era un fallo con la última versión de sentence-transformers.

Si puedes, añade a la declaración del método el tipo de datos de salida.

0
Kurro Lopez  abr 13 to Luis Angel Pérez Ramos

Voy a probar.

Es curioso porque si lo ejecuto desde el termina, tarda un poco pero responde. En cambio si es invocado desde un BP, se queda pillado y da un error en el BP.

El código de invocación es el que he puesto en el mensaje.

0
Kurro Lopez  abr 15 to Luis Angel Pérez Ramos

No, en ningún momento. Simplemente se queda esperando una respuesta del método Embedding y ahí se queda

0
Luis Angel Pérez Ramos  abr 16 to Kurro Lopez

Modifica la versión de sentence-transformers como te indico justo debajo.

0
Luis Angel Pérez Ramos  abr 14 to Kurro Lopez

Modifica la versión de sentence-transformers que estás usando por la siguiente:

sentence-transformers==5.1.2
0
Kurro Lopez  abr 16 to Luis Angel Pérez Ramos

Hola @Luis Angel Pérez Ramos 

He reiniciado mi docker para que vuelva a compilar todo desde cero para ver si así volvía a la vida, pero ahora me aparece el siguiente error cuando compila la clase St.Vectorsearch.Vector

USER>do $system.OBJ.Compile("St.Vectorsearch.Vector","ck")
Compilation started on 04/16/2026 06:05:04 with qualifiers 'ck'
Compiling class St.Vectorsearch.Vector
ERROR #7802: Worker job/s '878:23' unexpectedly shut down in group '#Default:(4743230725894):0'.
ERROR #7812: Work queue unexpectedly removed, shutting down.
ERROR #5002: ObjectScript error: <THROW>WaitForComplete+215^%SYS.WorkQueueMgr *%Exception.StatusException ERROR #7802: Worker job/s '878:23' unexpectedly shut down in group '#Default:(4743230725894):0'.
ERROR #7812: Work queue unexpectedly removed, shutting down.
Detected 3 errors during compilation in 1.003s.

He probado a usar tanto la versión de sentence-transforme que me habías pasado como usando la última versión, y da el mismo error al compilarlo.

¿Alguna idea?

Esta es mi clase St.Vectorsearch.Vector

Class St.Vectorsearch.Vector Extends %RegisteredObject
{
ClassMethod Embedding(Test) [ Language = python ]
{
   from transformers import AutoTokenizer, AutoModel
   import torch
   import torch.nn.functional as F
   #Mean Pooling - Take attention mask into account for correct averaging
   def mean_pooling(model_output, attention_mask):
       token_embeddings = model_output[0] #First element of model_output contains all token embeddings
       input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
       return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)

   # Sentences we want sentence embeddings for
   # sentences = ['This is an example sentence', 'Each sentence is converted']
   sentences = [Test]
   # Load model from HuggingFace Hub
   tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
   model = AutoModel.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
   # Tokenize sentences
   encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
   # Compute token embeddings
   with torch.no_grad():
       model_output = model(**encoded_input)
   # Perform pooling
   sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
   # Normalize embeddings
   sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)
   #print(sentence_embeddings)
   return str(sentence_embeddings[0].tolist())
}
}

Estoy usando la imagen de docker de community

0
Kurro Lopez  abr 16 to Kurro Lopez

Nota: También he probado creando una clase con un código de python simple y da el mismo error. ¿Puede ser que esta imagen de docker tenga problemas con Python?

Class St.Vectorsearch.Vector Extends %RegisteredObject
{
ClassMethod Embedding(Test) [ Language = python ]
{
   return (Test)
}
}
Compilation started on 04/16/2026 06:12:25 with qualifiers 'cuk'
Compiling class St.Vectorsearch.Vector
ERROR #7802: Worker job/s '1199:40' unexpectedly shut down in group '#Default:(2988722416963):0'.
ERROR #7812: Work queue unexpectedly removed, shutting down.
ERROR #5002: ObjectScript error: <THROW>WaitForComplete+215^%SYS.WorkQueueMgr *%Exception.StatusException ERROR #7802: Worker job/s '1199:40' unexpectedly shut down in group '#Default:(2988722416963):0'.
ERROR #7812: Work queue unexpectedly removed, shutting down.
Detected 3 errors during compilation in 1.014s.
0

En la imagen de la traza, pone que falla en la línea 16 del método: "Stack When Logged: $$^MessageHeaderHandler+16^St.Vectorsearch.Demo.BP.Feeling.1 +1".

Prueba a abrir la clase: "St.Vectorsearch.Demo.BP.Feeling.1" y buscar esa línea.

No sé si te serviría. Quizás te de una pista. Imagino que apuntará a una clase interna, como por ejemplo (si busco en un BP cualquiera "MessageHeaderHandler+16", sale lo siguiente):

0
Kurro Lopez  abr 13 to Yone Moreno Jiménez

Este mensaje de error me lo dá cuando reinicio el componente, porque se queda totalmente bloqueado. Esa linea es la que apunta a la llamada al método 

set vector = ##class(St.Vectorsearch.Vector).Embedding(request.StringValue)
0

@Kurro Lopez quizás podrías probar a separar las líneas del "Editor de Valores" del BP, del margen izquierdo; es decir, poner un tabulador entre las 5 líneas del ObjectScript escrito en el BP, porque, en mi caso, he visto, que si el código lo escribo pegado al margen izquierdo, al compilar el Proceso, el BP, podría dar errores. Ahora bien, no sé si tiene relación con lo que nos has escrito en el hilo. En mi caso, he trabajado con IRIS 2020 e IRIS 2023 (y versiones anteriores), no sé si en la 2025, esto ya está solucionado.

Lo digo, porque por Terminal si te funciona, y llamando al Proceso no.

0