H4 AI Code Studio - Gelişmiş Kodlama Asistanı Ve Ajanı [yayınlandı]

Kullanıcı avatarı
H4NOK
Megabyte1
Megabyte1
Mesajlar: 948
Kayıt: 11 Nis 2022, 17:18
cinsiyet: Erkek
Teşekkür etti: 336 kez
Teşekkür edildi: 596 kez
İletişim:

H4 AI Code Studio - Gelişmiş Kodlama Asistanı Ve Ajanı [yayınlandı]

Mesaj gönderen H4NOK »

Resim


Resim

AI Code Studio, yapay zeka modelleriyle sohbet eden ve gerektiğinde
bilgisayarınızı kontrol ederek projeler yapan bir masaüstü asistanıdır..

AI Code Studio, sohbetleri bir YAPAY ZEKA SAĞLAYICISI üzerinden üretir.
Programın içinde hazır model zekâsı YOKTUR;
bir sağlayıcının API anahtarını (veya yerel Ollama/LM Studio sunucunuzu)
bağlamanız gerekir. Bağlamadan sohbete başlayamazsınız — program bunu net
biçimde size bildirecektir.

- En hızlı başlangıç için ücretsiz kotalı seçenekler: Gemini (AI Studio),
NVIDIA NIM, OpenRouter'ın ücretsiz modellerini kullanabilirsiniz.

- İnternetsiz/yerel çalıştırma isterseniz: Ollama kurun (ollama.com), model çekin
(örn. "ollama pull llama3.1"), program tür olarak Ollama'yı seçin —
anahtar sormaz, localhost'tan sohbet başlatabilirsiniz.
Readme

Kod: Tümünü seç

================================================================================
H4 AI Code Studio v0.27.12 - H4NOK SOFTWARE
================================================================================

AI Code Studio nedir?
---------------------
AI Code Studio, yapay zeka modelleriyle sohbet eden VE gerektiğinde
bilgisayarınızı kontrol ederek projeler yapan bir masaüstü asistanıdır.
Tek EXE dosyasıdır; kurulum gerektirmez.

İki arayüz modu vardır:
  1) SOHBET  : Akışkan sohbet arayüzü (markdown, kod renklendirme, medya
                 ekleri, oturum yönetimi) — chatGPT benzeri deneyim.

  2) AJAN      : İzin verdiğiniz yeteneklerle dosya oluşturur/siler/kopyalar,
                 CMD ve PowerShell komutları çalıştırır, program açıp kapatır,
                 internette arar, içerik indirir — her işlemin sonucunu
                 DOĞRULAR ve size tam bir raporlama yapar.

Nasıl çalışır? (mimari, sade anlatım)
-------------------------------------
- Bütün iş mantığı H4Core çekirdek kütüphanesindedir: sağlayıcı bağlantıları, ajan motoru, ayarlar, oturumlar, hafıza — hepsi yerel çalışır.
- İnternet yalnız AI sağlayıcısı ve ajanın web araçları içindir.
- "API BAĞLANTISI" bölümünü izleyip bir sağlayıcı ekleyin. Bu ZORUNLU tek hazırlıktır — sonrası program sizi yönlendirir.

Ana ekran hızlı ayar kartları (4 kutu)
--------------------------------------
Boş sohbet ekranında (karşılama) 4 hızlı kart görünür. Her kart tek tıkla
ilgili AYARLAR bölümünü açar — menülerde gezinmenize gerek kalmaz:

  | Kart            | Açar                                              |
  |-----------------|---------------------------------------------------|
  | Sağlayıcı Ekle  | Ayarlar → Sağlayıcılar (API): anahtar + Test      |
  | AI Ayarları     | Ayarlar → Yapay Zeka: düşünme, yaratıcılık, uzunluk |
  | Ajan Ayarları   | Ayarlar → Ajan modu: izin düzeyi, çalışma klasörü |
  | AI Hafıza       | Ayarlar → Hafıza: kalıcı bilgi kayıtları          |

================================================================================
API BAĞLANTISI — NELER YAPMALISINIZ? (ADIM ADIM, NET ANLATIM)
================================================================================

Önce şu kavramı netleştirelim: AI Code Studio, sohbetleri bir YAPAY ZEKA
SAĞLAYICISI üzerinden üretir. Programın içinde hazır model zekâsı YOKTUR;
bir sağlayıcının API anahtarını (veya yerel Ollama/LM Studio sunucunuzu)
bağlamanız gerekir. Bağlamadan sohbete başlayamazsınız — program bunu net
biçimde bildirir.

ADIM 1 — Bir sağlayıcıdan API anahtarı alın
-------------------------------------------
Desteklenen sağlayıcılar ve anahtarların bulunduğu yerler:

  | Sağlayıcı     | Anahtar biçimi / nereden alınır                     | Ücretli? |
  |---------------|-----------------------------------------------------|----------|
  | OpenAI        | sk-... — platform.openai.com                        | Ücretli  |
  | Anthropic     | sk-ant-... — console.anthropic.com                  | Ücretli  |
  | Gemini        | AIza... — aistudio.google.com (ücretsiz kota var)   | Karışık  |
  | NVIDIA NIM    | nvapi-... — build.nvidia.com                        | Ücretsiz |
  | DeepSeek      | platform.deepseek.com                               | Ücretli  |
  | OpenRouter    | sk-or-... — openrouter.ai (çok modeli tek anahtar)  | Karışık  |
  | Qwen          | DashScope API Key — aliyun.com                      | Karışık  |
  | Ollama        | ANAHTAR GEREKMEZ — bilgisayarınızda yerel çalışır   | Ücretsiz |
  | LM Studio     | ANAHTAR GEREKMEZ — bilgisayarınızda yerel çalışır   | Ücretsiz |
  | OpenAI Uyumlu | Herhangi bir OpenAI-uyumlu özel sunucu (vLLM vb.)   | Size bağlı |

  Notlar:
  - En hızlı başlangıç için ücretsiz kotalı seçenekler: Gemini (AI Studio),
    NVIDIA NIM, OpenRouter'ın ücretsiz modelleri.
  - İnternetsiz/yerel isterseniz: Ollama kurun (ollama.com), model çekin
    (örn. "ollama pull llama3.1"), program tür olarak Ollama'yı seçin —
    anahtar sormaz, localhost'tan konuşur.

ADIM 2 — Programda sihirbazı çalıştırın
---------------------------------------
  Ayarlar → Sağlayıcılar(API) → "Sağlayıcı Ekle" düğmesi.

  Sihirbaz 3 ekrandan oluşur:
  Ekran 1: TÜR SEÇİN — kart gridinden (OpenAI, Anthropic, Gemini, NVIDIA NIM,
           DeepSeek, OpenRouter, Qwen, Ollama, OpenAI Uyumlu). Uç nokta ve
           başlıklar türe göre OTOMATİK ayarlanır; doğru adres bulmanız
           gerekmez.

  Ekran 2: AD + ANAHTAR + ADRES —
           - Görünen ad: istediğiniz şey (örn. "NVIDIA NIM").
           - API anahtarı: ADIM 1'deki anahtarı yapıştırın (giriş alanı
             maskelidir). Ollama/LM Studio'da bu alan çıkmaz ("yerel —
             gerekmez" rozetiyle).
           - Base URL: BOŞ BIRAKIN = seçili türün resmî varsayılanı.
             Yalnız özel/kurumsal uç nokta kullanacaksanız doldurun.
             Her alanın altındaki ipucu satırı, o tür için anahtarın
             nereden alınacağını ve biçimini hatırlatır.

  Ekran 3: MODEL LİSTESİ —
           - "Modelleri çek" ile sağlayıcıdan model listesi OTOMATİK indirilir
             ("Sağlayıcıdan otomatik çekildi" rozeti).
           - Dilerseniz elle model kimliği ekler/çıkarırsınız ("Elle eklendi"
             rozeti), liste sıralamasını değiştirir, tek modeli geçici
             kapatırsınız.
           - Bir modeli "ANA MODEL" seçersiniz; ana ekrandaki seçici bunu
             varsayılan alır.

ADIM 3 — BAĞLANTIYI TEST EDİN VE KAYDEDİN
-----------------------------------------
  - Sihirbazda "Test" düğmesine basın. Sağlıklı sonucun biçimi:
      "Bağlantı başarılı — N model bulundu."
  - Test BAŞARISIZSA en sık üç neden:
      1) Anahtar hatalı/kopyalanmamış → ADIM 1'e dönün, anahtarı yeniden
         yapıştırın (başında/sonunda boşluk kalmasın).
      2) Hesapta kredi/kota yok → sağlayıcının panosundan kontrol edin.
      3) Kurumsal ağ/proxy engeli → giden HTTPS (443) izni gerekir.
  - Test yeşilse "Kaydet"e basın. Sağlayıcı artık ana ekran üstündeki
    seçicide görünür; açık/kapalı düğmesiyle geçici devre dışı bırakabilir,
    çöp kutusuyla silebilirsiniz. Birden çok sağlayıcı ekleyebilirsiniz;
    ana ekrandan anında geçiş yaparsınız.

================================================================================
ÖZELLİKLER — BÖLÜM BÖLÜM
================================================================================

1) SOHBET ALANI
---------------
- Akışkan yanıt: yanıt kelime kelime akarken görüntülenir (SSE), durdurulabilir.
- Zengin içerik: markdown başlık/liste/tablo, kod bloklarında dil renklendirme
  ve tek-tık KOPYALA düğmesi.
- Medya ekleri: görselleri ve PDF'leri mesaja eklersiniz; görsel destekleyen
  modellerde model bunları görür (ModelVision, desteklenmeyen modelde dürüstçe
  filtrelenir).
- Düşünme modları: gerekçe (reasoning) üreten modellerde düşünme akışı ayrı
  gösterilir, gereksiz gürültü filtrelenir (ThinkStreamFilter).
- Token/kullanım bilgisi: her yanıtta kullanım sayacı; token tahmini (Estimator).
- Oturumlar: sınırsız sohbet kaydı, otomatik başlık üretimi, sol panelden
  geçiş, silme/arama. Program kapanıp açılsa da kaybolmaz.
- Sohbet işlemleri menüsü (v0.27.6): Yeni Sohbet butonunun yanındaki ⁞
  (üst üste 4 nokta) butonu açılır menü verir: "Tüm sohbetleri sil" /
  "Seçili sohbetleri sil". Seçenek seçilince sohbetlerin solunda [x]
  tıklama alanı çıkar; işaretlediklerinizi veya tamamını tek onayla
  silersiniz. Onay modalsız HİÇBİR silme yapılmaz; yanlışlıkla tam
  temizlik olmasın diye arama filtresi de otomatik kaldırılır.

2) YAPAY ZEKA AYARLARI
----------------------
- Sıcaklık, üst-p, en-uzun-yanıt (1024..65536 token kademesi) ayarlanabilir.
- Presetler: hazır ayar küçükleri (Presets); kendi presetinizi kaydedersiniz.
- Profiller: sağlayıcı + model + ayarların adlandırılmış paketidir; profil arasında tek tık geçiş.

3) HAFIZA
---------
- Ajan ve sohbetin kalıcı bilgi tutmasını sağlar (memory.json): öğrendiği
  tercihler, proje bilgileri. Listeden görüntüleyip tek tek silebilirsiniz.

4) GÖRÜNÜM
----------
- Temalar: açık/koyu + vurgu renkleri (ThemeRegistry).
- Dil: Türkçe kaynak dâhil 10 arayüz dili, sağdan-yazılı diller için RTL desteği (İbranice/Arapça).
- Zoom/ölçekleme, pencere düzeni hatırlanır.
================================================================================
API Sağlayıcıları

Kod: Tümünü seç

================================================================================
1. BÜYÜK DİL MODELLERİ (LLM) - TEMEL API URL'LERİ
================================================================================
OpenAI (GPT)         : https://api.openai.com/v1
Anthropic (Claude)   : https://api.anthropic.com/v1
Google (Gemini)      : https://generativelanguage.googleapis.com/v1beta
xAI (Grok)           : https://api.x.ai/v1
Mistral AI           : https://api.mistral.ai/v1
DeepSeek             : https://api.deepseek.com/v1
Cohere               : https://api.cohere.ai/v1
Perplexity AI        : https://api.perplexity.ai/chat/completions
Alibaba (Qwen)       : https://dashscope.aliyuncs.com/api/v1
Moonshot (Kimi)      : https://api.moonshot.cn/v1
Zhipu AI (GLM)       : https://open.bigmodel.cn/api/paas/v4
01.AI (Yi)           : https://api.lingyiwanwu.com/v1
Baichuan             : https://api.baichuan-ai.com/v1
MiniMax              : https://api.minimax.chat/v1
StepFun              : https://api.stepfun.com/v1

================================================================================
2. AI API TOPLAYICILAR / AGREGATÖRLER
================================================================================
OpenRouter           : https://openrouter.ai/api/v1
Together AI          : https://api.together.xyz/v1
Groq (Hızlı LLM)     : https://api.groq.com/openai/v1
Fireworks AI         : https://api.fireworks.ai/v1
Anyscale             : https://api.endpoints.anyscale.com/v1
Hugging Face         : https://api-inference.huggingface.co/models/{model-id}
Replicate            : https://api.replicate.com/v1

================================================================================
3. YEREL (LOCAL) AI ÇALIŞTIRMA API'LERİ
================================================================================
Ollama               : http://localhost:11434/api
LM Studio            : http://localhost:1234/v1
vLLM                 : http://localhost:8000/v1
llama.cpp server     : http://localhost:8080/v1
Text Generation WebUI: http://localhost:5000/v1
Jan.ai               : http://localhost:1337/v1

================================================================================
4. ÖZEL AMAÇLI / EK UÇ NOKTALAR (OPENAI ÖRNEĞİ)
================================================================================
Chat Completions     : /v1/chat/completions
Embeddings           : /v1/embeddings
Moderations          : /v1/moderations
Fine-tuning          : /v1/fine_tuning/jobs
Batch API            : /v1/batches
Files                : /v1/files
Assistants           : /v1/assistants
Vector Stores        : /v1/vector_stores

================================================================================
NOT: 
- Çoğu servis OpenAI uyumlu (OpenAI-compatible) yapıdadır. 
  Yani OpenAI SDK'sını kullanıp sadece `base_url` kısmını değiştirerek 
  Groq, Together, DeepSeek veya yerel Ollama gibi servislere bağlanabilirsiniz.
================================================================================

Dosyayı İndir

Kod: Tümünü seç

https://www.mediafire.com/file/kz6jx3a0kx93skd/H4AICodeStudio.zip/file
VirüsJotti

Kod: Tümünü seç

https://virusscan.jotti.org/en-US/filescanjob/t7qkq0x54q
En son H4NOK tarafından 20 Eyl 2026, 05:44 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Kullanıcı avatarı
H4NOK
Megabyte1
Megabyte1
Mesajlar: 948
Kayıt: 11 Nis 2022, 17:18
cinsiyet: Erkek
Teşekkür etti: 336 kez
Teşekkür edildi: 596 kez
İletişim:

Re: H4 AI Code Studio - Gelişmiş Yapay Zeka Kodlama Asistanı Ve Ajanı

Mesaj gönderen H4NOK »

ürün yayınlandı...
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15834
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2793 kez
Teşekkür edildi: 5799 kez

Yüklendi Ve Kullanılanacak - Teşekkürler Yazılım İçin -

Mesaj gönderen TRWE_2012 »

H4NOK yazdı: 20 Eyl 2026, 05:24 ürün yayınlandı...
Yazılımı İndirdim Ve Antivirüs - Kurulum Aşamalarını kendime göre yaptım.Teşekkürler

1.Yazılım direkt kullanıcı onaylaması olmadan C:\ kök dizine kuruluyordu ama kurulumdan hemen sonra çalıştırmadan kurulumun yönünü C:\ kök dizinden D:\ Program Files\ dizinine çevirdim.Kopyalama HTML Raporu...
Resim
HTML Sayfası Kod İçeriği :

Kod: Tümünü seç

<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<title>İşlem Raporu</title>
<style>
  *{box-sizing:border-box}
  body{font-family:'Segoe UI',Tahoma,sans-serif;background:#f0f2f5;margin:0;padding:30px}
  .card{max-width:860px;margin:auto;background:#fff;border-radius:10px;
        box-shadow:0 6px 20px rgba(0,0,0,.08);overflow:hidden}
  .header{background:linear-gradient(135deg,#2c3e50,#3498db);color:#fff;padding:28px 32px}
  .header h1{margin:0;font-size:1.5em}
  .header .badge{display:inline-block;margin-top:8px;padding:4px 14px;
                 border-radius:20px;font-weight:700;font-size:.9em;background:#27ae60}
  .body{padding:28px 32px}
  table{width:100%;border-collapse:collapse;margin:18px 0}
  th,td{padding:10px 14px;border:1px solid #e0e0e0;text-align:left}
  th{background:#3498db;color:#fff}
  tr:nth-child(even){background:#f9fbfd}
  .mono{font-family:Consolas,'Courier New',monospace;font-size:.85em;word-break:break-all}
  .hash-box{background:#ecf0f1;padding:14px;border-radius:6px;margin:10px 0}
  .footer{text-align:center;color:#aaa;font-size:.8em;padding:16px}
</style>
</head>
<body>
<div class="card">
  <div class="header">
    <h1>Kopyalama İşlem Raporu</h1>
    <span class="badge">BAŞARILI</span>
  </div>
  <div class="body">
    <table>
      <tr><th>Metrik</th><th>Değer</th></tr>
      <tr><td>Tarih / Saat</td><td>20.09.2026 06:59:43</td></tr>
      <tr><td>İşlem Türü</td><td><strong>Kopyalama</strong></td></tr>
      <tr><td>Kaynak</td><td>C:\</td></tr>
      <tr><td>Hedef</td><td>D:\Program Files</td></tr>
      <tr><td>Dosya Sayısı</td><td>24</td></tr>
      <tr><td>Toplam Boyut</td><td>72.2 MB (75704949 bayt)</td></tr>
      <tr><td>Geçen Süre</td><td>0.17 saniye</td></tr>
      <tr><td>Ortalama Hız</td><td><strong>412.88 MB/sn</strong></td></tr>
      <tr><td>Başarılı</td><td>24 / 24</td></tr>
    </table>

    <h3>Bütünlük Doğrulama (SHA-256)</h3>
    <div class="hash-box mono">68EE9D3E95593C9ADDC8367745289880FCE2C18D4FC17716ED3BC2C3FF0B8DE4</div>

    <h3>Dosya Hash Detayları</h3>
    <table>
      <tr><th>Dosya Adı</th><th>SHA-256</th></tr>
      <tr><td>AI_Code_Studio_v0.27.12.exe</td><td style='font-family:monospace;font-size:0.8em;'>9DA2600D22142278507E007EE5193B4B0D6653755949C3713D16B5094B9ECE07</td></tr>
<tr><td>api-listesi.txt</td><td style='font-family:monospace;font-size:0.8em;'>6321EF1BAFB444B59E25C95EF8250A58057D47652ACCC16B1529ED94605F7B37</td></tr>
<tr><td>Açıklamalar.txt</td><td style='font-family:monospace;font-size:0.8em;'>53E98538E744D09C2C112AF5B7E23F3C4DE26977902A6AB52BFA4E552518FBD5</td></tr>
<tr><td>GörselBilgilendirme-0.png</td><td style='font-family:monospace;font-size:0.8em;'>3BDD92E44652B86428AC0667E3DEEB4AFE185519E56796758DA29FD972E759E2</td></tr>
<tr><td>GörselBilgilendirme-1.jpg</td><td style='font-family:monospace;font-size:0.8em;'>DA56E4E0B248D4AC31CF0F1F9259867747ABA0BC80BA6EBB1D8B08B6BC02F1D2</td></tr>
<tr><td>readme.txt</td><td style='font-family:monospace;font-size:0.8em;'>5A47050F23762D1E9EE0805CEC82702DB1D45BC91BA99332D55FA1774520563F</td></tr>
<tr><td>Uninstall.exe</td><td style='font-family:monospace;font-size:0.8em;'>0774E5B156D577A61BD7EA6D5F608DD463C6F3C150F668AC565BED8594880E47</td></tr>
<tr><td>Uninstall.ini</td><td style='font-family:monospace;font-size:0.8em;'>96A774853793711C9D7165A2D00F63EF715574F00B70A73D2AA6DC7759339457</td></tr>
<tr><td>hata.wav</td><td style='font-family:monospace;font-size:0.8em;'>500D8520A894AA45000279D02334057E92D1141704FAE5406628960FD824C151</td></tr>
<tr><td>lang.json</td><td style='font-family:monospace;font-size:0.8em;'>759DA5AEDE10C3A9B32F47283A491D11275C2A8336433034EDA3CF424F7EDAB0</td></tr>
<tr><td>memory.json</td><td style='font-family:monospace;font-size:0.8em;'>0DF5CFCB6DAA49761864D7FB41E914E1F55C2F18FB0599332A1C9824381B6997</td></tr>
<tr><td>notes.json</td><td style='font-family:monospace;font-size:0.8em;'>8A9E427DAC2AED2120CED4E78145B331139A37DDB21FA936318C262090F2744F</td></tr>
<tr><td>presets.json</td><td style='font-family:monospace;font-size:0.8em;'>CD9DD6800EBC4F35D3C898CE8AAA656B1B1B57E0F5AC3261F35339D2433774A9</td></tr>
<tr><td>prompts.json</td><td style='font-family:monospace;font-size:0.8em;'>1587A53533787160D4B9D325760F1188E246455DC85A0BD3B4FF54EBEED11A8F</td></tr>
<tr><td>providers.json</td><td style='font-family:monospace;font-size:0.8em;'>199E6FD5005854F91F05AF710B636F651F42D47F5012F18501C15B4FF641D74E</td></tr>
<tr><td>sessions.json</td><td style='font-family:monospace;font-size:0.8em;'>6CE5DAD6C17595E666C2EB6C183FC6C4ABC046EF3B9C4F014E5AC1BC77ADCABC</td></tr>
<tr><td>settings.json</td><td style='font-family:monospace;font-size:0.8em;'>3AB166EEB00ED1BE0F4CD85A9CF6851EE9205BE43A907CD9A3A64C774564240C</td></tr>
<tr><td>tamam.wav</td><td style='font-family:monospace;font-size:0.8em;'>12B3161ED4DBEBF87BAAFEFDAF93C0F02AF859968A673C0605A8C03C68B6D2CF</td></tr>
<tr><td>AI Gelişmiş Özellikler.md</td><td style='font-family:monospace;font-size:0.8em;'>10D5EFA339B879623B1CF478EA3533CB3B9F1B48FF0AF099A1F40F2D794E9A74</td></tr>
<tr><td>Hata Düzeltme (oto).md</td><td style='font-family:monospace;font-size:0.8em;'>3CEF8FD0E165019DAA5F99A5FE9CC7F2D42216CB342A198964CFA477F53EA300</td></tr>
<tr><td>Masaüstü Kodlama.md</td><td style='font-family:monospace;font-size:0.8em;'>075D6D1456AA7522A714215B73F0C4FF6CCF94B49C4413670FAC7182193E94E5</td></tr>
<tr><td>Mobil Geliştirme.md</td><td style='font-family:monospace;font-size:0.8em;'>7B8AFD6FAF761AD5EE4FBBC4278D46218558E9ACB6813DC8C052547B2AB3F125</td></tr>
<tr><td>WEB Arayüz.md</td><td style='font-family:monospace;font-size:0.8em;'>87FA1B672970B9CF43283EA832F5F617B1C7468A60603A7EAA014947C5984A72</td></tr>
<tr><td>WEB Kodlama.md</td><td style='font-family:monospace;font-size:0.8em;'>F24DC2FEDCBF06E244462DD94BF7BA3C13E5C32FD7354F7E7CCB2740D07A2F83</td></tr>

    </table>
  </div>
  <div class="footer">Gelişmiş Kopyalama Betiği v2.2 — 2026</div>
</div>
</body>
</html>
2.Dizin taşındıktan sonra gerekli kısayollar manuel olarak tekrar oluşturuldu ve dizin Panda Cloud Antivirüs - ClamAV ikilisi tarafından tekrar tarandı (not: setup.exe dosyası da temiz çıkmıştır.) böcük bulunamadı.Yani temiz...
Resim
3.İlk Çalıştırılma Ve Tema Ayarlaması (Siyah tema'dan nefret ediyorum (tamamen kişisel bir duygu benim kisi))
Resim
Şimdi elimdeki NVIDA'nın verdiği yasal ve geçerlilik süresi bir yıl olan API anahtarını nasıl ekleyeceğim onu araştıracağım.Teşekkürler bu yazılımı kodlayan geliştiricisine.....

NOT (Konu Dışı) :

Sistem tam denge halindedir."La Şatölye Yasasına Göre : Sistem'e dışarıdan bir kuvvet etkirse, sistem bu kuvveti absorbe edecek şekilde kendini tekrar kendini denge'ye getirmeye çalışır."

SONUÇ :
Resim
SSD disk üzerindeki bölümler arası yük dağılımı dengedir.
Kullanıcı avatarı
H4NOK
Megabyte1
Megabyte1
Mesajlar: 948
Kayıt: 11 Nis 2022, 17:18
cinsiyet: Erkek
Teşekkür etti: 336 kez
Teşekkür edildi: 596 kez
İletişim:

Re: Yüklendi Ve Kullanılanacak - Teşekkürler Yazılım İçin -

Mesaj gönderen H4NOK »

TRWE_2012 yazdı: 20 Eyl 2026, 07:25 Şimdi elimdeki NVIDA'nın verdiği yasal ve geçerlilik süresi bir yıl olan API anahtarını nasıl ekleyeceğim onu araştıracağım.Teşekkürler bu yazılımı kodlayan geliştiricisine.....
güzel dileklerin için teşekkür ederim..
api keyini eklemek çok kolaydır.
ayarlar > servis sağlayıcı api > "nvidia nim" tıkla seç
ileri de "api anahtarınızı yapıştırın" kutucuğuna api anahtarını yapıştır.
ileri > bağlantıyı kontrol et (tüm modellerin listesi gelir) kaydete tıkla bitti..
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15834
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2793 kez
Teşekkür edildi: 5799 kez

Re: Yüklendi Ve Kullanılanacak - Teşekkürler Yazılım İçin -

Mesaj gönderen TRWE_2012 »

H4NOK yazdı: 20 Eyl 2026, 07:43
TRWE_2012 yazdı: 20 Eyl 2026, 07:25 Şimdi elimdeki NVIDA'nın verdiği yasal ve geçerlilik süresi bir yıl olan API anahtarını nasıl ekleyeceğim onu araştıracağım.Teşekkürler bu yazılımı kodlayan geliştiricisine.....
güzel dileklerin için teşekkür ederim..
api keyini eklemek çok kolaydır.
ayarlar > servis sağlayıcı api > "nvidia nim" tıkla seç
ileri de "api anahtarınızı yapıştırın" kutucuğuna api anahtarını yapıştır.
ileri > bağlantıyı kontrol et (tüm modellerin listesi gelir) kaydete tıkla bitti..
Teşekkürler hemen yapıyorum...
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15834
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2793 kez
Teşekkür edildi: 5799 kez

Re: Yüklendi Ve Kullanılanacak - Teşekkürler Yazılım İçin -

Mesaj gönderen TRWE_2012 »

H4NOK yazdı: 20 Eyl 2026, 07:43
TRWE_2012 yazdı: 20 Eyl 2026, 07:25 Şimdi elimdeki NVIDA'nın verdiği yasal ve geçerlilik süresi bir yıl olan API anahtarını nasıl ekleyeceğim onu araştıracağım.Teşekkürler bu yazılımı kodlayan geliştiricisine.....
güzel dileklerin için teşekkür ederim..
api keyini eklemek çok kolaydır.
ayarlar > servis sağlayıcı api > "nvidia nim" tıkla seç
ileri de "api anahtarınızı yapıştırın" kutucuğuna api anahtarını yapıştır.
ileri > bağlantıyı kontrol et (tüm modellerin listesi gelir) kaydete tıkla bitti..
Resim
Teşekkürler artık beni kimse durduramaz....!!! :-D
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15834
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2793 kez
Teşekkür edildi: 5799 kez

Neden Hata Alıyorum?!

Mesaj gönderen TRWE_2012 »

H4NOK yazdı: 20 Eyl 2026, 07:43
TRWE_2012 yazdı: 20 Eyl 2026, 07:25 Şimdi elimdeki NVIDA'nın verdiği yasal ve geçerlilik süresi bir yıl olan API anahtarını nasıl ekleyeceğim onu araştıracağım.Teşekkürler bu yazılımı kodlayan geliştiricisine.....
güzel dileklerin için teşekkür ederim..
api keyini eklemek çok kolaydır.
ayarlar > servis sağlayıcı api > "nvidia nim" tıkla seç
ileri de "api anahtarınızı yapıştırın" kutucuğuna api anahtarını yapıştır.
ileri > bağlantıyı kontrol et (tüm modellerin listesi gelir) kaydete tıkla bitti..
Neden hata alıyorum...?!
Resim
Portable yazılımın internet'e çıkışı hangi dosya üzerinden oluyor.Bunun erişimini TinyWall üzerinden açacağım (gerçi TinyWall'I GEÇİCİ devredışı bıraktım ama hata aynıydı)
Kullanıcı avatarı
H4NOK
Megabyte1
Megabyte1
Mesajlar: 948
Kayıt: 11 Nis 2022, 17:18
cinsiyet: Erkek
Teşekkür etti: 336 kez
Teşekkür edildi: 596 kez
İletişim:

Re: Neden Hata Alıyorum?!

Mesaj gönderen H4NOK »

TRWE_2012 yazdı: 20 Eyl 2026, 08:24
H4NOK yazdı: 20 Eyl 2026, 07:43
TRWE_2012 yazdı: 20 Eyl 2026, 07:25 Şimdi elimdeki NVIDA'nın verdiği yasal ve geçerlilik süresi bir yıl olan API anahtarını nasıl ekleyeceğim onu araştıracağım.Teşekkürler bu yazılımı kodlayan geliştiricisine.....
güzel dileklerin için teşekkür ederim..
api keyini eklemek çok kolaydır.
ayarlar > servis sağlayıcı api > "nvidia nim" tıkla seç
ileri de "api anahtarınızı yapıştırın" kutucuğuna api anahtarını yapıştır.
ileri > bağlantıyı kontrol et (tüm modellerin listesi gelir) kaydete tıkla bitti..
Neden hata alıyorum...?!
Resim
Portable yazılımın internet'e çıkışı hangi dosya üzerinden oluyor.Bunun erişimini TinyWall üzerinden açacağım (gerçi TinyWall'I GEÇİCİ devredışı bıraktım ama hata aynıydı)
bu internet sorunu değil, nvidia apide her model kullanılamıyor.
şuan kullanılanlar.

nemotron-3.5-lightining
meta/muse-glimmer-30b
z.al/glm-5.3

modelleri her model çalışmaz nvidiada..


çalışmayan modelleride sağlayıcılar API bölümünden açı kapatabilirsin

Resim
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15834
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2793 kez
Teşekkür edildi: 5799 kez

Tamam Ve Özellik İsteği (Geri Bildirim)

Mesaj gönderen TRWE_2012 »

H4NOK yazdı: 20 Eyl 2026, 08:29
TRWE_2012 yazdı: 20 Eyl 2026, 08:24
H4NOK yazdı: 20 Eyl 2026, 07:43

güzel dileklerin için teşekkür ederim..
api keyini eklemek çok kolaydır.
ayarlar > servis sağlayıcı api > "nvidia nim" tıkla seç
ileri de "api anahtarınızı yapıştırın" kutucuğuna api anahtarını yapıştır.
ileri > bağlantıyı kontrol et (tüm modellerin listesi gelir) kaydete tıkla bitti..
Neden hata alıyorum...?!
Resim
Portable yazılımın internet'e çıkışı hangi dosya üzerinden oluyor.Bunun erişimini TinyWall üzerinden açacağım (gerçi TinyWall'I GEÇİCİ devredışı bıraktım ama hata aynıydı)
bu internet sorunu değil, nvidia apide her model kullanılamıyor.
şuan kullanılanlar.

nemotron-3.5-lightining
meta/muse-glimmer-30b
z.al/glm-5.3

modelleri her model çalışmaz nvidiada..


çalışmayan modelleride sağlayıcılar API bölümünden açı kapatabilirsin

Resim
Sanırım oldu
Resim
Özellik İsteği : Kodladığın bu altın değerindeki eserde (yazılım'da) API ile yüklenen modellerden hangileri api tarafından destekleniyor hangileri devredışı bırakılmış olduğunu anlayabilen bir özellik olsa ve sadece desteklenen modeller öne çıkartılsa yazılım tarafından daha iyi olur...
Kullanıcı avatarı
H4NOK
Megabyte1
Megabyte1
Mesajlar: 948
Kayıt: 11 Nis 2022, 17:18
cinsiyet: Erkek
Teşekkür etti: 336 kez
Teşekkür edildi: 596 kez
İletişim:

Re: Tamam Ve Özellik İsteği (Geri Bildirim)

Mesaj gönderen H4NOK »

TRWE_2012 yazdı: 20 Eyl 2026, 08:47
Özellik İsteği : Kodladığın bu altın değerindeki eserde (yazılım'da) API ile yüklenen modellerden hangileri api tarafından destekleniyor hangileri devredışı bırakılmış olduğunu anlayabilen bir özellik olsa ve sadece desteklenen modeller öne çıkartılsa yazılım tarafından daha iyi olur...
emin ol bunu isterdim ancak bu servis sağlayıcıların bir reklam politikası, bende şu kadar model var derler ama çoğu çalışmaz, bunu algılayabilecek bir sistem zor, api tarafında ise böyle bir kontrol mekanizması yok, yani kısacası mecbur denemek gerekiyor...
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15834
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2793 kez
Teşekkür edildi: 5799 kez

Re: Tamam Ve Özellik İsteği (Geri Bildirim)

Mesaj gönderen TRWE_2012 »

H4NOK yazdı: 20 Eyl 2026, 08:59
TRWE_2012 yazdı: 20 Eyl 2026, 08:47
Özellik İsteği : Kodladığın bu altın değerindeki eserde (yazılım'da) API ile yüklenen modellerden hangileri api tarafından destekleniyor hangileri devredışı bırakılmış olduğunu anlayabilen bir özellik olsa ve sadece desteklenen modeller öne çıkartılsa yazılım tarafından daha iyi olur...
emin ol bunu isterdim ancak bu servis sağlayıcıların bir reklam politikası, bende şu kadar model var derler ama çoğu çalışmaz, bunu algılayabilecek bir sistem zor, api tarafında ise böyle bir kontrol mekanizması yok, yani kısacası mecbur denemek gerekiyor...
Teşekkürler ve canının sağ olsun..Bu kadarını yaptın ya yeter...Eline sağlık...
Kullanıcı avatarı
H4NOK
Megabyte1
Megabyte1
Mesajlar: 948
Kayıt: 11 Nis 2022, 17:18
cinsiyet: Erkek
Teşekkür etti: 336 kez
Teşekkür edildi: 596 kez
İletişim:

Re: Tamam Ve Özellik İsteği (Geri Bildirim)

Mesaj gönderen H4NOK »

TRWE_2012 yazdı: 20 Eyl 2026, 09:03
H4NOK yazdı: 20 Eyl 2026, 08:59
TRWE_2012 yazdı: 20 Eyl 2026, 08:47
Özellik İsteği : Kodladığın bu altın değerindeki eserde (yazılım'da) API ile yüklenen modellerden hangileri api tarafından destekleniyor hangileri devredışı bırakılmış olduğunu anlayabilen bir özellik olsa ve sadece desteklenen modeller öne çıkartılsa yazılım tarafından daha iyi olur...
emin ol bunu isterdim ancak bu servis sağlayıcıların bir reklam politikası, bende şu kadar model var derler ama çoğu çalışmaz, bunu algılayabilecek bir sistem zor, api tarafında ise böyle bir kontrol mekanizması yok, yani kısacası mecbur denemek gerekiyor...
Teşekkürler ve canının sağ olsun..Bu kadarını yaptın ya yeter...Eline sağlık...
est. ne demek..
yeni güncellemeside 3 5 güne çıkar..
dediğin ai lerin hangilerinin devredışı olduğunu bulmak için alternatif bazı şeyler deneyeceğim oda aklımda...
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15834
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2793 kez
Teşekkür edildi: 5799 kez

Re: Tamam Ve Özellik İsteği (Geri Bildirim)

Mesaj gönderen TRWE_2012 »

H4NOK yazdı: 20 Eyl 2026, 09:11
TRWE_2012 yazdı: 20 Eyl 2026, 09:03
H4NOK yazdı: 20 Eyl 2026, 08:59

emin ol bunu isterdim ancak bu servis sağlayıcıların bir reklam politikası, bende şu kadar model var derler ama çoğu çalışmaz, bunu algılayabilecek bir sistem zor, api tarafında ise böyle bir kontrol mekanizması yok, yani kısacası mecbur denemek gerekiyor...
Teşekkürler ve canının sağ olsun..Bu kadarını yaptın ya yeter...Eline sağlık...
est. ne demek..
yeni güncellemeside 3 5 güne çıkar..
dediğin ai lerin hangilerinin devredışı olduğunu bulmak için alternatif bazı şeyler deneyeceğim oda aklımda...
Bu betikler sana bir fikir verebilir...

EKRAN GÖRÜNTÜSÜ :
Resim
KOD İÇERİĞİ : ( NIM_EndpointAndCapability_TR.ps1 )

Kod: Tümünü seç

# NVIDIA NIM endpoint test and capability classification
# Mode 1: compares /chat/completions and /completions for chosen models.
# Mode 2: probes chat-capable models and groups them by coding / general ability.
# The API key is never written to disk or to any log.

# Runtime block: pin console encoding to UTF-8 regardless of chcp
try {
    $utf8 = New-Object System.Text.UTF8Encoding($false)
    [Console]::OutputEncoding = $utf8
    [Console]::InputEncoding  = $utf8
    $OutputEncoding = $utf8
} catch {}

$ErrorActionPreference = "Stop"
try {
    [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
} catch {}

$script:BaseUrl = "https://integrate.api.nvidia.com/v1"
$script:Desktop = [Environment]::GetFolderPath("Desktop")
$script:Headers = @{}
$script:DelayMs = 1600

# Prompts sent to the models (data, not console text)
$script:ChatPrompt = "Hi! How are you today? Answer in one short sentence."
$script:CodePrompt = "Write a single Python statement that prints Hello. Output only the code."
$script:CompletionPrompt = "# Python function that adds two numbers`ndef add(a, b):`n"

# Name patterns used for the heuristics
$script:CodeNamePattern = "code"
$script:NonChatPattern = "embed|guard|safety|reward|parse|clip|translate|vila|neva|kosmos|deplot|fuyu|vlm|detector|calibration|topic-control|cosmos|vision|retriev"

$M = @{
    Title = 'NVIDIA NIM uç nokta testi ve yetenek sınıflandırması'
    KeyPrompt = 'NVIDIA API anahtarınızı girin (yazdıkça görünmez)'
    KeyFromEnv = 'NVIDIA_API_KEY ortam değişkenindeki anahtar kullanılıyor.'
    KeyEmpty = 'Anahtar girilmedi. Yapılacak bir işlem yok.'
    Menu1 = '  1) Uç nokta testi: /chat/completions ile /completions karşılaştırması'
    Menu2 = '  2) Yetenek sınıflandırması: yalnızca kodlama ile kodlama ve günlük sohbet'
    MenuPrompt = 'Bir seçenek belirleyin (1 veya 2)'
    MenuInvalid = 'Geçersiz seçim. Hiçbir işlem yapılmadı.'
    Requesting = 'Model listesi şu adresten isteniyor: {0}'
    RateWait = 'İstek hızı sınırına takıldı (HTTP 429). Yeniden denemeden önce 20 saniye bekleniyor...'
    EpDefaults = 'Sohbet testi için varsayılan modeller: {0}'
    EpModelsPrompt = 'Model adlarını virgülle ayırarak girin (boş bırakırsanız varsayılanlar kullanılır)'
    Testing = '[{0}/{1}] {2} modeli {3} yolu ile sınanıyor ...'
    SavedCsv = 'CSV dosyası şuraya kaydedildi: {0}'
    SavedTxt = 'Özet dosyası şuraya kaydedildi: {0}'
    ProbeFilterPrompt = 'Sınanacak modelleri sınırlamak için bir anahtar sözcük girin (boş = tüm adaylar)'
    Candidates = 'Sınanacak sohbet türü aday model sayısı: {0} (ada göre dışlanan: {1})'
    NoCandidates = 'Eşleşen aday model yok. Sınanacak bir şey yok.'
    EstTime = 'Her model için 2 istek ve aralarda bekleme gerekir, bu nedenle işlem birkaç dakika sürebilir. Durdurmak için Ctrl+C basın; sınanan satırlar CSV dosyasına zaten kaydedilmiştir.'
    ConfirmPrompt = 'Devam edilsin mi? (E/H)'
    Cancelled = 'İptal edildi.'
    Probing = '[{0}/{1}] {2} sınanıyor ...'
    HintCode = 'adında code var'
    HintGeneral = 'genel amaçlı ad'
    SummaryTitle = 'Yetenek sınıflandırması özeti'
    Note = 'Not: Bu sınıflandırma sezgiseldir. Model adına ve iki kısa test istemine dayanır, bu nedenle bir kıyaslama sonucu değil, yol gösterici olarak değerlendirin.'
    C_CodeOnly = 'Yalnızca kodlama (kod yanıtı tamam, sohbet yanıtı başarısız)'
    C_CompletionOnly = 'Yalnızca kodlama (yalnızca tamamlama uç noktası, sohbet yok)'
    C_CodeFocused = 'Adında code olan ve sohbet de edebilen model'
    C_CodeAndGeneral = 'Kodlama ve günlük sohbet'
    C_GeneralOnly = 'Yalnızca günlük sohbet (kod testi başarısız)'
    C_NoChat = 'Kullanılabilir sohbet veya tamamlama uç noktası yok'
    C_Inconclusive = 'Belirsiz (hız sınırı, zaman aşımı veya sunucu hatası)'
    C_Unclear = 'Belirsiz (iki test de kullanılamaz yanıt verdi)'
    G_CodeOnly = 'YALNIZCA KODLAMA - sohbet başarısız, kod çalışıyor'
    G_CompletionOnly = 'YALNIZCA KODLAMA - yalnızca tamamlama uç noktası'
    G_CodeFocused = 'ADINDA CODE VAR, SOHBET DE EDİYOR'
    G_CodeAndGeneral = 'KODLAMA VE GÜNLÜK SOHBET'
    G_GeneralOnly = 'YALNIZCA GÜNLÜK SOHBET'
    G_NoChat = 'KULLANILABİLİR UÇ NOKTA YOK'
    G_Inconclusive = 'BELİRSİZ'
    G_Unclear = 'NETLEŞMEDİ'
    Http401 = 'HTTP 401: anahtar geçersiz, süresi dolmuş ya da hatalı biçimde.'
    Http403 = 'HTTP 403: anahtarın yetkisi yok. Anahtar oluşturulurken Public API Endpoints seçilmiş mi kontrol edin.'
    Http404 = 'HTTP 404: uç nokta veya model bulunamadı.'
    Http429 = 'HTTP 429: istek hızı sınırı aşıldı. Bir dakika bekleyip yeniden deneyin.'
    HttpOther = 'HTTP hata kodu: {0}'
    NetError = 'HTTP yanıtı alınamadı. İnternet bağlantınızı, proxy ya da güvenlik duvarınızı kontrol edin.'
    Detail = 'Sunucu iletisi: {0}'
}

function Get-ErrorInfo {
    param($ErrorRecord)
    $code = $null
    $body = $null
    try {
        if ($ErrorRecord.Exception.Response) {
            $code = [int]$ErrorRecord.Exception.Response.StatusCode
        }
    } catch {}
    try {
        if ($ErrorRecord.ErrorDetails -and $ErrorRecord.ErrorDetails.Message) {
            $body = $ErrorRecord.ErrorDetails.Message
        }
    } catch {}
    if (-not $body) {
        try {
            $sr = New-Object System.IO.StreamReader($ErrorRecord.Exception.Response.GetResponseStream())
            $body = $sr.ReadToEnd()
            $sr.Close()
        } catch {}
    }
    if ($body -and $body.Length -gt 300) { $body = $body.Substring(0, 300) }
    $msg = ""
    try { $msg = [string]$ErrorRecord.Exception.Message } catch {}
    return @{ Code = $code; Body = $body; Message = $msg }
}

function Get-ShortText {
    param([string]$Text, [int]$Max = 70)
    if ([string]::IsNullOrEmpty($Text)) { return "" }
    $t = ($Text -replace "\s+", " ").Trim()
    if ($t.Length -gt $Max) { $t = $t.Substring(0, $Max) + "..." }
    return $t
}

function Get-ApiKey {
    $key = $env:NVIDIA_API_KEY
    if ([string]::IsNullOrWhiteSpace($key)) {
        $secure = Read-Host $M.KeyPrompt -AsSecureString
        $bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
        try {
            $key = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)
        } finally {
            [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
        }
    } else {
        Write-Host $M.KeyFromEnv
    }
    if ($null -eq $key) { $key = "" }
    return $key.Trim()
}

function Invoke-Nim {
    param([string]$Path, [hashtable]$Body)
    $json = ConvertTo-Json -InputObject $Body -Depth 6 -Compress
    $bytes = [System.Text.Encoding]::UTF8.GetBytes($json)
    $sw = [System.Diagnostics.Stopwatch]::StartNew()
    $attempt = 0
    while ($true) {
        $attempt++
        try {
            $resp = Invoke-RestMethod -Uri ($script:BaseUrl + $Path) -Method Post -Headers $script:Headers -Body $bytes -ContentType "application/json" -TimeoutSec 90
            $sw.Stop()
            return [pscustomobject]@{ Code = 200; Ms = [int]$sw.ElapsedMilliseconds; Resp = $resp; Error = "" }
        } catch {
            $info = Get-ErrorInfo $_
            if ($info.Code -eq 429 -and $attempt -lt 3) {
                Write-Host ("  " + $M.RateWait)
                Start-Sleep -Seconds 20
                continue
            }
            $sw.Stop()
            $errText = $info.Body
            if (-not $errText) { $errText = $info.Message }
            return [pscustomobject]@{ Code = $info.Code; Ms = [int]$sw.ElapsedMilliseconds; Resp = $null; Error = [string]$errText }
        }
    }
}

function Get-ChatText {
    param($Resp)
    $t = ""
    try {
        $msgObj = $Resp.choices[0].message
        if ($msgObj.content) { $t += [string]$msgObj.content }
        if ($msgObj.reasoning_content) { $t += " " + [string]$msgObj.reasoning_content }
    } catch {}
    return $t.Trim()
}

function Get-CompletionText {
    param($Resp)
    $t = ""
    try {
        if ($Resp.choices[0].text) { $t = [string]$Resp.choices[0].text }
    } catch {}
    return $t.Trim()
}

function Invoke-ChatCall {
    param([string]$Model, [string]$Prompt)
    $body = @{
        model       = $Model
        messages    = @(@{ role = "user"; content = $Prompt })
        max_tokens  = 512
        temperature = 0.2
        stream      = $false
    }
    return Invoke-Nim -Path "/chat/completions" -Body $body
}

function Invoke-CompletionCall {
    param([string]$Model, [string]$Prompt)
    $body = @{
        model       = $Model
        prompt      = $Prompt
        max_tokens  = 64
        temperature = 0.2
        stream      = $false
    }
    return Invoke-Nim -Path "/completions" -Body $body
}

function Get-ModelIds {
    $url = $script:BaseUrl + "/models"
    Write-Host ($M.Requesting -f $url)
    $resp = Invoke-RestMethod -Uri $url -Method Get -Headers $script:Headers -TimeoutSec 60
    return @($resp.data | ForEach-Object { $_.id } | Sort-Object)
}

function Write-HttpHint {
    param($Info)
    $c = $Info.Code
    if ($null -eq $c)   { Write-Host $M.NetError }
    elseif ($c -eq 401) { Write-Host $M.Http401 }
    elseif ($c -eq 403) { Write-Host $M.Http403 }
    elseif ($c -eq 404) { Write-Host $M.Http404 }
    elseif ($c -eq 429) { Write-Host $M.Http429 }
    else                { Write-Host ($M.HttpOther -f $c) }
    if ($Info.Body) { Write-Host ($M.Detail -f $Info.Body) }
}

function Show-Table {
    param($Rows)
    ($Rows | Format-Table -AutoSize | Out-String -Width 220).TrimEnd() | Write-Host
}

# ---------------------------------------------------------------- Mode 1
function Start-EndpointTest {
    $defaults = @(
        "z-ai/glm-5.3-flash",
        "mistralai/codestral-22b-instruct-v0.1",
        "deepseek-ai/deepseek-coder-6.7b-instruct",
        "ibm/granite-8b-code-instruct"
    )
    Write-Host ""
    Write-Host ($M.EpDefaults -f ($defaults -join ", "))
    $in = Read-Host $M.EpModelsPrompt
    if ([string]::IsNullOrWhiteSpace($in)) {
        $models = $defaults
    } else {
        $models = @($in.Split(",") | ForEach-Object { $_.Trim() } | Where-Object { $_.Length -gt 0 })
    }

    $tests = @()
    $tests += [pscustomobject]@{ Model = "bigcode/starcoder2-15b"; Path = "/chat/completions" }
    $tests += [pscustomobject]@{ Model = "bigcode/starcoder2-15b"; Path = "/completions" }
    foreach ($modelName in $models) {
        $tests += [pscustomobject]@{ Model = $modelName; Path = "/chat/completions" }
    }

    $rows = @()
    $i = 0
    foreach ($t in $tests) {
        $i++
        Write-Host ($M.Testing -f $i, $tests.Count, $t.Model, $t.Path)
        if ($t.Path -eq "/completions") {
            $r = Invoke-CompletionCall -Model $t.Model -Prompt $script:CompletionPrompt
            $text = if ($r.Code -eq 200) { Get-CompletionText $r.Resp } else { "" }
        } else {
            $r = Invoke-ChatCall -Model $t.Model -Prompt $script:ChatPrompt
            $text = if ($r.Code -eq 200) { Get-ChatText $r.Resp } else { "" }
        }

        if ($r.Code -eq 200 -and $text.Length -gt 0) { $result = "OK" }
        elseif ($r.Code -eq 200)                     { $result = "EMPTY" }
        else                                         { $result = "FAIL" }

        $detail = if ($r.Code -eq 200) { Get-ShortText $text } else { Get-ShortText $r.Error 90 }
        $codeText = if ($null -eq $r.Code) { "none" } else { [string]$r.Code }

        $rows += [pscustomobject]@{
            Model    = $t.Model
            Endpoint = $t.Path
            HTTP     = $codeText
            Ms       = $r.Ms
            Result   = $result
            Detail   = $detail
        }
        Start-Sleep -Milliseconds $script:DelayMs
    }

    Write-Host ""
    Show-Table $rows

    $csv = Join-Path $script:Desktop ("nim_endpoint_test_{0}.csv" -f (Get-Date -Format "yyyyMMdd_HHmmss"))
    $rows | Export-Csv -Path $csv -NoTypeInformation -Encoding UTF8
    Write-Host ""
    Write-Host ($M.SavedCsv -f $csv)
}

# ---------------------------------------------------------------- Mode 2
function Get-ProbeRow {
    param([string]$Model)

    $nameCode = ($Model -match $script:CodeNamePattern)
    $hint = if ($nameCode) { $M.HintCode } else { $M.HintGeneral }

    $chatHttp = "none"
    $chatOk = $false
    $codeOk = $false
    $codeShown = "-"
    $class = "Unclear"

    $r1 = Invoke-ChatCall -Model $Model -Prompt $script:ChatPrompt
    if ($null -ne $r1.Code) { $chatHttp = [string]$r1.Code }

    if ($r1.Code -eq 200) {
        $t1 = Get-ChatText $r1.Resp
        $chatOk = ($t1.Length -ge 3 -and $t1 -match "[A-Za-z]")
        Start-Sleep -Milliseconds $script:DelayMs

        $r2 = Invoke-ChatCall -Model $Model -Prompt $script:CodePrompt
        if ($r2.Code -eq 200) {
            $t2 = Get-ChatText $r2.Resp
            $codeOk = ($t2 -match "(?i)print\s*\(")
            $codeShown = if ($codeOk) { "OK" } else { "NO" }
        } else {
            $codeShown = "HTTP " + $(if ($null -eq $r2.Code) { "none" } else { [string]$r2.Code })
        }

        if     ($chatOk -and $codeOk -and $nameCode)      { $class = "CodeFocused" }
        elseif ($chatOk -and $codeOk)                     { $class = "CodeAndGeneral" }
        elseif (-not $chatOk -and $codeOk)                { $class = "CodeOnly" }
        elseif ($chatOk -and $r2.Code -eq 200)            { $class = "GeneralOnly" }
        elseif ($r2.Code -ne 200)                         { $class = "Inconclusive" }
        else                                              { $class = "Unclear" }
    }
    elseif ($null -ne $r1.Code -and @(400, 404, 405, 422) -contains $r1.Code) {
        Start-Sleep -Milliseconds $script:DelayMs
        $r3 = Invoke-CompletionCall -Model $Model -Prompt $script:CompletionPrompt
        if ($r3.Code -eq 200 -and (Get-CompletionText $r3.Resp).Length -gt 0) {
            $class = "CompletionOnly"
            $codeShown = "completions OK"
        } else {
            $class = "NoChat"
            $codeShown = "completions " + $(if ($null -eq $r3.Code) { "none" } else { [string]$r3.Code })
        }
    }
    else {
        $class = "Inconclusive"
    }

    return [pscustomobject]@{
        Model    = $Model
        NameHint = $hint
        ChatHTTP = $chatHttp
        ChatOk   = $(if ($chatOk) { "OK" } else { "NO" })
        CodeTest = $codeShown
        ClassKey = $class
        Class    = $M["C_" + $class]
    }
}

function Start-CapabilityProbe {
    Write-Host ""
    $ids = Get-ModelIds
    $candidates = @($ids | Where-Object { $_ -notmatch $script:NonChatPattern })
    $excluded = $ids.Count - $candidates.Count

    $kw = Read-Host $M.ProbeFilterPrompt
    if (-not [string]::IsNullOrWhiteSpace($kw)) {
        $candidates = @($candidates | Where-Object { $_ -like ("*" + $kw.Trim() + "*") })
    }

    Write-Host ($M.Candidates -f $candidates.Count, $excluded)
    if ($candidates.Count -eq 0) {
        Write-Host $M.NoCandidates
        return
    }
    Write-Host $M.EstTime
    $ans = Read-Host $M.ConfirmPrompt
    if (@("y", "e") -notcontains $ans.Trim().ToLower()) {
        Write-Host $M.Cancelled
        return
    }

    $stamp = Get-Date -Format "yyyyMMdd_HHmmss"
    $csv = Join-Path $script:Desktop ("nim_capability_{0}.csv" -f $stamp)
    $txt = Join-Path $script:Desktop ("nim_capability_{0}.txt" -f $stamp)

    $rows = @()
    $i = 0
    foreach ($id in $candidates) {
        $i++
        Write-Host ($M.Probing -f $i, $candidates.Count, $id)
        $row = Get-ProbeRow -Model $id
        Write-Host ("    -> " + $row.Class)
        $rows += $row
        $row | Export-Csv -Path $csv -Append -NoTypeInformation -Encoding UTF8
        Start-Sleep -Milliseconds $script:DelayMs
    }

    Write-Host ""
    Show-Table ($rows | Select-Object Model, NameHint, ChatHTTP, ChatOk, CodeTest, Class)

    $order = @("CodeOnly", "CompletionOnly", "CodeFocused", "CodeAndGeneral", "GeneralOnly", "NoChat", "Inconclusive", "Unclear")
    $lines = @()
    $lines += $M.SummaryTitle
    $lines += ""
    foreach ($k in $order) {
        $group = @($rows | Where-Object { $_.ClassKey -eq $k })
        if ($group.Count -eq 0) { continue }
        $lines += ("{0} ({1})" -f $M["G_" + $k], $group.Count)
        foreach ($g in $group) { $lines += ("  " + $g.Model) }
        $lines += ""
    }
    $lines += $M.Note

    Write-Host ""
    $lines | ForEach-Object { Write-Host $_ }
    Set-Content -Path $txt -Value $lines -Encoding UTF8

    Write-Host ""
    Write-Host ($M.SavedCsv -f $csv)
    Write-Host ($M.SavedTxt -f $txt)
}

# ---------------------------------------------------------------- Main
function Invoke-Main {
    Write-Host ("=== " + $M.Title + " ===")
    Write-Host ""

    $apiKey = Get-ApiKey
    if ($apiKey.Length -eq 0) {
        Write-Host $M.KeyEmpty
        return
    }
    $script:Headers = @{ "Authorization" = "Bearer " + $apiKey; "Accept" = "application/json" }

    Write-Host ""
    Write-Host $M.Menu1
    Write-Host $M.Menu2
    $choice = (Read-Host $M.MenuPrompt).Trim()

    try {
        if ($choice -eq "1")     { Start-EndpointTest }
        elseif ($choice -eq "2") { Start-CapabilityProbe }
        else                     { Write-Host $M.MenuInvalid }
    } catch {
        Write-HttpHint (Get-ErrorInfo $_)
    }
}

try {
    Invoke-Main
} catch {
    Write-Host ("Beklenmeyen hata: " + $_.Exception.Message)
}

Read-Host "`nPress ENTER to exit."
DİĞER BETİK ( NIM_ModelList_TR.ps1 ) :

Kod: Tümünü seç

# NVIDIA NIM model list test
# Queries the /models endpoint, shows the result, and saves the full list to the Desktop.
# The API key is never written to disk or to any log.

# Runtime block: pin console encoding to UTF-8 regardless of chcp
try {
    $utf8 = New-Object System.Text.UTF8Encoding($false)
    [Console]::OutputEncoding = $utf8
    [Console]::InputEncoding  = $utf8
    $OutputEncoding = $utf8
} catch {}

$ErrorActionPreference = "Stop"
try {
    [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
} catch {}

$BaseUrl = "https://integrate.api.nvidia.com/v1"
$Desktop = [Environment]::GetFolderPath("Desktop")

$M = @{
    Title = 'NVIDIA NIM model listesi testi'
    KeyPrompt = 'NVIDIA API anahtarınızı girin (yazdıkça görünmez)'
    KeyFromEnv = 'NVIDIA_API_KEY ortam değişkenindeki anahtar kullanılıyor.'
    KeyEmpty = 'Anahtar girilmedi. Yapılacak bir işlem yok.'
    Requesting = 'Model listesi şu adresten isteniyor: {0}'
    Success = 'İstek başarılı. Dönen model sayısı: {0}'
    Saved = 'Tam liste şu dosyaya kaydedildi: {0}'
    StarYes = 'bigcode/starcoder2-15b: listede VAR.'
    StarNo = 'bigcode/starcoder2-15b: listede YOK.'
    FilterPrompt = 'Listeyi süzmek için bir anahtar sözcük girin (tümü için boş bırakın)'
    NoMatch = 'Anahtar sözcükle eşleşen model bulunamadı.'
    ListHeader = 'Gösterilen model sayısı: {0}'
    Http401 = 'HTTP 401: anahtar geçersiz, süresi dolmuş ya da hatalı biçimde.'
    Http403 = 'HTTP 403: anahtarın yetkisi yok. Anahtar oluşturulurken Public API Endpoints seçilmiş mi kontrol edin.'
    Http404 = 'HTTP 404: uç nokta bulunamadı. Base URL adresini kontrol edin.'
    Http429 = 'HTTP 429: istek hızı sınırı aşıldı. Bir dakika bekleyip yeniden deneyin.'
    HttpOther = 'HTTP hata kodu: {0}'
    NetError = 'HTTP yanıtı alınamadı. İnternet bağlantınızı, proxy ya da güvenlik duvarınızı kontrol edin.'
    Detail = 'Sunucu iletisi: {0}'
}

function Get-ErrorInfo {
    param($ErrorRecord)
    $code = $null
    $body = $null
    try {
        if ($ErrorRecord.Exception.Response) {
            $code = [int]$ErrorRecord.Exception.Response.StatusCode
        }
    } catch {}
    try {
        if ($ErrorRecord.ErrorDetails -and $ErrorRecord.ErrorDetails.Message) {
            $body = $ErrorRecord.ErrorDetails.Message
        }
    } catch {}
    if (-not $body) {
        try {
            $sr = New-Object System.IO.StreamReader($ErrorRecord.Exception.Response.GetResponseStream())
            $body = $sr.ReadToEnd()
            $sr.Close()
        } catch {}
    }
    if ($body -and $body.Length -gt 300) { $body = $body.Substring(0, 300) }
    return @{ Code = $code; Body = $body }
}

function Invoke-Main {
    Write-Host ("=== " + $M.Title + " ===")
    Write-Host ""

    $ApiKey = $env:NVIDIA_API_KEY
    if ([string]::IsNullOrWhiteSpace($ApiKey)) {
        $secure = Read-Host $M.KeyPrompt -AsSecureString
        $bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
        try {
            $ApiKey = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)
        } finally {
            [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
        }
    } else {
        Write-Host $M.KeyFromEnv
    }

    if ($null -eq $ApiKey) { $ApiKey = "" }
    $ApiKey = $ApiKey.Trim()
    if ($ApiKey.Length -eq 0) {
        Write-Host $M.KeyEmpty
        return
    }

    $url = $BaseUrl + "/models"
    Write-Host ($M.Requesting -f $url)

    $headers = @{ "Authorization" = "Bearer " + $ApiKey; "Accept" = "application/json" }

    try {
        $resp = Invoke-RestMethod -Uri $url -Method Get -Headers $headers -TimeoutSec 60
    } catch {
        $info = Get-ErrorInfo $_
        $c = $info.Code
        if ($null -eq $c)   { Write-Host $M.NetError }
        elseif ($c -eq 401) { Write-Host $M.Http401 }
        elseif ($c -eq 403) { Write-Host $M.Http403 }
        elseif ($c -eq 404) { Write-Host $M.Http404 }
        elseif ($c -eq 429) { Write-Host $M.Http429 }
        else                { Write-Host ($M.HttpOther -f $c) }
        if ($info.Body) { Write-Host ($M.Detail -f $info.Body) }
        return
    }

    $ids = @($resp.data | ForEach-Object { $_.id } | Sort-Object)
    Write-Host ($M.Success -f $ids.Count)
    Write-Host ""

    $outFile = Join-Path $Desktop ("nim_models_{0}.txt" -f (Get-Date -Format "yyyyMMdd_HHmmss"))
    Set-Content -Path $outFile -Value $ids -Encoding UTF8
    Write-Host ($M.Saved -f $outFile)
    Write-Host ""

    if ($ids -contains "bigcode/starcoder2-15b") { Write-Host $M.StarYes } else { Write-Host $M.StarNo }
    Write-Host ""

    $filter = Read-Host $M.FilterPrompt
    if ([string]::IsNullOrWhiteSpace($filter)) {
        $shown = $ids
    } else {
        $shown = @($ids | Where-Object { $_ -like ("*" + $filter.Trim() + "*") })
    }

    Write-Host ""
    if ($shown.Count -eq 0) {
        Write-Host $M.NoMatch
    } else {
        Write-Host ($M.ListHeader -f $shown.Count)
        $shown | ForEach-Object { Write-Host ("  " + $_) }
    }
}

try {
    Invoke-Main
} catch {
    Write-Host ("Beklenmeyen hata: " + $_.Exception.Message)
}

Read-Host "`nPress ENTER to exit."
Kullanıcı avatarı
H4NOK
Megabyte1
Megabyte1
Mesajlar: 948
Kayıt: 11 Nis 2022, 17:18
cinsiyet: Erkek
Teşekkür etti: 336 kez
Teşekkür edildi: 596 kez
İletişim:

Re: H4 AI Code Studio - Gelişmiş Kodlama Asistanı Ve Ajanı [yayınlandı]

Mesaj gönderen H4NOK »

mantıklı ama bazen model aktif olsada cevap vermeyebiliyor, bant daraltma ile modelin cevaplama zamanını düşürüyorlar, maksimum cevaplama pingi ile bakmak yeterli olamayabiliyor ama yinede denemekte fayda var inceleyeceğim betiği, teşekkür ederim..
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15834
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2793 kez
Teşekkür edildi: 5799 kez

Re: H4 AI Code Studio - Gelişmiş Kodlama Asistanı Ve Ajanı [yayınlandı]

Mesaj gönderen TRWE_2012 »

H4NOK yazdı: 20 Eyl 2026, 09:44 mantıklı ama bazen model aktif olsada cevap vermeyebiliyor, bant daraltma ile modelin cevaplama zamanını düşürüyorlar, maksimum cevaplama pingi ile bakmak yeterli olamayabiliyor ama yinede denemekte fayda var inceleyeceğim betiği, teşekkür ederim..
Al bu da işine yaracaktır...Bugün forum'da fırtına gibiyim... :-D

EKRAN GÖRÜNTÜSÜ :
Resim
KOD İÇERİĞİ ( NIM_SpeedTest_TR.ps1 ) :

Kod: Tümünü seç

# NVIDIA NIM response speed test
# Measures, per model and per context size (prompt length):
#   TTFB, time to first token (TTFT), total time, tokens per second, and stream throughput in Mbps.
# Optional baseline: API latency and internet download speed in Mbps.
# The API key is never written to disk or to any log.

# Runtime block: pin console encoding to UTF-8 regardless of chcp
try {
    $utf8 = New-Object System.Text.UTF8Encoding($false)
    [Console]::OutputEncoding = $utf8
    [Console]::InputEncoding  = $utf8
    $OutputEncoding = $utf8
} catch {}

$ErrorActionPreference = "Stop"
try {
    [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
} catch {}

$script:BaseUrl = "https://integrate.api.nvidia.com/v1"
$script:DownloadUrl = "https://speed.cloudflare.com/__down?bytes=20000000"
$script:Desktop = [Environment]::GetFolderPath("Desktop")
$script:ApiKey = ""
$script:Http = $null
$script:DelayMs = 1600
$script:MaxTokens = 256

$script:FillerSentence = "The quick brown fox jumps over the lazy dog. "
$script:Instruction = "Write about 150 words describing the sea."

$M = @{
    Title = 'NVIDIA NIM yanıt hızı testi'
    KeyPrompt = 'NVIDIA API anahtarınızı girin (yazdıkça görünmez)'
    KeyFromEnv = 'NVIDIA_API_KEY ortam değişkenindeki anahtar kullanılıyor.'
    KeyEmpty = 'Anahtar girilmedi. Yapılacak bir işlem yok.'
    Menu1 = '  1) Hızlı test: yalnızca kısa istem'
    Menu2 = '  2) Bağlam ölçekleme testi: kısa, orta (yaklaşık 1.100 token) ve uzun (yaklaşık 4.400 token) istemler'
    MenuPrompt = 'Bir seçenek belirleyin (1 veya 2)'
    MenuInvalid = 'Geçersiz seçim. Hiçbir işlem yapılmadı.'
    ModelsDefaults = 'Varsayılan modeller: {0}'
    ModelsPrompt = 'Model adlarını virgülle ayırarak girin (boş bırakırsanız varsayılanlar kullanılır)'
    RepeatPrompt = 'Test başına tekrar sayısı, 1 ile 5 arası (boş = 2)'
    BaselinePrompt = 'API gecikmesi ve internet indirme hızı da ölçülsün mü? İndirme testi speed.cloudflare.com adresinden yaklaşık 20 MB veri indirir (E/H)'
    LatencyStart = 'API gecikmesi ölçülüyor (/models adresine 5 küçük istek) ...'
    LatencyResult = 'API gecikmesi: ilk istek (TLS el sıkışması dahil) {0} ms; sonraki isteklerde en az/ortalama/en çok {1}/{2}/{3} ms'
    LatencyFail = 'Gecikme testi başarısız: {0}'
    DownloadStart = 'İnternet indirme hızı ölçülüyor ...'
    DownloadResult = 'İnternet indirme: {0} MB, {1} sn içinde = {2} Mbps'
    DownloadFail = 'İndirme testi başarısız: {0}'
    PlanInfo = 'Planlanan istek sayısı: {0} ({1} model x {2} bağlam düzeyi x {3} tekrar). Durdurmak için Ctrl+C basın; tamamlanan satırlar CSV dosyasına zaten kaydedilmiştir.'
    Running = '[{0}/{1}] {2} | bağlam: {3} | tekrar {4}'
    RunOk = 'TTFT {0} ms, toplam {1} ms, üretim {2} tok/sn, {3} çıktı token'
    RunFail = 'başarısız, HTTP {0}'
    NoTokens = 'hiç token alınmadı'
    RateWait = 'İstek hızı sınırına takıldı (HTTP 429). Yeniden denemeden önce 20 saniye bekleniyor...'
    SummaryTitle = 'Yanıt hızı özeti'
    BaselineTitle = 'Ağ temel ölçümü'
    RankTitle = 'Üretim hızına göre sıralama (kısa bağlam, yüksek olan iyidir)'
    NoRank = 'Sıralanacak başarılı bir deneme yok.'
    Note = 'Not: TTFT, akışla gelen ilk tokene kadar geçen süredir (akıl yürüten modeller önce akıl yürütme metnini akıtabilir). Üretim tok/sn değeri ilk ve son token arasında ölçülür. Token sayıları mümkünse sunucunun kullanım bildiriminden, aksi hâlde akış parçalarından alınır. Akış Mbps değeri küçüktür, çünkü sınırı bağlantınız değil, modelin üretim hızıdır. Sonuçlar sunucu yüküne göre değişir, bu nedenle testi farklı zamanlarda yineleyin.'
    SavedCsv = 'CSV dosyası şuraya kaydedildi: {0}'
    SavedTxt = 'Özet dosyası şuraya kaydedildi: {0}'
}

function Get-ApiKey {
    $key = $env:NVIDIA_API_KEY
    if ([string]::IsNullOrWhiteSpace($key)) {
        $secure = Read-Host $M.KeyPrompt -AsSecureString
        $bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
        try {
            $key = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)
        } finally {
            [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
        }
    } else {
        Write-Host $M.KeyFromEnv
    }
    if ($null -eq $key) { $key = "" }
    return $key.Trim()
}

function Get-InnerMessage {
    param($Exception)
    $ex = $Exception
    while ($null -ne $ex.InnerException) { $ex = $ex.InnerException }
    return [string]$ex.Message
}

function Get-Prompt {
    param([string]$Level)
    if ($Level -eq "short")  { return $script:Instruction }
    $reps = if ($Level -eq "medium") { 100 } else { 400 }
    $filler = $script:FillerSentence * $reps
    return ("Background text (ignore its meaning):`n" + $filler + "`n`n" + $script:Instruction)
}

function Invoke-StreamOnce {
    param([string]$Model, [string]$Prompt, [bool]$UseUsage)

    $result = [pscustomobject]@{
        Code = $null; TtfbMs = $null; TtftMs = $null; TotalMs = $null
        PromptTokens = $null; OutTokens = 0; TokSrc = "chunks"
        Bytes = 0; DecodeTokS = $null; E2ETokS = $null; StreamMbps = $null; Error = ""
    }

    $body = @{
        model       = $Model
        messages    = @(@{ role = "user"; content = $Prompt })
        max_tokens  = $script:MaxTokens
        temperature = 0.2
        stream      = $true
    }
    if ($UseUsage) { $body.stream_options = @{ include_usage = $true } }
    $json = ConvertTo-Json -InputObject $body -Depth 6 -Compress

    $req = $null
    $resp = $null
    $reader = $null
    $sw = [System.Diagnostics.Stopwatch]::StartNew()
    try {
        $req = New-Object System.Net.Http.HttpRequestMessage([System.Net.Http.HttpMethod]::Post, ($script:BaseUrl + "/chat/completions"))
        $req.Headers.Authorization = New-Object System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", $script:ApiKey)
        $req.Content = New-Object System.Net.Http.StringContent($json, [System.Text.Encoding]::UTF8, "application/json")

        $resp = $script:Http.SendAsync($req, [System.Net.Http.HttpCompletionOption]::ResponseHeadersRead).GetAwaiter().GetResult()
        $result.TtfbMs = [int]$sw.ElapsedMilliseconds
        $result.Code = [int]$resp.StatusCode

        if (-not $resp.IsSuccessStatusCode) {
            $errBody = ""
            try { $errBody = $resp.Content.ReadAsStringAsync().GetAwaiter().GetResult() } catch {}
            if ($errBody.Length -gt 200) { $errBody = $errBody.Substring(0, 200) }
            $result.Error = $errBody
        } else {
            $stream = $resp.Content.ReadAsStreamAsync().GetAwaiter().GetResult()
            $reader = New-Object System.IO.StreamReader($stream, [System.Text.Encoding]::UTF8)
            $firstMs = $null
            $lastMs = $null
            $chunks = 0
            $bytes = 0
            $usageOut = $null
            $usageIn = $null

            while ($true) {
                $task = $reader.ReadLineAsync()
                if (-not $task.Wait(90000)) { $result.Error = "stream idle timeout"; break }
                $line = $task.Result
                if ($null -eq $line) { break }
                $bytes += [System.Text.Encoding]::UTF8.GetByteCount($line) + 1
                if (-not $line.StartsWith("data:")) { continue }
                $payload = $line.Substring(5).Trim()
                if ($payload -eq "[DONE]") { break }

                $obj = $null
                try { $obj = $payload | ConvertFrom-Json } catch { continue }
                if ($null -eq $obj) { continue }

                try {
                    if ($obj.usage) {
                        if ($null -ne $obj.usage.completion_tokens) { $usageOut = [int]$obj.usage.completion_tokens }
                        if ($null -ne $obj.usage.prompt_tokens)     { $usageIn = [int]$obj.usage.prompt_tokens }
                    }
                } catch {}

                $delta = $null
                try { $delta = $obj.choices[0].delta } catch {}
                if ($delta) {
                    $piece = ""
                    if ($delta.content)           { $piece += [string]$delta.content }
                    if ($delta.reasoning_content) { $piece += [string]$delta.reasoning_content }
                    if ($delta.reasoning)         { $piece += [string]$delta.reasoning }
                    if ($piece.Length -gt 0) {
                        $now = [int]$sw.ElapsedMilliseconds
                        if ($null -eq $firstMs) { $firstMs = $now }
                        $lastMs = $now
                        $chunks++
                    }
                }
            }

            $sw.Stop()
            $result.TotalMs = [int]$sw.ElapsedMilliseconds
            $result.TtftMs = $firstMs
            $result.Bytes = $bytes
            $result.PromptTokens = $usageIn
            if ($null -ne $usageOut) { $result.OutTokens = $usageOut; $result.TokSrc = "usage" } else { $result.OutTokens = $chunks }

            if ($null -ne $firstMs -and $null -ne $lastMs -and $lastMs -gt $firstMs -and $result.OutTokens -ge 2) {
                $result.DecodeTokS = [math]::Round((($result.OutTokens - 1) / (($lastMs - $firstMs) / 1000.0)), 1)
            }
            if ($result.TotalMs -gt 0 -and $result.OutTokens -gt 0) {
                $result.E2ETokS = [math]::Round(($result.OutTokens / ($result.TotalMs / 1000.0)), 1)
            }
            if ($result.TotalMs -gt 0) {
                $result.StreamMbps = [math]::Round((($bytes * 8) / 1000000.0) / ($result.TotalMs / 1000.0), 4)
            }
        }
    } catch {
        $result.Error = Get-InnerMessage $_.Exception
    } finally {
        if ($null -ne $reader) { $reader.Dispose() }
        if ($null -ne $resp)   { $resp.Dispose() }
        if ($null -ne $req)    { $req.Dispose() }
    }
    return $result
}

function Invoke-StreamTest {
    param([string]$Model, [string]$Prompt)
    $useUsage = $true
    $attempt = 0
    while ($true) {
        $attempt++
        $r = Invoke-StreamOnce -Model $Model -Prompt $Prompt -UseUsage $useUsage
        if ($r.Code -eq 429 -and $attempt -lt 3) {
            Write-Host ("    " + $M.RateWait)
            Start-Sleep -Seconds 20
            continue
        }
        if ($useUsage -and ($r.Code -eq 400 -or $r.Code -eq 422)) {
            $useUsage = $false
            continue
        }
        return $r
    }
}

function Test-ApiLatency {
    Write-Host $M.LatencyStart
    $times = @()
    try {
        for ($i = 0; $i -lt 5; $i++) {
            $req = New-Object System.Net.Http.HttpRequestMessage([System.Net.Http.HttpMethod]::Get, ($script:BaseUrl + "/models"))
            $req.Headers.Authorization = New-Object System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", $script:ApiKey)
            $sw = [System.Diagnostics.Stopwatch]::StartNew()
            $resp = $script:Http.SendAsync($req, [System.Net.Http.HttpCompletionOption]::ResponseHeadersRead).GetAwaiter().GetResult()
            $times += [int]$sw.ElapsedMilliseconds
            $resp.Dispose()
            $req.Dispose()
            Start-Sleep -Milliseconds 300
        }
    } catch {
        Write-Host ($M.LatencyFail -f (Get-InnerMessage $_.Exception))
        return $null
    }
    $rest = @($times | Select-Object -Skip 1)
    $min = ($rest | Measure-Object -Minimum).Minimum
    $max = ($rest | Measure-Object -Maximum).Maximum
    $avg = [math]::Round((($rest | Measure-Object -Average).Average), 0)
    $line = $M.LatencyResult -f $times[0], $min, $avg, $max
    Write-Host $line
    return $line
}

function Test-DownloadSpeed {
    Write-Host $M.DownloadStart
    $client = $null
    $resp = $null
    try {
        $client = New-Object System.Net.Http.HttpClient
        $client.Timeout = [TimeSpan]::FromSeconds(60)
        $sw = [System.Diagnostics.Stopwatch]::StartNew()
        $resp = $client.GetAsync($script:DownloadUrl, [System.Net.Http.HttpCompletionOption]::ResponseHeadersRead).GetAwaiter().GetResult()
        if (-not $resp.IsSuccessStatusCode) {
            Write-Host ($M.DownloadFail -f ("HTTP " + [int]$resp.StatusCode))
            return $null
        }
        $stream = $resp.Content.ReadAsStreamAsync().GetAwaiter().GetResult()
        $buffer = New-Object byte[] 65536
        $total = 0
        while ($true) {
            $n = $stream.Read($buffer, 0, $buffer.Length)
            if ($n -le 0) { break }
            $total += $n
            if ($sw.Elapsed.TotalSeconds -gt 60) { break }
        }
        $sw.Stop()
        $secs = $sw.Elapsed.TotalSeconds
        if ($secs -le 0 -or $total -le 0) {
            Write-Host ($M.DownloadFail -f "no data")
            return $null
        }
        $mbps = [math]::Round((($total * 8) / 1000000.0) / $secs, 1)
        $line = $M.DownloadResult -f ([math]::Round($total / 1048576.0, 1)), ([math]::Round($secs, 1)), $mbps
        Write-Host $line
        return $line
    } catch {
        Write-Host ($M.DownloadFail -f (Get-InnerMessage $_.Exception))
        return $null
    } finally {
        if ($null -ne $resp)   { $resp.Dispose() }
        if ($null -ne $client) { $client.Dispose() }
    }
}

function Get-Avg {
    param($Values, [int]$Digits = 1)
    $v = @($Values | Where-Object { $null -ne $_ })
    if ($v.Count -eq 0) { return $null }
    return [math]::Round((($v | Measure-Object -Average).Average), $Digits)
}

function Format-Num {
    param($Value, [string]$Fmt)
    if ($null -eq $Value) { return "-" }
    return ([double]$Value).ToString($Fmt, [System.Globalization.CultureInfo]::InvariantCulture)
}

function Show-Table {
    param($Rows)
    ($Rows | Format-Table -AutoSize | Out-String -Width 240).TrimEnd() | Write-Host
}

function Invoke-Main {
    Write-Host ("=== " + $M.Title + " ===")
    Write-Host ""

    $script:ApiKey = Get-ApiKey
    if ($script:ApiKey.Length -eq 0) {
        Write-Host $M.KeyEmpty
        return
    }

    Add-Type -AssemblyName System.Net.Http
    $script:Http = New-Object System.Net.Http.HttpClient
    $script:Http.Timeout = [TimeSpan]::FromSeconds(120)

    Write-Host ""
    Write-Host $M.Menu1
    Write-Host $M.Menu2
    $choice = (Read-Host $M.MenuPrompt).Trim()
    if ($choice -eq "1")     { $levels = @("short") }
    elseif ($choice -eq "2") { $levels = @("short", "medium", "long") }
    else {
        Write-Host $M.MenuInvalid
        return
    }

    $defaults = @(
        "z-ai/glm-5.3-flash",
        "openai/gpt-oss-20b",
        "nvidia/nemotron-3.5-lightning-30b-a3b",
        "meta/muse-glimmer-30b"
    )
    Write-Host ""
    Write-Host ($M.ModelsDefaults -f ($defaults -join ", "))
    $in = Read-Host $M.ModelsPrompt
    if ([string]::IsNullOrWhiteSpace($in)) {
        $models = $defaults
    } else {
        $models = @($in.Split(",") | ForEach-Object { $_.Trim() } | Where-Object { $_.Length -gt 0 })
    }

    $repeat = 2
    $rin = Read-Host $M.RepeatPrompt
    $parsed = 0
    if ([int]::TryParse($rin, [ref]$parsed) -and $parsed -ge 1 -and $parsed -le 5) { $repeat = $parsed }

    $baselineAns = Read-Host $M.BaselinePrompt
    $doBaseline = (@("y", "e") -contains $baselineAns.Trim().ToLower())

    $baselineLines = @()
    if ($doBaseline) {
        Write-Host ""
        $l1 = Test-ApiLatency
        if ($l1) { $baselineLines += $l1 }
        $l2 = Test-DownloadSpeed
        if ($l2) { $baselineLines += $l2 }
    }

    $total = $models.Count * $levels.Count * $repeat
    Write-Host ""
    Write-Host ($M.PlanInfo -f $total, $models.Count, $levels.Count, $repeat)

    $stamp = Get-Date -Format "yyyyMMdd_HHmmss"
    $csv = Join-Path $script:Desktop ("nim_speed_{0}.csv" -f $stamp)
    $txt = Join-Path $script:Desktop ("nim_speed_{0}.txt" -f $stamp)

    $rows = @()
    $n = 0
    foreach ($modelName in $models) {
        foreach ($level in $levels) {
            $prompt = Get-Prompt $level
            for ($run = 1; $run -le $repeat; $run++) {
                $n++
                Write-Host ($M.Running -f $n, $total, $modelName, $level, $run)
                $r = Invoke-StreamTest -Model $modelName -Prompt $prompt

                $codeText = if ($null -eq $r.Code) { "none" } else { [string]$r.Code }
                $note = ""
                if ($r.Code -ne 200 -or $r.Error) {
                    $note = ($r.Error -replace "\s+", " ")
                    if ($note.Length -gt 80) { $note = $note.Substring(0, 80) + "..." }
                }
                if ($r.Code -eq 200 -and $null -eq $r.TtftMs -and -not $note) { $note = $M.NoTokens }

                $row = [pscustomobject]@{
                    Model      = $modelName
                    Context    = $level
                    Run        = $run
                    HTTP       = $codeText
                    PromptTok  = $r.PromptTokens
                    OutTok     = $r.OutTokens
                    TokSrc     = $r.TokSrc
                    TtfbMs     = $r.TtfbMs
                    TtftMs     = $r.TtftMs
                    TotalMs    = $r.TotalMs
                    DecodeTokS = $r.DecodeTokS
                    E2ETokS    = $r.E2ETokS
                    StreamMbps = $r.StreamMbps
                    Note       = $note
                }
                $rows += $row
                $row | Export-Csv -Path $csv -Append -NoTypeInformation -Encoding UTF8

                if ($r.Code -eq 200 -and $null -ne $r.TtftMs) {
                    Write-Host ("    -> " + ($M.RunOk -f $r.TtftMs, $r.TotalMs, $r.DecodeTokS, $r.OutTokens))
                } else {
                    Write-Host ("    -> " + ($M.RunFail -f $codeText) + " " + $note)
                }
                Start-Sleep -Milliseconds $script:DelayMs
            }
        }
    }

    # Summary: average per model and context (successful runs only)
    $summary = @()
    foreach ($modelName in $models) {
        foreach ($level in $levels) {
            $grp = @($rows | Where-Object { $_.Model -eq $modelName -and $_.Context -eq $level })
            $ok = @($grp | Where-Object { $_.HTTP -eq "200" -and $null -ne $_.TtftMs })
            $summary += [pscustomobject]@{
                Model      = $modelName
                Context    = $level
                OkRuns     = ("{0}/{1}" -f $ok.Count, $grp.Count)
                PromptTok  = Get-Avg ($ok | ForEach-Object { $_.PromptTok }) 0
                OutTok     = Get-Avg ($ok | ForEach-Object { $_.OutTok }) 0
                TtftMs     = Get-Avg ($ok | ForEach-Object { $_.TtftMs }) 0
                TotalMs    = Get-Avg ($ok | ForEach-Object { $_.TotalMs }) 0
                DecodeTokS = Get-Avg ($ok | ForEach-Object { $_.DecodeTokS }) 1
                StreamMbps = Get-Avg ($ok | ForEach-Object { $_.StreamMbps }) 4
            }
        }
    }

    $display = @($summary | ForEach-Object {
        [pscustomobject]@{
            Model      = $_.Model
            Context    = $_.Context
            OkRuns     = $_.OkRuns
            PromptTok  = Format-Num $_.PromptTok "0"
            OutTok     = Format-Num $_.OutTok "0"
            TtftMs     = Format-Num $_.TtftMs "0"
            TotalMs    = Format-Num $_.TotalMs "0"
            DecodeTokS = Format-Num $_.DecodeTokS "0.0"
            StreamMbps = Format-Num $_.StreamMbps "0.0000"
        }
    })

    Write-Host ""
    Show-Table $display

    $lines = @()
    $lines += $M.SummaryTitle
    $lines += ""
    if ($baselineLines.Count -gt 0) {
        $lines += $M.BaselineTitle
        foreach ($b in $baselineLines) { $lines += ("  " + $b) }
        $lines += ""
    }
    $lines += $M.RankTitle
    $rank = @($summary | Where-Object { $_.Context -eq "short" -and $null -ne $_.DecodeTokS } | Sort-Object -Property DecodeTokS -Descending)
    if ($rank.Count -eq 0) {
        $lines += ("  " + $M.NoRank)
    } else {
        $pos = 0
        foreach ($s in $rank) {
            $pos++
            $lines += ("  {0}. {1} : {2} tok/s, TTFT {3} ms" -f $pos, $s.Model, $s.DecodeTokS, $s.TtftMs)
        }
    }
    $lines += ""
    $lines += $M.Note

    Write-Host ""
    $lines | ForEach-Object { Write-Host $_ }
    Set-Content -Path $txt -Value $lines -Encoding UTF8

    Write-Host ""
    Write-Host ($M.SavedCsv -f $csv)
    Write-Host ($M.SavedTxt -f $txt)
}

try {
    Invoke-Main
} catch {
    Write-Host ("Beklenmeyen hata: " + $_.Exception.Message)
} finally {
    if ($null -ne $script:Http) { $script:Http.Dispose() }
}

Read-Host "`nPress ENTER to exit."
RAPOR ÇIKTISI ( C:\Users\TRWE_2012\Masaüstü\nim_speed_20260920_094234.txt ) :

Kod: Tümünü seç

Yanıt hızı özeti

Ağ temel ölçümü
  API gecikmesi: ilk istek (TLS el sıkışması dahil) 619 ms; sonraki isteklerde en az/ortalama/en çok 120/126/135 ms
  İnternet indirme: 19,1 MB, 29,9 sn içinde = 5,3 Mbps

Üretim hızına göre sıralama (kısa bağlam, yüksek olan iyidir)
  1. nvidia/nemotron-3.5-lightning-30b-a3b : 45,6 tok/s, TTFT 3862 ms
  2. meta/muse-glimmer-30b : 44,9 tok/s, TTFT 486 ms
  3. openai/gpt-oss-20b : 21,6 tok/s, TTFT 614 ms
  4. z-ai/glm-5.3-flash : 9,8 tok/s, TTFT 65906 ms

Not: TTFT, akışla gelen ilk tokene kadar geçen süredir (akıl yürüten modeller önce akıl yürütme metnini akıtabilir). Üretim tok/sn değeri ilk ve son token arasında ölçülür. Token sayıları mümkünse sunucunun kullanım bildiriminden, aksi hâlde akış parçalarından alınır. Akış Mbps değeri küçüktür, çünkü sınırı bağlantınız değil, modelin üretim hızıdır. Sonuçlar sunucu yüküne göre değişir, bu nedenle testi farklı zamanlarda yineleyin.
SONUÇ :

Bu ölçüme göre internet bağlantım ve API gecikmesi sorun oluşturmuyormuş. Yavaşlığın kaynağı sunucudaki model yükü. Kod yardımcısı için şimdilik meta/muse-glimmer-30b en dengeli aday görünüyor.

Bunlar sana bir fikir verecektir.Kolay gelsin şimdiden ....
Cevapla

“H4NOK Software development” sayfasına dön