Skip to content

Commit

Permalink
clean up older uploadFile function, clean up action naming for assist…
Browse files Browse the repository at this point in the history
…ant data operations
  • Loading branch information
austin-denoble committed Jan 22, 2025
1 parent ff40551 commit fcaa739
Show file tree
Hide file tree
Showing 15 changed files with 145 additions and 346 deletions.
12 changes: 6 additions & 6 deletions src/assistant/data/__tests__/chatAndChatCompletion.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import {
messagesValidation,
modelValidation,
ChatRequest,
chatClosed,
chat,
} from '../chat';
import { chatCompletionClosed, ChatCompletionRequest } from '../chatCompletion';
import { chatCompletion, ChatCompletionRequest } from '../chatCompletion';
import {
ChatModelEnum,
ManageAssistantsApi,
Expand Down Expand Up @@ -91,17 +91,17 @@ endpoints.forEach((endpoint) => {
provideData: async () => new ManageAssistantsApi(),
} as AsstDataOperationsProvider;

const chat = chatClosed('test-assistant', AsstDataOperationsProvider);
const chatCompletion = chatCompletionClosed(
const chatFn = chat('test-assistant', AsstDataOperationsProvider);
const chatCompletionFn = chatCompletion(
'test-assistant',
AsstDataOperationsProvider
);

const input = {} as ChatRequest;
const inputCompletion = {} as ChatCompletionRequest;

await expect(chat(input)).rejects.toThrow('No messages passed');
await expect(chatCompletion(inputCompletion)).rejects.toThrow(
await expect(chatFn(input)).rejects.toThrow('No messages passed');
await expect(chatCompletionFn(inputCompletion)).rejects.toThrow(
'No messages passed'
);
});
Expand Down
8 changes: 4 additions & 4 deletions src/assistant/data/__tests__/context.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { contextClosed } from '../context';
import { context } from '../context';
import {
ContextAssistantRequest,
ContextModel,
Expand Down Expand Up @@ -34,7 +34,7 @@ describe('contextClosed', () => {

test('creates a context function that calls the API with correct parameters', async () => {
const assistantName = 'test-assistant';
const contextFn = contextClosed(assistantName, asstOperationsProvider);
const contextFn = context(assistantName, asstOperationsProvider);

const options = {
query: 'test query',
Expand All @@ -53,7 +53,7 @@ describe('contextClosed', () => {
});

test('throws error when query is empty', async () => {
const contextFn = contextClosed('test-assistant', asstOperationsProvider);
const contextFn = context('test-assistant', asstOperationsProvider);

await expect(contextFn({ query: '' })).rejects.toThrow(
'Must provide a query'
Expand All @@ -62,7 +62,7 @@ describe('contextClosed', () => {

test('works without filter parameter', async () => {
const assistantName = 'test-assistant';
const contextFn = contextClosed(assistantName, asstOperationsProvider);
const contextFn = context(assistantName, asstOperationsProvider);

const options = {
query: 'test query',
Expand Down
32 changes: 6 additions & 26 deletions src/assistant/data/__tests__/uploadFile.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { uploadFileInternal } from '../uploadFileInternal';
import { uploadFile } from '../uploadFile';
import fs from 'fs';
import path from 'path';
import { AsstDataOperationsProvider } from '../asstDataOperationsProvider';
Expand Down Expand Up @@ -52,21 +52,13 @@ describe('uploadFileInternal', () => {
});

test('throws error when file path is not provided', async () => {
const upload = uploadFileInternal(
mockAssistantName,
mockApiProvider,
mockConfig
);
const upload = uploadFile(mockAssistantName, mockApiProvider, mockConfig);
await expect(upload({ path: '' })).rejects.toThrow('File path is required');
});

test('correctly builds URL without metadata', async () => {
buildMockFetchResponse(true, 200, JSON.stringify(mockResponse));
const upload = uploadFileInternal(
mockAssistantName,
mockApiProvider,
mockConfig
);
const upload = uploadFile(mockAssistantName, mockApiProvider, mockConfig);
await upload({ path: 'test.txt' });

expect(mockFetch).toHaveBeenCalledWith(
Expand All @@ -86,11 +78,7 @@ describe('uploadFileInternal', () => {
test('correctly builds URL with metadata', async () => {
buildMockFetchResponse(true, 200, JSON.stringify(mockResponse));
const metadata = { key: 'value' };
const upload = uploadFileInternal(
mockAssistantName,
mockApiProvider,
mockConfig
);
const upload = uploadFile(mockAssistantName, mockApiProvider, mockConfig);
await upload({ path: 'test.txt', metadata });

const encodedMetadata = encodeURIComponent(JSON.stringify(metadata));
Expand All @@ -110,11 +98,7 @@ describe('uploadFileInternal', () => {

test('includes correct headers in request', async () => {
buildMockFetchResponse(true, 200, JSON.stringify(mockResponse));
const upload = uploadFileInternal(
mockAssistantName,
mockApiProvider,
mockConfig
);
const upload = uploadFile(mockAssistantName, mockApiProvider, mockConfig);
await upload({ path: 'test.txt' });

expect(mockFetch).toHaveBeenCalledWith(
Expand All @@ -133,11 +117,7 @@ describe('uploadFileInternal', () => {

test('creates form data with file stream', async () => {
buildMockFetchResponse(true, 200, JSON.stringify(mockResponse));
const upload = uploadFileInternal(
mockAssistantName,
mockApiProvider,
mockConfig
);
const upload = uploadFile(mockAssistantName, mockApiProvider, mockConfig);
await upload({ path: 'test.txt' });

expect(fs.readFileSync).toHaveBeenCalledWith('test.txt');
Expand Down
50 changes: 22 additions & 28 deletions src/assistant/data/assistant.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { chatClosed, ChatRequest } from './chat';
import { ListFiles, listFilesClosed } from './listFiles';
import { DescribeFile, describeFileClosed } from './describeFile';
import { DeleteFile, deleteFileClosed } from './deleteFile';
import { chat, ChatRequest } from './chat';
import { ListFiles, listFiles } from './listFiles';
import { DescribeFile, describeFile } from './describeFile';
import { DeleteFile, deleteFile } from './deleteFile';
// import { UploadFile, uploadFileClosed } from './uploadFile';
import { UploadFile } from './uploadFileInternal';
import { uploadFileInternal } from './uploadFileInternal';
import { UploadFile } from './uploadFile';

Check warning on line 6 in src/assistant/data/assistant.ts

View workflow job for this annotation

GitHub Actions / Linting, formatting, documentation, etc

'/home/runner/work/pinecone-ts-client/pinecone-ts-client/src/assistant/data/uploadFile.ts' imported multiple times
import { uploadFile } from './uploadFile';

Check warning on line 7 in src/assistant/data/assistant.ts

View workflow job for this annotation

GitHub Actions / Linting, formatting, documentation, etc

'/home/runner/work/pinecone-ts-client/pinecone-ts-client/src/assistant/data/uploadFile.ts' imported multiple times
import { PineconeConfiguration } from '../../data';
import { AsstDataOperationsProvider } from './asstDataOperationsProvider';
import { Context, contextClosed } from './context';
import { chatCompletionClosed, ChatCompletionRequest } from './chatCompletion';
import { Context, context } from './context';
import { chatCompletion, ChatCompletionRequest } from './chatCompletion';

/**
* The `Assistant` class holds the data plane methods for interacting with
Expand All @@ -26,13 +26,13 @@ import { chatCompletionClosed, ChatCompletionRequest } from './chatCompletion';
export class Assistant {
private config: PineconeConfiguration;

readonly _chat: ReturnType<typeof chatClosed>;
readonly _chatCompletions: ReturnType<typeof chatCompletionClosed>;
readonly _listFiles: ReturnType<typeof listFilesClosed>;
readonly _describeFile: ReturnType<typeof describeFileClosed>;
readonly _uploadFile: ReturnType<typeof uploadFileInternal>;
readonly _deleteFile: ReturnType<typeof deleteFileClosed>;
readonly _context: ReturnType<typeof contextClosed>;
readonly _chat: ReturnType<typeof chat>;
readonly _chatCompletions: ReturnType<typeof chatCompletion>;
readonly _listFiles: ReturnType<typeof listFiles>;
readonly _describeFile: ReturnType<typeof describeFile>;
readonly _uploadFile: ReturnType<typeof uploadFile>;
readonly _deleteFile: ReturnType<typeof deleteFile>;
readonly _context: ReturnType<typeof context>;

assistantName: string;

Expand All @@ -56,32 +56,26 @@ export class Assistant {
);
this.assistantName = assistantName;

this._chat = chatClosed(this.assistantName, asstDataOperationsProvider);
this._chatCompletions = chatCompletionClosed(
this._chat = chat(this.assistantName, asstDataOperationsProvider);
this._chatCompletions = chatCompletion(
this.assistantName,
asstDataOperationsProvider
);
this._listFiles = listFilesClosed(
this._listFiles = listFiles(this.assistantName, asstDataOperationsProvider);
this._describeFile = describeFile(
this.assistantName,
asstDataOperationsProvider
);
this._describeFile = describeFileClosed(
this.assistantName,
asstDataOperationsProvider
);
this._uploadFile = uploadFileInternal(
this._uploadFile = uploadFile(
this.assistantName,
asstDataOperationsProvider,
this.config
);
this._deleteFile = deleteFileClosed(
this.assistantName,
asstDataOperationsProvider
);
this._context = contextClosed(
this._deleteFile = deleteFile(
this.assistantName,
asstDataOperationsProvider
);
this._context = context(this.assistantName, asstDataOperationsProvider);
}

// --------- Chat methods ---------
Expand Down
55 changes: 1 addition & 54 deletions src/assistant/data/asstDataOperationsProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,6 @@ import {
X_PINECONE_API_VERSION,
HTTPHeaders,
} from '../../pinecone-generated-ts-fetch/assistant_data';
import {
MetricsApi,
Configuration as EvalConfiguration,
} from '../../pinecone-generated-ts-fetch/assistant_evaluation';
import {
buildUserAgent,
getFetch,
Expand All @@ -24,7 +20,6 @@ export class AsstDataOperationsProvider {
private readonly asstName: string;
private asstHostUrl?: string;
private asstDataOperations?: ManageAssistantsDataApi;
private metrics?: MetricsApi;
private additionalHeaders?: HTTPHeaders;

constructor(
Expand Down Expand Up @@ -64,32 +59,10 @@ export class AsstDataOperationsProvider {
return this.asstHostUrl;
}

provideMetrics() {
if (this.metrics) {
return this.metrics;
} else {
this.asstHostUrl = this.getAsstHostByRegion();
this.metrics = this.buildAssistEvalOperationsConfig();
}
return this.metrics;
}

getAsstHostByRegion() {
const { assistantRegion } = this.config;
let asstHostUrl = 'https://prod-1-data.ke.pinecone.io/assistant';

// if the region has been specified as 'eu' use that, otherwise default to 'us'
if (assistantRegion && assistantRegion.toLowerCase() === 'eu') {
asstHostUrl = 'https://prod-eu-data.ke.pinecone.io/assistant';
}
return asstHostUrl;
}

buildAsstDataOperationsConfig() {
const { apiKey } = this.config;
// Get the host URL from the singleton
const hostUrl = this.asstHostUrl;
const headers = this.config.additionalHeaders || null;
const headers = this.additionalHeaders || null;
const apiConfig: AssistantOperationsApiConfigurationParameters = {
basePath: hostUrl,
apiKey,
Expand All @@ -102,33 +75,7 @@ export class AsstDataOperationsProvider {
fetchApi: getFetch(this.config),
middleware,
};
console.log('API CONFIG GETTING PASSED THROUGH TO MADA', apiConfig);
console.log(
'THIS IS THE FETCH API SPECIFICALLY FOR MADA',
apiConfig.fetchApi
);

return new ManageAssistantsDataApi(new DataConfiguration(apiConfig));
}

buildAssistEvalOperationsConfig() {
const { apiKey } = this.config;

const hostUrl = this.getAsstHostByRegion();
const headers = this.config.additionalHeaders || null;
const apiConfig: AssistantOperationsApiConfigurationParameters = {
basePath: hostUrl,
apiKey,
queryParamsStringify,
headers: {
'User-Agent': buildUserAgent(this.config),
'X-Pinecone-Api-Version': X_PINECONE_API_VERSION,
...headers,
},
fetchApi: getFetch(this.config),
middleware,
};

return new MetricsApi(new EvalConfiguration(apiConfig));
}
}
2 changes: 1 addition & 1 deletion src/assistant/data/chat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ export interface ChatRequest {
* @throws an Error if the model is not one of the available models.
* @returns A promise that resolves to a {@link ChatModel} object containing the response from the Assistant.
*/
export const chatClosed = (
export const chat = (
assistantName: string,
apiProvider: AsstDataOperationsProvider
) => {
Expand Down
2 changes: 1 addition & 1 deletion src/assistant/data/chatCompletion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export interface ChatCompletionRequest {
* @throws an Error if the model is not one of the available models.
* @returns A promise that resolves to a {@link ChatCompletionModel} object containing the response from the Assistant.
*/
export const chatCompletionClosed = (
export const chatCompletion = (
assistantName: string,
apiProvider: AsstDataOperationsProvider
) => {
Expand Down
2 changes: 1 addition & 1 deletion src/assistant/data/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export interface Context {
* @throws An error if a query is not provided.
* @returns A promise that resolves to a {@link Context} object containing the context snippets.
*/
export const contextClosed = (
export const context = (
assistantName: string,
apiProvider: AsstDataOperationsProvider
) => {
Expand Down
2 changes: 1 addition & 1 deletion src/assistant/data/deleteFile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export interface DeleteFile {
* @param assistantName - The name of the Assistant to delete the file from.
* @param api - The Pinecone API object.
*/
export const deleteFileClosed = (
export const deleteFile = (
assistantName: string,
apiProvider: AsstDataOperationsProvider
) => {
Expand Down
2 changes: 1 addition & 1 deletion src/assistant/data/describeFile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export interface DescribeFile {
* @param api - The API object to use to send the request.
* @returns A promise that resolves to a {@link AssistantFileModel} object containing the file details.
*/
export const describeFileClosed = (
export const describeFile = (
assistantName: string,
apiProvider: AsstDataOperationsProvider
) => {
Expand Down
14 changes: 7 additions & 7 deletions src/assistant/data/index.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
export { ChatRequest, chatClosed } from './chat';
export { ChatCompletionRequest, chatCompletionClosed } from './chatCompletion';
export { DeleteFile, deleteFileClosed } from './deleteFile';
export { DescribeFile, describeFileClosed } from './describeFile';
export { ListFiles, listFilesClosed } from './listFiles';
export { UploadFile, uploadFileInternal } from './uploadFileInternal';
export { Context, contextClosed } from './context';
export { ChatRequest, chat } from './chat';
export { ChatCompletionRequest, chatCompletion } from './chatCompletion';
export { DeleteFile, deleteFile } from './deleteFile';
export { DescribeFile, describeFile } from './describeFile';
export { ListFiles, listFiles } from './listFiles';
export { UploadFile, uploadFile } from './uploadFile';
export { Context, context } from './context';
export { AssistantEval, evaluate } from '../control/evaluate';
export { Assistant } from './assistant';
export { AsstDataOperationsProvider } from './asstDataOperationsProvider';
2 changes: 1 addition & 1 deletion src/assistant/data/listFiles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export interface ListFiles {
* @param assistantName - The name of the Assistant that the files are uploaded to.
* @param api - The API object to use to send the request.
*/
export const listFilesClosed = (
export const listFiles = (
assistantName: string,
apiProvider: AsstDataOperationsProvider
) => {
Expand Down
Loading

0 comments on commit fcaa739

Please sign in to comment.