app.go 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
  2. package opencode
  3. import (
  4. "context"
  5. "net/http"
  6. "net/url"
  7. "slices"
  8. "github.com/sst/opencode-sdk-go/internal/apijson"
  9. "github.com/sst/opencode-sdk-go/internal/apiquery"
  10. "github.com/sst/opencode-sdk-go/internal/param"
  11. "github.com/sst/opencode-sdk-go/internal/requestconfig"
  12. "github.com/sst/opencode-sdk-go/option"
  13. )
  14. // AppService contains methods and other services that help with interacting with
  15. // the opencode API.
  16. //
  17. // Note, unlike clients, this service does not read variables from the environment
  18. // automatically. You should not instantiate this service directly, and instead use
  19. // the [NewAppService] method instead.
  20. type AppService struct {
  21. Options []option.RequestOption
  22. }
  23. // NewAppService generates a new service that applies the given options to each
  24. // request. These options are applied after the parent client's options (if there
  25. // is one), and before any request-specific options.
  26. func NewAppService(opts ...option.RequestOption) (r *AppService) {
  27. r = &AppService{}
  28. r.Options = opts
  29. return
  30. }
  31. // Write a log entry to the server logs
  32. func (r *AppService) Log(ctx context.Context, params AppLogParams, opts ...option.RequestOption) (res *bool, err error) {
  33. opts = slices.Concat(r.Options, opts)
  34. path := "log"
  35. err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...)
  36. return
  37. }
  38. // List all providers
  39. func (r *AppService) Providers(ctx context.Context, query AppProvidersParams, opts ...option.RequestOption) (res *AppProvidersResponse, err error) {
  40. opts = slices.Concat(r.Options, opts)
  41. path := "config/providers"
  42. err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...)
  43. return
  44. }
  45. type Model struct {
  46. ID string `json:"id,required"`
  47. Attachment bool `json:"attachment,required"`
  48. Cost ModelCost `json:"cost,required"`
  49. Limit ModelLimit `json:"limit,required"`
  50. Name string `json:"name,required"`
  51. Options map[string]interface{} `json:"options,required"`
  52. Reasoning bool `json:"reasoning,required"`
  53. ReleaseDate string `json:"release_date,required"`
  54. Temperature bool `json:"temperature,required"`
  55. ToolCall bool `json:"tool_call,required"`
  56. Experimental bool `json:"experimental"`
  57. Modalities ModelModalities `json:"modalities"`
  58. Provider ModelProvider `json:"provider"`
  59. Status ModelStatus `json:"status"`
  60. JSON modelJSON `json:"-"`
  61. }
  62. // modelJSON contains the JSON metadata for the struct [Model]
  63. type modelJSON struct {
  64. ID apijson.Field
  65. Attachment apijson.Field
  66. Cost apijson.Field
  67. Limit apijson.Field
  68. Name apijson.Field
  69. Options apijson.Field
  70. Reasoning apijson.Field
  71. ReleaseDate apijson.Field
  72. Temperature apijson.Field
  73. ToolCall apijson.Field
  74. Experimental apijson.Field
  75. Modalities apijson.Field
  76. Provider apijson.Field
  77. Status apijson.Field
  78. raw string
  79. ExtraFields map[string]apijson.Field
  80. }
  81. func (r *Model) UnmarshalJSON(data []byte) (err error) {
  82. return apijson.UnmarshalRoot(data, r)
  83. }
  84. func (r modelJSON) RawJSON() string {
  85. return r.raw
  86. }
  87. type ModelCost struct {
  88. Input float64 `json:"input,required"`
  89. Output float64 `json:"output,required"`
  90. CacheRead float64 `json:"cache_read"`
  91. CacheWrite float64 `json:"cache_write"`
  92. JSON modelCostJSON `json:"-"`
  93. }
  94. // modelCostJSON contains the JSON metadata for the struct [ModelCost]
  95. type modelCostJSON struct {
  96. Input apijson.Field
  97. Output apijson.Field
  98. CacheRead apijson.Field
  99. CacheWrite apijson.Field
  100. raw string
  101. ExtraFields map[string]apijson.Field
  102. }
  103. func (r *ModelCost) UnmarshalJSON(data []byte) (err error) {
  104. return apijson.UnmarshalRoot(data, r)
  105. }
  106. func (r modelCostJSON) RawJSON() string {
  107. return r.raw
  108. }
  109. type ModelLimit struct {
  110. Context float64 `json:"context,required"`
  111. Output float64 `json:"output,required"`
  112. JSON modelLimitJSON `json:"-"`
  113. }
  114. // modelLimitJSON contains the JSON metadata for the struct [ModelLimit]
  115. type modelLimitJSON struct {
  116. Context apijson.Field
  117. Output apijson.Field
  118. raw string
  119. ExtraFields map[string]apijson.Field
  120. }
  121. func (r *ModelLimit) UnmarshalJSON(data []byte) (err error) {
  122. return apijson.UnmarshalRoot(data, r)
  123. }
  124. func (r modelLimitJSON) RawJSON() string {
  125. return r.raw
  126. }
  127. type ModelModalities struct {
  128. Input []ModelModalitiesInput `json:"input,required"`
  129. Output []ModelModalitiesOutput `json:"output,required"`
  130. JSON modelModalitiesJSON `json:"-"`
  131. }
  132. // modelModalitiesJSON contains the JSON metadata for the struct [ModelModalities]
  133. type modelModalitiesJSON struct {
  134. Input apijson.Field
  135. Output apijson.Field
  136. raw string
  137. ExtraFields map[string]apijson.Field
  138. }
  139. func (r *ModelModalities) UnmarshalJSON(data []byte) (err error) {
  140. return apijson.UnmarshalRoot(data, r)
  141. }
  142. func (r modelModalitiesJSON) RawJSON() string {
  143. return r.raw
  144. }
  145. type ModelModalitiesInput string
  146. const (
  147. ModelModalitiesInputText ModelModalitiesInput = "text"
  148. ModelModalitiesInputAudio ModelModalitiesInput = "audio"
  149. ModelModalitiesInputImage ModelModalitiesInput = "image"
  150. ModelModalitiesInputVideo ModelModalitiesInput = "video"
  151. ModelModalitiesInputPdf ModelModalitiesInput = "pdf"
  152. )
  153. func (r ModelModalitiesInput) IsKnown() bool {
  154. switch r {
  155. case ModelModalitiesInputText, ModelModalitiesInputAudio, ModelModalitiesInputImage, ModelModalitiesInputVideo, ModelModalitiesInputPdf:
  156. return true
  157. }
  158. return false
  159. }
  160. type ModelModalitiesOutput string
  161. const (
  162. ModelModalitiesOutputText ModelModalitiesOutput = "text"
  163. ModelModalitiesOutputAudio ModelModalitiesOutput = "audio"
  164. ModelModalitiesOutputImage ModelModalitiesOutput = "image"
  165. ModelModalitiesOutputVideo ModelModalitiesOutput = "video"
  166. ModelModalitiesOutputPdf ModelModalitiesOutput = "pdf"
  167. )
  168. func (r ModelModalitiesOutput) IsKnown() bool {
  169. switch r {
  170. case ModelModalitiesOutputText, ModelModalitiesOutputAudio, ModelModalitiesOutputImage, ModelModalitiesOutputVideo, ModelModalitiesOutputPdf:
  171. return true
  172. }
  173. return false
  174. }
  175. type ModelProvider struct {
  176. Npm string `json:"npm,required"`
  177. JSON modelProviderJSON `json:"-"`
  178. }
  179. // modelProviderJSON contains the JSON metadata for the struct [ModelProvider]
  180. type modelProviderJSON struct {
  181. Npm apijson.Field
  182. raw string
  183. ExtraFields map[string]apijson.Field
  184. }
  185. func (r *ModelProvider) UnmarshalJSON(data []byte) (err error) {
  186. return apijson.UnmarshalRoot(data, r)
  187. }
  188. func (r modelProviderJSON) RawJSON() string {
  189. return r.raw
  190. }
  191. type ModelStatus string
  192. const (
  193. ModelStatusAlpha ModelStatus = "alpha"
  194. ModelStatusBeta ModelStatus = "beta"
  195. )
  196. func (r ModelStatus) IsKnown() bool {
  197. switch r {
  198. case ModelStatusAlpha, ModelStatusBeta:
  199. return true
  200. }
  201. return false
  202. }
  203. type Provider struct {
  204. ID string `json:"id,required"`
  205. Env []string `json:"env,required"`
  206. Models map[string]Model `json:"models,required"`
  207. Name string `json:"name,required"`
  208. API string `json:"api"`
  209. Npm string `json:"npm"`
  210. JSON providerJSON `json:"-"`
  211. }
  212. // providerJSON contains the JSON metadata for the struct [Provider]
  213. type providerJSON struct {
  214. ID apijson.Field
  215. Env apijson.Field
  216. Models apijson.Field
  217. Name apijson.Field
  218. API apijson.Field
  219. Npm apijson.Field
  220. raw string
  221. ExtraFields map[string]apijson.Field
  222. }
  223. func (r *Provider) UnmarshalJSON(data []byte) (err error) {
  224. return apijson.UnmarshalRoot(data, r)
  225. }
  226. func (r providerJSON) RawJSON() string {
  227. return r.raw
  228. }
  229. type AppProvidersResponse struct {
  230. Default map[string]string `json:"default,required"`
  231. Providers []Provider `json:"providers,required"`
  232. JSON appProvidersResponseJSON `json:"-"`
  233. }
  234. // appProvidersResponseJSON contains the JSON metadata for the struct
  235. // [AppProvidersResponse]
  236. type appProvidersResponseJSON struct {
  237. Default apijson.Field
  238. Providers apijson.Field
  239. raw string
  240. ExtraFields map[string]apijson.Field
  241. }
  242. func (r *AppProvidersResponse) UnmarshalJSON(data []byte) (err error) {
  243. return apijson.UnmarshalRoot(data, r)
  244. }
  245. func (r appProvidersResponseJSON) RawJSON() string {
  246. return r.raw
  247. }
  248. type AppLogParams struct {
  249. // Log level
  250. Level param.Field[AppLogParamsLevel] `json:"level,required"`
  251. // Log message
  252. Message param.Field[string] `json:"message,required"`
  253. // Service name for the log entry
  254. Service param.Field[string] `json:"service,required"`
  255. Directory param.Field[string] `query:"directory"`
  256. // Additional metadata for the log entry
  257. Extra param.Field[map[string]interface{}] `json:"extra"`
  258. }
  259. func (r AppLogParams) MarshalJSON() (data []byte, err error) {
  260. return apijson.MarshalRoot(r)
  261. }
  262. // URLQuery serializes [AppLogParams]'s query parameters as `url.Values`.
  263. func (r AppLogParams) URLQuery() (v url.Values) {
  264. return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
  265. ArrayFormat: apiquery.ArrayQueryFormatComma,
  266. NestedFormat: apiquery.NestedQueryFormatBrackets,
  267. })
  268. }
  269. // Log level
  270. type AppLogParamsLevel string
  271. const (
  272. AppLogParamsLevelDebug AppLogParamsLevel = "debug"
  273. AppLogParamsLevelInfo AppLogParamsLevel = "info"
  274. AppLogParamsLevelError AppLogParamsLevel = "error"
  275. AppLogParamsLevelWarn AppLogParamsLevel = "warn"
  276. )
  277. func (r AppLogParamsLevel) IsKnown() bool {
  278. switch r {
  279. case AppLogParamsLevelDebug, AppLogParamsLevelInfo, AppLogParamsLevelError, AppLogParamsLevelWarn:
  280. return true
  281. }
  282. return false
  283. }
  284. type AppProvidersParams struct {
  285. Directory param.Field[string] `query:"directory"`
  286. }
  287. // URLQuery serializes [AppProvidersParams]'s query parameters as `url.Values`.
  288. func (r AppProvidersParams) URLQuery() (v url.Values) {
  289. return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
  290. ArrayFormat: apiquery.ArrayQueryFormatComma,
  291. NestedFormat: apiquery.NestedQueryFormatBrackets,
  292. })
  293. }