From 88ee9b09a7b18a1fa92f42b2244f1579d4442391 Mon Sep 17 00:00:00 2001 From: Mingxin Hou <136245460+mingxin0607@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:56:22 -0700 Subject: [PATCH] Fireworks ai chat model (#2596) * fireworks chat model * add chatFireworks to streamAvaliableLLMs * add model parameter input * Update ChatFireworks.ts * fix linting --------- Co-authored-by: Henry Heng --- .../credentials/FireworksApi.credential.ts | 23 +++++ .../chatmodels/ChatFireworks/ChatFireworks.ts | 79 ++++++++++++++++++ .../chatmodels/ChatFireworks/Fireworks.png | Bin 0 -> 6809 bytes packages/server/src/utils/index.ts | 3 +- 4 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 packages/components/credentials/FireworksApi.credential.ts create mode 100644 packages/components/nodes/chatmodels/ChatFireworks/ChatFireworks.ts create mode 100644 packages/components/nodes/chatmodels/ChatFireworks/Fireworks.png diff --git a/packages/components/credentials/FireworksApi.credential.ts b/packages/components/credentials/FireworksApi.credential.ts new file mode 100644 index 00000000..11e0a245 --- /dev/null +++ b/packages/components/credentials/FireworksApi.credential.ts @@ -0,0 +1,23 @@ +import { INodeParams, INodeCredential } from '../src/Interface' + +class FireworksApi implements INodeCredential { + label: string + name: string + version: number + inputs: INodeParams[] + + constructor() { + this.label = 'Fireworks API' + this.name = 'fireworksApi' + this.version = 1.0 + this.inputs = [ + { + label: 'Fireworks Api Key', + name: 'fireworksApiKey', + type: 'password' + } + ] + } +} + +module.exports = { credClass: FireworksApi } diff --git a/packages/components/nodes/chatmodels/ChatFireworks/ChatFireworks.ts b/packages/components/nodes/chatmodels/ChatFireworks/ChatFireworks.ts new file mode 100644 index 00000000..91b19b22 --- /dev/null +++ b/packages/components/nodes/chatmodels/ChatFireworks/ChatFireworks.ts @@ -0,0 +1,79 @@ +import { BaseCache } from '@langchain/core/caches' +import { ChatFireworks } from '@langchain/community/chat_models/fireworks' +import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface' +import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils' + +class ChatFireworks_ChatModels implements INode { + label: string + name: string + version: number + type: string + icon: string + category: string + description: string + baseClasses: string[] + credential: INodeParams + inputs: INodeParams[] + + constructor() { + this.label = 'ChatFireworks' + this.name = 'chatFireworks' + this.version = 1.0 + this.type = 'ChatFireworks' + this.icon = 'Fireworks.png' + this.category = 'Chat Models' + this.description = 'Wrapper around Fireworks Chat Endpoints' + this.baseClasses = [this.type, ...getBaseClasses(ChatFireworks)] + this.credential = { + label: 'Connect Credential', + name: 'credential', + type: 'credential', + credentialNames: ['fireworksApi'] + } + this.inputs = [ + { + label: 'Cache', + name: 'cache', + type: 'BaseCache', + optional: true + }, + { + label: 'Model', + name: 'modelName', + type: 'string', + default: 'accounts/fireworks/models/llama-v2-13b-chat', + placeholder: 'accounts/fireworks/models/llama-v2-13b-chat' + }, + { + label: 'Temperature', + name: 'temperature', + type: 'number', + step: 0.1, + default: 0.9, + optional: true + } + ] + } + + async init(nodeData: INodeData, _: string, options: ICommonObject): Promise { + const cache = nodeData.inputs?.cache as BaseCache + const temperature = nodeData.inputs?.temperature as string + const modelName = nodeData.inputs?.modelName as string + + const credentialData = await getCredentialData(nodeData.credential ?? '', options) + const fireworksApiKey = getCredentialParam('fireworksApiKey', credentialData, nodeData) + + const obj: Partial = { + fireworksApiKey, + model: modelName, + modelName, + temperature: temperature ? parseFloat(temperature) : undefined + } + if (cache) obj.cache = cache + + const model = new ChatFireworks(obj) + return model + } +} + +module.exports = { nodeClass: ChatFireworks_ChatModels } diff --git a/packages/components/nodes/chatmodels/ChatFireworks/Fireworks.png b/packages/components/nodes/chatmodels/ChatFireworks/Fireworks.png new file mode 100644 index 0000000000000000000000000000000000000000..aecb2a27b6e97b719ca700e0eac5f1513139a8ec GIT binary patch literal 6809 zcmd^E_ct8g)3yk!cUJF2?_HGDqFXIW^xj!DdRcu%Cw!EMPIPwl7M&nbLez~CMDH!~ zdjF2^4|nFAInT_QIrq-J=gyO;r=v!IOM{DshDMDxBmYEVm-@OU$KOr6~I?t z4UASlO}CGRMq{9^tY{cyd1Mh1`qrrJX)#Y-1Mibw7P+%XrZIzx9x?H@kqSSPVYvyh zM$=__o@f>l{mpFTTXIDbjsNmm$;r>4!+4+2b2nZn#wJ@H8tHLAo3p+zs!f(&rcX_o zO8l|c&q!0B&d(F^g*M;xwOp^eh5eBUxwboM!>IsaqQlT$j8WPpDWb*A#$iT*`-!FX zjzvd6U|K>!uTI>ic%m8 z{-#`1K(OToxpcv?H-MB=~7=pA`$P_<{7n27ikMqC*?%!g4zD)@z9FwFA-pgqgxsCTSIf1 zzu!{V;VO5Sg5iXluW_CtNhs>U|Q6VnQ zC~GJq#&4HS)oU` zY+~r27aWhQSziEkZu|a7|L!z5_-Pd8SX9EpH|iy@xQ^!Ma;Kiz@l=oZ++d00nGgt7 zIAD*^Y%_+hI|yUrtN3o!YvmwegJh96kFkiVgA{8NL}kxq^E3()nn~TP0QHaoG?@3# zm%IElA+Q?dI5RZ4eHCe@@=qM_qqV{ZFRD{_TusgAX#QhAN%7EV^Ufi;^RJc+ z{$#VQFZG|4(}fcb`sBwYG>WEwa?~zl8hbAdPM*vE6x#hY$m|{Tw$o$l*1>JRTtm9I zDJqqfHWdR@xfiIJ<2`1Rs!Iml}D5qN`ZF#d-P2)m@xD%!)}@V*>!xC5rOR&-?J0PZ`rkR!T=v-<0hW zApc@QJm<-zBcQh)So{W39~$2aOLneaEbOX>dM^%UqFpcUDZx|{$=9l@$&{BN&kgB1 z$M#g^A(gD8y`RC?W}kn&Xh@@j5SsWp)NautPdG@)p>-JoEkL;ojGj=i`gKRmFsWL& zCFSHQok5W#$&H8V#Wn6XCCW5T**y6k9Fnb0n0;8@a8)98$+?`0KVtsetdp%D0aRwx z-5)~Rgnb`yN%FZE21M}b`r*kd(tGjQfcY>1JdX2pW8h2`Vm#7gnOH9L2aVZLZ{=Xd z9VnAiRGPSP-I4Cwq9W}?iBiYUw6G@vh-i!tM&!S0!|4B#h=T|0<-Sg!Ab@0`DOw9D zmn<6N@V+I2F?G#2rZ~zcW1^b!SRIkOl|*U48@+)hsj(n`8pe=%=fT5O`uTTWyV5R@ z1~68z-a(&5fQs3H!BUB*Rm68LNez5`QLHyezULaD{8X~I9#w^#9FW7TZb0+_V!7obPz>CEw4|c zN~lzCS*0YAbvH+D39D5I-XYQ>zv5gh*PoWN{SW5iY(|U6`N31S8s^w*Wz}{tzy3G5$6|8k8h%;}58?P10b=gb;Q%OD%rpXUCppFQ5oAI}VO=1sD8NY6>p z7(tlv_@)V*KV4LWKpk~kTqT8lXFy|sq&F~D{3j*mm+ll%dt@wUa4~VO7{oOaZyKSs!pAGEAknkTFMwL7%dss zeT}}F?ogou_aIa-fEIy)rxyH9_Jq2`>EvtIds@74>@$>2${~pf-k?f2lfPY-6RAwP zC&uq6rM%`CsHE^&4Zjj(PFZf95cP&%2s&g!n!6%7M|3BC9+PwEs0DTTVj#;<8PvwJ zMO|Wd_2`n8nY%2;1==J=`7Y@6P^5apP^()j8|9h7L!ikFdbSm#dQCeRBgdvlJEr|eY=+a zb9t~Umio=h<#T9`cg@OVH7PQ^g((or$P|+3t;3=suYX`{eD*lTi`Snx5yx&dh7>RN zsiQIvDkA>b5$v_4GQ2UXpk;{!`qoJ4PfjZl&KC9hlbjAK=i5g~xF;@LfQgT14@1ai zA!H+ffdN0N_Jb%ATE{SQtaPL@?kpg(x;>3U(j zp-s;(?aOxV=Q|EZ_IvpT`r9763@iMnIBGR+cnd)Ejc=`vEp#bvXp8*FT&jM?@w92D z;hS{qQN8jj=2po+ZNOzLB8% z2UIbu=ux!K57^6Je7c!KUkn>1_s8V4#kXf&eteSQaBuSc(Bxhh_^-2w)C@nDPcXR& z7Ii~KfZ526IYr|+&r|X@+Q{xIR0_DU*vdCf|AkVgyQQDUtSMM74)||)f;FI7u!p9y z<_xH7Cz-e?Uo~J8dAN~CqU)D-cot$T%h{?WzxZQIl*QuuF^W>AiP46x*hD)cw#C-r zTW_~j1tpgwjG|BjG2@oul7Utj&MqJLBrQ_^?GTOR^t?h;ZhLsTUoSvR`HR z@PmKj^#|_>IWAe$uxP1QL=jmhvc)9pHvwr>`DQ}Pzk4UgDb0Xc-uP= z{KuGWN~-8mobiayWH%n+7CwKaekEq zBw{Omr_*bH(Tjr9ufaBjq&FXAg^3WD$UdB@s0TU z*g2Tf%C+Pz$4K~1iddvvZ(4^~cn#Q>3%xCXK|-`6`^KCjdcc2mVWM*^1+)1q9XQ7> z@UZ+=m8asK_LN+5Aw{hCv6|UW6PgZ znHhm^ss_j#Mt8K@>xa^VvmLgg7u(kP$?YJP=yBpNJ`A;uwUw249^Z-vOnvTfR7QlWVn2nY~1ri8G)C zM3{UJer>&o6mv&SA<##s>$AC-mO`0QX9A?FJ&jIUoFCXndi?1>Y%PqNZIR0rG*8Fx zUssGSwpD-=i5q6Wsbzg(FLIt4O#G6CW0Z>P@ym5 z^1n@)M^K4`UhnTNaG2S{VD@kMaxl!P+w1wXk?*j;Bm`7$S|k=74H=Bp>?lpHdyf`A zI>hI~r-NRnzzmT}=+W)bQVsmX`$tgf{7i<6zQrVT=&Tgj-PMQ_o@<52X!YNLf>g8+|!Sx(&yIV`OJqx5vDj}9@^CRdnb7zfNFqh2Z z{3#wj0O#6q&y5`I9N8>@TIsqze@-Y*$ua!P_cY-=M?K#0jFgcv%cvC+vn>CNbTuDV z463e)JH37b*j;PBD>R{J83 z<>>a^fdG98uZ_B(sU4mxa`B_O2va6?vPv}kJYafr4{>!l19dqV(o*vwZSo!7FgmBeGL8eb$Jqp>Ige-v)|PsJi3z!QNO+I5 zq23mWB2ja8DrqN5ZE^Lfy)UwgICZ!`3-tiaQ8iRVWUUAYBiCCAL)@`P=7j^s1N{5M zZEei?`>$U9xi8@{O2F*bFjvsC7(1uYSfm@aW0ov^q-&#WB%Br z{ZxA(nC3$5JG!@Eq^fMmgO>dEqUPr^zE>lq7GfV{^j{Zpw(z3q^4qw1Vgr*UD!sMK zGnd-$ZL`5qOnxU|k~STdfesD)`y@?<#B4EUI;-Qgcv3%_)`QPn-4C9ouLtQn3N2b0 zsZE;PD5(gv5)3@Ucorr)^5t(9RA^ z%}RhRM9!+H@8wyk1u0E(?cejH9P^d zzRZ_s^Jd;pnrO8axwjoFgxB83f5c|n;5~SW;^o;mc^+?_T$b`A8w)zR&AlI&5oq+T zc_T5_<_Q-&C21^_UHN&VZ4X#-tn_i9eXY9RpVLofCi|mXAa!QJ`UTGh1}0N=onvdo zer~w6!V_0p#G8!-&Q^~QBL2P`m7fRLGTrkwdf-u-+Zal_&wd50f=)u)Tl`{%w>P{} zsV)<1y^6_?mXj}Ul}%L-cGIZcD2`)5gYlpf)O*dqmfF7@ z)(tLr2k+|Hb&0!*xhICB;)T0DaUm&I?!j3&r3eo5+Yj9cN>o$cAZLSlm!3!k;`Ahs zcd*18rCcC|70ZrNj$-LsQCc!Jh(Tg?ao*QsnVT*B^d_=A_^QCA#fGoFcf2k50!KH} zev#|7a|ThI(0p>0{+lNbJS4!6^07%RqFUfx4m(%b_9t)Jli6|DvIkcN=8lm-3ZzK) z)r$WyuGE{#Ck1$5%9Oa?Tp?S9AYleYPCPz)8mBaF9F5;^V;rHlDPEpcTGu!Qr5-(= zxq*S^=H6OGqK4mHzR|^HK(8+&Qsacd^F*%0ETNu(*ZS&8dWXhkj8iX*31Q3Qhhc)cNmL!W$JcwY3Dg8bYnH)9~dXU&?(>0WU;2smy3gUw~?u3FB|g5}^i&7k1o;;YYDomiEbm%@b z;RMM}I$N$Qaupve>DE1B4QHc)~X^~v>*{?5~eH6EuP@5E%FCk6>vWt8yEGL6Fx zRKK@LhN=)g)aO7und#<|-ArJW_&kzs3LtFZ+XP~5H{E?Na=ys+ug~ttqg=dDG`+-R zfdDDh!;7I5Ba$HrXyhIeblmrA*@YG)rIYCPXQ#XGiNzaCQX+!WhhMvyOKtBg?_XUl z{YM?556TF4pV2!@*7@fpv