persistence

package
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 15, 2023 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultChatMaxResponseTokens default max token count for chat session response
	DefaultChatMaxResponseTokens = 2048
	// DefaultChatRequestTemperature default chat request temperature
	DefaultChatRequestTemperature = float32(0.5)
	// DefaultChatRequestTopP default chat request TopP
	DefaultChatRequestTopP = float32(0)

	// ChatSessionStateOpen ENUM for chat session state "OPEN"
	ChatSessionStateOpen ChatSessionState = "session-open"
	// ChatSessionStateClose ENUM for chat session state "CLOSE"
	ChatSessionStateClose ChatSessionState = "session-close"
)

Variables

This section is empty.

Functions

func GetSqliteDialector

func GetSqliteDialector(dbFile string) gorm.Dialector

GetSqliteDialector define Sqlite GORM dialector

@param dbFile string - Sqlite DB file
@return GORM sqlite dialector

Types

type ChatExchange

type ChatExchange struct {
	RequestTimestamp  time.Time `yaml:"request_ts" json:"request_ts" validate:"required"`
	Request           string    `yaml:"request" json:"request" validate:"required"`
	ResponseTimestamp time.Time `yaml:"response_ts" json:"response_ts" validate:"required"`
	Response          string    `yaml:"response" json:"response" validate:"required"`
}

ChatExchange defines one exchange during a chat session.

An exchange is defined as a request and its associated response

func (ChatExchange) String added in v0.1.1

func (c ChatExchange) String() string

String toString function for ChatExchange

@return string representation of one chat exchange

type ChatSession

type ChatSession interface {
	/*
		SessionID this chat session ID

			@param ctxt context.Context - query context
			@return session ID
	*/
	SessionID(ctxt context.Context) (string, error)

	/*
		SessionState session's current state

			@param ctxt context.Context - query context
			@return current session state
	*/
	SessionState(ctxt context.Context) (ChatSessionState, error)

	/*
		CloseSession close this chat session

			@param ctxt context.Context - query context
	*/
	CloseSession(ctxt context.Context) error

	/*
		User query the associated user for this chat session

			@param ctxt context.Context - query context
			@return the associated User
	*/
	User(ctxt context.Context) (User, error)

	/*
		Settings returns the current session wide API request parameters

			@param ctxt context.Context - query context
			@return session wide parameters
	*/
	Settings(ctxt context.Context) (ChatSessionParameters, error)

	/*
		ChangeSettings update the session wide API request parameters

			@param ctxt context.Context - query context
			@param newSettings ChatSessionParameters - new session wide API request parameters
	*/
	ChangeSettings(ctxt context.Context, newSettings ChatSessionParameters) error

	/*
		RecordOneExchange record a single exchange.

		An exchange is defined as a request and its associated response

			@param ctxt context.Context - query context
			@param exchange ChatExchange - the exchange
	*/
	RecordOneExchange(ctxt context.Context, exchange ChatExchange) error

	/*
		FirstExchange get the first session exchange

			@param ctxt context.Context - query context
			@return chat exchange
	*/
	FirstExchange(ctxt context.Context) (ChatExchange, error)

	/*
		Exchanges fetch the list of exchanges recorded in this session.

		The exchanges are sorted by chronological order.

			@param ctxt context.Context - query context
			@return list of exchanges in chronological order
	*/
	Exchanges(ctxt context.Context) ([]ChatExchange, error)

	/*
		Refresh helper function to sync the handler with what is stored in persistence

			@param ctxt context.Context - query context
	*/
	Refresh(ctxt context.Context) error

	/*
		DeleteLatestExchange delete the latest exchange in the session

			@param ctxt context.Context - query context
	*/
	DeleteLatestExchange(ctxt context.Context) error
}

ChatSession define a chat session with a text completion model.

This records the requests and responses between the user and the model.

type ChatSessionManager

type ChatSessionManager interface {
	/*
		NewSession define a new chat session

			@param ctxt context.Context - query context
			@param model stirng - OpenAI model name
			@return	new chat session
	*/
	NewSession(ctxt context.Context, model string) (ChatSession, error)

	/*
		ListSessions list all sessions

			@param ctxt context.Context - query context
			@return all known sessions
	*/
	ListSessions(ctxt context.Context) ([]ChatSession, error)

	/*
		GetSession fetch a session

			@param ctxt context.Context - query context
			@param sessionID string - session ID
			@return session entry
	*/
	GetSession(ctxt context.Context, sessionID string) (ChatSession, error)

	/*
	   CurrentActiveSession get the current active chat session for the associated user

	   	@param ctxt context.Context - query context
	   	@return session entry
	*/
	CurrentActiveSession(ctxt context.Context) (ChatSession, error)

	/*
	   SetActiveSession set the current active chat session for the associated user

	   	@param ctxt context.Context - query context
	   	@param session ChatSession - the chat session
	*/
	SetActiveSession(ctxt context.Context, session ChatSession) error

	/*
		DeleteSession delete a session

			@param ctxt context.Context - query context
			@param sessionID string - session ID
	*/
	DeleteSession(ctxt context.Context, sessionID string) error

	/*
		DeleteMultipleSessions delete multiple sessions

			@param ctxt context.Context - query context
			@param sessionIDs []string - session IDs
	*/
	DeleteMultipleSessions(ctxt context.Context, sessionIDs []string) error

	/*
		DeleteMultipleSessions delete all sessions

			@param ctxt context.Context - query context
	*/
	DeleteAllSessions(ctxt context.Context) error
}

ChatSessionManager chat session management client

type ChatSessionParameters

type ChatSessionParameters struct {
	Model            string   `yaml:"model" json:"model" validate:"required,oneof=turbo davinci curie babbage ada"`
	Suffix           *string  `yaml:"suffix,omitempty" json:"suffix,omitempty"`
	MaxTokens        int      `yaml:"max_tokens" json:"max_tokens" validate:"required,gte=10,lte=4096"`
	Temperature      *float32 `yaml:"temperature,omitempty" json:"temperature,omitempty" validate:"omitempty,gte=0,lte=2"`
	TopP             *float32 `yaml:"top_p,omitempty" json:"top_p,omitempty" validate:"omitempty,gte=0,lte=1"`
	Stop             []string `yaml:"stop,omitempty" json:"stop,omitempty" validate:"omitempty,lte=4"`
	PresencePenalty  *float32 `yaml:"presence_penalty,omitempty" json:"presence_penalty,omitempty" validate:"omitempty,gte=-2,lte=2"`
	FrequencyPenalty *float32 `yaml:"frequency_penalty,omitempty" json:"frequency_penalty,omitempty" validate:"omitempty,gte=-2,lte=2"`
}

ChatSessionParameters common API request parameters used for one chat session

See https://platform.openai.com/docs/api-reference/completions/create for explanations

func GetDefaultChatSessionParams

func GetDefaultChatSessionParams(model string) ChatSessionParameters

GetDefaultChatSessionParams generate default chat session request params

@param model string - chat session model
@return default chat session parameters

func (*ChatSessionParameters) MergeWithNewSettings

func (s *ChatSessionParameters) MergeWithNewSettings(newSetting ChatSessionParameters)

MergeWithNewSettings merge the contents of the new setting into current setting

Only fields in the new setting which are not nil will be merged in

@param newSetting ChatSessionParameters - new setting

type ChatSessionState

type ChatSessionState string

ChatSessionState chat session state variable

type User

type User interface {
	/*
		GetID query for user GetID

			@param ctxt context.Context - query context
			@return the user ID
	*/
	GetID(ctxt context.Context) (string, error)

	/*
		GetName query for user name

			@param ctxt context.Context - query context
			@return the user name
	*/
	GetName(ctxt context.Context) (string, error)

	/*
		SetName set user name

			@param ctxt context.Context - query context
			@param newName string - new user name
	*/
	SetName(ctxt context.Context, newName string) error

	/*
		GetActiveSessionID fetch user's active session ID

			@param ctxt context.Context - query context
			@return active session ID
	*/
	GetActiveSessionID(ctxt context.Context) (*string, error)

	/*
	   SetActiveSessionID change user's active session ID

	   	@param ctxt context.Context - query context
	   	@param sessionID string - new session ID
	*/
	SetActiveSessionID(ctxt context.Context, sessionID string) error

	/*
	   ClearActiveSessionID clear user's active session ID

	   	@param ctxt context.Context - query context
	*/
	ClearActiveSessionID(ctxt context.Context) error

	/*
		GetAPIToken get user API token

			@param ctxt context.Context - query context
			@return the user API token
	*/
	GetAPIToken(ctxt context.Context) (string, error)

	/*
		SetAPIToken set user API token

			@param ctxt context.Context - query context
			@param newToken string - new API token
	*/
	SetAPIToken(ctxt context.Context, newToken string) error

	/*
		Refresh helper function to sync the handler with what is stored in persistence

			@param ctxt context.Context - query context
	*/
	Refresh(ctxt context.Context) error

	/*
		ChatSessionManager fetch chat session manager for a user

			@param ctxt context.Context - query context
			@return associated chat session manager
	*/
	ChatSessionManager(ctxt context.Context) (ChatSessionManager, error)
}

User holds information regarding one user of the system. This includes

  • User ID
  • User Name
  • User API token

type UserManager

type UserManager interface {
	/*
		RecordNewUser record a new system user

			@param ctxt context.Context - query context
			@param userName string - user name
			@return	new user entry
	*/
	RecordNewUser(ctxt context.Context, userName string) (User, error)

	/*
		ListUsers list all known users

			@param ctxt context.Context - query context
			@return list of known users
	*/
	ListUsers(ctxt context.Context) ([]User, error)

	/*
		GetUser fetch a user

			@param ctxt context.Context - query context
			@param userID string - user ID
			@return user entry
	*/
	GetUser(ctxt context.Context, userID string) (User, error)

	/*
		GetUser fetch a user by name

			@param ctxt context.Context - query context
			@param userName string - user name
			@return user entry
	*/
	GetUserByName(ctxt context.Context, userName string) (User, error)

	/*
		DeleteUser delete a user

			@param ctxt context.Context - query context
			@param userID string - user ID
	*/
	DeleteUser(ctxt context.Context, userID string) error
}

UserManager user management client

func GetSQLUserManager

func GetSQLUserManager(dbDialector gorm.Dialector, logLevel logger.LogLevel) (UserManager, error)

GetSQLUserManager define a new SQL based user manager

@param dbDialector gorm.Dialector - GORM SQL dialector
@param logLevel logger.LogLevel - SQL log level

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL