@stack-spot/portal-network 0.146.2 → 0.147.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,10 @@
1
1
  import { HttpError } from '@oazapfts/runtime'
2
- import { defaults, getPublicToolKitsV1BuiltinToolkitGet, HttpValidationError } from '../api/agent-tools'
2
+ import { createToolkitToolsV1ToolkitsToolkitIdToolsPost, createToolkitV1ToolkitsPost, defaults, deleteToolkitToolsV1ToolkitsToolkitIdToolsDelete, deleteToolkitV1ToolkitsToolkitIdDelete, editToolkitToolV1ToolkitsToolkitIdToolsToolIdPut, getPublicToolKitsV1BuiltinToolkitGet, getToolkitToolV1ToolkitsToolkitIdToolsToolIdGet, getToolkitV1ToolkitsToolkitIdGet, HttpValidationError, listToolkitsV1ToolkitsGet, updateToolkitV1ToolkitsToolkitIdPatch } from '../api/agent-tools'
3
3
  import apis from '../apis.json'
4
4
  import { StackspotAPIError } from '../error/StackspotAPIError'
5
5
  import { ReactQueryNetworkClient } from '../network/ReactQueryNetworkClient'
6
+ import { removeAuthorizationParam } from '../utils/remove-authorization-param'
7
+ import { AgentToolsOpenAPIPreview } from './types'
6
8
 
7
9
  class AgentToolsClient extends ReactQueryNetworkClient {
8
10
  constructor() {
@@ -14,11 +16,66 @@ class AgentToolsClient extends ReactQueryNetworkClient {
14
16
  status: error.status,
15
17
  headers: error.headers,
16
18
  stack: error.stack,
17
- message: (error.data as HttpValidationError | undefined)?.detail?.map(d => d.msg)?.join('\n'),
19
+ // @ts-ignore API documentation is wrong
20
+ message: (error.data as HttpValidationError | undefined)?.details?.map(d => d.msg)?.join('\n'),
18
21
  })
19
22
  }
20
23
 
21
24
  tools = this.query(getPublicToolKitsV1BuiltinToolkitGet)
25
+
26
+ /**
27
+ * Get list of Toolkits
28
+ */
29
+ toolkits = this.query(removeAuthorizationParam(listToolkitsV1ToolkitsGet))
30
+ /**
31
+ * Get a toolkit by Id
32
+ */
33
+ toolkitById = this.query(removeAuthorizationParam(getToolkitV1ToolkitsToolkitIdGet))
34
+ /**
35
+ * Create a toolkit
36
+ */
37
+ createToolkit = this.mutation(removeAuthorizationParam(createToolkitV1ToolkitsPost))
38
+ /**
39
+ * Update a toolkit
40
+ */
41
+ updateToolkit = this.mutation(removeAuthorizationParam(updateToolkitV1ToolkitsToolkitIdPatch))
42
+ /**
43
+ * Delete a toolkit
44
+ */
45
+ deleteToolkit = this.mutation(removeAuthorizationParam(deleteToolkitV1ToolkitsToolkitIdDelete))
46
+ /**
47
+ * Get Tool from Toolkit
48
+ */
49
+ toolFromToolkit = this.query(removeAuthorizationParam(getToolkitToolV1ToolkitsToolkitIdToolsToolIdGet))
50
+ /**
51
+ * Add tool on Toolkit
52
+ */
53
+ addToolOnToolkit = this.mutation(removeAuthorizationParam(createToolkitToolsV1ToolkitsToolkitIdToolsPost))
54
+ /**
55
+ * Edit tool on Toolkit
56
+ */
57
+ editToolOnToolkit = this.mutation(removeAuthorizationParam(editToolkitToolV1ToolkitsToolkitIdToolsToolIdPut))
58
+ /**
59
+ * Delete tool from Toolkit
60
+ */
61
+ deleteToolFromToolkit = this.mutation(removeAuthorizationParam(deleteToolkitToolsV1ToolkitsToolkitIdToolsDelete))
62
+ /**
63
+ * Previews an uploaded open api file.
64
+ */
65
+ previewUploadedAPI = this.query({
66
+ name: 'previewUploadedAPI',
67
+ request: async (signal, params: { fileUploadId: string }) => {
68
+ const url = `/v1/toolkits/tools/preview/${encodeURIComponent(params.fileUploadId)}`
69
+ const events = await this.stream(url, { signal })
70
+ const result: AgentToolsOpenAPIPreview[] = []
71
+ for await (const event of events) {
72
+ if (event.data) {
73
+ result.push(JSON.parse(event.data))
74
+ }
75
+ }
76
+ return result
77
+ },
78
+ })
22
79
  }
23
80
 
24
81
  export const agentToolsClient = new AgentToolsClient()
@@ -9,6 +9,7 @@ import {
9
9
  listKsV1KnowledgeSourcesGet,
10
10
  saveChunkedFilesDeprecatedV1FileUploadFileUploadIdPost,
11
11
  saveChunkedFilesV1FileUploadFileUploadIdKnowledgeObjectsPost,
12
+ splitUploadedFilePreviewV1FileUploadFileUploadIdSplitPreviewSplitStrategyGet,
12
13
  splitUploadedFileV1FileUploadFileUploadIdSplitPost,
13
14
  } from '../api/dataIntegration'
14
15
  import apis from '../apis.json'
@@ -65,7 +66,12 @@ class DataIntegrationClient extends ReactQueryNetworkClient {
65
66
  'Accept': 'text/event-stream',
66
67
  },
67
68
  signal: options?.signal,
68
- })}
69
+ })
70
+ }
71
+ /**
72
+ * Generate a preview with splitted objects
73
+ */
74
+ previewFromSplit = this.query(removeAuthorizationParam(splitUploadedFilePreviewV1FileUploadFileUploadIdSplitPreviewSplitStrategyGet))
69
75
  /**
70
76
  * List of knowledge sources
71
77
  */
@@ -81,24 +87,26 @@ class DataIntegrationClient extends ReactQueryNetworkClient {
81
87
 
82
88
  uploadFiles = this.mutation({
83
89
  name: 'uploadFiles',
84
- request: (abortSignal, params: { files: File[], type: FileUploadType }) => Promise.all(params.files.map(async (f) => {
85
- try {
86
- const { id, url, form } = await getUploadFormV2V2FileUploadFormPost({
87
- authorization: '',
88
- newFileUploadRequest: { file_name: f.name, target_type: params.type, target_id: '' },
89
- }, { signal: abortSignal })
90
- const formData = new FormData()
91
- Object.entries(form).forEach(([key, value]) => {
92
- formData.append(key, value)
93
- })
94
- formData.append('file', f)
95
- const response = await fetch(url, { method: 'post', body: formData, signal: abortSignal })
96
- if (!response.ok) throw new StackspotAPIError({ status: response.status, headers: response.headers, message: 'Failed to upload' })
97
- return id
98
- } catch (e: any) {
99
- throw new FileUploadError(f.name, e)
100
- }
101
- })),
90
+ request: (abortSignal, params: { files: File[], type: FileUploadType, targetId?: string }) => (
91
+ Promise.all(params.files.map(async (f) => {
92
+ try {
93
+ const { id, url, form } = await getUploadFormV2V2FileUploadFormPost({
94
+ authorization: '',
95
+ newFileUploadRequest: { file_name: f.name, target_type: params.type, target_id: params.targetId ?? '' },
96
+ }, { signal: abortSignal })
97
+ const formData = new FormData()
98
+ Object.entries(form).forEach(([key, value]) => {
99
+ formData.append(key, value)
100
+ })
101
+ formData.append('file', f)
102
+ const response = await fetch(url, { method: 'post', body: formData, signal: abortSignal })
103
+ if (!response.ok) throw new StackspotAPIError({ status: response.status, headers: response.headers, message: 'Failed to upload' })
104
+ return id
105
+ } catch (e: any) {
106
+ throw new FileUploadError(f.name, e)
107
+ }
108
+ }))
109
+ ),
102
110
  })
103
111
  }
104
112
 
@@ -1,6 +1,7 @@
1
1
  import { RequestOpts } from '@oazapfts/runtime'
2
2
  import { AccountScmInfoSaveRequest, AccountScmInfoUpdateRequest, AccountScmStatusResponse, GroupsFromResourceResponse, MembersFromResourceResponse } from '../api/account'
3
3
  import { AgentResponse, VisibilityLevel } from '../api/agent'
4
+ import { HttpMethod } from '../api/agent-tools'
4
5
  import { ChatRequest, ChatResponse3, ContentDependencyResponse, ConversationHistoryResponse, ConversationResponse, DependencyResponse } from '../api/ai'
5
6
  import { ConnectAccountRequestV2, ManagedAccountProvisionRequest } from '../api/cloudAccount'
6
7
  import { AllocationCostRequest, AllocationCostResponse, ChargePeriod, getAllocationCostFilters, ManagedService, ServiceResource } from '../api/cloudServices'
@@ -363,3 +364,12 @@ export interface AgentResponseWithBuiltIn extends AgentResponse {
363
364
  }
364
365
 
365
366
  export type AgentVisibilityLevel = VisibilityLevel | 'BUILT-IN' | 'ALL'
367
+
368
+ export interface AgentToolsOpenAPIPreview {
369
+ name: string,
370
+ description: string,
371
+ method: HttpMethod,
372
+ url: string,
373
+ parameters?: Record<string, any>,
374
+ request_body?: Record<string, any>,
375
+ }
@@ -92,8 +92,8 @@ export class StreamedJson<T> {
92
92
  else if (typeof source[k] === 'string') target[k] += source[k]
93
93
  else if (Array.isArray(source[k])) target[k].push(...source[k])
94
94
  else if (typeof source[k] === 'number') parseFloat(target[k] + source[k])
95
- else if (typeof source[k] === 'object') this.merge(source[k], target[k])
96
- else target[k] = source[k]
95
+ else if (source[k] && typeof source[k] === 'object') this.merge(source[k], target[k])
96
+ else if (source[k]) target[k] = source[k]
97
97
  })
98
98
  }
99
99