Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .stats.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
configured_endpoints: 16
configured_endpoints: 18
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/writerai%2Fwriter-5d34056e0e749d39a81c92ed4fb221da6ac627cff4cb9edcb6b054fa00abb335.yml
4 changes: 4 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ Types:
- <code><a href="./src/resources/graphs.ts">GraphCreateResponse</a></code>
- <code><a href="./src/resources/graphs.ts">GraphUpdateResponse</a></code>
- <code><a href="./src/resources/graphs.ts">GraphDeleteResponse</a></code>
- <code><a href="./src/resources/graphs.ts">GraphQuestionResponse</a></code>
- <code><a href="./src/resources/graphs.ts">GraphRemoveFileFromGraphResponse</a></code>

Methods:
Expand All @@ -58,6 +59,7 @@ Methods:
- <code title="get /v1/graphs">client.graphs.<a href="./src/resources/graphs.ts">list</a>({ ...params }) -> GraphsCursorPage</code>
- <code title="delete /v1/graphs/{graph_id}">client.graphs.<a href="./src/resources/graphs.ts">delete</a>(graphId) -> GraphDeleteResponse</code>
- <code title="post /v1/graphs/{graph_id}/file">client.graphs.<a href="./src/resources/graphs.ts">addFileToGraph</a>(graphId, { ...params }) -> File</code>
- <code title="post /v1/graphs/question">client.graphs.<a href="./src/resources/graphs.ts">question</a>({ ...params }) -> GraphQuestionResponse</code>
- <code title="delete /v1/graphs/{graph_id}/file/{file_id}">client.graphs.<a href="./src/resources/graphs.ts">removeFileFromGraph</a>(graphId, fileId) -> GraphRemoveFileFromGraphResponse</code>

# Files
Expand All @@ -66,11 +68,13 @@ Types:

- <code><a href="./src/resources/files.ts">File</a></code>
- <code><a href="./src/resources/files.ts">FileDeleteResponse</a></code>
- <code><a href="./src/resources/files.ts">FileRetryResponse</a></code>

Methods:

- <code title="get /v1/files/{file_id}">client.files.<a href="./src/resources/files.ts">retrieve</a>(fileId) -> File</code>
- <code title="get /v1/files">client.files.<a href="./src/resources/files.ts">list</a>({ ...params }) -> FilesCursorPage</code>
- <code title="delete /v1/files/{file_id}">client.files.<a href="./src/resources/files.ts">delete</a>(fileId) -> FileDeleteResponse</code>
- <code title="get /v1/files/{file_id}/download">client.files.<a href="./src/resources/files.ts">download</a>(fileId) -> Response</code>
- <code title="post /v1/files/retry">client.files.<a href="./src/resources/files.ts">retry</a>({ ...params }) -> unknown</code>
- <code title="post /v1/files">client.files.<a href="./src/resources/files.ts">upload</a>({ ...params }) -> File</code>
4 changes: 4 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,18 +215,22 @@ export namespace Writer {
export import GraphCreateResponse = API.GraphCreateResponse;
export import GraphUpdateResponse = API.GraphUpdateResponse;
export import GraphDeleteResponse = API.GraphDeleteResponse;
export import GraphQuestionResponse = API.GraphQuestionResponse;
export import GraphRemoveFileFromGraphResponse = API.GraphRemoveFileFromGraphResponse;
export import GraphsCursorPage = API.GraphsCursorPage;
export import GraphCreateParams = API.GraphCreateParams;
export import GraphUpdateParams = API.GraphUpdateParams;
export import GraphListParams = API.GraphListParams;
export import GraphAddFileToGraphParams = API.GraphAddFileToGraphParams;
export import GraphQuestionParams = API.GraphQuestionParams;

export import Files = API.Files;
export import File = API.File;
export import FileDeleteResponse = API.FileDeleteResponse;
export import FileRetryResponse = API.FileRetryResponse;
export import FilesCursorPage = API.FilesCursorPage;
export import FileListParams = API.FileListParams;
export import FileRetryParams = API.FileRetryParams;
export import FileUploadParams = API.FileUploadParams;
}

Expand Down
18 changes: 18 additions & 0 deletions src/resources/files.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,13 @@ export class Files extends APIResource {
return this._client.get(`/v1/files/${fileId}/download`, { ...options, __binaryResponse: true });
}

/**
* Retry failed files
*/
retry(body: FileRetryParams, options?: Core.RequestOptions): Core.APIPromise<unknown> {
return this._client.post('/v1/files/retry', { body, ...options });
}

/**
* Upload file
*/
Expand Down Expand Up @@ -103,6 +110,8 @@ export interface FileDeleteResponse {
deleted: boolean;
}

export type FileRetryResponse = unknown;

export interface FileListParams extends CursorPageParams {
/**
* The unique identifier of the graph to which the files belong.
Expand All @@ -128,6 +137,13 @@ export interface FileListParams extends CursorPageParams {
status?: 'in_progress' | 'completed' | 'failed';
}

export interface FileRetryParams {
/**
* The unique identifier of the files to be retried.
*/
file_ids: Array<string>;
}

export interface FileUploadParams {
/**
* Body param:
Expand All @@ -145,7 +161,9 @@ export interface FileUploadParams {
export namespace Files {
export import File = FilesAPI.File;
export import FileDeleteResponse = FilesAPI.FileDeleteResponse;
export import FileRetryResponse = FilesAPI.FileRetryResponse;
export import FilesCursorPage = FilesAPI.FilesCursorPage;
export import FileListParams = FilesAPI.FileListParams;
export import FileRetryParams = FilesAPI.FileRetryParams;
export import FileUploadParams = FilesAPI.FileUploadParams;
}
91 changes: 91 additions & 0 deletions src/resources/graphs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,13 @@ export class Graphs extends APIResource {
return this._client.post(`/v1/graphs/${graphId}/file`, { body, ...options });
}

/**
* Knowledge Graph question
*/
question(body: GraphQuestionParams, options?: Core.RequestOptions): Core.APIPromise<GraphQuestionResponse> {
return this._client.post('/v1/graphs/question', { body, ...options });
}

/**
* Remove file from graph
*/
Expand Down Expand Up @@ -184,6 +191,64 @@ export interface GraphDeleteResponse {
deleted: boolean;
}

export interface GraphQuestionResponse {
/**
* The answer to the question.
*/
answer: string;

/**
* The question that was asked.
*/
question: string;

sources: Array<GraphQuestionResponse.Source>;

subqueries?: Array<GraphQuestionResponse.Subquery>;
}

export namespace GraphQuestionResponse {
export interface Source {
/**
* The unique identifier of the file.
*/
file_id: string;

/**
* A snippet of text from the source file.
*/
snippet: string;
}

export interface Subquery {
/**
* The answer to the subquery.
*/
answer: string;

/**
* The subquery that was asked.
*/
query: string;

sources: Array<Subquery.Source>;
}

export namespace Subquery {
export interface Source {
/**
* The unique identifier of the file.
*/
file_id: string;

/**
* A snippet of text from the source file.
*/
snippet: string;
}
}
}

export interface GraphRemoveFileFromGraphResponse {
/**
* A unique identifier of the deleted file.
Expand Down Expand Up @@ -241,15 +306,41 @@ export interface GraphAddFileToGraphParams {
file_id: string;
}

export interface GraphQuestionParams {
/**
* The unique identifiers of the Knowledge Graphs to be queried.
*/
graph_ids: Array<string>;

/**
* The question to be answered using the Knowledge Graph.
*/
question: string;

/**
* Determines whether the model's output should be streamed. If true, the output is
* generated and sent incrementally, which can be useful for real-time
* applications.
*/
stream: boolean;

/**
* Specify whether to include subqueries.
*/
subqueries: boolean;
}

export namespace Graphs {
export import Graph = GraphsAPI.Graph;
export import GraphCreateResponse = GraphsAPI.GraphCreateResponse;
export import GraphUpdateResponse = GraphsAPI.GraphUpdateResponse;
export import GraphDeleteResponse = GraphsAPI.GraphDeleteResponse;
export import GraphQuestionResponse = GraphsAPI.GraphQuestionResponse;
export import GraphRemoveFileFromGraphResponse = GraphsAPI.GraphRemoveFileFromGraphResponse;
export import GraphsCursorPage = GraphsAPI.GraphsCursorPage;
export import GraphCreateParams = GraphsAPI.GraphCreateParams;
export import GraphUpdateParams = GraphsAPI.GraphUpdateParams;
export import GraphListParams = GraphsAPI.GraphListParams;
export import GraphAddFileToGraphParams = GraphsAPI.GraphAddFileToGraphParams;
export import GraphQuestionParams = GraphsAPI.GraphQuestionParams;
}
13 changes: 12 additions & 1 deletion src/resources/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,28 @@ export {
CompletionCreateParamsStreaming,
Completions,
} from './completions';
export { File, FileDeleteResponse, FileListParams, FileUploadParams, FilesCursorPage, Files } from './files';
export {
File,
FileDeleteResponse,
FileRetryResponse,
FileListParams,
FileRetryParams,
FileUploadParams,
FilesCursorPage,
Files,
} from './files';
export {
Graph,
GraphCreateResponse,
GraphUpdateResponse,
GraphDeleteResponse,
GraphQuestionResponse,
GraphRemoveFileFromGraphResponse,
GraphCreateParams,
GraphUpdateParams,
GraphListParams,
GraphAddFileToGraphParams,
GraphQuestionParams,
GraphsCursorPage,
Graphs,
} from './graphs';
Expand Down
27 changes: 27 additions & 0 deletions tests/api-resources/files.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,33 @@ describe('resource files', () => {
);
});

test('retry: only required params', async () => {
const responsePromise = client.files.retry({
file_ids: [
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
],
});
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
expect(response).not.toBeInstanceOf(Response);
const dataAndResponse = await responsePromise.withResponse();
expect(dataAndResponse.data).toBe(response);
expect(dataAndResponse.response).toBe(rawResponse);
});

test('retry: required and optional params', async () => {
const response = await client.files.retry({
file_ids: [
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
],
});
});

// requests with binary data not yet supported in test environment
test.skip('upload: only required params', async () => {
const responsePromise = client.files.upload({
Expand Down
25 changes: 25 additions & 0 deletions tests/api-resources/graphs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,31 @@ describe('resource graphs', () => {
});
});

test('question: only required params', async () => {
const responsePromise = client.graphs.question({
graph_ids: ['182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e'],
question: 'question',
stream: true,
subqueries: true,
});
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
expect(response).not.toBeInstanceOf(Response);
const dataAndResponse = await responsePromise.withResponse();
expect(dataAndResponse.data).toBe(response);
expect(dataAndResponse.response).toBe(rawResponse);
});

test('question: required and optional params', async () => {
const response = await client.graphs.question({
graph_ids: ['182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e'],
question: 'question',
stream: true,
subqueries: true,
});
});

test('removeFileFromGraph', async () => {
const responsePromise = client.graphs.removeFileFromGraph(
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
Expand Down