Skip to content

Commit

Permalink
Feature/TogetherAI (#2318)
Browse files Browse the repository at this point in the history
add togetherAI
  • Loading branch information
HenryHengZJ authored May 4, 2024
1 parent 9971627 commit 5a137a4
Show file tree
Hide file tree
Showing 6 changed files with 173 additions and 1 deletion.
23 changes: 23 additions & 0 deletions packages/components/credentials/TogetherAIApi.credential.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { INodeParams, INodeCredential } from '../src/Interface'

class TogetherAIApi implements INodeCredential {
label: string
name: string
version: number
inputs: INodeParams[]

constructor() {
this.label = 'TogetherAI API'
this.name = 'togetherAIApi'
this.version = 1.0
this.inputs = [
{
label: 'TogetherAI Api Key',
name: 'togetherAIApiKey',
type: 'password'
}
]
}
}

module.exports = { credClass: TogetherAIApi }
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import { BaseCache } from '@langchain/core/caches'
import { ChatTogetherAI } from '@langchain/community/chat_models/togetherai'
import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'

class ChatTogetherAI_ChatModels implements INode {
label: string
name: string
version: number
type: string
icon: string
category: string
description: string
baseClasses: string[]
inputs: INodeParams[]
credential: INodeParams

constructor() {
this.label = 'ChatTogetherAI'
this.name = 'chatTogetherAI'
this.version = 1.0
this.type = 'ChatTogetherAI'
this.icon = 'togetherai.png'
this.category = 'Chat Models'
this.description = 'Wrapper around TogetherAI large language models'
this.baseClasses = [this.type, ...getBaseClasses(ChatTogetherAI)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['togetherAIApi']
}
this.inputs = [
{
label: 'Cache',
name: 'cache',
type: 'BaseCache',
optional: true
},
{
label: 'Model Name',
name: 'modelName',
type: 'string',
placeholder: 'mixtral-8x7b-32768',
description: 'Refer to <a target="_blank" href="https://docs.together.ai/docs/inference-models">models</a> page'
},
{
label: 'Temperature',
name: 'temperature',
type: 'number',
step: 0.1,
default: 0.9,
optional: true
}
]
}

async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const modelName = nodeData.inputs?.modelName as string
const cache = nodeData.inputs?.cache as BaseCache
const temperature = nodeData.inputs?.temperature as string
const streaming = nodeData.inputs?.streaming as boolean

const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const togetherAIApiKey = getCredentialParam('togetherAIApiKey', credentialData, nodeData)

const obj: any = {
model: modelName,
temperature: parseFloat(temperature),
togetherAIApiKey: togetherAIApiKey,
streaming: streaming ?? true
}
if (cache) obj.cache = cache

const model = new ChatTogetherAI(obj)
return model
}
}

module.exports = { nodeClass: ChatTogetherAI_ChatModels }
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import { TogetherAIEmbeddings, TogetherAIEmbeddingsParams } from '@langchain/community/embeddings/togetherai'
import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'

class TogetherAIEmbedding_Embeddings implements INode {
label: string
name: string
version: number
type: string
icon: string
category: string
description: string
baseClasses: string[]
inputs: INodeParams[]
credential: INodeParams

constructor() {
this.label = 'TogetherAIEmbedding'
this.name = 'togetherAIEmbedding'
this.version = 1.0
this.type = 'TogetherAIEmbedding'
this.icon = 'togetherai.png'
this.category = 'Embeddings'
this.description = 'TogetherAI Embedding models to generate embeddings for a given text'
this.baseClasses = [this.type, ...getBaseClasses(TogetherAIEmbeddings)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['togetherAIApi']
}
this.inputs = [
{
label: 'Cache',
name: 'cache',
type: 'BaseCache',
optional: true
},
{
label: 'Model Name',
name: 'modelName',
type: 'string',
placeholder: 'sentence-transformers/msmarco-bert-base-dot-v5',
description: 'Refer to <a target="_blank" href="https://docs.together.ai/docs/embedding-models">embedding models</a> page'
}
]
}

async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const modelName = nodeData.inputs?.modelName as string

const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const togetherAIApiKey = getCredentialParam('togetherAIApiKey', credentialData, nodeData)

const obj: Partial<TogetherAIEmbeddingsParams> = {
modelName: modelName,
apiKey: togetherAIApiKey,
//@ts-ignore
model: modelName,
togetherAIApiKey: togetherAIApiKey
}

const model = new TogetherAIEmbeddings(obj)
return model
}
}

module.exports = { nodeClass: TogetherAIEmbedding_Embeddings }
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion packages/server/src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1024,7 +1024,8 @@ export const isFlowValidForStream = (reactFlowNodes: IReactFlowNode[], endingNod
'chatMistralAI',
'groqChat',
'chatCohere',
'chatGoogleGenerativeAI'
'chatGoogleGenerativeAI',
'chatTogetherAI'
],
LLMs: ['azureOpenAI', 'openAI', 'ollama']
}
Expand Down

0 comments on commit 5a137a4

Please sign in to comment.