Я использую Inno Setup для создания установщика для своего приложения. Часть процесса установки включает установку двоичного файла Ollama и запуск пары команд для настройки моделей. Однако команды, похоже, не выполняются должным образом. Вот мой сценарий установки Inno:
[Setup]
AppName=Chat2Find
AppVersion=1.0
DefaultDirName = {pf}\Chat2Find
DefaultGroupName=Chat2Find
OutputDir=.
OutputBaseFilename=Chat2FindInstaller
Compression=lzma
SolidCompression=yes
DiskSpanning=yes
[Files]
; Include the executable
Source: "C:\Users\presh\c2f\dist\Chat2Find.exe"; DestDir: "{app}"; Flags: ignoreversion
; Include the GGUF files to be extracted to a permanent location
Source: "C:\Users\presh\c2f\dist\Mistral-7B-Instruct-v0.3.Q4_K_M.gguf"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\Phi-3-mini-4k-instruct-q4.gguf"; DestDir: "{app}"; Flags: ignoreversion
; Include the Ollama setup binary
Source: "C:\Users\presh\c2f\dist\OllamaSetup.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall
; Include other resources
Source: "C:\Users\presh\c2f\dist\menu.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\close.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\new_note.jpg"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\copy.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\send_icon.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\chat2find.jpeg"; DestDir: "{app}"; Flags: ignoreversion
[Icons]
Name: "{group}\Chat2Find"; Filename: "{app}\Chat2Find.exe"
Name: "{commondesktop}\Chat2Find"; Filename: "{app}\Chat2Find.exe"; Tasks: desktopicon
[Tasks]
Name: "desktopicon"; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Flags: checkedonce
[Run]
Filename: "{app}\Chat2Find.exe"; Description: "Launch Chat2Find"; Flags: nowait postinstall skipifsilent
; Run Ollama setup silently
Filename: "{tmp}\OllamaSetup.exe"; Description: "Install Ollama"; Flags: waituntilterminated
; Run Ollama commands silently using a script
Filename: "cmd.exe"; Parameters: "/C {app}\run_ollama_commands.bat"; Flags: runhidden postinstall
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
GGUFDir: String;
MistralDef, Phi3Def, OllamaScript: String;
begin
if CurStep = ssPostInstall then
begin
GGUFDir := ExpandConstant('{app}');
if not DirExists(GGUFDir) then
begin
CreateDir(GGUFDir);
end;
MistralDef := GGUFDir + '\mistral_definition';
SaveStringToFile(MistralDef,
'FROM ' + GGUFDir + '\Mistral-7B-Instruct-v0.3-Q4_K_M.gguf' + #13#10 +
'TEMPLATE """[INST] {{ if .System }}{{ .System }} {{ end }}{{ .Prompt }} [/INST]"""' + #13#10 +
'PARAMETER stop "[INST]"' + #13#10 +
'PARAMETER stop "[/INST]"', False);
Phi3Def := GGUFDir + '\phi3_definition';
SaveStringToFile(Phi3Def,
'FROM ' + GGUFDir + '\Phi-3-mini-4k-instruct-q4.gguf' + #13#10 +
'TEMPLATE """<s>{{ if .Prompt }}' + #13#10 +
'{{ .Prompt }}' + #13#10 +
'{{ end }}' + #13#10 +
'{{ .Response }}"""' + #13#10 +
'PARAMETER stop' + #13#10 +
'PARAMETER stop' + #13#10 +
'PARAMETER stop' + #13#10 +
'PARAMETER num_ctx 4096', False);
OllamaScript := GGUFDir + '\run_ollama_commands.bat';
SaveStringToFile(OllamaScript,
'ollama create C2F_mistral -f "' + MistralDef + '"' + #13#10 +
'ollama create C2F_phi3 -f "' + Phi3Def + '"', False);
end;
end;
Проблема:
Команды в run_ollama_commands.bat, похоже, не выполняются должным образом. Как я могу гарантировать, что эти команды будут выполняться автоматически после установки двоичного файла Ollama?
Дополнительный контекст:
OllamaSetup.exe правильно устанавливает двоичный файл Ollama.
Мне нужно, чтобы модели создавались с использованием файлов и шаблонов GGUF, предоставленных во время установки.
Пакетный файл (run_ollama_commands.bat) должен работать автоматически, без отображения окна командной строки.
Мы будем очень признательны за любые идеи или предложения о том, как правильно выполнять эти команды после установки!
Если вы используете Inno Setup и вам необходимо автоматически выполнять команды после установки, выполните следующие действия, чтобы убедиться, что все работает гладко. Вот изысканное решение:
Удалите раздел [Код], который динамически создает файлы определений и пакетный сценарий. Вместо этого вручную подготовьте эти файлы и включите их в свой установщик. Вот как вам следует изменить сценарий установки Inno:
[Setup]
AppName=Chat2Find
AppVersion=1.0
DefaultDirName = {pf}\Chat2Find
DefaultGroupName=Chat2Find
OutputDir=.
OutputBaseFilename=Chat2FindInstaller
Compression=lzma
SolidCompression=yes
DiskSpanning=yes
[Files]
; Include the executable
Source: "C:\Users\presh\c2f\dist\Chat2Find.exe"; DestDir: "{app}"; Flags: ignoreversion
; Include the GGUF files
Source: "C:\Users\presh\c2f\dist\Mistral-7B-Instruct-v0.3.Q4_K_M.gguf"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\Phi-3-mini-4k-instruct-q4.gguf"; DestDir: "{app}"; Flags: ignoreversion
; Include pre-created definition files
Source: "C:\Users\presh\c2f\dist\mistral_definition"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\phi3_definition"; DestDir: "{app}"; Flags: ignoreversion
; Include the Ollama setup binary
Source: "C:\Users\presh\c2f\dist\OllamaSetup.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall
; Include the batch file
Source: "C:\Users\presh\c2f\dist\run_ollama_commands.bat"; DestDir: "{app}"; Flags: ignoreversion
; Include other resources
Source: "C:\Users\presh\c2f\dist\menu.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\close.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\new_note.jpg"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\copy.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\send_icon.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\chat2find.jpeg"; DestDir: "{app}"; Flags: ignoreversion
[Icons]
Name: "{group}\Chat2Find"; Filename: "{app}\Chat2Find.exe"
Name: "{commondesktop}\Chat2Find"; Filename: "{app}\Chat2Find.exe"; Tasks: desktopicon
[Tasks]
Name: "desktopicon"; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Flags: checkedonce
[Run]
Filename: "{tmp}\OllamaSetup.exe"; Description: "Install Ollama"; Flags: waituntilterminated runhidden
; Run Ollama commands silently
Filename: "{app}\run_ollama_commands.bat"; Parameters: ""; Flags: waituntilterminated runhidden
Filename: "{app}\Chat2Find.exe"; Description: "Launch Chat2Find"; Flags: postinstall
Создайте файл run_ollama_commands.bat
со следующим содержимым. Этот файл должен быть включен в ваш установщик:
@echo off
cd /d %~dp0
echo Running Ollama commands...
ollama create C2F_mistral -f mistral_definition
if %errorlevel% neq 0 (
echo Failed to create C2F_mistral model
exit /b %errorlevel%
)
ollama create C2F_phi3 -f phi3_definition
if %errorlevel% neq 0 (
echo Failed to create C2F_phi3 model
exit /b %errorlevel%
)
echo Ollama commands executed successfully. Deleting GGUF files...
del /f /q "Mistral-7B-Instruct-v0.3.Q4_K_M.gguf"
del /f /q "Phi-3-mini-4k-instruct-q4.gguf"
echo GGUF files deleted.
exit
Объяснение:
Команда @echo off подавляет вывод команды, чтобы избежать беспорядка. (Inno Setup также запускает его автоматически) cd /d %~dp0 изменяет каталог, в котором находится командный файл. Команды выполняются с проверкой ошибок, и обо всех ошибках сообщается. Файлы GGUF удаляются после успешного выполнения команды. Следуя этим инструкциям, вы обеспечите бесшумное и эффективное выполнение команд после установки.