Nachdem wir im letzten Beitrag die Kommunikationsprobleme zwischen der API des IONOS-AI-Model-Hubs und der Theia-IDE beheben konnten, möchte ich in diesem Artikel nun die Kosten der souveränen Software-Entwicklung mit KI in der Theia-IDE einmal genauer unter die Lupe nehmen. Die Aktion, die einen kostenlosen Zugriff auf den AI-Model-Hub erlaubte, ist nun abgelaufen. Konkret bedeutet dies, das jeder Token zählt. Wie also kann man die Kosten der KI-Agenten einschätzen und wie lassen sich böse Überraschungen auf der Kreditkarte vermeiden? Die Antwort heißt litellm. Die Software agiert sozusagen als Mittelsmann zwischen unserer KI-Anwendung (Theia-IDE) und dem Modell-Anbieter (IONOS) und erlaubt es uns so, einfach in die Kommunikation einzugreifen und nicht nur Zugänge zu beschränken, sondern auch einen Überblick über die Kosten zu behalten.
litellm: AI-Gateway lokal installieren
Auch litellm steht – bis auf einige Enterprise-Funktionen – unter einer Open-Source-Lizenz zur Verfügung und kann somit kostenlos genutzt werden. Endnutzer haben dabei die Wahl zwischen der Installation als Python-Paket auf der eigenen Hardware oder dem Betreiben eines – beziehungsweise mehrerer – Docker-Container. Für diesen Artikel habe ich mich für die lokale Installation als Python-Paket entschieden, um keinen zusätzlichen Arbeitsspeicher für eine Docker-Umgebung zu benötigen.
Die Installation erfolgt dabei ganz einfach über die Kommandozeile. Alle Beispiele unten beziehen sich auf Ubuntu, sollten aber recht ähnlich für andere Betriebssysteme funktionieren. Die entsprechenden Schritte finden sich in der Dokumentation von litellm. Um Abhängigkeitskonflikte zu umgehen empfiehlt es sich, eine virtuelle Python-Umgebung zu nutzen. Diese kann mit dem folgenden Befehl eingerichtet werden, wobei der Pfad natürlich frei gewählt werden kann:
python3 -m venv /home/benutzer/workspace/litellmEine Warnung an dieser Stelle: Benennt den gewählten Ordner bloß nicht um. Falls ihr euch doch dazu entscheidet, müssen alle Pfade in ./bin angepasst werden. Gegebenenfalls müssen noch einige Abhängigkeiten für die virtuelle Python-Umgebung installiert werden. Hier empfiehlt sich ein Blick in die Python-Dokumentation für das jeweilige Betriebssystem. Nachdem der Befehl erfolgreich ausgeführt wurde, kann litellm wie folgt installiert werden:
cd /home/benutzer/workspace/litellm
./bin/pip3 install 'litellm[proxy]' Sobald auch dieser Schritt ohne Fehler abgeschlossen wurde, lässt sich litellm wie unten beschrieben starten. Wichtig ist es dabei, die virtuelle Python-Umgebung zu nutzen und nicht auf die systemweite Installation zurückzugreifen, da hier die Abhängigkeiten fehlen. Aus purer Bequemlichkeit habe ich mir hierfür auch direkt eine Alias für mein Terminal eingerichtet:
# Direkter Aufruf
/home/benutzer/workspace/litellm/bin/python3 /home/benutzer/workspace/litellm/bin/litellm
# Einrichtung der Alias
echo 'alias litellm="/home/benutzer/workspace/litellm/bin/python3 /home/benutzer/workspace/litellm/bin/litellm"' >> ~/.bashrc
Damit es später zu keinem Fehler kommt, sollte nun noch das „prisma“-Paket installiert werden:
/home/benutzer/workspace/litellm/bin/python3 install prismaDie ersten Schritte zur KI-Kontrolle mit litellm und der Theia-IDE
Nach der erfolgreichen Einrichtung und dem ersten Start von litellm begrüßt die Software einen mit einem lokalen Proxy-Server und dem entsprechenden Log-Output im Terminal.

Um die Software nun effektiv zu nutzen, muss natürlich noch etwas Konfiguration vorgenommen werden. litellm nutzt dazu die Datei „config.yaml“, welche ich mir direkt in meiner virtuellen Python-Installation erstellt habe. Für den Anfang reicht es, folgende Werte zu definieren:
model_list:
- model_name: ionos
litellm_params:
model: openai/mistralai/Mistral-Small-24B-Instruct
api_base: https://openai.inference.de-txl.ionos.com/v1
api_key: eyJ0eXAiOi...Rest...Des...Tokens...Des...KI-Nutzers...aus...dem...DCD...Um nun nicht direkt mit dem AI-Model-Hub von IONOS, sondern unserem lokalem KI-Gateway zu kommunizieren, müssen als nächstes die Einstellungen der Theia-IDE angepasst werden:
"ai-features.openAiCustom.customOpenAiModels": [
{
"model": "ionos",
"url": "http://0.0.0.0:4000",
"id": "IONOS Code Llama 13b",
"apiKey": "sk-1234",
"developerMessageSettings": "user"
}
],Der „model“-Wert entspricht dabei dem „model_name“-Parameter aus der Konfigurationsdatei von litellm. Die „id“ ist weiterhin wichtig, da wir diese ja genutzt haben, um den verschiedenen Theia-Agenten mitzuteilen, welches Modell sie künftig nutzen sollen. Die Werte „url“ und „apiKey“ beziehen sich nun aber nicht mehr auf die IONOS-, sondern vielmehr auf unsere lokale litellm-Umgebung. „sk-1234“ ist dabei ein Standardwert von litellm. Ist alles richtig konfiguriert, kann eine Unterhaltung mit den Agenten der Theia-IDE geführt werden. Dazu ist es allerdings notwendig, litellm lokal neu zu starten und die entsprechende Konfigurationsdatei beim Ausführen mitzugeben:
litellm --config /home/benutzer/workspace/litellm/config.yamlSobald der Server gestartet ist, kann also der AI-Chat der Theia-IDE geöffnet und befragt werden.

Doch wozu das Ganze? Schließlich nutzen wir einen Standard-API-Schlüssel und das Web-Interface von litellm, ist nicht viel mehr als eine Dokumentation der möglichen API-Calls:

Einrichtung der Datenbank und der Web-UI
Um den vollen Funktionsumfang von litellm nutzen zu können, ist es notwendig, der Software noch eine Datenbank, genauer gesagt PostgreSQL, zur Seite zu stellen. Je nach Betriebssystem wird diese unterschiedlich installiert. Denkbar wäre aber auch die Nutzung eines Docker-Containers oder gar die Verwendung einer Datenbank in der Cloud. Wie auch im Falle von litellm habe ich mich für die lokale Installation entschlossen:
sudo apt install postgresql Nun empfiehlt es sich für litellm einen dezidierten Benutzer und eine eigene Datenbank einzurichten. Dies kann über die Konsole von postgreSQL erledigt werden:
sudo -u postgres psql
psql (16.10 (Ubuntu 16.10-0ubuntu0.24.04.1))
Type "help" for help.
postgres=# CREATE USER litellm WITH PASSWORD 'very_secure_litellm';
CREATE ROLE
postgres=# CREATE DATABASE litellm OWNER litellm;
CREATE DATABASE
postgres=# exit
Um zu überprüfen, ob die Einrichtung auch entsprechend funktioniert hat und es keine Probleme mit dem Zugriff gibt, kann folgendes Kommando ausgeführt werden:
sudo psql -U litellm -d litellm -h localhost
Password for user litellm:
psql (16.10 (Ubuntu 16.10-0ubuntu0.24.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
litellm=> exitAls nächstes müssen noch einige Änderungen an der „config.yaml“ vorgenommen werden:
model_list:
- model_name: ionos
litellm_params:
model: openai/mistralai/Mistral-Small-24B-Instruct
api_base: https://openai.inference.de-txl.ionos.com/v1
api_key: eyJ0eXAiOi...Rest...Des...Tokens...Des...KI-Nutzers...aus...dem...DCD...
general_settings:
master_key: sk-Ein...Langer...String...Aus...Bspw...Einem...Password...Generator
salt_key: sk-Ein...Langer...String...Aus...Bspw...Einem...Password...Generator
# postgresql://<user>:<password>@<host>:<port>/<dbname>
database_url: postgresql://litellm:very_secure_litellm@localhost/litellmDer Start von litellm schlägt danach wegen Fehlern mit dem Prisma-Paket fehl. In meinem Fall konnte das Script die „schema.prisma“-Datei nicht finden. Nach einem Download der Selbigen aus dem Repository von litellm, schlug der Befehl „prisma generate“ mit der Meldung „/bin/sh: 1: prisma-client-py: not found“ fehl. Eine kurze Recherche im Internet ergab, dass in der „schema.prisma“-Datei folgende Änderung vorgenommen werden kann, um den Fehler zu beheben:
generator client {
provider = "/home/benutzer/workspace/litellm/bin/python3 -m prisma"
}Danach sollte im Terminal die Meldung „✔ Generated Prisma Client Python (v0.15.0) to ./../lib/python3.12/site-packages/prisma in 823ms“ erscheinen, wobei die Versionen natürlich variieren können. Jetzt sollte erstmals ein Login im Web-Interface von litellm möglich sein.
Das Web-Interface von litellm

Willkommen im Web-Interface von litellm! Um zu überprüfen, ob die Konfiguration auch wie erwartet funktioniert, empfiehlt sich ein Blick auf den Menüpunkt „Models + Endpoints“. Hier sollte das Modell „ionos“ zu finden sein. Verwirrend dabei: Modell-Objekte können sowohl in der Datenbank als auch in der „config.yaml“ existieren. Werden sie über die Konfigurationsdatei definiert, landen sie zwar per Migration in der Datenbank, können im Web-Interface aber nicht ohne Weiteres angepasst werden. Hier muss sich der Nutzer also entscheiden, ob er lieber in der Datenbank oder der yaml-Datei arbeitet. Letztere könnte zwar per Git versioniert werden, allerdings sollte man in diesem Falle sicherstellen, dass sich keine geheimen Schlüssel in der Datei befinden und diese lieber aus der Laufzeitumgebung laden. litellm unterstütz dies, durch die Nutzung von Umgebungsvariablen, wie beispielsweise „os.environ/REDIS_PORT“.
Model-Kosten definieren und Benutzer-Budgets festlegen
Zuerst einmal sollten die Kosten des Models in der yaml-Datei definiert werden. Mich persönlich spricht die Variante der Modell-Konfiguration außerhalb der Datenbank mehr an. Wichtig zu beachten ist an dieser Stelle, dass litellm im Grunde in US-Dollar rechnet. Dessen sollte man sich bewusst sein, wenn man die Kosten für die Aufrufe je x-Token konfiguriert. Grundsätzlich kann man natürlich dies auch einfach ignorieren, die Abrechnung im Datacenter Designer von IONOS wird dann am Ende aber nicht ganz genau dem gesetzten Limit entsprechen. Ich habe mich dafür entschieden, den aktuell relativ stabilen Dollar-Kurs von 1:1,17 zu verwenden. Dementsprechend sieht der Model-Abschnitt meiner config.yaml nun wie folgt aus:
model_list:
- model_name: MistralSmall24BInstruct
litellm_params:
model: openai/mistralai/Mistral-Small-24B-Instruct
api_base: https://openai.inference.de-txl.ionos.com/v1
api_key: eyJ0eXAiOi...Rest...Des...Tokens...Des...KI-Nutzers...aus...dem...DCD...
input_cost_per_token: 12e-08
output_cost_per_token: 35e-08Die Cost-Per-Token-Werte entsprechen der IONOS-Preisangabe für das Mistral-Modell, nach der eine Million Input-Token 0,1€ kosten und eine Million Output-Token 0,3€. Zu einem späteren Zeitpunkt lassen sich hier natürlich noch weitere Modelle definieren, so dass man die Agent-Interaktion in Theia noch weiter (kosten-)optimieren kann.
Der nächste Schritt erfolgt im Web-Interface von litellm. Es empfiehlt sich einen dedizierten Theia-AI-Nutzer anzulegen. Dies ermöglicht eine granulare Einstellung auf welche Modelle die IDE Zugriff hat. Wer noch weiter gehen möchte, kann auch Teams und – in der Enterprise-Version von litellm – zusätzlich noch Organisationen definieren.

Nachdem der Benutzer angelegt wurde, zeigt litellm einen Invite-Link an, den der Anwender aufrufen muss. Wie man sieht, kann die E-Mail-Adresse für unseren Usecase frei gewählt werden.

Entgegen meiner Erwartungen, scheint litellm dabei in der Lage zu sein User-Sessions sauber auseinander zu halten, so dass der Link im selben Browser geöffnet werden kann – zumindest solange man die Seite nicht neu lädt. Damit der Benutzer nun selbst einen API-Key anlegen kann, müssen wir noch die Rechte des Users anpassen und können die Chance gleich noch dazu benutzen, um ein Budget und den Zeitraum nachdem das Budget zurückgesetzt wird festzulegen. Dazu wechseln wir auf den „Internal Users“-Tab und wählen das Stift-Symbol neben unserem Benutzer aus.

In der folgenden UI muss nun die „Global Proxy Role“ auf „Internal User (Create/Delete/View) gesetzt werden. Als „Personal Models“ können entweder alle Team-Modelle oder ein spezielles Modell festgelegt werden. Im Folgenden sollte die Höhe des Budgets in US-Dollar gesetzt werden und ein sinnvoller Zeitraum für das Zurücksetzen des Budgets gewählt werden.
Der Benutzer kann nun selbst einen API-Key anlegen, bestimmen für welche Modelle er verwendet werden darf und sogar ein Budget definieren. Anders als erwartet, zeigt litellm hier aber nur dann das maximale Budget an, das dem Nutzer zur Verfügung steht, wenn er einem Team zugehörig ist. Hier kann das oben beschriebene Setup dementsprechend künftig noch verbessert werden.

Nachdem der Benutzer den API-Key angelegt hat, oder wie in unserem Fall wir selbst einen Key für die Theia IDE angelegt haben, können wir nun die Einstellungen in Theia dementsprechend anpassen. Dazu muss lediglich das „apiKey“-Feld angepasst werden. In meinem Fall habe ich auch das Modell selbst umbenannt, so dass ich das Feld „model“ noch entsprechend verändern musste. Sobald der Benutzer nun einen Agenten in Theia benutzt, lassen sich die Kosten direkt in der Logs-Übersicht von litellm einsehen:

litellm: Nützliches Tool mit Haken bei den Benutzerrechten
Auch wenn wir nun unser ursprüngliches Ziel erreicht haben und eine klare Kostenübersicht über die KI-Nutzung in der Theia-IDE erreicht haben, so lassen sich sicher noch einige Optimierungen vornehmen. Der Benutzer kann im aktuellen Setup beispielsweise weitere Modelle zu seinem Account hinzufügen und so zusätzliche Kosten verursachen. Das Rechte-Model von litellm scheint hier sehr starr aufgebaut zu sein. Zudem wird die Verwaltung der verschiedenen json- und yaml-Dateien recht schnell verwirrend. Außerdem sollten die Kosten noch weiter optimiert werden, da nicht jeder Theia-Agent vermutlich das teuerste Modell braucht.
Insgesamt macht das Setup aus IONOS-Model-Hub, Theia IDE und litellm aber eines deutlich: Mit ein wenig Experimentierfreude kann man sich recht einfach ein übersichtliches und auf die eigenen Bedürfnisse zugeschnittenes Entwicklungsumfeld schaffen. In diesem kann man die den neuen Fähigkeiten der künstlichen Intelligenz nicht nur testen, sondern auch mit Kundendaten souverän hantieren, da diese von einem europäischen Hoster nach DSGVO-Standards verarbeitet werden. Im nächsten Artikel werde ich einen Blick darauf werfen, wie sich das Setup anpassen und für zukünftige Einsatzzwecke optimieren lässt.