Eu uso o text-embedding-3-large para o modelo de embeddings de IA e algo está errado com ele. Quero dizer, tive que recarregar minha conta OpenAI duas vezes desde (30 de novembro), o que é loucura porque deveria ser suficiente por meses… Algo mudou em tópicos relacionados? Talvez ele sempre preencha tópicos que já foram feitos ou eu não sei.
Eu verifiquei o meu. Explodiu em 27/11 e antes disso eram menos de 100 mil tokens por dia, mas depois aumentou para 7 milhões e está aumentando a cada dia, e ontem chegou perto de 20 milhões.
Editar: Em outubro, o custo dos embeddings era de 46 centavos. Agora, em dezembro, em quase quatro dias: quase 6 dólares.
24M por dia é todo o seu fórum, isso parece apresentar falhas. A menos que você receba atualizações em todos esses tópicos todos os dias, isso é certamente uma falha.
Uma coisa que pode estar relacionada é que costumávamos pular a chamada da API de embeddings quando o resumo do tópico não mudava, mas regredimos isso em gen_bulk_reprensentations@Roman.
@Don você sabe quantas requisições de embeddings você está fazendo por dia?
Peço desculpas, isso foi um bug no novo código que adicionamos para preencher embeddings mais rapidamente. Deve ser corrigido por:\n\nhttps://github.com/discourse/discourse-ai/pull/1001\n\nPor favor, me avise se as coisas voltarem ao normal.
Dado o limite de 250 por hora, temos um limite rígido de 6 mil por dia. Esses números ainda estão dentro do limite.
No entanto, se eles forem acionados apenas pela nossa “atualização de uma amostra aleatória” de tópicos, isso deve ser limitado a 10% disso, o que, na pior das hipóteses, seriam 600 solicitações.
@Roman esse limite não está sendo aplicado de alguma forma? Ou o problema está em outro lugar?
Sim, acho que o bug que corrigi revelou outro que a verificação de resumo estava ocultando.
Acho que o bug está aqui:
Eu o alterei de find_each para find_in_batches na semana passada (o primeiro usa lotes internamente), e como ambos dependem de limit para especificar o tamanho do lote, o limit original de limit - rebaked é ignorado. Devemos usar pluck + each_slice em vez disso.
À primeira vista, não parece relacionado. Parece que falhou ao gerar o embedding e está tentando inserir NULL. Pode ser que a OpenAI esteja retornando um erro? Talvez algo relacionado a cotas?
Você pode, por favor, executar isso de um console?
DiscourseAi::Embeddings::VectorRepresentations::Base
.find_representation(SiteSetting.ai_embeddings_model)
.new(DiscourseAi::Embeddings::Strategies::Truncation.new)
.vector_from("this is a test")
.present?
Isso deve registrar o erro em seus logs se ele levantar um Net::HTTPBadResponse.
Isso significa que ele pode gerar embeddings então. Esses erros persistem? Você deveria ver esses erros a cada cinco minutos, se for o caso.
Executei alguns testes na minha instância local contra nosso serviço de embeddings auto-hospedado e confirmei que o backfilling funciona nas seguintes condições:
Não há embeddings.
O digest está desatualizado e o updated_at dos embeddings é anterior a 6 horas.
O digest não está desatualizado e o updated_at dos embeddings é anterior a 6 horas (ele não atualiza neste caso).
Não sei nada sobre limites, mas a quantidade de solicitações de API, etc. voltou ao normal após o reparo anterior. Então, obrigado pessoal pela rápida reação.