coder-lite raus + Verbinden-Tab auf echte Direkt-Modelle
connect.py empfiehlt IDEs jetzt die realen Box-Modelle Coder (bauen) / Planer (denken) / Augen (Bilder, images) direkt statt der "coding"-Lane — deckt sich mit dem tatsaechlichen Zed-Setup. Zed-Snippet mit vollen 7-Feld-Capabilities + Provider "bosgame"; Kilo/Claude-Code auf model=coder. coder-lite (Qwen3-Coder-30B) parallel aus der llama-swap-Config der Box entfernt (war ungenutzt: coding-Lane nutzt ohne Policy immer den starken coder). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+27
-14
@@ -1,7 +1,7 @@
|
|||||||
"""
|
"""
|
||||||
Connect: erzeugt saubere, getestete Konfig-Snippets für IDEs/Agenten auf dem
|
Connect: erzeugt saubere, getestete Konfig-Snippets für IDEs/Agenten auf dem
|
||||||
LOKALEN PC (separate Maschine im LAN). Alle zeigen auf den **Gateway** der Box
|
LOKALEN PC (separate Maschine im LAN). Alle zeigen auf den **Gateway** der Box
|
||||||
(Lanes `coding`/`chat`, Cockpit-Port :9001/v1) + den **Shared-Memory-MCP** (MC :9001).
|
(reale Modelle coder/heavy/vision, Cockpit-Port :9001/v1) + den **Shared-Memory-MCP** (MC :9001).
|
||||||
|
|
||||||
Wichtig: Host ist die LAN-IP der Box (NICHT eine Proxy-Domain) — das war in v1
|
Wichtig: Host ist die LAN-IP der Box (NICHT eine Proxy-Domain) — das war in v1
|
||||||
die häufigste Fehlerquelle. Der Aufrufer übergibt den Host explizit.
|
die häufigste Fehlerquelle. Der Aufrufer übergibt den Host explizit.
|
||||||
@@ -15,9 +15,24 @@ from config import LLAMA_SWAP_URL, MEM0_SERVICE_URL, PORT
|
|||||||
|
|
||||||
DEFAULT_HOST = "192.168.178.151"
|
DEFAULT_HOST = "192.168.178.151"
|
||||||
|
|
||||||
# IDEs bekommen NUR die 'coding'-Lane zu sehen — die Lane routet intern selbst auf das
|
# IDEs bekommen die ECHTEN Box-Modelle direkt (kein Lane-Routing): Coder (bauen), Planer (denken),
|
||||||
# passende Modell (Coder/Heavy/…). Ein einziger Eintrag, kein manuelles Modell-Wählen mehr.
|
# Augen (Bilder, Vision). Der User wechselt im Modellwähler — spiegelt das reale Zed-Setup 1:1.
|
||||||
IDE_MODEL = "coding"
|
PRIMARY_MODEL = "coder"
|
||||||
|
|
||||||
|
|
||||||
|
def _caps(tools: bool = True, images: bool = False) -> dict:
|
||||||
|
"""Volle 7-Feld-Capabilities — Zed braucht sie KOMPLETT, sonst greift die Modellwahl nicht."""
|
||||||
|
return {"tools": tools, "images": images, "parallel_tool_calls": False,
|
||||||
|
"prompt_cache_key": False, "chat_completions": True,
|
||||||
|
"interleaved_reasoning": False, "max_tokens_parameter": False}
|
||||||
|
|
||||||
|
|
||||||
|
# Reale Box-Modelle für die IDE-Welt (getrennt von Lucy): bauen · denken · sehen.
|
||||||
|
IDE_MODELS = [
|
||||||
|
{"name": "coder", "display_name": "Box / Coder (bauen)", "max_tokens": 131072, "capabilities": _caps(True, False)},
|
||||||
|
{"name": "heavy", "display_name": "Box / Planer (denken)", "max_tokens": 32768, "capabilities": _caps(True, False)},
|
||||||
|
{"name": "vision", "display_name": "Box / Augen (Bilder)", "max_tokens": 32768, "capabilities": _caps(False, True)},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def _gw(host: str) -> str:
|
def _gw(host: str) -> str:
|
||||||
@@ -37,7 +52,7 @@ def build_snippets(host: str = DEFAULT_HOST,
|
|||||||
"apiProvider": "openai",
|
"apiProvider": "openai",
|
||||||
"openAiBaseUrl": gw,
|
"openAiBaseUrl": gw,
|
||||||
"openAiApiKey": "local",
|
"openAiApiKey": "local",
|
||||||
"openAiModelId": "coding",
|
"openAiModelId": PRIMARY_MODEL,
|
||||||
}, indent=2)
|
}, indent=2)
|
||||||
|
|
||||||
# Zed = Rust-nativ, ~16x leichter als VS Code, Agent Panel mit parallelen Agenten,
|
# Zed = Rust-nativ, ~16x leichter als VS Code, Agent Panel mit parallelen Agenten,
|
||||||
@@ -47,15 +62,12 @@ def build_snippets(host: str = DEFAULT_HOST,
|
|||||||
"openai_compatible": {
|
"openai_compatible": {
|
||||||
"bosgame": {
|
"bosgame": {
|
||||||
"api_url": gw,
|
"api_url": gw,
|
||||||
"available_models": [
|
"available_models": IDE_MODELS,
|
||||||
{"name": IDE_MODEL, "display_name": "Box / coding", "max_tokens": 131072,
|
|
||||||
"capabilities": {"tools": True}}
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"agent": {
|
"agent": {
|
||||||
"default_model": {"provider": "openai_compatible", "model": IDE_MODEL}
|
"default_model": {"provider": "bosgame", "model": PRIMARY_MODEL}
|
||||||
}
|
}
|
||||||
}, indent=2)
|
}, indent=2)
|
||||||
|
|
||||||
@@ -67,12 +79,12 @@ def build_snippets(host: str = DEFAULT_HOST,
|
|||||||
f"# und hat kein /v1/messages. Dazwischen muss ein Übersetzer (Anthropic ⇄ OpenAI) laufen:\n"
|
f"# und hat kein /v1/messages. Dazwischen muss ein Übersetzer (Anthropic ⇄ OpenAI) laufen:\n"
|
||||||
f"# • claude-code-router (leichtgewichtig, npm)\n"
|
f"# • claude-code-router (leichtgewichtig, npm)\n"
|
||||||
f"# • oder LiteLLM mit /v1/messages-Bridge\n"
|
f"# • oder LiteLLM mit /v1/messages-Bridge\n"
|
||||||
f"# Den Übersetzer auf den Gateway zeigen lassen: baseURL={gw}, model=coding, apiKey=local.\n"
|
f"# Den Übersetzer auf den Gateway zeigen lassen: baseURL={gw}, model=coder, apiKey=local.\n"
|
||||||
f"# Dann Claude Code auf den lokalen Übersetzer richten (Beispiel-Port 3456):\n"
|
f"# Dann Claude Code auf den lokalen Übersetzer richten (Beispiel-Port 3456):\n"
|
||||||
f"\n"
|
f"\n"
|
||||||
f'export ANTHROPIC_BASE_URL="http://localhost:3456"\n'
|
f'export ANTHROPIC_BASE_URL="http://localhost:3456"\n'
|
||||||
f'export ANTHROPIC_AUTH_TOKEN="local"\n'
|
f'export ANTHROPIC_AUTH_TOKEN="local"\n'
|
||||||
f'export ANTHROPIC_MODEL="coding"'
|
f'export ANTHROPIC_MODEL="coder"'
|
||||||
)
|
)
|
||||||
|
|
||||||
memory_mcp = json.dumps({
|
memory_mcp = json.dumps({
|
||||||
@@ -97,10 +109,11 @@ def build_snippets(host: str = DEFAULT_HOST,
|
|||||||
"tools": {
|
"tools": {
|
||||||
"zed": {"label": "Zed (empfohlen)", "lang": "json", "snippet": zed,
|
"zed": {"label": "Zed (empfohlen)", "lang": "json", "snippet": zed,
|
||||||
"note": "Leichtgewicht-Editor (Rust, ~16x weniger RAM als VS Code). settings.json → "
|
"note": "Leichtgewicht-Editor (Rust, ~16x weniger RAM als VS Code). settings.json → "
|
||||||
"language_models.openai_compatible; Agent Panel nutzt dann die Box. Lane 'coding' routet intern."},
|
"language_models.openai_compatible; Agent Panel nutzt dann die Box. Drei Modelle: "
|
||||||
|
"Coder (bauen) · Planer (denken) · Augen (Bilder) — oben im Wähler umschalten."},
|
||||||
"kilo": {"label": "Kilo Code", "lang": "json", "snippet": kilo,
|
"kilo": {"label": "Kilo Code", "lang": "json", "snippet": kilo,
|
||||||
"note": "VS Code/JetBrains (schwergewichtiger). OpenAI-Provider → Gateway. "
|
"note": "VS Code/JetBrains (schwergewichtiger). OpenAI-Provider → Gateway. "
|
||||||
"API-Profile je Modus: Code→coding · Architect/Orchestrator→heavy · Ask/Debug→chat."},
|
"API-Profile je Modus: Code→coder · Architect/Orchestrator→heavy · Ask/Debug→chat."},
|
||||||
"claude_code": {"label": "Claude Code", "lang": "bash", "snippet": claude_code,
|
"claude_code": {"label": "Claude Code", "lang": "bash", "snippet": claude_code,
|
||||||
"note": "Für die starken Sessions. Lokal-Betrieb bräuchte einen Anthropic⇄OpenAI-Übersetzer vor dem Gateway; Gedächtnis-Anbindung via Memory-MCP unten."},
|
"note": "Für die starken Sessions. Lokal-Betrieb bräuchte einen Anthropic⇄OpenAI-Übersetzer vor dem Gateway; Gedächtnis-Anbindung via Memory-MCP unten."},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user