mirror of https://github.com/kubernetes/kops.git
1125 lines
42 KiB
Go
1125 lines
42 KiB
Go
package godo
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
genAIBasePath = "/v2/gen-ai/agents"
|
|
agentModelBasePath = "/v2/gen-ai/models"
|
|
agentRouteBasePath = genAIBasePath + "/%s/child_agents/%s"
|
|
KnowledgeBasePath = "/v2/gen-ai/knowledge_bases"
|
|
KnowledgeBaseDataSourcesPath = KnowledgeBasePath + "/%s/data_sources"
|
|
GetKnowledgeBaseByIDPath = KnowledgeBasePath + "/%s"
|
|
UpdateKnowledgeBaseByIDPath = KnowledgeBasePath + "/%s"
|
|
DeleteKnowledgeBaseByIDPath = KnowledgeBasePath + "/%s"
|
|
AgentKnowledgeBasePath = "/v2/gen-ai/agents" + "/%s/knowledge_bases/%s"
|
|
DeleteDataSourcePath = KnowledgeBasePath + "/%s/data_sources/%s"
|
|
)
|
|
|
|
// GenAIService is an interface for interfacing with the Gen AI Agent endpoints
|
|
// of the DigitalOcean API.
|
|
// See https://docs.digitalocean.com/reference/api/digitalocean/#tag/GenAI-Platform-(Public-Preview) for more details.
|
|
type GenAIService interface {
|
|
ListAgents(context.Context, *ListOptions) ([]*Agent, *Response, error)
|
|
CreateAgent(context.Context, *AgentCreateRequest) (*Agent, *Response, error)
|
|
ListAgentAPIKeys(context.Context, string, *ListOptions) ([]*ApiKeyInfo, *Response, error)
|
|
CreateAgentAPIKey(context.Context, string, *AgentAPIKeyCreateRequest) (*ApiKeyInfo, *Response, error)
|
|
UpdateAgentAPIKey(context.Context, string, string, *AgentAPIKeyUpdateRequest) (*ApiKeyInfo, *Response, error)
|
|
DeleteAgentAPIKey(context.Context, string, string) (*ApiKeyInfo, *Response, error)
|
|
RegenerateAgentAPIKey(context.Context, string, string) (*ApiKeyInfo, *Response, error)
|
|
GetAgent(context.Context, string) (*Agent, *Response, error)
|
|
UpdateAgent(context.Context, string, *AgentUpdateRequest) (*Agent, *Response, error)
|
|
DeleteAgent(context.Context, string) (*Agent, *Response, error)
|
|
UpdateAgentVisibility(context.Context, string, *AgentVisibilityUpdateRequest) (*Agent, *Response, error)
|
|
ListModels(context.Context, *ListOptions) ([]*Model, *Response, error)
|
|
ListKnowledgeBases(ctx context.Context, opt *ListOptions) ([]KnowledgeBase, *Response, error)
|
|
CreateKnowledgeBase(ctx context.Context, knowledgeBaseCreate *KnowledgeBaseCreateRequest) (*KnowledgeBase, *Response, error)
|
|
ListKnowledgeBaseDataSources(ctx context.Context, knowledgeBaseID string, opt *ListOptions) ([]KnowledgeBaseDataSource, *Response, error)
|
|
AddKnowledgeBaseDataSource(ctx context.Context, knowledgeBaseID string, addDataSource *AddKnowledgeBaseDataSourceRequest) (*KnowledgeBaseDataSource, *Response, error)
|
|
DeleteKnowledgeBaseDataSource(ctx context.Context, knowledgeBaseID string, dataSourceID string) (string, string, *Response, error)
|
|
GetKnowledgeBase(ctx context.Context, knowledgeBaseID string) (*KnowledgeBase, string, *Response, error)
|
|
UpdateKnowledgeBase(ctx context.Context, knowledgeBaseID string, update *UpdateKnowledgeBaseRequest) (*KnowledgeBase, *Response, error)
|
|
DeleteKnowledgeBase(ctx context.Context, knowledgeBaseID string) (string, *Response, error)
|
|
AttachKnowledgeBaseToAgent(ctx context.Context, agentID string, knowledgeBaseID string) (*Agent, *Response, error)
|
|
DetachKnowledgeBaseToAgent(ctx context.Context, agentID string, knowledgeBaseID string) (*Agent, *Response, error)
|
|
AddAgentRoute(context.Context, string, string, *AgentRouteCreateRequest) (*AgentRouteResponse, *Response, error)
|
|
UpdateAgentRoute(context.Context, string, string, *AgentRouteUpdateRequest) (*AgentRouteResponse, *Response, error)
|
|
DeleteAgentRoute(context.Context, string, string) (*AgentRouteResponse, *Response, error)
|
|
ListAgentVersions(context.Context, string, *ListOptions) ([]*AgentVersion, *Response, error)
|
|
RollbackAgentVersion(context.Context, string, string) (string, *Response, error)
|
|
}
|
|
|
|
var _ GenAIService = &GenAIServiceOp{}
|
|
|
|
// GenAIServiceOp interfaces with the Gen AI Service endpoints in the DigitalOcean API.
|
|
type GenAIServiceOp struct {
|
|
client *Client
|
|
}
|
|
|
|
type genAIAgentsRoot struct {
|
|
Agents []*Agent `json:"agents"`
|
|
Links *Links `json:"links"`
|
|
Meta *Meta `json:"meta"`
|
|
}
|
|
|
|
type genAIAgentRoot struct {
|
|
Agent *Agent `json:"agent"`
|
|
}
|
|
|
|
type genAIModelsRoot struct {
|
|
Models []*Model `json:"models"`
|
|
Links *Links `json:"links"`
|
|
Meta *Meta `json:"meta"`
|
|
}
|
|
|
|
type agentAPIKeysRoot struct {
|
|
ApiKeys []*ApiKeyInfo `json:"api_key_infos"`
|
|
Links *Links `json:"links"`
|
|
Meta *Meta `json:"meta"`
|
|
}
|
|
|
|
type agentAPIKeyRoot struct {
|
|
ApiKey *ApiKeyInfo `json:"api_key_info,omitempty"`
|
|
}
|
|
|
|
type agentVersionsRoot struct {
|
|
AgentVersions []*AgentVersion `json:"agent_versions,omitempty"`
|
|
Links *Links `json:"links,omitempty"`
|
|
Meta *Meta `json:"meta,omitempty"`
|
|
}
|
|
|
|
// Agent represents a Gen AI Agent
|
|
type Agent struct {
|
|
AnthropicApiKey *AnthropicApiKeyInfo `json:"anthropic_api_key,omitempty"`
|
|
ApiKeyInfos []*ApiKeyInfo `json:"api_key_infos,omitempty"`
|
|
ApiKeys []*ApiKey `json:"api_keys,omitempty"`
|
|
ChatBot *ChatBot `json:"chatbot,omitempty"`
|
|
ChatbotIdentifiers []*AgentChatbotIdentifier `json:"chatbot_identifiers,omitempty"`
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
ChildAgents []*Agent `json:"child_agents,omitempty"`
|
|
Deployment *AgentDeployment `json:"deployment,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
Functions []*AgentFunction `json:"functions,omitempty"`
|
|
Guardrails []*AgentGuardrail `json:"guardrails,omitempty"`
|
|
IfCase string `json:"if_case,omitempty"`
|
|
Instruction string `json:"instruction,omitempty"`
|
|
K int `json:"k,omitempty"`
|
|
KnowledgeBases []*KnowledgeBase `json:"knowledge_bases,omitempty"`
|
|
MaxTokens int `json:"max_tokens,omitempty"`
|
|
Model *Model `json:"model,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
OpenAiApiKey *OpenAiApiKey `json:"open_ai_api_key,omitempty"`
|
|
ParentAgents []*Agent `json:"parent_agents,omitempty"`
|
|
ProjectId string `json:"project_id,omitempty"`
|
|
Region string `json:"region,omitempty"`
|
|
RetrievalMethod string `json:"retrieval_method,omitempty"`
|
|
RouteCreatedAt *Timestamp `json:"route_created_at,omitempty"`
|
|
RouteCreatedBy string `json:"route_created_by,omitempty"`
|
|
RouteUuid string `json:"route_uuid,omitempty"`
|
|
RouteName string `json:"route_name,omitempty"`
|
|
Tags []string `json:"tags,omitempty"`
|
|
Template *AgentTemplate `json:"template,omitempty"`
|
|
Temperature float64 `json:"temperature,omitempty"`
|
|
TopP float64 `json:"top_p,omitempty"`
|
|
Url string `json:"url,omitempty"`
|
|
UserId string `json:"user_id,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
}
|
|
|
|
// AgentVersion represents a version of a Gen AI Agent
|
|
type AgentVersion struct {
|
|
AgentUuid string `json:"agent_uuid,omitempty"`
|
|
AttachedChildAgents []*AttachedChildAgent `json:"attached_child_agents,omitempty"`
|
|
AttachedFunctions []*AgentFunction `json:"attached_functions,omitempty"`
|
|
AttachedGuardrails []*AgentGuardrail `json:"attached_guardrails,omitempty"`
|
|
AttachedKnowledgeBases []*KnowledgeBase `json:"attached_knowledgebases,omitempty"`
|
|
CanRollback bool `json:"can_rollback,omitempty"`
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
CreatedByEmail string `json:"created_by_email,omitempty"`
|
|
CurrentlyApplied bool `json:"currently_applied,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
ID string `json:"id,omitempty"`
|
|
Instruction string `json:"instruction,omitempty"`
|
|
K int64 `json:"k,omitempty"`
|
|
MaxTokens int64 `json:"max_tokens,omitempty"`
|
|
ModelName string `json:"model_name,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
ProvideCitations bool `json:"provide_citations,omitempty"`
|
|
RetrievalMethod string `json:"retrieval_method,omitempty"`
|
|
Tags []string `json:"tags,omitempty"`
|
|
Temperature float64 `json:"temperature,omitempty"`
|
|
TopP float64 `json:"top_p,omitempty"`
|
|
TriggerAction string `json:"trigger_action,omitempty"`
|
|
VersionHash string `json:"version_hash,omitempty"`
|
|
}
|
|
|
|
type AttachedChildAgent struct {
|
|
AgentName string `json:"agent_name,omitempty"`
|
|
ChildAgentUuid string `json:"child_agent_uuid,omitempty"`
|
|
IfCase string `json:"if_case,omitempty"`
|
|
IsDeleted bool `json:"is_deleted,omitempty"`
|
|
RouteName string `json:"route_name,omitempty"`
|
|
}
|
|
|
|
type auditResponse struct {
|
|
AuditHeader AuditHeader `json:"audit_header,omitempty"`
|
|
VersionHash string `json:"version_hash,omitempty"`
|
|
}
|
|
|
|
// AuditHeader represents audit metadata for an action.
|
|
type AuditHeader struct {
|
|
ActorID string `json:"actor_id,omitempty"`
|
|
ActorIP string `json:"actor_ip,omitempty"`
|
|
ActorUUID string `json:"actor_uuid,omitempty"`
|
|
ContextURN string `json:"context_urn,omitempty"`
|
|
OriginApplication string `json:"origin_application,omitempty"`
|
|
UserID string `json:"user_id,omitempty"`
|
|
UserUUID string `json:"user_uuid,omitempty"`
|
|
}
|
|
|
|
// RollbackVersionRequest represents the request to rollback a Gen AI Agent to a previous version
|
|
type RollbackVersionRequest struct {
|
|
AgentUuid string `json:"uuid,omitempty"`
|
|
VersionHash string `json:"version_hash,omitempty"`
|
|
}
|
|
|
|
// AgentFunction represents a Gen AI Agent Function
|
|
type AgentFunction struct {
|
|
ApiKey string `json:"api_key,omitempty"`
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
GuardrailUuid string `json:"guardrail_uuid,omitempty"`
|
|
FaasName string `json:"faas_name,omitempty"`
|
|
FaasNamespace string `json:"faas_namespace,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
Url string `json:"url,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
IsDeleted bool `json:"is_deleted,omitempty"`
|
|
}
|
|
|
|
// AgentGuardrail represents a Guardrail attached to Gen AI Agent
|
|
type AgentGuardrail struct {
|
|
AgentUuid string `json:"agent_uuid,omitempty"`
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
DefaultResponse string `json:"default_response,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
GuardrailUuid string `json:"guardrail_uuid,omitempty"`
|
|
IsAttached bool `json:"is_attached,omitempty"`
|
|
IsDefault bool `json:"is_default,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Priority int `json:"priority,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
IsDeleted bool `json:"is_deleted,omitempty"`
|
|
}
|
|
|
|
type ApiKey struct {
|
|
ApiKey string `json:"api_key,omitempty"`
|
|
}
|
|
|
|
// AnthropicApiKeyInfo represents the Anthropic API Key information
|
|
type AnthropicApiKeyInfo struct {
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
CreatedBy string `json:"created_by,omitempty"`
|
|
DeletedAt *Timestamp `json:"deleted_at,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
}
|
|
|
|
// ApiKeyInfo represents the information of an API key
|
|
type ApiKeyInfo struct {
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
CreatedBy string `json:"created_by,omitempty"`
|
|
DeletedAt *Timestamp `json:"deleted_at,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
SecretKey string `json:"secret_key,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
}
|
|
|
|
// OpenAiApiKey represents the OpenAI API Key information
|
|
type OpenAiApiKey struct {
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
CreatedBy string `json:"created_by,omitempty"`
|
|
DeletedAt *Timestamp `json:"deleted_at,omitempty"`
|
|
Models []*Model `json:"models,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
}
|
|
|
|
// AgentVersionUpdateRequest represents the request to update the version of an agent
|
|
type AgentVisibilityUpdateRequest struct {
|
|
Uuid string `json:"uuid,omitempty"`
|
|
Visibility string `json:"visibility,omitempty"`
|
|
}
|
|
|
|
// AgentTemplate represents the template of a Gen AI Agent
|
|
type AgentTemplate struct {
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
Instruction string `json:"instruction,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
K int `json:"k,omitempty"`
|
|
KnowledgeBases []*KnowledgeBase `json:"knowledge_bases,omitempty"`
|
|
MaxTokens int `json:"max_tokens,omitempty"`
|
|
Model *Model `json:"model,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Temperature float64 `json:"temperature,omitempty"`
|
|
TopP float64 `json:"top_p,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
}
|
|
|
|
// KnowledgeBase represents a Gen AI Knowledge Base
|
|
type KnowledgeBase struct {
|
|
AddedToAgentAt *Timestamp `json:"added_to_agent_at,omitempty"`
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
DatabaseId string `json:"database_id,omitempty"`
|
|
EmbeddingModelUuid string `json:"embedding_model_uuid,omitempty"`
|
|
IsPublic bool `json:"is_public,omitempty"`
|
|
LastIndexingJob *LastIndexingJob `json:"last_indexing_job,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
ProjectId string `json:"project_id,omitempty"`
|
|
Region string `json:"region,omitempty"`
|
|
Tags []string `json:"tags,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
UserId string `json:"user_id,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
IsDeleted bool `json:"is_deleted,omitempty"`
|
|
}
|
|
|
|
// LastIndexingJob represents the last indexing job description of a Gen AI Knowledge Base
|
|
type LastIndexingJob struct {
|
|
CompletedDatasources int `json:"completed_datasources,omitempty"`
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
DataSourceUuids []string `json:"data_source_uuids,omitempty"`
|
|
FinishedAt *Timestamp `json:"finished_at,omitempty"`
|
|
KnowledgeBaseUuid string `json:"knowledge_base_uuid,omitempty"`
|
|
Phase string `json:"phase,omitempty"`
|
|
StartedAt *Timestamp `json:"started_at,omitempty"`
|
|
Tokens int `json:"tokens,omitempty"`
|
|
TotalDatasources int `json:"total_datasources,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
}
|
|
|
|
type AgentChatbotIdentifier struct {
|
|
AgentChatbotIdentifier string `json:"agent_chatbot_identifier,omitempty"`
|
|
}
|
|
|
|
// AgentDeployment represents the deployment information of a Gen AI Agent
|
|
type AgentDeployment struct {
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Status string `json:"status,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
Url string `json:"url,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
Visibility string `json:"visibility,omitempty"`
|
|
}
|
|
|
|
// ChatBot represents the chatbot information of a Gen AI Agent
|
|
type ChatBot struct {
|
|
ButtonBackgroundColor string `json:"button_background_color,omitempty"`
|
|
Logo string `json:"logo,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
PrimaryColor string `json:"primary_color,omitempty"`
|
|
SecondaryColor string `json:"secondary_color,omitempty"`
|
|
StartingMessage string `json:"starting_message,omitempty"`
|
|
}
|
|
|
|
// Model represents a Gen AI Model
|
|
type Model struct {
|
|
Agreement *Agreement `json:"agreement,omitempty"`
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
InferenceName string `json:"inference_name,omitempty"`
|
|
InferenceVersion string `json:"inference_version,omitempty"`
|
|
IsFoundational bool `json:"is_foundational,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
ParentUuid string `json:"parent_uuid,omitempty"`
|
|
Provider string `json:"provider,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
UploadComplete bool `json:"upload_complete,omitempty"`
|
|
Url string `json:"url,omitempty"`
|
|
Usecases []string `json:"usecases,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
Version *ModelVersion `json:"version,omitempty"`
|
|
}
|
|
|
|
// Agreement represents the agreement information of a Gen AI Model
|
|
type Agreement struct {
|
|
Description string `json:"description,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Url string `json:"url,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
}
|
|
|
|
type ModelVersion struct {
|
|
Major int `json:"major,omitempty"`
|
|
Minor int `json:"minor,omitempty"`
|
|
Patch int `json:"patch,omitempty"`
|
|
}
|
|
|
|
// AgentCreateRequest represents the request to create a new Gen AI Agent
|
|
type AgentCreateRequest struct {
|
|
AnthropicKeyUuid string `json:"anthropic_key_uuid,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
Instruction string `json:"instruction,omitempty"`
|
|
KnowledgeBaseUuid []string `json:"knowledge_base_uuid,omitempty"`
|
|
ModelUuid string `json:"model_uuid,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
OpenAiKeyUuid string `json:"open_ai_key_uuid,omitempty"`
|
|
ProjectId string `json:"project_id,omitempty"`
|
|
Region string `json:"region,omitempty"`
|
|
Tags []string `json:"tags,omitempty"`
|
|
}
|
|
|
|
// AgentAPIKeyCreateRequest represents the request to create a new Gen AI Agent API Key
|
|
type AgentAPIKeyCreateRequest struct {
|
|
AgentUuid string `json:"agent_uuid,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
}
|
|
|
|
// AgentUpdateRequest represents the request to update an existing Gen AI Agent
|
|
type AgentUpdateRequest struct {
|
|
AnthropicKeyUuid string `json:"anthropic_key_uuid,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
Instruction string `json:"instruction,omitempty"`
|
|
K int `json:"k,omitempty"`
|
|
MaxTokens int `json:"max_tokens,omitempty"`
|
|
ModelUuid string `json:"model_uuid,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
OpenAiKeyUuid string `json:"open_ai_key_uuid,omitempty"`
|
|
ProjectId string `json:"project_id,omitempty"`
|
|
RetrievalMethod string `json:"retrieval_method,omitempty"`
|
|
Region string `json:"region,omitempty"`
|
|
Tags []string `json:"tags,omitempty"`
|
|
Temperature float64 `json:"temperature,omitempty"`
|
|
TopP float64 `json:"top_p,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
ProvideCitations bool `json:"provide_citations,omitempty"`
|
|
}
|
|
|
|
// AgentAPIKeyUpdateRequest represents the request to update an existing Gen AI Agent API Key
|
|
type AgentAPIKeyUpdateRequest struct {
|
|
AgentUuid string `json:"agent_uuid,omitempty"`
|
|
APIKeyUuid string `json:"api_key_uuid,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
}
|
|
|
|
type KnowledgeBaseCreateRequest struct {
|
|
DatabaseID string `json:"database_id"`
|
|
DataSources []KnowledgeBaseDataSource `json:"datasources"`
|
|
EmbeddingModelUuid string `json:"embedding_model_uuid"`
|
|
Name string `json:"name"`
|
|
ProjectID string `json:"project_id"`
|
|
Region string `json:"region"`
|
|
Tags []string `json:"tags"`
|
|
VPCUuid string `json:"vpc_uuid"`
|
|
}
|
|
|
|
// KnowledgeBaseDataSource represents a Gen AI Knowledge Base Data Source
|
|
type KnowledgeBaseDataSource struct {
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
FileUploadDataSource *FileUploadDataSource `json:"file_upload_data_source,omitempty"`
|
|
LastIndexingJob *LastIndexingJob `json:"last_indexing_job,omitempty"`
|
|
SpacesDataSource *SpacesDataSource `json:"spaces_data_source,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
Uuid string `json:"uuid,omitempty"`
|
|
WebCrawlerDataSource *WebCrawlerDataSource `json:"web_crawler_data_source,omitempty"`
|
|
}
|
|
|
|
// WebCrawlerDataSource represents the web crawler data source information
|
|
type WebCrawlerDataSource struct {
|
|
BaseUrl string `json:"base_url,omitempty"`
|
|
CrawlingOption string `json:"crawling_option,omitempty"`
|
|
EmbedMedia bool `json:"embed_media,omitempty"`
|
|
}
|
|
|
|
// SpacesDataSource represents the spaces data source information
|
|
type SpacesDataSource struct {
|
|
BucketName string `json:"bucket_name,omitempty"`
|
|
ItemPath string `json:"item_path,omitempty"`
|
|
Region string `json:"region,omitempty"`
|
|
}
|
|
|
|
// FileUploadDataSource represents the file upload data source information
|
|
type FileUploadDataSource struct {
|
|
OriginalFileName string `json:"original_file_name,omitempty"`
|
|
Size string `json:"size_in_bytes,omitempty"`
|
|
StoredObjectKey string `json:"stored_object_key,omitempty"`
|
|
}
|
|
|
|
type KnowledgeBaseDataSourcesRoot struct {
|
|
KnowledgeBaseDatasources []KnowledgeBaseDataSource `json:"knowledge_base_data_sources"`
|
|
Links *Links `json:"links"`
|
|
Meta *Meta `json:"meta"`
|
|
}
|
|
type SingleKnowledgeBaseDataSourceRoot struct {
|
|
KnowledgeBaseDatasource *KnowledgeBaseDataSource `json:"knowledge_base_data_source"`
|
|
Links *Links `json:"links"`
|
|
Meta *Meta `json:"meta"`
|
|
}
|
|
type knowledgebasesRoot struct {
|
|
KnowledgeBases []KnowledgeBase `json:"knowledge_bases"`
|
|
Links *Links `json:"links"`
|
|
Meta *Meta `json:"meta"`
|
|
}
|
|
|
|
type knowledgebaseRoot struct {
|
|
KnowledgeBase *KnowledgeBase `json:"knowledge_base"`
|
|
DatabaseStatus string `json:"database_status,omitempty"`
|
|
}
|
|
|
|
type DeleteDataSourceRoot struct {
|
|
DataSourceUuid string `json:"data_source_uuid"`
|
|
KnowledgeBaseUuid string `json:"knowledge_base_uuid"`
|
|
}
|
|
|
|
type AgentRouteResponse struct {
|
|
ChildAgentUuid string `json:"child_agent_uuid,omitempty"`
|
|
ParentAgentUuid string `json:"parent_agent_uuid,omitempty"`
|
|
Rollback bool `json:"rollback,omitempty"`
|
|
UUID string `json:"uuid,omitempty"`
|
|
}
|
|
|
|
type DeleteKnowledgeBaseRoot struct {
|
|
KnowledgeBaseUuid string `json:"uuid"`
|
|
}
|
|
|
|
type DeletedKnowledgeBaseResponse struct {
|
|
DataSourceUuid string `json:"data_source_uuid"`
|
|
KnowledgeBaseUuid string `json:"knowledge_base_uuid"`
|
|
}
|
|
|
|
type AddKnowledgeBaseDataSourceRequest struct {
|
|
KnowledgeBaseUuid string `json:"knowledge_base_uuid"`
|
|
SpacesDataSource *SpacesDataSource `json:"spaces_data_source"`
|
|
WebCrawlerDataSource *WebCrawlerDataSource `json:"web_crawler_data_source"`
|
|
}
|
|
|
|
type UpdateKnowledgeBaseRequest struct {
|
|
DatabaseID string `json:"database_id"`
|
|
EmbeddingModelUuid string `json:"embedding_model_uuid"`
|
|
Name string `json:"name"`
|
|
ProjectID string `json:"project_id"`
|
|
Tags []string `json:"tags"`
|
|
KnowledgeBaseUUID string `json:"uuid"`
|
|
}
|
|
|
|
// AgentRouteCreateRequest represents a route between a parent and child agent.
|
|
type AgentRouteCreateRequest struct {
|
|
ChildAgentUuid string `json:"child_agent_uuid,omitempty"`
|
|
IfCase string `json:"if_case,omitempty"`
|
|
ParentAgentUuid string `json:"parent_agent_uuid,omitempty"`
|
|
RouteName string `json:"route_name,omitempty"`
|
|
}
|
|
|
|
// AgentRouteUpdateRequest represents the request to update an existing route between a parent and child agent.
|
|
type AgentRouteUpdateRequest struct {
|
|
ChildAgentUuid string `json:"child_agent_uuid,omitempty"`
|
|
IfCase string `json:"if_case,omitempty"`
|
|
ParentAgentUuid string `json:"parent_agent_uuid,omitempty"`
|
|
RouteName string `json:"route_name,omitempty"`
|
|
UUID string `json:"uuid,omitempty"`
|
|
}
|
|
|
|
type genAIAgentKBRoot struct {
|
|
Agent *Agent `json:"agent"`
|
|
}
|
|
|
|
// ListAgents returns a list of Gen AI Agents
|
|
func (s *GenAIServiceOp) ListAgents(ctx context.Context, opt *ListOptions) ([]*Agent, *Response, error) {
|
|
path, err := addOptions(genAIBasePath, opt)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(genAIAgentsRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
if l := root.Links; l != nil {
|
|
resp.Links = l
|
|
}
|
|
if m := root.Meta; m != nil {
|
|
resp.Meta = m
|
|
}
|
|
return root.Agents, resp, nil
|
|
}
|
|
|
|
// CreateAgent creates a new Gen AI Agent by providing the AgentCreateRequest object
|
|
func (s *GenAIServiceOp) CreateAgent(ctx context.Context, create *AgentCreateRequest) (*Agent, *Response, error) {
|
|
path := genAIBasePath
|
|
if create.ProjectId == "" {
|
|
return nil, nil, fmt.Errorf("Project ID is required")
|
|
}
|
|
if create.Region == "" {
|
|
return nil, nil, fmt.Errorf("Region is required")
|
|
}
|
|
if create.Instruction == "" {
|
|
return nil, nil, fmt.Errorf("Instruction is required")
|
|
}
|
|
if create.ModelUuid == "" {
|
|
return nil, nil, fmt.Errorf("ModelUuid is required")
|
|
}
|
|
if create.Name == "" {
|
|
return nil, nil, fmt.Errorf("Name is required")
|
|
}
|
|
req, err := s.client.NewRequest(ctx, http.MethodPost, path, create)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(genAIAgentRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.Agent, resp, nil
|
|
}
|
|
|
|
// ListAgentAPIKeys retrieves list of API Keys associated with the specified GenAI agent
|
|
func (s *GenAIServiceOp) ListAgentAPIKeys(ctx context.Context, agentId string, opt *ListOptions) ([]*ApiKeyInfo, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s/api_keys", genAIBasePath, agentId)
|
|
req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(agentAPIKeysRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
if l := root.Links; l != nil {
|
|
resp.Links = l
|
|
}
|
|
if m := root.Meta; m != nil {
|
|
resp.Meta = m
|
|
}
|
|
|
|
return root.ApiKeys, resp, nil
|
|
}
|
|
|
|
// CreateAgentAPIKey creates a new API key for the specified GenAI agent
|
|
func (s *GenAIServiceOp) CreateAgentAPIKey(ctx context.Context, agentId string, createRequest *AgentAPIKeyCreateRequest) (*ApiKeyInfo, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s/api_keys", genAIBasePath, agentId)
|
|
|
|
createRequest.AgentUuid = agentId
|
|
|
|
req, err := s.client.NewRequest(ctx, http.MethodPost, path, createRequest)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(agentAPIKeyRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.ApiKey, resp, err
|
|
}
|
|
|
|
// UpdateAgentAPIKey updates an existing API key for the specified GenAI agent
|
|
func (s *GenAIServiceOp) UpdateAgentAPIKey(ctx context.Context, agentId, apiKeyId string, updateRequest *AgentAPIKeyUpdateRequest) (*ApiKeyInfo, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s/api_keys/%s", genAIBasePath, agentId, apiKeyId)
|
|
|
|
updateRequest.AgentUuid = agentId
|
|
|
|
req, err := s.client.NewRequest(ctx, http.MethodPut, path, updateRequest)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(agentAPIKeyRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.ApiKey, resp, nil
|
|
}
|
|
|
|
// DeleteAgentAPIKey deletes an existing API key for the specified GenAI agent
|
|
func (s *GenAIServiceOp) DeleteAgentAPIKey(ctx context.Context, agentId, apiKeyId string) (*ApiKeyInfo, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s/api_keys/%s", genAIBasePath, agentId, apiKeyId)
|
|
|
|
req, err := s.client.NewRequest(ctx, http.MethodDelete, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(agentAPIKeyRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.ApiKey, resp, nil
|
|
}
|
|
|
|
// RegenerateAgentAPIKey regenerates an API key for the specified GenAI agent
|
|
func (s *GenAIServiceOp) RegenerateAgentAPIKey(ctx context.Context, agentId, apiKeyId string) (*ApiKeyInfo, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s/api_keys/%s/regenerate", genAIBasePath, agentId, apiKeyId)
|
|
|
|
req, err := s.client.NewRequest(ctx, http.MethodPut, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(agentAPIKeyRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.ApiKey, resp, nil
|
|
}
|
|
|
|
// GetAgent returns the details of a Gen AI Agent based on the Agent UUID
|
|
func (s *GenAIServiceOp) GetAgent(ctx context.Context, id string) (*Agent, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s", genAIBasePath, id)
|
|
|
|
req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(genAIAgentRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.Agent, resp, nil
|
|
}
|
|
|
|
// UpdateAgent function updates a Gen AI Agent properties for the given UUID
|
|
func (s *GenAIServiceOp) UpdateAgent(ctx context.Context, id string, update *AgentUpdateRequest) (*Agent, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s", genAIBasePath, id)
|
|
req, err := s.client.NewRequest(ctx, http.MethodPut, path, update)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(genAIAgentRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.Agent, resp, nil
|
|
}
|
|
|
|
// DeleteAgent function deletes a Gen AI Agent by its corresponding UUID
|
|
func (s *GenAIServiceOp) DeleteAgent(ctx context.Context, id string) (*Agent, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s", genAIBasePath, id)
|
|
req, err := s.client.NewRequest(ctx, http.MethodDelete, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(genAIAgentRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.Agent, resp, nil
|
|
}
|
|
|
|
// UpdateAgentVisibility function updates a Gen AI Agent status by changing visibility to public or private.
|
|
func (s *GenAIServiceOp) UpdateAgentVisibility(ctx context.Context, id string, update *AgentVisibilityUpdateRequest) (*Agent, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s/deployment_visibility", genAIBasePath, id)
|
|
req, err := s.client.NewRequest(ctx, http.MethodPut, path, update)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(genAIAgentRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.Agent, resp, nil
|
|
}
|
|
|
|
// ListModels function returns a list of Gen AI Models
|
|
func (s *GenAIServiceOp) ListModels(ctx context.Context, opt *ListOptions) ([]*Model, *Response, error) {
|
|
path, err := addOptions(agentModelBasePath, opt)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
root := new(genAIModelsRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
if l := root.Links; l != nil {
|
|
resp.Links = l
|
|
}
|
|
|
|
return root.Models, resp, nil
|
|
}
|
|
|
|
// List all knowledge bases
|
|
func (s *GenAIServiceOp) ListKnowledgeBases(ctx context.Context, opt *ListOptions) ([]KnowledgeBase, *Response, error) {
|
|
|
|
path := KnowledgeBasePath
|
|
path, err := addOptions(path, opt)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(knowledgebasesRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
if l := root.Links; l != nil {
|
|
resp.Links = l
|
|
}
|
|
if m := root.Meta; m != nil {
|
|
resp.Meta = m
|
|
}
|
|
return root.KnowledgeBases, resp, err
|
|
}
|
|
|
|
// Create a knowledge base
|
|
func (s *GenAIServiceOp) CreateKnowledgeBase(ctx context.Context, knowledgeBaseCreate *KnowledgeBaseCreateRequest) (*KnowledgeBase, *Response, error) {
|
|
|
|
path := KnowledgeBasePath
|
|
|
|
if knowledgeBaseCreate.Name == "" {
|
|
return nil, nil, fmt.Errorf("name is required")
|
|
}
|
|
if strings.Contains(knowledgeBaseCreate.Name, " ") {
|
|
return nil, nil, fmt.Errorf("name cannot contain spaces")
|
|
}
|
|
if len(knowledgeBaseCreate.DataSources) == 0 {
|
|
return nil, nil, fmt.Errorf("at least one datasource is required")
|
|
}
|
|
// TODO: Remove this check when additional regions are supported.
|
|
if knowledgeBaseCreate.Region == "" {
|
|
knowledgeBaseCreate.Region = "tor1"
|
|
}
|
|
if knowledgeBaseCreate.Region != "tor1" {
|
|
return nil, nil, fmt.Errorf("currently only region 'tor1' is supported")
|
|
}
|
|
|
|
if knowledgeBaseCreate.EmbeddingModelUuid == "" {
|
|
return nil, nil, fmt.Errorf("EmbeddingModelUuid ID is required")
|
|
}
|
|
if knowledgeBaseCreate.ProjectID == "" {
|
|
return nil, nil, fmt.Errorf("Project ID is required")
|
|
}
|
|
req, err := s.client.NewRequest(ctx, http.MethodPost, path, knowledgeBaseCreate)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
root := new(knowledgebaseRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.KnowledgeBase, resp, err
|
|
}
|
|
|
|
// List Data Sources for a Knowledge Base
|
|
func (s *GenAIServiceOp) ListKnowledgeBaseDataSources(ctx context.Context, knowledgeBaseID string, opt *ListOptions) ([]KnowledgeBaseDataSource, *Response, error) {
|
|
|
|
path := fmt.Sprintf(KnowledgeBaseDataSourcesPath, knowledgeBaseID)
|
|
path, err := addOptions(path, opt)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
root := new(KnowledgeBaseDataSourcesRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
if l := root.Links; l != nil {
|
|
resp.Links = l
|
|
}
|
|
if m := root.Meta; m != nil {
|
|
resp.Meta = m
|
|
}
|
|
return root.KnowledgeBaseDatasources, resp, err
|
|
}
|
|
|
|
// Add Data Source to a Knowledge Base
|
|
func (s *GenAIServiceOp) AddKnowledgeBaseDataSource(ctx context.Context, knowledgeBaseID string, addDataSource *AddKnowledgeBaseDataSourceRequest) (*KnowledgeBaseDataSource, *Response, error) {
|
|
path := fmt.Sprintf(KnowledgeBaseDataSourcesPath, knowledgeBaseID)
|
|
req, err := s.client.NewRequest(ctx, http.MethodPost, path, addDataSource)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
root := new(SingleKnowledgeBaseDataSourceRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
return root.KnowledgeBaseDatasource, resp, err
|
|
}
|
|
|
|
// Deletes data source from a knowledge base
|
|
func (s *GenAIServiceOp) DeleteKnowledgeBaseDataSource(ctx context.Context, knowledgeBaseID string, dataSourceID string) (string, string, *Response, error) {
|
|
|
|
path := fmt.Sprintf(DeleteDataSourcePath, knowledgeBaseID, dataSourceID)
|
|
req, err := s.client.NewRequest(ctx, http.MethodDelete, path, nil)
|
|
|
|
if err != nil {
|
|
return "", "", nil, err
|
|
}
|
|
|
|
root := new(DeleteDataSourceRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return "", "", resp, err
|
|
|
|
}
|
|
return root.KnowledgeBaseUuid, root.DataSourceUuid, resp, nil
|
|
}
|
|
|
|
// Get information about a KnowledgeBase and its Database status
|
|
// Database status can be "CREATING","ONLINE","POWEROFF","REBUILDING","REBALANCING","DECOMMISSIONED","FORKING","MIGRATING","RESIZING","RESTORING","POWERING_ON","UNHEALTHY"
|
|
func (s *GenAIServiceOp) GetKnowledgeBase(ctx context.Context, knowledgeBaseID string) (*KnowledgeBase, string, *Response, error) {
|
|
path := fmt.Sprintf(GetKnowledgeBaseByIDPath, knowledgeBaseID)
|
|
req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
|
|
|
|
if err != nil {
|
|
return nil, "", nil, err
|
|
}
|
|
root := new(knowledgebaseRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
|
|
if err != nil {
|
|
return nil, "", resp, err
|
|
}
|
|
return root.KnowledgeBase, root.DatabaseStatus, resp, nil
|
|
}
|
|
|
|
// Update a knowledge base
|
|
func (s *GenAIServiceOp) UpdateKnowledgeBase(ctx context.Context, knowledgeBaseID string, update *UpdateKnowledgeBaseRequest) (*KnowledgeBase, *Response, error) {
|
|
path := fmt.Sprintf(UpdateKnowledgeBaseByIDPath, knowledgeBaseID)
|
|
req, err := s.client.NewRequest(ctx, http.MethodPut, path, update)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(knowledgebaseRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.KnowledgeBase, resp, nil
|
|
}
|
|
|
|
// Deletes a knowledge base by its corresponding UUID and returns the UUID of the deleted knowledge base
|
|
func (s *GenAIServiceOp) DeleteKnowledgeBase(ctx context.Context, knowledgeBaseID string) (string, *Response, error) {
|
|
|
|
path := fmt.Sprintf(DeleteKnowledgeBaseByIDPath, knowledgeBaseID)
|
|
req, err := s.client.NewRequest(ctx, http.MethodDelete, path, nil)
|
|
fmt.Print(path)
|
|
if err != nil {
|
|
return "", nil, err
|
|
}
|
|
root := new(DeleteKnowledgeBaseRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
|
|
if err != nil {
|
|
return "", resp, err
|
|
}
|
|
return root.KnowledgeBaseUuid, resp, nil
|
|
}
|
|
|
|
// Attach a knowledge base to an agent
|
|
func (s *GenAIServiceOp) AttachKnowledgeBaseToAgent(ctx context.Context, agentID string, knowledgeBaseID string) (*Agent, *Response, error) {
|
|
|
|
path := fmt.Sprintf(AgentKnowledgeBasePath, agentID, knowledgeBaseID)
|
|
req, err := s.client.NewRequest(ctx, http.MethodPost, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(genAIAgentKBRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.Agent, resp, nil
|
|
}
|
|
|
|
// Detach a knowledge base from an agent
|
|
func (s *GenAIServiceOp) DetachKnowledgeBaseToAgent(ctx context.Context, agentID string, knowledgeBaseID string) (*Agent, *Response, error) {
|
|
|
|
path := fmt.Sprintf(AgentKnowledgeBasePath, agentID, knowledgeBaseID)
|
|
|
|
req, err := s.client.NewRequest(ctx, http.MethodDelete, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
root := new(genAIAgentKBRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
return root.Agent, resp, nil
|
|
}
|
|
|
|
// AddAgentRoute function adds a route between a parent and child agent.
|
|
func (s *GenAIServiceOp) AddAgentRoute(ctx context.Context, parentId string, childId string, route *AgentRouteCreateRequest) (*AgentRouteResponse, *Response, error) {
|
|
path := fmt.Sprintf(agentRouteBasePath, parentId, childId)
|
|
req, err := s.client.NewRequest(ctx, http.MethodPost, path, route)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(AgentRouteResponse)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root, resp, nil
|
|
}
|
|
|
|
// UpdateAgentRoute function updates a route between a parent and child agent.
|
|
func (s *GenAIServiceOp) UpdateAgentRoute(ctx context.Context, parentId string, childId string, route *AgentRouteUpdateRequest) (*AgentRouteResponse, *Response, error) {
|
|
path := fmt.Sprintf(agentRouteBasePath, parentId, childId)
|
|
req, err := s.client.NewRequest(ctx, http.MethodPut, path, route)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(AgentRouteResponse)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root, resp, nil
|
|
}
|
|
|
|
// DeleteAgentRoute function deletes a route between a parent and child agent.
|
|
func (s *GenAIServiceOp) DeleteAgentRoute(ctx context.Context, parentId string, childId string) (*AgentRouteResponse, *Response, error) {
|
|
path := fmt.Sprintf(agentRouteBasePath, parentId, childId)
|
|
req, err := s.client.NewRequest(ctx, http.MethodDelete, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(AgentRouteResponse)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root, resp, nil
|
|
}
|
|
|
|
func (s *GenAIServiceOp) ListAgentVersions(ctx context.Context, agentId string, opt *ListOptions) ([]*AgentVersion, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s/versions", genAIBasePath, agentId)
|
|
path, err := addOptions(path, opt)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(agentVersionsRoot)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.AgentVersions, resp, nil
|
|
}
|
|
|
|
func (s *GenAIServiceOp) RollbackAgentVersion(ctx context.Context, agentId string, versionId string) (string, *Response, error) {
|
|
path := fmt.Sprintf("%s/%s/versions", genAIBasePath, agentId)
|
|
req, err := s.client.NewRequest(ctx, http.MethodPut, path, RollbackVersionRequest{
|
|
AgentUuid: agentId,
|
|
VersionHash: versionId,
|
|
})
|
|
if err != nil {
|
|
return "", nil, err
|
|
}
|
|
|
|
root := new(auditResponse)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return "", resp, err
|
|
}
|
|
|
|
return root.VersionHash, resp, nil
|
|
}
|
|
|
|
func (a Agent) String() string {
|
|
return Stringify(a)
|
|
}
|
|
|
|
func (m Model) String() string {
|
|
return Stringify(m)
|
|
}
|
|
|
|
func (a KnowledgeBase) String() string {
|
|
return Stringify(a)
|
|
}
|
|
|
|
func (a KnowledgeBaseDataSource) String() string {
|
|
return Stringify(a)
|
|
}
|
|
|
|
func (a ApiKeyInfo) String() string {
|
|
return Stringify(a)
|
|
}
|
|
|
|
func (a AgentRouteResponse) String() string {
|
|
return Stringify(a)
|
|
}
|
|
|
|
func (a AgentVersion) String() string {
|
|
return Stringify(a)
|
|
}
|