Layer-api-clonacion-tareas-service

De Plataforma COA Crowd
Saltar a: navegación, buscar

El servicio de clonación es un microservicio enfocado en determinar las tareas a las cuales es necesario generar una copia de esta basándose en la calificación score que tiene el agente al cual se le asigna la tarea original, esto va determinado a garantizar la calidad de revisión de ejecución de tareas.


El enfoque de decisión de clonación se basa por porcentajes y rangos de score, donde un score bajo tiene mas probabilidades de clonación y un score alto tiene menor probabilidad de clonación, según el score del agente en cuestión su porcentaje de clonación ser un propocional según su ubicación de score entre el score menor y mayor de clonación y sus respectivos porcentajes de clonación.

Dependencias

layer-api-core-service

Este servicio es utilizado para la consulta de los datos (task_request, task_segment) de tarea a clonar así como consulta de existencia del nuevo id de segmento con el fin de determinar que la tarea solicitada no haya sido clonada con anterioridad y sus configuraciones en task_request y task_segment permitan que la tarea pueda ser clonada.

Endpoint Tipo Petición Petición Respuesta
~/api/get_task_segment GET ~?task_segment_id={id tarea recibida}

{
 clonable: {},
 qa_identifier: {},
 task_segment_id: {},

 task_request_uuid: {},
 ....
}

~/api/get_task_request GET ~?uuid={task_request_uuid}

{
    created_at:
    updated_at:
    task_identifier:
    max_execution_time:
    stage_list:
}

~/api/get_task_clonable GET ~?segmentId={id_nuevo_segmento}

{

    uuid: {id_nuevo_segmento},

    clonable: {true/false, dependiendo si existe la tarea o no}

}

layer-api-event-handler

Este servicio es consultado para realizar la extracción de la información en redis correspondiente al tipo de role que debe cumplir un usuario para poderle asignar la tarea o en este caso el clon de la tarea que se esta generando.

Endpoint Tipo Peticion Peticion Respuesta
~/state/taskInfo GET ~?taskId={id tarea recibida}

{

   taskIdentifier: {},

   role: {role que deben cumplir los agentes para poder atender el clon}

}

layer-api-score-service

Este servicio es utilizado para consultar el score del agente correspondiente para el tipo de tarea que debe ser clonada así como el score minimo usado para la búsqueda de agentes disponibles que puedan realizar la ejecución de la tarea clonada. El score minimo regularmente esta situado en score - 10%.

Endpoint Tipo Petición Petición Respuesta
~/api/getMinScore
GET ~/worker_uuid={workerid}&task_identifier={microTaskType}&process=clonacion

{

    score: {actual score del worker para la microTask},
    minScore: {el score minimo que debe cumplir otro agente para que se le asigne el clon}
}

layer-api-web-service

Este servicio es utilizado para la consulta de parametros del porcentaje de muestra para operadores, así como la consulta de agentes disponibles que cumplan las condiciones (score mínimo, role) para poder atender la tarea clonada y por ultimo la actualización del segmento de tarea para poder identificar que la tarea solicitada ha sido clonada.

Endpoints

Endpoint Tipo Petición Petición Respuesta
~/api/get_workers_availables
GET

~?worker_uuid={workerid}&roleOrTask={task role or type}&minScore={minScore}µtask={microTaskType}

{
  workers_list: [
    {workerid},
    {workerid},
    ......
  ]
}
~/api/get_top_cloned_microtask_worker
GET
~?worker_uuid={workerid}µtask_type={microTaskType}
  microtask_cloned: {numero_clonadas}
}
~/api/get_parameter
GET ~?clave=porcentajeMuestraOperador&tarea_destino={microTaskType} {
    "scoreInf": 3,
    "scoreSup": 5,
    "porcentajes": {
        "porcentajeInf": 100,
        "porcentajeSup": 20
    }
}
/api/tasks_updt_clonada
POST

{

  uuid: {id_task_segment},

  clonada: true

}

Parametros

Para el correcto funcionamiento del servicio es necesario dentro de la base de datos layer-api-web-service en la tabla paramentros se encuentre registrado el siguiente parametro:

task_identifier parameter_key parameter_value
{tarea para la cual aplica los valores del parametro} porcentajeMuestraOperador {
    "scoreInf": 3,
    "scoreSup": 5,
    "porcentajes": {
        "porcentajeInf": 100,
        "porcentajeSup": 20
    }
}

Nota: El parametro debera ser registrado N cantidad de veces segun se requiera para cada task_identifier distinto.

layer-api-task-publisher-service

Este servicio es se encarga de generar la nueva con el nuevo id de segmento tomando como base los datos del id del segmento original, además de esto, se encarga de realizar la publicación en redis para que esta tarea sea atendida.

Endpoint Tipo Petición Peticion
~/api/publish_cloned_task POST ~?original_id={id_segmento_original}&clon_id={new_id_segmento}

Núcleo de decisión

La parte fundamental del servicio es el proceso del cálculo de porcentaje de clonación tomando como base el score del worker para una tarea, el tope superior de score junto con su porcentaje correspondiente de clonación y el tope inferior de score junto con su porcentaje correspondiente de clonación.

En base al siguiente ejemplo grafico, contemplando 100%(porcentajeInf) de clonación para score de 3 (scoreInf) y 20%(porcentajeInf) de clonación para score de 5, a un score de 3.5 le corresponderia 80% de clonación y 50% para un score de 4.25.

Img1638430579772.png


En el siguiente recuadro se encuentra la descripción de como es que se calcula el porcentaje así como un ejemplo de uso.

Definición Ejemplo


scoreSup = "tope superior de score";
scoreInf = "tope inferior de score";


porcentajeSup = "% de clonacion para el score superior";
porcentajeInf = "% de clonacion para el score inferior";
Nota: Mayor score es igual a menor % de clonacion


score = "score de worker para el tipo de tarea";
topClonedMicroTask = "en base al tipo de tarea se obtiene de este cuantas se han clonado para el agente"


scoreRango = ((scoreSup - scoreInf) * 100);
porcentajeRango = ((porcentajeInf - porcentajeSup) / scoreRango);
porcentajeMuestra = ((((scoreSup - (minScore > scoreSup ? scoreSup : minScore)) * 100) * porcentajeRango) + porcentajeSup);
tareasAMuestrear = porcentajeMuestra / 10.0;
generadoRandom = generaRandom(1,100);

if(topClonedMicroTask < tareasAmuestrear){
 "tarea se clona por porcentaje"
}else if (generadoRandom < tareasAmuestrear){
 "tarea se clona por random"
}else{
 "la tarea no se clona"
}

{
    scoreInf: 3,
    scoreSup: 5,
    porcentajes: {
        porcentajeInf: 100,
        porcentajeSup: 20
    }
}

score = 3.5;
topClonedMicroTask = 9;


scoreRango = ((5 - 3) * 100);       //200
porcentajeRango = ((100 - 20) / 200);      //0.4
porcentajeMuestra = ((((5 - (3.5 > 5 ? 5 : 3.5)) * 100) * 0.4) + 20);     // ((((5-3.5)*100)*0.4)+20) = 80
tareasAMuestrear = 80 / 10.0;     //8
generadoRandom = generaRandom(1,100);     //70

if(topClonedMicroTask < tareasAMuestrear)         //9 < 8
 "tarea se clona por porcentaje"
}else if (generadoRandom < porcentajeMuestra){    // 70 < 80
 "tarea se clona por random"
}else{
 "la tarea no se clona"
}