Passende Sprachmodelle für die eigene Hardware finden

Wer Sprachmodelle lokal ausführen möchte, steht zunächst vor der Frage, welche Modelle auf der vorhandenen Hardware sinnvoll genutzt werden können. Neben der Größe des Modells spielen hierbei der verfügbare Speicher und die gewünschte Kontextgröße eine Rolle. Das Werkzeug llmfit hilft dabei, passende Modelle für den eigenen Rechner zu finden.

Die interaktive Oberfläche von llmfit

Dazu erkennt llmfit unter anderem den Prozessor, den Arbeitsspeicher sowie vorhandene Grafikkarten und deren Speicher. Auch der gemeinsam genutzte Speicher von Apple-Silicon-Systemen wird berücksichtigt. Auf dieser Grundlage bewertet das Werkzeug die Modelle aus seinem Katalog nach Speicherbedarf, geschätzter Geschwindigkeit, Qualität und Kontextgröße. Daneben wird eine passende Quantisierung ermittelt, bei welcher die Modellgewichte mit geringerer Genauigkeit gespeichert werden, um den Speicherbedarf zu reduzieren. Alternativ können auch andere Rechnerkonfigurationen hinterlegt werden.

Unter macOS kann llmfit über Homebrew installiert werden:

brew install llmfit

Nach der Installation kann das Werkzeug mittels:

llmfit

gestartet werden. Damit öffnet sich eine interaktive Oberfläche im Terminal. Im oberen Bereich werden die erkannten Hardwaredaten dargestellt. Darunter befindet sich eine Tabelle mit den bewerteten Modellen, einschließlich der geschätzten Geschwindigkeit in Tokens pro Sekunde und der empfohlenen Quantisierung. Für eine einfache tabellarische Ausgabe kann alternativ:

llmfit fit

genutzt werden. Empfehlungen lassen sich außerdem nach ihrem Einsatzzweck filtern. Wer beispielsweise ein Modell für die Softwareentwicklung sucht, kann die Ergebnisse als JSON ausgeben lassen:

llmfit recommend --json --use-case coding --limit 3

Die Geschwindigkeitsangaben sollten zunächst als Schätzungen verstanden werden. Für eine Messung über eine bereits laufende lokale Laufzeitumgebung, beispielsweise Ollama, steht das Subkommando:

llmfit bench

zur Verfügung. Damit kann die Einschätzung durch Messwerte auf dem eigenen Rechner ergänzt werden. Der Quelltext von llmfit ist auf GitHub zu finden. Lizenziert ist das Werkzeug unter der MIT-Lizenz und damit freie Software.

Konsolen-Emulator für Windows

Eine ordentliche Konsole unter Windows ist so eine Sache. Die meisten professionellen Nutzer sind mit den bestehenden Konsolen unter Windows nicht zufrieden, auch wenn die PowerShell ein wenig Besserung brachte und Microsoft mit dem Windows Terminal aktuell einen neuen Anlauf startet.

Windows Terminal
Preis: Kostenlos

Eine weitere Variante ist der Konsolen-Emulator Cmder. Dieser liefert Lösung für eine gut integriertes Terminal. Im Gegensatz zu vielen anderen Lösungen ist Cmder portabel, kann also von Rechner nur Rechner mitgenommen und genutzt werden, ohne Spuren zu hinterlassen. Technisch basiert Cmder auf ConEmu und wurde durch ein Theme und die Clink-Erweiterungen verfeinert.

Cmder

Verfügbar ist Cmder für Windows und kann über die offizielle Seite des Projektes, unter cmder.net bezogen werden. Der Quelltext ist auf GitHub zu finden. Er ist unter der MIT License lizenziert und somit freie Software.

Visualisierung des Sonnensystems in JavaScript

Auf der Suche nach einer akkuraten Simulation des Sonnensystems bin ich auf das Projekt jsOrrery gestoßen. Bei diesem Projekt handelt es sich um eine JavaScript-Simulation, welche das Sonnensystem simuliert. Die Ergebnisse der Simulation stimmen hierbei mit denen des HORIZONS-Systems der NASA überein. In der App selber kann in das Sonnensystem gezoomt werden, die gewüschte Zeit und der Ablauf der selben eingestellt werden.

Das Sonnensystem in der Simulation

Der Quelltext des Projektes ist auf GitHub zu finden. Ausprobiert werden kann die Simulation ebenfalls über GitHub. Das Projekt ist unter der MIT License lizenziert und somit freie Software.

Java-Bibliothek für das Minecraft-Protokoll

Wenn sich der Minecraft-Client mit dem entsprechenden Server verbindet, so kommunizieren diese über ein festgelegtes Protokoll. Mit einer eigenen Implementation dieses Protokolls ist es möglich sich mit einem Minecraft-Server zu verbinden und entsprechende Aktionen durchzuführen. Zum Beispiel könnte diese Möglichkeit genutzt werden um einen Bot für Minecraft zu schreiben. Eine solche Implementation des Minecraft-Protokolls ist die Java-Bibliothek MCProtocolLib von Steven Smith.

Central City auf meinem eigenen Minecraft-Server

Ein minimales Beispiel, für den Login auf dem Server (basierend auf einem Unit-Test der Bibliothek), mit besagter Bibliothek könnte dabei wie folgt aussehen:

public class SimpleBot {

    private static final String HOST = "example.org";
    private static final int PORT = 25565;
    private static final Proxy PROXY = Proxy.NO_PROXY;
    private static final Proxy AUTH_PROXY = Proxy.NO_PROXY;
    private static final String USERNAME = ";
    private static final String PASSWORD = "password";

    public static void main(String[] args) throws FileNotFoundException, RequestException {

        MinecraftProtocol protocol = new MinecraftProtocol(USERNAME, PASSWORD);
        Client client = new Client(HOST, PORT, protocol, new TcpSessionFactory(PROXY));
        client.getSession().setFlag(MinecraftConstants.AUTH_PROXY_KEY, AUTH_PROXY);

        client.getSession().addListener(new SessionAdapter() {
            @Override
            public void packetReceived(PacketReceivedEvent event) {
                if(event.getPacket() instanceof ServerJoinGamePacket) {
                    event.getSession().send(new ClientChatPacket("Hello, World!"));
                } else if(event.getPacket() instanceof ServerChatPacket) {
                    Message message = event.getPacket().getMessage();
                    System.out.println("Received Message: " + message.getFullText());
                    if(message instanceof TranslationMessage) {
                        System.out.println("Received Translation Components: " + Arrays.toString(((TranslationMessage) message).getTranslationParams()));
                    }

                    event.getSession().disconnect("Finished");
                }
            }

            @Override
            public void disconnected(DisconnectedEvent event) {
                System.out.println("Disconnected: " + Message.fromString(event.getReason()).getFullText());
                if(event.getCause() != null) {
                    event.getCause().printStackTrace();
                }
            }
        });

        client.getSession().connect();
    }
}

In diesem Beispiel wird sich mit dem Server verbunden und nach erfolgreicher Verbindung eine Chatnachricht gesendet. Danach loggt sich der Bot wieder aus. Der Quelltext der Bibliothek ist auf GitHub zu finden. Das Projekt ist unter der MIT-Lizenz lizenziert und damit freie Software.

Schriftarten zum Programmieren

Bei der Entwicklung von Software wird in den meisten Fällen ein wie auch immer gearteter Editor bzw. eine IDE genutzt. Innerhalb dieser IDE ist zur Darstellung des Quelltextes eine Monospace-Schriftart gesetzt. In einer solchen Schriftart sind alle Zeichen gleich breit. In folgendem Beispiel wird das deutlich:

www
iii

Sowohl das w als auch das i haben in einer Monospace-Schriftart die gleiche Breite. Bei der Entwicklung ist dies natürlich sehr praktisch, da dadurch der Quelltext an Übersichtlichkeit gewinnt. Jede IDE liefert in der Voreinstellung eine bestimmte Monospace-Schriftart mit. Soll diese Voreinstellung geändert werden, so findet sich eine große Auswahl an freien Monospace-Schriftarten im Netz. Die Programming Fonts-App erleichtert die Auswahl der passenden Schriftart.

In der App konnten die unterschiedlichen Schriftarten ausprobiert werden

In dieser App können die unterschiedlichen Fonts ausgewählt werden und in einem Editor schnell auf ihre Eignung geprüft werden. Der Quelltext der App ist auf GitHub zu finden. Lizenziert ist das Ganze unter der MIT-Lizenz und damit freie Software.