58 lines
2.8 KiB
Python
58 lines
2.8 KiB
Python
"""Ek modellere internet aramasi (11 Ekim 2026).
|
||
|
||
Kullanici karari (11 Ekim 2026, sesli): "Arastirma yapabilmesini istiyorum. Ayni Codex'te yapabildikleri gibi olmasini
|
||
istiyorum." Codex'in yerlesik web aramasi OpenAI sunucusunda calistigi icin ek modele verilemez (kopru onu arac
|
||
listesinden atar); olcum: ek model arama araci bulamayinca turu bos bitirdi. Kopru bunun yerine ek modele giden
|
||
istege, aramayi kabuk araciyla yapan hazir komutu (ara.py) soyleyen kisa bir not ekler. Codex'in kendi modelleri bu
|
||
notu hic gormez: onlarin istegi kopruye ugramaz.
|
||
|
||
Ayar (bridge.json, istege bagli): "internet": {"enabled": false} kapatir; {"talimat": "..."} metni degistirir.
|
||
"""
|
||
import os
|
||
import sys
|
||
|
||
ISARET = "[İnternet araması]"
|
||
VARSAYILAN = (
|
||
ISARET + " Bu modelde yerleşik web araması yok; internetten bilgi gerektiğinde (güncel olay, araştırma, kaynak, "
|
||
"fiyat, \"araştır\" isteği) kabuk aracınla şu iki komutu kullan:\n"
|
||
"Arama: {ara} \"sorgu\"\n"
|
||
"Sayfa okuma: {oku} <adres>\n"
|
||
"Önce ara, sonra işe yarayan iki üç sonucu oku, cevabında kaynak adreslerini belirt. Başka bir arama aracı "
|
||
"arama (tool_search ile bulunmaz). Arama hizmeti engeli veya ayrıştırma hatasında sorguları tekrar tekrar "
|
||
"değiştirme; aramanın yapılamadığını açıkça söyle. Gerçek sonuç yoksa en fazla bir farklı sorgu dene. Bilgi uydurma."
|
||
)
|
||
|
||
|
||
def python_yolu(calisan=None):
|
||
"""Modelin calistiracagi yorumlayici. Kopru penceresiz (pythonw) calisiyorsa cikti veren python secilir."""
|
||
calisan = calisan or sys.executable or "python"
|
||
klasor, ad = os.path.split(calisan)
|
||
if ad.lower() == "pythonw.exe":
|
||
aday = os.path.join(klasor, "python.exe")
|
||
if os.path.isfile(aday):
|
||
return aday
|
||
return calisan
|
||
|
||
|
||
def talimat(ayar, betik, python=None):
|
||
"""Eklenecek metin; kapaliysa ya da betik yoksa None."""
|
||
ayar = ayar if isinstance(ayar, dict) else {}
|
||
if ayar.get("enabled") is False or not betik or not os.path.isfile(betik):
|
||
return None
|
||
on = f'& "{python or python_yolu()}" "{betik}"' if os.name == 'nt' else f'"{python or python_yolu()}" "{betik}"'
|
||
return str(ayar.get("talimat") or VARSAYILAN).replace("{ara}", on + " ara").replace("{oku}", on + " oku")
|
||
|
||
|
||
def ekle(req, metin):
|
||
"""Notu istegin basina developer mesaji olarak koyar. True: eklendi (zaten varsa eklenmez)."""
|
||
girdi = req.get("input")
|
||
if not metin or not isinstance(girdi, list):
|
||
return False
|
||
for oge in girdi[:4]:
|
||
icerik = oge.get("content") if isinstance(oge, dict) else None
|
||
yazi = icerik if isinstance(icerik, str) else " ".join(str(p.get("text") or "") for p in icerik or [] if isinstance(p, dict))
|
||
if ISARET in yazi:
|
||
return False
|
||
girdi.insert(0, {"type": "message", "role": "developer", "content": [{"type": "input_text", "text": metin}]})
|
||
return True
|