Etwas Schlechtes bei Embeddings (verwandte Themen werden zu teuer)

Hallo :wave:

Ich benutze text-embedding-3-large für ai embeddings model und etwas stimmt damit nicht. Ich meine, ich muss mein OpenAI-Konto seit (30. Nov.) zweimal aufladen, was verrückt ist, weil es monatelang reichen sollte… Hat sich in verwandten Themen etwas geändert? Es füllt vielleicht immer Themen auf, die bereits erledigt sind, oder ich weiß es nicht. :thinking:

Es generiert ~ 24 Millionen Eingabe-Tokens / Tag

Vorher (30. Nov.) waren es ~ 60 - 220k

2 „Gefällt mir“

Bitte teilen Sie die Werte aller Einbettungseinstellungen:

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 „Gefällt mir“
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 „Gefällt mir“

Wie viele Einbettungen haben Sie?

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

Wie viele Themen haben Sie?

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

1 „Gefällt mir“

Wie viele Einbettungen haben Sie?
5964

Wie viele Themen haben Sie?
5563

1 „Gefällt mir“

Ich habe meine überprüft. Sie explodierte am 27.11. und davor waren es weniger als 100.000 Token pro Tag, dann stieg sie auf 7 Millionen und steigt jeden Tag, und gestern waren es fast 20 Millionen.

Bearbeitung: Im Oktober kosteten Embeddings 46 Cent. Jetzt, im Dezember, fast vier Tage: fast 6 Dollar.

Ja. Ich habe Embeddings deaktiviert.

2 „Gefällt mir“

24M pro Tag ist Ihr gesamtes Forum, das sieht fehlerhaft aus. Es sei denn, Sie erhalten täglich Updates in all diesen Themen, das ist mit ziemlicher Sicherheit ein Fehler.

1 „Gefällt mir“

Eine Sache, die damit zusammenhängen könnte, ist, dass wir früher die Aufrufe der Embeddings-API übersprungen haben, wenn sich die Themenübersicht nicht änderte, aber wir haben dies in gen_bulk_reprensentations @Roman zurückentwickelt.

@Don, weißt du, wie viele Embeddings-Anfragen du pro Tag machst?

2 „Gefällt mir“

Ich bin nicht Don, aber meine API-Anfragen sind von 80-100 auf 3825 gestiegen.

2 „Gefällt mir“

Es sind im Allgemeinen 150 - 200 Anfragen / Tag

aber Ende November stieg sie an.

1 „Gefällt mir“

Es tut mir sehr leid, das war ein Fehler im neuen Code, den wir hinzugefügt haben, um Embeddings schneller nachzufüllen. Es sollte behoben sein durch:

Bitte lassen Sie mich wissen, wenn die Dinge nicht wieder normal sind.

6 „Gefällt mir“

Angesichts der 250 pro Stunde haben wir ein hartes Limit von 6.000 pro Tag. Diese Zahlen liegen immer noch innerhalb des Limits.

Wenn sie jedoch nur durch unsere “Aktualisierung einer zufälligen Stichprobe” von Themen ausgelöst werden, sollte dies auf 10 % davon begrenzt sein, was im schlimmsten Fall 600 Anfragen wären.

@Roman wird dieses Limit hier nicht irgendwie angewendet? Oder liegt das Problem woanders?

1 „Gefällt mir“

Ja, ich glaube, der von mir behobene Fehler hat einen weiteren aufgedeckt, den die Digest-Prüfung verborgen hat.

Ich glaube, der Fehler liegt hier:

Ich habe ihn letzte Woche von find_each auf find_in_batches geändert (der erstere verwendet intern Batches), und da beide auf limit zur Angabe der Batch-Größe angewiesen sind, wird das ursprüngliche Limit von limit - rebaked ignoriert. Wir sollten stattdessen pluck + each_slice verwenden.

4 „Gefällt mir“

Danke für die Korrektur :hugs:

Ich habe meine Website aktualisiert, aber es scheint ein Problem in /logs zu geben. Ich bin mir nicht sicher, ob es damit zusammenhängt…

Message

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 „Gefällt mir“

Auf den ersten Blick sieht es nicht zusammenhängend aus. Es sieht so aus, als ob die Einbettung nicht generiert werden konnte und versucht wird, NULL einzufügen. Könnte OpenAI einen Fehler zurückgeben? Vielleicht etwas, das mit Quoten zu tun hat?

Können Sie das bitte von einer Konsole aus ausführen?

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

Wenn ein Net::HTTPBadResponse ausgelöst wird, sollte dies den Fehler in Ihren Protokollen protokollieren.

1 „Gefällt mir“

Ich bin zurück in der Konsole: truet? und nichts in /logs.

Vielleicht ist das eine Verzögerung von OpenAI, da ich mein Konto vor einer Stunde wieder aufgeladen habe und dieser Vorgang wahrscheinlich nicht sofort erfolgt…

Das bedeutet, dass es dann Embeddings generieren kann. Bestehen diese Fehler weiterhin? Sie sollten diese Fehler alle fünf Minuten sehen, falls ja.

Ich habe einige Tests auf meiner lokalen Instanz gegen unseren selbst gehosteten Embeddings-Service durchgeführt und bestätigt, dass das Backfilling unter folgenden Bedingungen funktioniert:

  • Es gibt keine Embeddings.
  • Der Digest ist veraltet und das updated_at der Embeddings ist älter als 6 Stunden.
  • Der Digest ist nicht veraltet und das updated_at der Embeddings ist älter als 6 Stunden (in diesem Fall wird es nicht aktualisiert).
1 „Gefällt mir“

Nein, ich sehe diese Fehler nicht mehr in /logs, alles funktioniert jetzt. Danke :slight_smile:

1 „Gefällt mir“

Wir haben vor 5 Stunden einen weiteren Fix zusammengeführt, bitte aktualisiere erneut.

Danach lass mich bitte wissen, wie die Rate aussieht.

cc @Jagster.

2 „Gefällt mir“

Ich weiß nichts über Limits, aber die Anzahl der API-Anfragen usw. ist nach der früheren Behebung wieder auf normal zurückgefallen. Vielen Dank für die schnelle Reaktion.

2 „Gefällt mir“