@pippit-dev/cli 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/checksums.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
889fabfbe3bd94cfeb34f9e3ee5fd9c2b39d5ab57f13e8b2c257dfca142bb2ce pippit-tool-cli-1.0.4-darwin-amd64.tar.gz
|
|
2
|
+
8c54acc247b9f7050697fd2c52f3df84558fcfe01db3c7e186b4741294738236 pippit-tool-cli-1.0.4-darwin-arm64.tar.gz
|
|
3
|
+
45de9614ed9b4241775f0451e603ab833484810def2eed31e4b3673a9cfe283d pippit-tool-cli-1.0.4-linux-amd64.tar.gz
|
|
4
|
+
44852e1542b44085d543f2f2672ae9793e6e6bf7457ec90f7efcf46e3e252820 pippit-tool-cli-1.0.4-linux-arm64.tar.gz
|
|
5
|
+
4b921069137fbe129973dbceae7fdbaa8a8f5cc2803ff3347b1e21452c3b9946 pippit-tool-cli-1.0.4-windows-amd64.zip
|
|
6
|
+
adf357fab99845e47933669d0fef8395189e023f69546454f61e4aca14392195 pippit-tool-cli-1.0.4-windows-arm64.zip
|
|
@@ -26,7 +26,7 @@ func NewQueryResultCommand(stdout, stderr io.Writer, runner *common.Runner) *cob
|
|
|
26
26
|
"run_id": strings.TrimSpace(opts.RunID),
|
|
27
27
|
"download_dir": strings.TrimSpace(opts.DownloadDir),
|
|
28
28
|
})
|
|
29
|
-
|
|
29
|
+
result = queryResultFromError(err, opts)
|
|
30
30
|
}
|
|
31
31
|
encoder := json.NewEncoder(stdout)
|
|
32
32
|
encoder.SetIndent("", " ")
|
|
@@ -40,3 +40,15 @@ func NewQueryResultCommand(stdout, stderr io.Writer, runner *common.Runner) *cob
|
|
|
40
40
|
cmd.Flags().StringVar(&opts.DownloadDir, "download-dir", "", "directory to download completed videos into")
|
|
41
41
|
return cmd
|
|
42
42
|
}
|
|
43
|
+
|
|
44
|
+
func queryResultFromError(err error, opts *internalgen.QueryResultOptions) *internalgen.QueryResultResult {
|
|
45
|
+
result := &internalgen.QueryResultResult{
|
|
46
|
+
ErrorMessage: err.Error(),
|
|
47
|
+
Videos: []internalgen.QueryResultVideo{},
|
|
48
|
+
}
|
|
49
|
+
if opts != nil {
|
|
50
|
+
result.ThreadID = strings.TrimSpace(opts.ThreadID)
|
|
51
|
+
result.RunID = strings.TrimSpace(opts.RunID)
|
|
52
|
+
}
|
|
53
|
+
return result
|
|
54
|
+
}
|
|
@@ -384,30 +384,64 @@ func TestQueryResultIgnoresVideoDataWithoutVideoSubType(t *testing.T) {
|
|
|
384
384
|
"--download-dir", t.TempDir(),
|
|
385
385
|
})
|
|
386
386
|
|
|
387
|
-
err := root.Execute()
|
|
388
|
-
|
|
389
|
-
|
|
387
|
+
if err := root.Execute(); err != nil {
|
|
388
|
+
t.Fatalf("Execute() error = %v, stderr = %s", err, stderr.String())
|
|
389
|
+
}
|
|
390
|
+
got := decodeJSON(t, stdout.Bytes())
|
|
391
|
+
if got["completed"] != false {
|
|
392
|
+
t.Fatalf("completed = %v, want false", got["completed"])
|
|
393
|
+
}
|
|
394
|
+
if got["thread_id"] != "thread_123" || got["run_id"] != "run_456" {
|
|
395
|
+
t.Fatalf("ids = (%v, %v), want thread/run ids", got["thread_id"], got["run_id"])
|
|
390
396
|
}
|
|
391
|
-
if
|
|
392
|
-
t.Fatalf("
|
|
397
|
+
if got["error_message"] != "下载失败:未找到可下载的视频产物" {
|
|
398
|
+
t.Fatalf("error_message = %v, want no downloadable video error", got["error_message"])
|
|
393
399
|
}
|
|
394
|
-
|
|
395
|
-
|
|
400
|
+
videos, ok := got["videos"].([]any)
|
|
401
|
+
if !ok || len(videos) != 0 {
|
|
402
|
+
t.Fatalf("videos = %#v, want empty", got["videos"])
|
|
396
403
|
}
|
|
397
404
|
}
|
|
398
405
|
|
|
399
|
-
func
|
|
406
|
+
func TestQueryResultValidationErrorReturnsJSON(t *testing.T) {
|
|
407
|
+
var stdout, stderr bytes.Buffer
|
|
408
|
+
root := newTestRootCommand(t, &stdout, &stderr, "http://127.0.0.1")
|
|
409
|
+
root.SetArgs([]string{
|
|
410
|
+
"query-result",
|
|
411
|
+
"--run-id", "run_456",
|
|
412
|
+
"--download-dir", t.TempDir(),
|
|
413
|
+
})
|
|
414
|
+
|
|
415
|
+
if err := root.Execute(); err != nil {
|
|
416
|
+
t.Fatalf("Execute() error = %v, stderr = %s", err, stderr.String())
|
|
417
|
+
}
|
|
418
|
+
got := decodeJSON(t, stdout.Bytes())
|
|
419
|
+
if got["completed"] != false {
|
|
420
|
+
t.Fatalf("completed = %v, want false", got["completed"])
|
|
421
|
+
}
|
|
422
|
+
if got["thread_id"] != "" || got["run_id"] != "run_456" {
|
|
423
|
+
t.Fatalf("ids = (%v, %v), want empty thread_id and run_id", got["thread_id"], got["run_id"])
|
|
424
|
+
}
|
|
425
|
+
if got["error_message"] != "查询失败:缺少必填参数 --thread-id" {
|
|
426
|
+
t.Fatalf("error_message = %v, want validation error", got["error_message"])
|
|
427
|
+
}
|
|
428
|
+
videos, ok := got["videos"].([]any)
|
|
429
|
+
if !ok || len(videos) != 0 {
|
|
430
|
+
t.Fatalf("videos = %#v, want empty", got["videos"])
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
func TestQueryResultGetThreadBusinessErrorReturnsErrorMessage(t *testing.T) {
|
|
400
435
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
401
436
|
switch r.URL.Path {
|
|
402
437
|
case "/api/biz/v1/skill/get_thread":
|
|
403
|
-
_, _ = w.Write([]byte(`{"ret":"5","errmsg":"
|
|
438
|
+
_, _ = w.Write([]byte(`{"ret":"5","errmsg":"创作失败:暂时无法生成","log_id":"log_456"}`))
|
|
404
439
|
default:
|
|
405
440
|
t.Fatalf("unexpected path %s", r.URL.Path)
|
|
406
441
|
}
|
|
407
442
|
}))
|
|
408
443
|
defer server.Close()
|
|
409
444
|
|
|
410
|
-
clearDailyErrorLog(t)
|
|
411
445
|
var stdout, stderr bytes.Buffer
|
|
412
446
|
root := newTestRootCommand(t, &stdout, &stderr, server.URL)
|
|
413
447
|
root.SetArgs([]string{
|
|
@@ -417,23 +451,22 @@ func TestQueryResultErrorLogIncludesLogID(t *testing.T) {
|
|
|
417
451
|
"--download-dir", t.TempDir(),
|
|
418
452
|
})
|
|
419
453
|
|
|
420
|
-
err := root.Execute()
|
|
421
|
-
|
|
422
|
-
t.Fatal("Execute() error = nil, want get_thread error")
|
|
454
|
+
if err := root.Execute(); err != nil {
|
|
455
|
+
t.Fatalf("Execute() error = %v, stderr = %s", err, stderr.String())
|
|
423
456
|
}
|
|
424
|
-
|
|
425
|
-
if
|
|
426
|
-
t.Fatalf("
|
|
457
|
+
got := decodeJSON(t, stdout.Bytes())
|
|
458
|
+
if got["completed"] != true {
|
|
459
|
+
t.Fatalf("completed = %v, want true", got["completed"])
|
|
427
460
|
}
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
t.Fatalf("fields = %#v, want object", entries[0]["fields"])
|
|
461
|
+
if got["thread_id"] != "thread_123" || got["run_id"] != "run_456" {
|
|
462
|
+
t.Fatalf("ids = (%v, %v), want thread/run ids", got["thread_id"], got["run_id"])
|
|
431
463
|
}
|
|
432
|
-
if
|
|
433
|
-
t.Fatalf("
|
|
464
|
+
if got["error_message"] != "创作失败:暂时无法生成 log_id=log_456" {
|
|
465
|
+
t.Fatalf("error_message = %v, want get_thread business error", got["error_message"])
|
|
434
466
|
}
|
|
435
|
-
|
|
436
|
-
|
|
467
|
+
videos, ok := got["videos"].([]any)
|
|
468
|
+
if !ok || len(videos) != 0 {
|
|
469
|
+
t.Fatalf("videos = %#v, want empty", got["videos"])
|
|
437
470
|
}
|
|
438
471
|
}
|
|
439
472
|
|
|
@@ -3,6 +3,7 @@ package generate_video
|
|
|
3
3
|
import (
|
|
4
4
|
"context"
|
|
5
5
|
"encoding/json"
|
|
6
|
+
"errors"
|
|
6
7
|
"fmt"
|
|
7
8
|
"path/filepath"
|
|
8
9
|
"strconv"
|
|
@@ -89,6 +90,9 @@ func QueryResult(ctx context.Context, opts *QueryResultOptions, runner *common.R
|
|
|
89
90
|
RunID: opts.RunID,
|
|
90
91
|
}, runner)
|
|
91
92
|
if err != nil {
|
|
93
|
+
if result, ok := queryResultFromGetThreadBusinessError(err, opts); ok {
|
|
94
|
+
return result, nil
|
|
95
|
+
}
|
|
92
96
|
return nil, fmt.Errorf("查询失败:%w", err)
|
|
93
97
|
}
|
|
94
98
|
|
|
@@ -159,6 +163,35 @@ func QueryResult(ctx context.Context, opts *QueryResultOptions, runner *common.R
|
|
|
159
163
|
}, nil
|
|
160
164
|
}
|
|
161
165
|
|
|
166
|
+
func queryResultFromGetThreadBusinessError(err error, opts *QueryResultOptions) (*QueryResultResult, bool) {
|
|
167
|
+
var logErr *common.LogIDError
|
|
168
|
+
if !errors.As(err, &logErr) {
|
|
169
|
+
return nil, false
|
|
170
|
+
}
|
|
171
|
+
message := getThreadBusinessErrorMessage(logErr.Message)
|
|
172
|
+
if message == "" {
|
|
173
|
+
message = "查询失败"
|
|
174
|
+
}
|
|
175
|
+
if logID := logErr.LogID(); logID != "" {
|
|
176
|
+
message = fmt.Sprintf("%s log_id=%s", message, logID)
|
|
177
|
+
}
|
|
178
|
+
return &QueryResultResult{
|
|
179
|
+
Completed: true,
|
|
180
|
+
ThreadID: opts.ThreadID,
|
|
181
|
+
RunID: opts.RunID,
|
|
182
|
+
ErrorMessage: message,
|
|
183
|
+
Videos: []QueryResultVideo{},
|
|
184
|
+
}, true
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
func getThreadBusinessErrorMessage(message string) string {
|
|
188
|
+
message = strings.TrimSpace(message)
|
|
189
|
+
if idx := strings.Index(message, "errmsg="); idx >= 0 {
|
|
190
|
+
return strings.TrimSpace(message[idx+len("errmsg="):])
|
|
191
|
+
}
|
|
192
|
+
return message
|
|
193
|
+
}
|
|
194
|
+
|
|
162
195
|
func validateQueryResultOptions(opts *QueryResultOptions) error {
|
|
163
196
|
if opts == nil {
|
|
164
197
|
return fmt.Errorf("查询失败:缺少必填参数 --thread-id")
|