modelmix 2.2.8 → 2.3.8
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/README.md +19 -6
- package/demo/demo.mjs +24 -16
- package/demo/lmstudio.mjs +1 -1
- package/demo/node_modules/.package-lock.json +0 -47
- package/demo/package-lock.json +1 -50
- package/demo/package.json +1 -3
- package/demo/prompt.md +25 -0
- package/demo/stream.mjs +3 -3
- package/index.js +88 -2
- package/package.json +4 -2
- package/demo/node_modules/debug/LICENSE +0 -20
- package/demo/node_modules/debug/README.md +0 -481
- package/demo/node_modules/debug/node_modules/ms/index.js +0 -162
- package/demo/node_modules/debug/node_modules/ms/license.md +0 -21
- package/demo/node_modules/debug/node_modules/ms/package.json +0 -37
- package/demo/node_modules/debug/node_modules/ms/readme.md +0 -60
- package/demo/node_modules/debug/package.json +0 -59
- package/demo/node_modules/debug/src/browser.js +0 -269
- package/demo/node_modules/debug/src/common.js +0 -274
- package/demo/node_modules/debug/src/index.js +0 -10
- package/demo/node_modules/debug/src/node.js +0 -263
- package/demo/node_modules/lemonlog/README.md +0 -133
- package/demo/node_modules/lemonlog/demo/demo.js +0 -31
- package/demo/node_modules/lemonlog/index.js +0 -94
- package/demo/node_modules/lemonlog/package.json +0 -31
- package/demo/node_modules/openai/CHANGELOG.md +0 -1176
- package/demo/node_modules/openai/LICENSE +0 -201
- package/demo/node_modules/openai/README.md +0 -616
- package/demo/node_modules/openai/_shims/MultipartBody.d.ts +0 -9
- package/demo/node_modules/openai/_shims/MultipartBody.d.ts.map +0 -1
- package/demo/node_modules/openai/_shims/MultipartBody.js +0 -16
- package/demo/node_modules/openai/_shims/MultipartBody.js.map +0 -1
- package/demo/node_modules/openai/_shims/MultipartBody.mjs +0 -12
- package/demo/node_modules/openai/_shims/MultipartBody.mjs.map +0 -1
- package/demo/node_modules/openai/_shims/README.md +0 -46
- package/demo/node_modules/openai/_shims/auto/runtime-bun.d.ts +0 -5
- package/demo/node_modules/openai/_shims/auto/runtime-bun.d.ts.map +0 -1
- package/demo/node_modules/openai/_shims/auto/runtime-bun.js +0 -21
- package/demo/node_modules/openai/_shims/auto/runtime-bun.js.map +0 -1
- package/demo/node_modules/openai/_shims/auto/runtime-bun.mjs +0 -2
- package/demo/node_modules/openai/_shims/auto/runtime-bun.mjs.map +0 -1
- package/demo/node_modules/openai/_shims/auto/runtime-node.d.ts +0 -5
- package/demo/node_modules/openai/_shims/auto/runtime-node.d.ts.map +0 -1
- package/demo/node_modules/openai/_shims/auto/runtime-node.js +0 -21
- package/demo/node_modules/openai/_shims/auto/runtime-node.js.map +0 -1
- package/demo/node_modules/openai/_shims/auto/runtime-node.mjs +0 -2
- package/demo/node_modules/openai/_shims/auto/runtime-node.mjs.map +0 -1
- package/demo/node_modules/openai/_shims/auto/runtime.d.ts +0 -5
- package/demo/node_modules/openai/_shims/auto/runtime.d.ts.map +0 -1
- package/demo/node_modules/openai/_shims/auto/runtime.js +0 -21
- package/demo/node_modules/openai/_shims/auto/runtime.js.map +0 -1
- package/demo/node_modules/openai/_shims/auto/runtime.mjs +0 -2
- package/demo/node_modules/openai/_shims/auto/runtime.mjs.map +0 -1
- package/demo/node_modules/openai/_shims/auto/types-node.d.ts +0 -5
- package/demo/node_modules/openai/_shims/auto/types-node.d.ts.map +0 -1
- package/demo/node_modules/openai/_shims/auto/types-node.js +0 -21
- package/demo/node_modules/openai/_shims/auto/types-node.js.map +0 -1
- package/demo/node_modules/openai/_shims/auto/types-node.mjs +0 -2
- package/demo/node_modules/openai/_shims/auto/types-node.mjs.map +0 -1
- package/demo/node_modules/openai/_shims/auto/types.d.ts +0 -101
- package/demo/node_modules/openai/_shims/auto/types.js +0 -3
- package/demo/node_modules/openai/_shims/auto/types.mjs +0 -3
- package/demo/node_modules/openai/_shims/bun-runtime.d.ts +0 -6
- package/demo/node_modules/openai/_shims/bun-runtime.d.ts.map +0 -1
- package/demo/node_modules/openai/_shims/bun-runtime.js +0 -14
- package/demo/node_modules/openai/_shims/bun-runtime.js.map +0 -1
- package/demo/node_modules/openai/_shims/bun-runtime.mjs +0 -10
- package/demo/node_modules/openai/_shims/bun-runtime.mjs.map +0 -1
- package/demo/node_modules/openai/_shims/index.d.ts +0 -81
- package/demo/node_modules/openai/_shims/index.js +0 -13
- package/demo/node_modules/openai/_shims/index.mjs +0 -7
- package/demo/node_modules/openai/_shims/manual-types.d.ts +0 -12
- package/demo/node_modules/openai/_shims/manual-types.js +0 -3
- package/demo/node_modules/openai/_shims/manual-types.mjs +0 -3
- package/demo/node_modules/openai/_shims/node-runtime.d.ts +0 -3
- package/demo/node_modules/openai/_shims/node-runtime.d.ts.map +0 -1
- package/demo/node_modules/openai/_shims/node-runtime.js +0 -90
- package/demo/node_modules/openai/_shims/node-runtime.js.map +0 -1
- package/demo/node_modules/openai/_shims/node-runtime.mjs +0 -56
- package/demo/node_modules/openai/_shims/node-runtime.mjs.map +0 -1
- package/demo/node_modules/openai/_shims/node-types.d.ts +0 -42
- package/demo/node_modules/openai/_shims/node-types.js +0 -3
- package/demo/node_modules/openai/_shims/node-types.mjs +0 -3
- package/demo/node_modules/openai/_shims/registry.d.ts +0 -37
- package/demo/node_modules/openai/_shims/registry.d.ts.map +0 -1
- package/demo/node_modules/openai/_shims/registry.js +0 -41
- package/demo/node_modules/openai/_shims/registry.js.map +0 -1
- package/demo/node_modules/openai/_shims/registry.mjs +0 -37
- package/demo/node_modules/openai/_shims/registry.mjs.map +0 -1
- package/demo/node_modules/openai/_shims/web-runtime.d.ts +0 -5
- package/demo/node_modules/openai/_shims/web-runtime.d.ts.map +0 -1
- package/demo/node_modules/openai/_shims/web-runtime.js +0 -78
- package/demo/node_modules/openai/_shims/web-runtime.js.map +0 -1
- package/demo/node_modules/openai/_shims/web-runtime.mjs +0 -71
- package/demo/node_modules/openai/_shims/web-runtime.mjs.map +0 -1
- package/demo/node_modules/openai/_shims/web-types.d.ts +0 -83
- package/demo/node_modules/openai/_shims/web-types.js +0 -3
- package/demo/node_modules/openai/_shims/web-types.mjs +0 -3
- package/demo/node_modules/openai/bin/cli +0 -49
- package/demo/node_modules/openai/core.d.ts +0 -239
- package/demo/node_modules/openai/core.d.ts.map +0 -1
- package/demo/node_modules/openai/core.js +0 -879
- package/demo/node_modules/openai/core.js.map +0 -1
- package/demo/node_modules/openai/core.mjs +0 -848
- package/demo/node_modules/openai/core.mjs.map +0 -1
- package/demo/node_modules/openai/error.d.ts +0 -57
- package/demo/node_modules/openai/error.d.ts.map +0 -1
- package/demo/node_modules/openai/error.js +0 -148
- package/demo/node_modules/openai/error.js.map +0 -1
- package/demo/node_modules/openai/error.mjs +0 -132
- package/demo/node_modules/openai/error.mjs.map +0 -1
- package/demo/node_modules/openai/index.d.mts +0 -267
- package/demo/node_modules/openai/index.d.ts +0 -267
- package/demo/node_modules/openai/index.d.ts.map +0 -1
- package/demo/node_modules/openai/index.js +0 -262
- package/demo/node_modules/openai/index.js.map +0 -1
- package/demo/node_modules/openai/index.mjs +0 -232
- package/demo/node_modules/openai/index.mjs.map +0 -1
- package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.d.ts +0 -74
- package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.d.ts.map +0 -1
- package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.js +0 -246
- package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.js.map +0 -1
- package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.mjs +0 -242
- package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.mjs.map +0 -1
- package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.d.ts +0 -114
- package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.d.ts.map +0 -1
- package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.js +0 -519
- package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.js.map +0 -1
- package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.mjs +0 -515
- package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.mjs.map +0 -1
- package/demo/node_modules/openai/lib/AssistantStream.d.ts +0 -58
- package/demo/node_modules/openai/lib/AssistantStream.d.ts.map +0 -1
- package/demo/node_modules/openai/lib/AssistantStream.js +0 -548
- package/demo/node_modules/openai/lib/AssistantStream.js.map +0 -1
- package/demo/node_modules/openai/lib/AssistantStream.mjs +0 -521
- package/demo/node_modules/openai/lib/AssistantStream.mjs.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.d.ts +0 -2
- package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.d.ts.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.js +0 -2177
- package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.js.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.mjs +0 -2172
- package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.mjs.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionRunner.d.ts +0 -19
- package/demo/node_modules/openai/lib/ChatCompletionRunner.d.ts.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionRunner.js +0 -34
- package/demo/node_modules/openai/lib/ChatCompletionRunner.js.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionRunner.mjs +0 -30
- package/demo/node_modules/openai/lib/ChatCompletionRunner.mjs.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionStream.d.ts +0 -149
- package/demo/node_modules/openai/lib/ChatCompletionStream.d.ts.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionStream.js +0 -312
- package/demo/node_modules/openai/lib/ChatCompletionStream.js.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionStream.mjs +0 -308
- package/demo/node_modules/openai/lib/ChatCompletionStream.mjs.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.d.ts +0 -22
- package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.d.ts.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.js +0 -32
- package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.js.map +0 -1
- package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.mjs +0 -28
- package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.mjs.map +0 -1
- package/demo/node_modules/openai/lib/RunnableFunction.d.ts +0 -95
- package/demo/node_modules/openai/lib/RunnableFunction.d.ts.map +0 -1
- package/demo/node_modules/openai/lib/RunnableFunction.js +0 -35
- package/demo/node_modules/openai/lib/RunnableFunction.js.map +0 -1
- package/demo/node_modules/openai/lib/RunnableFunction.mjs +0 -29
- package/demo/node_modules/openai/lib/RunnableFunction.mjs.map +0 -1
- package/demo/node_modules/openai/lib/Util.d.ts +0 -5
- package/demo/node_modules/openai/lib/Util.d.ts.map +0 -1
- package/demo/node_modules/openai/lib/Util.js +0 -26
- package/demo/node_modules/openai/lib/Util.js.map +0 -1
- package/demo/node_modules/openai/lib/Util.mjs +0 -22
- package/demo/node_modules/openai/lib/Util.mjs.map +0 -1
- package/demo/node_modules/openai/lib/chatCompletionUtils.d.ts +0 -6
- package/demo/node_modules/openai/lib/chatCompletionUtils.d.ts.map +0 -1
- package/demo/node_modules/openai/lib/chatCompletionUtils.js +0 -20
- package/demo/node_modules/openai/lib/chatCompletionUtils.js.map +0 -1
- package/demo/node_modules/openai/lib/chatCompletionUtils.mjs +0 -13
- package/demo/node_modules/openai/lib/chatCompletionUtils.mjs.map +0 -1
- package/demo/node_modules/openai/lib/jsonschema.d.ts +0 -106
- package/demo/node_modules/openai/lib/jsonschema.d.ts.map +0 -1
- package/demo/node_modules/openai/lib/jsonschema.js +0 -11
- package/demo/node_modules/openai/lib/jsonschema.js.map +0 -1
- package/demo/node_modules/openai/lib/jsonschema.mjs +0 -10
- package/demo/node_modules/openai/lib/jsonschema.mjs.map +0 -1
- package/demo/node_modules/openai/package.json +0 -105
- package/demo/node_modules/openai/pagination.d.ts +0 -37
- package/demo/node_modules/openai/pagination.d.ts.map +0 -1
- package/demo/node_modules/openai/pagination.js +0 -64
- package/demo/node_modules/openai/pagination.js.map +0 -1
- package/demo/node_modules/openai/pagination.mjs +0 -59
- package/demo/node_modules/openai/pagination.mjs.map +0 -1
- package/demo/node_modules/openai/resource.d.ts +0 -6
- package/demo/node_modules/openai/resource.d.ts.map +0 -1
- package/demo/node_modules/openai/resource.js +0 -11
- package/demo/node_modules/openai/resource.js.map +0 -1
- package/demo/node_modules/openai/resource.mjs +0 -7
- package/demo/node_modules/openai/resource.mjs.map +0 -1
- package/demo/node_modules/openai/resources/audio/audio.d.ts +0 -20
- package/demo/node_modules/openai/resources/audio/audio.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/audio/audio.js +0 -46
- package/demo/node_modules/openai/resources/audio/audio.js.map +0 -1
- package/demo/node_modules/openai/resources/audio/audio.mjs +0 -19
- package/demo/node_modules/openai/resources/audio/audio.mjs.map +0 -1
- package/demo/node_modules/openai/resources/audio/index.d.ts +0 -5
- package/demo/node_modules/openai/resources/audio/index.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/audio/index.js +0 -13
- package/demo/node_modules/openai/resources/audio/index.js.map +0 -1
- package/demo/node_modules/openai/resources/audio/index.mjs +0 -6
- package/demo/node_modules/openai/resources/audio/index.mjs.map +0 -1
- package/demo/node_modules/openai/resources/audio/speech.d.ts +0 -42
- package/demo/node_modules/openai/resources/audio/speech.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/audio/speech.js +0 -17
- package/demo/node_modules/openai/resources/audio/speech.js.map +0 -1
- package/demo/node_modules/openai/resources/audio/speech.mjs +0 -13
- package/demo/node_modules/openai/resources/audio/speech.mjs.map +0 -1
- package/demo/node_modules/openai/resources/audio/transcriptions.d.ts +0 -71
- package/demo/node_modules/openai/resources/audio/transcriptions.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/audio/transcriptions.js +0 -18
- package/demo/node_modules/openai/resources/audio/transcriptions.js.map +0 -1
- package/demo/node_modules/openai/resources/audio/transcriptions.mjs +0 -14
- package/demo/node_modules/openai/resources/audio/transcriptions.mjs.map +0 -1
- package/demo/node_modules/openai/resources/audio/translations.d.ts +0 -50
- package/demo/node_modules/openai/resources/audio/translations.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/audio/translations.js +0 -18
- package/demo/node_modules/openai/resources/audio/translations.js.map +0 -1
- package/demo/node_modules/openai/resources/audio/translations.mjs +0 -14
- package/demo/node_modules/openai/resources/audio/translations.mjs.map +0 -1
- package/demo/node_modules/openai/resources/batches.d.ts +0 -189
- package/demo/node_modules/openai/resources/batches.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/batches.js +0 -65
- package/demo/node_modules/openai/resources/batches.js.map +0 -1
- package/demo/node_modules/openai/resources/batches.mjs +0 -37
- package/demo/node_modules/openai/resources/batches.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/assistants.d.ts +0 -1048
- package/demo/node_modules/openai/resources/beta/assistants.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/assistants.js +0 -89
- package/demo/node_modules/openai/resources/beta/assistants.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/assistants.mjs +0 -61
- package/demo/node_modules/openai/resources/beta/assistants.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/beta.d.ts +0 -53
- package/demo/node_modules/openai/resources/beta/beta.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/beta.js +0 -51
- package/demo/node_modules/openai/resources/beta/beta.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/beta.mjs +0 -24
- package/demo/node_modules/openai/resources/beta/beta.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/chat/chat.d.ts +0 -9
- package/demo/node_modules/openai/resources/beta/chat/chat.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/chat/chat.js +0 -40
- package/demo/node_modules/openai/resources/beta/chat/chat.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/chat/chat.mjs +0 -13
- package/demo/node_modules/openai/resources/beta/chat/chat.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/chat/completions.d.ts +0 -37
- package/demo/node_modules/openai/resources/beta/chat/completions.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/chat/completions.js +0 -39
- package/demo/node_modules/openai/resources/beta/chat/completions.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/chat/completions.mjs +0 -30
- package/demo/node_modules/openai/resources/beta/chat/completions.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/chat/index.d.ts +0 -3
- package/demo/node_modules/openai/resources/beta/chat/index.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/chat/index.js +0 -9
- package/demo/node_modules/openai/resources/beta/chat/index.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/chat/index.mjs +0 -4
- package/demo/node_modules/openai/resources/beta/chat/index.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/index.d.ts +0 -6
- package/demo/node_modules/openai/resources/beta/index.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/index.js +0 -17
- package/demo/node_modules/openai/resources/beta/index.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/index.mjs +0 -7
- package/demo/node_modules/openai/resources/beta/index.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/index.d.ts +0 -4
- package/demo/node_modules/openai/resources/beta/threads/index.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/index.js +0 -13
- package/demo/node_modules/openai/resources/beta/threads/index.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/index.mjs +0 -5
- package/demo/node_modules/openai/resources/beta/threads/index.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/messages.d.ts +0 -552
- package/demo/node_modules/openai/resources/beta/threads/messages.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/messages.js +0 -89
- package/demo/node_modules/openai/resources/beta/threads/messages.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/messages.mjs +0 -61
- package/demo/node_modules/openai/resources/beta/threads/messages.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/runs/index.d.ts +0 -3
- package/demo/node_modules/openai/resources/beta/threads/runs/index.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/runs/index.js +0 -11
- package/demo/node_modules/openai/resources/beta/threads/runs/index.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/runs/index.mjs +0 -4
- package/demo/node_modules/openai/resources/beta/threads/runs/index.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/runs/runs.d.ts +0 -1194
- package/demo/node_modules/openai/resources/beta/threads/runs/runs.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/runs/runs.js +0 -190
- package/demo/node_modules/openai/resources/beta/threads/runs/runs.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/runs/runs.mjs +0 -162
- package/demo/node_modules/openai/resources/beta/threads/runs/runs.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/runs/steps.d.ts +0 -520
- package/demo/node_modules/openai/resources/beta/threads/runs/steps.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/runs/steps.js +0 -60
- package/demo/node_modules/openai/resources/beta/threads/runs/steps.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/runs/steps.mjs +0 -32
- package/demo/node_modules/openai/resources/beta/threads/runs/steps.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/threads.d.ts +0 -1240
- package/demo/node_modules/openai/resources/beta/threads/threads.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/threads.js +0 -108
- package/demo/node_modules/openai/resources/beta/threads/threads.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/threads/threads.mjs +0 -81
- package/demo/node_modules/openai/resources/beta/threads/threads.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.d.ts +0 -142
- package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.js +0 -129
- package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.mjs +0 -125
- package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/files.d.ts +0 -154
- package/demo/node_modules/openai/resources/beta/vector-stores/files.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/files.js +0 -149
- package/demo/node_modules/openai/resources/beta/vector-stores/files.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/files.mjs +0 -121
- package/demo/node_modules/openai/resources/beta/vector-stores/files.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/index.d.ts +0 -4
- package/demo/node_modules/openai/resources/beta/vector-stores/index.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/index.js +0 -13
- package/demo/node_modules/openai/resources/beta/vector-stores/index.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/index.mjs +0 -5
- package/demo/node_modules/openai/resources/beta/vector-stores/index.mjs.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.d.ts +0 -233
- package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.js +0 -99
- package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.js.map +0 -1
- package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.mjs +0 -71
- package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.mjs.map +0 -1
- package/demo/node_modules/openai/resources/chat/chat.d.ts +0 -42
- package/demo/node_modules/openai/resources/chat/chat.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/chat/chat.js +0 -40
- package/demo/node_modules/openai/resources/chat/chat.js.map +0 -1
- package/demo/node_modules/openai/resources/chat/chat.mjs +0 -13
- package/demo/node_modules/openai/resources/chat/chat.mjs.map +0 -1
- package/demo/node_modules/openai/resources/chat/completions.d.ts +0 -845
- package/demo/node_modules/openai/resources/chat/completions.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/chat/completions.js +0 -14
- package/demo/node_modules/openai/resources/chat/completions.js.map +0 -1
- package/demo/node_modules/openai/resources/chat/completions.mjs +0 -10
- package/demo/node_modules/openai/resources/chat/completions.mjs.map +0 -1
- package/demo/node_modules/openai/resources/chat/index.d.ts +0 -3
- package/demo/node_modules/openai/resources/chat/index.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/chat/index.js +0 -9
- package/demo/node_modules/openai/resources/chat/index.js.map +0 -1
- package/demo/node_modules/openai/resources/chat/index.mjs +0 -4
- package/demo/node_modules/openai/resources/chat/index.mjs.map +0 -1
- package/demo/node_modules/openai/resources/completions.d.ts +0 -272
- package/demo/node_modules/openai/resources/completions.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/completions.js +0 -14
- package/demo/node_modules/openai/resources/completions.js.map +0 -1
- package/demo/node_modules/openai/resources/completions.mjs +0 -10
- package/demo/node_modules/openai/resources/completions.mjs.map +0 -1
- package/demo/node_modules/openai/resources/embeddings.d.ts +0 -103
- package/demo/node_modules/openai/resources/embeddings.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/embeddings.js +0 -17
- package/demo/node_modules/openai/resources/embeddings.js.map +0 -1
- package/demo/node_modules/openai/resources/embeddings.mjs +0 -13
- package/demo/node_modules/openai/resources/embeddings.mjs.map +0 -1
- package/demo/node_modules/openai/resources/files.d.ts +0 -140
- package/demo/node_modules/openai/resources/files.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/files.js +0 -120
- package/demo/node_modules/openai/resources/files.js.map +0 -1
- package/demo/node_modules/openai/resources/files.mjs +0 -92
- package/demo/node_modules/openai/resources/files.mjs.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.d.ts +0 -19
- package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.js +0 -42
- package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.js.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.mjs +0 -15
- package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.mjs.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/index.d.ts +0 -3
- package/demo/node_modules/openai/resources/fine-tuning/index.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/index.js +0 -11
- package/demo/node_modules/openai/resources/fine-tuning/index.js.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/index.mjs +0 -4
- package/demo/node_modules/openai/resources/fine-tuning/index.mjs.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts +0 -69
- package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.js +0 -47
- package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.js.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs +0 -19
- package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/jobs/index.d.ts +0 -3
- package/demo/node_modules/openai/resources/fine-tuning/jobs/index.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/jobs/index.js +0 -12
- package/demo/node_modules/openai/resources/fine-tuning/jobs/index.js.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/jobs/index.mjs +0 -4
- package/demo/node_modules/openai/resources/fine-tuning/jobs/index.mjs.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts +0 -362
- package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.js +0 -93
- package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.js.map +0 -1
- package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.mjs +0 -64
- package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.mjs.map +0 -1
- package/demo/node_modules/openai/resources/images.d.ts +0 -174
- package/demo/node_modules/openai/resources/images.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/images.js +0 -30
- package/demo/node_modules/openai/resources/images.js.map +0 -1
- package/demo/node_modules/openai/resources/images.mjs +0 -26
- package/demo/node_modules/openai/resources/images.mjs.map +0 -1
- package/demo/node_modules/openai/resources/index.d.ts +0 -13
- package/demo/node_modules/openai/resources/index.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/index.js +0 -44
- package/demo/node_modules/openai/resources/index.js.map +0 -1
- package/demo/node_modules/openai/resources/index.mjs +0 -14
- package/demo/node_modules/openai/resources/index.mjs.map +0 -1
- package/demo/node_modules/openai/resources/models.d.ts +0 -58
- package/demo/node_modules/openai/resources/models.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/models.js +0 -64
- package/demo/node_modules/openai/resources/models.js.map +0 -1
- package/demo/node_modules/openai/resources/models.mjs +0 -36
- package/demo/node_modules/openai/resources/models.mjs.map +0 -1
- package/demo/node_modules/openai/resources/moderations.d.ts +0 -176
- package/demo/node_modules/openai/resources/moderations.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/moderations.js +0 -17
- package/demo/node_modules/openai/resources/moderations.js.map +0 -1
- package/demo/node_modules/openai/resources/moderations.mjs +0 -13
- package/demo/node_modules/openai/resources/moderations.mjs.map +0 -1
- package/demo/node_modules/openai/resources/shared.d.ts +0 -39
- package/demo/node_modules/openai/resources/shared.d.ts.map +0 -1
- package/demo/node_modules/openai/resources/shared.js +0 -4
- package/demo/node_modules/openai/resources/shared.js.map +0 -1
- package/demo/node_modules/openai/resources/shared.mjs +0 -3
- package/demo/node_modules/openai/resources/shared.mjs.map +0 -1
- package/demo/node_modules/openai/shims/node.d.ts +0 -29
- package/demo/node_modules/openai/shims/node.d.ts.map +0 -1
- package/demo/node_modules/openai/shims/node.js +0 -31
- package/demo/node_modules/openai/shims/node.js.map +0 -1
- package/demo/node_modules/openai/shims/node.mjs +0 -5
- package/demo/node_modules/openai/shims/node.mjs.map +0 -1
- package/demo/node_modules/openai/shims/web.d.ts +0 -26
- package/demo/node_modules/openai/shims/web.d.ts.map +0 -1
- package/demo/node_modules/openai/shims/web.js +0 -31
- package/demo/node_modules/openai/shims/web.js.map +0 -1
- package/demo/node_modules/openai/shims/web.mjs +0 -5
- package/demo/node_modules/openai/shims/web.mjs.map +0 -1
- package/demo/node_modules/openai/src/_shims/MultipartBody.ts +0 -9
- package/demo/node_modules/openai/src/_shims/README.md +0 -46
- package/demo/node_modules/openai/src/_shims/auto/runtime-bun.ts +0 -4
- package/demo/node_modules/openai/src/_shims/auto/runtime-node.ts +0 -4
- package/demo/node_modules/openai/src/_shims/auto/runtime.ts +0 -4
- package/demo/node_modules/openai/src/_shims/auto/types-node.ts +0 -4
- package/demo/node_modules/openai/src/_shims/auto/types.d.ts +0 -101
- package/demo/node_modules/openai/src/_shims/auto/types.js +0 -3
- package/demo/node_modules/openai/src/_shims/auto/types.mjs +0 -3
- package/demo/node_modules/openai/src/_shims/bun-runtime.ts +0 -14
- package/demo/node_modules/openai/src/_shims/index.d.ts +0 -81
- package/demo/node_modules/openai/src/_shims/index.js +0 -13
- package/demo/node_modules/openai/src/_shims/index.mjs +0 -7
- package/demo/node_modules/openai/src/_shims/manual-types.d.ts +0 -12
- package/demo/node_modules/openai/src/_shims/manual-types.js +0 -3
- package/demo/node_modules/openai/src/_shims/manual-types.mjs +0 -3
- package/demo/node_modules/openai/src/_shims/node-runtime.ts +0 -83
- package/demo/node_modules/openai/src/_shims/node-types.d.ts +0 -42
- package/demo/node_modules/openai/src/_shims/node-types.js +0 -3
- package/demo/node_modules/openai/src/_shims/node-types.mjs +0 -3
- package/demo/node_modules/openai/src/_shims/registry.ts +0 -65
- package/demo/node_modules/openai/src/_shims/web-runtime.ts +0 -103
- package/demo/node_modules/openai/src/_shims/web-types.d.ts +0 -83
- package/demo/node_modules/openai/src/_shims/web-types.js +0 -3
- package/demo/node_modules/openai/src/_shims/web-types.mjs +0 -3
- package/demo/node_modules/openai/src/core.ts +0 -1162
- package/demo/node_modules/openai/src/error.ts +0 -158
- package/demo/node_modules/openai/src/index.ts +0 -502
- package/demo/node_modules/openai/src/lib/.keep +0 -4
- package/demo/node_modules/openai/src/lib/AbstractAssistantStreamRunner.ts +0 -340
- package/demo/node_modules/openai/src/lib/AbstractChatCompletionRunner.ts +0 -682
- package/demo/node_modules/openai/src/lib/AssistantStream.ts +0 -723
- package/demo/node_modules/openai/src/lib/ChatCompletionRunFunctions.test.ts +0 -2328
- package/demo/node_modules/openai/src/lib/ChatCompletionRunner.ts +0 -68
- package/demo/node_modules/openai/src/lib/ChatCompletionStream.ts +0 -494
- package/demo/node_modules/openai/src/lib/ChatCompletionStreamingRunner.ts +0 -68
- package/demo/node_modules/openai/src/lib/RunnableFunction.ts +0 -134
- package/demo/node_modules/openai/src/lib/Util.ts +0 -23
- package/demo/node_modules/openai/src/lib/chatCompletionUtils.ts +0 -28
- package/demo/node_modules/openai/src/lib/jsonschema.ts +0 -148
- package/demo/node_modules/openai/src/pagination.ts +0 -98
- package/demo/node_modules/openai/src/resource.ts +0 -11
- package/demo/node_modules/openai/src/resources/audio/audio.ts +0 -23
- package/demo/node_modules/openai/src/resources/audio/index.ts +0 -6
- package/demo/node_modules/openai/src/resources/audio/speech.ts +0 -52
- package/demo/node_modules/openai/src/resources/audio/transcriptions.ts +0 -84
- package/demo/node_modules/openai/src/resources/audio/translations.ts +0 -61
- package/demo/node_modules/openai/src/resources/batches.ts +0 -252
- package/demo/node_modules/openai/src/resources/beta/assistants.ts +0 -1315
- package/demo/node_modules/openai/src/resources/beta/beta.ts +0 -56
- package/demo/node_modules/openai/src/resources/beta/chat/chat.ts +0 -12
- package/demo/node_modules/openai/src/resources/beta/chat/completions.ts +0 -106
- package/demo/node_modules/openai/src/resources/beta/chat/index.ts +0 -4
- package/demo/node_modules/openai/src/resources/beta/index.ts +0 -48
- package/demo/node_modules/openai/src/resources/beta/threads/index.ts +0 -72
- package/demo/node_modules/openai/src/resources/beta/threads/messages.ts +0 -706
- package/demo/node_modules/openai/src/resources/beta/threads/runs/index.ts +0 -44
- package/demo/node_modules/openai/src/resources/beta/threads/runs/runs.ts +0 -1627
- package/demo/node_modules/openai/src/resources/beta/threads/runs/steps.ts +0 -641
- package/demo/node_modules/openai/src/resources/beta/threads/threads.ts +0 -1536
- package/demo/node_modules/openai/src/resources/beta/vector-stores/file-batches.ts +0 -293
- package/demo/node_modules/openai/src/resources/beta/vector-stores/files.ts +0 -284
- package/demo/node_modules/openai/src/resources/beta/vector-stores/index.ts +0 -25
- package/demo/node_modules/openai/src/resources/beta/vector-stores/vector-stores.ts +0 -318
- package/demo/node_modules/openai/src/resources/chat/chat.ts +0 -67
- package/demo/node_modules/openai/src/resources/chat/completions.ts +0 -996
- package/demo/node_modules/openai/src/resources/chat/index.ts +0 -33
- package/demo/node_modules/openai/src/resources/completions.ts +0 -329
- package/demo/node_modules/openai/src/resources/embeddings.ts +0 -125
- package/demo/node_modules/openai/src/resources/files.ts +0 -214
- package/demo/node_modules/openai/src/resources/fine-tuning/fine-tuning.ts +0 -22
- package/demo/node_modules/openai/src/resources/fine-tuning/index.ts +0 -16
- package/demo/node_modules/openai/src/resources/fine-tuning/jobs/checkpoints.ts +0 -108
- package/demo/node_modules/openai/src/resources/fine-tuning/jobs/index.ts +0 -21
- package/demo/node_modules/openai/src/resources/fine-tuning/jobs/jobs.ts +0 -458
- package/demo/node_modules/openai/src/resources/images.ts +0 -215
- package/demo/node_modules/openai/src/resources/index.ts +0 -45
- package/demo/node_modules/openai/src/resources/models.ts +0 -76
- package/demo/node_modules/openai/src/resources/moderations.ts +0 -214
- package/demo/node_modules/openai/src/resources/shared.ts +0 -47
- package/demo/node_modules/openai/src/shims/node.ts +0 -50
- package/demo/node_modules/openai/src/shims/web.ts +0 -50
- package/demo/node_modules/openai/src/streaming.ts +0 -508
- package/demo/node_modules/openai/src/tsconfig.json +0 -11
- package/demo/node_modules/openai/src/uploads.ts +0 -248
- package/demo/node_modules/openai/src/version.ts +0 -1
- package/demo/node_modules/openai/streaming.d.ts +0 -41
- package/demo/node_modules/openai/streaming.d.ts.map +0 -1
- package/demo/node_modules/openai/streaming.js +0 -433
- package/demo/node_modules/openai/streaming.js.map +0 -1
- package/demo/node_modules/openai/streaming.mjs +0 -426
- package/demo/node_modules/openai/streaming.mjs.map +0 -1
- package/demo/node_modules/openai/uploads.d.ts +0 -75
- package/demo/node_modules/openai/uploads.d.ts.map +0 -1
- package/demo/node_modules/openai/uploads.js +0 -165
- package/demo/node_modules/openai/uploads.js.map +0 -1
- package/demo/node_modules/openai/uploads.mjs +0 -152
- package/demo/node_modules/openai/uploads.mjs.map +0 -1
- package/demo/node_modules/openai/version.d.ts +0 -2
- package/demo/node_modules/openai/version.d.ts.map +0 -1
- package/demo/node_modules/openai/version.js +0 -5
- package/demo/node_modules/openai/version.js.map +0 -1
- package/demo/node_modules/openai/version.mjs +0 -2
- package/demo/node_modules/openai/version.mjs.map +0 -1
- package/demo/watson.png +0 -0
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## ✨ Features
|
|
6
6
|
|
|
7
7
|
- **Unified Interface**: Interact with multiple AI models through a single, coherent API.
|
|
8
|
-
- **Request Control**: Manage the number of parallel requests to adhere to provider limitations
|
|
8
|
+
- **Request Control**: Manage the number of parallel requests to adhere to provider limitations with `max_request`.
|
|
9
9
|
- **Flexible Integration**: Easily integrate popular models like OpenAI, Anthropic, Perplexity, Groq, Ollama, LM Studio or custom models.
|
|
10
10
|
- **History Tracking**: Automatically logs the conversation history with model responses, allowing you to limit the number of historical messages with `max_history`.
|
|
11
11
|
|
|
@@ -17,7 +17,7 @@ First, install the ModelMix package:
|
|
|
17
17
|
npm install modelmix
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Optional: install dotenv to manage environment variables:
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
23
|
npm install dotenv
|
|
@@ -51,6 +51,7 @@ Here's a quick example to get you started:
|
|
|
51
51
|
system: "You are {name} from Melmac.",
|
|
52
52
|
max_history: 2,
|
|
53
53
|
max_request: 1,
|
|
54
|
+
debug: true
|
|
54
55
|
}
|
|
55
56
|
});
|
|
56
57
|
|
|
@@ -85,9 +86,19 @@ Here's a quick example to get you started:
|
|
|
85
86
|
gpt.replace({ '{animal}': 'cat' });
|
|
86
87
|
console.log(await gpt.message());
|
|
87
88
|
|
|
88
|
-
console.log("\n" + '--------| claude-3-sonnet-
|
|
89
|
-
const
|
|
90
|
-
|
|
89
|
+
console.log("\n" + '--------| [writer] claude-3-5-sonnet-20240620 |--------');
|
|
90
|
+
const setup = {
|
|
91
|
+
config: { system: "You are a writer like Stephen King" },
|
|
92
|
+
options: { temperature: 0.5 }
|
|
93
|
+
}
|
|
94
|
+
const writer = mmix.create('claude-3-5-sonnet-20240620', setup);
|
|
95
|
+
writer.replace({ '{story_title}': 'The Mysterious Package' })
|
|
96
|
+
const story = await writer.addTextFile('./prompt.md').message();
|
|
97
|
+
console.log(story);
|
|
98
|
+
|
|
99
|
+
console.log("\n" + '--------| [image] claude-3-5-sonnet-20240620 |--------');
|
|
100
|
+
const claude = mmix.create('claude-3-5-sonnet-20240620', { temperature: 0.5 });
|
|
101
|
+
claude.addImage("./watson.jpg"); // or claude.addImageFromUrl(url)
|
|
91
102
|
const imageDescription = await claude.addText("Describe the image").message();
|
|
92
103
|
console.log(imageDescription);
|
|
93
104
|
|
|
@@ -99,7 +110,7 @@ Here's a quick example to get you started:
|
|
|
99
110
|
|
|
100
111
|
console.log("\n" + '--------| ollama (llava:latest) |--------');
|
|
101
112
|
await mmix.create('llava:latest')
|
|
102
|
-
.addImage("./watson.
|
|
113
|
+
.addImage("./watson.jpg")
|
|
103
114
|
.addText("What is the predominant color?")
|
|
104
115
|
.stream((data) => { console.log(data.message); });
|
|
105
116
|
```
|
|
@@ -134,7 +145,9 @@ new ModelMix(args = { options: {}, config: {} })
|
|
|
134
145
|
|
|
135
146
|
- `new()`: Initializes a new message handler instance.
|
|
136
147
|
- `addText(text, config = { role: "user" })`: Adds a text message.
|
|
148
|
+
- `addTextFile(filePath, config = { role: "user" })`: Adds a text message from a file path.
|
|
137
149
|
- `addImage(filePath, config = { role: "user" })`: Adds an image message from a file path.
|
|
150
|
+
- `addImageFromUrl(url, config = { role: "user" })`: Adds an image message from URL.
|
|
138
151
|
- `message()`: Sends the message and returns the response.
|
|
139
152
|
- `raw()`: Sends the message and returns the raw response data.
|
|
140
153
|
- `stream(callback)`: Sends the message and streams the response, invoking the callback with each streamed part.
|
package/demo/demo.mjs
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import 'dotenv/config';
|
|
2
2
|
import { ModelMix, MixOpenAI, MixAnthropic, MixPerplexity, MixOllama } from '../index.js';
|
|
3
3
|
|
|
4
|
-
const env = process.env;
|
|
5
|
-
|
|
6
4
|
const mmix = new ModelMix({
|
|
7
5
|
options: {
|
|
8
6
|
max_tokens: 200,
|
|
@@ -11,15 +9,15 @@ const mmix = new ModelMix({
|
|
|
11
9
|
system: 'You are {name} from Melmac.',
|
|
12
10
|
max_history: 2,
|
|
13
11
|
max_request: 1,
|
|
12
|
+
debug: true,
|
|
14
13
|
}
|
|
15
14
|
});
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
mmix.attach(new
|
|
19
|
-
mmix.attach(new MixAnthropic({ config: { apiKey: env.ANTHROPIC_API_KEY } }));
|
|
16
|
+
mmix.attach(new MixOpenAI());
|
|
17
|
+
mmix.attach(new MixAnthropic());
|
|
20
18
|
mmix.attach(new MixPerplexity({
|
|
21
19
|
config: {
|
|
22
|
-
apiKey: env.PPLX_API_KEY
|
|
20
|
+
apiKey: process.env.PPLX_API_KEY
|
|
23
21
|
},
|
|
24
22
|
system: 'You are my personal assistant.'
|
|
25
23
|
}));
|
|
@@ -39,20 +37,30 @@ const gpt = mmix.create('gpt-4o', { temperature: 0.5 }).addText("Have you ever e
|
|
|
39
37
|
gpt.replace({ '{animal}': 'cat' });
|
|
40
38
|
console.log(await gpt.message());
|
|
41
39
|
|
|
42
|
-
console.log("\n" + '--------| claude-3-sonnet-
|
|
43
|
-
const claude = mmix.create('claude-3-sonnet-
|
|
44
|
-
claude.
|
|
40
|
+
console.log("\n" + '--------| claude-3-5-sonnet-20240620 |--------');
|
|
41
|
+
const claude = mmix.create('claude-3-5-sonnet-20240620', { temperature: 0.5 });
|
|
42
|
+
claude.addImageFromUrl('https://pbs.twimg.com/media/F6-GsjraAAADDGy?format=jpg');
|
|
45
43
|
const imageDescription = await claude.addText('describe the image').message();
|
|
46
44
|
console.log(imageDescription);
|
|
47
45
|
|
|
48
|
-
console.log("\n" + '--------|
|
|
49
|
-
const
|
|
46
|
+
console.log("\n" + '--------| claude-3-5-sonnet-20240620 |--------');
|
|
47
|
+
const setup = {
|
|
48
|
+
config: { system: "You are a writer like Stephen King" },
|
|
49
|
+
options: { temperature: 0.5 }
|
|
50
|
+
}
|
|
51
|
+
const writer = mmix.create('claude-3-5-sonnet-20240620', setup);
|
|
52
|
+
writer.replace({ '{story_title}': 'The Mysterious Package' })
|
|
53
|
+
const story = await writer.addTextFile('./prompt.md').message();
|
|
54
|
+
console.log(story);
|
|
55
|
+
|
|
56
|
+
console.log("\n" + '--------| llama-3-sonar-large-32k-online |--------');
|
|
57
|
+
const pplx = mmix.create('llama-3-sonar-large-32k-online', { max_tokens: 500 });
|
|
50
58
|
pplx.addText('How much is ETH trading in USD?');
|
|
51
59
|
const news = await pplx.addText('What are the 3 most recent Ethereum news?').message();
|
|
52
60
|
console.log(news);
|
|
53
61
|
|
|
54
|
-
console.log("\n" + '--------| ollama (llava:latest) |--------');
|
|
55
|
-
await mmix.create('llava:latest')
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
// console.log("\n" + '--------| ollama (llava:latest) |--------');
|
|
63
|
+
// await mmix.create('llava:latest')
|
|
64
|
+
// .addImage('./watson.jpg')
|
|
65
|
+
// .addText('what is the predominant color?')
|
|
66
|
+
// .stream((data) => { console.log(data.message); });
|
package/demo/lmstudio.mjs
CHANGED
|
@@ -84,27 +84,6 @@
|
|
|
84
84
|
"node": ">= 0.8"
|
|
85
85
|
}
|
|
86
86
|
},
|
|
87
|
-
"node_modules/debug": {
|
|
88
|
-
"version": "4.3.4",
|
|
89
|
-
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
|
90
|
-
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
|
91
|
-
"dependencies": {
|
|
92
|
-
"ms": "2.1.2"
|
|
93
|
-
},
|
|
94
|
-
"engines": {
|
|
95
|
-
"node": ">=6.0"
|
|
96
|
-
},
|
|
97
|
-
"peerDependenciesMeta": {
|
|
98
|
-
"supports-color": {
|
|
99
|
-
"optional": true
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
"node_modules/debug/node_modules/ms": {
|
|
104
|
-
"version": "2.1.2",
|
|
105
|
-
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
|
106
|
-
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
|
107
|
-
},
|
|
108
87
|
"node_modules/delayed-stream": {
|
|
109
88
|
"version": "1.0.0",
|
|
110
89
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
|
@@ -178,14 +157,6 @@
|
|
|
178
157
|
"ms": "^2.0.0"
|
|
179
158
|
}
|
|
180
159
|
},
|
|
181
|
-
"node_modules/lemonlog": {
|
|
182
|
-
"version": "1.1.2",
|
|
183
|
-
"resolved": "https://registry.npmjs.org/lemonlog/-/lemonlog-1.1.2.tgz",
|
|
184
|
-
"integrity": "sha512-ztAM2mVrr9+CLoKvXKCJeGb6jNNDZUnATlcIouFuj7ymyNKXXZhx4gXyQ5lsW6oLx5KXKb/vLclXVdcqJ5sHVA==",
|
|
185
|
-
"dependencies": {
|
|
186
|
-
"debug": "^4.3.4"
|
|
187
|
-
}
|
|
188
|
-
},
|
|
189
160
|
"node_modules/mime-db": {
|
|
190
161
|
"version": "1.52.0",
|
|
191
162
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
|
@@ -247,24 +218,6 @@
|
|
|
247
218
|
}
|
|
248
219
|
}
|
|
249
220
|
},
|
|
250
|
-
"node_modules/openai": {
|
|
251
|
-
"version": "4.47.1",
|
|
252
|
-
"resolved": "https://registry.npmjs.org/openai/-/openai-4.47.1.tgz",
|
|
253
|
-
"integrity": "sha512-WWSxhC/69ZhYWxH/OBsLEirIjUcfpQ5+ihkXKp06hmeYXgBBIUCa9IptMzYx6NdkiOCsSGYCnTIsxaic3AjRCQ==",
|
|
254
|
-
"dependencies": {
|
|
255
|
-
"@types/node": "^18.11.18",
|
|
256
|
-
"@types/node-fetch": "^2.6.4",
|
|
257
|
-
"abort-controller": "^3.0.0",
|
|
258
|
-
"agentkeepalive": "^4.2.1",
|
|
259
|
-
"form-data-encoder": "1.7.2",
|
|
260
|
-
"formdata-node": "^4.3.2",
|
|
261
|
-
"node-fetch": "^2.6.7",
|
|
262
|
-
"web-streams-polyfill": "^3.2.1"
|
|
263
|
-
},
|
|
264
|
-
"bin": {
|
|
265
|
-
"openai": "bin/cli"
|
|
266
|
-
}
|
|
267
|
-
},
|
|
268
221
|
"node_modules/tr46": {
|
|
269
222
|
"version": "0.0.3",
|
|
270
223
|
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
package/demo/package-lock.json
CHANGED
|
@@ -10,9 +10,7 @@
|
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@anthropic-ai/sdk": "^0.20.9",
|
|
13
|
-
"dotenv": "^16.4.5"
|
|
14
|
-
"lemonlog": "^1.1.2",
|
|
15
|
-
"openai": "^4.47.1"
|
|
13
|
+
"dotenv": "^16.4.5"
|
|
16
14
|
}
|
|
17
15
|
},
|
|
18
16
|
".api/apis/pplx": {
|
|
@@ -95,27 +93,6 @@
|
|
|
95
93
|
"node": ">= 0.8"
|
|
96
94
|
}
|
|
97
95
|
},
|
|
98
|
-
"node_modules/debug": {
|
|
99
|
-
"version": "4.3.4",
|
|
100
|
-
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
|
101
|
-
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
|
102
|
-
"dependencies": {
|
|
103
|
-
"ms": "2.1.2"
|
|
104
|
-
},
|
|
105
|
-
"engines": {
|
|
106
|
-
"node": ">=6.0"
|
|
107
|
-
},
|
|
108
|
-
"peerDependenciesMeta": {
|
|
109
|
-
"supports-color": {
|
|
110
|
-
"optional": true
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
"node_modules/debug/node_modules/ms": {
|
|
115
|
-
"version": "2.1.2",
|
|
116
|
-
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
|
117
|
-
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
|
118
|
-
},
|
|
119
96
|
"node_modules/delayed-stream": {
|
|
120
97
|
"version": "1.0.0",
|
|
121
98
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
|
@@ -189,14 +166,6 @@
|
|
|
189
166
|
"ms": "^2.0.0"
|
|
190
167
|
}
|
|
191
168
|
},
|
|
192
|
-
"node_modules/lemonlog": {
|
|
193
|
-
"version": "1.1.2",
|
|
194
|
-
"resolved": "https://registry.npmjs.org/lemonlog/-/lemonlog-1.1.2.tgz",
|
|
195
|
-
"integrity": "sha512-ztAM2mVrr9+CLoKvXKCJeGb6jNNDZUnATlcIouFuj7ymyNKXXZhx4gXyQ5lsW6oLx5KXKb/vLclXVdcqJ5sHVA==",
|
|
196
|
-
"dependencies": {
|
|
197
|
-
"debug": "^4.3.4"
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
169
|
"node_modules/mime-db": {
|
|
201
170
|
"version": "1.52.0",
|
|
202
171
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
|
@@ -258,24 +227,6 @@
|
|
|
258
227
|
}
|
|
259
228
|
}
|
|
260
229
|
},
|
|
261
|
-
"node_modules/openai": {
|
|
262
|
-
"version": "4.47.1",
|
|
263
|
-
"resolved": "https://registry.npmjs.org/openai/-/openai-4.47.1.tgz",
|
|
264
|
-
"integrity": "sha512-WWSxhC/69ZhYWxH/OBsLEirIjUcfpQ5+ihkXKp06hmeYXgBBIUCa9IptMzYx6NdkiOCsSGYCnTIsxaic3AjRCQ==",
|
|
265
|
-
"dependencies": {
|
|
266
|
-
"@types/node": "^18.11.18",
|
|
267
|
-
"@types/node-fetch": "^2.6.4",
|
|
268
|
-
"abort-controller": "^3.0.0",
|
|
269
|
-
"agentkeepalive": "^4.2.1",
|
|
270
|
-
"form-data-encoder": "1.7.2",
|
|
271
|
-
"formdata-node": "^4.3.2",
|
|
272
|
-
"node-fetch": "^2.6.7",
|
|
273
|
-
"web-streams-polyfill": "^3.2.1"
|
|
274
|
-
},
|
|
275
|
-
"bin": {
|
|
276
|
-
"openai": "bin/cli"
|
|
277
|
-
}
|
|
278
|
-
},
|
|
279
230
|
"node_modules/tr46": {
|
|
280
231
|
"version": "0.0.3",
|
|
281
232
|
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
package/demo/package.json
CHANGED
package/demo/prompt.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Writing Prompt: {story_title}
|
|
2
|
+
|
|
3
|
+
## Setting
|
|
4
|
+
A small, quiet town where nothing unusual ever happens.
|
|
5
|
+
|
|
6
|
+
## Main Character
|
|
7
|
+
You are a postal worker who has worked in this town for over 20 years.
|
|
8
|
+
|
|
9
|
+
## Situation
|
|
10
|
+
One day, you come across a package with these unusual characteristics:
|
|
11
|
+
- No return address
|
|
12
|
+
- Addressed to a person who doesn't exist in town
|
|
13
|
+
- Emits a faint, pulsing glow
|
|
14
|
+
- Feels unusually warm to the touch
|
|
15
|
+
|
|
16
|
+
## Writing Task
|
|
17
|
+
Write a short story (500-1000 words) that explores:
|
|
18
|
+
1. Your character's decision on what to do with the package
|
|
19
|
+
2. The consequences of that decision
|
|
20
|
+
3. The ultimate revelation of what's inside the package and its significance
|
|
21
|
+
|
|
22
|
+
### Additional Elements to Consider
|
|
23
|
+
- The reactions of other townspeople
|
|
24
|
+
- Any changes in the town's atmosphere after the package's arrival
|
|
25
|
+
- Your character's internal conflict between curiosity and duty
|
package/demo/stream.mjs
CHANGED
|
@@ -52,17 +52,17 @@ mmix.attach(new MixOllama({
|
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
await mmix.create('gpt-4o')
|
|
55
|
-
.addImage('./watson.
|
|
55
|
+
.addImage('./watson.jpg')
|
|
56
56
|
.addText('describe')
|
|
57
57
|
.stream((data) => { console.log(data.message); });
|
|
58
58
|
|
|
59
59
|
await mmix.create('claude-3-haiku-20240307')
|
|
60
|
-
.addImage('./watson.
|
|
60
|
+
.addImage('./watson.jpg')
|
|
61
61
|
.addText('describe')
|
|
62
62
|
.stream((data) => { console.log(data.message); });
|
|
63
63
|
|
|
64
64
|
await mmix.create('llava:latest')
|
|
65
|
-
.addImage('./watson.
|
|
65
|
+
.addImage('./watson.jpg')
|
|
66
66
|
.addText('describe')
|
|
67
67
|
.stream((data) => { console.log(data.message); });
|
|
68
68
|
|
package/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const axios = require('axios');
|
|
2
2
|
const fs = require('fs');
|
|
3
3
|
const mime = require('mime-types');
|
|
4
|
+
const log = require('lemonlog')('ModelMix');
|
|
4
5
|
|
|
5
6
|
class ModelMix {
|
|
6
7
|
constructor(args = { options: {}, config: {} }) {
|
|
@@ -16,6 +17,7 @@ class ModelMix {
|
|
|
16
17
|
system: 'You are an assistant.',
|
|
17
18
|
max_request: 1,
|
|
18
19
|
max_history: 5, // Default max history
|
|
20
|
+
debug: false,
|
|
19
21
|
...args.config
|
|
20
22
|
}
|
|
21
23
|
}
|
|
@@ -89,6 +91,9 @@ class MessageHandler {
|
|
|
89
91
|
this.options = options;
|
|
90
92
|
this.config = config;
|
|
91
93
|
this.messages = [];
|
|
94
|
+
|
|
95
|
+
this.filesToProcess = [];
|
|
96
|
+
this.imagesToProcess = [];
|
|
92
97
|
}
|
|
93
98
|
|
|
94
99
|
new() {
|
|
@@ -106,6 +111,11 @@ class MessageHandler {
|
|
|
106
111
|
return this;
|
|
107
112
|
}
|
|
108
113
|
|
|
114
|
+
addTextFile(filePath, config = { role: "user" }) {
|
|
115
|
+
this.filesToProcess.push({ filePath, config });
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
118
|
+
|
|
109
119
|
addImage(filePath, config = { role: "user" }) {
|
|
110
120
|
try {
|
|
111
121
|
const imageBuffer = fs.readFileSync(filePath);
|
|
@@ -139,6 +149,66 @@ class MessageHandler {
|
|
|
139
149
|
return this;
|
|
140
150
|
}
|
|
141
151
|
|
|
152
|
+
addImageFromUrl(url, config = { role: "user" }) {
|
|
153
|
+
this.imagesToProcess.push({ url, config });
|
|
154
|
+
return this;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
async processTextFiles() {
|
|
158
|
+
const fileContents = await Promise.all(
|
|
159
|
+
this.filesToProcess.map(async (file) => {
|
|
160
|
+
try {
|
|
161
|
+
const content = fs.readFileSync(file.filePath).toString();
|
|
162
|
+
return { content, config: file.config };
|
|
163
|
+
} catch (error) {
|
|
164
|
+
console.error(`Error leyendo archivo ${file.filePath}:`, error);
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
fileContents.forEach((file) => {
|
|
171
|
+
if (file) {
|
|
172
|
+
this.addText(file.content, file.config);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
async processImageUrls() {
|
|
178
|
+
const imageContents = await Promise.all(
|
|
179
|
+
this.imagesToProcess.map(async (image) => {
|
|
180
|
+
try {
|
|
181
|
+
const response = await axios.get(image.url, { responseType: 'arraybuffer' });
|
|
182
|
+
const base64 = Buffer.from(response.data, 'binary').toString('base64');
|
|
183
|
+
const mimeType = response.headers['content-type'];
|
|
184
|
+
return { base64, mimeType, config: image.config };
|
|
185
|
+
} catch (error) {
|
|
186
|
+
console.error(`Error descargando imagen desde ${image.url}:`, error);
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
})
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
imageContents.forEach((image) => {
|
|
193
|
+
if (image) {
|
|
194
|
+
const imageMessage = {
|
|
195
|
+
...image.config,
|
|
196
|
+
content: [
|
|
197
|
+
{
|
|
198
|
+
type: "image",
|
|
199
|
+
"source": {
|
|
200
|
+
type: "base64",
|
|
201
|
+
media_type: image.mimeType,
|
|
202
|
+
data: image.base64
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
]
|
|
206
|
+
};
|
|
207
|
+
this.messages.push(imageMessage);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
|
|
142
212
|
async message() {
|
|
143
213
|
this.options.stream = false;
|
|
144
214
|
const response = await this.execute();
|
|
@@ -197,12 +267,17 @@ class MessageHandler {
|
|
|
197
267
|
|
|
198
268
|
async execute() {
|
|
199
269
|
|
|
270
|
+
await Promise.all([
|
|
271
|
+
this.processTextFiles(),
|
|
272
|
+
this.processImageUrls()
|
|
273
|
+
]);
|
|
274
|
+
|
|
200
275
|
this.applyTemplate();
|
|
201
276
|
this.messages = this.messages.slice(-this.config.max_history);
|
|
202
277
|
this.messages = this.groupByRoles(this.messages);
|
|
203
278
|
|
|
204
279
|
if (this.messages.length === 0) {
|
|
205
|
-
throw new Error("No user messages have been added. Use
|
|
280
|
+
throw new Error("No user messages have been added. Use addText(prompt), addTextFile(filePath), addImage(filePath), or addImageFromUrl(url) to add a prompt.");
|
|
206
281
|
}
|
|
207
282
|
|
|
208
283
|
this.options.messages = this.messages;
|
|
@@ -255,6 +330,13 @@ class MixCustom {
|
|
|
255
330
|
|
|
256
331
|
async create(args = { config: {}, options: {} }) {
|
|
257
332
|
|
|
333
|
+
if (args.config.debug) {
|
|
334
|
+
log.info("config");
|
|
335
|
+
log.info(args.config);
|
|
336
|
+
log.inspect("options");
|
|
337
|
+
log.inspect(args.options);
|
|
338
|
+
}
|
|
339
|
+
|
|
258
340
|
if (args.options.stream) {
|
|
259
341
|
return this.processStream(await axios.post(this.config.url, args.options, {
|
|
260
342
|
headers: this.headers,
|
|
@@ -319,6 +401,7 @@ class MixOpenAI extends MixCustom {
|
|
|
319
401
|
return super.getDefaultConfig({
|
|
320
402
|
url: 'https://api.openai.com/v1/chat/completions',
|
|
321
403
|
prefix: ['gpt'],
|
|
404
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
322
405
|
...customConfig
|
|
323
406
|
});
|
|
324
407
|
}
|
|
@@ -355,6 +438,7 @@ class MixAnthropic extends MixCustom {
|
|
|
355
438
|
return super.getDefaultConfig({
|
|
356
439
|
url: 'https://api.anthropic.com/v1/messages',
|
|
357
440
|
prefix: ['claude'],
|
|
441
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
358
442
|
...customConfig
|
|
359
443
|
});
|
|
360
444
|
}
|
|
@@ -381,7 +465,8 @@ class MixPerplexity extends MixCustom {
|
|
|
381
465
|
getDefaultConfig(customConfig) {
|
|
382
466
|
return super.getDefaultConfig({
|
|
383
467
|
url: 'https://api.perplexity.ai/chat/completions',
|
|
384
|
-
prefix: ['
|
|
468
|
+
prefix: ['llama-3', 'mixtral'],
|
|
469
|
+
apiKey: process.env.PPLX_API_KEY,
|
|
385
470
|
...customConfig
|
|
386
471
|
});
|
|
387
472
|
}
|
|
@@ -465,6 +550,7 @@ class MixGroq extends MixCustom {
|
|
|
465
550
|
return super.getDefaultConfig({
|
|
466
551
|
url: 'https://api.groq.com/openai/v1/chat/completions',
|
|
467
552
|
prefix: ["llama", "mixtral", "gemma"],
|
|
553
|
+
apiKey: process.env.GROQ_API_KEY,
|
|
468
554
|
...customConfig
|
|
469
555
|
});
|
|
470
556
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "modelmix",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.8",
|
|
4
4
|
"description": "🧬 ModelMix - Unified API for Diverse AI Language Models.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"repository": {
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"anthropic",
|
|
16
16
|
"pplx",
|
|
17
17
|
"perplexity",
|
|
18
|
+
"sonnet-3-5",
|
|
18
19
|
"gpt",
|
|
19
20
|
"claude",
|
|
20
21
|
"llama",
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
},
|
|
36
37
|
"homepage": "https://github.com/clasen/ModelMix#readme",
|
|
37
38
|
"dependencies": {
|
|
38
|
-
"axios": "^1.6.8"
|
|
39
|
+
"axios": "^1.6.8",
|
|
40
|
+
"lemonlog": "^1.1.2"
|
|
39
41
|
}
|
|
40
42
|
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
(The MIT License)
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca>
|
|
4
|
-
Copyright (c) 2018-2021 Josh Junon
|
|
5
|
-
|
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
|
7
|
-
and associated documentation files (the 'Software'), to deal in the Software without restriction,
|
|
8
|
-
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
9
|
-
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
|
10
|
-
subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all copies or substantial
|
|
13
|
-
portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
|
16
|
-
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
17
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
18
|
-
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
19
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
|
-
|