px-explorer-v4 / temp_patches /0057_streaming_bridge.py
BuildBot
push_hf: sparse-branch für HF-Push (nur Code, 0 LFS)
9644d0b
Raw
History Blame Contribute Delete
4.7 kB
import httpx
import json
import os
import sys
import time
import argparse
# Configuration
API_URL = "https://localhost:7860/v1/chat/completions"
SESSION_DIR = "/run/media/julian/ML4/ollama-work/all_space/sessions"
def load_local_session(session_id):
path = os.path.join(SESSION_DIR, f"{session_id}.json")
if not os.path.exists(path):
return {"session_id": session_id, "history": []}
with open(path, "r") as f:
return json.load(f)
def save_local_session(session_id, history):
path = os.path.join(SESSION_DIR, f"{session_id}.json")
data = load_local_session(session_id)
data["history"] = history
data["updated_at"] = str(time.time())
with open(path, "w") as f:
json.dump(data, f, indent=2)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--session", type=str, default="aab82b16", help="Session ID to load or create")
parser.add_argument("--message", type=str, help="The message to send (if omitted, will ask)")
parser.add_argument("--preset", type=str, default="SUBJECTIVE", help="The PX preset (e.g. SUBJECTIVE, RESONANCE_CITY)")
parser.add_argument("--model", type=str, default="gemma3-1b-it", help="Model ID")
args = parser.parse_args()
session_id = args.session
print("="*60)
print(f" LIVE SPACE INTERFACE - SESSION: {session_id} ")
print(f" MODE: {args.preset} | MODEL: {args.model}")
print("="*60)
session_data = load_local_session(session_id)
history = session_data.get("history", [])
# Show last context
if history:
last_msg = history[-1]
print(f"\n[LETZTER KONTEXT - {last_msg['role'].upper()}]:")
content = last_msg['content']
if isinstance(content, list):
text = "".join([b.get("text", "") for b in content if b.get("type") == "text"])
print(text[:300] + "..." if len(text) > 300 else text)
else:
print(content[:300] + "..." if len(content) > 300 else content)
else:
print("\n[NEUE SESSION GESTARTET]")
new_user_msg = args.message
if not new_user_msg:
print("\n" + "-"*60)
new_user_msg = input("Eingabe (oder leer lassen für Standard-Fortsetzung): ").strip()
if not new_user_msg:
new_user_msg = "Bitte setze deine Gedanken fort."
print("\n" + "-"*20 + " MEIN INPUT (GEMINI CLI) " + "-"*20)
print(new_user_msg)
print("-" * 60)
print("\n[WARTE AUF ANTWORT VON ALL_SPACE...]\n")
# Prepare API payload
api_messages = []
for msg in history:
role = msg["role"]
content = msg["content"]
if isinstance(content, list):
text = "".join([b.get("text", "") for b in content if b.get("type") == "text"])
content = text
api_messages.append({"role": role, "content": content})
api_messages.append({"role": "user", "content": new_user_msg})
payload = {
"model": args.model,
"messages": api_messages,
"px_subjective": True,
"px_config_preset": args.preset,
"temperature": 0.7,
"max_tokens": 1024,
"stream": True
}
full_response = ""
print("[MODELL ANTWORT]:")
try:
with httpx.stream("POST", API_URL, json=payload, verify=False, timeout=None) as response:
if response.status_code != 200:
print(f"Error: {response.status_code}")
try:
print(response.read().decode())
except:
pass
return
for line in response.iter_lines():
if not line:
continue
if line.startswith("data: "):
data_str = line[6:]
if data_str == "[DONE]":
break
try:
data = json.loads(data_str)
delta = data["choices"][0]["delta"]
if "content" in delta:
content = delta["content"]
full_response += content
sys.stdout.write(content)
sys.stdout.flush()
except:
pass
except Exception as e:
print(f"\n[FEHLER]: {e}")
return
print("\n\n" + "="*60)
# Save session
new_history = history + [
{"role": "user", "content": new_user_msg},
{"role": "assistant", "content": full_response}
]
save_local_session(session_id, new_history)
print(f"Update: Session {session_id} gespeichert.")
if __name__ == "__main__":
main()