Zum Inhalt springen

Empfehlungsdienst (experimentell) ​

Experimentell

Der Empfehlungsdienst hat die Version 0.0.1. Seine Algorithmen, Einstellungen und sein Ressourcenbedarf können sich zwischen Aktualisierungen noch ändern.

Der Empfehlungsdienst ist optional. Er wird unter dem Namen TypeType Signals veröffentlicht. Mit ihm baut jeder Nutzer seine Startseite mit einem Algorithmus auf, den er auswählt und einstellt. Was Nutzer bekommen, steht unter Den eigenen Algorithmus wählen.

Ein Stack ohne ihn verhält sich genau wie zuvor und zeigt nirgends eine Option. Mit ihm bleiben drei Schalter in drei verschiedenen Händen:

  1. Sie installieren den Dienst;
  2. der Administrator schaltet ihn für die Instanz ein;
  3. jeder Nutzer schaltet ihn für sich selbst ein.

Bevor Sie beginnen ​

RessourceMengeSo prüfen Sie es
ArbeitsspeicherEtwa 1 GB im Leerlauf, standardmäßig auf 2 GB begrenzt (RECOMMENDER_MEMORY_LIMIT)free -h, Spalte available
SpeicherplatzEtwa 550 MB für das Sprachmodell und etwa 330 MB für das Imagedf -h /var/lib/docker
NetzwerkInternetzugang beim ersten Start, um das Modell von Hugging Face herunterzuladen. Der Dienst spricht nie mit YouTube.
TypeTypeEin Stack, der mit dem Installer oder der unterstützten Compose-Datei installiert wurdedocker compose ps im Stack-Verzeichnis

Was sich an Ihrem Stack ändert, wenn Sie ihn hinzufügen:

  • ein neuer Container, typetype-recommender;
  • ein neues Volume, recommender_models, für das Modell;
  • eine neue Datenbank, typetype_recommender, in Ihrem vorhandenen PostgreSQL;
  • der Dienst postgres wechselt von postgres:17 zu pgvector/pgvector:pg17, demselben PostgreSQL 17 mit der Erweiterung pgvector, auf demselben Daten-Volume. PostgreSQL startet einmal neu: Die Instanz ist einige Sekunden nicht erreichbar;
  • Server wird mit der Adresse des Dienstes neu erstellt.

Ihre vorhandenen Daten werden weder migriert noch umgeschrieben. Sichern Sie die Datenbank trotzdem vorher, wie vor jeder Änderung am Stack: siehe Wartung.

Die Befehle dieser Seite verwenden $STACK_DIR für das Verzeichnis, in dem Ihr Stack liegt. Setzen Sie die Variable einmal in Ihrem Terminal. ~/typetype-stack ist nur der Standardwert des Installers: Tragen Sie das Verzeichnis ein, das Sie gewählt haben, welches auch immer. Siehe Das Verzeichnis wählen.

sh
STACK_DIR=~/typetype-stack

Wählen Sie einen der drei folgenden Wege.

A. Neue Instanz, mit dem Installer ​

  1. Starten Sie den Installer mit dem Empfehlungsdienst:

    sh
    curl -fsSL https://raw.githubusercontent.com/TypeType-Video/TypeType/main/scripts/install-stack.sh | bash -s -- --recommender

    Ohne --recommender fragt der Installer nach und antwortet mit Nein, wenn Sie nur die Eingabetaste drücken:

    text
    [install] Optional: the recommender (experimental) lets each user pick the algorithm of their home page.
    [install] It needs about 2 GB of memory and 1 GB of disk, and downloads a language model on first start.
    Add the experimental recommender? [y/N]:
  2. Der Installer bestätigt die Wahl und fragt, bevor er etwas startet:

    text
    [install] Recommender (experimental) added to the stack.
    [install] Validating the resolved Compose stack...
    Proceed with Docker pull + startup in <Ihr Stack-Verzeichnis>? [y/N]:

    Antworten Sie mit y.

  3. Warten Sie. Der erste Start lädt das Image und danach das Modell herunter. Der Installer wartet bis zu 15 Minuten, bis alle Dienste gesund sind, statt der üblichen 3. Er endet mit:

    text
    Done. Open http://localhost:8082
  4. Weiter mit Prüfen, ob er läuft.

Der Installer hat RECOMMENDER_ENABLED=true in .env gesetzt, die Option wird auf der Instanz also bereits angeboten.

B. Bestehende Instanz, mit dem Installer ​

Starten Sie den Installer erneut mit dem Verzeichnis Ihres Stacks. Er sichert die von ihm verwalteten Dateien, behält Ihre .env und Ihre docker-compose.override.yml und fügt den Empfehlungsdienst hinzu.

sh
curl -fsSL https://raw.githubusercontent.com/TypeType-Video/TypeType/main/scripts/install-stack.sh | bash -s -- --recommender --dir "$STACK_DIR"

Rechnen Sie mit einigen Sekunden Ausfall, während PostgreSQL und Server neu starten, und gehen Sie dann zu Prüfen, ob er läuft.

C. Bestehende Instanz, von Hand ​

Für alle, die den Stack selbst verwalten, zum Beispiel mit Dockge.

  1. Wechseln Sie ins Stack-Verzeichnis und prüfen Sie, ob die Datei des Dienstes da ist:

    sh
    cd "$STACK_DIR"
    ls docker-compose.recommender.yml

    Fehlt sie, sind Ihre Stack-Dateien älter als der Dienst. Laden Sie sie herunter:

    sh
    curl -fsSLO https://raw.githubusercontent.com/TypeType-Video/TypeType/main/docker-compose.recommender.yml
  2. Weisen Sie den Stack an, ihn anzubieten. Setzen Sie in .env:

    dotenv
    RECOMMENDER_ENABLED=true

    Diese Zeile sorgt auch dafür, dass der Installer den Dienst bei einer späteren Aktualisierung behält.

  3. Stellen Sie PostgreSQL zuerst mit dem pgvector-Image bereit. Das vorhandene Daten-Volume bleibt dabei erhalten:

    sh
    docker compose -f docker-compose.yml -f docker-compose.recommender.yml up -d --wait postgres

    Auf ARM64 fügen Sie zwischen den Compose-Dateien -f docker-compose.arm64.yml ein.

    Legen Sie danach die Datenbank und das gemeinsame Geheimnis an:

    sh
    COMPOSE_RECOMMENDER_FILE=docker-compose.recommender.yml ./scripts/run-stack-init.sh

    Die Ausgabe endet mit:

    text
    CREATE DATABASE
    CREATE EXTENSION

    Beim zweiten Durchlauf fehlt CREATE DATABASE, und die Zeile zur Erweiterung meldet, dass sie bereits existiert. Beides ist in Ordnung.

    Wenn Sie das gemeinsame Geheimnis selbst verwalten, können Sie die Datenbank stattdessen direkt mit docker exec anlegen:

    sh
    RECOMMENDER_DATABASE=typetype_recommender
    DB_CONTAINER="$(docker compose -f docker-compose.yml -f docker-compose.recommender.yml ps -q postgres)"
    test -n "$DB_CONTAINER"
    docker exec -i -e "RECOMMENDER_DATABASE=$RECOMMENDER_DATABASE" "$DB_CONTAINER" sh -eu <<'SH'
    export PGPASSWORD="$POSTGRES_PASSWORD"
    psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$POSTGRES_DB" -v recommender_database="$RECOMMENDER_DATABASE" <<'SQL'
    SELECT format('CREATE DATABASE %I', :'recommender_database')
    WHERE NOT EXISTS (
        SELECT 1 FROM pg_database WHERE datname = :'recommender_database'
    )
    \gexec
    SQL
    psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$RECOMMENDER_DATABASE" -c 'CREATE EXTENSION IF NOT EXISTS vector'
    SH

    Setzen Sie RECOMMENDER_DATABASE auf denselben Wert wie in .env. Dieser Befehl legt nur Datenbank und Erweiterung an, nicht aber /run/typetype-secrets/recommender_internal_token. Verwenden Sie den Init-Helper oben, sofern Sie dieses gemeinsame Geheimnis nicht bereits selbst angelegt haben. Gehört der PostgreSQL-Container nicht zu diesem Compose-Projekt, setzen Sie DB_CONTAINER auf den Container-Namen oder die ID. Auf ARM64 ergänzen Sie in den Compose-Befehlen oben -f docker-compose.arm64.yml.

  4. Starten Sie den Dienst und erstellen Sie Server neu:

    sh
    docker compose -f docker-compose.yml -f docker-compose.recommender.yml up -d --wait --wait-timeout 900

    Auf einem ARM64-Host nennen Sie auch die ARM64-Datei, wie Sie es bereits tun: -f docker-compose.yml -f docker-compose.arm64.yml -f docker-compose.recommender.yml.

  5. Weiter mit Prüfen, ob er läuft.

Nennen Sie ab jetzt beide Dateien

Jeder docker compose-Befehl für diesen Stack muss nun auch docker-compose.recommender.yml nennen. Ein Befehl, der nur docker-compose.yml zusammen mit --remove-orphans nennt, entfernt den Empfehlungsdienst.

Danke an @Toastienergy: Das Feedback zu einem manuell verwalteten Compose-Stack hat geholfen, diese Schritte klarer zu machen.

Rootless-Docker mit einem eingebundenen Modellverzeichnis ​

TypeType Signals speichert den Modell-Cache unter /models und läuft im Container mit UID/GID 10001:10001. Für das benannte Volume recommender_models ist keine Änderung der Host-Besitzrechte nötig. Bei einem Host-Bind-Mount mit Rootless-Docker werden Container-IDs auf andere Host-IDs abgebildet. Übernehmen Sie keine UID/GID-Werte von einem anderen Rechner.

Während der Empfehlungs-Container läuft, ermitteln Sie die Host-IDs für 10001:10001 im Container:

sh
RECOMMENDER_CONTAINER="$(docker compose -f docker-compose.yml -f docker-compose.recommender.yml ps -q typetype-recommender)"
PID="$(docker inspect -f '{{.State.Pid}}' "$RECOMMENDER_CONTAINER")"
HOST_UID="$(awk -v id=10001 '$1 <= id && id < $1 + $3 { print $2 + id - $1; exit }' "/proc/$PID/uid_map")"
HOST_GID="$(awk -v id=10001 '$1 <= id && id < $1 + $3 { print $2 + id - $1; exit }' "/proc/$PID/gid_map")"
printf 'Zugeordneter Host-Eigentümer: %s:%s\n' "$HOST_UID" "$HOST_GID"

Setzen Sie MODEL_PATH auf das dedizierte Host-Verzeichnis, das unter /models eingebunden ist. Wenden Sie dann die Zuordnung an und prüfen Sie den Schreibzugriff:

sh
sudo chown -R "$HOST_UID:$HOST_GID" "$MODEL_PATH"
docker exec "$RECOMMENDER_CONTAINER" test -w /models

Ändern Sie die Besitzrechte nur für das dedizierte Modellverzeichnis, nicht für ein gemeinsam genutztes übergeordnetes Verzeichnis.

Prüfen, ob er läuft ​

Führen Sie diese Befehle im Stack-Verzeichnis aus. Jeder nennt beide Compose-Dateien, egal wie Sie installiert haben: docker compose allein kennt nur die Dienste aus docker-compose.yml. Auf einem ARM64-Host fügen Sie -f docker-compose.arm64.yml zwischen den beiden ein.

sh
cd "$STACK_DIR"
  1. Der Container ist gesund:

    sh
    docker compose -f docker-compose.yml -f docker-compose.recommender.yml ps typetype-recommender

    In der Spalte STATUS muss Up ... (healthy) stehen. (health: starting) bedeutet, dass das Modell noch heruntergeladen oder geladen wird.

  2. Sein Protokoll zeigt einen vollständigen Start:

    sh
    docker compose -f docker-compose.yml -f docker-compose.recommender.yml logs typetype-recommender
    text
    INFO:     Started server process [1]
    INFO:     Waiting for application startup.
    Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://0.0.0.0:8190 (Press CTRL+C to quit)

    Die Warnung zum HF Hub ist zu erwarten: Das Modell ist öffentlich und braucht kein Token. Die Pause vor Application startup complete ist der Download.

  3. Server erreicht ihn:

    sh
    docker compose -f docker-compose.yml -f docker-compose.recommender.yml exec -T typetype-server wget -qO- http://127.0.0.1:8080/version/recommender
    json
    {"service":"recommender","version":"0.0.1","revision":"...","shortRevision":"...","buildTime":"..."}

    Eine leere Antwort oder ein Fehler bedeutet, dass Server den Dienst nicht sieht: siehe Fehlerbehebung.

  4. Die Instanz meldet ihn:

    sh
    docker compose -f docker-compose.yml -f docker-compose.recommender.yml exec -T typetype-server wget -qO- http://127.0.0.1:8080/instance

    Die Antwort enthält:

    json
    "recommender":{"installed":true,"enabled":true,"experimental":true}

    installed ist wahr, sobald Server den Dienst kennt. enabled ist der Schalter der Instanz, der gleich beschrieben wird.

  5. In der Web-App zeigt Einstellungen, dann Über, eine Zeile Algorithmus mit der Version 0.0.1.

Einschalten ​

Die Installation des Dienstes zeigt Nutzern nichts, solange die Instanz ihn nicht anbietet.

  1. Melden Sie sich als Administrator an und öffnen Sie die Admin-Konsole.
  2. Öffnen Sie den Abschnitt Empfehlungen.
  3. Schalten Sie Experimentelle Startseite anbieten ein. Das ist bereits der Fall, wenn .env RECOMMENDER_ENABLED=true enthält.
  4. Laden Sie die Web-App neu: Algorithmus erscheint im Menü.

Probieren Sie es dann mit Ihrem eigenen Konto aus:

  1. Öffnen Sie Algorithmus.
  2. Schalten Sie Meine Startseite mit einem Algorithmus meiner Wahl aufbauen ein.
  3. Gehen Sie zurück zur Startseite. Bei einem leeren Konto erscheint eine Begrüßungskarte; importieren Sie zuerst Daten oder sehen Sie einige Videos an.
  4. Öffnen Sie Algorithmus erneut, dann Aufbau der letzten Startseite: Dort müssen die abgefragten Quellen und die gefundenen Videos stehen.

Jeder Nutzer muss dasselbe für sich tun, es sei denn, Sie schalten Standardmäßig für alle aktiviert ein.

Der Abschnitt Empfehlungen der Admin-Konsole enthält alles, was ein Administrator entscheidet:

BedienelementWirkung
Experimentelle Startseite anbietenAus: Alle behalten die gewohnte Startseite, und die Seite Algorithmus verschwindet. Ein: Jeder Nutzer entscheidet, ob er sie einschaltet.
Standardmäßig für alle aktiviertStandardmäßig aus. Ein: Jeder Nutzer bekommt sofort die Startseite per Algorithmus und kann sie ausschalten.
Angebotene AlgorithmenWelche Algorithmen Nutzer wählen dürfen. Nichts ausgewählt bedeutet alle.
Vorausgewählter AlgorithmusDer, den ein Nutzer hat, bevor er wählt. Die Wahl des Dienstes folgt RECOMMENDER_DEFAULT_ALGORITHM.
Erlaubte Antwortzeit (ms)Wie lange ein Aufruf des Dienstes dauern darf. 0 behält den bei der Installation gesetzten Wert.
Videoanfragen an YouTube pro MinuteSiehe Was er von YouTube verlangt. 0 behält den bei der Installation gesetzten Wert.

Darunter zeigt Zustand des Dienstes, ob er antwortet und in wie vielen Millisekunden, die durchschnittliche Zeit für den Aufbau einer Seite (aufgeteilt in Algorithmus und YouTube-Quellen), die ausgelieferten Seiten und wie viele aus dem Cache kamen, wie oft ein Besucher stattdessen die gewohnte Startseite bekam, und die in dieser Minute gesendeten und zurückgehaltenen Videoanfragen. Dort steht auch, wie viele Nutzer die Option eingeschaltet haben, je Algorithmus, und welche Rückmeldungen sie senden wollten. Keine Rückmeldung nennt ihren Verfasser. Die Zähler beginnen neu, wenn Server neu startet.

Was er speichert ​

Die Daten Ihrer Nutzer bleiben in der Datenbank von Server. Der Empfehlungsdienst hat keine Konten und weiß nicht, wer ein Nutzer ist.

WasWoWie lange
Vektoren öffentlicher VideotitelEigene PostgreSQL-Datenbank, Tabelle title_vectorsBis zur Löschung. Kein Nutzer wird genannt.
Öffentliche Videodaten von ServerEigene PostgreSQL-Datenbank, Tabelle catalogue_videosBis die Zeile gelöscht wird; neue Daten ersetzen die alten. Keinem Konto zugeordnet.
Der Verlauf eines Nutzers, von Server unter einem Schlüssel gesendetArbeitsspeicher und gemeinsamer CacheArbeitsspeicher: läuft nach 30 Minuten Inaktivität ab und wird bei der nächsten Verlaufs- oder Empfehlungsanfrage bereinigt; gemeinsamer Cache: 30 Minuten ab Upload
Der Plan einer Seite im AufbauArbeitsspeicher und gemeinsamer Cache2 Minuten
Was aus einem Verlauf abgeleitet wurdeNur Arbeitsspeicher10 Minuten, solange der Verlauf unverändert ist

Der Videokatalog speichert Video-ID, Titel, Kanal-URL, Kategorie, bis zu 12 Tags und bis zu 300 Zeichen der Beschreibung. Er läuft nicht automatisch ab.

Server behält außerdem jede aufgebaute Startseite 30 Minuten in Dragonfly und die Wahl des Algorithmus, die Korrekturen und die Rückmeldungen jedes Nutzers in seiner eigenen Datenbank. Der Export eines Nutzers enthält seine Auswahl und seine Rückmeldungen.

Der Dienst kann jederzeit neu gestartet werden. Server sendet den Verlauf dann erneut, und die nächste Seite wird normal aufgebaut.

Was er von YouTube verlangt ​

Der Empfehlungsdienst selbst sendet nichts an YouTube. Er teilt Server mit, welche Quellen eine Seite braucht (die Videos eines Kanals, eine Suche, die Videos neben einem Video), und Server holt sie über seine übliche Extraktion, hinter seinem gemeinsamen Cache.

Server begrenzt, was der Dienst ihn öffnen lassen darf:

VariableStandardZweck
RECOMMENDER_STREAM_REQUESTS_PER_MINUTE15Videos, die der Dienst Server pro Minute beim Anbieter öffnen lassen darf, für die ganze Instanz. Wer auf Wiedergabe drückt, wird davon nie begrenzt.

Lehnt der Anbieter eine Anfrage ab, verlangt der Dienst eine Weile gar kein Video mehr, damit eine Ablehnung für die Zuschauenden nie länger dauert. Eine in dieser Zeit aufgebaute Seite hat einfach weniger Quellen.

Einstellungen ​

Diese Werte des Stacks werden aus .env gelesen:

VariableStandardZweck
RECOMMENDER_ENABLEDfalseBietet den Dienst auf der Instanz an. Die Admin-Konsole kann das danach ändern.
RECOMMENDER_MEMORY_LIMIT2gSpeichergrenze des Containers
RECOMMENDER_DEFAULT_ALGORITHMsignalsDer vorausgewählte Algorithmus für alle, die nicht gewählt haben
RECOMMENDER_DATABASEtypetype_recommenderName der eigenen Datenbank des Dienstes
RECOMMENDER_CACHE_URLredis://dragonfly:6379Gemeinsamer Cache des Dienstes
RECOMMENDER_THREADSbis zu 8CPU-Threads des Sprachmodells
TYPETYPE_RECOMMENDER_IMAGEstabiles ImageAbweichendes Image, für eine festgelegte Version oder ein Rollback
TYPETYPE_POSTGRES_VECTOR_IMAGEpgvector/pgvector:pg17PostgreSQL-Image, das pgvector mitbringt
TYPETYPE_RECOMMENDER_PORT8190Port, auf dem der Dienst im Compose-Netzwerk lauscht

Auch die Server-Seite der Integration lässt sich einstellen:

VariableStandardZweck
RECOMMENDER_REQUEST_TIMEOUT_MS2500Wie lange ein Aufruf des Dienstes dauern darf
RECOMMENDER_PAGE_DEADLINE_MS4000Wie lange ein Besucher auf eine Seite wartet, bevor die gewohnte Startseite gezeigt wird; die Seite wird für den nächsten Besuch weiter aufgebaut
RECOMMENDER_PAGE_TTL_SECONDS1800Wie lange eine aufgebaute Seite behalten wird
RECOMMENDER_PAGE_VARIANTS3Seiten je Nutzer, damit eine Aktualisierung sofort eine andere zeigt
RECOMMENDER_RELATED_TTL_SECONDS86400Wie lange die Videos neben einem Video behalten werden
RECOMMENDER_SEARCH_TTL_SECONDS21600Wie lange ein Suchergebnis behalten wird
RECOMMENDER_CHANNEL_TTL_SECONDS1800Wie lange die Videos eines Kanals behalten werden
RECOMMENDER_SOURCE_PARALLELISM6Quellen einer Seite, die gleichzeitig geholt werden

Die Datei des Dienstes reicht nur die obigen Werte weiter. Der Dienst liest weitere eigene Werte, die Sie mit einer Compose-Override-Datei für typetype-recommender setzen:

VariableStandardZweck
RECOMMENDER_HISTORY_TTL_SECONDS1800Einträge im Arbeitsspeicher werden beim nächsten Aufruf nach Ablauf des Leerlauf-Timeouts entfernt; Cache-TTL beginnt beim Upload
RECOMMENDER_HISTORY_ITEMS_KEPT400000Wiedergaben und Likes aller Verläufe, die gleichzeitig im Arbeitsspeicher gehalten werden, etwa 0,5 MB je 1.000
RECOMMENDER_PLAN_TTL_SECONDS120Wie lange der Plan einer Seite behalten wird
RECOMMENDER_PROFILE_TTL_SECONDS600Wie lange das aus einem unveränderten Verlauf Abgeleitete behalten wird; 0 schaltet es ab
RECOMMENDER_EMBED_BUDGET100Neue Titel, die das Modell höchstens innerhalb einer Anfrage liest
RECOMMENDER_MAX_TITLES2000Titel, die ein Profil höchstens liest
RECOMMENDER_EMBEDDING_MODEL, RECOMMENDER_EMBEDDING_FILEmehrsprachiges mpnet, fp16Das Sprachmodell und seine Variante
RECOMMENDER_DATABASE_POOL4Offen gehaltene Verbindungen zur Datenbank
RECOMMENDER_CACHE_TIMEOUT_MS2000Wie lange ein Cache-Aufruf dauern darf

Eine leer gelassene Variable gilt als nicht gesetzt.

yaml
services:
  typetype-recommender:
    environment:
      RECOMMENDER_PARALLEL_BATCHES: "3"

Speichern Sie das als docker-compose.override.yml im Stack-Verzeichnis; der Installer behält diese Datei und wendet sie zuletzt an.

Mehr Speicher für mehr Geschwindigkeit ​

Mit den Standardwerten bleibt der Dienst unter 2 GB. Auf einem Host, der ihm 4 GB geben kann, machen zwei Einstellungen des Dienstes ihn schneller, wenn viele neue Personen gleichzeitig kommen, auf Kosten des Arbeitsspeichers:

VariableStandardWirkung
RECOMMENDER_PARALLEL_BATCHES1Stapel von Titeln, die gleichzeitig durch das Modell laufen. 3 bedient einen Ansturm neuer Personen etwa ein Drittel schneller, bei etwa 0,8 GB mehr in der Spitze.
RECOMMENDER_ONNX_ARENA01 lässt das Modell den Speicher seiner größten Stapel behalten: etwa 10 % schneller unter Ansturm, etwa 1,3 GB mehr.

Erhöhen Sie RECOMMENDER_MEMORY_LIMIT zugleich.

Aktualisieren ​

Mit dem Installer aktualisieren Sie wie gewohnt. Er behält den Dienst, weil .envRECOMMENDER_ENABLED=true enthält:

sh
curl -fsSL https://raw.githubusercontent.com/TypeType-Video/TypeType/main/scripts/install-stack.sh | bash -s -- --yes --dir "$STACK_DIR"

Von Hand laden Sie die Images und erstellen mit beiden Dateien neu:

sh
cd "$STACK_DIR"
docker compose -f docker-compose.yml -f docker-compose.recommender.yml pull
docker compose -f docker-compose.yml -f docker-compose.recommender.yml up -d --wait --wait-timeout 900

Das Modell bleibt in seinem Volume: Eine Aktualisierung lädt es nicht erneut herunter. Führen Sie danach die Prüfungen aus Prüfen, ob er läuft aus: Die Versionszeile sagt Ihnen, welche Version antwortet.

Entfernen ​

  1. Setzen Sie in .env RECOMMENDER_ENABLED=false, damit der Installer ihn bei der nächsten Aktualisierung nicht wieder hinzufügt.

  2. Erstellen Sie den Stack ohne die Datei des Dienstes neu:

    sh
    cd "$STACK_DIR"
    docker compose -f docker-compose.yml up -d --remove-orphans --wait

    Der Container des Dienstes wird entfernt, PostgreSQL kehrt zu postgres:17 zurück, und Server wird ohne die Adresse des Dienstes neu erstellt. Die Startseite ist für alle wieder die gewohnte, und die Seite Algorithmus verschwindet.

  3. Prüfen Sie:

    sh
    docker compose exec -T typetype-server wget -qO- http://127.0.0.1:8080/instance

    Die Antwort enthält jetzt "recommender":{"installed":false,.

Auswahl, Korrekturen und Rückmeldungen der Nutzer bleiben in der Datenbank von Server, falls Sie den Dienst wieder hinzufügen. Sonst hat der Dienst nie etwas von ihnen gespeichert.

Um den Speicherplatz zurückzugewinnen, wenn Sie möchten:

sh
docker volume ls | grep recommender_models
docker volume rm <oben angezeigter Name>
docker compose exec -T postgres sh -c 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "DROP DATABASE typetype_recommender"'

Fehlerbehebung ​

Lesen Sie zuerst das Protokoll des Dienstes:

sh
cd "$STACK_DIR"
docker compose -f docker-compose.yml -f docker-compose.recommender.yml logs --tail 100 typetype-recommender
Was Sie sehenUrsacheWas zu tun ist
STATUS bleibt beim ersten Start minutenlang auf (health: starting)Das Modell, etwa 550 MB, wird heruntergeladenWarten Sie. Das Protokoll zeigt Application startup complete, wenn es fertig ist.
Das Protokoll zeigt einen Netzwerkfehler vor Application startup completeDas Modell konnte nicht von Hugging Face heruntergeladen werdenGeben Sie dem Container für den ersten Start Internetzugang. Danach wird das Modell aus dem Volume gelesen.
no such service: typetype-recommenderDer Befehl nennt nur docker-compose.ymlFügen Sie -f docker-compose.recommender.yml hinzu.
Der Container wird beendet und startet neu, OOMKilled in docker inspectEr hat RECOMMENDER_MEMORY_LIMIT erreichtErhöhen Sie die Grenze oder behalten Sie die Standardwerte aus Mehr Speicher für mehr Geschwindigkeit.
/version/recommender antwortet nichtServer wurde nicht mit der Datei des Dienstes neu erstellt, oder das gemeinsame Geheimnis fehltFühren Sie die beiden Befehle aus C. Von Hand, Schritte 3 und 4, erneut aus.
Algorithmus steht nicht im MenüDie Instanz bietet ihn nicht anAdmin-Konsole, Empfehlungen, Experimentelle Startseite anbieten; danach die Seite neu laden.
Die Startseite bleibt die gewohnteDie Seite war nicht rechtzeitig fertig, oder das Konto hat keine DatenLaden Sie nach einigen Sekunden neu. In der Admin-Konsole zählt Rückfälle auf die gewohnte Startseite, wie oft das vorkommt.
Zustand des Dienstes zeigt Antwortet nichtDer Dienst ist gestoppt oder startet nochPrüfen Sie Status und Protokoll wie oben. Bis dahin sind die Startseiten die gewohnten.

Quellen ​