(workflow) add simple harness workflow for manual testing
This commit is contained in:
+76
-1
@@ -1,3 +1,78 @@
|
||||
package action
|
||||
|
||||
// Empty stub - will be filled in T0.5
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/rockliang/poimen/workflows/action/llm"
|
||||
"github.com/rockliang/poimen/workflows/prompts"
|
||||
"github.com/rockliang/poimen/workflows/statemachine"
|
||||
)
|
||||
|
||||
// JudgeInput is input to JudgeActivity.
|
||||
type JudgeInput struct {
|
||||
Config statemachine.OrchestratorConfig
|
||||
Diff string // git diff output
|
||||
IntegrationTestLogs string // test output
|
||||
}
|
||||
|
||||
// JudgeOutput is the output of JudgeActivity.
|
||||
type JudgeOutput struct {
|
||||
Verdict string // "pass" or "fail"
|
||||
Critique string // explanation if fail
|
||||
}
|
||||
|
||||
// JudgeActivity calls the Judge LLM to review correctness.
|
||||
func JudgeActivity(ctx context.Context, in JudgeInput) (JudgeOutput, error) {
|
||||
// Get LLM client
|
||||
client, err := llm.NewClient()
|
||||
if err != nil {
|
||||
return JudgeOutput{}, fmt.Errorf("failed to create LLM client: %w", err)
|
||||
}
|
||||
|
||||
// Get judge spec
|
||||
judgeSpec, exists := in.Config.RolePrompts["judge"]
|
||||
if !exists {
|
||||
return JudgeOutput{}, fmt.Errorf("judge role prompt not configured")
|
||||
}
|
||||
|
||||
// Render template
|
||||
var templateContent string
|
||||
if judgeSpec.RawTemplate != "" {
|
||||
templateContent = judgeSpec.RawTemplate
|
||||
} else {
|
||||
// Parse and render the embedded template
|
||||
templateContent, err = prompts.Render(judgeSpec.TemplateRef, map[string]any{
|
||||
"SystemPrompt": in.Config.SystemPrompt,
|
||||
"Diff": in.Diff,
|
||||
"TestResult": in.IntegrationTestLogs,
|
||||
})
|
||||
if err != nil {
|
||||
return JudgeOutput{}, fmt.Errorf("failed to render judge template: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Call LLM
|
||||
messages := []llm.MessageParam{
|
||||
{
|
||||
Role: "user",
|
||||
Content: templateContent,
|
||||
},
|
||||
}
|
||||
|
||||
response, err := client.CreateMessage(ctx, llm.MessageInput{
|
||||
Model: judgeSpec.Model,
|
||||
SystemPrompt: in.Config.SystemPrompt,
|
||||
Messages: messages,
|
||||
})
|
||||
if err != nil {
|
||||
return JudgeOutput{}, fmt.Errorf("judge LLM call failed: %w", err)
|
||||
}
|
||||
|
||||
// For now, return a default pass verdict
|
||||
// In full implementation, would parse LLM response
|
||||
return JudgeOutput{
|
||||
Verdict: "pass",
|
||||
Critique: response,
|
||||
}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user