Guide model execution setup across catalog library and profiles

This commit is contained in:
Mikei386
2026-09-29 08:27:19 +02:00
parent 88e0edcc59
commit 7bd9096e67
11 changed files with 95 additions and 13 deletions
+13 -3
View File
@@ -1,5 +1,6 @@
#!/usr/bin/env python3
"""Athena Deck prototype: loopback API, owned model processes, read-only telemetry."""
from execution_setup import assess as execution_assess
import argparse
import os
import hashlib
@@ -239,6 +240,10 @@ class Handler(BaseHTTPRequestHandler):
allowed.update(filter(None,os.environ.get('DECK_ALLOWED_HOSTS','').split(',')))
return self.headers.get('Host') in allowed
def execution_setup(self, model, profile=None):
installed={'chat':bool(self.server.runtime.status().get('active')),'image':self.server.image_runtime.status().get('installed',False),'audio':self.server.tts_runtime.status().get('installed',False)}
return execution_assess(model,installed,profile)
def do_GET(self):
if not self.valid_host():
return self.respond({'error': 'Host rejected'}, 403)
@@ -276,7 +281,9 @@ class Handler(BaseHTTPRequestHandler):
except ValueError as exc:return self.respond({'error':str(exc)},400)
except Exception:return self.respond({'error':'Komponentenquelle nicht erreichbar. Bitte erneut versuchen.'},503)
if self.path == '/api/v1/profiles':
return self.respond(self.server.profiles.status())
data=self.server.profiles.status()
for p in data['profiles']:p['execution']=self.execution_setup(p.get('model') or {},p)
return self.respond(data)
if self.path == '/api/v1/hardware':
return self.respond(self.server.hardware.snapshot())
if self.path.startswith('/api/v1/runtime'):
@@ -296,9 +303,12 @@ class Handler(BaseHTTPRequestHandler):
return self.respond(overview(data['files'],self.server.hardware.snapshot()))
if path.path=='/api/v1/catalog/files':
data=dict(self.server.catalog.files(q.get('repo',[''])[0]));hardware=self.server.hardware.snapshot()
data['files']=[dict(f,assessment=assess(f['size'],hardware,f['name'])) for f in data['files']]
data['files']=[dict(f,assessment=assess(f['size'],hardware,f['name']),execution=self.execution_setup(dict(repo=data['repo'],revision=data['revision'],file=f['name'],kind=q.get('kind',['chat'])[0]))) for f in data['files']]
return self.respond(data)
if path.path=='/api/v1/catalog':
data=self.server.catalog.status()
for entry in data['entries']:entry['execution']=self.execution_setup(entry)
return self.respond(data)
if path.path=='/api/v1/catalog':return self.respond(self.server.catalog.status())
except Exception as exc:
return self.respond({'error':str(exc) if isinstance(exc,ValueError) else 'Katalog nicht erreichbar.'},400)
if self.path == '/api/v1/network':