Repository navigation
Conversation
…ntes do provider Sem a coluna de status, a coluna da entrada com algum valor e com o nome de um campo do modelo, fora de reprocess_columns, levanta ValueError com resume=True e resume=False. status_column igual à coluna de texto, a um campo, a outra coluna de controle ou a uma coluna com valores que não são de status também levanta. O aviso de reexecução sobre a própria saída sai, porque o caso agora levanta.
… mensagem indica reprocess_columns A mensagem sugere reprocess_columns com as colunas que seriam sobrescritas, somadas às já pedidas. A docstring de _resume_from_checkpoint deixa de dizer que a execução sem interrupção grava a resposta por cima da coluna da entrada.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Dois casos apagavam ou trocavam dados do usuário sem aviso. Medido na
mainem b48bd03, com a reprodução da issue e o provider simulado:resume=True, o padrão, e só parte das colunas do modelo presente, a resposta do LLM sobrescrevia a coluna:categoria = ["rotulo humano 1", "rotulo humano 2"]saía["llm-a", "llm-b"], sem aviso, e o DataFrame de entrada mudava junto, porque a execução o altera in-place. Com todas as colunas do modelo presentes, a execução avisava e refazia todas as chamadas; comresume=False, avisava e devolvia a entrada.status_columncom o nome de outra coluna.status_column="categoria"tirava a coluna da saída, e a resposta paga se perdia."texto"e"id"terminavam sem chamar o LLM, com a coluna de texto ou aidfora da saída e os camposNone."_error_details"e"_input_tokens"gravavam o status na mesma célula do detalhe de erro ou dos tokens de entrada.O que muda
ValueErrorantes de qualquer chamada, comresume=Truee comresume=False. A mensagem diz quais colunas seriam sobrescritas e oferece os caminhos: renomeá-las ou removê-las, ou passá-las emreprocess_columnspara sobrescrevê-las de propósito, com a lista pronta, que soma as colunas já pedidas. Para a saída do dataframeit, que vem sem a coluna de status quando nenhuma linha falha, ela diz como devolver a coluna (df['_dataframeit_status'] = 'processed', ou o nome passado emstatus_column). Com a coluna de status presente, a execução retoma como antes.status_columnigual à coluna de texto, a um campo do modelo ou ao nome de outra coluna de controle do dataframeit (_error_details, tokens,_search_credits, trace) levantaValueError. Uma coluna existente com o nome destatus_columnsó é aceita quando traz apenas'processed','error'ou vazio, que é o que a execução grava nela; com outro valor, a execução levanta, e a mensagem mostra o primeiro valor e a linha.A checagem das colunas do modelo fica depois da releitura do checkpoint e do retorno da entrada vazia, e antes de tocar no provider: o checkpoint desta execução traz a coluna de status, e a entrada vazia não tem linha a sobrescrever. A checagem de
status_columnfica com a validação das opções.Decisões
reprocess_columnsnão conta, porque sobrescrevê-la é o pedido. As demais colunas do modelo presentes contam: sem a coluna de status, toda linha é nova e recebe a resposta em todos os campos.track_tokens=False, sem busca, sem trace), porque uma retomada com a opção ligada gravaria por cima do status, etrack_tokensé ligado por padrão. As famílias vêm de_column_rank, emutils.py, que já ordena essas colunas na saída._dataframeit_status.Testes alterados
Cinco testes afirmavam a sobrescrita, ou o aviso que a acompanhava, num caso que agora levanta
ValueError:tests/test_entrada_e_saida.py::test_reexecucao_sobre_a_propria_saida_avisaafirmava que reexecutar sobre a própria saída, sem a coluna de status, emitia o aviso de que todas as linhas seriam refeitas. Comotest_reexecucao_sobre_a_propria_saida_levanta_e_diz_como_retomar, afirma oValueErrorsem chamada ao LLM, com a mensagem que diz como devolver a coluna de status, com o nome padrão e comstatus_column.tests/test_entrada_e_saida.py::test_reexecucao_avisa_mesmo_com_linha_toda_nulaafirmava o mesmo aviso quando uma linha da saída é toda nula. Comotest_reexecucao_levanta_mesmo_com_linha_toda_nula, afirma oValueErrorno mesmo cenário.tests/test_reprocess_columns.py::test_reprocess_columns_with_existing_columns_no_warningpassavacampo1ecampo2com valor, sem a coluna de status e comreprocess_columns=["campo1"], e afirmava só a falta do aviso de conflito; a execução sobrescrevia tambémcampo2, fora da lista. Agora a entrada traz a coluna de status, que é como se reprocessa uma saída, e o teste afirma, além da falta do aviso, quecampo1recebe a resposta ecampo2fica como estava.tests/test_retomada_assinada.py::test_retomada_da_o_mesmo_resultado_que_a_execucao_sem_interrupcaorodava comreprocess_columns=Nonee com["campo1", "campo2"]e afirmava, nos dois, que o"humano"da entrada perdia para a resposta paga. O casoNonesaiu: nele a primeira execução agora levanta, e a recusa comcheckpoint_path, sem gravar o checkpoint, é coberta portest_coluna_com_nome_de_campo_e_checkpoint_levanta_sem_gravar. O teste segue com["campo1", "campo2"], em que a sobrescrita é pedida.tests/test_retomada_assinada.py::test_linha_com_erro_no_checkpoint_tambem_vem_delerodava a primeira execução sobrecampo1 = ["m1", "m2", "m3"]sem a coluna de status e afirmava que a linha com erro volta do checkpoint com"m2", e não com a correção à mão. A primeira execução agora passareprocess_columns=["campo1"], que pede a sobrescrita, e a afirmação é a mesma.tests/test_entrada_e_saida.py::test_entrada_polars_com_colunas_existentes_volta_igualganha a coluna de status, que é o caso em queresume=Falseainda avisa e devolve a entrada polars igual.Itens da issue
status_columncom o nome de uma coluna existente, de campo, de texto ou do usuário: corrigido, e as colunas de controle entram na mesma recusa.Closes #197