[CmdletBinding()] param( [string]$UvPath, [string]$OllamaPath, [string]$OllamaModels, [string]$DataDir, [string]$UvCacheDir, [string]$PythonInstallDir ) $ErrorActionPreference = 'Stop' function Get-ConfiguredPath { param( [string]$ParameterValue, [string]$EnvironmentName, [string]$DefaultValue ) if (-not [string]::IsNullOrWhiteSpace($ParameterValue)) { return [System.IO.Path]::GetFullPath($ParameterValue) } $environmentValue = [System.Environment]::GetEnvironmentVariable($EnvironmentName) if (-not [string]::IsNullOrWhiteSpace($environmentValue)) { return [System.IO.Path]::GetFullPath($environmentValue) } return [System.IO.Path]::GetFullPath($DefaultValue) } function Test-OllamaReady { try { $null = Invoke-RestMethod ` -Uri 'http://127.0.0.1:11434/api/version' ` -Method Get ` -TimeoutSec 2 return $true } catch { return $false } } $repositoryRoot = [System.IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..')) if (-not (Test-Path -LiteralPath (Join-Path $repositoryRoot 'pyproject.toml') -PathType Leaf)) { throw "Das Repository konnte relativ zum Startskript nicht verifiziert werden." } $driveRoot = [System.IO.Path]::GetPathRoot($repositoryRoot) $resolvedUv = Get-ConfiguredPath ` -ParameterValue $UvPath ` -EnvironmentName 'JAVIS_UV_PATH' ` -DefaultValue (Join-Path $driveRoot 'Javis-Tools\uv\uv.exe') $resolvedOllama = Get-ConfiguredPath ` -ParameterValue $OllamaPath ` -EnvironmentName 'JAVIS_OLLAMA_PATH' ` -DefaultValue (Join-Path $driveRoot 'Javis-Tools\ollama\ollama.exe') $resolvedModels = Get-ConfiguredPath ` -ParameterValue $OllamaModels ` -EnvironmentName 'JAVIS_OLLAMA_MODELS' ` -DefaultValue (Join-Path $driveRoot 'Javis-Data\ollama-models') $resolvedData = Get-ConfiguredPath ` -ParameterValue $DataDir ` -EnvironmentName 'JAVIS_DATA_DIR' ` -DefaultValue (Join-Path $driveRoot 'Javis-Data\runtime') $resolvedCache = Get-ConfiguredPath ` -ParameterValue $UvCacheDir ` -EnvironmentName 'JAVIS_UV_CACHE_DIR' ` -DefaultValue (Join-Path $driveRoot 'Javis-Tools\uv-cache') $resolvedPython = Get-ConfiguredPath ` -ParameterValue $PythonInstallDir ` -EnvironmentName 'JAVIS_PYTHON_INSTALL_DIR' ` -DefaultValue (Join-Path $driveRoot 'Javis-Tools\python') if (-not (Test-Path -LiteralPath $resolvedUv -PathType Leaf)) { throw "uv.exe wurde nicht gefunden: $resolvedUv" } if (-not (Test-Path -LiteralPath $resolvedModels -PathType Container)) { throw "Der externe Ollama-Modellpfad wurde nicht gefunden: $resolvedModels" } $env:JAVIS_DATA_DIR = $resolvedData $env:OLLAMA_MODELS = $resolvedModels $env:OLLAMA_HOST = '127.0.0.1:11434' $env:UV_CACHE_DIR = $resolvedCache $env:UV_PYTHON_INSTALL_DIR = $resolvedPython if (-not (Test-OllamaReady)) { if (-not (Test-Path -LiteralPath $resolvedOllama -PathType Leaf)) { throw "Ollama ist nicht erreichbar und ollama.exe wurde nicht gefunden: $resolvedOllama" } Write-Host "Ollama wird lokal auf 127.0.0.1:11434 gestartet ..." $ollamaProcess = Start-Process ` -FilePath $resolvedOllama ` -ArgumentList 'serve' ` -WindowStyle Hidden ` -PassThru $ready = $false for ($attempt = 1; $attempt -le 30; $attempt++) { if ($ollamaProcess.HasExited) { throw "Ollama wurde beendet, bevor die lokale API bereit war." } Start-Sleep -Milliseconds 500 if (Test-OllamaReady) { $ready = $true break } } if (-not $ready) { throw "Ollama war nach 15 Sekunden nicht unter 127.0.0.1:11434 erreichbar." } } Push-Location $repositoryRoot try { & $resolvedUv run javis chat exit $LASTEXITCODE } finally { Pop-Location }