Skip to main content
Glama

Deadwax

CI

Ein agentischer Musik-Bibliothekar über einem persönlichen Hörverlauf. Er beantwortet natürlichsprachliche Fragen zu dem, was du gehört hast, und erstellt Playlists unter harten Beschränkungen – mit einem deterministischen Validator, einer Reparaturschleife und einer Evaluationssuite, die Pass-Raten statt Pass/Fail meldet.

Als Portfolio-Projekt gebaut, das die Praxis der LLM-Entwicklung in der Produktion demonstriert: Werkzeugnutzung, Abruf, Tracing, Evaluierung und MCP.

Der interessante Teil

Die meisten LLM-Demos funktionieren, bis man sie zweimal ausführt. Deadwax ist um das herum gebaut, was beim zweiten Lauf passiert.

Das System ist entlang einer Linie geteilt: Das Modell rechnet nie. Es interpretiert Sprache, wählt Werkzeuge und verfasst Prosa. Jede arithmetische Operation, Schwellenwertprüfung und Beschränkungsentscheidung passiert in einfachem Python, das keine Ahnung hat, dass ein LLM existiert. Wenn eine Playlist eine Beschränkung verletzt, gibt der Validator nicht False zurück – er gibt einen Verletzungscode, die betreffenden Track-IDs und eine konkrete Abhilfe zurück, was der einzige Grund ist, warum eine automatisierte Reparaturschleife überhaupt funktionieren kann.

Die Machbarkeit wird vor der Generierung geprüft. Wenn ein Brief nicht erfüllt werden kann, sagt das System das. Es füllt nie auf, ersetzt nicht und degradiert nicht stillschweigend – status="infeasible" ist ein korrektes Ergebnis mit eigenen Evaluationsfällen.

Related MCP server: Navidrome-MCP

Architekturregeln

Keine stilistischen Vorlieben. Die Verletzung einer dieser Regeln macht den Zweck des Projekts zunichte.

  1. Das Modell rechnet nie.

  2. Werkzeugbeschreibungen sind Verhaltenskontrolle – sie sind Prompts, keine Dokumentation. Eine Änderung ist eine Verhaltensänderung und wird vor dem Mergen neu evaluiert.

  3. Verletzungen sind maschinenverwertbar: ein Code, die betreffenden IDs, eine Abhilfe. Nie ein nackter Boolean, nie nur Prosa.

  4. Die Machbarkeit wird vor der Generierung geprüft.

  5. Fehlschlag ist ein gültiges Ergebnis.

  6. Harte Beschränkungen werden gemessen und durchgesetzt. Weiche Beschränkungen werden abgeleitet und bewertet und tragen ein provenance-Feld, das jede Nachricht über sie offenlegen muss.

  7. Kein Modellaufruf ohne Trace.

Entscheidungen und ihre Abwägungen sind in docs/adr festgehalten.

Stack

Alles läuft auf einem kostenlosen Tarif. Das ist eine harte Beschränkung, keine Vorliebe.

Schicht

Wahl

Sprache

Python 3.13

Werkzeugkette

uv für Abhängigkeiten und Python selbst, ruff für Linting und Formatierung, pytest

Agent

LangChain, eingeführt in Stufe 3 und nicht früher

Modell

Google Gemini Flash, mit OpenRouter-Fallback

Speicher

SQLite über das sqlite3-Standardbibliotheksmodul

Abruf

Build-Zeit-Embeddings, Kosinus-Ähnlichkeit in einfachem Python – keine Vektordatenbank

Tracing

Langfuse

Interop

Model Context Protocol-Server

Frontend

Astro auf Cloudflare Pages – die eine JavaScript-Komponente

Die Stufen 0 bis 2 verwenden nur die Standardbibliothek – kein Framework, kein SDK, keine Abhängigkeiten. Der rohe HTTP-Aufruf wird von Hand geschrieben, bevor eine Abstraktion eingeführt wird, damit der Unterschied sichtbar ist, wenn ein Framework falsch darstellt, was es tut.

Baufortschritt

Zwölf Stufen, vier Phasen. Ein Branch und ein Squash-Merge-PR pro Stufe, damit die Historie so liest, wie der Bau tatsächlich passiert ist.

Phase

Stufe

Status

A · Grundlage

0 · Ein roher Aufruf

🔨 in Arbeit

A · Grundlage

1 · Fixture-Daten

A · Grundlage

2 · Deterministischer Kern

B · Der Agent

3 · Erste Werkzeugschleife

B · Der Agent

4 · Das Wackeln messen

B · Der Agent

5 · Evaluations-Harness

v0.5

C · Verbesserung

6 · Reparaturschleife

C · Verbesserung

7 · Adversarische Fälle

C · Verbesserung

8 · Tracing

C · Verbesserung

9 · Abruf

v0.9

D · Auslieferung

10 · Echte Daten

D · Auslieferung

11 · MCP-Server

D · Auslieferung

12 · Website und Bericht

v1.0

Ausführen

Du brauchst uv. Es installiert und verwaltet Python selbst, also ist es die einzige Voraussetzung.

winget install --id=astral-sh.uv -e

Dann, vom Repository-Root aus:

uv sync

Das erstellt eine virtuelle Umgebung, installiert die festgelegte Python-Version aus .python-version und installiert das Projekt.

Füge einen kostenlosen Gemini-API-Schlüssel von Google AI Studio hinzu:

copy .env.example .env

Füge den Schlüssel nach GEMINI_API_KEY= ein. Dann sieh nach, welche Modelle dein Schlüssel erreichen kann, da sich die Kataloge des kostenlosen Tarifs ohne Vorankündigung ändern:

uv run scripts/raw_call.py --list

Setze eine dieser IDs in .env als GEMINI_MODEL und führe den Aufruf aus:

uv run scripts/raw_call.py

Es gibt die vollständige Anfrage und die vollständige Antwort aus, bevor die Antwort extrahiert wird. Das ist der Sinn des Skripts – die Formen sind es wert, zu wissen, bevor ein Framework sie versteckt.

Die tatsächlichen Ratenlimits deines Kontos werden unter aistudio.google.com/rate-limit angezeigt; Google veröffentlicht keine Tabelle mehr pro Modell für den kostenlosen Tarif in der API-Dokumentation.

Evaluierung

Die Evaluationssuite kommt in Stufe 5. Fälle werden von Hand geschrieben und nie generiert – wenn dasselbe Werkzeug sowohl den Code als auch die Bewertung schreibt, bedeutet die Punktzahl nichts. Punktzahlen werden als Pass-Raten über wiederholte Läufe berichtet, denn ein einzelner Pass auf einem nicht-deterministischen System ist eine Anekdote.

Jeder Commit, der einen Prompt, eine Werkzeugbeschreibung oder ein Modell ändert, trägt Vorher/Nachher-Evaluierungspunktzahlen in seiner Nachricht.

Lizenz

MIT. Siehe LICENSE.

Erstellt von David Koen.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Enables music management through search, playlist creation, and intelligent recommendations. Supports searching by song, artist, or album, creating and managing playlists, and getting music recommendations based on genre and mood.
    7
    13
  • A
    license
    Not graded
    quality
    A
    maintenance
    Analyze listening patterns, create custom playlists, discover missing albums, validate radio streams, and provide personalized recommendations through natural language.
    267
    83
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Spotify through natural language for music discovery, playback control, library management, and playlist creation. Supports searching for music, controlling playback, managing saved tracks, and getting personalized recommendations based on mood and preferences.
    109
    5
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheDavidKoen/deadwax'

If you have feedback or need assistance with the MCP directory API, please join our Discord server