opencode/packages/tui/sdk/session.go
2025-07-03 11:49:15 -05:00

1385 lines
41 KiB
Go

// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
package opencode
import (
"context"
"errors"
"fmt"
"net/http"
"reflect"
"github.com/sst/opencode-sdk-go/internal/apijson"
"github.com/sst/opencode-sdk-go/internal/param"
"github.com/sst/opencode-sdk-go/internal/requestconfig"
"github.com/sst/opencode-sdk-go/option"
"github.com/sst/opencode-sdk-go/shared"
"github.com/tidwall/gjson"
)
// SessionService contains methods and other services that help with interacting
// with the opencode API.
//
// Note, unlike clients, this service does not read variables from the environment
// automatically. You should not instantiate this service directly, and instead use
// the [NewSessionService] method instead.
type SessionService struct {
Options []option.RequestOption
}
// NewSessionService generates a new service that applies the given options to each
// request. These options are applied after the parent client's options (if there
// is one), and before any request-specific options.
func NewSessionService(opts ...option.RequestOption) (r *SessionService) {
r = &SessionService{}
r.Options = opts
return
}
// Create a new session
func (r *SessionService) New(ctx context.Context, opts ...option.RequestOption) (res *Session, err error) {
opts = append(r.Options[:], opts...)
path := "session"
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
return
}
// List all sessions
func (r *SessionService) List(ctx context.Context, opts ...option.RequestOption) (res *[]Session, err error) {
opts = append(r.Options[:], opts...)
path := "session"
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
return
}
// Delete a session and all its data
func (r *SessionService) Delete(ctx context.Context, id string, opts ...option.RequestOption) (res *bool, err error) {
opts = append(r.Options[:], opts...)
if id == "" {
err = errors.New("missing required id parameter")
return
}
path := fmt.Sprintf("session/%s", id)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...)
return
}
// Abort a session
func (r *SessionService) Abort(ctx context.Context, id string, opts ...option.RequestOption) (res *bool, err error) {
opts = append(r.Options[:], opts...)
if id == "" {
err = errors.New("missing required id parameter")
return
}
path := fmt.Sprintf("session/%s/abort", id)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
return
}
// Create and send a new message to a session
func (r *SessionService) Chat(ctx context.Context, id string, body SessionChatParams, opts ...option.RequestOption) (res *Message, err error) {
opts = append(r.Options[:], opts...)
if id == "" {
err = errors.New("missing required id parameter")
return
}
path := fmt.Sprintf("session/%s/message", id)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
return
}
// Analyze the app and create an AGENTS.md file
func (r *SessionService) Init(ctx context.Context, id string, body SessionInitParams, opts ...option.RequestOption) (res *bool, err error) {
opts = append(r.Options[:], opts...)
if id == "" {
err = errors.New("missing required id parameter")
return
}
path := fmt.Sprintf("session/%s/init", id)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
return
}
// List messages for a session
func (r *SessionService) Messages(ctx context.Context, id string, opts ...option.RequestOption) (res *[]Message, err error) {
opts = append(r.Options[:], opts...)
if id == "" {
err = errors.New("missing required id parameter")
return
}
path := fmt.Sprintf("session/%s/message", id)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
return
}
// Share a session
func (r *SessionService) Share(ctx context.Context, id string, opts ...option.RequestOption) (res *Session, err error) {
opts = append(r.Options[:], opts...)
if id == "" {
err = errors.New("missing required id parameter")
return
}
path := fmt.Sprintf("session/%s/share", id)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
return
}
// Summarize the session
func (r *SessionService) Summarize(ctx context.Context, id string, body SessionSummarizeParams, opts ...option.RequestOption) (res *bool, err error) {
opts = append(r.Options[:], opts...)
if id == "" {
err = errors.New("missing required id parameter")
return
}
path := fmt.Sprintf("session/%s/summarize", id)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
return
}
// Unshare the session
func (r *SessionService) Unshare(ctx context.Context, id string, opts ...option.RequestOption) (res *Session, err error) {
opts = append(r.Options[:], opts...)
if id == "" {
err = errors.New("missing required id parameter")
return
}
path := fmt.Sprintf("session/%s/share", id)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...)
return
}
type FilePart struct {
MediaType string `json:"mediaType,required"`
Type FilePartType `json:"type,required"`
URL string `json:"url,required"`
Filename string `json:"filename"`
JSON filePartJSON `json:"-"`
}
// filePartJSON contains the JSON metadata for the struct [FilePart]
type filePartJSON struct {
MediaType apijson.Field
Type apijson.Field
URL apijson.Field
Filename apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *FilePart) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r filePartJSON) RawJSON() string {
return r.raw
}
func (r FilePart) implementsMessagePart() {}
type FilePartType string
const (
FilePartTypeFile FilePartType = "file"
)
func (r FilePartType) IsKnown() bool {
switch r {
case FilePartTypeFile:
return true
}
return false
}
type FilePartParam struct {
MediaType param.Field[string] `json:"mediaType,required"`
Type param.Field[FilePartType] `json:"type,required"`
URL param.Field[string] `json:"url,required"`
Filename param.Field[string] `json:"filename"`
}
func (r FilePartParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
func (r FilePartParam) implementsMessagePartUnionParam() {}
type Message struct {
ID string `json:"id,required"`
Metadata MessageMetadata `json:"metadata,required"`
Parts []MessagePart `json:"parts,required"`
Role MessageRole `json:"role,required"`
JSON messageJSON `json:"-"`
}
// messageJSON contains the JSON metadata for the struct [Message]
type messageJSON struct {
ID apijson.Field
Metadata apijson.Field
Parts apijson.Field
Role apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *Message) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r messageJSON) RawJSON() string {
return r.raw
}
type MessageMetadata struct {
SessionID string `json:"sessionID,required"`
Time MessageMetadataTime `json:"time,required"`
Tool map[string]MessageMetadataTool `json:"tool,required"`
Assistant MessageMetadataAssistant `json:"assistant"`
Error MessageMetadataError `json:"error"`
Snapshot string `json:"snapshot"`
JSON messageMetadataJSON `json:"-"`
}
// messageMetadataJSON contains the JSON metadata for the struct [MessageMetadata]
type messageMetadataJSON struct {
SessionID apijson.Field
Time apijson.Field
Tool apijson.Field
Assistant apijson.Field
Error apijson.Field
Snapshot apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *MessageMetadata) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r messageMetadataJSON) RawJSON() string {
return r.raw
}
type MessageMetadataTime struct {
Created float64 `json:"created,required"`
Completed float64 `json:"completed"`
JSON messageMetadataTimeJSON `json:"-"`
}
// messageMetadataTimeJSON contains the JSON metadata for the struct
// [MessageMetadataTime]
type messageMetadataTimeJSON struct {
Created apijson.Field
Completed apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *MessageMetadataTime) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r messageMetadataTimeJSON) RawJSON() string {
return r.raw
}
type MessageMetadataTool struct {
Time MessageMetadataToolTime `json:"time,required"`
Title string `json:"title,required"`
Snapshot string `json:"snapshot"`
ExtraFields map[string]interface{} `json:"-,extras"`
JSON messageMetadataToolJSON `json:"-"`
}
// messageMetadataToolJSON contains the JSON metadata for the struct
// [MessageMetadataTool]
type messageMetadataToolJSON struct {
Time apijson.Field
Title apijson.Field
Snapshot apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *MessageMetadataTool) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r messageMetadataToolJSON) RawJSON() string {
return r.raw
}
type MessageMetadataToolTime struct {
End float64 `json:"end,required"`
Start float64 `json:"start,required"`
JSON messageMetadataToolTimeJSON `json:"-"`
}
// messageMetadataToolTimeJSON contains the JSON metadata for the struct
// [MessageMetadataToolTime]
type messageMetadataToolTimeJSON struct {
End apijson.Field
Start apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *MessageMetadataToolTime) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r messageMetadataToolTimeJSON) RawJSON() string {
return r.raw
}
type MessageMetadataAssistant struct {
Cost float64 `json:"cost,required"`
ModelID string `json:"modelID,required"`
Path MessageMetadataAssistantPath `json:"path,required"`
ProviderID string `json:"providerID,required"`
System []string `json:"system,required"`
Tokens MessageMetadataAssistantTokens `json:"tokens,required"`
Summary bool `json:"summary"`
JSON messageMetadataAssistantJSON `json:"-"`
}
// messageMetadataAssistantJSON contains the JSON metadata for the struct
// [MessageMetadataAssistant]
type messageMetadataAssistantJSON struct {
Cost apijson.Field
ModelID apijson.Field
Path apijson.Field
ProviderID apijson.Field
System apijson.Field
Tokens apijson.Field
Summary apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *MessageMetadataAssistant) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r messageMetadataAssistantJSON) RawJSON() string {
return r.raw
}
type MessageMetadataAssistantPath struct {
Cwd string `json:"cwd,required"`
Root string `json:"root,required"`
JSON messageMetadataAssistantPathJSON `json:"-"`
}
// messageMetadataAssistantPathJSON contains the JSON metadata for the struct
// [MessageMetadataAssistantPath]
type messageMetadataAssistantPathJSON struct {
Cwd apijson.Field
Root apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *MessageMetadataAssistantPath) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r messageMetadataAssistantPathJSON) RawJSON() string {
return r.raw
}
type MessageMetadataAssistantTokens struct {
Cache MessageMetadataAssistantTokensCache `json:"cache,required"`
Input float64 `json:"input,required"`
Output float64 `json:"output,required"`
Reasoning float64 `json:"reasoning,required"`
JSON messageMetadataAssistantTokensJSON `json:"-"`
}
// messageMetadataAssistantTokensJSON contains the JSON metadata for the struct
// [MessageMetadataAssistantTokens]
type messageMetadataAssistantTokensJSON struct {
Cache apijson.Field
Input apijson.Field
Output apijson.Field
Reasoning apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *MessageMetadataAssistantTokens) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r messageMetadataAssistantTokensJSON) RawJSON() string {
return r.raw
}
type MessageMetadataAssistantTokensCache struct {
Read float64 `json:"read,required"`
Write float64 `json:"write,required"`
JSON messageMetadataAssistantTokensCacheJSON `json:"-"`
}
// messageMetadataAssistantTokensCacheJSON contains the JSON metadata for the
// struct [MessageMetadataAssistantTokensCache]
type messageMetadataAssistantTokensCacheJSON struct {
Read apijson.Field
Write apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *MessageMetadataAssistantTokensCache) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r messageMetadataAssistantTokensCacheJSON) RawJSON() string {
return r.raw
}
type MessageMetadataError struct {
// This field can have the runtime type of [shared.ProviderAuthErrorData],
// [shared.UnknownErrorData], [interface{}].
Data interface{} `json:"data,required"`
Name MessageMetadataErrorName `json:"name,required"`
JSON messageMetadataErrorJSON `json:"-"`
union MessageMetadataErrorUnion
}
// messageMetadataErrorJSON contains the JSON metadata for the struct
// [MessageMetadataError]
type messageMetadataErrorJSON struct {
Data apijson.Field
Name apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r messageMetadataErrorJSON) RawJSON() string {
return r.raw
}
func (r *MessageMetadataError) UnmarshalJSON(data []byte) (err error) {
*r = MessageMetadataError{}
err = apijson.UnmarshalRoot(data, &r.union)
if err != nil {
return err
}
return apijson.Port(r.union, &r)
}
// AsUnion returns a [MessageMetadataErrorUnion] interface which you can cast to
// the specific types for more type safety.
//
// Possible runtime types of the union are [shared.ProviderAuthError],
// [shared.UnknownError], [MessageMetadataErrorMessageOutputLengthError].
func (r MessageMetadataError) AsUnion() MessageMetadataErrorUnion {
return r.union
}
// Union satisfied by [shared.ProviderAuthError], [shared.UnknownError] or
// [MessageMetadataErrorMessageOutputLengthError].
type MessageMetadataErrorUnion interface {
ImplementsMessageMetadataError()
}
func init() {
apijson.RegisterUnion(
reflect.TypeOf((*MessageMetadataErrorUnion)(nil)).Elem(),
"name",
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(shared.ProviderAuthError{}),
DiscriminatorValue: "ProviderAuthError",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(shared.UnknownError{}),
DiscriminatorValue: "UnknownError",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(MessageMetadataErrorMessageOutputLengthError{}),
DiscriminatorValue: "MessageOutputLengthError",
},
)
}
type MessageMetadataErrorMessageOutputLengthError struct {
Data interface{} `json:"data,required"`
Name MessageMetadataErrorMessageOutputLengthErrorName `json:"name,required"`
JSON messageMetadataErrorMessageOutputLengthErrorJSON `json:"-"`
}
// messageMetadataErrorMessageOutputLengthErrorJSON contains the JSON metadata for
// the struct [MessageMetadataErrorMessageOutputLengthError]
type messageMetadataErrorMessageOutputLengthErrorJSON struct {
Data apijson.Field
Name apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *MessageMetadataErrorMessageOutputLengthError) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r messageMetadataErrorMessageOutputLengthErrorJSON) RawJSON() string {
return r.raw
}
func (r MessageMetadataErrorMessageOutputLengthError) ImplementsMessageMetadataError() {}
type MessageMetadataErrorMessageOutputLengthErrorName string
const (
MessageMetadataErrorMessageOutputLengthErrorNameMessageOutputLengthError MessageMetadataErrorMessageOutputLengthErrorName = "MessageOutputLengthError"
)
func (r MessageMetadataErrorMessageOutputLengthErrorName) IsKnown() bool {
switch r {
case MessageMetadataErrorMessageOutputLengthErrorNameMessageOutputLengthError:
return true
}
return false
}
type MessageMetadataErrorName string
const (
MessageMetadataErrorNameProviderAuthError MessageMetadataErrorName = "ProviderAuthError"
MessageMetadataErrorNameUnknownError MessageMetadataErrorName = "UnknownError"
MessageMetadataErrorNameMessageOutputLengthError MessageMetadataErrorName = "MessageOutputLengthError"
)
func (r MessageMetadataErrorName) IsKnown() bool {
switch r {
case MessageMetadataErrorNameProviderAuthError, MessageMetadataErrorNameUnknownError, MessageMetadataErrorNameMessageOutputLengthError:
return true
}
return false
}
type MessageRole string
const (
MessageRoleUser MessageRole = "user"
MessageRoleAssistant MessageRole = "assistant"
)
func (r MessageRole) IsKnown() bool {
switch r {
case MessageRoleUser, MessageRoleAssistant:
return true
}
return false
}
type MessagePart struct {
Type MessagePartType `json:"type,required"`
Filename string `json:"filename"`
MediaType string `json:"mediaType"`
// This field can have the runtime type of [map[string]interface{}].
ProviderMetadata interface{} `json:"providerMetadata"`
SourceID string `json:"sourceId"`
Text string `json:"text"`
Title string `json:"title"`
// This field can have the runtime type of [ToolInvocationPartToolInvocation].
ToolInvocation interface{} `json:"toolInvocation"`
URL string `json:"url"`
JSON messagePartJSON `json:"-"`
union MessagePartUnion
}
// messagePartJSON contains the JSON metadata for the struct [MessagePart]
type messagePartJSON struct {
Type apijson.Field
Filename apijson.Field
MediaType apijson.Field
ProviderMetadata apijson.Field
SourceID apijson.Field
Text apijson.Field
Title apijson.Field
ToolInvocation apijson.Field
URL apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r messagePartJSON) RawJSON() string {
return r.raw
}
func (r *MessagePart) UnmarshalJSON(data []byte) (err error) {
*r = MessagePart{}
err = apijson.UnmarshalRoot(data, &r.union)
if err != nil {
return err
}
return apijson.Port(r.union, &r)
}
// AsUnion returns a [MessagePartUnion] interface which you can cast to the
// specific types for more type safety.
//
// Possible runtime types of the union are [TextPart], [ReasoningPart],
// [ToolInvocationPart], [SourceURLPart], [FilePart], [StepStartPart].
func (r MessagePart) AsUnion() MessagePartUnion {
return r.union
}
// Union satisfied by [TextPart], [ReasoningPart], [ToolInvocationPart],
// [SourceURLPart], [FilePart] or [StepStartPart].
type MessagePartUnion interface {
implementsMessagePart()
}
func init() {
apijson.RegisterUnion(
reflect.TypeOf((*MessagePartUnion)(nil)).Elem(),
"type",
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(TextPart{}),
DiscriminatorValue: "text",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(ReasoningPart{}),
DiscriminatorValue: "reasoning",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(ToolInvocationPart{}),
DiscriminatorValue: "tool-invocation",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(SourceURLPart{}),
DiscriminatorValue: "source-url",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(FilePart{}),
DiscriminatorValue: "file",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(StepStartPart{}),
DiscriminatorValue: "step-start",
},
)
}
type MessagePartType string
const (
MessagePartTypeText MessagePartType = "text"
MessagePartTypeReasoning MessagePartType = "reasoning"
MessagePartTypeToolInvocation MessagePartType = "tool-invocation"
MessagePartTypeSourceURL MessagePartType = "source-url"
MessagePartTypeFile MessagePartType = "file"
MessagePartTypeStepStart MessagePartType = "step-start"
)
func (r MessagePartType) IsKnown() bool {
switch r {
case MessagePartTypeText, MessagePartTypeReasoning, MessagePartTypeToolInvocation, MessagePartTypeSourceURL, MessagePartTypeFile, MessagePartTypeStepStart:
return true
}
return false
}
type MessagePartParam struct {
Type param.Field[MessagePartType] `json:"type,required"`
Filename param.Field[string] `json:"filename"`
MediaType param.Field[string] `json:"mediaType"`
ProviderMetadata param.Field[interface{}] `json:"providerMetadata"`
SourceID param.Field[string] `json:"sourceId"`
Text param.Field[string] `json:"text"`
Title param.Field[string] `json:"title"`
ToolInvocation param.Field[interface{}] `json:"toolInvocation"`
URL param.Field[string] `json:"url"`
}
func (r MessagePartParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
func (r MessagePartParam) implementsMessagePartUnionParam() {}
// Satisfied by [TextPartParam], [ReasoningPartParam], [ToolInvocationPartParam],
// [SourceURLPartParam], [FilePartParam], [StepStartPartParam], [MessagePartParam].
type MessagePartUnionParam interface {
implementsMessagePartUnionParam()
}
type ReasoningPart struct {
Text string `json:"text,required"`
Type ReasoningPartType `json:"type,required"`
ProviderMetadata map[string]interface{} `json:"providerMetadata"`
JSON reasoningPartJSON `json:"-"`
}
// reasoningPartJSON contains the JSON metadata for the struct [ReasoningPart]
type reasoningPartJSON struct {
Text apijson.Field
Type apijson.Field
ProviderMetadata apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *ReasoningPart) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r reasoningPartJSON) RawJSON() string {
return r.raw
}
func (r ReasoningPart) implementsMessagePart() {}
type ReasoningPartType string
const (
ReasoningPartTypeReasoning ReasoningPartType = "reasoning"
)
func (r ReasoningPartType) IsKnown() bool {
switch r {
case ReasoningPartTypeReasoning:
return true
}
return false
}
type ReasoningPartParam struct {
Text param.Field[string] `json:"text,required"`
Type param.Field[ReasoningPartType] `json:"type,required"`
ProviderMetadata param.Field[map[string]interface{}] `json:"providerMetadata"`
}
func (r ReasoningPartParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
func (r ReasoningPartParam) implementsMessagePartUnionParam() {}
type Session struct {
ID string `json:"id,required"`
Time SessionTime `json:"time,required"`
Title string `json:"title,required"`
Version string `json:"version,required"`
ParentID string `json:"parentID"`
Revert SessionRevert `json:"revert"`
Share SessionShare `json:"share"`
JSON sessionJSON `json:"-"`
}
// sessionJSON contains the JSON metadata for the struct [Session]
type sessionJSON struct {
ID apijson.Field
Time apijson.Field
Title apijson.Field
Version apijson.Field
ParentID apijson.Field
Revert apijson.Field
Share apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *Session) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r sessionJSON) RawJSON() string {
return r.raw
}
type SessionTime struct {
Created float64 `json:"created,required"`
Updated float64 `json:"updated,required"`
JSON sessionTimeJSON `json:"-"`
}
// sessionTimeJSON contains the JSON metadata for the struct [SessionTime]
type sessionTimeJSON struct {
Created apijson.Field
Updated apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *SessionTime) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r sessionTimeJSON) RawJSON() string {
return r.raw
}
type SessionRevert struct {
MessageID string `json:"messageID,required"`
Part float64 `json:"part,required"`
Snapshot string `json:"snapshot"`
JSON sessionRevertJSON `json:"-"`
}
// sessionRevertJSON contains the JSON metadata for the struct [SessionRevert]
type sessionRevertJSON struct {
MessageID apijson.Field
Part apijson.Field
Snapshot apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *SessionRevert) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r sessionRevertJSON) RawJSON() string {
return r.raw
}
type SessionShare struct {
URL string `json:"url,required"`
JSON sessionShareJSON `json:"-"`
}
// sessionShareJSON contains the JSON metadata for the struct [SessionShare]
type sessionShareJSON struct {
URL apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *SessionShare) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r sessionShareJSON) RawJSON() string {
return r.raw
}
type SourceURLPart struct {
SourceID string `json:"sourceId,required"`
Type SourceURLPartType `json:"type,required"`
URL string `json:"url,required"`
ProviderMetadata map[string]interface{} `json:"providerMetadata"`
Title string `json:"title"`
JSON sourceURLPartJSON `json:"-"`
}
// sourceURLPartJSON contains the JSON metadata for the struct [SourceURLPart]
type sourceURLPartJSON struct {
SourceID apijson.Field
Type apijson.Field
URL apijson.Field
ProviderMetadata apijson.Field
Title apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *SourceURLPart) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r sourceURLPartJSON) RawJSON() string {
return r.raw
}
func (r SourceURLPart) implementsMessagePart() {}
type SourceURLPartType string
const (
SourceURLPartTypeSourceURL SourceURLPartType = "source-url"
)
func (r SourceURLPartType) IsKnown() bool {
switch r {
case SourceURLPartTypeSourceURL:
return true
}
return false
}
type SourceURLPartParam struct {
SourceID param.Field[string] `json:"sourceId,required"`
Type param.Field[SourceURLPartType] `json:"type,required"`
URL param.Field[string] `json:"url,required"`
ProviderMetadata param.Field[map[string]interface{}] `json:"providerMetadata"`
Title param.Field[string] `json:"title"`
}
func (r SourceURLPartParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
func (r SourceURLPartParam) implementsMessagePartUnionParam() {}
type StepStartPart struct {
Type StepStartPartType `json:"type,required"`
JSON stepStartPartJSON `json:"-"`
}
// stepStartPartJSON contains the JSON metadata for the struct [StepStartPart]
type stepStartPartJSON struct {
Type apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *StepStartPart) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r stepStartPartJSON) RawJSON() string {
return r.raw
}
func (r StepStartPart) implementsMessagePart() {}
type StepStartPartType string
const (
StepStartPartTypeStepStart StepStartPartType = "step-start"
)
func (r StepStartPartType) IsKnown() bool {
switch r {
case StepStartPartTypeStepStart:
return true
}
return false
}
type StepStartPartParam struct {
Type param.Field[StepStartPartType] `json:"type,required"`
}
func (r StepStartPartParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
func (r StepStartPartParam) implementsMessagePartUnionParam() {}
type TextPart struct {
Text string `json:"text,required"`
Type TextPartType `json:"type,required"`
JSON textPartJSON `json:"-"`
}
// textPartJSON contains the JSON metadata for the struct [TextPart]
type textPartJSON struct {
Text apijson.Field
Type apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *TextPart) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r textPartJSON) RawJSON() string {
return r.raw
}
func (r TextPart) implementsMessagePart() {}
type TextPartType string
const (
TextPartTypeText TextPartType = "text"
)
func (r TextPartType) IsKnown() bool {
switch r {
case TextPartTypeText:
return true
}
return false
}
type TextPartParam struct {
Text param.Field[string] `json:"text,required"`
Type param.Field[TextPartType] `json:"type,required"`
}
func (r TextPartParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
func (r TextPartParam) implementsMessagePartUnionParam() {}
type ToolCall struct {
State ToolCallState `json:"state,required"`
ToolCallID string `json:"toolCallId,required"`
ToolName string `json:"toolName,required"`
Args interface{} `json:"args"`
Step float64 `json:"step"`
JSON toolCallJSON `json:"-"`
}
// toolCallJSON contains the JSON metadata for the struct [ToolCall]
type toolCallJSON struct {
State apijson.Field
ToolCallID apijson.Field
ToolName apijson.Field
Args apijson.Field
Step apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *ToolCall) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r toolCallJSON) RawJSON() string {
return r.raw
}
func (r ToolCall) implementsToolInvocationPartToolInvocation() {}
type ToolCallState string
const (
ToolCallStateCall ToolCallState = "call"
)
func (r ToolCallState) IsKnown() bool {
switch r {
case ToolCallStateCall:
return true
}
return false
}
type ToolCallParam struct {
State param.Field[ToolCallState] `json:"state,required"`
ToolCallID param.Field[string] `json:"toolCallId,required"`
ToolName param.Field[string] `json:"toolName,required"`
Args param.Field[interface{}] `json:"args"`
Step param.Field[float64] `json:"step"`
}
func (r ToolCallParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
func (r ToolCallParam) implementsToolInvocationPartToolInvocationUnionParam() {}
type ToolInvocationPart struct {
ToolInvocation ToolInvocationPartToolInvocation `json:"toolInvocation,required"`
Type ToolInvocationPartType `json:"type,required"`
JSON toolInvocationPartJSON `json:"-"`
}
// toolInvocationPartJSON contains the JSON metadata for the struct
// [ToolInvocationPart]
type toolInvocationPartJSON struct {
ToolInvocation apijson.Field
Type apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *ToolInvocationPart) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r toolInvocationPartJSON) RawJSON() string {
return r.raw
}
func (r ToolInvocationPart) implementsMessagePart() {}
type ToolInvocationPartToolInvocation struct {
State ToolInvocationPartToolInvocationState `json:"state,required"`
ToolCallID string `json:"toolCallId,required"`
ToolName string `json:"toolName,required"`
// This field can have the runtime type of [interface{}].
Args interface{} `json:"args"`
Result string `json:"result"`
Step float64 `json:"step"`
JSON toolInvocationPartToolInvocationJSON `json:"-"`
union ToolInvocationPartToolInvocationUnion
}
// toolInvocationPartToolInvocationJSON contains the JSON metadata for the struct
// [ToolInvocationPartToolInvocation]
type toolInvocationPartToolInvocationJSON struct {
State apijson.Field
ToolCallID apijson.Field
ToolName apijson.Field
Args apijson.Field
Result apijson.Field
Step apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r toolInvocationPartToolInvocationJSON) RawJSON() string {
return r.raw
}
func (r *ToolInvocationPartToolInvocation) UnmarshalJSON(data []byte) (err error) {
*r = ToolInvocationPartToolInvocation{}
err = apijson.UnmarshalRoot(data, &r.union)
if err != nil {
return err
}
return apijson.Port(r.union, &r)
}
// AsUnion returns a [ToolInvocationPartToolInvocationUnion] interface which you
// can cast to the specific types for more type safety.
//
// Possible runtime types of the union are [ToolCall], [ToolPartialCall],
// [ToolResult].
func (r ToolInvocationPartToolInvocation) AsUnion() ToolInvocationPartToolInvocationUnion {
return r.union
}
// Union satisfied by [ToolCall], [ToolPartialCall] or [ToolResult].
type ToolInvocationPartToolInvocationUnion interface {
implementsToolInvocationPartToolInvocation()
}
func init() {
apijson.RegisterUnion(
reflect.TypeOf((*ToolInvocationPartToolInvocationUnion)(nil)).Elem(),
"state",
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(ToolCall{}),
DiscriminatorValue: "call",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(ToolPartialCall{}),
DiscriminatorValue: "partial-call",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(ToolResult{}),
DiscriminatorValue: "result",
},
)
}
type ToolInvocationPartToolInvocationState string
const (
ToolInvocationPartToolInvocationStateCall ToolInvocationPartToolInvocationState = "call"
ToolInvocationPartToolInvocationStatePartialCall ToolInvocationPartToolInvocationState = "partial-call"
ToolInvocationPartToolInvocationStateResult ToolInvocationPartToolInvocationState = "result"
)
func (r ToolInvocationPartToolInvocationState) IsKnown() bool {
switch r {
case ToolInvocationPartToolInvocationStateCall, ToolInvocationPartToolInvocationStatePartialCall, ToolInvocationPartToolInvocationStateResult:
return true
}
return false
}
type ToolInvocationPartType string
const (
ToolInvocationPartTypeToolInvocation ToolInvocationPartType = "tool-invocation"
)
func (r ToolInvocationPartType) IsKnown() bool {
switch r {
case ToolInvocationPartTypeToolInvocation:
return true
}
return false
}
type ToolInvocationPartParam struct {
ToolInvocation param.Field[ToolInvocationPartToolInvocationUnionParam] `json:"toolInvocation,required"`
Type param.Field[ToolInvocationPartType] `json:"type,required"`
}
func (r ToolInvocationPartParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
func (r ToolInvocationPartParam) implementsMessagePartUnionParam() {}
type ToolInvocationPartToolInvocationParam struct {
State param.Field[ToolInvocationPartToolInvocationState] `json:"state,required"`
ToolCallID param.Field[string] `json:"toolCallId,required"`
ToolName param.Field[string] `json:"toolName,required"`
Args param.Field[interface{}] `json:"args"`
Result param.Field[string] `json:"result"`
Step param.Field[float64] `json:"step"`
}
func (r ToolInvocationPartToolInvocationParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
func (r ToolInvocationPartToolInvocationParam) implementsToolInvocationPartToolInvocationUnionParam() {
}
// Satisfied by [ToolCallParam], [ToolPartialCallParam], [ToolResultParam],
// [ToolInvocationPartToolInvocationParam].
type ToolInvocationPartToolInvocationUnionParam interface {
implementsToolInvocationPartToolInvocationUnionParam()
}
type ToolPartialCall struct {
State ToolPartialCallState `json:"state,required"`
ToolCallID string `json:"toolCallId,required"`
ToolName string `json:"toolName,required"`
Args interface{} `json:"args"`
Step float64 `json:"step"`
JSON toolPartialCallJSON `json:"-"`
}
// toolPartialCallJSON contains the JSON metadata for the struct [ToolPartialCall]
type toolPartialCallJSON struct {
State apijson.Field
ToolCallID apijson.Field
ToolName apijson.Field
Args apijson.Field
Step apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *ToolPartialCall) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r toolPartialCallJSON) RawJSON() string {
return r.raw
}
func (r ToolPartialCall) implementsToolInvocationPartToolInvocation() {}
type ToolPartialCallState string
const (
ToolPartialCallStatePartialCall ToolPartialCallState = "partial-call"
)
func (r ToolPartialCallState) IsKnown() bool {
switch r {
case ToolPartialCallStatePartialCall:
return true
}
return false
}
type ToolPartialCallParam struct {
State param.Field[ToolPartialCallState] `json:"state,required"`
ToolCallID param.Field[string] `json:"toolCallId,required"`
ToolName param.Field[string] `json:"toolName,required"`
Args param.Field[interface{}] `json:"args"`
Step param.Field[float64] `json:"step"`
}
func (r ToolPartialCallParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
func (r ToolPartialCallParam) implementsToolInvocationPartToolInvocationUnionParam() {}
type ToolResult struct {
Result string `json:"result,required"`
State ToolResultState `json:"state,required"`
ToolCallID string `json:"toolCallId,required"`
ToolName string `json:"toolName,required"`
Args interface{} `json:"args"`
Step float64 `json:"step"`
JSON toolResultJSON `json:"-"`
}
// toolResultJSON contains the JSON metadata for the struct [ToolResult]
type toolResultJSON struct {
Result apijson.Field
State apijson.Field
ToolCallID apijson.Field
ToolName apijson.Field
Args apijson.Field
Step apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *ToolResult) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r toolResultJSON) RawJSON() string {
return r.raw
}
func (r ToolResult) implementsToolInvocationPartToolInvocation() {}
type ToolResultState string
const (
ToolResultStateResult ToolResultState = "result"
)
func (r ToolResultState) IsKnown() bool {
switch r {
case ToolResultStateResult:
return true
}
return false
}
type ToolResultParam struct {
Result param.Field[string] `json:"result,required"`
State param.Field[ToolResultState] `json:"state,required"`
ToolCallID param.Field[string] `json:"toolCallId,required"`
ToolName param.Field[string] `json:"toolName,required"`
Args param.Field[interface{}] `json:"args"`
Step param.Field[float64] `json:"step"`
}
func (r ToolResultParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
func (r ToolResultParam) implementsToolInvocationPartToolInvocationUnionParam() {}
type SessionChatParams struct {
ModelID param.Field[string] `json:"modelID,required"`
Parts param.Field[[]MessagePartUnionParam] `json:"parts,required"`
ProviderID param.Field[string] `json:"providerID,required"`
}
func (r SessionChatParams) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
type SessionInitParams struct {
ModelID param.Field[string] `json:"modelID,required"`
ProviderID param.Field[string] `json:"providerID,required"`
}
func (r SessionInitParams) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
type SessionSummarizeParams struct {
ModelID param.Field[string] `json:"modelID,required"`
ProviderID param.Field[string] `json:"providerID,required"`
}
func (r SessionSummarizeParams) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}