Many-in-one AI client.
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.6 KiB

  1. import {
  2. ChoiceBase,
  3. CreatedResource,
  4. } from '../common';
  5. import {
  6. UsageMetadata,
  7. } from '../usage';
  8. import { EditModel } from '../models';
  9. import { DoFetch } from '../../../packages/request';
  10. import { PlatformApiError } from '../../../common';
  11. export enum DataEventObjectType {
  12. EDIT = 'edit',
  13. }
  14. export interface CreateEditParams {
  15. model: EditModel;
  16. input?: string;
  17. instruction: string;
  18. n?: number;
  19. temperature?: number;
  20. topP?: number;
  21. }
  22. export interface EditChoice extends ChoiceBase {
  23. text: string;
  24. }
  25. export interface CreateEditDataEvent extends CreatedResource, UsageMetadata {
  26. object: DataEventObjectType;
  27. choices: EditChoice[];
  28. }
  29. export function createEdit(
  30. this: NodeJS.EventEmitter,
  31. doFetch: DoFetch,
  32. params: CreateEditParams,
  33. ) {
  34. doFetch('POST', '/edits', {
  35. model: params.model ?? EditModel.TEXT_DAVINCI_EDIT_001,
  36. input: params.input ?? '',
  37. instruction: params.instruction,
  38. n: params.n ?? 1,
  39. temperature: params.temperature ?? 1,
  40. top_p: params.topP ?? 1,
  41. } as Record<string, unknown>)
  42. .then(async (response) => {
  43. if (!response.ok) {
  44. this.emit('error', new PlatformApiError(
  45. // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
  46. `Request from platform returned with status: ${response.status}`,
  47. response,
  48. ));
  49. this.emit('end');
  50. return;
  51. }
  52. const responseData = await response.json() as Record<string, unknown>;
  53. this.emit('data', responseData);
  54. this.emit('end');
  55. })
  56. .catch((err) => {
  57. this.emit('error', err as Error);
  58. this.emit('end');
  59. });
  60. return this;
  61. }