Initial commit
This commit is contained in:
commit
cff06c8fd6
2 files changed
+255
No files matched your search
@@ -0,0 +1,89 @@
|
||||
# Together-Sync
|
||||
|
||||
Serverlose Chat-Modelle von Together.ai direkt in die OpenCode-Konfiguration übernehmen.
|
||||
|
||||
Das Skript `together-sync` lädt die aktuellen Modelle von `https://api.together.xyz/v1/models?serverless=true` (nur Typ `chat`), bietet sie zur Auswahl an und schreibt die getroffene Auswahl als vollständigen Sync in `~/.config/opencode/opencode.jsonc` unter `providers.togetherai.models`.
|
||||
|
||||
## Hintergrund
|
||||
|
||||
OpenCode bezieht seinen Modelkatalog aus der Community-Datenbank [models.dev](https://models.dev/providers/togetherai). Dort sind etwa 30 Modelle für `togetherai` gelistet, gegenüber über 200 Serverless-Modellen bei [Together.ai](https://www.together.ai/models). Wie in den OpenCode-Dokumenten beschrieben, wird der Katalog aus Models.dev generiert – nur dort vorhandene Modelle erscheinen im `/models`-Picker.
|
||||
|
||||
Das ist bewusst so gestaltet: Nur wenige Modelle eignen sich gleichermaßen für Codegenerierung und Tool-Calling. OpenCode stellt daher gezielt getestete, für das Programmieren geeignete Modelle bereit. Neue Together-Releases benötigen erst einen PR auf `models.dev` und ein OpenCode-Release, bevor sie nativ verfügbar sind, während Together sein Serverless-Angebot kontinuierlich aktualisiert.
|
||||
|
||||
Dieses Skript überbrückt die Lücke, indem es die Live-API direkt abfragt und die ausgewählten Modelle mit passenden `limit`- und `cost`-Angaben in die `opencode.jsonc` einträgt – ohne manuelle Pflege.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Python 3 (nur Standardbibliothek)
|
||||
- Together.ai-API-Schlüssel
|
||||
- OpenCode (optional, nur für die Vorauswahl beim Erstlauf)
|
||||
- Optional: `zenity` für grafischen Dialog, sonst Terminal
|
||||
|
||||
## Authentifizierung
|
||||
|
||||
Reihenfolge der Schlüsselsuche:
|
||||
|
||||
1. Umgebungsvariable `TOGETHER_API_KEY`
|
||||
2. `~/.local/share/opencode/auth.json` unter `togetherai.key`
|
||||
|
||||
```bash
|
||||
export TOGETHER_API_KEY="tgp_..."
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
git clone git@git.tim-peters.org:Tim/Opencode-TogetherAI.git
|
||||
cd Opencode-TogetherAI
|
||||
chmod +x together-sync
|
||||
|
||||
# Optional ins PATH legen
|
||||
ln -s "$PWD/together-sync" ~/.local/bin/together-sync
|
||||
```
|
||||
|
||||
## Anwendung
|
||||
|
||||
```bash
|
||||
./together-sync
|
||||
```
|
||||
|
||||
Ablauf:
|
||||
|
||||
1. Lädt alle verfügbaren Serverless-Chat-Modelle.
|
||||
2. Vorauswahl: bereits konfigurierte Modelle; beim Erstlauf (leere Config) die von OpenCode angebotenen Together-Modelle über `opencode api`.
|
||||
3. Auswahl-Dialog:
|
||||
- **Mit `zenity`**: Checkliste mit Modell, Kontextlänge und Preis ($/Mio. Input→Output)
|
||||
- **Ohne `zenity`**: nummerierte Terminal-Liste mit Eingabe wie `1,3,7`, `a` für alle, leer zum Abbrechen
|
||||
4. Abbruch oder leere Auswahl ändert nichts.
|
||||
5. Die bestätigte Auswahl ersetzt `providers.togetherai.models` vollständig. Vorher wird automatisch ein Backup als `opencode.jsonc.bak-YYYYMMDD-HHMMSS` erstellt.
|
||||
|
||||
### Konfigurationsausgabe
|
||||
|
||||
Für jedes Modell wird ein Eintrag erzeugt:
|
||||
|
||||
```json
|
||||
{
|
||||
"providers": {
|
||||
"togetherai": {
|
||||
"models": {
|
||||
"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo": {
|
||||
"name": "Meta-Llama-3.1-405B-Instruct-Turbo",
|
||||
"limit": { "context": 131072 },
|
||||
"cost": { "input": 3.5, "output": 3.5, "cache_read": 0.5 }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Andere Top-Level-Schlüssel in `opencode.jsonc` bleiben unverändert. Eine unveränderte Auswahl wird erkannt und nicht erneut geschrieben.
|
||||
|
||||
## Pfade
|
||||
|
||||
| Pfad | Zweck |
|
||||
|------|-------|
|
||||
| `~/.config/opencode/opencode.jsonc` | OpenCode-Konfiguration |
|
||||
| `~/.local/share/opencode/auth.json` | Fallback für den API-Schlüssel |
|
||||
|
||||
Die Pfade sind im Skript als `CONFIG` und `AUTH` definiert.
|
||||
Reference in new issue
Block a user