agsamantha/node_modules/langchain/dist/util/testing/llms/fake.js
2024-10-02 15:15:21 -05:00

78 lines
2.1 KiB
JavaScript

import { GenerationChunk } from "@langchain/core/outputs";
import { LLM } from "@langchain/core/language_models/llms";
/**
* A fake LLM that returns a predefined list of responses. It can be used for
* testing purposes.
*/
export class FakeListLLM extends LLM {
static lc_name() {
return "FakeListLLM";
}
constructor({ responses, sleep }) {
super({});
Object.defineProperty(this, "responses", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "i", {
enumerable: true,
configurable: true,
writable: true,
value: 0
});
Object.defineProperty(this, "sleep", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this.responses = responses;
this.sleep = sleep;
}
_llmType() {
return "fake-list";
}
async _call(_prompt, _options, _runManager) {
const response = this._currentResponse();
this._incrementResponse();
await this._sleepIfRequested();
return response;
}
_currentResponse() {
return this.responses[this.i];
}
_incrementResponse() {
if (this.i < this.responses.length - 1) {
this.i += 1;
}
else {
this.i = 0;
}
}
async *_streamResponseChunks(_input, _options, _runManager) {
const response = this._currentResponse();
this._incrementResponse();
for await (const text of response) {
await this._sleepIfRequested();
yield this._createResponseChunk(text);
}
}
async _sleepIfRequested() {
if (this.sleep !== undefined) {
await this._sleep();
}
}
async _sleep() {
return new Promise((resolve) => {
setTimeout(() => resolve(), this.sleep);
});
}
_createResponseChunk(text) {
return new GenerationChunk({
text,
generationInfo: {},
});
}
}