langextract icon indicating copy to clipboard operation
langextract copied to clipboard

This code causes langextract to hang

Open bonadio opened this issue 5 months ago • 3 comments

The following code freezes langextract.

Debuging the request in the terminal I see a valid reques/response from the LLM, but langextract freezes with message: LangExtract: model=gemini-2.5-flash-lite, current=5,022 chars, processed=5,022 chars: [00:17] Tested on: v1.0.5 python cpu goes 99%

code:

import langextract as lx
import textwrap
import os
import json
import dotenv
dotenv.load_dotenv()
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")

def extract_p3(text: str):
    prompt = textwrap.dedent("""\
Identify all lawyer OABs ids, mentioned in the text. Extract only the OAB number. Look for OAB identifications such as "OAB <id>", "Advogado", or any other indicators that suggest the person is a lawyer. Be thorough in your search, as there may be multiple lawyers mentioned.
""")
    examples = [
        lx.data.ExampleData(
            text=(
                "Publicacao Processo: 9939306-16.2024.4.05.8000 Orgao: 9ª Vara Federal AL Data de disponibilizacao: 20/07/2025 "
                "Tipo de comunicacao: Intimacao Meio: Diario de Justica Eletronico Nacional Inteiro teor: "
                "https://projudi.tjpr.jus.br/projudi/processo/validacaoDocumentos.do?_tj=8a6c53f8698c7ff7826b4c776d71311a670526233496c6741377fbc0805a7c188e8e8cdaec3b2f1881307a935 "
                "Parte: BANCO PARTE (BRASIL) S.A. Advogado: FRANCISCO JOSE BARROS - OAB SP-223791 Advogado: PAULO JOSE DE SOUSA - OAB SP-333597"
                " Conteudo: Intimacao referente ao movimento (seq. 651) LEVANTADA A"
                " SUSPENSAO OU SOBRESTAMENTO DOS AUTOS (20/07/2025). Acesse o sistema Projudi do Tribunal de Justica do Parana para mais detalhes."
                " |comunicacao_id: 338888888|" 
            ),
            extractions=[
                lx.data.Extraction(
                    extraction_class="OAB_ID_NUMBER",
                    extraction_text="223791",
                ),
                lx.data.Extraction(
                    extraction_class="OAB_ID_NUMBER",
                    extraction_text="333597",
                )
            ]
        ),
    ]
    # Run the extraction
    result = lx.extract(
        text_or_documents=text,
        prompt_description=prompt,
        examples=examples,
        model_id="gemini-2.5-flash-lite",
        temperature=0,
        max_char_buffer=1000000,
        api_key=GOOGLE_API_KEY,
    )
    print(result)

if __name__ == "__main__":
    text = """
Publicacao Processo: 0000000-00.0000.0.00.0000 Orgao: 13ª Camara de Direito Publico Data de disponibilizacao: 01/01/2000 Tipo de comunicacao: Intimacao Meio: Diario de Justica Eletronico Nacional Inteiro teor: Parte: NOME_FICTICIO Parte: NOME_FICTICIO Parte: NOME_FICTICIO Parte: NOME_FICTICIO Advogado: NOME_FICTICIO - OAB 000000 Advogado: NOME_FICTICIO - OAB 000000 Advogado: NOME_FICTICIO - OAB 000000 Advogado: NOME_FICTICIO - OAB 000000 Conteudo: DESPACHO Nº 0000000-00.0000.0.00.0000 - Processo Digital. Peticoes para juntada devem ser apresentadas exclusivamente por meio eletronico, nos termos do artigo 7º da Res. 551/2011 - Agravo de Instrumento - NOME_FICTICIO - Agravante: NOME_FICTICIO - Agravado: NOME_FICTICIO - Agravado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Interessado: NOME_FICTICIO - Vistos. 1 - Trata-se de agravo de instrumento interposto por NOME_FICTICIO e outro contra a r. decisao de fls. 5271/5274, integrada as fls. 5417/5418, do processo originario, que, em cumprimento de sentenca de acao de desapropriacao direta movida pelo NOME_FICTICIO em face do NOME_FICTICIO, deliberou por ...nao assiste razao ao NOME_FICTICIO ao requerer o levantamento de sua cota parte. Foi evidenciado durante a instrucao que a area expropriada limitou-se ao patrimonio comum do NOME_FICTICIO. Ademais, a sentenca foi expressa ao determinar que o valor deve ser levantado pelo NOME_FICTICIO. Eventual decisao da Assembleia de Condominos e assunto externo que nao tem o condao de suspender o presente feito, determinando que o NOME_FICTICIO deve levantar o saldo de R$0,00 (...), para setembro de 2014, devidamente atualizado, alem disso, determinou que ...a parte expropriada para que apresente calculos das custas e honorarios processuais, considerando o valor dos depositos complementares. Alega, em resumo, que a premissa adotada tanto pelo Agravado quanto pelo MM Juizo a quo se encontra equivocada e evidentemente contraditoria ao proprio dispositivo da r. sentenca prolatada, o que ensejou em evidente equivoco quanto a interpretacao da r. sentenca ja transitada em julgado. Isso porque, quando do julgamento dos Embargos de Declaracao opostos pelo Agravante em face da r. sentenca de fls. 4.963/4.971, o MM. Juizo a quo entendeu que, de fato, havia evidente contradicao/erro material na r. sentenca, razao pela qual o aludido recurso foi acolhido para substituir o trecho de que: A honoraria nao incide sobre a complementacao da oferta, por: a base de calculo da verba sucumbencial levara em consideracao o valor complementar da oferta, porque, tivesse ela sido feita pelo valor correto, e ate seria possivel ao expropriado, satisfeito, nao constituir advogado para recusar a oferta insuficiente. (cf. fls. 4.976/4.977). (...) Portanto, Exas., considerando o entendimento apresentado pelo proprio MM. Juizo a quo no sentido de que tivesse ela sido feita pelo valor correto, e ate seria possivel ao expropriado, satisfeito, nao constituir advogado para recusar a oferta insuficiente, e evidente que a interpretacao correta a ser dada ao trecho a base de calculo da verba sucumbencial levara em consideracao o valor complementar da oferta, e justamente incidir honorarios advocaticios tambem sobre a complementacao da oferta. (...) para a elaboracao do calculo relativo ao valor dos honorarios bastava subtrair do valor da indenizacao apenas o deposito inicial, conforme planilha abaixo, pois como decidido por meio da r. sentenca transitada em julgado, o valor complementar da oferta tambem deve ser considerado como base de calculo da verba honoraria, pois realizado apos a apresentacao das contestacoes. (fls. 13/16) - sic) Postula seja conhecido e provido o presente Agravo de Instrumento para reformar a r. decisao agravada no sentido de que seja determinado que a verba honoraria incida sobre o valor da complementacao da oferta inicial, visto que como fundamentado na r. sentenca transitada em julgado, tivesse ela (oferta) sido feita pelo valor correto, e ate seria possivel ao expropriado, satisfeito, nao constituir advogado para recusar a oferta insuficiente. (fl. 17). Ausente pedido de atribuicao de efeito suspensivo/ativo, processe-se o recurso. 2- Providencie-se a intimacao da parte agravada e demais interessados para, havendo interesse, apresentar contrariedade (art. 1.019, II, CPC). Apos, tornem conclusos. Int. NOME_FICTICIO, 01/01/2000. NOME_FICTICIO Relator - Magistrado(a) NOME_FICTICIO - Advs: NOME_FICTICIO (OAB: 000000/SP) - NOME_FICTICIO (OAB: 000000/SP) - NOME_FICTICIO (OAB: 000000/SP) - NOME_FICTICIO (OAB: 000000/SP) - NOME_FICTICIO (OAB: 000000/SP) - NOME_FICTICIO (OAB: 000000/MG) - 1º andar |comunicacao_id: 000000000|
"""
    extract_p3(text)



bonadio avatar Aug 10 '25 18:08 bonadio

comment out the max_char_buffer=1000000 and it'll work. The default is 1K which will chunk your text into 6 parts (your input has a bit over 5k chars) and will take about 3secondes. going from default 1k to 10k for max_char_buffer increases to 50s so some exponential factor here and you pay the penalty even if you don't use the buffer.

I can't explain the why (I'm just a user) but hopefully this will help you find a workaround.

owennewo avatar Aug 11 '25 12:08 owennewo

Yes, commenting max_char_buffer=1000000 works (workaround), but I have another extraction that works just fine with max_char_buffer=1000000 with the same input text with a different prompt and examples and the response is very fast. Seems a bug evaluating the response from the LLM.

bonadio avatar Aug 11 '25 15:08 bonadio

I have been facing the same issue specifically when using gemini-2.5-flash-lite. The same code runs well with gemini-2.0-flash-lite. I can't seem to figure out what causes it to hang.

I would appreciate a comment from the authors if this is a known issue.

dev26git avatar Aug 19 '25 15:08 dev26git