Métodos do objeto de request CoreML genérico
coreml_model_request_object é o objeto de inferência retornado por coreml.new_model_request(...) / coreml.session(...).
Ele envia ao modelo as features de entrada preparadas e retorna os resultados organizados por nome de saída.
A responsabilidade deste objeto é bem delimitada:
- enviar inferências
- ler resultados assíncronos
- consultar as assinaturas de entrada e saída do modelo
- consultar a configuração de execução do request atual
Ele não faz tokenização de texto, pré-processamento de imagens nem pós-processamento da lógica de negócio; essas tarefas devem ser organizadas na camada Lua.
Estes métodos só estão disponíveis em versões posteriores a 20260319
Métodos de inferência
:predict(inputs[, opts])
resultado, mensagem_de_erro = objeto_request_genérico:predict(mapa_de_entradas)
ou
foi_enviado, mensagem_de_erro = objeto_request_genérico:predict(mapa_de_entradas, {
async = assíncrono,
multi_array_output = "table" ou "MLMultiArray",
uses_cpu_only = usar_apenas_CPU_nesta_execução,
})
Executa uma inferência de modelo para uma única amostra.
inputsdeve ser uma tabela organizada por nome de entrada.- No modo síncrono, retorna diretamente a tabela de resultados.
- No modo assíncrono, retorna apenas
true; use:is_done()e:results()depois para obter o resultado. multi_array_outputcontrola se umMLMultiArrayna saída do modelo será mantido como tensor nativo ou convertido em tabela Lua.uses_cpu_onlyafeta somente esta inferência e não altera a configuração padrão do objeto.
:run(inputs[, opts])
run() é um alias de predict() e tem exatamente o mesmo comportamento.
:predict_batch(batch_inputs[, opts])
resultados_do_batch, mensagem_de_erro = objeto_request_genérico:predict_batch({
{ input_ids = ids1 },
{ input_ids = ids2 },
}, {
async = false,
multi_array_output = "MLMultiArray",
})
Executa inferência em batch. Requer iOS 12+.
batch_inputsdeve ser um array, em que cada item é uma “tabela de entrada organizada por nome de entrada”.- No modo síncrono, retorna um array de resultados do batch; cada elemento continua organizado conforme as regras de saída de uma única amostra.
- No modo assíncrono, retorna
true; recupere o resultado depois por meio de:results(). - Os campos de
optssão os mesmos depredict().
:run_batch(batch_inputs[, opts])
run_batch() é um alias de predict_batch() e tem exatamente o mesmo comportamento.
:results([opts])
resultado, mensagem_de_erro = objeto_request_genérico:results()
ou
resultado, mensagem_de_erro = objeto_request_genérico:results({
multi_array_output = "table" ou "MLMultiArray",
})
Lê o resultado da inferência assíncrona mais recente.
- Se a chamada assíncrona mais recente veio de
predict(), retorna uma tabela de resultado de uma única amostra. - Se veio de
predict_batch(), retorna um array de resultados do batch. - Por padrão,
multi_array_outputreutiliza a configuração da última chamada de inferência. - Se a tarefa assíncrona ainda não terminou, retorna
nil, "not yet". - Se não houver um resultado bem-sucedido disponível para leitura, retorna
nil, "unknown".
:is_done()
está_concluído = objeto_request_genérico:is_done()
Verifica se a última inferência assíncrona foi concluída. Só tem significado depois de predict(..., { async = true }) ou predict_batch(..., { async = true }).
Configuração de execução e metadados
:metadata()
metadados = objeto_request_genérico:metadata()
Retorna os metadados incluídos no modelo. É útil para depuração, wrappers genéricos ou exibição de informações do modelo.
:uses_cpu_only()
usa_apenas_CPU_por_padrão = objeto_request_genérico:uses_cpu_only()
Retorna a configuração padrão CPUOnly armazenada quando este request foi criado.
:compute_units()
configuração_das_unidades_de_cálculo = objeto_request_genérico:compute_units()
Retorna a string compute_units registrada atualmente para este request.
- No iOS 12+, retorna a string em minúsculas registrada durante a criação.
- Os valores retornados comuns incluem
"all","cpu_only","cpu","cpu_and_gpu","gpu","cpu_and_neural_engine","ane"e"neural_engine". - Se
uses_cpu_only = truetiver sido passado na criação, retorna"cpu_only". - No iOS 11, retorna
nil.
Métodos de assinatura de entrada e saída
:input_count() / :output_count()
Retornam a quantidade de features de entrada / saída.
:input_features() / :output_features()
Retornam uma tabela de descrições de features indexada por nome.
Atualmente, os campos retornados são relativamente enxutos:
typeoptional- quando o tipo da feature é
multi_array, também incluishapeedata_type
:input_info(name_or_index) / :output_info(name_or_index)
Lê as informações de uma única feature pelo nome da entrada / saída ou por seu índice começando em 1.
- Os campos retornados são basicamente os mesmos de
input_features()/output_features(). - Também inclui
name. - O acesso por índice usa a mesma regra de ordenação de
input_names()/output_names().
:input_names() / :output_names()
Retornam listas estáveis e ordenadas de nomes de entrada / saída.
- Os nomes são ordenados em ordem lexicográfica.
- A ordem de
output_names()é a mesma ordem dos índices numéricos nos resultados retornados pela inferência síncrona.
:class_labels()
Retorna os rótulos de classe declarados pelo modelo. Requer iOS 14+.
Ciclo de vida e verificação de tipo
:close()
Destrói o estado subjacente do request. Depois de fechá-lo, não continue chamando outros métodos.
:is_model_request() / :is_session()
Interfaces de verificação de tipo no nível do objeto; as duas são aliases equivalentes.
Observações
- O resultado de
predict()/run()é sempre uma tabela. - O resultado aceita tanto índice numérico quanto índice pelo nome da saída.
predict_batch()/run_batch()retorna um array de resultados do batch; cada item continua permitindo acesso duplo por índice numérico e nome de saída.- Para um request genérico novo,
MLMultiArrayé mantido por padrão como objeto de tensor nativo, o que é mais adequado para continuar o pós-processamento. - Se quiser apenas visualizar os dados ou manter compatibilidade com scripts antigos, passe explicitamente
multi_array_output = "table".
Exemplos de acesso aos resultados:
out[1]
out.text_features
batch_out[1].text_features
Exemplo
local req = assert(coreml.new_model_request(XXT_HOME_PATH.."/models/demo.mlmodelc"))
local out = assert(req:predict({
input_ids = ids,
}, {
multi_array_output = "MLMultiArray",
}))
print(out[1])
print(out.text_features)
print(req:output_names())