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
6681d378
Unverified
Commit
6681d378
authored
Dec 01, 2023
by
Patrick Devine
Committed by
GitHub
Dec 01, 2023
Browse files
allow setting the system and template for prompts in the repl (#1335)
parent
0409c1fa
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
87 additions
and
21 deletions
+87
-21
cmd/cmd.go
cmd/cmd.go
+87
-21
No files found.
cmd/cmd.go
View file @
6681d378
...
...
@@ -464,6 +464,8 @@ type generateOptions struct {
Prompt
string
WordWrap
bool
Format
string
System
string
Template
string
Options
map
[
string
]
interface
{}
}
...
...
@@ -506,11 +508,13 @@ func generate(cmd *cobra.Command, opts generateOptions) error {
var
wordBuffer
string
request
:=
api
.
GenerateRequest
{
Model
:
opts
.
Model
,
Prompt
:
opts
.
Prompt
,
Context
:
generateContext
,
Format
:
opts
.
Format
,
Options
:
opts
.
Options
,
Model
:
opts
.
Model
,
Prompt
:
opts
.
Prompt
,
Context
:
generateContext
,
Format
:
opts
.
Format
,
System
:
opts
.
System
,
Template
:
opts
.
Template
,
Options
:
opts
.
Options
,
}
fn
:=
func
(
response
api
.
GenerateResponse
)
error
{
p
.
StopAndClear
()
...
...
@@ -576,6 +580,15 @@ func generate(cmd *cobra.Command, opts generateOptions) error {
return
nil
}
type
MultilineState
int
const
(
MultilineNone
MultilineState
=
iota
MultilinePrompt
MultilineSystem
MultilineTemplate
)
func
generateInteractive
(
cmd
*
cobra
.
Command
,
opts
generateOptions
)
error
{
// load the model
loadOpts
:=
generateOptions
{
...
...
@@ -599,15 +612,17 @@ func generateInteractive(cmd *cobra.Command, opts generateOptions) error {
usageSet
:=
func
()
{
fmt
.
Fprintln
(
os
.
Stderr
,
"Available Commands:"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set parameter Set a parameter"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set history Enable history"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set nohistory Disable history"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set wordwrap Enable wordwrap"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set nowordwrap Disable wordwrap"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set format json Enable JSON mode"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set noformat Disable formatting"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set verbose Show LLM stats"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set quiet Disable LLM stats"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set parameter ... Set a parameter"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set system <string> Set system prompt"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set template <string> Set prompt template"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set history Enable history"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set nohistory Disable history"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set wordwrap Enable wordwrap"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set nowordwrap Disable wordwrap"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set format json Enable JSON mode"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set noformat Disable formatting"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set verbose Show LLM stats"
)
fmt
.
Fprintln
(
os
.
Stderr
,
" /set quiet Disable LLM stats"
)
fmt
.
Fprintln
(
os
.
Stderr
,
""
)
}
...
...
@@ -650,6 +665,7 @@ func generateInteractive(cmd *cobra.Command, opts generateOptions) error {
fmt
.
Print
(
readline
.
StartBracketedPaste
)
defer
fmt
.
Printf
(
readline
.
EndBracketedPaste
)
var
multiline
MultilineState
var
prompt
string
for
{
...
...
@@ -684,8 +700,21 @@ func generateInteractive(cmd *cobra.Command, opts generateOptions) error {
prompt
=
strings
.
TrimPrefix
(
prompt
,
`"""`
)
scanner
.
Prompt
.
UseAlt
=
false
switch
multiline
{
case
MultilineSystem
:
opts
.
System
=
prompt
prompt
=
""
fmt
.
Println
(
"Set system template.
\n
"
)
case
MultilineTemplate
:
opts
.
Template
=
prompt
prompt
=
""
fmt
.
Println
(
"Set model template.
\n
"
)
}
multiline
=
MultilineNone
case
strings
.
HasPrefix
(
line
,
`"""`
)
&&
len
(
prompt
)
==
0
:
scanner
.
Prompt
.
UseAlt
=
true
multiline
=
MultilinePrompt
prompt
+=
line
+
"
\n
"
continue
case
scanner
.
Pasting
:
...
...
@@ -742,6 +771,37 @@ func generateInteractive(cmd *cobra.Command, opts generateOptions) error {
}
fmt
.
Printf
(
"Set parameter '%s' to '%s'
\n\n
"
,
args
[
2
],
strings
.
Join
(
params
,
", "
))
opts
.
Options
[
args
[
2
]]
=
fp
[
args
[
2
]]
case
"system"
,
"template"
:
if
len
(
args
)
<
3
{
usageSet
()
continue
}
line
:=
strings
.
Join
(
args
[
2
:
],
" "
)
line
=
strings
.
TrimPrefix
(
line
,
`"""`
)
if
strings
.
HasPrefix
(
args
[
2
],
`"""`
)
{
cut
,
found
:=
strings
.
CutSuffix
(
line
,
`"""`
)
prompt
+=
cut
+
"
\n
"
if
found
{
opts
.
System
=
prompt
if
args
[
1
]
==
"system"
{
fmt
.
Println
(
"Set system template.
\n
"
)
}
else
{
fmt
.
Println
(
"Set prompt template.
\n
"
)
}
prompt
=
""
}
else
{
prompt
=
`"""`
+
prompt
if
args
[
1
]
==
"system"
{
multiline
=
MultilineSystem
}
else
{
multiline
=
MultilineTemplate
}
scanner
.
Prompt
.
UseAlt
=
true
}
}
else
{
opts
.
System
=
line
fmt
.
Println
(
"Set system template.
\n
"
)
}
default
:
fmt
.
Printf
(
"Unknown command '/set %s'. Type /? for help
\n
"
,
args
[
1
])
}
...
...
@@ -786,16 +846,22 @@ func generateInteractive(cmd *cobra.Command, opts generateOptions) error {
fmt
.
Println
(
resp
.
Parameters
)
}
case
"system"
:
if
resp
.
System
==
""
{
switch
{
case
opts
.
System
!=
""
:
fmt
.
Println
(
opts
.
System
+
"
\n
"
)
case
resp
.
System
!=
""
:
fmt
.
Println
(
resp
.
System
+
"
\n
"
)
default
:
fmt
.
Print
(
"No system prompt was specified for this model.
\n\n
"
)
}
else
{
fmt
.
Println
(
resp
.
System
)
}
case
"template"
:
if
resp
.
Template
==
""
{
fmt
.
Print
(
"No prompt template was specified for this model.
\n\n
"
)
}
else
{
switch
{
case
opts
.
Template
!=
""
:
fmt
.
Println
(
opts
.
Template
+
"
\n
"
)
case
resp
.
Template
!=
""
:
fmt
.
Println
(
resp
.
Template
)
default
:
fmt
.
Print
(
"No prompt template was specified for this model.
\n\n
"
)
}
default
:
fmt
.
Printf
(
"Unknown command '/show %s'. Type /? for help
\n
"
,
args
[
1
])
...
...
@@ -825,7 +891,7 @@ func generateInteractive(cmd *cobra.Command, opts generateOptions) error {
prompt
+=
line
}
if
len
(
prompt
)
>
0
&&
prompt
[
0
]
!=
'/'
{
if
len
(
prompt
)
>
0
&&
multiline
==
MultilineNone
{
opts
.
Prompt
=
prompt
if
err
:=
generate
(
cmd
,
opts
);
err
!=
nil
{
return
err
...
...
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