mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-05 15:37:35 +08:00
refactor: move code
This commit is contained in:
@@ -1 +1 @@
|
|||||||
v5.0.0-beta-2504272225
|
v5.0.0-beta-2504272237
|
||||||
|
|||||||
@@ -106,16 +106,6 @@ type combinedLLMService struct {
|
|||||||
asserter IAsserter // 提供断言功能
|
asserter IAsserter // 提供断言功能
|
||||||
}
|
}
|
||||||
|
|
||||||
// IPlanner 定义了规划功能接口
|
|
||||||
type IPlanner interface {
|
|
||||||
Call(opts *PlanningOptions) (*PlanningResult, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// IAsserter 定义了断言功能接口
|
|
||||||
type IAsserter interface {
|
|
||||||
Assert(opts *AssertOptions) (*AssertionResponse, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call 执行规划功能
|
// Call 执行规划功能
|
||||||
func (c *combinedLLMService) Call(opts *PlanningOptions) (*PlanningResult, error) {
|
func (c *combinedLLMService) Call(opts *PlanningOptions) (*PlanningResult, error) {
|
||||||
return c.planner.Call(opts)
|
return c.planner.Call(opts)
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ import (
|
|||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type IAsserter interface {
|
||||||
|
Assert(opts *AssertOptions) (*AssertionResponse, error)
|
||||||
|
}
|
||||||
|
|
||||||
// UI-TARS assertion system prompt
|
// UI-TARS assertion system prompt
|
||||||
const uiTarsAssertionPrompt = `You are a senior testing engineer. User will give an assertion and a screenshot of a page. By carefully viewing the screenshot, please tell whether the assertion is truthy.
|
const uiTarsAssertionPrompt = `You are a senior testing engineer. User will give an assertion and a screenshot of a page. By carefully viewing the screenshot, please tell whether the assertion is truthy.
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ import (
|
|||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type IPlanner interface {
|
||||||
|
Call(opts *PlanningOptions) (*PlanningResult, error)
|
||||||
|
}
|
||||||
|
|
||||||
// PlanningOptions represents the input options for planning
|
// PlanningOptions represents the input options for planning
|
||||||
type PlanningOptions struct {
|
type PlanningOptions struct {
|
||||||
UserInstruction string `json:"user_instruction"` // append to system prompt
|
UserInstruction string `json:"user_instruction"` // append to system prompt
|
||||||
|
|||||||
+42
-42
@@ -11,7 +11,6 @@ import (
|
|||||||
"github.com/httprunner/httprunner/v5/internal/config"
|
"github.com/httprunner/httprunner/v5/internal/config"
|
||||||
"github.com/httprunner/httprunner/v5/uixt/ai"
|
"github.com/httprunner/httprunner/v5/uixt/ai"
|
||||||
"github.com/httprunner/httprunner/v5/uixt/option"
|
"github.com/httprunner/httprunner/v5/uixt/option"
|
||||||
"github.com/httprunner/httprunner/v5/uixt/types"
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
@@ -56,47 +55,6 @@ func (dExt *XTDriver) AIAction(text string, opts ...option.ActionOption) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dExt *XTDriver) AIQuery(text string, opts ...option.ActionOption) (string, error) {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (dExt *XTDriver) AIAssert(assertion string, opts ...option.ActionOption) error {
|
|
||||||
if dExt.LLMService == nil {
|
|
||||||
return errors.New("LLM service is not initialized")
|
|
||||||
}
|
|
||||||
|
|
||||||
compressedBufSource, err := dExt.GetScreenShotBuffer()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// convert buffer to base64 string
|
|
||||||
screenShotBase64 := "data:image/jpeg;base64," +
|
|
||||||
base64.StdEncoding.EncodeToString(compressedBufSource.Bytes())
|
|
||||||
|
|
||||||
// get window size
|
|
||||||
size, err := dExt.IDriver.WindowSize()
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "get window size for AI assertion failed")
|
|
||||||
}
|
|
||||||
|
|
||||||
// execute assertion
|
|
||||||
result, err := dExt.LLMService.Assert(&ai.AssertOptions{
|
|
||||||
Assertion: assertion,
|
|
||||||
Screenshot: screenShotBase64,
|
|
||||||
Size: types.Size{Width: size.Width, Height: size.Height},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "AI assertion failed")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !result.Pass {
|
|
||||||
return errors.New(result.Thought)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (dExt *XTDriver) PlanNextAction(text string, opts ...option.ActionOption) (*ai.PlanningResult, error) {
|
func (dExt *XTDriver) PlanNextAction(text string, opts ...option.ActionOption) (*ai.PlanningResult, error) {
|
||||||
if dExt.LLMService == nil {
|
if dExt.LLMService == nil {
|
||||||
return nil, errors.New("LLM service is not initialized")
|
return nil, errors.New("LLM service is not initialized")
|
||||||
@@ -150,3 +108,45 @@ func (dExt *XTDriver) PlanNextAction(text string, opts ...option.ActionOption) (
|
|||||||
}
|
}
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dExt *XTDriver) AIQuery(text string, opts ...option.ActionOption) (string, error) {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (dExt *XTDriver) AIAssert(assertion string, opts ...option.ActionOption) error {
|
||||||
|
if dExt.LLMService == nil {
|
||||||
|
return errors.New("LLM service is not initialized")
|
||||||
|
}
|
||||||
|
|
||||||
|
compressedBufSource, err := dExt.GetScreenShotBuffer()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert buffer to base64 string
|
||||||
|
screenShotBase64 := "data:image/jpeg;base64," +
|
||||||
|
base64.StdEncoding.EncodeToString(compressedBufSource.Bytes())
|
||||||
|
|
||||||
|
// get window size
|
||||||
|
size, err := dExt.IDriver.WindowSize()
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "get window size for AI assertion failed")
|
||||||
|
}
|
||||||
|
|
||||||
|
// execute assertion
|
||||||
|
assertOpts := &ai.AssertOptions{
|
||||||
|
Assertion: assertion,
|
||||||
|
Screenshot: screenShotBase64,
|
||||||
|
Size: size,
|
||||||
|
}
|
||||||
|
result, err := dExt.LLMService.Assert(assertOpts)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "AI assertion failed")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !result.Pass {
|
||||||
|
return errors.New(result.Thought)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user