@cogitator-ai/openai-compat 0.1.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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +78 -0
  3. package/dist/client/openai-adapter.d.ts +107 -0
  4. package/dist/client/openai-adapter.d.ts.map +1 -0
  5. package/dist/client/openai-adapter.js +265 -0
  6. package/dist/client/openai-adapter.js.map +1 -0
  7. package/dist/client/thread-manager.d.ts +80 -0
  8. package/dist/client/thread-manager.d.ts.map +1 -0
  9. package/dist/client/thread-manager.js +213 -0
  10. package/dist/client/thread-manager.js.map +1 -0
  11. package/dist/index.d.ts +12 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +11 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/server/api-server.d.ts +85 -0
  16. package/dist/server/api-server.d.ts.map +1 -0
  17. package/dist/server/api-server.js +162 -0
  18. package/dist/server/api-server.js.map +1 -0
  19. package/dist/server/middleware/auth.d.ts +17 -0
  20. package/dist/server/middleware/auth.d.ts.map +1 -0
  21. package/dist/server/middleware/auth.js +46 -0
  22. package/dist/server/middleware/auth.js.map +1 -0
  23. package/dist/server/middleware/error-handler.d.ts +20 -0
  24. package/dist/server/middleware/error-handler.d.ts.map +1 -0
  25. package/dist/server/middleware/error-handler.js +55 -0
  26. package/dist/server/middleware/error-handler.js.map +1 -0
  27. package/dist/server/routes/assistants.d.ts +9 -0
  28. package/dist/server/routes/assistants.d.ts.map +1 -0
  29. package/dist/server/routes/assistants.js +88 -0
  30. package/dist/server/routes/assistants.js.map +1 -0
  31. package/dist/server/routes/files.d.ts +9 -0
  32. package/dist/server/routes/files.d.ts.map +1 -0
  33. package/dist/server/routes/files.js +110 -0
  34. package/dist/server/routes/files.js.map +1 -0
  35. package/dist/server/routes/runs.d.ts +9 -0
  36. package/dist/server/routes/runs.d.ts.map +1 -0
  37. package/dist/server/routes/runs.js +150 -0
  38. package/dist/server/routes/runs.js.map +1 -0
  39. package/dist/server/routes/threads.d.ts +9 -0
  40. package/dist/server/routes/threads.d.ts.map +1 -0
  41. package/dist/server/routes/threads.js +149 -0
  42. package/dist/server/routes/threads.js.map +1 -0
  43. package/dist/types/openai-types.d.ts +489 -0
  44. package/dist/types/openai-types.d.ts.map +1 -0
  45. package/dist/types/openai-types.js +7 -0
  46. package/dist/types/openai-types.js.map +1 -0
  47. package/package.json +56 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Cogitator Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,78 @@
1
+ # @cogitator-ai/openai-compat
2
+
3
+ OpenAI Assistants API compatibility layer for Cogitator. Use OpenAI SDK clients with Cogitator backend.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pnpm add @cogitator-ai/openai-compat
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### Start the Server
14
+
15
+ ```typescript
16
+ import { createOpenAIServer } from '@cogitator-ai/openai-compat';
17
+ import { Cogitator } from '@cogitator-ai/core';
18
+
19
+ const cogitator = new Cogitator();
20
+ const server = createOpenAIServer(cogitator, {
21
+ port: 3001,
22
+ apiKey: 'your-api-key', // Optional auth
23
+ });
24
+
25
+ await server.start();
26
+ ```
27
+
28
+ ### Use with OpenAI SDK
29
+
30
+ ```typescript
31
+ import OpenAI from 'openai';
32
+
33
+ const openai = new OpenAI({
34
+ baseURL: 'http://localhost:3001/v1',
35
+ apiKey: 'your-api-key',
36
+ });
37
+
38
+ // Create an assistant
39
+ const assistant = await openai.beta.assistants.create({
40
+ name: 'My Assistant',
41
+ instructions: 'You are a helpful assistant',
42
+ model: 'ollama/llama3.2:3b',
43
+ });
44
+
45
+ // Create a thread
46
+ const thread = await openai.beta.threads.create();
47
+
48
+ // Add a message
49
+ await openai.beta.threads.messages.create(thread.id, {
50
+ role: 'user',
51
+ content: 'Hello!',
52
+ });
53
+
54
+ // Run the assistant
55
+ const run = await openai.beta.threads.runs.create(thread.id, {
56
+ assistant_id: assistant.id,
57
+ });
58
+ ```
59
+
60
+ ### Supported Endpoints
61
+
62
+ - `POST /v1/assistants` - Create assistant
63
+ - `GET /v1/assistants` - List assistants
64
+ - `DELETE /v1/assistants/:id` - Delete assistant
65
+ - `POST /v1/threads` - Create thread
66
+ - `GET /v1/threads/:id` - Get thread
67
+ - `POST /v1/threads/:id/messages` - Add message
68
+ - `GET /v1/threads/:id/messages` - List messages
69
+ - `POST /v1/threads/:id/runs` - Create run
70
+ - `GET /v1/threads/:id/runs/:id` - Get run status
71
+
72
+ ## Documentation
73
+
74
+ See the [Cogitator documentation](https://github.com/eL1fe/cogitator) for full API reference.
75
+
76
+ ## License
77
+
78
+ MIT
@@ -0,0 +1,107 @@
1
+ /**
2
+ * OpenAI SDK Adapter
3
+ *
4
+ * Allows using the OpenAI SDK to interact with Cogitator.
5
+ * Creates an in-process adapter that can be used with the SDK's baseURL.
6
+ */
7
+ import { type Cogitator } from '@cogitator-ai/core';
8
+ import type { Tool } from '@cogitator-ai/types';
9
+ import { ThreadManager } from './thread-manager';
10
+ import type { Assistant, Run, CreateRunRequest, SubmitToolOutputsRequest } from '../types/openai-types';
11
+ /**
12
+ * OpenAI SDK Adapter
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import OpenAI from 'openai';
17
+ * import { createOpenAIAdapter } from '@cogitator-ai/openai-compat';
18
+ *
19
+ * const adapter = createOpenAIAdapter(cogitator, {
20
+ * tools: [calculator, datetime],
21
+ * });
22
+ *
23
+ * const openai = new OpenAI({
24
+ * apiKey: 'not-needed',
25
+ * baseURL: adapter.baseURL,
26
+ * });
27
+ *
28
+ * // Use OpenAI SDK as normal
29
+ * const assistant = await openai.beta.assistants.create({
30
+ * model: 'gpt-4o',
31
+ * name: 'My Assistant',
32
+ * });
33
+ * ```
34
+ */
35
+ export declare class OpenAIAdapter {
36
+ private cogitator;
37
+ private threadManager;
38
+ private runs;
39
+ private tools;
40
+ constructor(cogitator: Cogitator, options?: {
41
+ tools?: Tool[];
42
+ });
43
+ /**
44
+ * Get the thread manager for direct access
45
+ */
46
+ getThreadManager(): ThreadManager;
47
+ createAssistant(params: {
48
+ model: string;
49
+ name?: string;
50
+ instructions?: string;
51
+ tools?: unknown[];
52
+ metadata?: Record<string, string>;
53
+ temperature?: number;
54
+ }): Assistant;
55
+ getAssistant(id: string): Assistant | undefined;
56
+ updateAssistant(id: string, updates: Partial<{
57
+ model: string;
58
+ name: string;
59
+ instructions: string;
60
+ tools: unknown[];
61
+ metadata: Record<string, string>;
62
+ temperature: number;
63
+ }>): Assistant | undefined;
64
+ deleteAssistant(id: string): boolean;
65
+ listAssistants(): Assistant[];
66
+ private toAssistant;
67
+ createThread(metadata?: Record<string, string>): import("..").Thread;
68
+ getThread(id: string): import("..").Thread | undefined;
69
+ deleteThread(id: string): boolean;
70
+ addMessage(threadId: string, params: {
71
+ role: 'user' | 'assistant';
72
+ content: string;
73
+ metadata?: Record<string, string>;
74
+ }): import("..").Message | undefined;
75
+ getMessage(threadId: string, messageId: string): import("..").Message | undefined;
76
+ listMessages(threadId: string, options?: {
77
+ limit?: number;
78
+ order?: 'asc' | 'desc';
79
+ after?: string;
80
+ before?: string;
81
+ run_id?: string;
82
+ }): import("..").Message[];
83
+ /**
84
+ * Create and execute a run
85
+ */
86
+ createRun(threadId: string, request: CreateRunRequest): Promise<Run>;
87
+ /**
88
+ * Get a run by ID
89
+ */
90
+ getRun(threadId: string, runId: string): Run | undefined;
91
+ /**
92
+ * Cancel a run
93
+ */
94
+ cancelRun(threadId: string, runId: string): Run | undefined;
95
+ /**
96
+ * Submit tool outputs for a run that requires action
97
+ */
98
+ submitToolOutputs(threadId: string, runId: string, request: SubmitToolOutputsRequest): Promise<Run | undefined>;
99
+ private executeRun;
100
+ }
101
+ /**
102
+ * Create an OpenAI adapter for Cogitator
103
+ */
104
+ export declare function createOpenAIAdapter(cogitator: Cogitator, options?: {
105
+ tools?: Tool[];
106
+ }): OpenAIAdapter;
107
+ //# sourceMappingURL=openai-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-adapter.d.ts","sourceRoot":"","sources":["../../src/client/openai-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * OpenAI SDK Adapter
3
+ *
4
+ * Allows using the OpenAI SDK to interact with Cogitator.
5
+ * Creates an in-process adapter that can be used with the SDK's baseURL.
6
+ */
7
+ import { Agent } from '@cogitator-ai/core';
8
+ import { ThreadManager } from './thread-manager';
9
+ import { nanoid } from 'nanoid';
10
+ /**
11
+ * OpenAI SDK Adapter
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import OpenAI from 'openai';
16
+ * import { createOpenAIAdapter } from '@cogitator-ai/openai-compat';
17
+ *
18
+ * const adapter = createOpenAIAdapter(cogitator, {
19
+ * tools: [calculator, datetime],
20
+ * });
21
+ *
22
+ * const openai = new OpenAI({
23
+ * apiKey: 'not-needed',
24
+ * baseURL: adapter.baseURL,
25
+ * });
26
+ *
27
+ * // Use OpenAI SDK as normal
28
+ * const assistant = await openai.beta.assistants.create({
29
+ * model: 'gpt-4o',
30
+ * name: 'My Assistant',
31
+ * });
32
+ * ```
33
+ */
34
+ export class OpenAIAdapter {
35
+ cogitator;
36
+ threadManager;
37
+ runs = new Map();
38
+ tools;
39
+ constructor(cogitator, options) {
40
+ this.cogitator = cogitator;
41
+ this.threadManager = new ThreadManager();
42
+ this.tools = options?.tools ?? [];
43
+ }
44
+ /**
45
+ * Get the thread manager for direct access
46
+ */
47
+ getThreadManager() {
48
+ return this.threadManager;
49
+ }
50
+ createAssistant(params) {
51
+ const stored = this.threadManager.createAssistant(params);
52
+ return this.toAssistant(stored);
53
+ }
54
+ getAssistant(id) {
55
+ const stored = this.threadManager.getAssistant(id);
56
+ return stored ? this.toAssistant(stored) : undefined;
57
+ }
58
+ updateAssistant(id, updates) {
59
+ const stored = this.threadManager.updateAssistant(id, updates);
60
+ return stored ? this.toAssistant(stored) : undefined;
61
+ }
62
+ deleteAssistant(id) {
63
+ return this.threadManager.deleteAssistant(id);
64
+ }
65
+ listAssistants() {
66
+ return this.threadManager.listAssistants().map((s) => this.toAssistant(s));
67
+ }
68
+ toAssistant(stored) {
69
+ return {
70
+ id: stored.id,
71
+ object: 'assistant',
72
+ created_at: stored.created_at,
73
+ name: stored.name,
74
+ description: null,
75
+ model: stored.model,
76
+ instructions: stored.instructions,
77
+ tools: stored.tools,
78
+ metadata: stored.metadata,
79
+ temperature: stored.temperature,
80
+ };
81
+ }
82
+ createThread(metadata) {
83
+ return this.threadManager.createThread(metadata);
84
+ }
85
+ getThread(id) {
86
+ return this.threadManager.getThread(id);
87
+ }
88
+ deleteThread(id) {
89
+ return this.threadManager.deleteThread(id);
90
+ }
91
+ addMessage(threadId, params) {
92
+ return this.threadManager.addMessage(threadId, params);
93
+ }
94
+ getMessage(threadId, messageId) {
95
+ return this.threadManager.getMessage(threadId, messageId);
96
+ }
97
+ listMessages(threadId, options) {
98
+ return this.threadManager.listMessages(threadId, options);
99
+ }
100
+ /**
101
+ * Create and execute a run
102
+ */
103
+ async createRun(threadId, request) {
104
+ const assistant = this.threadManager.getAssistant(request.assistant_id);
105
+ if (!assistant) {
106
+ throw new Error(`Assistant ${request.assistant_id} not found`);
107
+ }
108
+ const thread = this.threadManager.getThread(threadId);
109
+ if (!thread) {
110
+ throw new Error(`Thread ${threadId} not found`);
111
+ }
112
+ const runId = `run_${nanoid()}`;
113
+ const now = Math.floor(Date.now() / 1000);
114
+ const run = {
115
+ id: runId,
116
+ object: 'thread.run',
117
+ created_at: now,
118
+ thread_id: threadId,
119
+ assistant_id: request.assistant_id,
120
+ status: 'queued',
121
+ required_action: null,
122
+ last_error: null,
123
+ expires_at: now + 600,
124
+ started_at: null,
125
+ cancelled_at: null,
126
+ failed_at: null,
127
+ completed_at: null,
128
+ incomplete_details: null,
129
+ model: request.model ?? assistant.model,
130
+ instructions: request.instructions ?? assistant.instructions,
131
+ tools: (request.tools ?? assistant.tools),
132
+ metadata: request.metadata ?? {},
133
+ usage: null,
134
+ temperature: request.temperature ?? assistant.temperature,
135
+ top_p: request.top_p,
136
+ max_prompt_tokens: request.max_prompt_tokens,
137
+ max_completion_tokens: request.max_completion_tokens,
138
+ truncation_strategy: request.truncation_strategy,
139
+ response_format: request.response_format,
140
+ tool_choice: request.tool_choice,
141
+ parallel_tool_calls: request.parallel_tool_calls,
142
+ };
143
+ const abortController = new AbortController();
144
+ this.runs.set(runId, { run, abortController });
145
+ if (request.additional_messages) {
146
+ for (const msg of request.additional_messages) {
147
+ this.threadManager.addMessage(threadId, msg);
148
+ }
149
+ }
150
+ this.executeRun(runId, threadId, assistant, request).catch((error) => {
151
+ const state = this.runs.get(runId);
152
+ if (state) {
153
+ state.run.status = 'failed';
154
+ state.run.failed_at = Math.floor(Date.now() / 1000);
155
+ state.run.last_error = {
156
+ code: 'server_error',
157
+ message: error instanceof Error ? error.message : String(error),
158
+ };
159
+ }
160
+ });
161
+ return run;
162
+ }
163
+ /**
164
+ * Get a run by ID
165
+ */
166
+ getRun(threadId, runId) {
167
+ const state = this.runs.get(runId);
168
+ if (state?.run.thread_id === threadId) {
169
+ return state.run;
170
+ }
171
+ return undefined;
172
+ }
173
+ /**
174
+ * Cancel a run
175
+ */
176
+ cancelRun(threadId, runId) {
177
+ const state = this.runs.get(runId);
178
+ if (state?.run.thread_id === threadId) {
179
+ state.abortController.abort();
180
+ state.run.status = 'cancelled';
181
+ state.run.cancelled_at = Math.floor(Date.now() / 1000);
182
+ return state.run;
183
+ }
184
+ return undefined;
185
+ }
186
+ /**
187
+ * Submit tool outputs for a run that requires action
188
+ */
189
+ async submitToolOutputs(threadId, runId, request) {
190
+ const state = this.runs.get(runId);
191
+ if (state?.run.thread_id !== threadId) {
192
+ return undefined;
193
+ }
194
+ if (state.run.status !== 'requires_action') {
195
+ throw new Error('Run is not waiting for tool outputs');
196
+ }
197
+ if (!state.toolOutputs) {
198
+ state.toolOutputs = new Map();
199
+ }
200
+ for (const output of request.tool_outputs) {
201
+ state.toolOutputs.set(output.tool_call_id, output.output);
202
+ }
203
+ state.run.status = 'in_progress';
204
+ state.run.required_action = null;
205
+ return state.run;
206
+ }
207
+ async executeRun(runId, threadId, assistant, request) {
208
+ const state = this.runs.get(runId);
209
+ if (!state)
210
+ return;
211
+ state.run.status = 'in_progress';
212
+ state.run.started_at = Math.floor(Date.now() / 1000);
213
+ try {
214
+ const messages = this.threadManager.getMessagesForLLM(threadId);
215
+ const agent = new Agent({
216
+ name: assistant.name ?? 'assistant',
217
+ model: request.model ?? assistant.model,
218
+ instructions: request.instructions ?? assistant.instructions ?? '',
219
+ temperature: request.temperature ?? assistant.temperature,
220
+ tools: this.tools,
221
+ });
222
+ const lastUserMessage = messages.filter((m) => m.role === 'user').pop();
223
+ if (!lastUserMessage) {
224
+ throw new Error('No user message found');
225
+ }
226
+ const result = await this.cogitator.run(agent, {
227
+ input: lastUserMessage.content,
228
+ threadId,
229
+ });
230
+ if (state.abortController.signal.aborted) {
231
+ return;
232
+ }
233
+ if (result.output) {
234
+ this.threadManager.addAssistantMessage(threadId, result.output, assistant.id, runId);
235
+ }
236
+ state.run.status = 'completed';
237
+ state.run.completed_at = Math.floor(Date.now() / 1000);
238
+ state.run.usage = result.usage
239
+ ? {
240
+ prompt_tokens: result.usage.inputTokens,
241
+ completion_tokens: result.usage.outputTokens,
242
+ total_tokens: result.usage.totalTokens,
243
+ }
244
+ : null;
245
+ }
246
+ catch (error) {
247
+ if (state.abortController.signal.aborted) {
248
+ return;
249
+ }
250
+ state.run.status = 'failed';
251
+ state.run.failed_at = Math.floor(Date.now() / 1000);
252
+ state.run.last_error = {
253
+ code: 'server_error',
254
+ message: error instanceof Error ? error.message : String(error),
255
+ };
256
+ }
257
+ }
258
+ }
259
+ /**
260
+ * Create an OpenAI adapter for Cogitator
261
+ */
262
+ export function createOpenAIAdapter(cogitator, options) {
263
+ return new OpenAIAdapter(cogitator, options);
264
+ }
265
+ //# sourceMappingURL=openai-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-adapter.js","sourceRoot":"","sources":["../../src/client/openai-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Thread Manager
3
+ *
4
+ * Manages the mapping between OpenAI threads and Cogitator internal state.
5
+ */
6
+ import type { Thread, Message, CreateMessageRequest } from '../types/openai-types';
7
+ export interface StoredThread {
8
+ thread: Thread;
9
+ messages: Message[];
10
+ }
11
+ export interface StoredAssistant {
12
+ id: string;
13
+ name: string | null;
14
+ model: string;
15
+ instructions: string | null;
16
+ tools: unknown[];
17
+ metadata: Record<string, string>;
18
+ temperature?: number;
19
+ created_at: number;
20
+ }
21
+ /**
22
+ * Manages threads, messages, and assistants in memory
23
+ *
24
+ * In production, this should be backed by a database
25
+ */
26
+ export declare class ThreadManager {
27
+ private threads;
28
+ private assistants;
29
+ private files;
30
+ createAssistant(params: {
31
+ model: string;
32
+ name?: string;
33
+ instructions?: string;
34
+ tools?: unknown[];
35
+ metadata?: Record<string, string>;
36
+ temperature?: number;
37
+ }): StoredAssistant;
38
+ getAssistant(id: string): StoredAssistant | undefined;
39
+ updateAssistant(id: string, updates: Partial<Omit<StoredAssistant, 'id' | 'created_at'>>): StoredAssistant | undefined;
40
+ deleteAssistant(id: string): boolean;
41
+ listAssistants(): StoredAssistant[];
42
+ createThread(metadata?: Record<string, string>): Thread;
43
+ getThread(id: string): Thread | undefined;
44
+ deleteThread(id: string): boolean;
45
+ addMessage(threadId: string, request: CreateMessageRequest): Message | undefined;
46
+ getMessage(threadId: string, messageId: string): Message | undefined;
47
+ listMessages(threadId: string, options?: {
48
+ limit?: number;
49
+ order?: 'asc' | 'desc';
50
+ after?: string;
51
+ before?: string;
52
+ run_id?: string;
53
+ }): Message[];
54
+ /**
55
+ * Get messages in Cogitator format for LLM calls
56
+ */
57
+ getMessagesForLLM(threadId: string): {
58
+ role: 'user' | 'assistant';
59
+ content: string;
60
+ }[];
61
+ /**
62
+ * Add an assistant message (from LLM response)
63
+ */
64
+ addAssistantMessage(threadId: string, content: string, assistantId: string, runId: string): Message | undefined;
65
+ addFile(content: Buffer, filename: string): {
66
+ id: string;
67
+ filename: string;
68
+ created_at: number;
69
+ };
70
+ getFile(id: string): {
71
+ id: string;
72
+ content: Buffer;
73
+ filename: string;
74
+ created_at: number;
75
+ } | undefined;
76
+ deleteFile(id: string): boolean;
77
+ private normalizeContent;
78
+ private extractTextContent;
79
+ }
80
+ //# sourceMappingURL=thread-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-manager.d.ts","sourceRoot":"","sources":["../../src/client/thread-manager.ts"],"names":[],"mappings":"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"}