param( [int]$Port = 7864, [string]$ServerName = "127.0.0.1", [string]$VllmUrl = "https://veronicaulises0--virtual-characters-vllm-gemma-serve.modal.run", [string]$TtsUrl = "https://veronicaulises0--virtual-characters-tts-charactertts-tts.modal.run", [switch]$Mock ) $ErrorActionPreference = "Continue" $repoRoot = Split-Path -Parent $PSScriptRoot $logsDir = Join-Path $repoRoot ".logs" New-Item -ItemType Directory -Force -Path $logsDir | Out-Null $portsToStop = @(7861, 7862, 7863, 7864, 7865, 7867, $Port) | Select-Object -Unique $stopped = @() foreach ($candidatePort in $portsToStop) { $listeners = netstat -ano | Select-String "127\.0\.0\.1:$candidatePort\s+0\.0\.0\.0:0\s+LISTENING" foreach ($line in $listeners) { $parts = ($line.ToString() -split "\s+") | Where-Object { $_ } if ($parts.Length -lt 5) { continue } $targetPid = [int]$parts[-1] Stop-Process -Id $targetPid -Force -ErrorAction SilentlyContinue $stopped += [ordered]@{ port = $candidatePort; pid = $targetPid } } } $stamp = Get-Date -Format "yyyyMMdd-HHmmss" $stdout = Join-Path $logsDir "gradio-$Port-$stamp.out.log" $stderr = Join-Path $logsDir "gradio-$Port-$stamp.err.log" $runner = Join-Path $PSScriptRoot "run_gradio_server.ps1" $args = @( "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", $runner, "-Port", "$Port", "-ServerName", $ServerName, "-VllmUrl", $VllmUrl, "-TtsUrl", $TtsUrl, "-Stdout", $stdout, "-Stderr", $stderr ) if ($Mock) { $args += "-Mock" } $process = Start-Process ` -FilePath "powershell.exe" ` -ArgumentList $args ` -WorkingDirectory $repoRoot ` -WindowStyle Hidden ` -PassThru [ordered]@{ stopped = $stopped pid = $process.Id url = "http://$ServerName`:$Port" stdout = $stdout stderr = $stderr vllm_url = $VllmUrl tts_url = $TtsUrl mock = [bool]$Mock } | ConvertTo-Json -Depth 5