No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

prompt_sync_routes.go 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package routes
  2. import (
  3. "context"
  4. "git.x2erp.com/qdy/go-base/ctx"
  5. "git.x2erp.com/qdy/go-base/model/response"
  6. "git.x2erp.com/qdy/go-base/webx/router"
  7. "git.x2erp.com/qdy/go-svc-code/internal/opencode"
  8. )
  9. // PromptSyncRequest 同步对话请求
  10. type PromptSyncRequest struct {
  11. SessionID string `json:"sessionID" binding:"required"`
  12. Parts []opencode.TextPart `json:"parts" binding:"required"`
  13. Agent string `json:"agent,omitempty"`
  14. Model *opencode.ModelInfo `json:"model,omitempty"`
  15. }
  16. // PromptSyncResponse 同步对话响应
  17. type PromptSyncResponse struct {
  18. Info opencode.AssistantMessage `json:"info"`
  19. Parts []interface{} `json:"parts"`
  20. }
  21. // RegisterPromptSyncRoutes 注册同步对话路由
  22. func RegisterPromptSyncRoutes(ws *router.RouterService, client opencode.OpenCodeClient) {
  23. // 同步对话
  24. ws.POST("/api/prompt/sync",
  25. func(req *PromptSyncRequest, ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[PromptSyncResponse], error) {
  26. prompt := &opencode.PromptRequest{
  27. Parts: req.Parts,
  28. Agent: req.Agent,
  29. Model: req.Model,
  30. }
  31. resp, err := client.SendPrompt(ctx, req.SessionID, prompt)
  32. if err != nil {
  33. return &response.QueryResult[PromptSyncResponse]{
  34. Success: false,
  35. Message: err.Error(),
  36. }, nil
  37. }
  38. return &response.QueryResult[PromptSyncResponse]{
  39. Success: true,
  40. Data: PromptSyncResponse{
  41. Info: resp.Info,
  42. Parts: resp.Parts,
  43. },
  44. }, nil
  45. },
  46. ).Desc("同步对话(阻塞等待完整响应)").Register()
  47. }