mirror of
https://github.com/Jeuners/astra-vision.git
synced 2026-09-09 15:02:35 +02:00
docs: document module separation, tool overview, and RSS extensibility
Ergänzt die README um: - Architektur-Abschnitt mit dem tatsächlich verifizierten Import-Graphen (comfyui.py/rss.py/articles.py/documents.py/feeds.py sind gegenseitig unabhängig, tools.py ist der einzige Integrationspunkt, triggers.py ruft Handler per context.tools-Introspektion ohne tools.py zu importieren) - Werkzeuge-Überblickstabelle (was, wodurch ausgelöst, gemessene Zuverlässigkeit) - Kurzanleitung, wie man RSS-Feeds/Themen in feeds.py ergänzt - Sicherheitshinweis: anders als die Basisversion macht dieser Fork bewusst ausgehende Verbindungen (ComfyUI, RSS-Feeds, beliebige Artikel-URLs über read_article — auch potenziell modellvorgeschlagene, da die URL nicht gegen eine Allowlist geprüft wird) NICHT gepusht — weiterhin nur lokal, wie angewiesen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LVgSHNHdRx3UNTBodFmhRA
This commit is contained in:
parent
1656d26ea6
commit
6efb67f1a6
1 changed files with 43 additions and 1 deletions
44
README.md
44
README.md
|
|
@ -28,6 +28,35 @@ Die Stimme lässt sich im UI per Dropdown wählen (`/api/voices` listet alle
|
||||||
26, Auswahl wird im Browser gemerkt). Jede Stimme wird beim ersten Gebrauch
|
26, Auswahl wird im Browser gemerkt). Jede Stimme wird beim ersten Gebrauch
|
||||||
lazy geladen und danach für die Laufzeit des Prozesses gecacht.
|
lazy geladen und danach für die Laufzeit des Prozesses gecacht.
|
||||||
|
|
||||||
|
## Architektur
|
||||||
|
|
||||||
|
Jede Fähigkeit ist ein eigenständiges, gegenseitig unabhängiges Modul —
|
||||||
|
verifiziert am Import-Graphen, nicht nur behauptet:
|
||||||
|
|
||||||
|
```
|
||||||
|
astra/comfyui.py — nur httpx, kein astra-Import
|
||||||
|
astra/rss.py — nur feedparser+httpx, importiert astra.feeds (Daten)
|
||||||
|
astra/articles.py — nur httpx+trafilatura, kein astra-Import
|
||||||
|
astra/documents.py — nur pypdf, kein astra-Import
|
||||||
|
astra/feeds.py — reine Daten, kein einziger Import
|
||||||
|
```
|
||||||
|
|
||||||
|
Keines dieser fünf Module kennt Pipecat, LLM-Tools oder ein anderes der
|
||||||
|
fünf. **`astra/tools.py`** ist die einzige Stelle, die sie zu
|
||||||
|
LLM-aufrufbaren `FunctionSchema`s verdrahtet (Beschreibung + Handler +
|
||||||
|
UI-Benachrichtigungen). **`astra/triggers.py`** ruft dieselben Handler
|
||||||
|
bei Bedarf direkt auf — per Introspektion über `context.tools`, ohne
|
||||||
|
`tools.py` zu importieren — wenn ein einfacher Keyword-Treffer
|
||||||
|
zuverlässiger ist als die LLM-Entscheidung (siehe unten).
|
||||||
|
|
||||||
|
### Werkzeuge im Überblick
|
||||||
|
|
||||||
|
| Werkzeug | Macht | Ausgelöst durch | Live gemessene Zuverlässigkeit |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `generate_image` | Bild via ComfyUI erzeugen | LLM-Entscheidung | ~100 % |
|
||||||
|
| `read_news` | Schlagzeilen aus konfiguriertem RSS-Thema | Keyword-Trigger (`triggers.py`) | ~100 % (Trigger) / ~15–20 % (reine LLM-Entscheidung) |
|
||||||
|
| `read_article` | Vollen Artikeltext zu einer Nummer/URL laden | Keyword-Trigger + LLM-Fallback | Trigger 2/2 live; LLM-Fallback ~65 % |
|
||||||
|
|
||||||
## Bilder erzeugen und Dokumente lesen
|
## Bilder erzeugen und Dokumente lesen
|
||||||
|
|
||||||
Zwei zusätzliche, sauber getrennte Fähigkeiten, unabhängig von STT/LLM/TTS:
|
Zwei zusätzliche, sauber getrennte Fähigkeiten, unabhängig von STT/LLM/TTS:
|
||||||
|
|
@ -53,7 +82,13 @@ nur für die Dauer der Session, nichts wird auf Disk geschrieben.
|
||||||
|
|
||||||
- **`astra/feeds.py`** — kuratierte Feed-Liste, nach Thema gruppiert
|
- **`astra/feeds.py`** — kuratierte Feed-Liste, nach Thema gruppiert
|
||||||
(`tech`, `nachrichten`, `wirtschaft`, `hilden` — lokal für Hilden via
|
(`tech`, `nachrichten`, `wirtschaft`, `hilden` — lokal für Hilden via
|
||||||
RP ONLINE). Reine Daten, editierbar.
|
RP ONLINE). Reine Daten, editierbar: neues Thema = neuer Dict-Key mit
|
||||||
|
`{"name": ..., "url": ...}`-Tupeln, neuer Feed = eine Zeile in einem
|
||||||
|
bestehenden Thema. `TOPICS` wird automatisch aus den Keys abgeleitet,
|
||||||
|
taucht dadurch sofort im `read_news`-Schema (`enum`) und in
|
||||||
|
`triggers.py`'s Themen-Erkennung auf — keine weitere Codeänderung nötig,
|
||||||
|
solange der neue Themenname selbsterklärend ist (sonst zusätzlich einen
|
||||||
|
Alias in `_TOPIC_ALIASES` in `astra/triggers.py` ergänzen).
|
||||||
- **`astra/rss.py`** — async Feed-Client (`feedparser`), holt konfigurierte
|
- **`astra/rss.py`** — async Feed-Client (`feedparser`), holt konfigurierte
|
||||||
Feeds eines Themas parallel ab, überspringt nicht erreichbare Feeds statt
|
Feeds eines Themas parallel ab, überspringt nicht erreichbare Feeds statt
|
||||||
komplett zu scheitern.
|
komplett zu scheitern.
|
||||||
|
|
@ -160,6 +195,13 @@ Origin-Prüfung lassen dann zusätzlich diesen einen Hostnamen durch.
|
||||||
wirft, falls das Modell trotzdem Denkausgabe liefert
|
wirft, falls das Modell trotzdem Denkausgabe liefert
|
||||||
- Kein Audio, keine Transkripte werden auf Disk geschrieben; der
|
- Kein Audio, keine Transkripte werden auf Disk geschrieben; der
|
||||||
Gesprächsverlauf lebt nur im Speicher der laufenden Session
|
Gesprächsverlauf lebt nur im Speicher der laufenden Session
|
||||||
|
- Anders als die Basisversion macht dieser Fork bewusst ausgehende
|
||||||
|
Verbindungen: zu ComfyUI (`ASTRA_COMFYUI_URL`), zu den konfigurierten
|
||||||
|
RSS-Feeds (`astra/feeds.py`) und zu beliebigen Artikel-URLs, die
|
||||||
|
`read_article` aufruft (aus einem `read_news`-Ergebnis oder — bei
|
||||||
|
LLM-Tool-Aufruf statt Trigger — theoretisch vom Modell selbst
|
||||||
|
vorgeschlagen). Alle drei sind auf ihre jeweilige eigene HTTP-Anfrage
|
||||||
|
begrenzt, keins davon hat sonstigen Datei- oder Netzwerkzugriff.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue