@langchain/together-ai 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,4 +4,15 @@
4
4
 
5
5
  ### Minor Changes
6
6
 
7
+ - [#10593](https://github.com/langchain-ai/langchainjs/pull/10593) [`0fb6fa4`](https://github.com/langchain-ai/langchainjs/commit/0fb6fa40dcd3a09a4fb91f36c9f2ca869552961e) Thanks [@christian-bromann](https://github.com/christian-bromann)! - feat(together-ai): migrate Together AI into provider package
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [[`d6bf4fc`](https://github.com/langchain-ai/langchainjs/commit/d6bf4fc91b2c2eb931bf3bc7606b1817632bc8c1)]:
12
+ - @langchain/openai@1.4.2
13
+
14
+ ## 0.1.0
15
+
16
+ ### Minor Changes
17
+
7
18
  - Initial provider package for Together AI chat models, embeddings, and legacy LLM support migrated from `@langchain/community`.
@@ -58,7 +58,7 @@ var ChatTogetherAI = class extends _langchain_openai.ChatOpenAICompletions {
58
58
  ...fields?.configuration
59
59
  }
60
60
  });
61
- this._addVersion("@langchain/together-ai", "0.0.1");
61
+ this._addVersion("@langchain/together-ai", "0.1.0");
62
62
  }
63
63
  getLsParams(options) {
64
64
  const params = super.getLsParams(options);
@@ -1,4 +1,4 @@
1
- import * as _langchain_core_load_serializable0 from "@langchain/core/load/serializable";
1
+ import * as _$_langchain_core_load_serializable0 from "@langchain/core/load/serializable";
2
2
  import { BaseChatModelParams, LangSmithParams } from "@langchain/core/language_models/chat_models";
3
3
  import { ChatOpenAICallOptions, ChatOpenAICompletions, OpenAIChatInput, OpenAIClient, OpenAICoreRequestOptions } from "@langchain/openai";
4
4
 
@@ -57,7 +57,7 @@ declare class ChatTogetherAI extends ChatOpenAICompletions<ChatTogetherAICallOpt
57
57
  } | undefined;
58
58
  constructor(fields?: Partial<ChatTogetherAIInput>);
59
59
  getLsParams(options: this["ParsedCallOptions"]): LangSmithParams;
60
- toJSON(): _langchain_core_load_serializable0.Serialized;
60
+ toJSON(): _$_langchain_core_load_serializable0.Serialized;
61
61
  completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming, options?: OpenAICoreRequestOptions): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;
62
62
  completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming, options?: OpenAICoreRequestOptions): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;
63
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chat_models.d.cts","names":[],"sources":["../src/chat_models.ts"],"mappings":";;;;;KAaK,yBAAA;AAAA,KAMA,gCAAA;AAAA,UAEY,yBAAA,SAAkC,IAAA,CACjD,qBAAA,EACA,gCAAA;EAEA,eAAA;IACE,IAAA;IACA,MAAA,EAAQ,MAAA;EAAA;AAAA;AAAA,UAIK,mBAAA,SAEb,IAAA,CAAK,eAAA,mBAAkC,yBAAA,GACvC,mBAAA;EAfiC;;;;AAErC;EAmBE,gBAAA;;;;;EAKA,MAAA;AAAA;;;;;;;;;;;AAdF;;;;;;;;;;cAqCa,cAAA,SAAuB,qBAAA,CAAsB,yBAAA;EAAA,OACjD,OAAA,CAAA;EAIP,eAAA;EAEA,YAAA;EAEA,QAAA,CAAA;EAAA,IAII,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAAA,IAOjB,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAOrB,WAAA,CAAY,MAAA,GAAS,OAAA,CAAQ,mBAAA;EAwB7B,WAAA,CAAY,OAAA,8BAAqC,eAAA;EAMjD,MAAA,CAAA,GANgE,kCAAA,CAM1D,UAAA;EAeA,mBAAA,CACJ,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,mCAAA,EAC3B,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,aAAA,CAAc,YAAA,CAAa,IAAA,CAAK,WAAA,CAAY,mBAAA;EAEjD,mBAAA,CACJ,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,sCAAA,EAC3B,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,YAAA,CAAa,IAAA,CAAK,WAAA,CAAY,cAAA;AAAA"}
1
+ {"version":3,"file":"chat_models.d.cts","names":[],"sources":["../src/chat_models.ts"],"mappings":";;;;;KAaK,yBAAA;AAAA,KAMA,gCAAA;AAAA,UAEY,yBAAA,SAAkC,IAAA,CACjD,qBAAA,EACA,gCAAA;EAEA,eAAA;IACE,IAAA;IACA,MAAA,EAAQ,MAAA;EAAA;AAAA;AAAA,UAIK,mBAAA,SAEb,IAAA,CAAK,eAAA,mBAAkC,yBAAA,GACvC,mBAAA;EAfiC;;;;AAErC;EAmBE,gBAAA;;;;;EAKA,MAAA;AAAA;;;;;;;;;;;AAdF;;;;;;;;;;cAqCa,cAAA,SAAuB,qBAAA,CAAsB,yBAAA;EAAA,OACjD,OAAA,CAAA;EAIP,eAAA;EAEA,YAAA;EAEA,QAAA,CAAA;EAAA,IAII,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAAA,IAOjB,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAOrB,WAAA,CAAY,MAAA,GAAS,OAAA,CAAQ,mBAAA;EAwB7B,WAAA,CAAY,OAAA,8BAAqC,eAAA;EAMjD,MAAA,CAAA,GANgE,oCAAA,CAM1D,UAAA;EAeA,mBAAA,CACJ,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,mCAAA,EAC3B,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,aAAA,CAAc,YAAA,CAAa,IAAA,CAAK,WAAA,CAAY,mBAAA;EAEjD,mBAAA,CACJ,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,sCAAA,EAC3B,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,YAAA,CAAa,IAAA,CAAK,WAAA,CAAY,cAAA;AAAA"}
@@ -1,5 +1,5 @@
1
1
  import { ChatOpenAICallOptions, ChatOpenAICompletions, OpenAIChatInput, OpenAIClient, OpenAICoreRequestOptions } from "@langchain/openai";
2
- import * as _langchain_core_load_serializable0 from "@langchain/core/load/serializable";
2
+ import * as _$_langchain_core_load_serializable0 from "@langchain/core/load/serializable";
3
3
  import { BaseChatModelParams, LangSmithParams } from "@langchain/core/language_models/chat_models";
4
4
 
5
5
  //#region src/chat_models.d.ts
@@ -57,7 +57,7 @@ declare class ChatTogetherAI extends ChatOpenAICompletions<ChatTogetherAICallOpt
57
57
  } | undefined;
58
58
  constructor(fields?: Partial<ChatTogetherAIInput>);
59
59
  getLsParams(options: this["ParsedCallOptions"]): LangSmithParams;
60
- toJSON(): _langchain_core_load_serializable0.Serialized;
60
+ toJSON(): _$_langchain_core_load_serializable0.Serialized;
61
61
  completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming, options?: OpenAICoreRequestOptions): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;
62
62
  completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming, options?: OpenAICoreRequestOptions): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;
63
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chat_models.d.ts","names":[],"sources":["../src/chat_models.ts"],"mappings":";;;;;KAaK,yBAAA;AAAA,KAMA,gCAAA;AAAA,UAEY,yBAAA,SAAkC,IAAA,CACjD,qBAAA,EACA,gCAAA;EAEA,eAAA;IACE,IAAA;IACA,MAAA,EAAQ,MAAA;EAAA;AAAA;AAAA,UAIK,mBAAA,SAEb,IAAA,CAAK,eAAA,mBAAkC,yBAAA,GACvC,mBAAA;EAfiC;;;;AAErC;EAmBE,gBAAA;;;;;EAKA,MAAA;AAAA;;;;;;;;;;;AAdF;;;;;;;;;;cAqCa,cAAA,SAAuB,qBAAA,CAAsB,yBAAA;EAAA,OACjD,OAAA,CAAA;EAIP,eAAA;EAEA,YAAA;EAEA,QAAA,CAAA;EAAA,IAII,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAAA,IAOjB,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAOrB,WAAA,CAAY,MAAA,GAAS,OAAA,CAAQ,mBAAA;EAwB7B,WAAA,CAAY,OAAA,8BAAqC,eAAA;EAMjD,MAAA,CAAA,GANgE,kCAAA,CAM1D,UAAA;EAeA,mBAAA,CACJ,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,mCAAA,EAC3B,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,aAAA,CAAc,YAAA,CAAa,IAAA,CAAK,WAAA,CAAY,mBAAA;EAEjD,mBAAA,CACJ,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,sCAAA,EAC3B,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,YAAA,CAAa,IAAA,CAAK,WAAA,CAAY,cAAA;AAAA"}
1
+ {"version":3,"file":"chat_models.d.ts","names":[],"sources":["../src/chat_models.ts"],"mappings":";;;;;KAaK,yBAAA;AAAA,KAMA,gCAAA;AAAA,UAEY,yBAAA,SAAkC,IAAA,CACjD,qBAAA,EACA,gCAAA;EAEA,eAAA;IACE,IAAA;IACA,MAAA,EAAQ,MAAA;EAAA;AAAA;AAAA,UAIK,mBAAA,SAEb,IAAA,CAAK,eAAA,mBAAkC,yBAAA,GACvC,mBAAA;EAfiC;;;;AAErC;EAmBE,gBAAA;;;;;EAKA,MAAA;AAAA;;;;;;;;;;;AAdF;;;;;;;;;;cAqCa,cAAA,SAAuB,qBAAA,CAAsB,yBAAA;EAAA,OACjD,OAAA,CAAA;EAIP,eAAA;EAEA,YAAA;EAEA,QAAA,CAAA;EAAA,IAII,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAAA,IAOjB,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAOrB,WAAA,CAAY,MAAA,GAAS,OAAA,CAAQ,mBAAA;EAwB7B,WAAA,CAAY,OAAA,8BAAqC,eAAA;EAMjD,MAAA,CAAA,GANgE,oCAAA,CAM1D,UAAA;EAeA,mBAAA,CACJ,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,mCAAA,EAC3B,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,aAAA,CAAc,YAAA,CAAa,IAAA,CAAK,WAAA,CAAY,mBAAA;EAEjD,mBAAA,CACJ,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,sCAAA,EAC3B,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,YAAA,CAAa,IAAA,CAAK,WAAA,CAAY,cAAA;AAAA"}
@@ -58,7 +58,7 @@ var ChatTogetherAI = class extends ChatOpenAICompletions {
58
58
  ...fields?.configuration
59
59
  }
60
60
  });
61
- this._addVersion("@langchain/together-ai", "0.0.1");
61
+ this._addVersion("@langchain/together-ai", "0.1.0");
62
62
  }
63
63
  getLsParams(options) {
64
64
  const params = super.getLsParams(options);
package/dist/llms.cjs CHANGED
@@ -43,7 +43,7 @@ var TogetherAI = class extends _langchain_core_language_models_llms.LLM {
43
43
  }
44
44
  constructor(inputs) {
45
45
  super(inputs);
46
- this._addVersion("@langchain/together-ai", "0.0.1");
46
+ this._addVersion("@langchain/together-ai", "0.1.0");
47
47
  const apiKey = inputs.apiKey ?? (0, _langchain_core_utils_env.getEnvironmentVariable)("TOGETHER_AI_API_KEY");
48
48
  if (!apiKey) throw new Error("TOGETHER_AI_API_KEY not found.");
49
49
  if (!inputs.model && !inputs.modelName) throw new Error("Model name is required for TogetherAI.");
package/dist/llms.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llms.cjs","names":["LLM","convertEventStreamToIterableReadableDataStream","GenerationChunk"],"sources":["../src/llms.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport {\n LLM,\n type BaseLLMCallOptions,\n type BaseLLMParams,\n} from \"@langchain/core/language_models/llms\";\nimport { GenerationChunk } from \"@langchain/core/outputs\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { convertEventStreamToIterableReadableDataStream } from \"./utils/event_source_parse.js\";\n\ninterface TogetherAIInferenceResult {\n object: string;\n status: string;\n prompt: Array<string>;\n model: string;\n model_owner: string;\n tags: object;\n num_returns: number;\n args: {\n model: string;\n prompt: string;\n temperature: number;\n top_p: number;\n top_k: number;\n max_tokens: number;\n stop: string[];\n };\n subjobs: unknown[];\n output?: {\n choices: Array<{\n finish_reason: string;\n index: number;\n text: string;\n }>;\n raw_compute_time: number;\n result_type: string;\n };\n choices?: Array<{\n finish_reason: string;\n index: number;\n text: string;\n }>;\n}\n\nexport interface TogetherAIInputs extends BaseLLMParams {\n /**\n * The API key to use for the Together AI API.\n * @default {process.env.TOGETHER_AI_API_KEY}\n */\n apiKey?: string;\n /**\n * The name of the model to query.\n * Alias for `model`.\n */\n modelName?: string;\n /**\n * The name of the model to query.\n */\n model?: string;\n /**\n * A decimal number that determines the degree of randomness in the response.\n * @default {0.7}\n */\n temperature?: number;\n /**\n * Whether or not to stream tokens as they are generated.\n * @default {false}\n */\n streaming?: boolean;\n /**\n * Nucleus sampling threshold.\n * @default {0.7}\n */\n topP?: number;\n /**\n * Limit the number of token candidates considered at each step.\n * @default {50}\n */\n topK?: number;\n /**\n * A number that controls repetition.\n * @default {1}\n */\n repetitionPenalty?: number;\n /**\n * An integer that specifies how many top token log probabilities are included.\n */\n logprobs?: number;\n /**\n * Run an LLM-based safeguard model on top of any model.\n */\n safetyModel?: string;\n /**\n * Limit the number of generated tokens.\n */\n maxTokens?: number;\n /**\n * A list of tokens at which the generation should stop.\n */\n stop?: string[];\n}\n\nexport interface TogetherAICallOptions\n extends\n BaseLLMCallOptions,\n Pick<\n TogetherAIInputs,\n | \"modelName\"\n | \"model\"\n | \"temperature\"\n | \"topP\"\n | \"topK\"\n | \"repetitionPenalty\"\n | \"logprobs\"\n | \"safetyModel\"\n | \"maxTokens\"\n | \"stop\"\n > {}\n\nexport class TogetherAI extends LLM<TogetherAICallOptions> {\n lc_serializable = true;\n\n lc_namespace = [\"langchain\", \"llms\", \"together_ai\"];\n\n static inputs: TogetherAIInputs;\n\n temperature = 0.7;\n\n topP = 0.7;\n\n topK = 50;\n\n modelName: string;\n\n model: string;\n\n streaming = false;\n\n repetitionPenalty = 1;\n\n logprobs?: number;\n\n maxTokens?: number;\n\n safetyModel?: string;\n\n stop?: string[];\n\n private apiKey: string;\n\n private inferenceAPIUrl = \"https://api.together.xyz/inference\";\n\n static lc_name() {\n return \"TogetherAI\";\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n apiKey: \"TOGETHER_AI_API_KEY\",\n };\n }\n\n get lc_aliases(): { [key: string]: string } | undefined {\n return {\n apiKey: \"together_ai_api_key\",\n };\n }\n\n private isChatModel(modelName: string): boolean {\n const chatModelPatterns = [/instruct/i, /chat/i, /vision/i, /turbo/i];\n return chatModelPatterns.some((pattern) => pattern.test(modelName));\n }\n\n constructor(inputs: TogetherAIInputs) {\n super(inputs);\n this._addVersion(\"@langchain/together-ai\", __PKG_VERSION__);\n const apiKey =\n inputs.apiKey ?? getEnvironmentVariable(\"TOGETHER_AI_API_KEY\");\n if (!apiKey) {\n throw new Error(\"TOGETHER_AI_API_KEY not found.\");\n }\n if (!inputs.model && !inputs.modelName) {\n throw new Error(\"Model name is required for TogetherAI.\");\n }\n this.apiKey = apiKey;\n this.temperature = inputs.temperature ?? this.temperature;\n this.topK = inputs.topK ?? this.topK;\n this.topP = inputs.topP ?? this.topP;\n this.modelName = inputs.model ?? inputs.modelName ?? \"\";\n this.model = this.modelName;\n this.streaming = inputs.streaming ?? this.streaming;\n this.repetitionPenalty = inputs.repetitionPenalty ?? this.repetitionPenalty;\n this.logprobs = inputs.logprobs;\n this.safetyModel = inputs.safetyModel;\n this.maxTokens = inputs.maxTokens;\n this.stop = inputs.stop;\n\n if (this.isChatModel(this.model)) {\n console.warn(\n `Warning: Model '${this.model}' appears to be a chat/instruct model. ` +\n \"Consider using ChatTogetherAI from @langchain/together-ai instead.\"\n );\n }\n }\n\n _llmType() {\n return \"together_ai\";\n }\n\n private constructHeaders() {\n return {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n };\n }\n\n private constructBody(prompt: string, options?: this[\"ParsedCallOptions\"]) {\n return {\n model: options?.model ?? options?.modelName ?? this.model,\n prompt,\n temperature: options?.temperature ?? this.temperature,\n top_k: options?.topK ?? this.topK,\n top_p: options?.topP ?? this.topP,\n repetition_penalty: options?.repetitionPenalty ?? this.repetitionPenalty,\n logprobs: options?.logprobs ?? this.logprobs,\n stream_tokens: this.streaming,\n safety_model: options?.safetyModel ?? this.safetyModel,\n max_tokens: options?.maxTokens ?? this.maxTokens,\n stop: options?.stop ?? this.stop,\n };\n }\n\n async completionWithRetry(\n prompt: string,\n options?: this[\"ParsedCallOptions\"]\n ) {\n return this.caller.call(async () => {\n const fetchResponse = await fetch(this.inferenceAPIUrl, {\n method: \"POST\",\n headers: {\n ...this.constructHeaders(),\n },\n body: JSON.stringify(this.constructBody(prompt, options)),\n });\n if (fetchResponse.status === 200) {\n return fetchResponse.json();\n }\n const errorResponse = await fetchResponse.json();\n throw new Error(\n `Error getting prompt completion from Together AI. ${JSON.stringify(\n errorResponse,\n null,\n 2\n )}`\n );\n });\n }\n\n async _call(\n prompt: string,\n options?: this[\"ParsedCallOptions\"]\n ): Promise<string> {\n const response: TogetherAIInferenceResult = await this.completionWithRetry(\n prompt,\n options\n );\n\n if (!response.output && !response.choices) {\n throw new Error(\n `Unexpected response format from Together AI. The model '${this.model}' may require the ChatTogetherAI class instead of TogetherAI class. ` +\n `Response: ${JSON.stringify(response, null, 2)}`\n );\n }\n\n if (response.output) {\n return response.output.choices?.[0]?.text ?? \"\";\n }\n return response.choices?.[0]?.text ?? \"\";\n }\n\n async *_streamResponseChunks(\n prompt: string,\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<GenerationChunk> {\n const fetchResponse = await fetch(this.inferenceAPIUrl, {\n method: \"POST\",\n headers: {\n ...this.constructHeaders(),\n },\n body: JSON.stringify(this.constructBody(prompt, options)),\n });\n\n if (fetchResponse.status !== 200 || !fetchResponse.body) {\n const errorResponse = await fetchResponse.json();\n throw new Error(\n `Error getting prompt completion from Together AI. ${JSON.stringify(\n errorResponse,\n null,\n 2\n )}`\n );\n }\n const stream = convertEventStreamToIterableReadableDataStream(\n fetchResponse.body\n );\n for await (const chunk of stream) {\n if (chunk !== \"[DONE]\") {\n const parsedChunk = JSON.parse(chunk);\n const generationChunk = new GenerationChunk({\n text: parsedChunk.choices[0].text ?? \"\",\n });\n yield generationChunk;\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(generationChunk.text ?? \"\");\n }\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"llms.cjs","names":["LLM","convertEventStreamToIterableReadableDataStream","GenerationChunk"],"sources":["../src/llms.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport {\n LLM,\n type BaseLLMCallOptions,\n type BaseLLMParams,\n} from \"@langchain/core/language_models/llms\";\nimport { GenerationChunk } from \"@langchain/core/outputs\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { convertEventStreamToIterableReadableDataStream } from \"./utils/event_source_parse.js\";\n\ninterface TogetherAIInferenceResult {\n object: string;\n status: string;\n prompt: Array<string>;\n model: string;\n model_owner: string;\n tags: object;\n num_returns: number;\n args: {\n model: string;\n prompt: string;\n temperature: number;\n top_p: number;\n top_k: number;\n max_tokens: number;\n stop: string[];\n };\n subjobs: unknown[];\n output?: {\n choices: Array<{\n finish_reason: string;\n index: number;\n text: string;\n }>;\n raw_compute_time: number;\n result_type: string;\n };\n choices?: Array<{\n finish_reason: string;\n index: number;\n text: string;\n }>;\n}\n\nexport interface TogetherAIInputs extends BaseLLMParams {\n /**\n * The API key to use for the Together AI API.\n * @default {process.env.TOGETHER_AI_API_KEY}\n */\n apiKey?: string;\n /**\n * The name of the model to query.\n * Alias for `model`.\n */\n modelName?: string;\n /**\n * The name of the model to query.\n */\n model?: string;\n /**\n * A decimal number that determines the degree of randomness in the response.\n * @default {0.7}\n */\n temperature?: number;\n /**\n * Whether or not to stream tokens as they are generated.\n * @default {false}\n */\n streaming?: boolean;\n /**\n * Nucleus sampling threshold.\n * @default {0.7}\n */\n topP?: number;\n /**\n * Limit the number of token candidates considered at each step.\n * @default {50}\n */\n topK?: number;\n /**\n * A number that controls repetition.\n * @default {1}\n */\n repetitionPenalty?: number;\n /**\n * An integer that specifies how many top token log probabilities are included.\n */\n logprobs?: number;\n /**\n * Run an LLM-based safeguard model on top of any model.\n */\n safetyModel?: string;\n /**\n * Limit the number of generated tokens.\n */\n maxTokens?: number;\n /**\n * A list of tokens at which the generation should stop.\n */\n stop?: string[];\n}\n\nexport interface TogetherAICallOptions\n extends\n BaseLLMCallOptions,\n Pick<\n TogetherAIInputs,\n | \"modelName\"\n | \"model\"\n | \"temperature\"\n | \"topP\"\n | \"topK\"\n | \"repetitionPenalty\"\n | \"logprobs\"\n | \"safetyModel\"\n | \"maxTokens\"\n | \"stop\"\n > {}\n\nexport class TogetherAI extends LLM<TogetherAICallOptions> {\n lc_serializable = true;\n\n lc_namespace = [\"langchain\", \"llms\", \"together_ai\"];\n\n static inputs: TogetherAIInputs;\n\n temperature = 0.7;\n\n topP = 0.7;\n\n topK = 50;\n\n modelName: string;\n\n model: string;\n\n streaming = false;\n\n repetitionPenalty = 1;\n\n logprobs?: number;\n\n maxTokens?: number;\n\n safetyModel?: string;\n\n stop?: string[];\n\n private apiKey: string;\n\n private inferenceAPIUrl = \"https://api.together.xyz/inference\";\n\n static lc_name() {\n return \"TogetherAI\";\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n apiKey: \"TOGETHER_AI_API_KEY\",\n };\n }\n\n get lc_aliases(): { [key: string]: string } | undefined {\n return {\n apiKey: \"together_ai_api_key\",\n };\n }\n\n private isChatModel(modelName: string): boolean {\n const chatModelPatterns = [/instruct/i, /chat/i, /vision/i, /turbo/i];\n return chatModelPatterns.some((pattern) => pattern.test(modelName));\n }\n\n constructor(inputs: TogetherAIInputs) {\n super(inputs);\n this._addVersion(\"@langchain/together-ai\", __PKG_VERSION__);\n const apiKey =\n inputs.apiKey ?? getEnvironmentVariable(\"TOGETHER_AI_API_KEY\");\n if (!apiKey) {\n throw new Error(\"TOGETHER_AI_API_KEY not found.\");\n }\n if (!inputs.model && !inputs.modelName) {\n throw new Error(\"Model name is required for TogetherAI.\");\n }\n this.apiKey = apiKey;\n this.temperature = inputs.temperature ?? this.temperature;\n this.topK = inputs.topK ?? this.topK;\n this.topP = inputs.topP ?? this.topP;\n this.modelName = inputs.model ?? inputs.modelName ?? \"\";\n this.model = this.modelName;\n this.streaming = inputs.streaming ?? this.streaming;\n this.repetitionPenalty = inputs.repetitionPenalty ?? this.repetitionPenalty;\n this.logprobs = inputs.logprobs;\n this.safetyModel = inputs.safetyModel;\n this.maxTokens = inputs.maxTokens;\n this.stop = inputs.stop;\n\n if (this.isChatModel(this.model)) {\n console.warn(\n `Warning: Model '${this.model}' appears to be a chat/instruct model. ` +\n \"Consider using ChatTogetherAI from @langchain/together-ai instead.\"\n );\n }\n }\n\n _llmType() {\n return \"together_ai\";\n }\n\n private constructHeaders() {\n return {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n };\n }\n\n private constructBody(prompt: string, options?: this[\"ParsedCallOptions\"]) {\n return {\n model: options?.model ?? options?.modelName ?? this.model,\n prompt,\n temperature: options?.temperature ?? this.temperature,\n top_k: options?.topK ?? this.topK,\n top_p: options?.topP ?? this.topP,\n repetition_penalty: options?.repetitionPenalty ?? this.repetitionPenalty,\n logprobs: options?.logprobs ?? this.logprobs,\n stream_tokens: this.streaming,\n safety_model: options?.safetyModel ?? this.safetyModel,\n max_tokens: options?.maxTokens ?? this.maxTokens,\n stop: options?.stop ?? this.stop,\n };\n }\n\n async completionWithRetry(\n prompt: string,\n options?: this[\"ParsedCallOptions\"]\n ) {\n return this.caller.call(async () => {\n const fetchResponse = await fetch(this.inferenceAPIUrl, {\n method: \"POST\",\n headers: {\n ...this.constructHeaders(),\n },\n body: JSON.stringify(this.constructBody(prompt, options)),\n });\n if (fetchResponse.status === 200) {\n return fetchResponse.json();\n }\n const errorResponse = await fetchResponse.json();\n throw new Error(\n `Error getting prompt completion from Together AI. ${JSON.stringify(\n errorResponse,\n null,\n 2\n )}`\n );\n });\n }\n\n async _call(\n prompt: string,\n options?: this[\"ParsedCallOptions\"]\n ): Promise<string> {\n const response: TogetherAIInferenceResult = await this.completionWithRetry(\n prompt,\n options\n );\n\n if (!response.output && !response.choices) {\n throw new Error(\n `Unexpected response format from Together AI. The model '${this.model}' may require the ChatTogetherAI class instead of TogetherAI class. ` +\n `Response: ${JSON.stringify(response, null, 2)}`\n );\n }\n\n if (response.output) {\n return response.output.choices?.[0]?.text ?? \"\";\n }\n return response.choices?.[0]?.text ?? \"\";\n }\n\n async *_streamResponseChunks(\n prompt: string,\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<GenerationChunk> {\n const fetchResponse = await fetch(this.inferenceAPIUrl, {\n method: \"POST\",\n headers: {\n ...this.constructHeaders(),\n },\n body: JSON.stringify(this.constructBody(prompt, options)),\n });\n\n if (fetchResponse.status !== 200 || !fetchResponse.body) {\n const errorResponse = await fetchResponse.json();\n throw new Error(\n `Error getting prompt completion from Together AI. ${JSON.stringify(\n errorResponse,\n null,\n 2\n )}`\n );\n }\n const stream = convertEventStreamToIterableReadableDataStream(\n fetchResponse.body\n );\n for await (const chunk of stream) {\n if (chunk !== \"[DONE]\") {\n const parsedChunk = JSON.parse(chunk);\n const generationChunk = new GenerationChunk({\n text: parsedChunk.choices[0].text ?? \"\",\n });\n yield generationChunk;\n // oxlint-disable-next-line no-void\n void runManager?.handleLLMNewToken(generationChunk.text ?? \"\");\n }\n }\n }\n}\n"],"mappings":"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"}
package/dist/llms.js CHANGED
@@ -43,7 +43,7 @@ var TogetherAI = class extends LLM {
43
43
  }
44
44
  constructor(inputs) {
45
45
  super(inputs);
46
- this._addVersion("@langchain/together-ai", "0.0.1");
46
+ this._addVersion("@langchain/together-ai", "0.1.0");
47
47
  const apiKey = inputs.apiKey ?? getEnvironmentVariable("TOGETHER_AI_API_KEY");
48
48
  if (!apiKey) throw new Error("TOGETHER_AI_API_KEY not found.");
49
49
  if (!inputs.model && !inputs.modelName) throw new Error("Model name is required for TogetherAI.");
package/dist/llms.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llms.js","names":[],"sources":["../src/llms.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport {\n LLM,\n type BaseLLMCallOptions,\n type BaseLLMParams,\n} from \"@langchain/core/language_models/llms\";\nimport { GenerationChunk } from \"@langchain/core/outputs\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { convertEventStreamToIterableReadableDataStream } from \"./utils/event_source_parse.js\";\n\ninterface TogetherAIInferenceResult {\n object: string;\n status: string;\n prompt: Array<string>;\n model: string;\n model_owner: string;\n tags: object;\n num_returns: number;\n args: {\n model: string;\n prompt: string;\n temperature: number;\n top_p: number;\n top_k: number;\n max_tokens: number;\n stop: string[];\n };\n subjobs: unknown[];\n output?: {\n choices: Array<{\n finish_reason: string;\n index: number;\n text: string;\n }>;\n raw_compute_time: number;\n result_type: string;\n };\n choices?: Array<{\n finish_reason: string;\n index: number;\n text: string;\n }>;\n}\n\nexport interface TogetherAIInputs extends BaseLLMParams {\n /**\n * The API key to use for the Together AI API.\n * @default {process.env.TOGETHER_AI_API_KEY}\n */\n apiKey?: string;\n /**\n * The name of the model to query.\n * Alias for `model`.\n */\n modelName?: string;\n /**\n * The name of the model to query.\n */\n model?: string;\n /**\n * A decimal number that determines the degree of randomness in the response.\n * @default {0.7}\n */\n temperature?: number;\n /**\n * Whether or not to stream tokens as they are generated.\n * @default {false}\n */\n streaming?: boolean;\n /**\n * Nucleus sampling threshold.\n * @default {0.7}\n */\n topP?: number;\n /**\n * Limit the number of token candidates considered at each step.\n * @default {50}\n */\n topK?: number;\n /**\n * A number that controls repetition.\n * @default {1}\n */\n repetitionPenalty?: number;\n /**\n * An integer that specifies how many top token log probabilities are included.\n */\n logprobs?: number;\n /**\n * Run an LLM-based safeguard model on top of any model.\n */\n safetyModel?: string;\n /**\n * Limit the number of generated tokens.\n */\n maxTokens?: number;\n /**\n * A list of tokens at which the generation should stop.\n */\n stop?: string[];\n}\n\nexport interface TogetherAICallOptions\n extends\n BaseLLMCallOptions,\n Pick<\n TogetherAIInputs,\n | \"modelName\"\n | \"model\"\n | \"temperature\"\n | \"topP\"\n | \"topK\"\n | \"repetitionPenalty\"\n | \"logprobs\"\n | \"safetyModel\"\n | \"maxTokens\"\n | \"stop\"\n > {}\n\nexport class TogetherAI extends LLM<TogetherAICallOptions> {\n lc_serializable = true;\n\n lc_namespace = [\"langchain\", \"llms\", \"together_ai\"];\n\n static inputs: TogetherAIInputs;\n\n temperature = 0.7;\n\n topP = 0.7;\n\n topK = 50;\n\n modelName: string;\n\n model: string;\n\n streaming = false;\n\n repetitionPenalty = 1;\n\n logprobs?: number;\n\n maxTokens?: number;\n\n safetyModel?: string;\n\n stop?: string[];\n\n private apiKey: string;\n\n private inferenceAPIUrl = \"https://api.together.xyz/inference\";\n\n static lc_name() {\n return \"TogetherAI\";\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n apiKey: \"TOGETHER_AI_API_KEY\",\n };\n }\n\n get lc_aliases(): { [key: string]: string } | undefined {\n return {\n apiKey: \"together_ai_api_key\",\n };\n }\n\n private isChatModel(modelName: string): boolean {\n const chatModelPatterns = [/instruct/i, /chat/i, /vision/i, /turbo/i];\n return chatModelPatterns.some((pattern) => pattern.test(modelName));\n }\n\n constructor(inputs: TogetherAIInputs) {\n super(inputs);\n this._addVersion(\"@langchain/together-ai\", __PKG_VERSION__);\n const apiKey =\n inputs.apiKey ?? getEnvironmentVariable(\"TOGETHER_AI_API_KEY\");\n if (!apiKey) {\n throw new Error(\"TOGETHER_AI_API_KEY not found.\");\n }\n if (!inputs.model && !inputs.modelName) {\n throw new Error(\"Model name is required for TogetherAI.\");\n }\n this.apiKey = apiKey;\n this.temperature = inputs.temperature ?? this.temperature;\n this.topK = inputs.topK ?? this.topK;\n this.topP = inputs.topP ?? this.topP;\n this.modelName = inputs.model ?? inputs.modelName ?? \"\";\n this.model = this.modelName;\n this.streaming = inputs.streaming ?? this.streaming;\n this.repetitionPenalty = inputs.repetitionPenalty ?? this.repetitionPenalty;\n this.logprobs = inputs.logprobs;\n this.safetyModel = inputs.safetyModel;\n this.maxTokens = inputs.maxTokens;\n this.stop = inputs.stop;\n\n if (this.isChatModel(this.model)) {\n console.warn(\n `Warning: Model '${this.model}' appears to be a chat/instruct model. ` +\n \"Consider using ChatTogetherAI from @langchain/together-ai instead.\"\n );\n }\n }\n\n _llmType() {\n return \"together_ai\";\n }\n\n private constructHeaders() {\n return {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n };\n }\n\n private constructBody(prompt: string, options?: this[\"ParsedCallOptions\"]) {\n return {\n model: options?.model ?? options?.modelName ?? this.model,\n prompt,\n temperature: options?.temperature ?? this.temperature,\n top_k: options?.topK ?? this.topK,\n top_p: options?.topP ?? this.topP,\n repetition_penalty: options?.repetitionPenalty ?? this.repetitionPenalty,\n logprobs: options?.logprobs ?? this.logprobs,\n stream_tokens: this.streaming,\n safety_model: options?.safetyModel ?? this.safetyModel,\n max_tokens: options?.maxTokens ?? this.maxTokens,\n stop: options?.stop ?? this.stop,\n };\n }\n\n async completionWithRetry(\n prompt: string,\n options?: this[\"ParsedCallOptions\"]\n ) {\n return this.caller.call(async () => {\n const fetchResponse = await fetch(this.inferenceAPIUrl, {\n method: \"POST\",\n headers: {\n ...this.constructHeaders(),\n },\n body: JSON.stringify(this.constructBody(prompt, options)),\n });\n if (fetchResponse.status === 200) {\n return fetchResponse.json();\n }\n const errorResponse = await fetchResponse.json();\n throw new Error(\n `Error getting prompt completion from Together AI. ${JSON.stringify(\n errorResponse,\n null,\n 2\n )}`\n );\n });\n }\n\n async _call(\n prompt: string,\n options?: this[\"ParsedCallOptions\"]\n ): Promise<string> {\n const response: TogetherAIInferenceResult = await this.completionWithRetry(\n prompt,\n options\n );\n\n if (!response.output && !response.choices) {\n throw new Error(\n `Unexpected response format from Together AI. The model '${this.model}' may require the ChatTogetherAI class instead of TogetherAI class. ` +\n `Response: ${JSON.stringify(response, null, 2)}`\n );\n }\n\n if (response.output) {\n return response.output.choices?.[0]?.text ?? \"\";\n }\n return response.choices?.[0]?.text ?? \"\";\n }\n\n async *_streamResponseChunks(\n prompt: string,\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<GenerationChunk> {\n const fetchResponse = await fetch(this.inferenceAPIUrl, {\n method: \"POST\",\n headers: {\n ...this.constructHeaders(),\n },\n body: JSON.stringify(this.constructBody(prompt, options)),\n });\n\n if (fetchResponse.status !== 200 || !fetchResponse.body) {\n const errorResponse = await fetchResponse.json();\n throw new Error(\n `Error getting prompt completion from Together AI. ${JSON.stringify(\n errorResponse,\n null,\n 2\n )}`\n );\n }\n const stream = convertEventStreamToIterableReadableDataStream(\n fetchResponse.body\n );\n for await (const chunk of stream) {\n if (chunk !== \"[DONE]\") {\n const parsedChunk = JSON.parse(chunk);\n const generationChunk = new GenerationChunk({\n text: parsedChunk.choices[0].text ?? \"\",\n });\n yield generationChunk;\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(generationChunk.text ?? \"\");\n }\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"llms.js","names":[],"sources":["../src/llms.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport {\n LLM,\n type BaseLLMCallOptions,\n type BaseLLMParams,\n} from \"@langchain/core/language_models/llms\";\nimport { GenerationChunk } from \"@langchain/core/outputs\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { convertEventStreamToIterableReadableDataStream } from \"./utils/event_source_parse.js\";\n\ninterface TogetherAIInferenceResult {\n object: string;\n status: string;\n prompt: Array<string>;\n model: string;\n model_owner: string;\n tags: object;\n num_returns: number;\n args: {\n model: string;\n prompt: string;\n temperature: number;\n top_p: number;\n top_k: number;\n max_tokens: number;\n stop: string[];\n };\n subjobs: unknown[];\n output?: {\n choices: Array<{\n finish_reason: string;\n index: number;\n text: string;\n }>;\n raw_compute_time: number;\n result_type: string;\n };\n choices?: Array<{\n finish_reason: string;\n index: number;\n text: string;\n }>;\n}\n\nexport interface TogetherAIInputs extends BaseLLMParams {\n /**\n * The API key to use for the Together AI API.\n * @default {process.env.TOGETHER_AI_API_KEY}\n */\n apiKey?: string;\n /**\n * The name of the model to query.\n * Alias for `model`.\n */\n modelName?: string;\n /**\n * The name of the model to query.\n */\n model?: string;\n /**\n * A decimal number that determines the degree of randomness in the response.\n * @default {0.7}\n */\n temperature?: number;\n /**\n * Whether or not to stream tokens as they are generated.\n * @default {false}\n */\n streaming?: boolean;\n /**\n * Nucleus sampling threshold.\n * @default {0.7}\n */\n topP?: number;\n /**\n * Limit the number of token candidates considered at each step.\n * @default {50}\n */\n topK?: number;\n /**\n * A number that controls repetition.\n * @default {1}\n */\n repetitionPenalty?: number;\n /**\n * An integer that specifies how many top token log probabilities are included.\n */\n logprobs?: number;\n /**\n * Run an LLM-based safeguard model on top of any model.\n */\n safetyModel?: string;\n /**\n * Limit the number of generated tokens.\n */\n maxTokens?: number;\n /**\n * A list of tokens at which the generation should stop.\n */\n stop?: string[];\n}\n\nexport interface TogetherAICallOptions\n extends\n BaseLLMCallOptions,\n Pick<\n TogetherAIInputs,\n | \"modelName\"\n | \"model\"\n | \"temperature\"\n | \"topP\"\n | \"topK\"\n | \"repetitionPenalty\"\n | \"logprobs\"\n | \"safetyModel\"\n | \"maxTokens\"\n | \"stop\"\n > {}\n\nexport class TogetherAI extends LLM<TogetherAICallOptions> {\n lc_serializable = true;\n\n lc_namespace = [\"langchain\", \"llms\", \"together_ai\"];\n\n static inputs: TogetherAIInputs;\n\n temperature = 0.7;\n\n topP = 0.7;\n\n topK = 50;\n\n modelName: string;\n\n model: string;\n\n streaming = false;\n\n repetitionPenalty = 1;\n\n logprobs?: number;\n\n maxTokens?: number;\n\n safetyModel?: string;\n\n stop?: string[];\n\n private apiKey: string;\n\n private inferenceAPIUrl = \"https://api.together.xyz/inference\";\n\n static lc_name() {\n return \"TogetherAI\";\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n apiKey: \"TOGETHER_AI_API_KEY\",\n };\n }\n\n get lc_aliases(): { [key: string]: string } | undefined {\n return {\n apiKey: \"together_ai_api_key\",\n };\n }\n\n private isChatModel(modelName: string): boolean {\n const chatModelPatterns = [/instruct/i, /chat/i, /vision/i, /turbo/i];\n return chatModelPatterns.some((pattern) => pattern.test(modelName));\n }\n\n constructor(inputs: TogetherAIInputs) {\n super(inputs);\n this._addVersion(\"@langchain/together-ai\", __PKG_VERSION__);\n const apiKey =\n inputs.apiKey ?? getEnvironmentVariable(\"TOGETHER_AI_API_KEY\");\n if (!apiKey) {\n throw new Error(\"TOGETHER_AI_API_KEY not found.\");\n }\n if (!inputs.model && !inputs.modelName) {\n throw new Error(\"Model name is required for TogetherAI.\");\n }\n this.apiKey = apiKey;\n this.temperature = inputs.temperature ?? this.temperature;\n this.topK = inputs.topK ?? this.topK;\n this.topP = inputs.topP ?? this.topP;\n this.modelName = inputs.model ?? inputs.modelName ?? \"\";\n this.model = this.modelName;\n this.streaming = inputs.streaming ?? this.streaming;\n this.repetitionPenalty = inputs.repetitionPenalty ?? this.repetitionPenalty;\n this.logprobs = inputs.logprobs;\n this.safetyModel = inputs.safetyModel;\n this.maxTokens = inputs.maxTokens;\n this.stop = inputs.stop;\n\n if (this.isChatModel(this.model)) {\n console.warn(\n `Warning: Model '${this.model}' appears to be a chat/instruct model. ` +\n \"Consider using ChatTogetherAI from @langchain/together-ai instead.\"\n );\n }\n }\n\n _llmType() {\n return \"together_ai\";\n }\n\n private constructHeaders() {\n return {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n };\n }\n\n private constructBody(prompt: string, options?: this[\"ParsedCallOptions\"]) {\n return {\n model: options?.model ?? options?.modelName ?? this.model,\n prompt,\n temperature: options?.temperature ?? this.temperature,\n top_k: options?.topK ?? this.topK,\n top_p: options?.topP ?? this.topP,\n repetition_penalty: options?.repetitionPenalty ?? this.repetitionPenalty,\n logprobs: options?.logprobs ?? this.logprobs,\n stream_tokens: this.streaming,\n safety_model: options?.safetyModel ?? this.safetyModel,\n max_tokens: options?.maxTokens ?? this.maxTokens,\n stop: options?.stop ?? this.stop,\n };\n }\n\n async completionWithRetry(\n prompt: string,\n options?: this[\"ParsedCallOptions\"]\n ) {\n return this.caller.call(async () => {\n const fetchResponse = await fetch(this.inferenceAPIUrl, {\n method: \"POST\",\n headers: {\n ...this.constructHeaders(),\n },\n body: JSON.stringify(this.constructBody(prompt, options)),\n });\n if (fetchResponse.status === 200) {\n return fetchResponse.json();\n }\n const errorResponse = await fetchResponse.json();\n throw new Error(\n `Error getting prompt completion from Together AI. ${JSON.stringify(\n errorResponse,\n null,\n 2\n )}`\n );\n });\n }\n\n async _call(\n prompt: string,\n options?: this[\"ParsedCallOptions\"]\n ): Promise<string> {\n const response: TogetherAIInferenceResult = await this.completionWithRetry(\n prompt,\n options\n );\n\n if (!response.output && !response.choices) {\n throw new Error(\n `Unexpected response format from Together AI. The model '${this.model}' may require the ChatTogetherAI class instead of TogetherAI class. ` +\n `Response: ${JSON.stringify(response, null, 2)}`\n );\n }\n\n if (response.output) {\n return response.output.choices?.[0]?.text ?? \"\";\n }\n return response.choices?.[0]?.text ?? \"\";\n }\n\n async *_streamResponseChunks(\n prompt: string,\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<GenerationChunk> {\n const fetchResponse = await fetch(this.inferenceAPIUrl, {\n method: \"POST\",\n headers: {\n ...this.constructHeaders(),\n },\n body: JSON.stringify(this.constructBody(prompt, options)),\n });\n\n if (fetchResponse.status !== 200 || !fetchResponse.body) {\n const errorResponse = await fetchResponse.json();\n throw new Error(\n `Error getting prompt completion from Together AI. ${JSON.stringify(\n errorResponse,\n null,\n 2\n )}`\n );\n }\n const stream = convertEventStreamToIterableReadableDataStream(\n fetchResponse.body\n );\n for await (const chunk of stream) {\n if (chunk !== \"[DONE]\") {\n const parsedChunk = JSON.parse(chunk);\n const generationChunk = new GenerationChunk({\n text: parsedChunk.choices[0].text ?? \"\",\n });\n yield generationChunk;\n // oxlint-disable-next-line no-void\n void runManager?.handleLLMNewToken(generationChunk.text ?? \"\");\n }\n }\n }\n}\n"],"mappings":";;;;;AAuHA,IAAa,aAAb,cAAgC,IAA2B;CACzD,kBAAkB;CAElB,eAAe;EAAC;EAAa;EAAQ;EAAc;CAEnD,OAAO;CAEP,cAAc;CAEd,OAAO;CAEP,OAAO;CAEP;CAEA;CAEA,YAAY;CAEZ,oBAAoB;CAEpB;CAEA;CAEA;CAEA;CAEA;CAEA,kBAA0B;CAE1B,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,aAAoD;AACtD,SAAO,EACL,QAAQ,uBACT;;CAGH,IAAI,aAAoD;AACtD,SAAO,EACL,QAAQ,uBACT;;CAGH,YAAoB,WAA4B;AAE9C,SAD0B;GAAC;GAAa;GAAS;GAAW;GAAS,CAC5C,MAAM,YAAY,QAAQ,KAAK,UAAU,CAAC;;CAGrE,YAAY,QAA0B;AACpC,QAAM,OAAO;AACb,OAAK,YAAY,0BAAA,QAA0C;EAC3D,MAAM,SACJ,OAAO,UAAU,uBAAuB,sBAAsB;AAChE,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,iCAAiC;AAEnD,MAAI,CAAC,OAAO,SAAS,CAAC,OAAO,UAC3B,OAAM,IAAI,MAAM,yCAAyC;AAE3D,OAAK,SAAS;AACd,OAAK,cAAc,OAAO,eAAe,KAAK;AAC9C,OAAK,OAAO,OAAO,QAAQ,KAAK;AAChC,OAAK,OAAO,OAAO,QAAQ,KAAK;AAChC,OAAK,YAAY,OAAO,SAAS,OAAO,aAAa;AACrD,OAAK,QAAQ,KAAK;AAClB,OAAK,YAAY,OAAO,aAAa,KAAK;AAC1C,OAAK,oBAAoB,OAAO,qBAAqB,KAAK;AAC1D,OAAK,WAAW,OAAO;AACvB,OAAK,cAAc,OAAO;AAC1B,OAAK,YAAY,OAAO;AACxB,OAAK,OAAO,OAAO;AAEnB,MAAI,KAAK,YAAY,KAAK,MAAM,CAC9B,SAAQ,KACN,mBAAmB,KAAK,MAAM,2GAE/B;;CAIL,WAAW;AACT,SAAO;;CAGT,mBAA2B;AACzB,SAAO;GACL,QAAQ;GACR,gBAAgB;GAChB,eAAe,UAAU,KAAK;GAC/B;;CAGH,cAAsB,QAAgB,SAAqC;AACzE,SAAO;GACL,OAAO,SAAS,SAAS,SAAS,aAAa,KAAK;GACpD;GACA,aAAa,SAAS,eAAe,KAAK;GAC1C,OAAO,SAAS,QAAQ,KAAK;GAC7B,OAAO,SAAS,QAAQ,KAAK;GAC7B,oBAAoB,SAAS,qBAAqB,KAAK;GACvD,UAAU,SAAS,YAAY,KAAK;GACpC,eAAe,KAAK;GACpB,cAAc,SAAS,eAAe,KAAK;GAC3C,YAAY,SAAS,aAAa,KAAK;GACvC,MAAM,SAAS,QAAQ,KAAK;GAC7B;;CAGH,MAAM,oBACJ,QACA,SACA;AACA,SAAO,KAAK,OAAO,KAAK,YAAY;GAClC,MAAM,gBAAgB,MAAM,MAAM,KAAK,iBAAiB;IACtD,QAAQ;IACR,SAAS,EACP,GAAG,KAAK,kBAAkB,EAC3B;IACD,MAAM,KAAK,UAAU,KAAK,cAAc,QAAQ,QAAQ,CAAC;IAC1D,CAAC;AACF,OAAI,cAAc,WAAW,IAC3B,QAAO,cAAc,MAAM;GAE7B,MAAM,gBAAgB,MAAM,cAAc,MAAM;AAChD,SAAM,IAAI,MACR,qDAAqD,KAAK,UACxD,eACA,MACA,EACD,GACF;IACD;;CAGJ,MAAM,MACJ,QACA,SACiB;EACjB,MAAM,WAAsC,MAAM,KAAK,oBACrD,QACA,QACD;AAED,MAAI,CAAC,SAAS,UAAU,CAAC,SAAS,QAChC,OAAM,IAAI,MACR,2DAA2D,KAAK,MAAM,gFACvD,KAAK,UAAU,UAAU,MAAM,EAAE,GACjD;AAGH,MAAI,SAAS,OACX,QAAO,SAAS,OAAO,UAAU,IAAI,QAAQ;AAE/C,SAAO,SAAS,UAAU,IAAI,QAAQ;;CAGxC,OAAO,sBACL,QACA,SACA,YACiC;EACjC,MAAM,gBAAgB,MAAM,MAAM,KAAK,iBAAiB;GACtD,QAAQ;GACR,SAAS,EACP,GAAG,KAAK,kBAAkB,EAC3B;GACD,MAAM,KAAK,UAAU,KAAK,cAAc,QAAQ,QAAQ,CAAC;GAC1D,CAAC;AAEF,MAAI,cAAc,WAAW,OAAO,CAAC,cAAc,MAAM;GACvD,MAAM,gBAAgB,MAAM,cAAc,MAAM;AAChD,SAAM,IAAI,MACR,qDAAqD,KAAK,UACxD,eACA,MACA,EACD,GACF;;EAEH,MAAM,SAAS,+CACb,cAAc,KACf;AACD,aAAW,MAAM,SAAS,OACxB,KAAI,UAAU,UAAU;GAEtB,MAAM,kBAAkB,IAAI,gBAAgB,EAC1C,MAFkB,KAAK,MAAM,MAAM,CAEjB,QAAQ,GAAG,QAAQ,IACtC,CAAC;AACF,SAAM;AAED,eAAY,kBAAkB,gBAAgB,QAAQ,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"event_source_parse.cjs","names":["IterableReadableStream"],"sources":["../../src/utils/event_source_parse.ts"],"sourcesContent":["/* eslint-disable prefer-template */\n/* eslint-disable default-case */\n// Adapted from https://github.com/gfortaine/fetch-event-source/blob/main/src/parse.ts\n// due to a packaging issue in the original.\n// MIT License\nimport { type Readable } from \"stream\";\nimport { IterableReadableStream } from \"@langchain/core/utils/stream\";\n\nexport const EventStreamContentType = \"text/event-stream\";\n\n/**\n * Represents a message sent in an event stream\n * https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format\n */\nexport interface EventSourceMessage {\n /** The event ID to set the EventSource object's last event ID value. */\n id: string;\n /** A string identifying the type of event described. */\n event: string;\n /** The event data */\n data: string;\n /** The reconnection interval (in milliseconds) to wait before retrying the connection */\n retry?: number;\n}\n\nfunction isNodeJSReadable(x: unknown): x is Readable {\n return x != null && typeof x === \"object\" && \"on\" in x;\n}\n\n/**\n * Converts a ReadableStream into a callback pattern.\n * @param stream The input ReadableStream.\n * @param onChunk A function that will be called on each new byte chunk in the stream.\n * @returns {Promise<void>} A promise that will be resolved when the stream closes.\n */\nexport async function getBytes(\n stream: ReadableStream<Uint8Array>,\n onChunk: (arr: Uint8Array, flush?: boolean) => void\n) {\n // stream is a Node.js Readable / PassThrough stream\n // this can happen if node-fetch is polyfilled\n if (isNodeJSReadable(stream)) {\n return new Promise<void>((resolve) => {\n stream.on(\"readable\", () => {\n let chunk;\n while (true) {\n chunk = stream.read();\n if (chunk == null) {\n onChunk(new Uint8Array(), true);\n break;\n }\n onChunk(chunk);\n }\n\n resolve();\n });\n });\n }\n\n const reader = stream.getReader();\n while (true) {\n const result = await reader.read();\n if (result.done) {\n onChunk(new Uint8Array(), true);\n break;\n }\n onChunk(result.value);\n }\n}\n\nconst enum ControlChars {\n NewLine = 10,\n CarriageReturn = 13,\n Space = 32,\n Colon = 58,\n}\n\n/**\n * Parses arbitary byte chunks into EventSource line buffers.\n * Each line should be of the format \"field: value\" and ends with \\r, \\n, or \\r\\n.\n * @param onLine A function that will be called on each new EventSource line.\n * @returns A function that should be called for each incoming byte chunk.\n */\nexport function getLines(\n onLine: (line: Uint8Array, fieldLength: number, flush?: boolean) => void\n) {\n let buffer: Uint8Array | undefined;\n let position: number;\n let fieldLength: number;\n let discardTrailingNewline = false;\n\n return function onChunk(arr: Uint8Array, flush?: boolean) {\n if (flush) {\n onLine(arr, 0, true);\n return;\n }\n\n if (buffer === undefined) {\n buffer = arr;\n position = 0;\n fieldLength = -1;\n } else {\n buffer = concat(buffer, arr);\n }\n\n const bufLength = buffer.length;\n let lineStart = 0;\n while (position < bufLength) {\n if (discardTrailingNewline) {\n if (buffer[position] === ControlChars.NewLine) {\n lineStart = ++position;\n }\n\n discardTrailingNewline = false;\n }\n\n let lineEnd = -1;\n for (; position < bufLength && lineEnd === -1; ++position) {\n switch (buffer[position]) {\n case ControlChars.Colon:\n if (fieldLength === -1) {\n fieldLength = position - lineStart;\n }\n break;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore:7029 \\r case below should fallthrough to \\n:\n case ControlChars.CarriageReturn:\n discardTrailingNewline = true;\n // eslint-disable-next-line no-fallthrough\n case ControlChars.NewLine:\n lineEnd = position;\n break;\n }\n }\n\n if (lineEnd === -1) {\n break;\n }\n\n onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\n lineStart = position;\n fieldLength = -1;\n }\n\n if (lineStart === bufLength) {\n buffer = undefined;\n } else if (lineStart !== 0) {\n buffer = buffer.subarray(lineStart);\n position -= lineStart;\n }\n };\n}\n\n/**\n * Parses line buffers into EventSourceMessages.\n * @param onId A function that will be called on each `id` field.\n * @param onRetry A function that will be called on each `retry` field.\n * @param onMessage A function that will be called on each message.\n * @returns A function that should be called for each incoming line buffer.\n */\nexport function getMessages(\n onMessage?: (msg: EventSourceMessage) => void,\n onId?: (id: string) => void,\n onRetry?: (retry: number) => void\n) {\n let message = newMessage();\n const decoder = new TextDecoder();\n\n return function onLine(\n line: Uint8Array,\n fieldLength: number,\n flush?: boolean\n ) {\n if (flush) {\n if (!isEmpty(message)) {\n onMessage?.(message);\n message = newMessage();\n }\n return;\n }\n\n if (line.length === 0) {\n onMessage?.(message);\n message = newMessage();\n } else if (fieldLength > 0) {\n const field = decoder.decode(line.subarray(0, fieldLength));\n const valueOffset =\n fieldLength + (line[fieldLength + 1] === ControlChars.Space ? 2 : 1);\n const value = decoder.decode(line.subarray(valueOffset));\n\n switch (field) {\n case \"data\":\n message.data = message.data ? `${message.data}\\n${value}` : value;\n break;\n case \"event\":\n message.event = value;\n break;\n case \"id\":\n onId?.((message.id = value));\n break;\n case \"retry\": {\n const retry = parseInt(value, 10);\n if (!Number.isNaN(retry)) {\n onRetry?.((message.retry = retry));\n }\n break;\n }\n }\n }\n };\n}\n\nfunction concat(a: Uint8Array, b: Uint8Array) {\n const res = new Uint8Array(a.length + b.length);\n res.set(a);\n res.set(b, a.length);\n return res;\n}\n\nfunction newMessage(): EventSourceMessage {\n return {\n data: \"\",\n event: \"\",\n id: \"\",\n retry: undefined,\n };\n}\n\nexport function convertEventStreamToIterableReadableDataStream(\n stream: ReadableStream\n) {\n const dataStream = new ReadableStream({\n async start(controller) {\n const enqueueLine = getMessages((msg) => {\n if (msg.data) controller.enqueue(msg.data);\n });\n const onLine = (\n line: Uint8Array,\n fieldLength: number,\n flush?: boolean\n ) => {\n enqueueLine(line, fieldLength, flush);\n if (flush) controller.close();\n };\n await getBytes(stream, getLines(onLine));\n },\n });\n return IterableReadableStream.fromReadableStream(dataStream);\n}\n\nfunction isEmpty(message: EventSourceMessage): boolean {\n return (\n message.data === \"\" &&\n message.event === \"\" &&\n message.id === \"\" &&\n message.retry === undefined\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"event_source_parse.cjs","names":["IterableReadableStream"],"sources":["../../src/utils/event_source_parse.ts"],"sourcesContent":["/* oxlint-disable prefer-template */\n/* oxlint-disable default-case */\n// Adapted from https://github.com/gfortaine/fetch-event-source/blob/main/src/parse.ts\n// due to a packaging issue in the original.\n// MIT License\nimport { type Readable } from \"stream\";\nimport { IterableReadableStream } from \"@langchain/core/utils/stream\";\n\nexport const EventStreamContentType = \"text/event-stream\";\n\n/**\n * Represents a message sent in an event stream\n * https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format\n */\nexport interface EventSourceMessage {\n /** The event ID to set the EventSource object's last event ID value. */\n id: string;\n /** A string identifying the type of event described. */\n event: string;\n /** The event data */\n data: string;\n /** The reconnection interval (in milliseconds) to wait before retrying the connection */\n retry?: number;\n}\n\nfunction isNodeJSReadable(x: unknown): x is Readable {\n return x != null && typeof x === \"object\" && \"on\" in x;\n}\n\n/**\n * Converts a ReadableStream into a callback pattern.\n * @param stream The input ReadableStream.\n * @param onChunk A function that will be called on each new byte chunk in the stream.\n * @returns {Promise<void>} A promise that will be resolved when the stream closes.\n */\nexport async function getBytes(\n stream: ReadableStream<Uint8Array>,\n onChunk: (arr: Uint8Array, flush?: boolean) => void\n) {\n // stream is a Node.js Readable / PassThrough stream\n // this can happen if node-fetch is polyfilled\n if (isNodeJSReadable(stream)) {\n return new Promise<void>((resolve) => {\n stream.on(\"readable\", () => {\n let chunk;\n while (true) {\n chunk = stream.read();\n if (chunk == null) {\n onChunk(new Uint8Array(), true);\n break;\n }\n onChunk(chunk);\n }\n\n resolve();\n });\n });\n }\n\n const reader = stream.getReader();\n while (true) {\n const result = await reader.read();\n if (result.done) {\n onChunk(new Uint8Array(), true);\n break;\n }\n onChunk(result.value);\n }\n}\n\nconst enum ControlChars {\n NewLine = 10,\n CarriageReturn = 13,\n Space = 32,\n Colon = 58,\n}\n\n/**\n * Parses arbitary byte chunks into EventSource line buffers.\n * Each line should be of the format \"field: value\" and ends with \\r, \\n, or \\r\\n.\n * @param onLine A function that will be called on each new EventSource line.\n * @returns A function that should be called for each incoming byte chunk.\n */\nexport function getLines(\n onLine: (line: Uint8Array, fieldLength: number, flush?: boolean) => void\n) {\n let buffer: Uint8Array | undefined;\n let position: number;\n let fieldLength: number;\n let discardTrailingNewline = false;\n\n return function onChunk(arr: Uint8Array, flush?: boolean) {\n if (flush) {\n onLine(arr, 0, true);\n return;\n }\n\n if (buffer === undefined) {\n buffer = arr;\n position = 0;\n fieldLength = -1;\n } else {\n buffer = concat(buffer, arr);\n }\n\n const bufLength = buffer.length;\n let lineStart = 0;\n while (position < bufLength) {\n if (discardTrailingNewline) {\n if (buffer[position] === ControlChars.NewLine) {\n lineStart = ++position;\n }\n\n discardTrailingNewline = false;\n }\n\n let lineEnd = -1;\n for (; position < bufLength && lineEnd === -1; ++position) {\n switch (buffer[position]) {\n case ControlChars.Colon:\n if (fieldLength === -1) {\n fieldLength = position - lineStart;\n }\n break;\n // oxlint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore:7029 \\r case below should fallthrough to \\n:\n case ControlChars.CarriageReturn:\n discardTrailingNewline = true;\n // oxlint-disable-next-line no-fallthrough\n case ControlChars.NewLine:\n lineEnd = position;\n break;\n }\n }\n\n if (lineEnd === -1) {\n break;\n }\n\n onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\n lineStart = position;\n fieldLength = -1;\n }\n\n if (lineStart === bufLength) {\n buffer = undefined;\n } else if (lineStart !== 0) {\n buffer = buffer.subarray(lineStart);\n position -= lineStart;\n }\n };\n}\n\n/**\n * Parses line buffers into EventSourceMessages.\n * @param onId A function that will be called on each `id` field.\n * @param onRetry A function that will be called on each `retry` field.\n * @param onMessage A function that will be called on each message.\n * @returns A function that should be called for each incoming line buffer.\n */\nexport function getMessages(\n onMessage?: (msg: EventSourceMessage) => void,\n onId?: (id: string) => void,\n onRetry?: (retry: number) => void\n) {\n let message = newMessage();\n const decoder = new TextDecoder();\n\n return function onLine(\n line: Uint8Array,\n fieldLength: number,\n flush?: boolean\n ) {\n if (flush) {\n if (!isEmpty(message)) {\n onMessage?.(message);\n message = newMessage();\n }\n return;\n }\n\n if (line.length === 0) {\n onMessage?.(message);\n message = newMessage();\n } else if (fieldLength > 0) {\n const field = decoder.decode(line.subarray(0, fieldLength));\n const valueOffset =\n fieldLength + (line[fieldLength + 1] === ControlChars.Space ? 2 : 1);\n const value = decoder.decode(line.subarray(valueOffset));\n\n switch (field) {\n case \"data\":\n message.data = message.data ? `${message.data}\\n${value}` : value;\n break;\n case \"event\":\n message.event = value;\n break;\n case \"id\":\n onId?.((message.id = value));\n break;\n case \"retry\": {\n const retry = parseInt(value, 10);\n if (!Number.isNaN(retry)) {\n onRetry?.((message.retry = retry));\n }\n break;\n }\n }\n }\n };\n}\n\nfunction concat(a: Uint8Array, b: Uint8Array) {\n const res = new Uint8Array(a.length + b.length);\n res.set(a);\n res.set(b, a.length);\n return res;\n}\n\nfunction newMessage(): EventSourceMessage {\n return {\n data: \"\",\n event: \"\",\n id: \"\",\n retry: undefined,\n };\n}\n\nexport function convertEventStreamToIterableReadableDataStream(\n stream: ReadableStream\n) {\n const dataStream = new ReadableStream({\n async start(controller) {\n const enqueueLine = getMessages((msg) => {\n if (msg.data) controller.enqueue(msg.data);\n });\n const onLine = (\n line: Uint8Array,\n fieldLength: number,\n flush?: boolean\n ) => {\n enqueueLine(line, fieldLength, flush);\n if (flush) controller.close();\n };\n await getBytes(stream, getLines(onLine));\n },\n });\n return IterableReadableStream.fromReadableStream(dataStream);\n}\n\nfunction isEmpty(message: EventSourceMessage): boolean {\n return (\n message.data === \"\" &&\n message.event === \"\" &&\n message.id === \"\" &&\n message.retry === undefined\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"event_source_parse.js","names":[],"sources":["../../src/utils/event_source_parse.ts"],"sourcesContent":["/* eslint-disable prefer-template */\n/* eslint-disable default-case */\n// Adapted from https://github.com/gfortaine/fetch-event-source/blob/main/src/parse.ts\n// due to a packaging issue in the original.\n// MIT License\nimport { type Readable } from \"stream\";\nimport { IterableReadableStream } from \"@langchain/core/utils/stream\";\n\nexport const EventStreamContentType = \"text/event-stream\";\n\n/**\n * Represents a message sent in an event stream\n * https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format\n */\nexport interface EventSourceMessage {\n /** The event ID to set the EventSource object's last event ID value. */\n id: string;\n /** A string identifying the type of event described. */\n event: string;\n /** The event data */\n data: string;\n /** The reconnection interval (in milliseconds) to wait before retrying the connection */\n retry?: number;\n}\n\nfunction isNodeJSReadable(x: unknown): x is Readable {\n return x != null && typeof x === \"object\" && \"on\" in x;\n}\n\n/**\n * Converts a ReadableStream into a callback pattern.\n * @param stream The input ReadableStream.\n * @param onChunk A function that will be called on each new byte chunk in the stream.\n * @returns {Promise<void>} A promise that will be resolved when the stream closes.\n */\nexport async function getBytes(\n stream: ReadableStream<Uint8Array>,\n onChunk: (arr: Uint8Array, flush?: boolean) => void\n) {\n // stream is a Node.js Readable / PassThrough stream\n // this can happen if node-fetch is polyfilled\n if (isNodeJSReadable(stream)) {\n return new Promise<void>((resolve) => {\n stream.on(\"readable\", () => {\n let chunk;\n while (true) {\n chunk = stream.read();\n if (chunk == null) {\n onChunk(new Uint8Array(), true);\n break;\n }\n onChunk(chunk);\n }\n\n resolve();\n });\n });\n }\n\n const reader = stream.getReader();\n while (true) {\n const result = await reader.read();\n if (result.done) {\n onChunk(new Uint8Array(), true);\n break;\n }\n onChunk(result.value);\n }\n}\n\nconst enum ControlChars {\n NewLine = 10,\n CarriageReturn = 13,\n Space = 32,\n Colon = 58,\n}\n\n/**\n * Parses arbitary byte chunks into EventSource line buffers.\n * Each line should be of the format \"field: value\" and ends with \\r, \\n, or \\r\\n.\n * @param onLine A function that will be called on each new EventSource line.\n * @returns A function that should be called for each incoming byte chunk.\n */\nexport function getLines(\n onLine: (line: Uint8Array, fieldLength: number, flush?: boolean) => void\n) {\n let buffer: Uint8Array | undefined;\n let position: number;\n let fieldLength: number;\n let discardTrailingNewline = false;\n\n return function onChunk(arr: Uint8Array, flush?: boolean) {\n if (flush) {\n onLine(arr, 0, true);\n return;\n }\n\n if (buffer === undefined) {\n buffer = arr;\n position = 0;\n fieldLength = -1;\n } else {\n buffer = concat(buffer, arr);\n }\n\n const bufLength = buffer.length;\n let lineStart = 0;\n while (position < bufLength) {\n if (discardTrailingNewline) {\n if (buffer[position] === ControlChars.NewLine) {\n lineStart = ++position;\n }\n\n discardTrailingNewline = false;\n }\n\n let lineEnd = -1;\n for (; position < bufLength && lineEnd === -1; ++position) {\n switch (buffer[position]) {\n case ControlChars.Colon:\n if (fieldLength === -1) {\n fieldLength = position - lineStart;\n }\n break;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore:7029 \\r case below should fallthrough to \\n:\n case ControlChars.CarriageReturn:\n discardTrailingNewline = true;\n // eslint-disable-next-line no-fallthrough\n case ControlChars.NewLine:\n lineEnd = position;\n break;\n }\n }\n\n if (lineEnd === -1) {\n break;\n }\n\n onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\n lineStart = position;\n fieldLength = -1;\n }\n\n if (lineStart === bufLength) {\n buffer = undefined;\n } else if (lineStart !== 0) {\n buffer = buffer.subarray(lineStart);\n position -= lineStart;\n }\n };\n}\n\n/**\n * Parses line buffers into EventSourceMessages.\n * @param onId A function that will be called on each `id` field.\n * @param onRetry A function that will be called on each `retry` field.\n * @param onMessage A function that will be called on each message.\n * @returns A function that should be called for each incoming line buffer.\n */\nexport function getMessages(\n onMessage?: (msg: EventSourceMessage) => void,\n onId?: (id: string) => void,\n onRetry?: (retry: number) => void\n) {\n let message = newMessage();\n const decoder = new TextDecoder();\n\n return function onLine(\n line: Uint8Array,\n fieldLength: number,\n flush?: boolean\n ) {\n if (flush) {\n if (!isEmpty(message)) {\n onMessage?.(message);\n message = newMessage();\n }\n return;\n }\n\n if (line.length === 0) {\n onMessage?.(message);\n message = newMessage();\n } else if (fieldLength > 0) {\n const field = decoder.decode(line.subarray(0, fieldLength));\n const valueOffset =\n fieldLength + (line[fieldLength + 1] === ControlChars.Space ? 2 : 1);\n const value = decoder.decode(line.subarray(valueOffset));\n\n switch (field) {\n case \"data\":\n message.data = message.data ? `${message.data}\\n${value}` : value;\n break;\n case \"event\":\n message.event = value;\n break;\n case \"id\":\n onId?.((message.id = value));\n break;\n case \"retry\": {\n const retry = parseInt(value, 10);\n if (!Number.isNaN(retry)) {\n onRetry?.((message.retry = retry));\n }\n break;\n }\n }\n }\n };\n}\n\nfunction concat(a: Uint8Array, b: Uint8Array) {\n const res = new Uint8Array(a.length + b.length);\n res.set(a);\n res.set(b, a.length);\n return res;\n}\n\nfunction newMessage(): EventSourceMessage {\n return {\n data: \"\",\n event: \"\",\n id: \"\",\n retry: undefined,\n };\n}\n\nexport function convertEventStreamToIterableReadableDataStream(\n stream: ReadableStream\n) {\n const dataStream = new ReadableStream({\n async start(controller) {\n const enqueueLine = getMessages((msg) => {\n if (msg.data) controller.enqueue(msg.data);\n });\n const onLine = (\n line: Uint8Array,\n fieldLength: number,\n flush?: boolean\n ) => {\n enqueueLine(line, fieldLength, flush);\n if (flush) controller.close();\n };\n await getBytes(stream, getLines(onLine));\n },\n });\n return IterableReadableStream.fromReadableStream(dataStream);\n}\n\nfunction isEmpty(message: EventSourceMessage): boolean {\n return (\n message.data === \"\" &&\n message.event === \"\" &&\n message.id === \"\" &&\n message.retry === undefined\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"event_source_parse.js","names":[],"sources":["../../src/utils/event_source_parse.ts"],"sourcesContent":["/* oxlint-disable prefer-template */\n/* oxlint-disable default-case */\n// Adapted from https://github.com/gfortaine/fetch-event-source/blob/main/src/parse.ts\n// due to a packaging issue in the original.\n// MIT License\nimport { type Readable } from \"stream\";\nimport { IterableReadableStream } from \"@langchain/core/utils/stream\";\n\nexport const EventStreamContentType = \"text/event-stream\";\n\n/**\n * Represents a message sent in an event stream\n * https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format\n */\nexport interface EventSourceMessage {\n /** The event ID to set the EventSource object's last event ID value. */\n id: string;\n /** A string identifying the type of event described. */\n event: string;\n /** The event data */\n data: string;\n /** The reconnection interval (in milliseconds) to wait before retrying the connection */\n retry?: number;\n}\n\nfunction isNodeJSReadable(x: unknown): x is Readable {\n return x != null && typeof x === \"object\" && \"on\" in x;\n}\n\n/**\n * Converts a ReadableStream into a callback pattern.\n * @param stream The input ReadableStream.\n * @param onChunk A function that will be called on each new byte chunk in the stream.\n * @returns {Promise<void>} A promise that will be resolved when the stream closes.\n */\nexport async function getBytes(\n stream: ReadableStream<Uint8Array>,\n onChunk: (arr: Uint8Array, flush?: boolean) => void\n) {\n // stream is a Node.js Readable / PassThrough stream\n // this can happen if node-fetch is polyfilled\n if (isNodeJSReadable(stream)) {\n return new Promise<void>((resolve) => {\n stream.on(\"readable\", () => {\n let chunk;\n while (true) {\n chunk = stream.read();\n if (chunk == null) {\n onChunk(new Uint8Array(), true);\n break;\n }\n onChunk(chunk);\n }\n\n resolve();\n });\n });\n }\n\n const reader = stream.getReader();\n while (true) {\n const result = await reader.read();\n if (result.done) {\n onChunk(new Uint8Array(), true);\n break;\n }\n onChunk(result.value);\n }\n}\n\nconst enum ControlChars {\n NewLine = 10,\n CarriageReturn = 13,\n Space = 32,\n Colon = 58,\n}\n\n/**\n * Parses arbitary byte chunks into EventSource line buffers.\n * Each line should be of the format \"field: value\" and ends with \\r, \\n, or \\r\\n.\n * @param onLine A function that will be called on each new EventSource line.\n * @returns A function that should be called for each incoming byte chunk.\n */\nexport function getLines(\n onLine: (line: Uint8Array, fieldLength: number, flush?: boolean) => void\n) {\n let buffer: Uint8Array | undefined;\n let position: number;\n let fieldLength: number;\n let discardTrailingNewline = false;\n\n return function onChunk(arr: Uint8Array, flush?: boolean) {\n if (flush) {\n onLine(arr, 0, true);\n return;\n }\n\n if (buffer === undefined) {\n buffer = arr;\n position = 0;\n fieldLength = -1;\n } else {\n buffer = concat(buffer, arr);\n }\n\n const bufLength = buffer.length;\n let lineStart = 0;\n while (position < bufLength) {\n if (discardTrailingNewline) {\n if (buffer[position] === ControlChars.NewLine) {\n lineStart = ++position;\n }\n\n discardTrailingNewline = false;\n }\n\n let lineEnd = -1;\n for (; position < bufLength && lineEnd === -1; ++position) {\n switch (buffer[position]) {\n case ControlChars.Colon:\n if (fieldLength === -1) {\n fieldLength = position - lineStart;\n }\n break;\n // oxlint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore:7029 \\r case below should fallthrough to \\n:\n case ControlChars.CarriageReturn:\n discardTrailingNewline = true;\n // oxlint-disable-next-line no-fallthrough\n case ControlChars.NewLine:\n lineEnd = position;\n break;\n }\n }\n\n if (lineEnd === -1) {\n break;\n }\n\n onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\n lineStart = position;\n fieldLength = -1;\n }\n\n if (lineStart === bufLength) {\n buffer = undefined;\n } else if (lineStart !== 0) {\n buffer = buffer.subarray(lineStart);\n position -= lineStart;\n }\n };\n}\n\n/**\n * Parses line buffers into EventSourceMessages.\n * @param onId A function that will be called on each `id` field.\n * @param onRetry A function that will be called on each `retry` field.\n * @param onMessage A function that will be called on each message.\n * @returns A function that should be called for each incoming line buffer.\n */\nexport function getMessages(\n onMessage?: (msg: EventSourceMessage) => void,\n onId?: (id: string) => void,\n onRetry?: (retry: number) => void\n) {\n let message = newMessage();\n const decoder = new TextDecoder();\n\n return function onLine(\n line: Uint8Array,\n fieldLength: number,\n flush?: boolean\n ) {\n if (flush) {\n if (!isEmpty(message)) {\n onMessage?.(message);\n message = newMessage();\n }\n return;\n }\n\n if (line.length === 0) {\n onMessage?.(message);\n message = newMessage();\n } else if (fieldLength > 0) {\n const field = decoder.decode(line.subarray(0, fieldLength));\n const valueOffset =\n fieldLength + (line[fieldLength + 1] === ControlChars.Space ? 2 : 1);\n const value = decoder.decode(line.subarray(valueOffset));\n\n switch (field) {\n case \"data\":\n message.data = message.data ? `${message.data}\\n${value}` : value;\n break;\n case \"event\":\n message.event = value;\n break;\n case \"id\":\n onId?.((message.id = value));\n break;\n case \"retry\": {\n const retry = parseInt(value, 10);\n if (!Number.isNaN(retry)) {\n onRetry?.((message.retry = retry));\n }\n break;\n }\n }\n }\n };\n}\n\nfunction concat(a: Uint8Array, b: Uint8Array) {\n const res = new Uint8Array(a.length + b.length);\n res.set(a);\n res.set(b, a.length);\n return res;\n}\n\nfunction newMessage(): EventSourceMessage {\n return {\n data: \"\",\n event: \"\",\n id: \"\",\n retry: undefined,\n };\n}\n\nexport function convertEventStreamToIterableReadableDataStream(\n stream: ReadableStream\n) {\n const dataStream = new ReadableStream({\n async start(controller) {\n const enqueueLine = getMessages((msg) => {\n if (msg.data) controller.enqueue(msg.data);\n });\n const onLine = (\n line: Uint8Array,\n fieldLength: number,\n flush?: boolean\n ) => {\n enqueueLine(line, fieldLength, flush);\n if (flush) controller.close();\n };\n await getBytes(stream, getLines(onLine));\n },\n });\n return IterableReadableStream.fromReadableStream(dataStream);\n}\n\nfunction isEmpty(message: EventSourceMessage): boolean {\n return (\n message.data === \"\" &&\n message.event === \"\" &&\n message.id === \"\" &&\n message.retry === undefined\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/together-ai",
3
- "version": "0.0.1",
3
+ "version": "0.1.0",
4
4
  "description": "Together AI integrations for LangChain.js",
5
5
  "author": "LangChain",
6
6
  "license": "MIT",
@@ -13,44 +13,24 @@
13
13
  "url": "git@github.com:langchain-ai/langchainjs.git"
14
14
  },
15
15
  "homepage": "https://github.com/langchain-ai/langchainjs/tree/main/libs/providers/langchain-together-ai/",
16
- "scripts": {
17
- "build": "turbo build:compile --filter @langchain/together-ai --output-logs new-only",
18
- "build:compile": "tsdown",
19
- "lint:eslint": "eslint --cache src/",
20
- "lint:dpdm": "dpdm --skip-dynamic-imports circular --exit-code circular:1 --no-warning --no-tree src/*.ts src/**/*.ts",
21
- "lint": "pnpm lint:eslint && pnpm lint:dpdm",
22
- "lint:fix": "pnpm lint:eslint --fix && pnpm lint:dpdm",
23
- "clean": "rm -rf .turbo dist/",
24
- "test": "vitest run",
25
- "test:watch": "vitest",
26
- "test:int": "vitest run --mode int",
27
- "test:standard:unit": "vitest run --mode standard-unit",
28
- "test:standard:int": "vitest run --mode standard-int",
29
- "test:standard": "pnpm test:standard:unit && pnpm test:standard:int",
30
- "format": "prettier --write \"src\"",
31
- "format:check": "prettier --check \"src\""
32
- },
33
16
  "dependencies": {
34
- "@langchain/openai": "workspace:*"
17
+ "@langchain/openai": "1.4.2"
35
18
  },
36
19
  "peerDependencies": {
37
20
  "@langchain/core": "^1.0.0"
38
21
  },
39
22
  "devDependencies": {
40
- "@langchain/core": "workspace:^",
41
- "@langchain/eslint": "workspace:*",
42
- "@langchain/openai": "workspace:^",
43
- "@langchain/standard-tests": "workspace:*",
44
- "@langchain/tsconfig": "workspace:*",
45
23
  "@tsconfig/recommended": "^1.0.3",
46
24
  "@vitest/coverage-v8": "^3.2.4",
47
- "dotenv": "^16.3.1",
25
+ "dotenv": "^17.4.0",
48
26
  "dpdm": "^3.14.0",
49
- "eslint": "^9.34.0",
50
- "prettier": "^3.5.0",
51
27
  "typescript": "~5.8.3",
52
- "vitest": "^3.2.4",
53
- "zod": "^3.25.76 || ^4"
28
+ "vitest": "^4.1.2",
29
+ "zod": "^3.25.76 || ^4",
30
+ "@langchain/core": "^1.1.39",
31
+ "@langchain/openai": "^1.4.2",
32
+ "@langchain/standard-tests": "0.0.23",
33
+ "@langchain/tsconfig": "0.0.1"
54
34
  },
55
35
  "publishConfig": {
56
36
  "access": "public"
@@ -77,5 +57,18 @@
77
57
  "README.md",
78
58
  "LICENSE"
79
59
  ],
80
- "module": "./dist/index.js"
81
- }
60
+ "module": "./dist/index.js",
61
+ "scripts": {
62
+ "build": "turbo build:compile --filter @langchain/together-ai --output-logs new-only",
63
+ "build:compile": "tsdown",
64
+ "clean": "rm -rf .turbo dist/",
65
+ "test": "vitest run",
66
+ "test:watch": "vitest",
67
+ "test:int": "vitest run --mode int",
68
+ "test:standard:unit": "vitest run --mode standard-unit",
69
+ "test:standard:int": "vitest run --mode standard-int",
70
+ "test:standard": "pnpm test:standard:unit && pnpm test:standard:int",
71
+ "format": "prettier --write \"src\"",
72
+ "format:check": "prettier --check \"src\""
73
+ }
74
+ }