enh: new ollama create model method

This commit is contained in:
Timothy Jaeryang Baek 2025-01-22 12:36:18 -08:00
parent 8380d3f5ae
commit f4b5039adf
2 changed files with 28 additions and 8 deletions

View File

@ -551,11 +551,12 @@ async def push_model(
class CreateModelForm(BaseModel): class CreateModelForm(BaseModel):
name: str model: Optional[str] = None
modelfile: Optional[str] = None
stream: Optional[bool] = None stream: Optional[bool] = None
path: Optional[str] = None path: Optional[str] = None
model_config = ConfigDict(extra="allow")
@router.post("/api/create") @router.post("/api/create")
@router.post("/api/create/{url_idx}") @router.post("/api/create/{url_idx}")

View File

@ -44,7 +44,8 @@
let modelTag = ''; let modelTag = '';
let createModelLoading = false; let createModelLoading = false;
let createModelObject = {}; let createModelName = '';
let createModelObject = '';
let createModelDigest = ''; let createModelDigest = '';
let createModelPullProgress = null; let createModelPullProgress = null;
@ -428,7 +429,24 @@
const createModelHandler = async () => { const createModelHandler = async () => {
createModelLoading = true; createModelLoading = true;
const res = await createModel(localStorage.token, createModelObject, urlIdx).catch((error) => { let modelObject = {};
// parse createModelObject
try {
modelObject = JSON.parse(createModelObject);
} catch (error) {
toast.error(`${error}`);
createModelLoading = false;
return;
}
const res = await createModel(
localStorage.token,
{
model: createModelName,
...modelObject
},
urlIdx
).catch((error) => {
toast.error(`${error}`); toast.error(`${error}`);
return null; return null;
}); });
@ -492,7 +510,8 @@
createModelLoading = false; createModelLoading = false;
createModelObject = {}; createModelName = '';
createModelObject = '';
createModelDigest = ''; createModelDigest = '';
createModelPullProgress = null; createModelPullProgress = null;
}; };
@ -746,15 +765,15 @@
placeholder={$i18n.t('Enter model tag (e.g. {{modelTag}})', { placeholder={$i18n.t('Enter model tag (e.g. {{modelTag}})', {
modelTag: 'my-modelfile' modelTag: 'my-modelfile'
})} })}
bind:value={createModelObject.model} bind:value={createModelName}
disabled={createModelLoading} disabled={createModelLoading}
/> />
<textarea <textarea
bind:value={createModelObject.content} bind:value={createModelObject}
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-100 dark:bg-gray-850 outline-none resize-none scrollbar-hidden" class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-100 dark:bg-gray-850 outline-none resize-none scrollbar-hidden"
rows="6" rows="6"
placeholder={`TEMPLATE """{{ .System }}\nUSER: {{ .Prompt }}\nASSISTANT: """\nPARAMETER num_ctx 4096\nPARAMETER stop "</s>"\nPARAMETER stop "USER:"\nPARAMETER stop "ASSISTANT:"`} placeholder={`e.g. {"model": "my-modelfile", "from": "ollama:7b"})`}
disabled={createModelLoading} disabled={createModelLoading}
/> />
</div> </div>