chat.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { BaseMessage, BaseMessageChunk, mergeContent, _mergeDicts, } from "./base.js";
  2. /**
  3. * Represents a chat message in a conversation.
  4. */
  5. export class ChatMessage extends BaseMessage {
  6. static lc_name() {
  7. return "ChatMessage";
  8. }
  9. static _chatMessageClass() {
  10. return ChatMessage;
  11. }
  12. constructor(fields, role) {
  13. if (typeof fields === "string") {
  14. // eslint-disable-next-line no-param-reassign, @typescript-eslint/no-non-null-assertion
  15. fields = { content: fields, role: role };
  16. }
  17. super(fields);
  18. Object.defineProperty(this, "role", {
  19. enumerable: true,
  20. configurable: true,
  21. writable: true,
  22. value: void 0
  23. });
  24. this.role = fields.role;
  25. }
  26. _getType() {
  27. return "generic";
  28. }
  29. static isInstance(message) {
  30. return message._getType() === "generic";
  31. }
  32. get _printableFields() {
  33. return {
  34. ...super._printableFields,
  35. role: this.role,
  36. };
  37. }
  38. }
  39. /**
  40. * Represents a chunk of a chat message, which can be concatenated with
  41. * other chat message chunks.
  42. */
  43. export class ChatMessageChunk extends BaseMessageChunk {
  44. static lc_name() {
  45. return "ChatMessageChunk";
  46. }
  47. constructor(fields, role) {
  48. if (typeof fields === "string") {
  49. // eslint-disable-next-line no-param-reassign, @typescript-eslint/no-non-null-assertion
  50. fields = { content: fields, role: role };
  51. }
  52. super(fields);
  53. Object.defineProperty(this, "role", {
  54. enumerable: true,
  55. configurable: true,
  56. writable: true,
  57. value: void 0
  58. });
  59. this.role = fields.role;
  60. }
  61. _getType() {
  62. return "generic";
  63. }
  64. concat(chunk) {
  65. return new ChatMessageChunk({
  66. content: mergeContent(this.content, chunk.content),
  67. additional_kwargs: _mergeDicts(this.additional_kwargs, chunk.additional_kwargs),
  68. response_metadata: _mergeDicts(this.response_metadata, chunk.response_metadata),
  69. role: this.role,
  70. id: this.id ?? chunk.id,
  71. });
  72. }
  73. get _printableFields() {
  74. return {
  75. ...super._printableFields,
  76. role: this.role,
  77. };
  78. }
  79. }
  80. export function isChatMessage(x) {
  81. return x._getType() === "generic";
  82. }
  83. export function isChatMessageChunk(x) {
  84. return x._getType() === "generic";
  85. }