# Spune de ce nu se vad modelele de pe PC2 in OpenCode. # # irm http://10.11.90.169:8088/diag.ps1 | iex # # Nu modifica nimic. Doar verifica, pas cu pas, si spune ce e de facut. function Test-OpenCodePC2 { $ProgressPreference = 'SilentlyContinue' try { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 } catch {} $srv = if ($env:QWEN_SRV) { $env:QWEN_SRV } else { 'http://10.11.90.169:9090' } $prov = 'pc2' $probleme = @() function ok($m) { Write-Host " [OK] $m" -ForegroundColor Green } function rau($m) { Write-Host " [NU] $m" -ForegroundColor Red } function info($m) { Write-Host " $m" -ForegroundColor DarkGray } Write-Host "== Diagnostic: modelele de pe PC2 in OpenCode ==" -ForegroundColor Cyan Write-Host "" # 1. ajunge reteaua pana la PC2? Write-Host "1. Reteaua catre PC2" $gazda = ([Uri]$srv).Host $port = ([Uri]$srv).Port $tcp = $false try { $c = New-Object Net.Sockets.TcpClient $tcp = $c.ConnectAsync($gazda, $port).Wait(5000) $c.Close() } catch {} if ($tcp) { ok "portul $gazda`:$port raspunde" } else { rau "nu ajung la $gazda`:$port" info "cauza obisnuita: nu esti pe VPN, sau PC2 e oprit." info "verifica cu: Test-NetConnection $gazda -Port $port" $probleme += "reteaua nu ajunge la PC2 -- porneste VPN-ul" Write-Host "" Write-Host "Restul verificarilor nu mai au sens fara retea." -ForegroundColor Yellow return } $modeleSrv = @() try { $modeleSrv = (Invoke-RestMethod -Uri "$srv/v1/models" -TimeoutSec 15).data.id ok "serverul de modele raspunde: $($modeleSrv -join ', ')" } catch { rau "portul e deschis dar /v1/models nu raspunde: $_" $probleme += "llama-swap nu raspunde pe PC2" } # 2. opencode exista? Write-Host "" Write-Host "2. OpenCode" $oc = (Get-Command opencode -ErrorAction SilentlyContinue).Source if (-not $oc) { $candidat = Join-Path $HOME '.opencode\bin\opencode.exe' if (Test-Path $candidat) { $oc = $candidat rau "opencode exista dar NU e in PATH" info "deschide un terminal NOU, sau ruleaza direct: $candidat" $probleme += "opencode nu e in PATH -- deschide un terminal nou" } } if (-not $oc) { rau "opencode nu e instalat" info "ruleaza: irm http://10.11.90.169:8088/setup.ps1 | iex" $probleme += "opencode lipseste -- ruleaza setup.ps1" Write-Host "" } else { ok "gasit: $oc" $v = & $oc --version 2>&1 | Select-Object -Last 1 info "versiune: $v" } # 3. configuratia -- il intrebam pe opencode unde si-o tine Write-Host "" Write-Host "3. Configuratia" $cfgDir = $null if ($oc) { try { foreach ($l in (& $oc debug paths 2>&1)) { if ("$l" -match '^\s*config\s+(.+?)\s*$') { $cfgDir = $Matches[1]; break } } } catch {} } if (-not $cfgDir) { $cfgDir = if ($env:XDG_CONFIG_HOME) { Join-Path $env:XDG_CONFIG_HOME 'opencode' } else { Join-Path $HOME '.config\opencode' } info "presupun $cfgDir" } $cfg = Join-Path $cfgDir 'opencode.json' if (-not (Test-Path $cfg)) { rau "nu exista $cfg" info "ruleaza: irm http://10.11.90.169:8088/setup.ps1 | iex" $probleme += "configuratia lipseste -- ruleaza setup.ps1" } else { ok "gasita: $cfg" $octeti = [System.IO.File]::ReadAllBytes($cfg) if ($octeti.Length -ge 3 -and $octeti[0] -eq 0xEF -and $octeti[1] -eq 0xBB -and $octeti[2] -eq 0xBF) { rau "fisierul incepe cu BOM -- OpenCode poate sa nu-l citeasca" $probleme += "opencode.json are BOM -- ruleaza din nou setup.ps1" } $j = $null try { $j = Get-Content $cfg -Raw | ConvertFrom-Json; ok "JSON valid" } catch { rau "JSON INVALID: $_" $probleme += "opencode.json e stricat -- restaureaza un fisier .bak-* de langa el" } if ($j) { $p = $j.provider.$prov if (-not $p) { rau "nu exista provider-ul '$prov' in configuratie" $probleme += "provider-ul pc2 lipseste -- ruleaza setup.ps1" } else { ok "provider '$prov' -> $($p.options.baseURL)" $lista = @($p.models.PSObject.Properties.Name) info "modele declarate: $($lista -join ', ')" foreach ($m in $lista) { if (-not $p.models.$m.tool_call) { rau "$m nu are tool_call:true -- uneltele nu ajung la model" $probleme += "$m fara tool_call" } } # capcana tacuta: enabled_providers fara 'pc2' ascunde provider-ul if ($j.PSObject.Properties.Name -contains 'enabled_providers') { if (@($j.enabled_providers) -notcontains $prov) { rau "'enabled_providers' exista dar NU contine '$prov' -- de asta nu apare in /models" info "actual: $(@($j.enabled_providers) -join ', ')" $probleme += "adauga 'pc2' in enabled_providers, sau sterge cheia de tot" } else { ok "'$prov' e in enabled_providers" } } if ($j.model) { info "model implicit: $($j.model)" } } } } # 4. vede OpenCode modelele? if ($oc) { Write-Host "" Write-Host "4. Ce vede OpenCode" $lm = & $oc models 2>&1 $ale = @($lm | Where-Object { "$_" -like "*$prov/*" }) if ($ale.Count) { ok "OpenCode listeaza $($ale.Count) modele pc2:" $ale | ForEach-Object { info "$_" } } else { rau "OpenCode NU listeaza niciun model '$prov/...'" # cauza frecventa: pachetul npm al provider-ului se ia de pe internet la prima rulare $net = $false try { $null = Invoke-WebRequest -Uri 'https://registry.npmjs.org/' -TimeoutSec 10 -UseBasicParsing; $net = $true } catch {} if (-not $net) { rau "nu ai internet catre registry.npmjs.org" info "OpenCode descarca '@ai-sdk/openai-compatible' la prima rulare." info "Fara internet, provider-ul nu se incarca si modelele nu apar." $probleme += "lipseste internetul pentru pachetul provider-ului" } else { ok "internetul catre npm merge (deci nu asta e cauza)" info "ruleaza 'opencode --print-logs models' ca sa vezi eroarea reala" } } } # 5. proba adevarata: raspunde modelul? Write-Host "" Write-Host "5. Proba: cerem un raspuns" if ($modeleSrv -contains 'qwen3.6-q4') { try { $corp = @{ model='qwen3.6-q4'; max_tokens=16 messages=@(@{ role='user'; content='Raspunde doar cu: merge' }) chat_template_kwargs=@{ enable_thinking=$false } } | ConvertTo-Json -Depth 8 info "poate dura pana la 2 minute daca modelul se incarca acum ..." $r = Invoke-RestMethod -Uri "$srv/v1/chat/completions" -Method Post -Body $corp ` -ContentType 'application/json' -TimeoutSec 900 ok "modelul a raspuns: $($r.choices[0].message.content)" } catch { rau "modelul nu a raspuns: $_" $probleme += "llama-swap nu poate incarca modelul -- verifica pe PC2" } } Write-Host "" if ($probleme.Count -eq 0) { Write-Host "Totul e in regula. Porneste 'opencode' si alege modelul cu /models." -ForegroundColor Green } else { Write-Host "De reparat:" -ForegroundColor Yellow $i = 1 foreach ($p in $probleme) { Write-Host " $i. $p" -ForegroundColor Yellow; $i++ } } } Test-OpenCodePC2