Skip to content

Commit

Permalink
Feat: Refactoring plugin:LLM honeypot custom prompt (#154)
Browse files Browse the repository at this point in the history
refactoring LLM honeypot custom prompt
  • Loading branch information
mariocandela authored Jan 16, 2025
1 parent c3d2ff8 commit 99c7287
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 19 deletions.
32 changes: 15 additions & 17 deletions plugins/llm-integration.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,19 @@ func InitLLMHoneypot(config LLMHoneypot) *LLMHoneypot {
return &config
}

func buildPrompt(histories []Message, protocol tracer.Protocol, command string) ([]Message, error) {
func (llmHoneypot *LLMHoneypot) buildPrompt(command string) ([]Message, error) {
var messages []Message
var prompt string

switch protocol {
switch llmHoneypot.Protocol {
case tracer.SSH:
prompt = systemPromptVirtualizeLinuxTerminal
if llmHoneypot.CustomPrompt != "" {
prompt = llmHoneypot.CustomPrompt
}
messages = append(messages, Message{
Role: SYSTEM.String(),
Content: systemPromptVirtualizeLinuxTerminal,
Content: prompt,
})
messages = append(messages, Message{
Role: USER.String(),
Expand All @@ -113,13 +118,17 @@ func buildPrompt(histories []Message, protocol tracer.Protocol, command string)
Role: ASSISTANT.String(),
Content: "/home/user",
})
for _, history := range histories {
for _, history := range llmHoneypot.Histories {
messages = append(messages, history)
}
case tracer.HTTP:
prompt = systemPromptVirtualizeHTTPServer
if llmHoneypot.CustomPrompt != "" {
prompt = llmHoneypot.CustomPrompt
}
messages = append(messages, Message{
Role: SYSTEM.String(),
Content: systemPromptVirtualizeHTTPServer,
Content: prompt,
})
messages = append(messages, Message{
Role: USER.String(),
Expand Down Expand Up @@ -214,18 +223,7 @@ func (llmHoneypot *LLMHoneypot) ExecuteModel(command string) (string, error) {
var err error
var prompt []Message

if llmHoneypot.CustomPrompt != "" {
prompt = append(prompt, Message{
Role: SYSTEM.String(),
Content: llmHoneypot.CustomPrompt,
})
prompt = append(prompt, Message{
Role: USER.String(),
Content: command,
})
} else {
prompt, err = buildPrompt(llmHoneypot.Histories, llmHoneypot.Protocol, command)
}
prompt, err = llmHoneypot.buildPrompt(command)

if err != nil {
return "", err
Expand Down
40 changes: 38 additions & 2 deletions plugins/llm-integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,13 @@ func TestBuildPromptEmptyHistory(t *testing.T) {
var histories []Message
command := "pwd"

honeypot := LLMHoneypot{
Histories: histories,
Protocol: tracer.SSH,
}

//When
prompt, err := buildPrompt(histories, tracer.SSH, command)
prompt, err := honeypot.buildPrompt(command)

//Then
assert.Nil(t, err)
Expand All @@ -35,14 +40,45 @@ func TestBuildPromptWithHistory(t *testing.T) {

command := "pwd"

honeypot := LLMHoneypot{
Histories: histories,
Protocol: tracer.SSH,
}

//When
prompt, err := buildPrompt(histories, tracer.SSH, command)
prompt, err := honeypot.buildPrompt(command)

//Then
assert.Nil(t, err)
assert.Equal(t, SystemPromptLen+1, len(prompt))
}

func TestBuildPromptWithCustomPrompt(t *testing.T) {
//Given
var histories = []Message{
{
Role: "cat hello.txt",
Content: "world",
},
}

command := "pwd"

honeypot := LLMHoneypot{
Histories: histories,
Protocol: tracer.SSH,
CustomPrompt: "act as calculator",
}

//When
prompt, err := honeypot.buildPrompt(command)

//Then
assert.Nil(t, err)
assert.Equal(t, prompt[0].Content, "act as calculator")
assert.Equal(t, prompt[0].Role, SYSTEM.String())
}

func TestBuildExecuteModelFailValidation(t *testing.T) {

llmHoneypot := LLMHoneypot{
Expand Down

0 comments on commit 99c7287

Please sign in to comment.