Many-in-one AI client.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.7 KiB

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