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
80dd44e8
Unverified
Commit
80dd44e8
authored
Sep 18, 2023
by
Patrick Devine
Committed by
GitHub
Sep 18, 2023
Browse files
Cmd changes (#541)
parent
94e1d96b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
75 additions
and
52 deletions
+75
-52
cmd/cmd.go
cmd/cmd.go
+69
-50
server/routes.go
server/routes.go
+6
-2
No files found.
cmd/cmd.go
View file @
80dd44e8
...
@@ -33,6 +33,17 @@ import (
...
@@ -33,6 +33,17 @@ import (
"github.com/jmorganca/ollama/version"
"github.com/jmorganca/ollama/version"
)
)
type
Painter
struct
{}
func
(
p
Painter
)
Paint
(
line
[]
rune
,
l
int
)
[]
rune
{
termType
:=
os
.
Getenv
(
"TERM"
)
if
termType
==
"xterm-256color"
&&
len
(
line
)
==
0
{
prompt
:=
"Send a message (/? for help)"
return
[]
rune
(
fmt
.
Sprintf
(
"
\0
33[38;5;245m%s
\0
33[%dD
\0
33[0m"
,
prompt
,
len
(
prompt
)))
}
return
line
}
func
CreateHandler
(
cmd
*
cobra
.
Command
,
args
[]
string
)
error
{
func
CreateHandler
(
cmd
*
cobra
.
Command
,
args
[]
string
)
error
{
filename
,
_
:=
cmd
.
Flags
()
.
GetString
(
"file"
)
filename
,
_
:=
cmd
.
Flags
()
.
GetString
(
"file"
)
filename
,
err
:=
filepath
.
Abs
(
filename
)
filename
,
err
:=
filepath
.
Abs
(
filename
)
...
@@ -387,71 +398,71 @@ func RunGenerate(cmd *cobra.Command, args []string) error {
...
@@ -387,71 +398,71 @@ func RunGenerate(cmd *cobra.Command, args []string) error {
type
generateContextKey
string
type
generateContextKey
string
func
generate
(
cmd
*
cobra
.
Command
,
model
,
prompt
string
)
error
{
func
generate
(
cmd
*
cobra
.
Command
,
model
,
prompt
string
)
error
{
if
len
(
strings
.
TrimSpace
(
prompt
))
>
0
{
client
,
err
:=
api
.
FromEnv
()
client
,
err
:=
api
.
FromEnv
()
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
spinner
:=
NewSpinner
(
""
)
spinner
:=
NewSpinner
(
""
)
go
spinner
.
Spin
(
60
*
time
.
Millisecond
)
go
spinner
.
Spin
(
60
*
time
.
Millisecond
)
var
latest
api
.
GenerateResponse
var
latest
api
.
GenerateResponse
generateContext
,
ok
:=
cmd
.
Context
()
.
Value
(
generateContextKey
(
"context"
))
.
([]
int
)
generateContext
,
ok
:=
cmd
.
Context
()
.
Value
(
generateContextKey
(
"context"
))
.
([]
int
)
if
!
ok
{
if
!
ok
{
generateContext
=
[]
int
{}
generateContext
=
[]
int
{}
}
}
request
:=
api
.
GenerateRequest
{
Model
:
model
,
Prompt
:
prompt
,
Context
:
generateContext
}
request
:=
api
.
GenerateRequest
{
Model
:
model
,
Prompt
:
prompt
,
Context
:
generateContext
}
fn
:=
func
(
response
api
.
GenerateResponse
)
error
{
fn
:=
func
(
response
api
.
GenerateResponse
)
error
{
if
!
spinner
.
IsFinished
()
{
if
!
spinner
.
IsFinished
()
{
spinner
.
Finish
()
spinner
.
Finish
()
}
}
latest
=
response
latest
=
response
fmt
.
Print
(
response
.
Response
)
fmt
.
Print
(
response
.
Response
)
return
nil
return
nil
}
}
if
err
:=
client
.
Generate
(
context
.
Background
(),
&
request
,
fn
);
err
!=
nil
{
if
err
:=
client
.
Generate
(
context
.
Background
(),
&
request
,
fn
);
err
!=
nil
{
if
strings
.
Contains
(
err
.
Error
(),
"failed to load model"
)
{
if
strings
.
Contains
(
err
.
Error
(),
"failed to load model"
)
{
// tell the user to check the server log, if it exists locally
// tell the user to check the server log, if it exists locally
home
,
nestedErr
:=
os
.
UserHomeDir
()
home
,
nestedErr
:=
os
.
UserHomeDir
()
if
nestedErr
!=
nil
{
if
nestedErr
!=
nil
{
// return the original error
// return the original error
return
err
return
err
}
}
logPath
:=
filepath
.
Join
(
home
,
".ollama"
,
"logs"
,
"server.log"
)
logPath
:=
filepath
.
Join
(
home
,
".ollama"
,
"logs"
,
"server.log"
)
if
_
,
nestedErr
:=
os
.
Stat
(
logPath
);
nestedErr
==
nil
{
if
_
,
nestedErr
:=
os
.
Stat
(
logPath
);
nestedErr
==
nil
{
err
=
fmt
.
Errorf
(
"%w
\n
For more details, check the error logs at %s"
,
err
,
logPath
)
err
=
fmt
.
Errorf
(
"%w
\n
For more details, check the error logs at %s"
,
err
,
logPath
)
}
}
}
return
err
}
}
return
err
}
if
prompt
!=
""
{
fmt
.
Println
()
fmt
.
Println
()
fmt
.
Println
()
fmt
.
Println
()
}
if
!
latest
.
Done
{
if
!
latest
.
Done
{
return
errors
.
New
(
"unexpected end of response"
)
return
errors
.
New
(
"unexpected end of response"
)
}
}
verbose
,
err
:=
cmd
.
Flags
()
.
GetBool
(
"verbose"
)
if
err
!=
nil
{
return
err
}
if
verbose
{
verbose
,
err
:=
cmd
.
Flags
()
.
GetBool
(
"verbose"
)
latest
.
Summary
()
if
err
!=
nil
{
}
return
err
}
ctx
:=
cmd
.
Context
()
if
verbose
{
ctx
=
context
.
WithValue
(
ctx
,
generateContextKey
(
"context"
),
latest
.
Context
)
latest
.
Summary
()
cmd
.
SetContext
(
ctx
)
}
}
ctx
:=
cmd
.
Context
()
ctx
=
context
.
WithValue
(
ctx
,
generateContextKey
(
"context"
),
latest
.
Context
)
cmd
.
SetContext
(
ctx
)
return
nil
return
nil
}
}
...
@@ -461,6 +472,11 @@ func generateInteractive(cmd *cobra.Command, model string) error {
...
@@ -461,6 +472,11 @@ func generateInteractive(cmd *cobra.Command, model string) error {
return
err
return
err
}
}
// load the model
if
err
:=
generate
(
cmd
,
model
,
""
);
err
!=
nil
{
return
err
}
completer
:=
readline
.
NewPrefixCompleter
(
completer
:=
readline
.
NewPrefixCompleter
(
readline
.
PcItem
(
"/help"
),
readline
.
PcItem
(
"/help"
),
readline
.
PcItem
(
"/list"
),
readline
.
PcItem
(
"/list"
),
...
@@ -492,6 +508,7 @@ func generateInteractive(cmd *cobra.Command, model string) error {
...
@@ -492,6 +508,7 @@ func generateInteractive(cmd *cobra.Command, model string) error {
}
}
config
:=
readline
.
Config
{
config
:=
readline
.
Config
{
Painter
:
Painter
{},
Prompt
:
">>> "
,
Prompt
:
">>> "
,
HistoryFile
:
filepath
.
Join
(
home
,
".ollama"
,
"history"
),
HistoryFile
:
filepath
.
Join
(
home
,
".ollama"
,
"history"
),
AutoComplete
:
completer
,
AutoComplete
:
completer
,
...
@@ -621,8 +638,10 @@ func generateInteractive(cmd *cobra.Command, model string) error {
...
@@ -621,8 +638,10 @@ func generateInteractive(cmd *cobra.Command, model string) error {
return
nil
return
nil
}
}
if
err
:=
generate
(
cmd
,
model
,
line
);
err
!=
nil
{
if
len
(
line
)
>
0
&&
line
[
0
]
!=
'/'
{
return
err
if
err
:=
generate
(
cmd
,
model
,
line
);
err
!=
nil
{
return
err
}
}
}
}
}
}
}
...
...
server/routes.go
View file @
80dd44e8
...
@@ -218,8 +218,12 @@ func GenerateHandler(c *gin.Context) {
...
@@ -218,8 +218,12 @@ func GenerateHandler(c *gin.Context) {
ch
<-
r
ch
<-
r
}
}
if
err
:=
loaded
.
llm
.
Predict
(
c
.
Request
.
Context
(),
req
.
Context
,
prompt
,
fn
);
err
!=
nil
{
if
req
.
Prompt
==
""
{
ch
<-
gin
.
H
{
"error"
:
err
.
Error
()}
ch
<-
api
.
GenerateResponse
{
Model
:
req
.
Model
,
Done
:
true
}
}
else
{
if
err
:=
loaded
.
llm
.
Predict
(
c
.
Request
.
Context
(),
req
.
Context
,
prompt
,
fn
);
err
!=
nil
{
ch
<-
gin
.
H
{
"error"
:
err
.
Error
()}
}
}
}
}()
}()
...
...
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