session.go 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551
  1. // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
  2. package opencode
  3. import (
  4. "context"
  5. "errors"
  6. "fmt"
  7. "net/http"
  8. "reflect"
  9. "github.com/sst/opencode-sdk-go/internal/apijson"
  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. "github.com/sst/opencode-sdk-go/shared"
  14. "github.com/tidwall/gjson"
  15. )
  16. // SessionService contains methods and other services that help with interacting
  17. // with the opencode API.
  18. //
  19. // Note, unlike clients, this service does not read variables from the environment
  20. // automatically. You should not instantiate this service directly, and instead use
  21. // the [NewSessionService] method instead.
  22. type SessionService struct {
  23. Options []option.RequestOption
  24. }
  25. // NewSessionService generates a new service that applies the given options to each
  26. // request. These options are applied after the parent client's options (if there
  27. // is one), and before any request-specific options.
  28. func NewSessionService(opts ...option.RequestOption) (r *SessionService) {
  29. r = &SessionService{}
  30. r.Options = opts
  31. return
  32. }
  33. // Create a new session
  34. func (r *SessionService) New(ctx context.Context, opts ...option.RequestOption) (res *Session, err error) {
  35. opts = append(r.Options[:], opts...)
  36. path := "session"
  37. err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
  38. return
  39. }
  40. // List all sessions
  41. func (r *SessionService) List(ctx context.Context, opts ...option.RequestOption) (res *[]Session, err error) {
  42. opts = append(r.Options[:], opts...)
  43. path := "session"
  44. err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
  45. return
  46. }
  47. // Delete a session and all its data
  48. func (r *SessionService) Delete(ctx context.Context, id string, opts ...option.RequestOption) (res *bool, err error) {
  49. opts = append(r.Options[:], opts...)
  50. if id == "" {
  51. err = errors.New("missing required id parameter")
  52. return
  53. }
  54. path := fmt.Sprintf("session/%s", id)
  55. err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...)
  56. return
  57. }
  58. // Abort a session
  59. func (r *SessionService) Abort(ctx context.Context, id string, opts ...option.RequestOption) (res *bool, err error) {
  60. opts = append(r.Options[:], opts...)
  61. if id == "" {
  62. err = errors.New("missing required id parameter")
  63. return
  64. }
  65. path := fmt.Sprintf("session/%s/abort", id)
  66. err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
  67. return
  68. }
  69. // Create and send a new message to a session
  70. func (r *SessionService) Chat(ctx context.Context, id string, body SessionChatParams, opts ...option.RequestOption) (res *AssistantMessage, err error) {
  71. opts = append(r.Options[:], opts...)
  72. if id == "" {
  73. err = errors.New("missing required id parameter")
  74. return
  75. }
  76. path := fmt.Sprintf("session/%s/message", id)
  77. err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
  78. return
  79. }
  80. // Analyze the app and create an AGENTS.md file
  81. func (r *SessionService) Init(ctx context.Context, id string, body SessionInitParams, opts ...option.RequestOption) (res *bool, err error) {
  82. opts = append(r.Options[:], opts...)
  83. if id == "" {
  84. err = errors.New("missing required id parameter")
  85. return
  86. }
  87. path := fmt.Sprintf("session/%s/init", id)
  88. err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
  89. return
  90. }
  91. // List messages for a session
  92. func (r *SessionService) Messages(ctx context.Context, id string, opts ...option.RequestOption) (res *[]Message, err error) {
  93. opts = append(r.Options[:], opts...)
  94. if id == "" {
  95. err = errors.New("missing required id parameter")
  96. return
  97. }
  98. path := fmt.Sprintf("session/%s/message", id)
  99. err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
  100. return
  101. }
  102. // Share a session
  103. func (r *SessionService) Share(ctx context.Context, id string, opts ...option.RequestOption) (res *Session, err error) {
  104. opts = append(r.Options[:], opts...)
  105. if id == "" {
  106. err = errors.New("missing required id parameter")
  107. return
  108. }
  109. path := fmt.Sprintf("session/%s/share", id)
  110. err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
  111. return
  112. }
  113. // Summarize the session
  114. func (r *SessionService) Summarize(ctx context.Context, id string, body SessionSummarizeParams, opts ...option.RequestOption) (res *bool, err error) {
  115. opts = append(r.Options[:], opts...)
  116. if id == "" {
  117. err = errors.New("missing required id parameter")
  118. return
  119. }
  120. path := fmt.Sprintf("session/%s/summarize", id)
  121. err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
  122. return
  123. }
  124. // Unshare the session
  125. func (r *SessionService) Unshare(ctx context.Context, id string, opts ...option.RequestOption) (res *Session, err error) {
  126. opts = append(r.Options[:], opts...)
  127. if id == "" {
  128. err = errors.New("missing required id parameter")
  129. return
  130. }
  131. path := fmt.Sprintf("session/%s/share", id)
  132. err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...)
  133. return
  134. }
  135. type AssistantMessage struct {
  136. ID string `json:"id,required"`
  137. Cost float64 `json:"cost,required"`
  138. ModelID string `json:"modelID,required"`
  139. Parts []AssistantMessagePart `json:"parts,required"`
  140. Path AssistantMessagePath `json:"path,required"`
  141. ProviderID string `json:"providerID,required"`
  142. Role AssistantMessageRole `json:"role,required"`
  143. SessionID string `json:"sessionID,required"`
  144. System []string `json:"system,required"`
  145. Time AssistantMessageTime `json:"time,required"`
  146. Tokens AssistantMessageTokens `json:"tokens,required"`
  147. Error AssistantMessageError `json:"error"`
  148. Summary bool `json:"summary"`
  149. JSON assistantMessageJSON `json:"-"`
  150. }
  151. // assistantMessageJSON contains the JSON metadata for the struct
  152. // [AssistantMessage]
  153. type assistantMessageJSON struct {
  154. ID apijson.Field
  155. Cost apijson.Field
  156. ModelID apijson.Field
  157. Parts apijson.Field
  158. Path apijson.Field
  159. ProviderID apijson.Field
  160. Role apijson.Field
  161. SessionID apijson.Field
  162. System apijson.Field
  163. Time apijson.Field
  164. Tokens apijson.Field
  165. Error apijson.Field
  166. Summary apijson.Field
  167. raw string
  168. ExtraFields map[string]apijson.Field
  169. }
  170. func (r *AssistantMessage) UnmarshalJSON(data []byte) (err error) {
  171. return apijson.UnmarshalRoot(data, r)
  172. }
  173. func (r assistantMessageJSON) RawJSON() string {
  174. return r.raw
  175. }
  176. func (r AssistantMessage) implementsMessage() {}
  177. type AssistantMessagePath struct {
  178. Cwd string `json:"cwd,required"`
  179. Root string `json:"root,required"`
  180. JSON assistantMessagePathJSON `json:"-"`
  181. }
  182. // assistantMessagePathJSON contains the JSON metadata for the struct
  183. // [AssistantMessagePath]
  184. type assistantMessagePathJSON struct {
  185. Cwd apijson.Field
  186. Root apijson.Field
  187. raw string
  188. ExtraFields map[string]apijson.Field
  189. }
  190. func (r *AssistantMessagePath) UnmarshalJSON(data []byte) (err error) {
  191. return apijson.UnmarshalRoot(data, r)
  192. }
  193. func (r assistantMessagePathJSON) RawJSON() string {
  194. return r.raw
  195. }
  196. type AssistantMessageRole string
  197. const (
  198. AssistantMessageRoleAssistant AssistantMessageRole = "assistant"
  199. )
  200. func (r AssistantMessageRole) IsKnown() bool {
  201. switch r {
  202. case AssistantMessageRoleAssistant:
  203. return true
  204. }
  205. return false
  206. }
  207. type AssistantMessageTime struct {
  208. Created float64 `json:"created,required"`
  209. Completed float64 `json:"completed"`
  210. JSON assistantMessageTimeJSON `json:"-"`
  211. }
  212. // assistantMessageTimeJSON contains the JSON metadata for the struct
  213. // [AssistantMessageTime]
  214. type assistantMessageTimeJSON struct {
  215. Created apijson.Field
  216. Completed apijson.Field
  217. raw string
  218. ExtraFields map[string]apijson.Field
  219. }
  220. func (r *AssistantMessageTime) UnmarshalJSON(data []byte) (err error) {
  221. return apijson.UnmarshalRoot(data, r)
  222. }
  223. func (r assistantMessageTimeJSON) RawJSON() string {
  224. return r.raw
  225. }
  226. type AssistantMessageTokens struct {
  227. Cache AssistantMessageTokensCache `json:"cache,required"`
  228. Input float64 `json:"input,required"`
  229. Output float64 `json:"output,required"`
  230. Reasoning float64 `json:"reasoning,required"`
  231. JSON assistantMessageTokensJSON `json:"-"`
  232. }
  233. // assistantMessageTokensJSON contains the JSON metadata for the struct
  234. // [AssistantMessageTokens]
  235. type assistantMessageTokensJSON struct {
  236. Cache apijson.Field
  237. Input apijson.Field
  238. Output apijson.Field
  239. Reasoning apijson.Field
  240. raw string
  241. ExtraFields map[string]apijson.Field
  242. }
  243. func (r *AssistantMessageTokens) UnmarshalJSON(data []byte) (err error) {
  244. return apijson.UnmarshalRoot(data, r)
  245. }
  246. func (r assistantMessageTokensJSON) RawJSON() string {
  247. return r.raw
  248. }
  249. type AssistantMessageTokensCache struct {
  250. Read float64 `json:"read,required"`
  251. Write float64 `json:"write,required"`
  252. JSON assistantMessageTokensCacheJSON `json:"-"`
  253. }
  254. // assistantMessageTokensCacheJSON contains the JSON metadata for the struct
  255. // [AssistantMessageTokensCache]
  256. type assistantMessageTokensCacheJSON struct {
  257. Read apijson.Field
  258. Write apijson.Field
  259. raw string
  260. ExtraFields map[string]apijson.Field
  261. }
  262. func (r *AssistantMessageTokensCache) UnmarshalJSON(data []byte) (err error) {
  263. return apijson.UnmarshalRoot(data, r)
  264. }
  265. func (r assistantMessageTokensCacheJSON) RawJSON() string {
  266. return r.raw
  267. }
  268. type AssistantMessageError struct {
  269. // This field can have the runtime type of [shared.ProviderAuthErrorData],
  270. // [shared.UnknownErrorData], [interface{}].
  271. Data interface{} `json:"data,required"`
  272. Name AssistantMessageErrorName `json:"name,required"`
  273. JSON assistantMessageErrorJSON `json:"-"`
  274. union AssistantMessageErrorUnion
  275. }
  276. // assistantMessageErrorJSON contains the JSON metadata for the struct
  277. // [AssistantMessageError]
  278. type assistantMessageErrorJSON struct {
  279. Data apijson.Field
  280. Name apijson.Field
  281. raw string
  282. ExtraFields map[string]apijson.Field
  283. }
  284. func (r assistantMessageErrorJSON) RawJSON() string {
  285. return r.raw
  286. }
  287. func (r *AssistantMessageError) UnmarshalJSON(data []byte) (err error) {
  288. *r = AssistantMessageError{}
  289. err = apijson.UnmarshalRoot(data, &r.union)
  290. if err != nil {
  291. return err
  292. }
  293. return apijson.Port(r.union, &r)
  294. }
  295. // AsUnion returns a [AssistantMessageErrorUnion] interface which you can cast to
  296. // the specific types for more type safety.
  297. //
  298. // Possible runtime types of the union are [shared.ProviderAuthError],
  299. // [shared.UnknownError], [AssistantMessageErrorMessageOutputLengthError],
  300. // [shared.MessageAbortedError].
  301. func (r AssistantMessageError) AsUnion() AssistantMessageErrorUnion {
  302. return r.union
  303. }
  304. // Union satisfied by [shared.ProviderAuthError], [shared.UnknownError],
  305. // [AssistantMessageErrorMessageOutputLengthError] or [shared.MessageAbortedError].
  306. type AssistantMessageErrorUnion interface {
  307. ImplementsAssistantMessageError()
  308. }
  309. func init() {
  310. apijson.RegisterUnion(
  311. reflect.TypeOf((*AssistantMessageErrorUnion)(nil)).Elem(),
  312. "name",
  313. apijson.UnionVariant{
  314. TypeFilter: gjson.JSON,
  315. Type: reflect.TypeOf(shared.ProviderAuthError{}),
  316. DiscriminatorValue: "ProviderAuthError",
  317. },
  318. apijson.UnionVariant{
  319. TypeFilter: gjson.JSON,
  320. Type: reflect.TypeOf(shared.UnknownError{}),
  321. DiscriminatorValue: "UnknownError",
  322. },
  323. apijson.UnionVariant{
  324. TypeFilter: gjson.JSON,
  325. Type: reflect.TypeOf(AssistantMessageErrorMessageOutputLengthError{}),
  326. DiscriminatorValue: "MessageOutputLengthError",
  327. },
  328. apijson.UnionVariant{
  329. TypeFilter: gjson.JSON,
  330. Type: reflect.TypeOf(shared.MessageAbortedError{}),
  331. DiscriminatorValue: "MessageAbortedError",
  332. },
  333. )
  334. }
  335. type AssistantMessageErrorMessageOutputLengthError struct {
  336. Data interface{} `json:"data,required"`
  337. Name AssistantMessageErrorMessageOutputLengthErrorName `json:"name,required"`
  338. JSON assistantMessageErrorMessageOutputLengthErrorJSON `json:"-"`
  339. }
  340. // assistantMessageErrorMessageOutputLengthErrorJSON contains the JSON metadata for
  341. // the struct [AssistantMessageErrorMessageOutputLengthError]
  342. type assistantMessageErrorMessageOutputLengthErrorJSON struct {
  343. Data apijson.Field
  344. Name apijson.Field
  345. raw string
  346. ExtraFields map[string]apijson.Field
  347. }
  348. func (r *AssistantMessageErrorMessageOutputLengthError) UnmarshalJSON(data []byte) (err error) {
  349. return apijson.UnmarshalRoot(data, r)
  350. }
  351. func (r assistantMessageErrorMessageOutputLengthErrorJSON) RawJSON() string {
  352. return r.raw
  353. }
  354. func (r AssistantMessageErrorMessageOutputLengthError) ImplementsAssistantMessageError() {}
  355. type AssistantMessageErrorMessageOutputLengthErrorName string
  356. const (
  357. AssistantMessageErrorMessageOutputLengthErrorNameMessageOutputLengthError AssistantMessageErrorMessageOutputLengthErrorName = "MessageOutputLengthError"
  358. )
  359. func (r AssistantMessageErrorMessageOutputLengthErrorName) IsKnown() bool {
  360. switch r {
  361. case AssistantMessageErrorMessageOutputLengthErrorNameMessageOutputLengthError:
  362. return true
  363. }
  364. return false
  365. }
  366. type AssistantMessageErrorName string
  367. const (
  368. AssistantMessageErrorNameProviderAuthError AssistantMessageErrorName = "ProviderAuthError"
  369. AssistantMessageErrorNameUnknownError AssistantMessageErrorName = "UnknownError"
  370. AssistantMessageErrorNameMessageOutputLengthError AssistantMessageErrorName = "MessageOutputLengthError"
  371. AssistantMessageErrorNameMessageAbortedError AssistantMessageErrorName = "MessageAbortedError"
  372. )
  373. func (r AssistantMessageErrorName) IsKnown() bool {
  374. switch r {
  375. case AssistantMessageErrorNameProviderAuthError, AssistantMessageErrorNameUnknownError, AssistantMessageErrorNameMessageOutputLengthError, AssistantMessageErrorNameMessageAbortedError:
  376. return true
  377. }
  378. return false
  379. }
  380. type AssistantMessagePart struct {
  381. Type AssistantMessagePartType `json:"type,required"`
  382. ID string `json:"id"`
  383. Cost float64 `json:"cost"`
  384. // This field can have the runtime type of [ToolPartState].
  385. State interface{} `json:"state"`
  386. Synthetic bool `json:"synthetic"`
  387. Text string `json:"text"`
  388. // This field can have the runtime type of
  389. // [AssistantMessagePartStepFinishPartTokens].
  390. Tokens interface{} `json:"tokens"`
  391. Tool string `json:"tool"`
  392. JSON assistantMessagePartJSON `json:"-"`
  393. union AssistantMessagePartUnion
  394. }
  395. // assistantMessagePartJSON contains the JSON metadata for the struct
  396. // [AssistantMessagePart]
  397. type assistantMessagePartJSON struct {
  398. Type apijson.Field
  399. ID apijson.Field
  400. Cost apijson.Field
  401. State apijson.Field
  402. Synthetic apijson.Field
  403. Text apijson.Field
  404. Tokens apijson.Field
  405. Tool apijson.Field
  406. raw string
  407. ExtraFields map[string]apijson.Field
  408. }
  409. func (r assistantMessagePartJSON) RawJSON() string {
  410. return r.raw
  411. }
  412. func (r *AssistantMessagePart) UnmarshalJSON(data []byte) (err error) {
  413. *r = AssistantMessagePart{}
  414. err = apijson.UnmarshalRoot(data, &r.union)
  415. if err != nil {
  416. return err
  417. }
  418. return apijson.Port(r.union, &r)
  419. }
  420. // AsUnion returns a [AssistantMessagePartUnion] interface which you can cast to
  421. // the specific types for more type safety.
  422. //
  423. // Possible runtime types of the union are [TextPart], [ToolPart], [StepStartPart],
  424. // [AssistantMessagePartStepFinishPart].
  425. func (r AssistantMessagePart) AsUnion() AssistantMessagePartUnion {
  426. return r.union
  427. }
  428. // Union satisfied by [TextPart], [ToolPart], [StepStartPart] or
  429. // [AssistantMessagePartStepFinishPart].
  430. type AssistantMessagePartUnion interface {
  431. implementsAssistantMessagePart()
  432. }
  433. func init() {
  434. apijson.RegisterUnion(
  435. reflect.TypeOf((*AssistantMessagePartUnion)(nil)).Elem(),
  436. "type",
  437. apijson.UnionVariant{
  438. TypeFilter: gjson.JSON,
  439. Type: reflect.TypeOf(TextPart{}),
  440. DiscriminatorValue: "text",
  441. },
  442. apijson.UnionVariant{
  443. TypeFilter: gjson.JSON,
  444. Type: reflect.TypeOf(ToolPart{}),
  445. DiscriminatorValue: "tool",
  446. },
  447. apijson.UnionVariant{
  448. TypeFilter: gjson.JSON,
  449. Type: reflect.TypeOf(StepStartPart{}),
  450. DiscriminatorValue: "step-start",
  451. },
  452. apijson.UnionVariant{
  453. TypeFilter: gjson.JSON,
  454. Type: reflect.TypeOf(AssistantMessagePartStepFinishPart{}),
  455. DiscriminatorValue: "step-finish",
  456. },
  457. )
  458. }
  459. type AssistantMessagePartStepFinishPart struct {
  460. Cost float64 `json:"cost,required"`
  461. Tokens AssistantMessagePartStepFinishPartTokens `json:"tokens,required"`
  462. Type AssistantMessagePartStepFinishPartType `json:"type,required"`
  463. JSON assistantMessagePartStepFinishPartJSON `json:"-"`
  464. }
  465. // assistantMessagePartStepFinishPartJSON contains the JSON metadata for the struct
  466. // [AssistantMessagePartStepFinishPart]
  467. type assistantMessagePartStepFinishPartJSON struct {
  468. Cost apijson.Field
  469. Tokens apijson.Field
  470. Type apijson.Field
  471. raw string
  472. ExtraFields map[string]apijson.Field
  473. }
  474. func (r *AssistantMessagePartStepFinishPart) UnmarshalJSON(data []byte) (err error) {
  475. return apijson.UnmarshalRoot(data, r)
  476. }
  477. func (r assistantMessagePartStepFinishPartJSON) RawJSON() string {
  478. return r.raw
  479. }
  480. func (r AssistantMessagePartStepFinishPart) implementsAssistantMessagePart() {}
  481. type AssistantMessagePartStepFinishPartTokens struct {
  482. Cache AssistantMessagePartStepFinishPartTokensCache `json:"cache,required"`
  483. Input float64 `json:"input,required"`
  484. Output float64 `json:"output,required"`
  485. Reasoning float64 `json:"reasoning,required"`
  486. JSON assistantMessagePartStepFinishPartTokensJSON `json:"-"`
  487. }
  488. // assistantMessagePartStepFinishPartTokensJSON contains the JSON metadata for the
  489. // struct [AssistantMessagePartStepFinishPartTokens]
  490. type assistantMessagePartStepFinishPartTokensJSON struct {
  491. Cache apijson.Field
  492. Input apijson.Field
  493. Output apijson.Field
  494. Reasoning apijson.Field
  495. raw string
  496. ExtraFields map[string]apijson.Field
  497. }
  498. func (r *AssistantMessagePartStepFinishPartTokens) UnmarshalJSON(data []byte) (err error) {
  499. return apijson.UnmarshalRoot(data, r)
  500. }
  501. func (r assistantMessagePartStepFinishPartTokensJSON) RawJSON() string {
  502. return r.raw
  503. }
  504. type AssistantMessagePartStepFinishPartTokensCache struct {
  505. Read float64 `json:"read,required"`
  506. Write float64 `json:"write,required"`
  507. JSON assistantMessagePartStepFinishPartTokensCacheJSON `json:"-"`
  508. }
  509. // assistantMessagePartStepFinishPartTokensCacheJSON contains the JSON metadata for
  510. // the struct [AssistantMessagePartStepFinishPartTokensCache]
  511. type assistantMessagePartStepFinishPartTokensCacheJSON struct {
  512. Read apijson.Field
  513. Write apijson.Field
  514. raw string
  515. ExtraFields map[string]apijson.Field
  516. }
  517. func (r *AssistantMessagePartStepFinishPartTokensCache) UnmarshalJSON(data []byte) (err error) {
  518. return apijson.UnmarshalRoot(data, r)
  519. }
  520. func (r assistantMessagePartStepFinishPartTokensCacheJSON) RawJSON() string {
  521. return r.raw
  522. }
  523. type AssistantMessagePartStepFinishPartType string
  524. const (
  525. AssistantMessagePartStepFinishPartTypeStepFinish AssistantMessagePartStepFinishPartType = "step-finish"
  526. )
  527. func (r AssistantMessagePartStepFinishPartType) IsKnown() bool {
  528. switch r {
  529. case AssistantMessagePartStepFinishPartTypeStepFinish:
  530. return true
  531. }
  532. return false
  533. }
  534. type AssistantMessagePartType string
  535. const (
  536. AssistantMessagePartTypeText AssistantMessagePartType = "text"
  537. AssistantMessagePartTypeTool AssistantMessagePartType = "tool"
  538. AssistantMessagePartTypeStepStart AssistantMessagePartType = "step-start"
  539. AssistantMessagePartTypeStepFinish AssistantMessagePartType = "step-finish"
  540. )
  541. func (r AssistantMessagePartType) IsKnown() bool {
  542. switch r {
  543. case AssistantMessagePartTypeText, AssistantMessagePartTypeTool, AssistantMessagePartTypeStepStart, AssistantMessagePartTypeStepFinish:
  544. return true
  545. }
  546. return false
  547. }
  548. type FilePart struct {
  549. Mime string `json:"mime,required"`
  550. Type FilePartType `json:"type,required"`
  551. URL string `json:"url,required"`
  552. Filename string `json:"filename"`
  553. JSON filePartJSON `json:"-"`
  554. }
  555. // filePartJSON contains the JSON metadata for the struct [FilePart]
  556. type filePartJSON struct {
  557. Mime apijson.Field
  558. Type apijson.Field
  559. URL apijson.Field
  560. Filename apijson.Field
  561. raw string
  562. ExtraFields map[string]apijson.Field
  563. }
  564. func (r *FilePart) UnmarshalJSON(data []byte) (err error) {
  565. return apijson.UnmarshalRoot(data, r)
  566. }
  567. func (r filePartJSON) RawJSON() string {
  568. return r.raw
  569. }
  570. func (r FilePart) implementsUserMessagePart() {}
  571. type FilePartType string
  572. const (
  573. FilePartTypeFile FilePartType = "file"
  574. )
  575. func (r FilePartType) IsKnown() bool {
  576. switch r {
  577. case FilePartTypeFile:
  578. return true
  579. }
  580. return false
  581. }
  582. type FilePartParam struct {
  583. Mime param.Field[string] `json:"mime,required"`
  584. Type param.Field[FilePartType] `json:"type,required"`
  585. URL param.Field[string] `json:"url,required"`
  586. Filename param.Field[string] `json:"filename"`
  587. }
  588. func (r FilePartParam) MarshalJSON() (data []byte, err error) {
  589. return apijson.MarshalRoot(r)
  590. }
  591. func (r FilePartParam) implementsUserMessagePartUnionParam() {}
  592. type Message struct {
  593. ID string `json:"id,required"`
  594. // This field can have the runtime type of [[]UserMessagePart],
  595. // [[]AssistantMessagePart].
  596. Parts interface{} `json:"parts,required"`
  597. Role MessageRole `json:"role,required"`
  598. SessionID string `json:"sessionID,required"`
  599. // This field can have the runtime type of [UserMessageTime],
  600. // [AssistantMessageTime].
  601. Time interface{} `json:"time,required"`
  602. Cost float64 `json:"cost"`
  603. // This field can have the runtime type of [AssistantMessageError].
  604. Error interface{} `json:"error"`
  605. ModelID string `json:"modelID"`
  606. // This field can have the runtime type of [AssistantMessagePath].
  607. Path interface{} `json:"path"`
  608. ProviderID string `json:"providerID"`
  609. Summary bool `json:"summary"`
  610. // This field can have the runtime type of [[]string].
  611. System interface{} `json:"system"`
  612. // This field can have the runtime type of [AssistantMessageTokens].
  613. Tokens interface{} `json:"tokens"`
  614. JSON messageJSON `json:"-"`
  615. union MessageUnion
  616. }
  617. // messageJSON contains the JSON metadata for the struct [Message]
  618. type messageJSON struct {
  619. ID apijson.Field
  620. Parts apijson.Field
  621. Role apijson.Field
  622. SessionID apijson.Field
  623. Time apijson.Field
  624. Cost apijson.Field
  625. Error apijson.Field
  626. ModelID apijson.Field
  627. Path apijson.Field
  628. ProviderID apijson.Field
  629. Summary apijson.Field
  630. System apijson.Field
  631. Tokens apijson.Field
  632. raw string
  633. ExtraFields map[string]apijson.Field
  634. }
  635. func (r messageJSON) RawJSON() string {
  636. return r.raw
  637. }
  638. func (r *Message) UnmarshalJSON(data []byte) (err error) {
  639. *r = Message{}
  640. err = apijson.UnmarshalRoot(data, &r.union)
  641. if err != nil {
  642. return err
  643. }
  644. return apijson.Port(r.union, &r)
  645. }
  646. // AsUnion returns a [MessageUnion] interface which you can cast to the specific
  647. // types for more type safety.
  648. //
  649. // Possible runtime types of the union are [UserMessage], [AssistantMessage].
  650. func (r Message) AsUnion() MessageUnion {
  651. return r.union
  652. }
  653. // Union satisfied by [UserMessage] or [AssistantMessage].
  654. type MessageUnion interface {
  655. implementsMessage()
  656. }
  657. func init() {
  658. apijson.RegisterUnion(
  659. reflect.TypeOf((*MessageUnion)(nil)).Elem(),
  660. "role",
  661. apijson.UnionVariant{
  662. TypeFilter: gjson.JSON,
  663. Type: reflect.TypeOf(UserMessage{}),
  664. DiscriminatorValue: "user",
  665. },
  666. apijson.UnionVariant{
  667. TypeFilter: gjson.JSON,
  668. Type: reflect.TypeOf(AssistantMessage{}),
  669. DiscriminatorValue: "assistant",
  670. },
  671. )
  672. }
  673. type MessageRole string
  674. const (
  675. MessageRoleUser MessageRole = "user"
  676. MessageRoleAssistant MessageRole = "assistant"
  677. )
  678. func (r MessageRole) IsKnown() bool {
  679. switch r {
  680. case MessageRoleUser, MessageRoleAssistant:
  681. return true
  682. }
  683. return false
  684. }
  685. type Session struct {
  686. ID string `json:"id,required"`
  687. Time SessionTime `json:"time,required"`
  688. Title string `json:"title,required"`
  689. Version string `json:"version,required"`
  690. ParentID string `json:"parentID"`
  691. Revert SessionRevert `json:"revert"`
  692. Share SessionShare `json:"share"`
  693. JSON sessionJSON `json:"-"`
  694. }
  695. // sessionJSON contains the JSON metadata for the struct [Session]
  696. type sessionJSON struct {
  697. ID apijson.Field
  698. Time apijson.Field
  699. Title apijson.Field
  700. Version apijson.Field
  701. ParentID apijson.Field
  702. Revert apijson.Field
  703. Share apijson.Field
  704. raw string
  705. ExtraFields map[string]apijson.Field
  706. }
  707. func (r *Session) UnmarshalJSON(data []byte) (err error) {
  708. return apijson.UnmarshalRoot(data, r)
  709. }
  710. func (r sessionJSON) RawJSON() string {
  711. return r.raw
  712. }
  713. type SessionTime struct {
  714. Created float64 `json:"created,required"`
  715. Updated float64 `json:"updated,required"`
  716. JSON sessionTimeJSON `json:"-"`
  717. }
  718. // sessionTimeJSON contains the JSON metadata for the struct [SessionTime]
  719. type sessionTimeJSON struct {
  720. Created apijson.Field
  721. Updated apijson.Field
  722. raw string
  723. ExtraFields map[string]apijson.Field
  724. }
  725. func (r *SessionTime) UnmarshalJSON(data []byte) (err error) {
  726. return apijson.UnmarshalRoot(data, r)
  727. }
  728. func (r sessionTimeJSON) RawJSON() string {
  729. return r.raw
  730. }
  731. type SessionRevert struct {
  732. MessageID string `json:"messageID,required"`
  733. Part float64 `json:"part,required"`
  734. Snapshot string `json:"snapshot"`
  735. JSON sessionRevertJSON `json:"-"`
  736. }
  737. // sessionRevertJSON contains the JSON metadata for the struct [SessionRevert]
  738. type sessionRevertJSON struct {
  739. MessageID apijson.Field
  740. Part apijson.Field
  741. Snapshot apijson.Field
  742. raw string
  743. ExtraFields map[string]apijson.Field
  744. }
  745. func (r *SessionRevert) UnmarshalJSON(data []byte) (err error) {
  746. return apijson.UnmarshalRoot(data, r)
  747. }
  748. func (r sessionRevertJSON) RawJSON() string {
  749. return r.raw
  750. }
  751. type SessionShare struct {
  752. URL string `json:"url,required"`
  753. JSON sessionShareJSON `json:"-"`
  754. }
  755. // sessionShareJSON contains the JSON metadata for the struct [SessionShare]
  756. type sessionShareJSON struct {
  757. URL apijson.Field
  758. raw string
  759. ExtraFields map[string]apijson.Field
  760. }
  761. func (r *SessionShare) UnmarshalJSON(data []byte) (err error) {
  762. return apijson.UnmarshalRoot(data, r)
  763. }
  764. func (r sessionShareJSON) RawJSON() string {
  765. return r.raw
  766. }
  767. type StepStartPart struct {
  768. Type StepStartPartType `json:"type,required"`
  769. JSON stepStartPartJSON `json:"-"`
  770. }
  771. // stepStartPartJSON contains the JSON metadata for the struct [StepStartPart]
  772. type stepStartPartJSON struct {
  773. Type apijson.Field
  774. raw string
  775. ExtraFields map[string]apijson.Field
  776. }
  777. func (r *StepStartPart) UnmarshalJSON(data []byte) (err error) {
  778. return apijson.UnmarshalRoot(data, r)
  779. }
  780. func (r stepStartPartJSON) RawJSON() string {
  781. return r.raw
  782. }
  783. func (r StepStartPart) implementsAssistantMessagePart() {}
  784. type StepStartPartType string
  785. const (
  786. StepStartPartTypeStepStart StepStartPartType = "step-start"
  787. )
  788. func (r StepStartPartType) IsKnown() bool {
  789. switch r {
  790. case StepStartPartTypeStepStart:
  791. return true
  792. }
  793. return false
  794. }
  795. type TextPart struct {
  796. Text string `json:"text,required"`
  797. Type TextPartType `json:"type,required"`
  798. Synthetic bool `json:"synthetic"`
  799. JSON textPartJSON `json:"-"`
  800. }
  801. // textPartJSON contains the JSON metadata for the struct [TextPart]
  802. type textPartJSON struct {
  803. Text apijson.Field
  804. Type apijson.Field
  805. Synthetic apijson.Field
  806. raw string
  807. ExtraFields map[string]apijson.Field
  808. }
  809. func (r *TextPart) UnmarshalJSON(data []byte) (err error) {
  810. return apijson.UnmarshalRoot(data, r)
  811. }
  812. func (r textPartJSON) RawJSON() string {
  813. return r.raw
  814. }
  815. func (r TextPart) implementsAssistantMessagePart() {}
  816. func (r TextPart) implementsUserMessagePart() {}
  817. type TextPartType string
  818. const (
  819. TextPartTypeText TextPartType = "text"
  820. )
  821. func (r TextPartType) IsKnown() bool {
  822. switch r {
  823. case TextPartTypeText:
  824. return true
  825. }
  826. return false
  827. }
  828. type TextPartParam struct {
  829. Text param.Field[string] `json:"text,required"`
  830. Type param.Field[TextPartType] `json:"type,required"`
  831. Synthetic param.Field[bool] `json:"synthetic"`
  832. }
  833. func (r TextPartParam) MarshalJSON() (data []byte, err error) {
  834. return apijson.MarshalRoot(r)
  835. }
  836. func (r TextPartParam) implementsUserMessagePartUnionParam() {}
  837. type ToolPart struct {
  838. ID string `json:"id,required"`
  839. State ToolPartState `json:"state,required"`
  840. Tool string `json:"tool,required"`
  841. Type ToolPartType `json:"type,required"`
  842. JSON toolPartJSON `json:"-"`
  843. }
  844. // toolPartJSON contains the JSON metadata for the struct [ToolPart]
  845. type toolPartJSON struct {
  846. ID apijson.Field
  847. State apijson.Field
  848. Tool apijson.Field
  849. Type apijson.Field
  850. raw string
  851. ExtraFields map[string]apijson.Field
  852. }
  853. func (r *ToolPart) UnmarshalJSON(data []byte) (err error) {
  854. return apijson.UnmarshalRoot(data, r)
  855. }
  856. func (r toolPartJSON) RawJSON() string {
  857. return r.raw
  858. }
  859. func (r ToolPart) implementsAssistantMessagePart() {}
  860. type ToolPartState struct {
  861. Status ToolPartStateStatus `json:"status,required"`
  862. Error string `json:"error"`
  863. // This field can have the runtime type of [interface{}], [map[string]interface{}].
  864. Input interface{} `json:"input"`
  865. // This field can have the runtime type of [map[string]interface{}].
  866. Metadata interface{} `json:"metadata"`
  867. Output string `json:"output"`
  868. // This field can have the runtime type of [ToolStateRunningTime],
  869. // [ToolStateCompletedTime], [ToolStateErrorTime].
  870. Time interface{} `json:"time"`
  871. Title string `json:"title"`
  872. JSON toolPartStateJSON `json:"-"`
  873. union ToolPartStateUnion
  874. }
  875. // toolPartStateJSON contains the JSON metadata for the struct [ToolPartState]
  876. type toolPartStateJSON struct {
  877. Status apijson.Field
  878. Error apijson.Field
  879. Input apijson.Field
  880. Metadata apijson.Field
  881. Output apijson.Field
  882. Time apijson.Field
  883. Title apijson.Field
  884. raw string
  885. ExtraFields map[string]apijson.Field
  886. }
  887. func (r toolPartStateJSON) RawJSON() string {
  888. return r.raw
  889. }
  890. func (r *ToolPartState) UnmarshalJSON(data []byte) (err error) {
  891. *r = ToolPartState{}
  892. err = apijson.UnmarshalRoot(data, &r.union)
  893. if err != nil {
  894. return err
  895. }
  896. return apijson.Port(r.union, &r)
  897. }
  898. // AsUnion returns a [ToolPartStateUnion] interface which you can cast to the
  899. // specific types for more type safety.
  900. //
  901. // Possible runtime types of the union are [ToolStatePending], [ToolStateRunning],
  902. // [ToolStateCompleted], [ToolStateError].
  903. func (r ToolPartState) AsUnion() ToolPartStateUnion {
  904. return r.union
  905. }
  906. // Union satisfied by [ToolStatePending], [ToolStateRunning], [ToolStateCompleted]
  907. // or [ToolStateError].
  908. type ToolPartStateUnion interface {
  909. implementsToolPartState()
  910. }
  911. func init() {
  912. apijson.RegisterUnion(
  913. reflect.TypeOf((*ToolPartStateUnion)(nil)).Elem(),
  914. "status",
  915. apijson.UnionVariant{
  916. TypeFilter: gjson.JSON,
  917. Type: reflect.TypeOf(ToolStatePending{}),
  918. DiscriminatorValue: "pending",
  919. },
  920. apijson.UnionVariant{
  921. TypeFilter: gjson.JSON,
  922. Type: reflect.TypeOf(ToolStateRunning{}),
  923. DiscriminatorValue: "running",
  924. },
  925. apijson.UnionVariant{
  926. TypeFilter: gjson.JSON,
  927. Type: reflect.TypeOf(ToolStateCompleted{}),
  928. DiscriminatorValue: "completed",
  929. },
  930. apijson.UnionVariant{
  931. TypeFilter: gjson.JSON,
  932. Type: reflect.TypeOf(ToolStateError{}),
  933. DiscriminatorValue: "error",
  934. },
  935. )
  936. }
  937. type ToolPartStateStatus string
  938. const (
  939. ToolPartStateStatusPending ToolPartStateStatus = "pending"
  940. ToolPartStateStatusRunning ToolPartStateStatus = "running"
  941. ToolPartStateStatusCompleted ToolPartStateStatus = "completed"
  942. ToolPartStateStatusError ToolPartStateStatus = "error"
  943. )
  944. func (r ToolPartStateStatus) IsKnown() bool {
  945. switch r {
  946. case ToolPartStateStatusPending, ToolPartStateStatusRunning, ToolPartStateStatusCompleted, ToolPartStateStatusError:
  947. return true
  948. }
  949. return false
  950. }
  951. type ToolPartType string
  952. const (
  953. ToolPartTypeTool ToolPartType = "tool"
  954. )
  955. func (r ToolPartType) IsKnown() bool {
  956. switch r {
  957. case ToolPartTypeTool:
  958. return true
  959. }
  960. return false
  961. }
  962. type ToolStateCompleted struct {
  963. Input map[string]interface{} `json:"input,required"`
  964. Metadata map[string]interface{} `json:"metadata,required"`
  965. Output string `json:"output,required"`
  966. Status ToolStateCompletedStatus `json:"status,required"`
  967. Time ToolStateCompletedTime `json:"time,required"`
  968. Title string `json:"title,required"`
  969. JSON toolStateCompletedJSON `json:"-"`
  970. }
  971. // toolStateCompletedJSON contains the JSON metadata for the struct
  972. // [ToolStateCompleted]
  973. type toolStateCompletedJSON struct {
  974. Input apijson.Field
  975. Metadata apijson.Field
  976. Output apijson.Field
  977. Status apijson.Field
  978. Time apijson.Field
  979. Title apijson.Field
  980. raw string
  981. ExtraFields map[string]apijson.Field
  982. }
  983. func (r *ToolStateCompleted) UnmarshalJSON(data []byte) (err error) {
  984. return apijson.UnmarshalRoot(data, r)
  985. }
  986. func (r toolStateCompletedJSON) RawJSON() string {
  987. return r.raw
  988. }
  989. func (r ToolStateCompleted) implementsToolPartState() {}
  990. type ToolStateCompletedStatus string
  991. const (
  992. ToolStateCompletedStatusCompleted ToolStateCompletedStatus = "completed"
  993. )
  994. func (r ToolStateCompletedStatus) IsKnown() bool {
  995. switch r {
  996. case ToolStateCompletedStatusCompleted:
  997. return true
  998. }
  999. return false
  1000. }
  1001. type ToolStateCompletedTime struct {
  1002. End float64 `json:"end,required"`
  1003. Start float64 `json:"start,required"`
  1004. JSON toolStateCompletedTimeJSON `json:"-"`
  1005. }
  1006. // toolStateCompletedTimeJSON contains the JSON metadata for the struct
  1007. // [ToolStateCompletedTime]
  1008. type toolStateCompletedTimeJSON struct {
  1009. End apijson.Field
  1010. Start apijson.Field
  1011. raw string
  1012. ExtraFields map[string]apijson.Field
  1013. }
  1014. func (r *ToolStateCompletedTime) UnmarshalJSON(data []byte) (err error) {
  1015. return apijson.UnmarshalRoot(data, r)
  1016. }
  1017. func (r toolStateCompletedTimeJSON) RawJSON() string {
  1018. return r.raw
  1019. }
  1020. type ToolStateError struct {
  1021. Error string `json:"error,required"`
  1022. Input map[string]interface{} `json:"input,required"`
  1023. Status ToolStateErrorStatus `json:"status,required"`
  1024. Time ToolStateErrorTime `json:"time,required"`
  1025. JSON toolStateErrorJSON `json:"-"`
  1026. }
  1027. // toolStateErrorJSON contains the JSON metadata for the struct [ToolStateError]
  1028. type toolStateErrorJSON struct {
  1029. Error apijson.Field
  1030. Input apijson.Field
  1031. Status apijson.Field
  1032. Time apijson.Field
  1033. raw string
  1034. ExtraFields map[string]apijson.Field
  1035. }
  1036. func (r *ToolStateError) UnmarshalJSON(data []byte) (err error) {
  1037. return apijson.UnmarshalRoot(data, r)
  1038. }
  1039. func (r toolStateErrorJSON) RawJSON() string {
  1040. return r.raw
  1041. }
  1042. func (r ToolStateError) implementsToolPartState() {}
  1043. type ToolStateErrorStatus string
  1044. const (
  1045. ToolStateErrorStatusError ToolStateErrorStatus = "error"
  1046. )
  1047. func (r ToolStateErrorStatus) IsKnown() bool {
  1048. switch r {
  1049. case ToolStateErrorStatusError:
  1050. return true
  1051. }
  1052. return false
  1053. }
  1054. type ToolStateErrorTime struct {
  1055. End float64 `json:"end,required"`
  1056. Start float64 `json:"start,required"`
  1057. JSON toolStateErrorTimeJSON `json:"-"`
  1058. }
  1059. // toolStateErrorTimeJSON contains the JSON metadata for the struct
  1060. // [ToolStateErrorTime]
  1061. type toolStateErrorTimeJSON struct {
  1062. End apijson.Field
  1063. Start apijson.Field
  1064. raw string
  1065. ExtraFields map[string]apijson.Field
  1066. }
  1067. func (r *ToolStateErrorTime) UnmarshalJSON(data []byte) (err error) {
  1068. return apijson.UnmarshalRoot(data, r)
  1069. }
  1070. func (r toolStateErrorTimeJSON) RawJSON() string {
  1071. return r.raw
  1072. }
  1073. type ToolStatePending struct {
  1074. Status ToolStatePendingStatus `json:"status,required"`
  1075. JSON toolStatePendingJSON `json:"-"`
  1076. }
  1077. // toolStatePendingJSON contains the JSON metadata for the struct
  1078. // [ToolStatePending]
  1079. type toolStatePendingJSON struct {
  1080. Status apijson.Field
  1081. raw string
  1082. ExtraFields map[string]apijson.Field
  1083. }
  1084. func (r *ToolStatePending) UnmarshalJSON(data []byte) (err error) {
  1085. return apijson.UnmarshalRoot(data, r)
  1086. }
  1087. func (r toolStatePendingJSON) RawJSON() string {
  1088. return r.raw
  1089. }
  1090. func (r ToolStatePending) implementsToolPartState() {}
  1091. type ToolStatePendingStatus string
  1092. const (
  1093. ToolStatePendingStatusPending ToolStatePendingStatus = "pending"
  1094. )
  1095. func (r ToolStatePendingStatus) IsKnown() bool {
  1096. switch r {
  1097. case ToolStatePendingStatusPending:
  1098. return true
  1099. }
  1100. return false
  1101. }
  1102. type ToolStateRunning struct {
  1103. Status ToolStateRunningStatus `json:"status,required"`
  1104. Time ToolStateRunningTime `json:"time,required"`
  1105. Input interface{} `json:"input"`
  1106. Metadata map[string]interface{} `json:"metadata"`
  1107. Title string `json:"title"`
  1108. JSON toolStateRunningJSON `json:"-"`
  1109. }
  1110. // toolStateRunningJSON contains the JSON metadata for the struct
  1111. // [ToolStateRunning]
  1112. type toolStateRunningJSON struct {
  1113. Status apijson.Field
  1114. Time apijson.Field
  1115. Input apijson.Field
  1116. Metadata apijson.Field
  1117. Title apijson.Field
  1118. raw string
  1119. ExtraFields map[string]apijson.Field
  1120. }
  1121. func (r *ToolStateRunning) UnmarshalJSON(data []byte) (err error) {
  1122. return apijson.UnmarshalRoot(data, r)
  1123. }
  1124. func (r toolStateRunningJSON) RawJSON() string {
  1125. return r.raw
  1126. }
  1127. func (r ToolStateRunning) implementsToolPartState() {}
  1128. type ToolStateRunningStatus string
  1129. const (
  1130. ToolStateRunningStatusRunning ToolStateRunningStatus = "running"
  1131. )
  1132. func (r ToolStateRunningStatus) IsKnown() bool {
  1133. switch r {
  1134. case ToolStateRunningStatusRunning:
  1135. return true
  1136. }
  1137. return false
  1138. }
  1139. type ToolStateRunningTime struct {
  1140. Start float64 `json:"start,required"`
  1141. JSON toolStateRunningTimeJSON `json:"-"`
  1142. }
  1143. // toolStateRunningTimeJSON contains the JSON metadata for the struct
  1144. // [ToolStateRunningTime]
  1145. type toolStateRunningTimeJSON struct {
  1146. Start apijson.Field
  1147. raw string
  1148. ExtraFields map[string]apijson.Field
  1149. }
  1150. func (r *ToolStateRunningTime) UnmarshalJSON(data []byte) (err error) {
  1151. return apijson.UnmarshalRoot(data, r)
  1152. }
  1153. func (r toolStateRunningTimeJSON) RawJSON() string {
  1154. return r.raw
  1155. }
  1156. type UserMessage struct {
  1157. ID string `json:"id,required"`
  1158. Parts []UserMessagePart `json:"parts,required"`
  1159. Role UserMessageRole `json:"role,required"`
  1160. SessionID string `json:"sessionID,required"`
  1161. Time UserMessageTime `json:"time,required"`
  1162. JSON userMessageJSON `json:"-"`
  1163. }
  1164. // userMessageJSON contains the JSON metadata for the struct [UserMessage]
  1165. type userMessageJSON struct {
  1166. ID apijson.Field
  1167. Parts apijson.Field
  1168. Role apijson.Field
  1169. SessionID apijson.Field
  1170. Time apijson.Field
  1171. raw string
  1172. ExtraFields map[string]apijson.Field
  1173. }
  1174. func (r *UserMessage) UnmarshalJSON(data []byte) (err error) {
  1175. return apijson.UnmarshalRoot(data, r)
  1176. }
  1177. func (r userMessageJSON) RawJSON() string {
  1178. return r.raw
  1179. }
  1180. func (r UserMessage) implementsMessage() {}
  1181. type UserMessageRole string
  1182. const (
  1183. UserMessageRoleUser UserMessageRole = "user"
  1184. )
  1185. func (r UserMessageRole) IsKnown() bool {
  1186. switch r {
  1187. case UserMessageRoleUser:
  1188. return true
  1189. }
  1190. return false
  1191. }
  1192. type UserMessageTime struct {
  1193. Created float64 `json:"created,required"`
  1194. JSON userMessageTimeJSON `json:"-"`
  1195. }
  1196. // userMessageTimeJSON contains the JSON metadata for the struct [UserMessageTime]
  1197. type userMessageTimeJSON struct {
  1198. Created apijson.Field
  1199. raw string
  1200. ExtraFields map[string]apijson.Field
  1201. }
  1202. func (r *UserMessageTime) UnmarshalJSON(data []byte) (err error) {
  1203. return apijson.UnmarshalRoot(data, r)
  1204. }
  1205. func (r userMessageTimeJSON) RawJSON() string {
  1206. return r.raw
  1207. }
  1208. type UserMessagePart struct {
  1209. Type UserMessagePartType `json:"type,required"`
  1210. Filename string `json:"filename"`
  1211. Mime string `json:"mime"`
  1212. Synthetic bool `json:"synthetic"`
  1213. Text string `json:"text"`
  1214. URL string `json:"url"`
  1215. JSON userMessagePartJSON `json:"-"`
  1216. union UserMessagePartUnion
  1217. }
  1218. // userMessagePartJSON contains the JSON metadata for the struct [UserMessagePart]
  1219. type userMessagePartJSON struct {
  1220. Type apijson.Field
  1221. Filename apijson.Field
  1222. Mime apijson.Field
  1223. Synthetic apijson.Field
  1224. Text apijson.Field
  1225. URL apijson.Field
  1226. raw string
  1227. ExtraFields map[string]apijson.Field
  1228. }
  1229. func (r userMessagePartJSON) RawJSON() string {
  1230. return r.raw
  1231. }
  1232. func (r *UserMessagePart) UnmarshalJSON(data []byte) (err error) {
  1233. *r = UserMessagePart{}
  1234. err = apijson.UnmarshalRoot(data, &r.union)
  1235. if err != nil {
  1236. return err
  1237. }
  1238. return apijson.Port(r.union, &r)
  1239. }
  1240. // AsUnion returns a [UserMessagePartUnion] interface which you can cast to the
  1241. // specific types for more type safety.
  1242. //
  1243. // Possible runtime types of the union are [TextPart], [FilePart].
  1244. func (r UserMessagePart) AsUnion() UserMessagePartUnion {
  1245. return r.union
  1246. }
  1247. // Union satisfied by [TextPart] or [FilePart].
  1248. type UserMessagePartUnion interface {
  1249. implementsUserMessagePart()
  1250. }
  1251. func init() {
  1252. apijson.RegisterUnion(
  1253. reflect.TypeOf((*UserMessagePartUnion)(nil)).Elem(),
  1254. "type",
  1255. apijson.UnionVariant{
  1256. TypeFilter: gjson.JSON,
  1257. Type: reflect.TypeOf(TextPart{}),
  1258. DiscriminatorValue: "text",
  1259. },
  1260. apijson.UnionVariant{
  1261. TypeFilter: gjson.JSON,
  1262. Type: reflect.TypeOf(FilePart{}),
  1263. DiscriminatorValue: "file",
  1264. },
  1265. )
  1266. }
  1267. type UserMessagePartType string
  1268. const (
  1269. UserMessagePartTypeText UserMessagePartType = "text"
  1270. UserMessagePartTypeFile UserMessagePartType = "file"
  1271. )
  1272. func (r UserMessagePartType) IsKnown() bool {
  1273. switch r {
  1274. case UserMessagePartTypeText, UserMessagePartTypeFile:
  1275. return true
  1276. }
  1277. return false
  1278. }
  1279. type UserMessagePartParam struct {
  1280. Type param.Field[UserMessagePartType] `json:"type,required"`
  1281. Filename param.Field[string] `json:"filename"`
  1282. Mime param.Field[string] `json:"mime"`
  1283. Synthetic param.Field[bool] `json:"synthetic"`
  1284. Text param.Field[string] `json:"text"`
  1285. URL param.Field[string] `json:"url"`
  1286. }
  1287. func (r UserMessagePartParam) MarshalJSON() (data []byte, err error) {
  1288. return apijson.MarshalRoot(r)
  1289. }
  1290. func (r UserMessagePartParam) implementsUserMessagePartUnionParam() {}
  1291. // Satisfied by [TextPartParam], [FilePartParam], [UserMessagePartParam].
  1292. type UserMessagePartUnionParam interface {
  1293. implementsUserMessagePartUnionParam()
  1294. }
  1295. type SessionChatParams struct {
  1296. Mode param.Field[string] `json:"mode,required"`
  1297. ModelID param.Field[string] `json:"modelID,required"`
  1298. Parts param.Field[[]UserMessagePartUnionParam] `json:"parts,required"`
  1299. ProviderID param.Field[string] `json:"providerID,required"`
  1300. }
  1301. func (r SessionChatParams) MarshalJSON() (data []byte, err error) {
  1302. return apijson.MarshalRoot(r)
  1303. }
  1304. type SessionInitParams struct {
  1305. ModelID param.Field[string] `json:"modelID,required"`
  1306. ProviderID param.Field[string] `json:"providerID,required"`
  1307. }
  1308. func (r SessionInitParams) MarshalJSON() (data []byte, err error) {
  1309. return apijson.MarshalRoot(r)
  1310. }
  1311. type SessionSummarizeParams struct {
  1312. ModelID param.Field[string] `json:"modelID,required"`
  1313. ProviderID param.Field[string] `json:"providerID,required"`
  1314. }
  1315. func (r SessionSummarizeParams) MarshalJSON() (data []byte, err error) {
  1316. return apijson.MarshalRoot(r)
  1317. }