Cùi Bắp
bởi Cùi Bắp
2 phút để đọc

Chuyên mục

Tags

Hiện tại mình đang sử dụng thư viện openai-node. Tuy nhiên khi implement code theo sample trong Document (Uploading Your Batch Input File) của thư viện thì phát sinh lỗi:

TSError:  Unable to compile TypeScript:
worker/generate.ts:18:4 - error TS2322: Type '"batch"' is not assignable to type '"fine-tune" | "assistants"'.

18    purpose: "batch",
      ~~~~~~~

  node_modules/openai/resources/files.d.ts:119:5
    119     purpose: 'fine-tune' | 'assistants';
            ~~~~~~~
    The expected type comes from property 'purpose' which is declared here on type 'FileCreateParams'

Đi vào trong source code của node_modules pakage này mình phát hiện một điều, trong file openai-node/src/resources/files.ts - L185. Property purpose thiếu mất typebatch.

purpose: 'fine-tune' | 'assistants';

Trong thời gian chờ team dev của OpenAI fix lỗi này (Mình đã log 1 issue tại đây). Để có thể dùng được thư viện, chúng ta cần override lại FileCreateParams Interface.

Có khá nhiều cách, trong bài viết này mình sử dụng Remap paths trong tsconfig. Theo nghĩa đen, chỉ cần sao chép, dán nguyên văn nội dung file từ node_modules và áp dụng các bản sửa lỗi của riêng bạn.

// tsconfig.json
{
  "paths": {
    "openai/resources/*": ["worker/declarations/openai/resources/*"]
  }
}

Trong thư mục worker/declarations/openai/resources/ mình tạo 1 file index.d.ts với nội dung sửa lại purpose như sau:

...

export interface FileCreateParams {
	/**
	 * The File object (not file name) to be uploaded.
	 */
	file: Uploadable;
	/**
	 * The intended purpose of the uploaded file.
	 *
	 * Use "fine-tune" for
	 * [Fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning) and
	 * "assistants" for
	 * [Assistants](https://platform.openai.com/docs/api-reference/assistants) and
	 * [Messages](https://platform.openai.com/docs/api-reference/messages). This allows
	 * us to validate the format of the uploaded file is correct for fine-tuning.
	 */
	purpose: "assistants" | "batch" | "fine-tune";
}
export interface FileListParams {
	/**
	 * Only return files with the given purpose.
	 */
	purpose?: string;
}

...
//# sourceMappingURL=files.d.ts.map

Ngoài ra nếu bạn không muốn phải chỉnh sửa compilerOptions trong tsconfig.json. Tạo thư mục node_modules trong src của bạn, sau đó đặt typings của modules bạn muốn ghi đè vào bên trong:

├── node_modules
│   └── ...
│
└── src
    ├── index.ts
    ├── ... your codes ...
    │
    └── node_modules
        └── <module-to-be-overwritten>
            └── index.d.ts

Tham khảo thêm tại How TypeScript resolves modules section.

Cảm ơn bạn đã quan tâm tới tận cuối bài viết 😆