Problemi con gli embeddings (argomenti correlati diventano troppo costosi)

Ciao :wave:

Utilizzo text-embedding-3-large per il modello di embedding AI e qualcosa non va. Voglio dire, devo ricaricare il mio account OpenAI due volte da (30 novembre), il che è pazzesco perché dovrebbe bastare per mesi… È cambiato qualcosa in argomenti correlati? Forse riempie sempre argomenti già elaborati o non lo so. :thinking:

Genera circa 24 milioni di token di input al giorno

Prima (30 novembre) era ~ 60 - 220k

2 Mi Piace

Per favore, condividi i valori di tutte le impostazioni degli embedding:

ai_embeddings_enabled
ai_embeddings_discourse_service_api_endpoint
ai_embeddings_discourse_service_api_endpoint_srv
ai_embeddings_discourse_service_api_key
ai_embeddings_model
ai_embeddings_per_post_enabled
ai_embeddings_generate_for_pms
ai_embeddings_semantic_related_topics_enabled
ai_embeddings_semantic_related_topics
ai_embeddings_semantic_related_include_closed_topics
ai_embeddings_backfill_batch_size
ai_embeddings_semantic_search_enabled
ai_embeddings_semantic_search_hyde_model
ai_embeddings_semantic_search_hyde_model_allowed_seeded_models
ai_embeddings_semantic_quick_search_enabled
1 Mi Piace
ai_embeddings_enabled: true
ai_embeddings_discourse_service_api_endpoint: ""
ai_embeddings_discourse_service_api_endpoint_srv: ""
ai_embeddings_discourse_service_api_key: ""
ai_embeddings_model: text-embedding-3-large
ai_embeddings_per_post_enabled: false
ai_embeddings_generate_for_pms: false
ai_embeddings_semantic_related_topics_enabled: true
ai_embeddings_semantic_related_topics: 5
ai_embeddings_semantic_related_include_closed_topics: true
ai_embeddings_backfill_batch_size: 250
ai_embeddings_semantic_search_enabled: true
ai_embeddings_semantic_search_hyde_model: Gemini 1.5 Flash
ai_embeddings_semantic_search_hyde_model_allowed_seeded_models: ""
ai_embeddings_semantic_quick_search_enabled: false
1 Mi Piace

Quanti embedding hai?

SELECT COUNT(*) FROM ai_topic_embeddings WHERE model_id = 7;

Quanti argomenti hai?

SELECT COUNT(*) FROM topics WHERE deleted_at IS NULL AND archetype = 'regular';

1 Mi Piace

Quante embedding hai?
5964

Quanti argomenti hai?
5563

1 Mi Piace

Ho controllato il mio. È esploso il 27.11. e prima era sotto i 100k token al giorno, ma poi è aumentato a 7 milioni e sta aumentando ogni giorno e ieri era vicino ai 20 milioni.

Modifica: Ottobre, il costo degli embedding era di 46 centesimi. Ora, dicembre quasi quattro giorni: quasi 6 dollari.

Sì. Ho disabilitato gli embedding.

2 Mi Piace

24M al giorno è il tuo intero forum, sembra che ci siano dei bug. A meno che tu non riceva aggiornamenti in tutti quegli argomenti ogni giorno, si tratta sicuramente di un bug.

1 Mi Piace

Una cosa che potrebbe essere correlata è che in passato saltavamo la chiamata all’API embeddings quando il riassunto dell’argomento non cambiava, ma abbiamo regressionato questo in gen_bulk_reprensentations @Roman.

@Don sai quante richieste di embeddings stai facendo al giorno?

2 Mi Piace

Non sono Don, ma le mie richieste API sono aumentate da 80-100 a 3825.

2 Mi Piace

Di solito ~150 - 200 richieste / giorno

ma alla fine di novembre è aumentato.

1 Mi Piace

Mi dispiace molto, questo era un bug nel nuovo codice che abbiamo aggiunto per riempire più velocemente gli embedding. Dovrebbe essere risolto da:

Per favore, fammi sapere se le cose non tornano alla normalità.

6 Mi Piace

Dati i 250 all’ora, abbiamo un limite massimo di 6k al giorno. Questi numeri sono ancora all’interno del limite.

Tuttavia, se vengono attivati solo dal nostro “aggiornamento di un campione casuale” di argomenti, dovrebbe essere limitato al 10% di questo, il che, nel peggiore dei casi, sarebbero 600 richieste.

@Roman questo limite non viene applicato in qualche modo? O il problema è altrove?

1 Mi Piace

Sì, penso che il bug che ho corretto ne abbia rivelato un altro che il controllo del digest stava nascondendo.

Penso che il bug sia qui:

L’ho cambiato da find_each a find_in_batches la settimana scorsa (il primo usa batch internamente) e poiché entrambi si basano su limit per specificare la dimensione del batch, il limit originale di limit - rebaked viene ignorato. Dovremmo usare pluck + each_slice invece.

4 Mi Piace

Grazie per la correzione :abbracci:

Ho aggiornato il mio sito, ma sembra che ci sia un problema in /logs. Non sono sicuro se sia correlato a questo…

Messaggio

Job exception: ERROR: invalid input syntax for type halfvec: "[NULL]"
LINE 2: ...1, 1, 'e358a54a79f71861a4ebd17ecebbad6932fc1f9a', '[NULL]', ...
                                                             ^


Backtrace

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-3.3.1/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-3.3.1/lib/patches/db/pg.rb:110:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/postgres/connection.rb:217:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:38:in `block in run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:34:in `block in with_lock'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:34:in `with_lock'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:38:in `run'
/var/www/discourse/lib/mini_sql_multisite_connection.rb:109:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/postgres/connection.rb:196:in `exec'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/vector_representations/base.rb:423:in `save_to_db'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/vector_representations/base.rb:86:in `block in gen_bulk_reprensentations'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/vector_representations/base.rb:86:in `each'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/vector_representations/base.rb:86:in `gen_bulk_reprensentations'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/embeddings_backfill.rb:131:in `block in populate_topic_embeddings'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/embeddings_backfill.rb:130:in `each'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/embeddings_backfill.rb:130:in `each_slice'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/embeddings_backfill.rb:130:in `populate_topic_embeddings'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/embeddings_backfill.rb:36:in `execute'
/var/www/discourse/app/jobs/base.rb:308:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:295:in `block in perform'
/var/www/discourse/app/jobs/base.rb:291:in `each'
/var/www/discourse/app/jobs/base.rb:291:in `perform'
/var/www/discourse/app/jobs/base.rb:362:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.17.0/lib/mini_scheduler/manager.rb:137:in `process_queue'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.17.0/lib/mini_scheduler/manager.rb:77:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.17.0/lib/mini_scheduler/manager.rb:63:in `block (2 levels) in ensure_worker_threads'
1 Mi Piace

A prima vista, non sembra correlato. Sembra che non sia riuscito a generare l’embedding e stia cercando di inserire NULL. Potrebbe essere che OpenAI stia restituendo un errore? Forse qualcosa relativo alle quote?

Puoi eseguirlo da una console?

DiscourseAi::Embeddings::VectorRepresentations::Base
          .find_representation(SiteSetting.ai_embeddings_model)
          .new(DiscourseAi::Embeddings::Strategies::Truncation.new)
          .vector_from("this is a test")
          .present?

Dovrebbe registrare l’errore nei tuoi log se solleva un Net::HTTPBadResponse.

1 Mi Piace

Sono tornato nella console: truet? e niente in /logs.

Forse è un ritardo da parte di OpenAI perché ho ricaricato il mio account un’ora fa e probabilmente questo processo non è istantaneo…

Ciò significa che può generare embedding allora. Questi errori persistono? Se è così, dovresti vedere questi errori ogni cinque minuti.

Ho eseguito alcuni test sulla mia istanza locale contro il nostro servizio di embedding self-hosted e ho confermato che il backfilling funziona nelle seguenti condizioni:

  • Non ci sono embedding.
  • Il digest è obsoleto e updated_at degli embedding è precedente alle 6 ore.
  • Il digest non è obsoleto e updated_at degli embedding è precedente alle 6 ore (in questo caso non si aggiorna).
1 Mi Piace

No, non vedo più questi errori in /logs, ora funziona tutto. Grazie :slight_smile:

1 Mi Piace

Abbiamo unito un’altra correzione 5 ore fa, per favore aggiorna di nuovo.

Dopo di che, per favore fammi sapere come sta andando il tasso.

cc @Jagster.

2 Mi Piace

Non so nulla dei limiti, ma la quantità di richieste API ecc. è tornata alla normalità dopo la precedente correzione. Quindi grazie ragazzi per la reazione rapida.

2 Mi Piace