Ei kuvausta
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.

client.go 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package opencode
  2. import (
  3. "context"
  4. )
  5. // OpenCodeClient opencode 客户端接口
  6. type OpenCodeClient interface {
  7. CreateSession(ctx context.Context, title string) (*Session, error)
  8. SendPrompt(ctx context.Context, sessionID string, prompt *PromptRequest) (*PromptResponse, error)
  9. SendPromptStream(ctx context.Context, sessionID string, prompt *PromptRequest) (<-chan string, error)
  10. GetSession(ctx context.Context, sessionID string) (*Session, error)
  11. ListSessions(ctx context.Context) ([]Session, error)
  12. GetSessionMessages(ctx context.Context, sessionID string, limit int) ([]SessionMessage, error)
  13. GetBaseURL() string
  14. GetPort() int
  15. }
  16. // Session 会话信息
  17. type Session struct {
  18. ID string `json:"id"`
  19. Title string `json:"title"`
  20. ParentID string `json:"parentID,omitempty"`
  21. Path map[string]string `json:"path,omitempty"`
  22. CreatedAt string `json:"createdAt,omitempty"`
  23. }
  24. // PromptRequest 对话请求
  25. type PromptRequest struct {
  26. Parts []TextPart `json:"parts"`
  27. Agent string `json:"agent,omitempty"`
  28. Model *ModelInfo `json:"model,omitempty"`
  29. // Experimental 实验性配置
  30. Experimental *struct {
  31. DisablePasteSummary *bool `json:"disable_paste_summary,omitempty"`
  32. } `json:"experimental,omitempty"`
  33. }
  34. // TextPart 文本部分
  35. type TextPart struct {
  36. Type string `json:"type"`
  37. Text string `json:"text"`
  38. }
  39. // ModelInfo 模型信息
  40. type ModelInfo struct {
  41. ProviderID string `json:"providerID"`
  42. ModelID string `json:"modelID"`
  43. }
  44. // PromptResponse 对话响应
  45. type PromptResponse struct {
  46. Info AssistantMessage `json:"info"`
  47. Parts []interface{} `json:"parts"`
  48. }
  49. // AssistantMessage 助理消息
  50. type AssistantMessage struct {
  51. ID string `json:"id"`
  52. Role string `json:"role"`
  53. SessionID string `json:"sessionID"`
  54. Content string `json:"content,omitempty"`
  55. Agent string `json:"agent"`
  56. ModelID string `json:"modelID"`
  57. ProviderID string `json:"providerID"`
  58. Tokens TokenInfo `json:"tokens"`
  59. Time map[string]interface{} `json:"time"`
  60. }
  61. // TokenInfo token 信息
  62. type TokenInfo struct {
  63. Input int `json:"input"`
  64. Output int `json:"output"`
  65. }
  66. // SessionMessage 会话消息(包含info和parts)
  67. type SessionMessage struct {
  68. Info map[string]interface{} `json:"info"`
  69. Parts []map[string]interface{} `json:"parts"`
  70. }