Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
ollama
Commits
9304f0e7
Unverified
Commit
9304f0e7
authored
Aug 31, 2023
by
Michael Yang
Committed by
GitHub
Aug 31, 2023
Browse files
Merge pull request #443 from jmorganca/mxyng/fix-list-models
windows: fix filepath bugs
parents
6578b2f8
1c8fd627
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
49 additions
and
73 deletions
+49
-73
api/types.go
api/types.go
+2
-2
server/images.go
server/images.go
+32
-43
server/modelpath.go
server/modelpath.go
+1
-1
server/routes.go
server/routes.go
+14
-27
No files found.
api/types.go
View file @
9304f0e7
...
...
@@ -88,10 +88,10 @@ type PushRequest struct {
}
type
ListResponse
struct
{
Models
[]
List
Response
Model
`json:"models"`
Models
[]
Model
Response
`json:"models"`
}
type
List
Response
Model
struct
{
type
Model
Response
struct
{
Name
string
`json:"name"`
ModifiedAt
time
.
Time
`json:"modified_at"`
Size
int
`json:"size"`
...
...
server/images.go
View file @
9304f0e7
...
...
@@ -235,8 +235,8 @@ func GetModel(name string) (*Model, error) {
func
filenameWithPath
(
path
,
f
string
)
(
string
,
error
)
{
// if filePath starts with ~/, replace it with the user's home directory.
if
strings
.
HasPrefix
(
f
,
"~/"
)
{
parts
:=
strings
.
Split
(
f
,
"/"
)
if
strings
.
HasPrefix
(
f
,
fmt
.
Sprintf
(
"~%s"
,
string
(
os
.
PathSeparator
))
)
{
parts
:=
strings
.
Split
(
f
,
string
(
os
.
PathSeparator
)
)
home
,
err
:=
os
.
UserHomeDir
()
if
err
!=
nil
{
return
""
,
fmt
.
Errorf
(
"failed to open file: %v"
,
err
)
...
...
@@ -374,20 +374,9 @@ func CreateModel(ctx context.Context, name string, path string, fn func(resp api
case
"adapter"
:
fn
(
api
.
ProgressResponse
{
Status
:
fmt
.
Sprintf
(
"creating model %s layer"
,
c
.
Name
)})
fp
:=
c
.
Args
if
strings
.
HasPrefix
(
fp
,
"~/"
)
{
parts
:=
strings
.
Split
(
fp
,
"/"
)
home
,
err
:=
os
.
UserHomeDir
()
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to open file: %v"
,
err
)
}
fp
=
filepath
.
Join
(
home
,
filepath
.
Join
(
parts
[
1
:
]
...
))
}
// If filePath is not an absolute path, make it relative to the modelfile path
if
!
filepath
.
IsAbs
(
fp
)
{
fp
=
filepath
.
Join
(
filepath
.
Dir
(
path
),
fp
)
fp
,
err
:=
filenameWithPath
(
path
,
c
.
Args
)
if
err
!=
nil
{
return
err
}
// create a model from this specified file
...
...
@@ -859,38 +848,38 @@ func DeleteModel(name string) error {
if
err
!=
nil
{
return
err
}
err
=
filepath
.
Walk
(
fp
,
func
(
path
string
,
info
os
.
FileInfo
,
err
error
)
error
{
if
err
!=
nil
{
return
err
walkFunc
:=
func
(
path
string
,
info
os
.
FileInfo
,
_
error
)
error
{
if
info
.
IsDir
()
{
return
nil
}
if
!
info
.
IsDir
()
{
path
:=
path
[
len
(
fp
)
+
1
:
]
slashIndex
:=
strings
.
LastIndex
(
path
,
"/"
)
if
slashIndex
==
-
1
{
return
nil
}
tag
:=
path
[
:
slashIndex
]
+
":"
+
path
[
slashIndex
+
1
:
]
fmp
:=
ParseModelPath
(
tag
)
// skip the manifest we're trying to delete
if
mp
.
GetFullTagname
()
==
fmp
.
GetFullTagname
()
{
return
nil
}
dir
,
file
:=
filepath
.
Split
(
path
)
dir
=
strings
.
Trim
(
strings
.
TrimPrefix
(
dir
,
fp
),
string
(
os
.
PathSeparator
))
tag
:=
strings
.
Join
([]
string
{
dir
,
file
},
":"
)
fmp
:=
ParseModelPath
(
tag
)
// s
ave (i.e. delete from the deleteMap) any files used in other manifests
manifest
,
_
,
err
:=
GetManifest
(
fmp
)
if
err
!=
nil
{
log
.
Printf
(
"skipping file: %s"
,
fp
)
return
nil
}
for
_
,
layer
:=
range
manifest
.
Layers
{
delete
(
deleteMap
,
layer
.
Digest
)
}
delete
(
deleteMap
,
manifest
.
Config
.
Digest
)
// s
kip the manifest we're trying to delete
if
mp
.
GetFullTagname
()
==
fmp
.
GetFullTagname
()
{
return
nil
}
// save (i.e. delete from the deleteMap) any files used in other manifests
manifest
,
_
,
err
:=
GetManifest
(
fmp
)
if
err
!=
nil
{
log
.
Printf
(
"skipping file: %s"
,
fp
)
return
nil
}
for
_
,
layer
:=
range
manifest
.
Layers
{
delete
(
deleteMap
,
layer
.
Digest
)
}
delete
(
deleteMap
,
manifest
.
Config
.
Digest
)
return
nil
})
if
err
!=
nil
{
}
if
err
:=
filepath
.
Walk
(
fp
,
walkFunc
);
err
!=
nil
{
return
err
}
...
...
server/modelpath.go
View file @
9304f0e7
...
...
@@ -46,7 +46,7 @@ func ParseModelPath(name string) ModelPath {
name
=
after
}
parts
:=
strings
.
Split
(
name
,
"/"
)
parts
:=
strings
.
Split
(
name
,
string
(
os
.
PathSeparator
)
)
switch
len
(
parts
)
{
case
3
:
mp
.
Registry
=
parts
[
0
]
...
...
server/routes.go
View file @
9304f0e7
...
...
@@ -3,7 +3,6 @@ package server
import
(
"context"
"encoding/json"
"errors"
"fmt"
"io"
"log"
...
...
@@ -365,32 +364,18 @@ func DeleteModelHandler(c *gin.Context) {
}
func
ListModelsHandler
(
c
*
gin
.
Context
)
{
var
models
[]
api
.
List
Response
Model
var
models
[]
api
.
Model
Response
fp
,
err
:=
GetManifestPath
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusInternalServerError
,
gin
.
H
{
"error"
:
err
.
Error
()})
return
}
err
=
filepath
.
Walk
(
fp
,
func
(
path
string
,
info
os
.
FileInfo
,
err
error
)
error
{
if
err
!=
nil
{
if
errors
.
Is
(
err
,
os
.
ErrNotExist
)
{
log
.
Printf
(
"manifest file does not exist: %s"
,
fp
)
return
nil
}
return
err
}
walkFunc
:=
func
(
path
string
,
info
os
.
FileInfo
,
_
error
)
error
{
if
!
info
.
IsDir
()
{
fi
,
err
:=
os
.
Stat
(
path
)
if
err
!=
nil
{
log
.
Printf
(
"skipping file: %s"
,
fp
)
return
nil
}
path
:=
path
[
len
(
fp
)
+
1
:
]
slashIndex
:=
strings
.
LastIndex
(
path
,
"/"
)
if
slashIndex
==
-
1
{
return
nil
}
tag
:=
path
[
:
slashIndex
]
+
":"
+
path
[
slashIndex
+
1
:
]
dir
,
file
:=
filepath
.
Split
(
path
)
dir
=
strings
.
Trim
(
strings
.
TrimPrefix
(
dir
,
fp
),
string
(
os
.
PathSeparator
))
tag
:=
strings
.
Join
([]
string
{
dir
,
file
},
":"
)
mp
:=
ParseModelPath
(
tag
)
manifest
,
digest
,
err
:=
GetManifest
(
mp
)
...
...
@@ -398,17 +383,19 @@ func ListModelsHandler(c *gin.Context) {
log
.
Printf
(
"skipping file: %s"
,
fp
)
return
nil
}
model
:=
api
.
ListResponseModel
{
models
=
append
(
models
,
api
.
ModelResponse
{
Name
:
mp
.
GetShortTagname
(),
Size
:
manifest
.
GetTotalSize
(),
Digest
:
digest
,
ModifiedAt
:
fi
.
ModTime
(),
}
models
=
append
(
models
,
model
)
ModifiedAt
:
info
.
ModTime
(),
})
}
return
nil
})
if
err
!=
nil
{
}
if
err
:=
filepath
.
Walk
(
fp
,
walkFunc
);
err
!=
nil
{
c
.
JSON
(
http
.
StatusInternalServerError
,
gin
.
H
{
"error"
:
err
.
Error
()})
return
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment