This commit is contained in:
2026-07-12 12:30:20 -05:00
parent 888c5c1543
commit 0989c06b8f
23 changed files with 3324 additions and 119 deletions

82
python/test_connection.py Normal file
View File

@@ -0,0 +1,82 @@
#!/usr/bin/env python3
"""
test_connection.py - Isoliert testen, ob der vLLM-Server antwortet.
Schrittweise, damit wir sehen, WO es haengt:
1. reiner Text-Call (kein Bild, kein guided_json)
2. Text-Call MIT guided_json
3. Bild-Call ohne Extras
4. Bild-Call MIT vision-budget
Aufruf:
python test_connection.py \
--api http://192.168.100.160:8000/v1 \
--model "google/gemma-4-12b-it" \
--pdf "/mnt/bizmatch-nas/AA Buyers NDA's/Buyers NDA's A-Z/S/Snody, Troy Notes 101706.pdf"
"""
import argparse, io, base64, json, time, sys
from openai import OpenAI
from pdf2image import convert_from_path
ap = argparse.ArgumentParser()
ap.add_argument("--api", default="http://192.168.100.160:8000/v1")
ap.add_argument("--model", default="google/gemma-4-12b-it")
ap.add_argument("--pdf", required=True)
args = ap.parse_args()
client = OpenAI(base_url=args.api, api_key="test-key", timeout=60, max_retries=0)
SCHEMA = {"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]}
def run(label, **kwargs):
print(f"\n--- {label} ---")
t0 = time.time()
try:
r = client.chat.completions.create(**kwargs)
dt = time.time() - t0
print(f"OK ({dt:.1f}s): {r.choices[0].message.content[:200]}")
return True
except Exception as e:
dt = time.time() - t0
print(f"FEHLER nach {dt:.1f}s: {type(e).__name__}: {e}")
return False
# 1. Reiner Text
run("1. Text, keine Extras",
model=args.model, max_tokens=50, temperature=0.0,
messages=[{"role":"user","content":"Antworte mit genau einem Wort: Hallo"}])
# 2. Text + guided_json
run("2. Text + guided_json",
model=args.model, max_tokens=50, temperature=0.0,
messages=[{"role":"user","content":"Gib JSON {\"ok\": true} zurueck"}],
extra_body={"guided_json": SCHEMA})
# Bild vorbereiten (nur 1. Seite, moderate Groesse)
print("\n(bereite Bild vor: 1. Seite, dpi=150)")
try:
imgs = convert_from_path(args.pdf, first_page=1, last_page=1, dpi=150)
buf = io.BytesIO(); imgs[0].convert("RGB").save(buf, format="JPEG", quality=80)
b64 = base64.b64encode(buf.getvalue()).decode()
print(f" Bildgroesse base64: {len(b64):,} Zeichen")
except Exception as e:
print(f" Bildkonvertierung fehlgeschlagen: {e}")
sys.exit(1)
img_content = [
{"type":"text","text":"Was steht oben auf dieser Seite? Ein Satz."},
{"type":"image_url","image_url":{"url":f"data:image/jpeg;base64,{b64}"}},
]
# 3. Bild ohne Extras
run("3. Bild, keine Extras",
model=args.model, max_tokens=100, temperature=0.0,
messages=[{"role":"user","content":img_content}])
# 4. Bild + vision budget
run("4. Bild + max_soft_tokens=1120",
model=args.model, max_tokens=100, temperature=0.0,
messages=[{"role":"user","content":img_content}],
extra_body={"mm_processor_kwargs":{"max_soft_tokens":1120}})
print("\nFertig. Welche Schritte OK/FEHLER waren, sagt uns die Ursache.")