Wróć do bloga
Hermes i TheaNovember 6, 20266 min czytania

Dwa AI. Jedna rozmowa. W obie strony.

Hermes działa na Twoim komputerze. Thea działa na serwerze. Teraz każde z nich może przekazać wątek drugiemu - a brak klucza API już nie zatrzymuje tury.

next-vibe działa wszędzie: na laptopie, na VPS-ie, na obu naraz. Połącz dwie instancje, a staną się jednym systemem. Nasze nazywają się Hermes i Thea.

To wydanie domyka obieg: zdalne wątki działają teraz w obie strony, a instancja bez klucza dostawcy niczego już nie blokuje.

Poznaj duet

Ten sam kod. Różne zadania.

Lokalnie

Hermes

Działa na Twoim komputerze. Tuż obok Twoich plików, terminala i agentów kodujących. Twoje codzienne narzędzie.
Chmura

Thea

Działa na serwerze. Zawsze online, dostępna z każdego miejsca. Pilnuje platformy i rozdziela pracę.

Każda instancja zarządza własnymi danymi i zadaniami. Połączenie przekazuje zdarzenia między nimi - nic więcej, nic mniej.

Wątki płyną teraz w obie strony

Zdalne foldery i prywatne wątki wykonują się na drugiej instancji - od Thei do Hermesa i od Hermesa do Thei.

Wrzuć wątek do zdalnego folderu, a instancja po drugiej stronie przeprowadzi całą turę AI: model, prompt systemowy, narzędzia. Ty piszesz dalej tam, gdzie jesteś. Rozmowa wraca do Ciebie jako lustro.

Jedna tura od początku do końca

1

Piszesz

Wiadomość w zdalnym wątku na Hermesie.

2

Połączenie ją przekazuje

Przez jeden stały WebSocket albo bezpośrednie wywołanie HTTP, gdy druga strona jest publicznie dostępna.

3

Thea prowadzi pętlę

Swoim modelem, swoim promptem, swoimi narzędziami.

4

Narzędzia działają tam, gdzie mieszkają

Narzędzie, które istnieje tylko na Hermesie, jest wywoływane na Hermesie. Wynik wraca do pętli Thei.

5

Tura ląduje po obu stronach

Gotowa rozmowa synchronizuje się z powrotem do Twojego lustra.

Brak klucza API? Tura i tak się kończy.

Instancja, która prowadzi turę, potrzebuje klucza API dostawcy modelu. Nie każda instancja go ma.

Zanim instancja przejmie turę, sprawdza klucz dostawcy na własnym węźle. Brakuje go? Od razu zwraca błąd z wyraźnym znacznikiem - bez wieszania się i bez połowicznie zapisanego wątku.

Strona wywołująca rozpoznaje znacznik, cofa swoje zapisy przekazania i sama prowadzi pętlę. Prompt i narzędzia drugiej strony nadal obowiązują; wywołania narzędzi wędrują tam i z powrotem przez połączenie.

Kto prowadzi pętlę?

Druga strona ma kluczDruga strona prowadzi turę. Narzędzia wędrują tam i z powrotem.
Druga strona nie ma kluczaDruga strona od razu odmawia. Wywołujący prowadzi turę z jej promptem i narzędziami.
Tryb inference-providerInstancja dostawcy uruchamia model. Wywołujący nie potrzebuje klucza.
Tryb inference-provider w ogóle nie potrzebuje klucza. Użyj połączonej instancji jako dostawcy modelu, a Twoja strona nigdy nie dotknie klucza dostawcy. Połączenie jest rurą do modelu.

Pod maską

Dla tych, którzy czytają diffy.

Sposób transportu jest negocjowany przy łączeniu, nigdy nie ustawiasz go ręcznie. Cel pinguje inicjatora uwierzytelnionym health-checkiem (maksymalnie 5 sekund). Osiągalny: bezpośrednie HTTP. Za NAT-em: ukryta strona otwiera jeden wychodzący WebSocket i cały ruch idzie nim.

Konektor łączy się ponownie z wykładniczym odstępem od 1 do 30 sekund i przy każdej próbie na nowo czyta dane połączenia. To wydanie wzmacnia właśnie tę ścieżkę.

Znacznik, który odsyła odbiorca bez klucza:

relay/receiver.ts
// relay/constants.ts
export const RELAY_RECEIVER_NO_PROVIDER_KEY =
  "[relay-receiver-no-provider-key]";

// receiver: no provider key on this node? fail fast, let the caller run it
if (ctx.mode === "relay" && data.model) {
  const missingKey = getMissingProviderKeyMessage(getChatModelById(data.model));
  if (missingKey !== null) {
    return fail({ /* ...marker + reason... */ });
  }
}

Też w tym wydaniu

  • Ostrzeżenie o nieaktualnym leadzie: ramka zaadresowana do leada, którego ta instancja już nie zna, jest odrzucana z ostrzeżeniem, a nie po cichu - ponowne uwierzytelnienie połączenia rozwiązuje problem.
  • Znaczniki czasu w bazie w UTC, zarówno w puli Postgresa, jak i w PGlite - wiersze z domyślnym czasem sortują się poprawnie między instancjami.
  • Zapis strumienia od razu ustawia ID wątku, więc druga strona nie odrzuca już zdarzeń z pustym ID.
  • Tury wznowienia synchronizują się z drugą stroną, więc wyniki narzędzi uzupełniane na miejscu trafiają też do lustra.

Wypróbuj

Postaw własną instancję, a potem dodaj połączenie w Admin → Remote Connections. Tworzyć połączenia mogą tylko admini; druga strona dostaje swój wpis automatycznie.

Postaw własnego Hermesa.

Uruchom next-vibe na swoim komputerze, połącz go z serwerem i pozwól im dzielić się pracą.

Wróć do bloga
    Hermes i Thea: zdalne wątki w obie strony - unbottled.ai