gfdfg
This commit is contained in:
82
python/test_connection.py
Normal file
82
python/test_connection.py
Normal 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.")
|
||||
Reference in New Issue
Block a user