Download pilot/pilot_calistir.py from SevdanurGenc/Text-to-SQL: direct link, hf CLI and curl.
- Browser
- Download file 4.73 kB
-
https://huggingface.co/SevdanurGenc/Text-to-SQL/resolve/main/pilot/pilot_calistir.py
- Command line
-
hf download hf://SevdanurGenc/Text-to-SQL/pilot/pilot_calistir.py
-
curl -L -o pilot_calistir.py https://huggingface.co/SevdanurGenc/Text-to-SQL/resolve/main/pilot/pilot_calistir.py
4.73 kB
| """Cevap düzeyinde değerlendirme: belge klasörü + soru dosyası -> çıkarım tanılaması ve cevap doğruluğu. | |
| Gerçek belgelerle de aynı şekilde kullanılır; altın SQL gerekmez, yalnızca beklenen cevap yazılır: | |
| {"id": "R01", "belge": "rapor.pdf", "soru": "...", "tip": "sayi" | "metin" | "liste" | "cevapsiz", | |
| "cevap": 1234.5 | "İzmir" | ["A", "B"] | null, "isaret_serbest": false} | |
| Kullanım: | |
| python pilot/pilot_calistir.py # kurgusal pilot (pilot/belgeler, pilot/sorular.json) | |
| python pilot/pilot_calistir.py --kume agir # hazır küme: pilot | stres | agir | agir_hizli | |
| python pilot/pilot_calistir.py --belgeler KLASOR --sorular DOSYA.json --cikti KLASOR [--belge-basina] | |
| python pilot/pilot_calistir.py --kume agir_hizli --claude MODEL # LLM arka ucuyla (--openai MODEL, --ollama MODEL) | |
| python pilot/pilot_calistir.py --kume agir --ollama qwen2.5-coder:7b --cihaz gpu --sinir 50 | |
| Değerlendirme kuralları t2s/qa_eval.py dosyasının başında açıklanmıştır. | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| import json | |
| import sys | |
| import warnings | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parent.parent | |
| sys.path.insert(0, str(ROOT)) | |
| warnings.filterwarnings("ignore") | |
| from t2s.llm import list_models, load_dotenv, make_backend # noqa: E402 | |
| from t2s.qa_eval import SETS, QASet, judge, run_set, value_recall # noqa: E402,F401 (judge/value_recall: geriye uyum) | |
| from t2s.settings import Settings # noqa: E402 | |
| def main(): | |
| ap = argparse.ArgumentParser() | |
| ap.add_argument("--kume", choices=sorted(SETS), help="hazır test kümesi") | |
| ap.add_argument("--belgeler", default=str(ROOT / "pilot" / "belgeler")) | |
| ap.add_argument("--sorular", default=str(ROOT / "pilot" / "sorular.json")) | |
| ap.add_argument("--ham", default=str(ROOT / "pilot" / "ham_degerler.json"), help="isteğe bağlı") | |
| ap.add_argument("--cikti", default=None) | |
| ap.add_argument("--belge-basina", action="store_true", | |
| help="her belge için ayrı veritabanı kur; o belgenin soruları yalnız o veritabanında sorulur") | |
| ap.add_argument("--claude", nargs="?", const="auto") | |
| ap.add_argument("--openai", nargs="?", const="auto") | |
| ap.add_argument("--ollama", nargs="?", const="auto") | |
| ap.add_argument("--cihaz", choices=["auto", "gpu", "cpu"], default=None, help="Ollama hesaplama aygıtı") | |
| ap.add_argument("--anahtar", default=None, help="API anahtarı (varsayılan: ayar dosyası ya da .env)") | |
| ap.add_argument("--taban-url", default=None, help="sağlayıcı adresi (varsayılan: ayar dosyası)") | |
| ap.add_argument("--sinir", type=int, default=None, help="en fazla bu kadar soru (maliyet denetimi)") | |
| ap.add_argument("--yeniden-kur", action="store_true", help="veritabanını önbellekten almadan yeniden kur") | |
| args = ap.parse_args() | |
| load_dotenv(ROOT / ".env") | |
| cfg = Settings() # anahtarlar ve adresler arayüzdeki ayar dosyasından da okunur | |
| if args.kume: | |
| qs = SETS[args.kume] | |
| else: | |
| qs = QASet("ozel", Path(args.belgeler), Path(args.sorular), Path(args.ham) if args.ham else None, | |
| args.belge_basina) | |
| backend, label = "kural", "kural_tabanli" | |
| for key, model in (("claude", args.claude), ("openai", args.openai), ("ollama", args.ollama)): | |
| if model: | |
| kk, base = (args.anahtar or cfg.key(key) or None), (args.taban_url or cfg.base(key)) | |
| if model == "auto": | |
| model = list_models(key, kk, base)[0].id | |
| dev = args.cihaz or cfg.conn("ollama").get("cihaz") | |
| backend, label = make_backend(key, model, kk, base, device=dev if key == "ollama" else None), f"{key}:{model}" | |
| out = Path(args.cikti) if args.cikti else ROOT / "outputs" / "qa" / qs.key / label.replace(":", "_").replace("/", "_") | |
| def prog(k, n, r): | |
| if k % 25 == 0 or k == n: | |
| print(f" {k}/{n}", flush=True) | |
| res = run_set(qs, backend, out, progress=prog, limit=args.sinir, reuse_db=not args.yeniden_kur) | |
| summary = res["ozet"] | |
| # geriye uyum: eski çıktı adı | |
| (out / "pilot_sonuclari.json").write_text((out / "sonuclar.json").read_text(encoding="utf-8"), encoding="utf-8") | |
| show = {k: v for k, v in summary.items() if k not in ("cikarim", "aileye_gore", "belge_turune_gore")} | |
| print(json.dumps(show, ensure_ascii=False, indent=1)) | |
| print(f"\nSonuçlar: {out / 'sonuclar.json'}") | |
| bad = [r for r in res["kayitlar"] if not r["dogru"]] | |
| print(f"\nYanlışlar ({len(bad)}):") | |
| for r in bad[:60]: | |
| print(f" {r['id']} [{r['tip']}] {r['soru'][:70]} -> {r['aciklama']} | {str(r['sql'])[:110]}") | |
| if __name__ == "__main__": | |
| main() | |