Skip to content

Commit c0b16ac

Browse files
committed
feat: ai-assistants-v1 sdk
1 parent 364e0c7 commit c0b16ac

File tree

9 files changed

+638
-3
lines changed

9 files changed

+638
-3
lines changed

.eslintrc.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
"import/prefer-default-export": "off",
2727
"comma-dangle": ["error", "always-multiline"],
2828
"indent": "off",
29-
"@typescript-eslint/indent": ["error", 4],
3029
"max-len": ["error", 140],
3130
"@typescript-eslint/ban-ts-comment": "off",
3231
"@typescript-eslint/prefer-optional-chain": "error",
@@ -51,6 +50,7 @@
5150
"devDependencies": true
5251
}
5352
],
54-
"import/no-cycle": "off"
53+
"import/no-cycle": "off",
54+
"@typescript-eslint/no-explicit-any": 1
5555
}
5656
}
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
import { Client } from 'nice-grpc';
2+
import { assistantService } from '..';
3+
import { Assistant } from '../generated/yandex/cloud/ai/assistants/v1/assistant';
4+
import {
5+
AssistantServiceService,
6+
CreateAssistantRequest,
7+
DeleteAssistantRequest,
8+
GetAssistantRequest,
9+
ListAssistantsRequest,
10+
ListAssistantVersionsRequest,
11+
UpdateAssistantRequest,
12+
} from '../generated/yandex/cloud/ai/assistants/v1/assistant_service';
13+
import { ClientCallArgs, SessionArg, TypeFromProtoc } from './types';
14+
15+
export type CreateAssistantProps = Omit<
16+
TypeFromProtoc<CreateAssistantRequest, 'folderId'>,
17+
'modelUri'
18+
> & {
19+
modelId: string;
20+
};
21+
22+
export type GetAssistantProps = TypeFromProtoc<GetAssistantRequest, 'assistantId'>;
23+
24+
export type ListAssistantProps = TypeFromProtoc<ListAssistantsRequest, 'folderId'>;
25+
26+
export type DeleteAssistantProps = TypeFromProtoc<DeleteAssistantRequest, 'assistantId'>;
27+
28+
export type ListAssistantVersionsProps = TypeFromProtoc<
29+
ListAssistantVersionsRequest,
30+
'assistantId'
31+
>;
32+
33+
export type UpdateAssistantProps = TypeFromProtoc<UpdateAssistantRequest, 'assistantId'>;
34+
35+
export class AssistantWithSdk {
36+
private assistantSdk: AssistantSdk;
37+
private assistant: Assistant;
38+
39+
constructor(assistantSdk: AssistantSdk, assistant: Assistant) {
40+
this.assistantSdk = assistantSdk;
41+
this.assistant = assistant;
42+
}
43+
44+
get data() {
45+
return this.assistant;
46+
}
47+
48+
private updateData(assistant: Assistant) {
49+
this.assistant = assistant;
50+
return this;
51+
}
52+
53+
delete(params: Omit<DeleteAssistantProps, 'assistantId'>, args?: ClientCallArgs) {
54+
const p = this.assistantSdk.delete({ ...params, assistantId: this.assistant.id }, args);
55+
return p;
56+
}
57+
58+
update(params: Omit<UpdateAssistantProps, 'assistantId'>, args?: ClientCallArgs) {
59+
const p = this.assistantSdk.update({ ...params, assistantId: this.assistant.id }, args);
60+
return p.then(this.updateData.bind(this));
61+
}
62+
}
63+
64+
export class AssistantSdk {
65+
private assistantClient: Client<typeof AssistantServiceService, ClientCallArgs>;
66+
67+
constructor(session: SessionArg) {
68+
this.assistantClient = session.client(assistantService.AssistantServiceClient);
69+
}
70+
71+
private static _withSdk(this: AssistantSdk, assistantP: Promise<Assistant>) {
72+
async function withSdk(this: AssistantSdk) {
73+
const assistant = await assistantP;
74+
return new AssistantWithSdk(this, assistant);
75+
}
76+
77+
return Object.assign(assistantP, { withSdk: withSdk.bind(this) });
78+
}
79+
80+
create(params: CreateAssistantProps, args?: ClientCallArgs) {
81+
const { modelId, ...restParams } = params;
82+
83+
const p = this.assistantClient.create(
84+
assistantService.CreateAssistantRequest.fromPartial({
85+
...restParams,
86+
modelUri: `gpt://${params.folderId}/${modelId}`,
87+
}),
88+
args,
89+
);
90+
91+
return AssistantSdk._withSdk.call(this, p);
92+
}
93+
94+
get(params: GetAssistantProps, args?: ClientCallArgs) {
95+
const p = this.assistantClient.get(
96+
assistantService.GetAssistantRequest.fromPartial(params),
97+
args,
98+
);
99+
return AssistantSdk._withSdk.call(this, p);
100+
}
101+
102+
list(params: ListAssistantProps, args?: ClientCallArgs) {
103+
const p = this.assistantClient.list(
104+
assistantService.ListAssistantsRequest.fromPartial(params),
105+
args,
106+
);
107+
108+
return p;
109+
}
110+
111+
delete(params: DeleteAssistantProps, args?: ClientCallArgs) {
112+
const p = this.assistantClient.delete(
113+
assistantService.DeleteAssistantRequest.fromPartial(params),
114+
args,
115+
);
116+
return p;
117+
}
118+
119+
listVersions(params: ListAssistantVersionsProps, args?: ClientCallArgs) {
120+
const p = this.assistantClient.listVersions(
121+
assistantService.ListAssistantVersionsRequest.fromPartial(params),
122+
args,
123+
);
124+
return p;
125+
}
126+
127+
update(params: UpdateAssistantProps, args?: ClientCallArgs) {
128+
const p = this.assistantClient.update(
129+
assistantService.UpdateAssistantRequest.fromPartial(params),
130+
args,
131+
);
132+
133+
return AssistantSdk._withSdk.call(this, p);
134+
}
135+
}
136+
137+
export const initAssistantSdk = (session: SessionArg) => {
138+
return new AssistantSdk(session);
139+
};
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export * from './assistantSdk';
2+
export * from './messageSdk';
3+
export * from './runSdk';
4+
export * from './threadSdk';
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import { messageService } from '..';
2+
import { MessageContent } from '../generated/yandex/cloud/ai/assistants/v1/threads/message';
3+
import {
4+
CreateMessageRequest,
5+
GetMessageRequest,
6+
ListMessagesRequest,
7+
MessageServiceService,
8+
} from '../generated/yandex/cloud/ai/assistants/v1/threads/message_service';
9+
import { ClientCallArgs, SessionArg, TypeFromProtoc } from './types';
10+
import { Client } from 'nice-grpc';
11+
12+
export type SendMessageProps = TypeFromProtoc<CreateMessageRequest, 'threadId'>;
13+
14+
export type GetMessageProps = TypeFromProtoc<GetMessageRequest, 'threadId' | 'messageId'>;
15+
16+
export type ListMessagesProps = TypeFromProtoc<ListMessagesRequest, 'threadId'>;
17+
18+
export class MessageSdk {
19+
private messageClient: Client<typeof MessageServiceService, ClientCallArgs>;
20+
21+
constructor(session: SessionArg) {
22+
this.messageClient = session.client(messageService.MessageServiceClient);
23+
}
24+
25+
public static getMessageContent(...args: string[]): TypeFromProtoc<MessageContent> {
26+
return { content: args.map((content) => ({ text: { content } })) };
27+
}
28+
29+
public static messageContentToString(messageContent?: MessageContent): string {
30+
return (
31+
messageContent?.content.reduce((res, { text }) => {
32+
if (text?.content) {
33+
res += text.content;
34+
}
35+
36+
return res;
37+
}, '') ?? ''
38+
);
39+
}
40+
41+
public send(params: SendMessageProps, args?: ClientCallArgs) {
42+
const p = this.messageClient.create(
43+
messageService.CreateMessageRequest.fromPartial(params),
44+
args,
45+
);
46+
47+
return p;
48+
}
49+
50+
get(params: GetMessageProps, args?: ClientCallArgs) {
51+
const p = this.messageClient.get(
52+
messageService.GetMessageRequest.fromPartial(params),
53+
args,
54+
);
55+
56+
return p;
57+
}
58+
59+
list(params: ListMessagesProps, args?: ClientCallArgs) {
60+
const p = this.messageClient.list(
61+
messageService.ListMessagesRequest.fromPartial(params),
62+
args,
63+
);
64+
65+
return p;
66+
}
67+
}
68+
69+
export const initMessageSdk = (session: SessionArg) => {
70+
return new MessageSdk(session);
71+
};
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import { ClientCallArgs, SessionArg, TypeFromProtoc } from './types';
2+
3+
import {
4+
CreateRunRequest,
5+
GetLastRunByThreadRequest,
6+
GetRunRequest,
7+
ListenRunRequest,
8+
ListRunsRequest,
9+
RunServiceService,
10+
} from '../generated/yandex/cloud/ai/assistants/v1/runs/run_service';
11+
import { Run } from '../generated/yandex/cloud/ai/assistants/v1/runs/run';
12+
import { CallOptions } from '@grpc/grpc-js';
13+
import { runService } from '..';
14+
import { Client } from 'nice-grpc';
15+
16+
export type GetRunProps = TypeFromProtoc<GetRunRequest, 'runId'>;
17+
18+
export type CreateRunProps = TypeFromProtoc<CreateRunRequest, 'threadId' | 'assistantId'>;
19+
20+
export type GetLastRunByThreadProps = TypeFromProtoc<GetLastRunByThreadRequest, 'threadId'>;
21+
22+
export type ListRunsProps = TypeFromProtoc<ListRunsRequest, 'folderId'>;
23+
24+
export type ListenRunProps = TypeFromProtoc<ListenRunRequest, 'runId'>;
25+
26+
type RunClientType = Client<typeof RunServiceService, ClientCallArgs>;
27+
28+
export class RunWithSdk {
29+
private runSdk: RunSdk;
30+
private run: Run;
31+
32+
constructor(runSdk: RunSdk, run: Run) {
33+
this.runSdk = runSdk;
34+
this.run = run;
35+
}
36+
37+
get data() {
38+
return this.run;
39+
}
40+
41+
listen(params: Omit<ListenRunProps, 'runId'>, args?: ClientCallArgs & CallOptions) {
42+
return this.runSdk.listen({ ...params, runId: this.run.id }, args);
43+
}
44+
}
45+
46+
export class RunSdk {
47+
private runClient: RunClientType;
48+
49+
constructor(session: SessionArg) {
50+
this.runClient = session.client(runService.RunServiceClient);
51+
}
52+
53+
private static _withSdk(this: RunSdk, runP: Promise<Run>) {
54+
async function withSdk(this: RunSdk) {
55+
const run = await runP;
56+
return new RunWithSdk(this, run);
57+
}
58+
59+
return Object.assign(runP, { withSdk: withSdk.bind(this) });
60+
}
61+
62+
create(params: CreateRunProps, args?: ClientCallArgs) {
63+
const p = this.runClient.create(runService.CreateRunRequest.fromPartial(params), args);
64+
return RunSdk._withSdk.call(this, p);
65+
}
66+
67+
get(params: GetRunProps, args?: ClientCallArgs) {
68+
const p = this.runClient.get(runService.GetRunRequest.fromPartial(params), args);
69+
return RunSdk._withSdk.call(this, p);
70+
}
71+
72+
getLastByThread(params: GetLastRunByThreadProps, args?: ClientCallArgs) {
73+
const p = this.runClient.getLastByThread(
74+
runService.GetLastRunByThreadRequest.fromPartial(params),
75+
args,
76+
);
77+
return RunSdk._withSdk.call(this, p);
78+
}
79+
80+
list(params: ListRunsProps, args?: ClientCallArgs) {
81+
const p = this.runClient.list(runService.ListRunsRequest.fromPartial(params), args);
82+
return p;
83+
}
84+
85+
listen(params: ListenRunProps, args?: ClientCallArgs & CallOptions) {
86+
return this.runClient.listen(runService.ListenRunRequest.fromPartial(params), args);
87+
}
88+
}
89+
90+
export const initRunSdk = (session: SessionArg) => {
91+
return new RunSdk(session);
92+
};

0 commit comments

Comments
 (0)