mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2025-03-13 05:32:24 +00:00
Compare commits
8 commits
ae2f09d793
...
4c61047b68
Author | SHA1 | Date | |
---|---|---|---|
|
4c61047b68 | ||
|
4bdd921c75 | ||
|
7c84aa7c4f | ||
|
6aa1854155 | ||
|
0753be2c42 | ||
|
75790e7e90 | ||
|
d19a34f6fe | ||
|
c56d3b1558 |
27 changed files with 487 additions and 1117 deletions
.github/workflows
BARE_METAL.mddocker
frontend
package.jsonyarn.lock
src
components/LLMSelection/NativeLLMOptions
hooks
pages
Admin/Agents
GeneralSettings/LLMPreference
OnboardingFlow/Steps
WorkspaceSettings/ChatSettings/WorkspaceLLMSelection
utils/chat
server
|
@ -11,7 +11,7 @@ on:
|
|||
jobs:
|
||||
push_multi_platform_to_registries:
|
||||
name: Push Docker multi-platform image to multiple registries
|
||||
runs-on: ubuntu-24.04-arm
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
packages: write
|
||||
contents: read
|
||||
|
@ -32,6 +32,9 @@ jobs:
|
|||
fi
|
||||
id: dockerhub
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
|
|
10
.github/workflows/build-and-push-image.yaml
vendored
10
.github/workflows/build-and-push-image.yaml
vendored
|
@ -1,6 +1,9 @@
|
|||
# This Github action is for publishing of the primary image for AnythingLLM
|
||||
# It will publish a linux/amd64 and linux/arm64 image at the same time
|
||||
# This file should ONLY BY USED FOR `master` BRANCH.
|
||||
# TODO: Github now has an ubuntu-24.04-arm64 runner, but we still need
|
||||
# to use QEMU to build the arm64 image because Chromium is not available for Linux arm64
|
||||
# so builds will still fail, or fail much more often. Its inconsistent and frustrating.
|
||||
name: Publish AnythingLLM Primary Docker image (amd64/arm64)
|
||||
|
||||
concurrency:
|
||||
|
@ -25,7 +28,7 @@ on:
|
|||
jobs:
|
||||
push_multi_platform_to_registries:
|
||||
name: Push Docker multi-platform image to multiple registries
|
||||
runs-on: ubuntu-24.04-arm
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
packages: write
|
||||
contents: read
|
||||
|
@ -46,6 +49,9 @@ jobs:
|
|||
fi
|
||||
id: dockerhub
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
|
@ -125,4 +131,4 @@ jobs:
|
|||
$tag
|
||||
done
|
||||
done
|
||||
shell: bash
|
||||
shell: bash
|
6
.github/workflows/dev-build.yaml
vendored
6
.github/workflows/dev-build.yaml
vendored
|
@ -1,4 +1,4 @@
|
|||
name: AnythingLLM Development Docker image (amd64/arm64)
|
||||
name: AnythingLLM Development Docker image (amd64)
|
||||
|
||||
concurrency:
|
||||
group: build-${{ github.ref }}
|
||||
|
@ -20,7 +20,7 @@ on:
|
|||
jobs:
|
||||
push_multi_platform_to_registries:
|
||||
name: Push Docker multi-platform image to multiple registries
|
||||
runs-on: ubuntu-24.04-arm
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
packages: write
|
||||
contents: read
|
||||
|
@ -69,7 +69,7 @@ jobs:
|
|||
push: true
|
||||
sbom: true
|
||||
provenance: mode=max
|
||||
platforms: linux/amd64,linux/arm64
|
||||
platforms: linux/amd64
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
> You are fully responsible for securing your deployment and data in this mode.
|
||||
> **Any issues** experienced from bare-metal or non-containerized deployments will be **not** answered or supported.
|
||||
|
||||
Here you can find the scripts and known working process to run AnythingLLM outside of a Docker container. This method of deployment is preferable for those using local LLMs and want native performance on their devices.
|
||||
Here you can find the scripts and known working process to run AnythingLLM outside of a Docker container.
|
||||
|
||||
### Minimum Requirements
|
||||
> [!TIP]
|
||||
|
@ -47,9 +47,6 @@ AnythingLLM is comprised of three main sections. The `frontend`, `server`, and `
|
|||
2. Copy `frontend/dist` to `server/public` - `cp -R frontend/dist server/public`.
|
||||
This should create a folder in `server` named `public` which contains a top level `index.html` file and various other files/folders.
|
||||
|
||||
_(optional)_ Build native LLM support if using `native` as your LLM.
|
||||
`cd server && npx --no node-llama-cpp download`
|
||||
|
||||
3. Migrate and prepare your database file.
|
||||
```
|
||||
cd server && npx prisma generate --schema=./prisma/schema.prisma
|
||||
|
@ -57,10 +54,10 @@ cd server && npx prisma migrate deploy --schema=./prisma/schema.prisma
|
|||
```
|
||||
|
||||
4. Boot the server in production
|
||||
`cd server && NODE_ENV=production node index.js &`
|
||||
`cd server && NODE_ENV=production node index.js &`
|
||||
|
||||
5. Boot the collection in another process
|
||||
`cd collector && NODE_ENV=production node index.js &`
|
||||
`cd collector && NODE_ENV=production node index.js &`
|
||||
|
||||
AnythingLLM should now be running on `http://localhost:3001`!
|
||||
|
||||
|
|
|
@ -128,7 +128,7 @@ RUN yarn build && \
|
|||
rm -rf /tmp/frontend-build
|
||||
WORKDIR /app
|
||||
|
||||
# Install server layer & build node-llama-cpp
|
||||
# Install server layer
|
||||
# Also pull and build collector deps (chromium issues prevent bad bindings)
|
||||
FROM build AS backend-build
|
||||
COPY ./server /app/server/
|
||||
|
@ -139,14 +139,9 @@ WORKDIR /app
|
|||
# Install collector dependencies
|
||||
COPY ./collector/ ./collector/
|
||||
WORKDIR /app/collector
|
||||
ENV PUPPETEER_DOWNLOAD_BASE_URL=https://storage.googleapis.com/chrome-for-testing-public
|
||||
ENV PUPPETEER_DOWNLOAD_BASE_URL=https://storage.googleapis.com/chrome-for-testing-public
|
||||
RUN yarn install --production --network-timeout 100000 && yarn cache clean
|
||||
|
||||
# Compile Llama.cpp bindings for node-llama-cpp for this operating system.
|
||||
# Creates appropriate bindings for the OS
|
||||
USER root
|
||||
WORKDIR /app/server
|
||||
RUN npx --no node-llama-cpp download
|
||||
WORKDIR /app
|
||||
USER anythingllm
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
"js-levenshtein": "^1.1.6",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"markdown-it": "^13.0.1",
|
||||
"markdown-it-katex": "^2.0.3",
|
||||
"katex": "^0.6.0",
|
||||
"moment": "^2.30.1",
|
||||
"onnxruntime-web": "^1.18.0",
|
||||
"pluralize": "^8.0.0",
|
||||
|
|
|
@ -1,102 +0,0 @@
|
|||
import { useEffect, useState } from "react";
|
||||
import { Flask } from "@phosphor-icons/react";
|
||||
import System from "@/models/system";
|
||||
|
||||
export default function NativeLLMOptions({ settings }) {
|
||||
return (
|
||||
<div className="w-full flex flex-col gap-y-4">
|
||||
<div className="flex flex-col md:flex-row md:items-center gap-x-2 text-white mb-4 bg-orange-800/30 w-fit rounded-lg px-4 py-2">
|
||||
<div className="gap-x-2 flex items-center">
|
||||
<Flask size={18} />
|
||||
<p className="text-sm md:text-base">
|
||||
Using a locally hosted LLM is experimental. Use with caution.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="w-full flex items-center gap-[36px]">
|
||||
<NativeModelSelection settings={settings} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function NativeModelSelection({ settings }) {
|
||||
const [customModels, setCustomModels] = useState([]);
|
||||
const [loading, setLoading] = useState(true);
|
||||
|
||||
useEffect(() => {
|
||||
async function findCustomModels() {
|
||||
setLoading(true);
|
||||
const { models } = await System.customModels("native-llm", null, null);
|
||||
setCustomModels(models || []);
|
||||
setLoading(false);
|
||||
}
|
||||
findCustomModels();
|
||||
}, []);
|
||||
|
||||
if (loading || customModels.length == 0) {
|
||||
return (
|
||||
<div className="flex flex-col w-60">
|
||||
<label className="text-white text-sm font-semibold block mb-3">
|
||||
Model Selection
|
||||
</label>
|
||||
<select
|
||||
name="NativeLLMModelPref"
|
||||
disabled={true}
|
||||
className="border-none bg-theme-settings-input-bg text-white placeholder:text-theme-settings-input-placeholder text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5"
|
||||
>
|
||||
<option disabled={true} selected={true}>
|
||||
-- waiting for models --
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col w-60">
|
||||
<label className="text-white text-sm font-semibold block mb-3">
|
||||
Model Selection
|
||||
</label>
|
||||
<select
|
||||
name="NativeLLMModelPref"
|
||||
required={true}
|
||||
className="border-none bg-theme-settings-input-bg text-white placeholder:text-theme-settings-input-placeholder text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5"
|
||||
>
|
||||
{customModels.length > 0 && (
|
||||
<optgroup label="Your loaded models">
|
||||
{customModels.map((model) => {
|
||||
return (
|
||||
<option
|
||||
key={model.id}
|
||||
value={model.id}
|
||||
selected={settings.NativeLLMModelPref === model.id}
|
||||
>
|
||||
{model.id}
|
||||
</option>
|
||||
);
|
||||
})}
|
||||
</optgroup>
|
||||
)}
|
||||
</select>
|
||||
</div>
|
||||
<div className="flex flex-col w-60">
|
||||
<label className="text-white text-sm font-semibold block mb-3">
|
||||
Token context window
|
||||
</label>
|
||||
<input
|
||||
type="number"
|
||||
name="NativeLLMTokenLimit"
|
||||
className="border-none bg-theme-settings-input-bg text-white placeholder:text-theme-settings-input-placeholder text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5"
|
||||
placeholder="4096"
|
||||
min={1}
|
||||
onScroll={(e) => e.target.blur()}
|
||||
defaultValue={settings?.NativeLLMTokenLimit}
|
||||
required={true}
|
||||
autoComplete="off"
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
|
@ -4,7 +4,6 @@ import { useEffect, useState } from "react";
|
|||
// Providers which cannot use this feature for workspace<>model selection
|
||||
export const DISABLED_PROVIDERS = [
|
||||
"azure",
|
||||
"native",
|
||||
"textgenwebui",
|
||||
"generic-openai",
|
||||
"bedrock",
|
||||
|
@ -47,7 +46,6 @@ const PROVIDER_DEFAULT_MODELS = {
|
|||
fireworksai: [],
|
||||
"nvidia-nim": [],
|
||||
groq: [],
|
||||
native: [],
|
||||
cohere: [
|
||||
"command-r",
|
||||
"command-r-plus",
|
||||
|
|
|
@ -1,7 +1,15 @@
|
|||
import React from "react";
|
||||
import { DefaultBadge } from "../Badges/default";
|
||||
|
||||
export default function DefaultSkillPanel({ title, description, image, icon }) {
|
||||
export default function DefaultSkillPanel({
|
||||
title,
|
||||
description,
|
||||
image,
|
||||
icon,
|
||||
enabled = true,
|
||||
toggleSkill,
|
||||
skill,
|
||||
}) {
|
||||
return (
|
||||
<div className="p-2">
|
||||
<div className="flex flex-col gap-y-[18px] max-w-[500px]">
|
||||
|
@ -21,10 +29,26 @@ export default function DefaultSkillPanel({ title, description, image, icon }) {
|
|||
</label>
|
||||
<DefaultBadge title={title} />
|
||||
</div>
|
||||
<label
|
||||
className={`border-none relative inline-flex items-center ml-auto cursor-pointer`}
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
className="peer sr-only"
|
||||
checked={enabled}
|
||||
onChange={() => toggleSkill(skill)}
|
||||
/>
|
||||
<div className="peer-disabled:opacity-50 pointer-events-none peer h-6 w-11 rounded-full bg-[#CFCFD0] after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:shadow-xl after:border-none after:bg-white after:box-shadow-md after:transition-all after:content-[''] peer-checked:bg-[#32D583] peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-transparent"></div>
|
||||
<span className="ml-3 text-sm font-medium"></span>
|
||||
</label>
|
||||
</div>
|
||||
<img src={image} alt={title} className="w-full rounded-md" />
|
||||
<p className="text-theme-text-secondary text-opacity-60 text-xs font-medium py-1.5">
|
||||
{description}
|
||||
<br />
|
||||
<br />
|
||||
By default, this skill is enabled, but you can disable it if you don't
|
||||
want it to be available to the agent.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -15,14 +15,16 @@ import ImportedSkillConfig from "./Imported/ImportedSkillConfig";
|
|||
import { Tooltip } from "react-tooltip";
|
||||
|
||||
export default function AdminAgents() {
|
||||
const formEl = useRef(null);
|
||||
const [hasChanges, setHasChanges] = useState(false);
|
||||
const [settings, setSettings] = useState({});
|
||||
const [selectedSkill, setSelectedSkill] = useState("");
|
||||
const [agentSkills, setAgentSkills] = useState([]);
|
||||
const [importedSkills, setImportedSkills] = useState([]);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [showSkillModal, setShowSkillModal] = useState(false);
|
||||
const formEl = useRef(null);
|
||||
|
||||
const [agentSkills, setAgentSkills] = useState([]);
|
||||
const [importedSkills, setImportedSkills] = useState([]);
|
||||
const [disabledAgentSkills, setDisabledAgentSkills] = useState([]);
|
||||
|
||||
// Alert user if they try to leave the page with unsaved changes
|
||||
useEffect(() => {
|
||||
|
@ -42,17 +44,31 @@ export default function AdminAgents() {
|
|||
async function fetchSettings() {
|
||||
const _settings = await System.keys();
|
||||
const _preferences = await Admin.systemPreferencesByFields([
|
||||
"disabled_agent_skills",
|
||||
"default_agent_skills",
|
||||
"imported_agent_skills",
|
||||
]);
|
||||
setSettings({ ..._settings, preferences: _preferences.settings } ?? {});
|
||||
setAgentSkills(_preferences.settings?.default_agent_skills ?? []);
|
||||
setDisabledAgentSkills(
|
||||
_preferences.settings?.disabled_agent_skills ?? []
|
||||
);
|
||||
setImportedSkills(_preferences.settings?.imported_agent_skills ?? []);
|
||||
setLoading(false);
|
||||
}
|
||||
fetchSettings();
|
||||
}, []);
|
||||
|
||||
const toggleDefaultSkill = (skillName) => {
|
||||
setDisabledAgentSkills((prev) => {
|
||||
const updatedSkills = prev.includes(skillName)
|
||||
? prev.filter((name) => name !== skillName)
|
||||
: [...prev, skillName];
|
||||
setHasChanges(true);
|
||||
return updatedSkills;
|
||||
});
|
||||
};
|
||||
|
||||
const toggleAgentSkill = (skillName) => {
|
||||
setAgentSkills((prev) => {
|
||||
const updatedSkills = prev.includes(skillName)
|
||||
|
@ -93,11 +109,15 @@ export default function AdminAgents() {
|
|||
if (success) {
|
||||
const _settings = await System.keys();
|
||||
const _preferences = await Admin.systemPreferencesByFields([
|
||||
"disabled_agent_skills",
|
||||
"default_agent_skills",
|
||||
"imported_agent_skills",
|
||||
]);
|
||||
setSettings({ ..._settings, preferences: _preferences.settings } ?? {});
|
||||
setAgentSkills(_preferences.settings?.default_agent_skills ?? []);
|
||||
setDisabledAgentSkills(
|
||||
_preferences.settings?.disabled_agent_skills ?? []
|
||||
);
|
||||
setImportedSkills(_preferences.settings?.imported_agent_skills ?? []);
|
||||
showToast(`Agent preferences saved successfully.`, "success", {
|
||||
clear: true,
|
||||
|
@ -143,6 +163,11 @@ export default function AdminAgents() {
|
|||
type="hidden"
|
||||
value={agentSkills.join(",")}
|
||||
/>
|
||||
<input
|
||||
name="system::disabled_agent_skills"
|
||||
type="hidden"
|
||||
value={disabledAgentSkills.join(",")}
|
||||
/>
|
||||
|
||||
{/* Skill settings nav */}
|
||||
<div hidden={showSkillModal} className="flex flex-col gap-y-[18px]">
|
||||
|
@ -152,13 +177,15 @@ export default function AdminAgents() {
|
|||
</div>
|
||||
{/* Default skills */}
|
||||
<SkillList
|
||||
isDefault={true}
|
||||
skills={defaultSkills}
|
||||
selectedSkill={selectedSkill}
|
||||
handleClick={(skill) => {
|
||||
setSelectedSkill(skill);
|
||||
setShowSkillModal(true);
|
||||
}}
|
||||
activeSkills={Object.keys(defaultSkills).filter(
|
||||
(skill) => !disabledAgentSkills.includes(skill)
|
||||
)}
|
||||
/>
|
||||
{/* Configurable skills */}
|
||||
<SkillList
|
||||
|
@ -212,17 +239,35 @@ export default function AdminAgents() {
|
|||
setImportedSkills={setImportedSkills}
|
||||
/>
|
||||
) : (
|
||||
<SelectedSkillComponent
|
||||
skill={configurableSkills[selectedSkill]?.skill}
|
||||
settings={settings}
|
||||
toggleSkill={toggleAgentSkill}
|
||||
enabled={agentSkills.includes(
|
||||
configurableSkills[selectedSkill]?.skill
|
||||
<>
|
||||
{defaultSkills?.[selectedSkill] ? (
|
||||
// The selected skill is a default skill - show the default skill panel
|
||||
<SelectedSkillComponent
|
||||
skill={defaultSkills[selectedSkill]?.skill}
|
||||
settings={settings}
|
||||
toggleSkill={toggleDefaultSkill}
|
||||
enabled={
|
||||
!disabledAgentSkills.includes(
|
||||
defaultSkills[selectedSkill]?.skill
|
||||
)
|
||||
}
|
||||
setHasChanges={setHasChanges}
|
||||
{...defaultSkills[selectedSkill]}
|
||||
/>
|
||||
) : (
|
||||
// The selected skill is a configurable skill - show the configurable skill panel
|
||||
<SelectedSkillComponent
|
||||
skill={configurableSkills[selectedSkill]?.skill}
|
||||
settings={settings}
|
||||
toggleSkill={toggleAgentSkill}
|
||||
enabled={agentSkills.includes(
|
||||
configurableSkills[selectedSkill]?.skill
|
||||
)}
|
||||
setHasChanges={setHasChanges}
|
||||
{...configurableSkills[selectedSkill]}
|
||||
/>
|
||||
)}
|
||||
setHasChanges={setHasChanges}
|
||||
{...(configurableSkills[selectedSkill] ||
|
||||
defaultSkills[selectedSkill])}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
|
@ -258,6 +303,11 @@ export default function AdminAgents() {
|
|||
type="hidden"
|
||||
value={agentSkills.join(",")}
|
||||
/>
|
||||
<input
|
||||
name="system::disabled_agent_skills"
|
||||
type="hidden"
|
||||
value={disabledAgentSkills.join(",")}
|
||||
/>
|
||||
|
||||
{/* Skill settings nav */}
|
||||
<div className="flex flex-col gap-y-[18px]">
|
||||
|
@ -268,10 +318,12 @@ export default function AdminAgents() {
|
|||
|
||||
{/* Default skills list */}
|
||||
<SkillList
|
||||
isDefault={true}
|
||||
skills={defaultSkills}
|
||||
selectedSkill={selectedSkill}
|
||||
handleClick={setSelectedSkill}
|
||||
activeSkills={Object.keys(defaultSkills).filter(
|
||||
(skill) => !disabledAgentSkills.includes(skill)
|
||||
)}
|
||||
/>
|
||||
{/* Configurable skills */}
|
||||
<SkillList
|
||||
|
@ -304,17 +356,35 @@ export default function AdminAgents() {
|
|||
setImportedSkills={setImportedSkills}
|
||||
/>
|
||||
) : (
|
||||
<SelectedSkillComponent
|
||||
skill={configurableSkills[selectedSkill]?.skill}
|
||||
settings={settings}
|
||||
toggleSkill={toggleAgentSkill}
|
||||
enabled={agentSkills.includes(
|
||||
configurableSkills[selectedSkill]?.skill
|
||||
<>
|
||||
{defaultSkills?.[selectedSkill] ? (
|
||||
// The selected skill is a default skill - show the default skill panel
|
||||
<SelectedSkillComponent
|
||||
skill={defaultSkills[selectedSkill]?.skill}
|
||||
settings={settings}
|
||||
toggleSkill={toggleDefaultSkill}
|
||||
enabled={
|
||||
!disabledAgentSkills.includes(
|
||||
defaultSkills[selectedSkill]?.skill
|
||||
)
|
||||
}
|
||||
setHasChanges={setHasChanges}
|
||||
{...defaultSkills[selectedSkill]}
|
||||
/>
|
||||
) : (
|
||||
// The selected skill is a configurable skill - show the configurable skill panel
|
||||
<SelectedSkillComponent
|
||||
skill={configurableSkills[selectedSkill]?.skill}
|
||||
settings={settings}
|
||||
toggleSkill={toggleAgentSkill}
|
||||
enabled={agentSkills.includes(
|
||||
configurableSkills[selectedSkill]?.skill
|
||||
)}
|
||||
setHasChanges={setHasChanges}
|
||||
{...configurableSkills[selectedSkill]}
|
||||
/>
|
||||
)}
|
||||
setHasChanges={setHasChanges}
|
||||
{...(configurableSkills[selectedSkill] ||
|
||||
defaultSkills[selectedSkill])}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
|
|
|
@ -23,21 +23,24 @@ export const defaultSkills = {
|
|||
component: DefaultSkillPanel,
|
||||
icon: Brain,
|
||||
image: RAGImage,
|
||||
skill: "rag-memory",
|
||||
},
|
||||
"view-summarize": {
|
||||
"document-summarizer": {
|
||||
title: "View & summarize documents",
|
||||
description:
|
||||
"Allow the agent to list and summarize the content of workspace files currently embedded.",
|
||||
component: DefaultSkillPanel,
|
||||
icon: File,
|
||||
image: SummarizeImage,
|
||||
skill: "document-summarizer",
|
||||
},
|
||||
"scrape-websites": {
|
||||
"web-scraping": {
|
||||
title: "Scrape websites",
|
||||
description: "Allow the agent to visit and scrape the content of websites.",
|
||||
component: DefaultSkillPanel,
|
||||
icon: Browser,
|
||||
image: ScrapeWebsitesImage,
|
||||
skill: "web-scraping",
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -38,7 +38,6 @@ import AzureAiOptions from "@/components/LLMSelection/AzureAiOptions";
|
|||
import AnthropicAiOptions from "@/components/LLMSelection/AnthropicAiOptions";
|
||||
import LMStudioOptions from "@/components/LLMSelection/LMStudioOptions";
|
||||
import LocalAiOptions from "@/components/LLMSelection/LocalAiOptions";
|
||||
import NativeLLMOptions from "@/components/LLMSelection/NativeLLMOptions";
|
||||
import GeminiLLMOptions from "@/components/LLMSelection/GeminiLLMOptions";
|
||||
import OllamaLLMOptions from "@/components/LLMSelection/OllamaLLMOptions";
|
||||
import NovitaLLMOptions from "@/components/LLMSelection/NovitaLLMOptions";
|
||||
|
@ -290,16 +289,6 @@ export const AVAILABLE_LLM_PROVIDERS = [
|
|||
description: "Run xAI's powerful LLMs like Grok-2 and more.",
|
||||
requiredConfig: ["XAIApiKey", "XAIModelPref"],
|
||||
},
|
||||
|
||||
{
|
||||
name: "Native",
|
||||
value: "native",
|
||||
logo: AnythingLLMIcon,
|
||||
options: (settings) => <NativeLLMOptions settings={settings} />,
|
||||
description:
|
||||
"Use a downloaded custom Llama model for chatting on this AnythingLLM instance.",
|
||||
requiredConfig: [],
|
||||
},
|
||||
];
|
||||
|
||||
export default function GeneralLLMPreference() {
|
||||
|
@ -312,7 +301,6 @@ export default function GeneralLLMPreference() {
|
|||
const [selectedLLM, setSelectedLLM] = useState(null);
|
||||
const [searchMenuOpen, setSearchMenuOpen] = useState(false);
|
||||
const searchInputRef = useRef(null);
|
||||
const isHosted = window.location.hostname.includes("useanything.com");
|
||||
const { t } = useTranslation();
|
||||
|
||||
const handleSubmit = async (e) => {
|
||||
|
@ -449,7 +437,6 @@ export default function GeneralLLMPreference() {
|
|||
</div>
|
||||
<div className="flex-1 pl-4 pr-2 flex flex-col gap-y-1 overflow-y-auto white-scrollbar pb-4">
|
||||
{filteredLLMs.map((llm) => {
|
||||
if (llm.value === "native" && isHosted) return null;
|
||||
return (
|
||||
<LLMItem
|
||||
key={llm.name}
|
||||
|
|
|
@ -105,13 +105,6 @@ export const LLM_SELECTION_PRIVACY = {
|
|||
],
|
||||
logo: OllamaLogo,
|
||||
},
|
||||
native: {
|
||||
name: "Custom Llama Model",
|
||||
description: [
|
||||
"Your model and chats are only accessible on this AnythingLLM instance",
|
||||
],
|
||||
logo: AnythingLLMIcon,
|
||||
},
|
||||
togetherai: {
|
||||
name: "TogetherAI",
|
||||
description: [
|
||||
|
|
|
@ -32,7 +32,6 @@ import AzureAiOptions from "@/components/LLMSelection/AzureAiOptions";
|
|||
import AnthropicAiOptions from "@/components/LLMSelection/AnthropicAiOptions";
|
||||
import LMStudioOptions from "@/components/LLMSelection/LMStudioOptions";
|
||||
import LocalAiOptions from "@/components/LLMSelection/LocalAiOptions";
|
||||
import NativeLLMOptions from "@/components/LLMSelection/NativeLLMOptions";
|
||||
import GeminiLLMOptions from "@/components/LLMSelection/GeminiLLMOptions";
|
||||
import OllamaLLMOptions from "@/components/LLMSelection/OllamaLLMOptions";
|
||||
import MistralOptions from "@/components/LLMSelection/MistralOptions";
|
||||
|
@ -247,14 +246,6 @@ const LLMS = [
|
|||
options: (settings) => <XAILLMOptions settings={settings} />,
|
||||
description: "Run xAI's powerful LLMs like Grok-2 and more.",
|
||||
},
|
||||
{
|
||||
name: "Native",
|
||||
value: "native",
|
||||
logo: AnythingLLMIcon,
|
||||
options: (settings) => <NativeLLMOptions settings={settings} />,
|
||||
description:
|
||||
"Use a downloaded custom Llama model for chatting on this AnythingLLM instance.",
|
||||
},
|
||||
];
|
||||
|
||||
export default function LLMPreference({
|
||||
|
|
|
@ -18,7 +18,7 @@ const FREE_FORM_LLM_SELECTION = ["bedrock", "azure", "generic-openai"];
|
|||
const NO_MODEL_SELECTION = ["default", "huggingface"];
|
||||
|
||||
// Some providers we just fully disable for ease of use.
|
||||
const DISABLED_PROVIDERS = ["native"];
|
||||
const DISABLED_PROVIDERS = [];
|
||||
|
||||
const LLM_DEFAULT = {
|
||||
name: "System default",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { encode as HTMLEncode } from "he";
|
||||
import markdownIt from "markdown-it";
|
||||
import markdownItKatex from "markdown-it-katex";
|
||||
import markdownItKatexPlugin from "./plugins/markdown-katex";
|
||||
import hljs from "highlight.js";
|
||||
import "./themes/github-dark.css";
|
||||
import "./themes/github.css";
|
||||
|
@ -66,7 +66,7 @@ markdown.renderer.rules.image = function (tokens, idx) {
|
|||
return `<div class="w-full max-w-[800px]"><img src="${src}" alt="${alt}" class="w-full h-auto" /></div>`;
|
||||
};
|
||||
|
||||
markdown.use(markdownItKatex);
|
||||
markdown.use(markdownItKatexPlugin);
|
||||
|
||||
export default function renderMarkdown(text = "") {
|
||||
return markdown.render(text);
|
||||
|
|
277
frontend/src/utils/chat/plugins/markdown-katex.js
Normal file
277
frontend/src/utils/chat/plugins/markdown-katex.js
Normal file
|
@ -0,0 +1,277 @@
|
|||
import katex from "katex";
|
||||
|
||||
// Test if potential opening or closing delimieter
|
||||
// Assumes that there is a "$" at state.src[pos]
|
||||
function isValidDelim(state, pos) {
|
||||
var prevChar,
|
||||
nextChar,
|
||||
max = state.posMax,
|
||||
can_open = true,
|
||||
can_close = true;
|
||||
|
||||
prevChar = pos > 0 ? state.src.charCodeAt(pos - 1) : -1;
|
||||
nextChar = pos + 1 <= max ? state.src.charCodeAt(pos + 1) : -1;
|
||||
|
||||
// Only apply whitespace rules if we're dealing with $ delimiter
|
||||
if (state.src[pos] === "$") {
|
||||
if (
|
||||
prevChar === 0x20 /* " " */ ||
|
||||
prevChar === 0x09 /* \t */ ||
|
||||
(nextChar >= 0x30 /* "0" */ && nextChar <= 0x39) /* "9" */
|
||||
) {
|
||||
can_close = false;
|
||||
}
|
||||
if (nextChar === 0x20 /* " " */ || nextChar === 0x09 /* \t */) {
|
||||
can_open = false;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
can_open: can_open,
|
||||
can_close: can_close,
|
||||
};
|
||||
}
|
||||
|
||||
function math_inline(state, silent) {
|
||||
var start, match, token, res, pos, esc_count;
|
||||
|
||||
// Only process $ and \( delimiters for inline math
|
||||
if (
|
||||
state.src[state.pos] !== "$" &&
|
||||
(state.src[state.pos] !== "\\" || state.src[state.pos + 1] !== "(")
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Handle \( ... \) case separately
|
||||
if (state.src[state.pos] === "\\" && state.src[state.pos + 1] === "(") {
|
||||
start = state.pos + 2;
|
||||
match = start;
|
||||
while ((match = state.src.indexOf("\\)", match)) !== -1) {
|
||||
pos = match - 1;
|
||||
while (state.src[pos] === "\\") {
|
||||
pos -= 1;
|
||||
}
|
||||
if ((match - pos) % 2 == 1) {
|
||||
break;
|
||||
}
|
||||
match += 1;
|
||||
}
|
||||
|
||||
if (match === -1) {
|
||||
if (!silent) {
|
||||
state.pending += "\\(";
|
||||
}
|
||||
state.pos = start;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!silent) {
|
||||
token = state.push("math_inline", "math", 0);
|
||||
token.markup = "\\(";
|
||||
token.content = state.src.slice(start, match);
|
||||
}
|
||||
|
||||
state.pos = match + 2;
|
||||
return true;
|
||||
}
|
||||
|
||||
res = isValidDelim(state, state.pos);
|
||||
if (!res.can_open) {
|
||||
if (!silent) {
|
||||
state.pending += "$";
|
||||
}
|
||||
state.pos += 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
// First check for and bypass all properly escaped delimieters
|
||||
// This loop will assume that the first leading backtick can not
|
||||
// be the first character in state.src, which is known since
|
||||
// we have found an opening delimieter already.
|
||||
start = state.pos + 1;
|
||||
match = start;
|
||||
while ((match = state.src.indexOf("$", match)) !== -1) {
|
||||
// Found potential $, look for escapes, pos will point to
|
||||
// first non escape when complete
|
||||
pos = match - 1;
|
||||
while (state.src[pos] === "\\") {
|
||||
pos -= 1;
|
||||
}
|
||||
|
||||
// Even number of escapes, potential closing delimiter found
|
||||
if ((match - pos) % 2 == 1) {
|
||||
break;
|
||||
}
|
||||
match += 1;
|
||||
}
|
||||
|
||||
// No closing delimter found. Consume $ and continue.
|
||||
if (match === -1) {
|
||||
if (!silent) {
|
||||
state.pending += "$";
|
||||
}
|
||||
state.pos = start;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check if we have empty content, ie: $$. Do not parse.
|
||||
if (match - start === 0) {
|
||||
if (!silent) {
|
||||
state.pending += "$$";
|
||||
}
|
||||
state.pos = start + 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check for valid closing delimiter
|
||||
res = isValidDelim(state, match);
|
||||
if (!res.can_close) {
|
||||
if (!silent) {
|
||||
state.pending += "$";
|
||||
}
|
||||
state.pos = start;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!silent) {
|
||||
token = state.push("math_inline", "math", 0);
|
||||
token.markup = "$";
|
||||
token.content = state.src.slice(start, match);
|
||||
}
|
||||
|
||||
state.pos = match + 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
function math_block(state, start, end, silent) {
|
||||
var firstLine,
|
||||
lastLine,
|
||||
next,
|
||||
lastPos,
|
||||
found = false,
|
||||
token,
|
||||
pos = state.bMarks[start] + state.tShift[start],
|
||||
max = state.eMarks[start];
|
||||
|
||||
// Check for $$, \[, or standalone [ as opening delimiters
|
||||
if (pos + 1 > max) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let openDelim = state.src.slice(pos, pos + 2);
|
||||
let isDoubleDollar = openDelim === "$$";
|
||||
let isLatexBracket = openDelim === "\\[";
|
||||
|
||||
if (!isDoubleDollar && !isLatexBracket) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Determine the closing delimiter and position adjustment
|
||||
let delimiter, posAdjust;
|
||||
if (isDoubleDollar) {
|
||||
delimiter = "$$";
|
||||
posAdjust = 2;
|
||||
} else if (isLatexBracket) {
|
||||
delimiter = "\\]";
|
||||
posAdjust = 2;
|
||||
}
|
||||
|
||||
pos += posAdjust;
|
||||
firstLine = state.src.slice(pos, max);
|
||||
|
||||
if (silent) {
|
||||
return true;
|
||||
}
|
||||
if (firstLine.trim().slice(-delimiter.length) === delimiter) {
|
||||
// Single line expression
|
||||
firstLine = firstLine.trim().slice(0, -delimiter.length);
|
||||
found = true;
|
||||
}
|
||||
|
||||
for (next = start; !found; ) {
|
||||
next++;
|
||||
|
||||
if (next >= end) {
|
||||
break;
|
||||
}
|
||||
|
||||
pos = state.bMarks[next] + state.tShift[next];
|
||||
max = state.eMarks[next];
|
||||
|
||||
if (pos < max && state.tShift[next] < state.blkIndent) {
|
||||
// non-empty line with negative indent should stop the list:
|
||||
break;
|
||||
}
|
||||
|
||||
if (
|
||||
state.src.slice(pos, max).trim().slice(-delimiter.length) === delimiter
|
||||
) {
|
||||
lastPos = state.src.slice(0, max).lastIndexOf(delimiter);
|
||||
lastLine = state.src.slice(pos, lastPos);
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
||||
state.line = next + 1;
|
||||
|
||||
token = state.push("math_block", "math", 0);
|
||||
token.block = true;
|
||||
token.content =
|
||||
(firstLine && firstLine.trim() ? firstLine + "\n" : "") +
|
||||
state.getLines(start + 1, next, state.tShift[start], true) +
|
||||
(lastLine && lastLine.trim() ? lastLine : "");
|
||||
token.map = [start, state.line];
|
||||
token.markup = delimiter;
|
||||
return true;
|
||||
}
|
||||
|
||||
export default function math_plugin(md, options) {
|
||||
// Default options
|
||||
options = options || {};
|
||||
|
||||
var katexInline = function (latex) {
|
||||
options.displayMode = false;
|
||||
try {
|
||||
latex = latex
|
||||
.replace(/^\[(.*)\]$/, "$1")
|
||||
.replace(/^\\\((.*)\\\)$/, "$1")
|
||||
.replace(/^\\\[(.*)\\\]$/, "$1");
|
||||
return katex.renderToString(latex, options);
|
||||
} catch (error) {
|
||||
if (options.throwOnError) {
|
||||
console.log(error);
|
||||
}
|
||||
return latex;
|
||||
}
|
||||
};
|
||||
|
||||
var inlineRenderer = function (tokens, idx) {
|
||||
return katexInline(tokens[idx].content);
|
||||
};
|
||||
|
||||
var katexBlock = function (latex) {
|
||||
options.displayMode = true;
|
||||
try {
|
||||
// Remove surrounding delimiters if present
|
||||
latex = latex.replace(/^\[(.*)\]$/, "$1").replace(/^\\\[(.*)\\\]$/, "$1");
|
||||
return "<p>" + katex.renderToString(latex, options) + "</p>";
|
||||
} catch (error) {
|
||||
if (options.throwOnError) {
|
||||
console.log(error);
|
||||
}
|
||||
return latex;
|
||||
}
|
||||
};
|
||||
|
||||
var blockRenderer = function (tokens, idx) {
|
||||
return katexBlock(tokens[idx].content) + "\n";
|
||||
};
|
||||
|
||||
md.inline.ruler.after("escape", "math_inline", math_inline);
|
||||
md.block.ruler.after("blockquote", "math_block", math_block, {
|
||||
alt: ["paragraph", "reference", "blockquote", "list"],
|
||||
});
|
||||
md.renderer.rules.math_inline = inlineRenderer;
|
||||
md.renderer.rules.math_block = blockRenderer;
|
||||
}
|
|
@ -2483,13 +2483,6 @@ lru-cache@^5.1.1:
|
|||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
markdown-it-katex@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/markdown-it-katex/-/markdown-it-katex-2.0.3.tgz#d7b86a1aea0b9d6496fab4e7919a18fdef589c39"
|
||||
integrity sha512-nUkkMtRWeg7OpdflamflE/Ho/pWl64Lk9wNBKOmaj33XkQdumhXAIYhI0WO03GeiycPCsxbmX536V5NEXpC3Ng==
|
||||
dependencies:
|
||||
katex "^0.6.0"
|
||||
|
||||
markdown-it@^13.0.1:
|
||||
version "13.0.2"
|
||||
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.2.tgz#1bc22e23379a6952e5d56217fbed881e0c94d536"
|
||||
|
|
|
@ -374,6 +374,9 @@ function adminEndpoints(app) {
|
|||
case "default_agent_skills":
|
||||
requestedSettings[label] = safeJsonParse(setting?.value, []);
|
||||
break;
|
||||
case "disabled_agent_skills":
|
||||
requestedSettings[label] = safeJsonParse(setting?.value, []);
|
||||
break;
|
||||
case "imported_agent_skills":
|
||||
requestedSettings[label] = ImportedPlugin.listImportedPlugins();
|
||||
break;
|
||||
|
@ -440,6 +443,12 @@ function adminEndpoints(app) {
|
|||
?.value,
|
||||
[]
|
||||
) || [],
|
||||
disabled_agent_skills:
|
||||
safeJsonParse(
|
||||
(await SystemSettings.get({ label: "disabled_agent_skills" }))
|
||||
?.value,
|
||||
[]
|
||||
) || [],
|
||||
imported_agent_skills: ImportedPlugin.listImportedPlugins(),
|
||||
custom_app_name:
|
||||
(await SystemSettings.get({ label: "custom_app_name" }))?.value ||
|
||||
|
|
|
@ -24,6 +24,7 @@ const SystemSettings = {
|
|||
"agent_search_provider",
|
||||
"agent_sql_connections",
|
||||
"default_agent_skills",
|
||||
"disabled_agent_skills",
|
||||
"imported_agent_skills",
|
||||
"custom_app_name",
|
||||
"feature_flags",
|
||||
|
@ -40,6 +41,7 @@ const SystemSettings = {
|
|||
"text_splitter_chunk_overlap",
|
||||
"agent_search_provider",
|
||||
"default_agent_skills",
|
||||
"disabled_agent_skills",
|
||||
"agent_sql_connections",
|
||||
"custom_app_name",
|
||||
|
||||
|
@ -125,6 +127,15 @@ const SystemSettings = {
|
|||
return JSON.stringify([]);
|
||||
}
|
||||
},
|
||||
disabled_agent_skills: (updates) => {
|
||||
try {
|
||||
const skills = updates.split(",").filter((skill) => !!skill);
|
||||
return JSON.stringify(skills);
|
||||
} catch (e) {
|
||||
console.error(`Could not validate disabled agent skills.`);
|
||||
return JSON.stringify([]);
|
||||
}
|
||||
},
|
||||
agent_sql_connections: async (updates) => {
|
||||
const existingConnections = safeJsonParse(
|
||||
(await SystemSettings.get({ label: "agent_sql_connections" }))?.value,
|
||||
|
@ -490,10 +501,6 @@ const SystemSettings = {
|
|||
GroqApiKey: !!process.env.GROQ_API_KEY,
|
||||
GroqModelPref: process.env.GROQ_MODEL_PREF,
|
||||
|
||||
// Native LLM Keys
|
||||
NativeLLMModelPref: process.env.NATIVE_LLM_MODEL_PREF,
|
||||
NativeLLMTokenLimit: process.env.NATIVE_LLM_MODEL_TOKEN_LIMIT,
|
||||
|
||||
// HuggingFace Dedicated Inference
|
||||
HuggingFaceLLMEndpoint: process.env.HUGGING_FACE_LLM_ENDPOINT,
|
||||
HuggingFaceLLMAccessToken: !!process.env.HUGGING_FACE_LLM_API_KEY,
|
||||
|
|
|
@ -62,7 +62,6 @@
|
|||
"mssql": "^10.0.2",
|
||||
"multer": "^1.4.5-lts.1",
|
||||
"mysql2": "^3.9.8",
|
||||
"node-llama-cpp": "^2.8.0",
|
||||
"ollama": "^0.5.0",
|
||||
"openai": "4.38.5",
|
||||
"pg": "^8.11.5",
|
||||
|
|
|
@ -1,244 +0,0 @@
|
|||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const { NativeEmbedder } = require("../../EmbeddingEngines/native");
|
||||
const {
|
||||
writeResponseChunk,
|
||||
clientAbortedHandler,
|
||||
} = require("../../helpers/chat/responses");
|
||||
const {
|
||||
LLMPerformanceMonitor,
|
||||
} = require("../../helpers/chat/LLMPerformanceMonitor");
|
||||
|
||||
// Docs: https://js.langchain.com/docs/integrations/chat/llama_cpp
|
||||
const ChatLlamaCpp = (...args) =>
|
||||
import("@langchain/community/chat_models/llama_cpp").then(
|
||||
({ ChatLlamaCpp }) => new ChatLlamaCpp(...args)
|
||||
);
|
||||
|
||||
class NativeLLM {
|
||||
constructor(embedder = null, modelPreference = null) {
|
||||
if (!process.env.NATIVE_LLM_MODEL_PREF)
|
||||
throw new Error("No local Llama model was set.");
|
||||
|
||||
this.model = modelPreference || process.env.NATIVE_LLM_MODEL_PREF || null;
|
||||
this.limits = {
|
||||
history: this.promptWindowLimit() * 0.15,
|
||||
system: this.promptWindowLimit() * 0.15,
|
||||
user: this.promptWindowLimit() * 0.7,
|
||||
};
|
||||
this.embedder = embedder ?? new NativeEmbedder();
|
||||
this.cacheDir = path.resolve(
|
||||
process.env.STORAGE_DIR
|
||||
? path.resolve(process.env.STORAGE_DIR, "models", "downloaded")
|
||||
: path.resolve(__dirname, `../../../storage/models/downloaded`)
|
||||
);
|
||||
|
||||
// Make directory when it does not exist in existing installations
|
||||
if (!fs.existsSync(this.cacheDir)) fs.mkdirSync(this.cacheDir);
|
||||
this.defaultTemp = 0.7;
|
||||
}
|
||||
|
||||
async #initializeLlamaModel(temperature = 0.7) {
|
||||
const modelPath = path.join(this.cacheDir, this.model);
|
||||
if (!fs.existsSync(modelPath))
|
||||
throw new Error(
|
||||
`Local Llama model ${this.model} was not found in storage!`
|
||||
);
|
||||
|
||||
global.llamaModelInstance = await ChatLlamaCpp({
|
||||
modelPath,
|
||||
temperature,
|
||||
useMlock: true,
|
||||
});
|
||||
}
|
||||
|
||||
// If the model has been loaded once, it is in the memory now
|
||||
// so we can skip re-loading it and instead go straight to inference.
|
||||
// Note: this will break temperature setting hopping between workspaces with different temps.
|
||||
async #llamaClient({ temperature = 0.7 }) {
|
||||
if (global.llamaModelInstance) return global.llamaModelInstance;
|
||||
await this.#initializeLlamaModel(temperature);
|
||||
return global.llamaModelInstance;
|
||||
}
|
||||
|
||||
#convertToLangchainPrototypes(chats = []) {
|
||||
const {
|
||||
HumanMessage,
|
||||
SystemMessage,
|
||||
AIMessage,
|
||||
} = require("@langchain/core/messages");
|
||||
const langchainChats = [];
|
||||
const roleToMessageMap = {
|
||||
system: SystemMessage,
|
||||
user: HumanMessage,
|
||||
assistant: AIMessage,
|
||||
};
|
||||
|
||||
for (const chat of chats) {
|
||||
if (!roleToMessageMap.hasOwnProperty(chat.role)) continue;
|
||||
const MessageClass = roleToMessageMap[chat.role];
|
||||
langchainChats.push(new MessageClass({ content: chat.content }));
|
||||
}
|
||||
|
||||
return langchainChats;
|
||||
}
|
||||
|
||||
#appendContext(contextTexts = []) {
|
||||
if (!contextTexts || !contextTexts.length) return "";
|
||||
return (
|
||||
"\nContext:\n" +
|
||||
contextTexts
|
||||
.map((text, i) => {
|
||||
return `[CONTEXT ${i}]:\n${text}\n[END CONTEXT ${i}]\n\n`;
|
||||
})
|
||||
.join("")
|
||||
);
|
||||
}
|
||||
|
||||
streamingEnabled() {
|
||||
return "streamGetChatCompletion" in this;
|
||||
}
|
||||
|
||||
static promptWindowLimit(_modelName) {
|
||||
const limit = process.env.NATIVE_LLM_MODEL_TOKEN_LIMIT || 4096;
|
||||
if (!limit || isNaN(Number(limit)))
|
||||
throw new Error("No NativeAI token context limit was set.");
|
||||
return Number(limit);
|
||||
}
|
||||
|
||||
// Ensure the user set a value for the token limit
|
||||
promptWindowLimit() {
|
||||
const limit = process.env.NATIVE_LLM_MODEL_TOKEN_LIMIT || 4096;
|
||||
if (!limit || isNaN(Number(limit)))
|
||||
throw new Error("No NativeAI token context limit was set.");
|
||||
return Number(limit);
|
||||
}
|
||||
|
||||
constructPrompt({
|
||||
systemPrompt = "",
|
||||
contextTexts = [],
|
||||
chatHistory = [],
|
||||
userPrompt = "",
|
||||
}) {
|
||||
const prompt = {
|
||||
role: "system",
|
||||
content: `${systemPrompt}${this.#appendContext(contextTexts)}`,
|
||||
};
|
||||
return [prompt, ...chatHistory, { role: "user", content: userPrompt }];
|
||||
}
|
||||
|
||||
async getChatCompletion(messages = null, { temperature = 0.7 }) {
|
||||
const model = await this.#llamaClient({ temperature });
|
||||
const result = await LLMPerformanceMonitor.measureAsyncFunction(
|
||||
model.call(messages)
|
||||
);
|
||||
|
||||
if (!result.output?.content) return null;
|
||||
|
||||
const promptTokens = LLMPerformanceMonitor.countTokens(messages);
|
||||
const completionTokens = LLMPerformanceMonitor.countTokens(
|
||||
result.output.content
|
||||
);
|
||||
return {
|
||||
textResponse: result.output.content,
|
||||
metrics: {
|
||||
prompt_tokens: promptTokens,
|
||||
completion_tokens: completionTokens,
|
||||
total_tokens: promptTokens + completionTokens,
|
||||
outputTps: completionTokens / result.duration,
|
||||
duration: result.duration,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
async streamGetChatCompletion(messages = null, { temperature = 0.7 }) {
|
||||
const model = await this.#llamaClient({ temperature });
|
||||
const measuredStreamRequest = await LLMPerformanceMonitor.measureStream(
|
||||
model.stream(messages),
|
||||
messages
|
||||
);
|
||||
return measuredStreamRequest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the default stream response for a chat.
|
||||
* @param {import("express").Response} response
|
||||
* @param {import('../../helpers/chat/LLMPerformanceMonitor').MonitoredStream} stream
|
||||
* @param {Object} responseProps
|
||||
* @returns {Promise<string>}
|
||||
*/
|
||||
handleStream(response, stream, responseProps) {
|
||||
const { uuid = uuidv4(), sources = [] } = responseProps;
|
||||
|
||||
return new Promise(async (resolve) => {
|
||||
let fullText = "";
|
||||
|
||||
// Establish listener to early-abort a streaming response
|
||||
// in case things go sideways or the user does not like the response.
|
||||
// We preserve the generated text but continue as if chat was completed
|
||||
// to preserve previously generated content.
|
||||
const handleAbort = () => {
|
||||
stream?.endMeasurement({
|
||||
completion_tokens: LLMPerformanceMonitor.countTokens(fullText),
|
||||
});
|
||||
clientAbortedHandler(resolve, fullText);
|
||||
};
|
||||
response.on("close", handleAbort);
|
||||
|
||||
for await (const chunk of stream) {
|
||||
if (chunk === undefined)
|
||||
throw new Error(
|
||||
"Stream returned undefined chunk. Aborting reply - check model provider logs."
|
||||
);
|
||||
|
||||
const content = chunk.hasOwnProperty("content") ? chunk.content : chunk;
|
||||
fullText += content;
|
||||
writeResponseChunk(response, {
|
||||
uuid,
|
||||
sources: [],
|
||||
type: "textResponseChunk",
|
||||
textResponse: content,
|
||||
close: false,
|
||||
error: false,
|
||||
});
|
||||
}
|
||||
|
||||
writeResponseChunk(response, {
|
||||
uuid,
|
||||
sources,
|
||||
type: "textResponseChunk",
|
||||
textResponse: "",
|
||||
close: true,
|
||||
error: false,
|
||||
});
|
||||
response.removeListener("close", handleAbort);
|
||||
stream?.endMeasurement({
|
||||
completion_tokens: LLMPerformanceMonitor.countTokens(fullText),
|
||||
});
|
||||
resolve(fullText);
|
||||
});
|
||||
}
|
||||
|
||||
// Simple wrapper for dynamic embedder & normalize interface for all LLM implementations
|
||||
async embedTextInput(textInput) {
|
||||
return await this.embedder.embedTextInput(textInput);
|
||||
}
|
||||
async embedChunks(textChunks = []) {
|
||||
return await this.embedder.embedChunks(textChunks);
|
||||
}
|
||||
|
||||
async compressMessages(promptArgs = {}, rawHistory = []) {
|
||||
const { messageArrayCompressor } = require("../../helpers/chat");
|
||||
const messageArray = this.constructPrompt(promptArgs);
|
||||
const compressedMessages = await messageArrayCompressor(
|
||||
this,
|
||||
messageArray,
|
||||
rawHistory
|
||||
);
|
||||
return this.#convertToLangchainPrototypes(compressedMessages);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
NativeLLM,
|
||||
};
|
|
@ -4,6 +4,13 @@ const { safeJsonParse } = require("../http");
|
|||
const Provider = require("./aibitat/providers/ai-provider");
|
||||
const ImportedPlugin = require("./imported");
|
||||
|
||||
// This is a list of skills that are built-in and default enabled.
|
||||
const DEFAULT_SKILLS = [
|
||||
AgentPlugins.memory.name,
|
||||
AgentPlugins.docSummarizer.name,
|
||||
AgentPlugins.webScraping.name,
|
||||
];
|
||||
|
||||
const USER_AGENT = {
|
||||
name: "USER",
|
||||
getDefinition: async () => {
|
||||
|
@ -17,16 +24,9 @@ const USER_AGENT = {
|
|||
const WORKSPACE_AGENT = {
|
||||
name: "@agent",
|
||||
getDefinition: async (provider = null) => {
|
||||
const defaultFunctions = [
|
||||
AgentPlugins.memory.name, // RAG
|
||||
AgentPlugins.docSummarizer.name, // Doc Summary
|
||||
AgentPlugins.webScraping.name, // Collector web-scraping
|
||||
];
|
||||
|
||||
return {
|
||||
role: Provider.systemPrompt(provider),
|
||||
functions: [
|
||||
...defaultFunctions,
|
||||
...(await agentSkillsFromSystemSettings()),
|
||||
...(await ImportedPlugin.activeImportedPlugins()),
|
||||
],
|
||||
|
@ -41,10 +41,29 @@ const WORKSPACE_AGENT = {
|
|||
*/
|
||||
async function agentSkillsFromSystemSettings() {
|
||||
const systemFunctions = [];
|
||||
const _setting = (await SystemSettings.get({ label: "default_agent_skills" }))
|
||||
?.value;
|
||||
|
||||
safeJsonParse(_setting, []).forEach((skillName) => {
|
||||
// Load non-imported built-in skills that are configurable, but are default enabled.
|
||||
const _disabledDefaultSkills = safeJsonParse(
|
||||
await SystemSettings.getValueOrFallback(
|
||||
{ label: "disabled_agent_skills" },
|
||||
"[]"
|
||||
),
|
||||
[]
|
||||
);
|
||||
DEFAULT_SKILLS.forEach((skill) => {
|
||||
if (!_disabledDefaultSkills.includes(skill))
|
||||
systemFunctions.push(AgentPlugins[skill].name);
|
||||
});
|
||||
|
||||
// Load non-imported built-in skills that are configurable.
|
||||
const _setting = safeJsonParse(
|
||||
await SystemSettings.getValueOrFallback(
|
||||
{ label: "default_agent_skills" },
|
||||
"[]"
|
||||
),
|
||||
[]
|
||||
);
|
||||
_setting.forEach((skillName) => {
|
||||
if (!AgentPlugins.hasOwnProperty(skillName)) return;
|
||||
|
||||
// This is a plugin module with many sub-children plugins who
|
||||
|
|
|
@ -13,7 +13,6 @@ const SUPPORT_CUSTOM_MODELS = [
|
|||
"openai",
|
||||
"localai",
|
||||
"ollama",
|
||||
"native-llm",
|
||||
"togetherai",
|
||||
"fireworksai",
|
||||
"nvidia-nim",
|
||||
|
@ -49,8 +48,6 @@ async function getCustomModels(provider = "", apiKey = null, basePath = null) {
|
|||
return await getFireworksAiModels(apiKey);
|
||||
case "mistral":
|
||||
return await getMistralModels(apiKey);
|
||||
case "native-llm":
|
||||
return nativeLLMModels();
|
||||
case "perplexity":
|
||||
return await getPerplexityModels();
|
||||
case "openrouter":
|
||||
|
@ -446,26 +443,6 @@ async function getMistralModels(apiKey = null) {
|
|||
return { models, error: null };
|
||||
}
|
||||
|
||||
function nativeLLMModels() {
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const storageDir = path.resolve(
|
||||
process.env.STORAGE_DIR
|
||||
? path.resolve(process.env.STORAGE_DIR, "models", "downloaded")
|
||||
: path.resolve(__dirname, `../../storage/models/downloaded`)
|
||||
);
|
||||
if (!fs.existsSync(storageDir))
|
||||
return { models: [], error: "No model/downloaded storage folder found." };
|
||||
|
||||
const files = fs
|
||||
.readdirSync(storageDir)
|
||||
.filter((file) => file.toLowerCase().includes(".gguf"))
|
||||
.map((file) => {
|
||||
return { id: file, name: file };
|
||||
});
|
||||
return { models: files, error: null };
|
||||
}
|
||||
|
||||
async function getElevenLabsModels(apiKey = null) {
|
||||
const models = (await ElevenLabsTTS.voices(apiKey)).map((model) => {
|
||||
return {
|
||||
|
|
|
@ -158,9 +158,6 @@ function getLLMProvider({ provider = null, model = null } = {}) {
|
|||
case "mistral":
|
||||
const { MistralLLM } = require("../AiProviders/mistral");
|
||||
return new MistralLLM(embedder, model);
|
||||
case "native":
|
||||
const { NativeLLM } = require("../AiProviders/native");
|
||||
return new NativeLLM(embedder, model);
|
||||
case "huggingface":
|
||||
const { HuggingFaceLLM } = require("../AiProviders/huggingface");
|
||||
return new HuggingFaceLLM(embedder, model);
|
||||
|
@ -302,9 +299,6 @@ function getLLMProviderClass({ provider = null } = {}) {
|
|||
case "mistral":
|
||||
const { MistralLLM } = require("../AiProviders/mistral");
|
||||
return MistralLLM;
|
||||
case "native":
|
||||
const { NativeLLM } = require("../AiProviders/native");
|
||||
return NativeLLM;
|
||||
case "huggingface":
|
||||
const { HuggingFaceLLM } = require("../AiProviders/huggingface");
|
||||
return HuggingFaceLLM;
|
||||
|
|
|
@ -122,16 +122,6 @@ const KEY_MAPPING = {
|
|||
checks: [isNotEmpty],
|
||||
},
|
||||
|
||||
// Native LLM Settings
|
||||
NativeLLMModelPref: {
|
||||
envKey: "NATIVE_LLM_MODEL_PREF",
|
||||
checks: [isDownloadedModel],
|
||||
},
|
||||
NativeLLMTokenLimit: {
|
||||
envKey: "NATIVE_LLM_MODEL_TOKEN_LIMIT",
|
||||
checks: [nonZero],
|
||||
},
|
||||
|
||||
// Hugging Face LLM Inference Settings
|
||||
HuggingFaceLLMEndpoint: {
|
||||
envKey: "HUGGING_FACE_LLM_ENDPOINT",
|
||||
|
@ -700,7 +690,6 @@ function supportedLLM(input = "") {
|
|||
"lmstudio",
|
||||
"localai",
|
||||
"ollama",
|
||||
"native",
|
||||
"togetherai",
|
||||
"fireworksai",
|
||||
"mistral",
|
||||
|
@ -815,22 +804,6 @@ function requiresForceMode(_, forceModeEnabled = false) {
|
|||
return forceModeEnabled === true ? null : "Cannot set this setting.";
|
||||
}
|
||||
|
||||
function isDownloadedModel(input = "") {
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const storageDir = path.resolve(
|
||||
process.env.STORAGE_DIR
|
||||
? path.resolve(process.env.STORAGE_DIR, "models", "downloaded")
|
||||
: path.resolve(__dirname, `../../storage/models/downloaded`)
|
||||
);
|
||||
if (!fs.existsSync(storageDir)) return false;
|
||||
|
||||
const files = fs
|
||||
.readdirSync(storageDir)
|
||||
.filter((file) => file.includes(".gguf"));
|
||||
return files.includes(input);
|
||||
}
|
||||
|
||||
async function validDockerizedUrl(input = "") {
|
||||
if (process.env.ANYTHING_LLM_RUNTIME !== "docker") return null;
|
||||
|
||||
|
|
623
server/yarn.lock
623
server/yarn.lock
|
@ -1083,18 +1083,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c"
|
||||
integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==
|
||||
|
||||
"@kwsites/file-exists@^1.1.1":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99"
|
||||
integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
|
||||
"@kwsites/promise-deferred@^1.1.1":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919"
|
||||
integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==
|
||||
|
||||
"@ladjs/graceful@^3.2.2":
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@ladjs/graceful/-/graceful-3.2.2.tgz#1b141a9dc2604df99177d6714dbe4a0bff5e2ddf"
|
||||
|
@ -1294,241 +1282,6 @@
|
|||
"@nodelib/fs.scandir" "2.1.5"
|
||||
fastq "^1.6.0"
|
||||
|
||||
"@octokit/app@^14.0.2":
|
||||
version "14.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/app/-/app-14.1.0.tgz#2d491dc70746773b83f61edf5c56817dd7d3854b"
|
||||
integrity sha512-g3uEsGOQCBl1+W1rgfwoRFUIR6PtvB2T1E4RpygeUU5LrLvlOqcxrt5lfykIeRpUPpupreGJUYl70fqMDXdTpw==
|
||||
dependencies:
|
||||
"@octokit/auth-app" "^6.0.0"
|
||||
"@octokit/auth-unauthenticated" "^5.0.0"
|
||||
"@octokit/core" "^5.0.0"
|
||||
"@octokit/oauth-app" "^6.0.0"
|
||||
"@octokit/plugin-paginate-rest" "^9.0.0"
|
||||
"@octokit/types" "^12.0.0"
|
||||
"@octokit/webhooks" "^12.0.4"
|
||||
|
||||
"@octokit/auth-app@^6.0.0":
|
||||
version "6.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/auth-app/-/auth-app-6.1.1.tgz#758a5d2e0324c750f7463b10398fd99c52b2eb89"
|
||||
integrity sha512-VrTtzRpyuT5nYGUWeGWQqH//hqEZDV+/yb6+w5wmWpmmUA1Tx950XsAc2mBBfvusfcdF2E7w8jZ1r1WwvfZ9pA==
|
||||
dependencies:
|
||||
"@octokit/auth-oauth-app" "^7.1.0"
|
||||
"@octokit/auth-oauth-user" "^4.1.0"
|
||||
"@octokit/request" "^8.3.1"
|
||||
"@octokit/request-error" "^5.1.0"
|
||||
"@octokit/types" "^13.1.0"
|
||||
deprecation "^2.3.1"
|
||||
lru-cache "^10.0.0"
|
||||
universal-github-app-jwt "^1.1.2"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/auth-oauth-app@^7.0.0", "@octokit/auth-oauth-app@^7.1.0":
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz#d0f74e19ebd5a4829cb780c107cedd6c894f20fc"
|
||||
integrity sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA==
|
||||
dependencies:
|
||||
"@octokit/auth-oauth-device" "^6.1.0"
|
||||
"@octokit/auth-oauth-user" "^4.1.0"
|
||||
"@octokit/request" "^8.3.1"
|
||||
"@octokit/types" "^13.0.0"
|
||||
"@types/btoa-lite" "^1.0.0"
|
||||
btoa-lite "^1.0.0"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/auth-oauth-device@^6.1.0":
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz#f868213a3db05fe27e68d1fc607502a322379dd9"
|
||||
integrity sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw==
|
||||
dependencies:
|
||||
"@octokit/oauth-methods" "^4.1.0"
|
||||
"@octokit/request" "^8.3.1"
|
||||
"@octokit/types" "^13.0.0"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/auth-oauth-user@^4.0.0", "@octokit/auth-oauth-user@^4.1.0":
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz#32e5529f8bd961af9839a1f8c6ab0c8ad2184eee"
|
||||
integrity sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ==
|
||||
dependencies:
|
||||
"@octokit/auth-oauth-device" "^6.1.0"
|
||||
"@octokit/oauth-methods" "^4.1.0"
|
||||
"@octokit/request" "^8.3.1"
|
||||
"@octokit/types" "^13.0.0"
|
||||
btoa-lite "^1.0.0"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/auth-token@^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7"
|
||||
integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==
|
||||
|
||||
"@octokit/auth-unauthenticated@^5.0.0":
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz#d8032211728333068b2e07b53997c29e59a03507"
|
||||
integrity sha512-oxeWzmBFxWd+XolxKTc4zr+h3mt+yofn4r7OfoIkR/Cj/o70eEGmPsFbueyJE2iBAGpjgTnEOKM3pnuEGVmiqg==
|
||||
dependencies:
|
||||
"@octokit/request-error" "^5.0.0"
|
||||
"@octokit/types" "^12.0.0"
|
||||
|
||||
"@octokit/core@^5.0.0":
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/core/-/core-5.2.0.tgz#ddbeaefc6b44a39834e1bb2e58a49a117672a7ea"
|
||||
integrity sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==
|
||||
dependencies:
|
||||
"@octokit/auth-token" "^4.0.0"
|
||||
"@octokit/graphql" "^7.1.0"
|
||||
"@octokit/request" "^8.3.1"
|
||||
"@octokit/request-error" "^5.1.0"
|
||||
"@octokit/types" "^13.0.0"
|
||||
before-after-hook "^2.2.0"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/endpoint@^9.0.1":
|
||||
version "9.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-9.0.5.tgz#e6c0ee684e307614c02fc6ac12274c50da465c44"
|
||||
integrity sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==
|
||||
dependencies:
|
||||
"@octokit/types" "^13.1.0"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/graphql@^7.1.0":
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-7.1.0.tgz#9bc1c5de92f026648131f04101cab949eeffe4e0"
|
||||
integrity sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==
|
||||
dependencies:
|
||||
"@octokit/request" "^8.3.0"
|
||||
"@octokit/types" "^13.0.0"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/oauth-app@^6.0.0":
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/oauth-app/-/oauth-app-6.1.0.tgz#22c276f6ad2364c6999837bfdd5d9c1092838726"
|
||||
integrity sha512-nIn/8eUJ/BKUVzxUXd5vpzl1rwaVxMyYbQkNZjHrF7Vk/yu98/YDF/N2KeWO7uZ0g3b5EyiFXFkZI8rJ+DH1/g==
|
||||
dependencies:
|
||||
"@octokit/auth-oauth-app" "^7.0.0"
|
||||
"@octokit/auth-oauth-user" "^4.0.0"
|
||||
"@octokit/auth-unauthenticated" "^5.0.0"
|
||||
"@octokit/core" "^5.0.0"
|
||||
"@octokit/oauth-authorization-url" "^6.0.2"
|
||||
"@octokit/oauth-methods" "^4.0.0"
|
||||
"@types/aws-lambda" "^8.10.83"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/oauth-authorization-url@^6.0.2":
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz#cc82ca29cc5e339c9921672f39f2b3f5c8eb6ef2"
|
||||
integrity sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==
|
||||
|
||||
"@octokit/oauth-methods@^4.0.0", "@octokit/oauth-methods@^4.1.0":
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz#1403ac9c4d4e277922fddc4c89fa8a782f8f791b"
|
||||
integrity sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw==
|
||||
dependencies:
|
||||
"@octokit/oauth-authorization-url" "^6.0.2"
|
||||
"@octokit/request" "^8.3.1"
|
||||
"@octokit/request-error" "^5.1.0"
|
||||
"@octokit/types" "^13.0.0"
|
||||
btoa-lite "^1.0.0"
|
||||
|
||||
"@octokit/openapi-types@^20.0.0":
|
||||
version "20.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-20.0.0.tgz#9ec2daa0090eeb865ee147636e0c00f73790c6e5"
|
||||
integrity sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==
|
||||
|
||||
"@octokit/openapi-types@^22.2.0":
|
||||
version "22.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-22.2.0.tgz#75aa7dcd440821d99def6a60b5f014207ae4968e"
|
||||
integrity sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==
|
||||
|
||||
"@octokit/plugin-paginate-graphql@^4.0.0":
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.1.tgz#9c0b1145b93a2b8635943f497c127969d54512fc"
|
||||
integrity sha512-R8ZQNmrIKKpHWC6V2gum4x9LG2qF1RxRjo27gjQcG3j+vf2tLsEfE7I/wRWEPzYMaenr1M+qDAtNcwZve1ce1A==
|
||||
|
||||
"@octokit/plugin-paginate-rest@^9.0.0":
|
||||
version "9.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz#2e2a2f0f52c9a4b1da1a3aa17dabe3c459b9e401"
|
||||
integrity sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==
|
||||
dependencies:
|
||||
"@octokit/types" "^12.6.0"
|
||||
|
||||
"@octokit/plugin-rest-endpoint-methods@^10.0.0":
|
||||
version "10.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz#41ba478a558b9f554793075b2e20cd2ef973be17"
|
||||
integrity sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==
|
||||
dependencies:
|
||||
"@octokit/types" "^12.6.0"
|
||||
|
||||
"@octokit/plugin-retry@^6.0.0":
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-6.0.1.tgz#3257404f7cc418e1c1f13a7f2012c1db848b7693"
|
||||
integrity sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==
|
||||
dependencies:
|
||||
"@octokit/request-error" "^5.0.0"
|
||||
"@octokit/types" "^12.0.0"
|
||||
bottleneck "^2.15.3"
|
||||
|
||||
"@octokit/plugin-throttling@^8.0.0":
|
||||
version "8.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz#9ec3ea2e37b92fac63f06911d0c8141b46dc4941"
|
||||
integrity sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==
|
||||
dependencies:
|
||||
"@octokit/types" "^12.2.0"
|
||||
bottleneck "^2.15.3"
|
||||
|
||||
"@octokit/request-error@^5.0.0", "@octokit/request-error@^5.1.0":
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-5.1.0.tgz#ee4138538d08c81a60be3f320cd71063064a3b30"
|
||||
integrity sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==
|
||||
dependencies:
|
||||
"@octokit/types" "^13.1.0"
|
||||
deprecation "^2.0.0"
|
||||
once "^1.4.0"
|
||||
|
||||
"@octokit/request@^8.3.0", "@octokit/request@^8.3.1":
|
||||
version "8.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/request/-/request-8.4.0.tgz#7f4b7b1daa3d1f48c0977ad8fffa2c18adef8974"
|
||||
integrity sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==
|
||||
dependencies:
|
||||
"@octokit/endpoint" "^9.0.1"
|
||||
"@octokit/request-error" "^5.1.0"
|
||||
"@octokit/types" "^13.1.0"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/types@^12.0.0", "@octokit/types@^12.2.0", "@octokit/types@^12.6.0":
|
||||
version "12.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-12.6.0.tgz#8100fb9eeedfe083aae66473bd97b15b62aedcb2"
|
||||
integrity sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==
|
||||
dependencies:
|
||||
"@octokit/openapi-types" "^20.0.0"
|
||||
|
||||
"@octokit/types@^13.0.0", "@octokit/types@^13.1.0":
|
||||
version "13.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.5.0.tgz#4796e56b7b267ebc7c921dcec262b3d5bfb18883"
|
||||
integrity sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==
|
||||
dependencies:
|
||||
"@octokit/openapi-types" "^22.2.0"
|
||||
|
||||
"@octokit/webhooks-methods@^4.1.0":
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz#681a6c86c9b21d4ec9e29108fb053ae7512be033"
|
||||
integrity sha512-zoQyKw8h9STNPqtm28UGOYFE7O6D4Il8VJwhAtMHFt2C4L0VQT1qGKLeefUOqHNs1mNRYSadVv7x0z8U2yyeWQ==
|
||||
|
||||
"@octokit/webhooks-types@7.4.0":
|
||||
version "7.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/webhooks-types/-/webhooks-types-7.4.0.tgz#7ed15c75908683a34e0079c80f261fe568b87395"
|
||||
integrity sha512-FE2V+QZ2UYlh+9wWd5BPLNXG+J/XUD/PPq0ovS+nCcGX4+3qVbi3jYOmCTW48hg9SBBLtInx9+o7fFt4H5iP0Q==
|
||||
|
||||
"@octokit/webhooks@^12.0.4":
|
||||
version "12.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-12.2.0.tgz#ea1ee2d9d9c5a4b7b53ff8bc64a9feb0dac94161"
|
||||
integrity sha512-CyuLJ0/P7bKZ+kIYw+fnkeVdhUzNuDKgNSI7pU/m7Nod0T7kP+s4s2f0pNmG9HL8/RZN1S0ZWTDll3VTMrFLAw==
|
||||
dependencies:
|
||||
"@octokit/request-error" "^5.0.0"
|
||||
"@octokit/webhooks-methods" "^4.1.0"
|
||||
"@octokit/webhooks-types" "7.4.0"
|
||||
aggregate-error "^3.1.0"
|
||||
|
||||
"@petamoriken/float16@^3.8.6":
|
||||
version "3.8.6"
|
||||
resolved "https://registry.yarnpkg.com/@petamoriken/float16/-/float16-3.8.6.tgz#580701cb97a510882342333d31c7cbfd9e14b4f4"
|
||||
|
@ -2107,16 +1860,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@tediousjs/connection-string/-/connection-string-0.5.0.tgz#9b3d858c040aac6bdf5584bf45370cef5b6522b4"
|
||||
integrity sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==
|
||||
|
||||
"@types/aws-lambda@^8.10.83":
|
||||
version "8.10.137"
|
||||
resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.137.tgz#c9998a944541afdd6df0d159e9ec9c23dfe5fb40"
|
||||
integrity sha512-YNFwzVarXAOXkjuFxONyDw1vgRNzyH8AuyN19s0bM+ChSu/bzxb5XPxYFLXoqoM+tvgzwR3k7fXcEOW125yJxg==
|
||||
|
||||
"@types/btoa-lite@^1.0.0":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.2.tgz#82bb6aab00abf7cff3ca2825abe010c0cd536ae5"
|
||||
integrity sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==
|
||||
|
||||
"@types/command-line-args@^5.2.1":
|
||||
version "5.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.2.3.tgz#553ce2fd5acf160b448d307649b38ffc60d39639"
|
||||
|
@ -2127,13 +1870,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/command-line-usage/-/command-line-usage-5.0.4.tgz#374e4c62d78fbc5a670a0f36da10235af879a0d5"
|
||||
integrity sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==
|
||||
|
||||
"@types/jsonwebtoken@^9.0.0":
|
||||
version "9.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz#d1af3544d99ad992fb6681bbe60676e06b032bd3"
|
||||
integrity sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/lodash@^4.14.165":
|
||||
version "4.17.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.6.tgz#193ced6a40c8006cfc1ca3f4553444fb38f0e543"
|
||||
|
@ -2299,14 +2035,6 @@ agentkeepalive@^4.2.1:
|
|||
dependencies:
|
||||
humanize-ms "^1.2.1"
|
||||
|
||||
aggregate-error@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
|
||||
integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
|
||||
dependencies:
|
||||
clean-stack "^2.0.0"
|
||||
indent-string "^4.0.0"
|
||||
|
||||
ajv@^6.12.4:
|
||||
version "6.12.6"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
||||
|
@ -2339,11 +2067,6 @@ ansi-regex@^5.0.1:
|
|||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
|
||||
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
||||
|
||||
ansi-regex@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
|
||||
integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
|
||||
|
||||
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
|
||||
|
@ -2397,14 +2120,6 @@ are-we-there-yet@^2.0.0:
|
|||
delegates "^1.0.0"
|
||||
readable-stream "^3.6.0"
|
||||
|
||||
are-we-there-yet@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
|
||||
integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
|
||||
dependencies:
|
||||
delegates "^1.0.0"
|
||||
readable-stream "^3.6.0"
|
||||
|
||||
argparse@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
|
||||
|
@ -2534,7 +2249,7 @@ aws-ssl-profiles@^1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/aws-ssl-profiles/-/aws-ssl-profiles-1.1.1.tgz#21ef8ad77d753927f6c01b144c5ef4cc4f150cdc"
|
||||
integrity sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==
|
||||
|
||||
axios@^1.4.0, axios@^1.6.2, axios@^1.6.5:
|
||||
axios@^1.4.0, axios@^1.6.2:
|
||||
version "1.6.8"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66"
|
||||
integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==
|
||||
|
@ -2604,11 +2319,6 @@ bcrypt@^5.1.0:
|
|||
"@mapbox/node-pre-gyp" "^1.0.11"
|
||||
node-addon-api "^5.0.0"
|
||||
|
||||
before-after-hook@^2.2.0:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c"
|
||||
integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==
|
||||
|
||||
binary-extensions@^2.0.0, binary-extensions@^2.2.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
|
||||
|
@ -2628,15 +2338,6 @@ bl@^4.0.3:
|
|||
inherits "^2.0.4"
|
||||
readable-stream "^3.4.0"
|
||||
|
||||
bl@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273"
|
||||
integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==
|
||||
dependencies:
|
||||
buffer "^6.0.3"
|
||||
inherits "^2.0.4"
|
||||
readable-stream "^3.4.0"
|
||||
|
||||
bl@^6.0.3:
|
||||
version "6.0.12"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-6.0.12.tgz#77c35b96e13aeff028496c798b75389ddee9c7f8"
|
||||
|
@ -2675,11 +2376,6 @@ boolean@^3.2.0:
|
|||
resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
|
||||
integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
|
||||
|
||||
bottleneck@^2.15.3:
|
||||
version "2.19.5"
|
||||
resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91"
|
||||
integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==
|
||||
|
||||
bowser@^2.11.0:
|
||||
version "2.11.0"
|
||||
resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f"
|
||||
|
@ -2705,11 +2401,6 @@ bson@^6.2.0:
|
|||
resolved "https://registry.yarnpkg.com/bson/-/bson-6.6.0.tgz#f225137eb49fe19bee4d87949a0515c05176e2ad"
|
||||
integrity sha512-BVINv2SgcMjL4oYbBuCQTpE3/VKOSxrOA8Cj/wQP7izSzlBGVomdm+TcUd0Pzy0ytLSSDweCKQ6X3f5veM5LQA==
|
||||
|
||||
btoa-lite@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
|
||||
integrity sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==
|
||||
|
||||
buffer-equal-constant-time@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
||||
|
@ -2784,11 +2475,6 @@ chalk@^4, chalk@^4.0.0, chalk@^4.1.2:
|
|||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
chalk@^5.0.0, chalk@^5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
|
||||
integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
|
||||
|
||||
chardet@^0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
|
||||
|
@ -2804,11 +2490,6 @@ check-disk-space@^3.4.0:
|
|||
resolved "https://registry.yarnpkg.com/check-disk-space/-/check-disk-space-3.4.0.tgz#eb8e69eee7a378fd12e35281b8123a8b4c4a8ff7"
|
||||
integrity sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==
|
||||
|
||||
chmodrp@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/chmodrp/-/chmodrp-1.0.2.tgz#d1c0075dfcc97fe7f5f924252438a84bd5d26a9a"
|
||||
integrity sha512-TdngOlFV1FLTzU0o1w8MB6/BFywhtLC0SzRTGJU7T9lmdjlCWeMRt1iVo0Ki+ldwNk0BqNiKoc8xpLZEQ8mY1w==
|
||||
|
||||
chokidar@^3.5.2:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
|
||||
|
@ -2842,26 +2523,7 @@ chromadb@^1.5.2:
|
|||
cliui "^8.0.1"
|
||||
isomorphic-fetch "^3.0.0"
|
||||
|
||||
clean-stack@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
|
||||
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
|
||||
|
||||
cli-cursor@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea"
|
||||
integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==
|
||||
dependencies:
|
||||
restore-cursor "^4.0.0"
|
||||
|
||||
cli-progress@^3.12.0:
|
||||
version "3.12.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942"
|
||||
integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==
|
||||
dependencies:
|
||||
string-width "^4.2.3"
|
||||
|
||||
cli-spinners@^2.9.0, cli-spinners@^2.9.2:
|
||||
cli-spinners@^2.9.2:
|
||||
version "2.9.2"
|
||||
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41"
|
||||
integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
|
||||
|
@ -2880,25 +2542,6 @@ cliui@^8.0.1:
|
|||
strip-ansi "^6.0.1"
|
||||
wrap-ansi "^7.0.0"
|
||||
|
||||
cmake-js@^7.2.1:
|
||||
version "7.3.0"
|
||||
resolved "https://registry.yarnpkg.com/cmake-js/-/cmake-js-7.3.0.tgz#6fd6234b7aeec4545c1c806f9e3f7ffacd9798b2"
|
||||
integrity sha512-dXs2zq9WxrV87bpJ+WbnGKv8WUBXDw8blNiwNHoRe/it+ptscxhQHKB1SJXa1w+kocLMeP28Tk4/eTCezg4o+w==
|
||||
dependencies:
|
||||
axios "^1.6.5"
|
||||
debug "^4"
|
||||
fs-extra "^11.2.0"
|
||||
lodash.isplainobject "^4.0.6"
|
||||
memory-stream "^1.0.0"
|
||||
node-api-headers "^1.1.0"
|
||||
npmlog "^6.0.2"
|
||||
rc "^1.2.7"
|
||||
semver "^7.5.4"
|
||||
tar "^6.2.0"
|
||||
url-join "^4.0.1"
|
||||
which "^2.0.2"
|
||||
yargs "^17.7.2"
|
||||
|
||||
cohere-ai@^7.9.5:
|
||||
version "7.9.5"
|
||||
resolved "https://registry.yarnpkg.com/cohere-ai/-/cohere-ai-7.9.5.tgz#05a592fe19decb8692d1b19d93ac835d7f816b8b"
|
||||
|
@ -2942,7 +2585,7 @@ color-string@^1.6.0, color-string@^1.9.0:
|
|||
color-name "^1.0.0"
|
||||
simple-swizzle "^0.2.2"
|
||||
|
||||
color-support@^1.1.2, color-support@^1.1.3:
|
||||
color-support@^1.1.2:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
|
||||
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
|
||||
|
@ -3093,13 +2736,6 @@ cron-validate@^1.4.5:
|
|||
dependencies:
|
||||
yup "0.32.9"
|
||||
|
||||
cross-env@^7.0.3:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
|
||||
integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
|
||||
dependencies:
|
||||
cross-spawn "^7.0.1"
|
||||
|
||||
cross-fetch@^3.1.5:
|
||||
version "3.1.8"
|
||||
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82"
|
||||
|
@ -3107,7 +2743,7 @@ cross-fetch@^3.1.5:
|
|||
dependencies:
|
||||
node-fetch "^2.6.12"
|
||||
|
||||
cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
||||
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
||||
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
|
||||
|
@ -3181,7 +2817,7 @@ debug@2.6.9:
|
|||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@4, debug@^4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
|
||||
debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||
|
@ -3265,11 +2901,6 @@ depd@2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
|
||||
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
|
||||
|
||||
deprecation@^2.0.0, deprecation@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
|
||||
integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
|
||||
|
||||
destroy@1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
|
||||
|
@ -3337,11 +2968,6 @@ dotenv@^16.0.3:
|
|||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
|
||||
integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
|
||||
|
||||
eastasianwidth@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
|
||||
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
|
||||
|
||||
ecdsa-sig-formatter@1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
|
||||
|
@ -3366,11 +2992,6 @@ elevenlabs@^0.5.0:
|
|||
qs "6.11.2"
|
||||
url-join "4.0.1"
|
||||
|
||||
emoji-regex@^10.2.1:
|
||||
version "10.3.0"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23"
|
||||
integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==
|
||||
|
||||
emoji-regex@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||
|
@ -3410,11 +3031,6 @@ entities@^4.2.0:
|
|||
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
|
||||
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
|
||||
|
||||
env-var@^7.3.1:
|
||||
version "7.4.1"
|
||||
resolved "https://registry.yarnpkg.com/env-var/-/env-var-7.4.1.tgz#88af75fe16cc11031000f88d4777802c6958a01c"
|
||||
integrity sha512-H8Ga2SbXTQwt6MKEawWSvmxoH1+J6bnAXkuyE7eDvbGmrhIL2i+XGjzGM3DFHcJu8GY1zY9/AnBJY8uGQYPHiw==
|
||||
|
||||
es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3:
|
||||
version "1.23.3"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0"
|
||||
|
@ -4005,15 +3621,6 @@ fs-constants@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
||||
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
|
||||
|
||||
fs-extra@^11.1.1, fs-extra@^11.2.0:
|
||||
version "11.2.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
|
||||
integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
|
||||
dependencies:
|
||||
graceful-fs "^4.2.0"
|
||||
jsonfile "^6.0.1"
|
||||
universalify "^2.0.0"
|
||||
|
||||
fs-minipass@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
|
||||
|
@ -4066,20 +3673,6 @@ gauge@^3.0.0:
|
|||
strip-ansi "^6.0.1"
|
||||
wide-align "^1.1.2"
|
||||
|
||||
gauge@^4.0.3:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
|
||||
integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
|
||||
dependencies:
|
||||
aproba "^1.0.3 || ^2.0.0"
|
||||
color-support "^1.1.3"
|
||||
console-control-strings "^1.1.0"
|
||||
has-unicode "^2.0.1"
|
||||
signal-exit "^3.0.7"
|
||||
string-width "^4.2.3"
|
||||
strip-ansi "^6.0.1"
|
||||
wide-align "^1.1.5"
|
||||
|
||||
generate-function@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
|
||||
|
@ -4175,11 +3768,6 @@ gopd@^1.0.1:
|
|||
dependencies:
|
||||
get-intrinsic "^1.1.3"
|
||||
|
||||
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
|
||||
version "4.2.11"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
|
||||
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
|
||||
|
||||
graphemer@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
|
||||
|
@ -4390,11 +3978,6 @@ imurmurhash@^0.1.4:
|
|||
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
||||
integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
|
||||
|
||||
indent-string@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
|
||||
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
|
||||
|
||||
inflight@^1.0.4:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||
|
@ -4553,11 +4136,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
|
|||
dependencies:
|
||||
is-extglob "^2.1.1"
|
||||
|
||||
is-interactive@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90"
|
||||
integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==
|
||||
|
||||
is-invalid-path@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34"
|
||||
|
@ -4655,11 +4233,6 @@ is-typed-array@^1.1.13:
|
|||
dependencies:
|
||||
which-typed-array "^1.1.14"
|
||||
|
||||
is-unicode-supported@^1.1.0, is-unicode-supported@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714"
|
||||
integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==
|
||||
|
||||
is-valid-path@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df"
|
||||
|
@ -4709,11 +4282,6 @@ isexe@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
isexe@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d"
|
||||
integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==
|
||||
|
||||
isomorphic-fetch@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4"
|
||||
|
@ -4820,15 +4388,6 @@ json5@^2.2.3:
|
|||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
||||
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
||||
|
||||
jsonfile@^6.0.1:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
|
||||
integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
|
||||
dependencies:
|
||||
universalify "^2.0.0"
|
||||
optionalDependencies:
|
||||
graceful-fs "^4.1.6"
|
||||
|
||||
jsonpointer@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
|
||||
|
@ -4839,7 +4398,7 @@ jsonrepair@^3.7.0:
|
|||
resolved "https://registry.yarnpkg.com/jsonrepair/-/jsonrepair-3.7.0.tgz#b4fddb9c8d29dd62263f4f037334099e28feac21"
|
||||
integrity sha512-TwE50n4P4gdVfMQF2q+X+IGy4ntFfcuHHE8zjRyBcdtrRK0ORZsjOZD6zmdylk4p277nQBAlHgsEPWtMIQk4LQ==
|
||||
|
||||
jsonwebtoken@^9.0.0, jsonwebtoken@^9.0.2:
|
||||
jsonwebtoken@^9.0.0:
|
||||
version "9.0.2"
|
||||
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3"
|
||||
integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==
|
||||
|
@ -5092,14 +4651,6 @@ lodash@^4.17.20, lodash@^4.17.21:
|
|||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
||||
log-symbols@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93"
|
||||
integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==
|
||||
dependencies:
|
||||
chalk "^5.0.0"
|
||||
is-unicode-supported "^1.1.0"
|
||||
|
||||
logform@^2.3.2, logform@^2.4.0:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5"
|
||||
|
@ -5129,11 +4680,6 @@ loose-envify@^1.4.0:
|
|||
dependencies:
|
||||
js-tokens "^3.0.0 || ^4.0.0"
|
||||
|
||||
lru-cache@^10.0.0:
|
||||
version "10.2.2"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878"
|
||||
integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==
|
||||
|
||||
lru-cache@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
||||
|
@ -5177,13 +4723,6 @@ media-typer@0.3.0:
|
|||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
||||
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
|
||||
|
||||
memory-stream@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/memory-stream/-/memory-stream-1.0.0.tgz#481dfd259ccdf57b03ec2c9632960044180e73c2"
|
||||
integrity sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww==
|
||||
dependencies:
|
||||
readable-stream "^3.4.0"
|
||||
|
||||
merge-descriptors@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
|
||||
|
@ -5440,16 +4979,6 @@ node-addon-api@^6.1.0:
|
|||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76"
|
||||
integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==
|
||||
|
||||
node-addon-api@^7.0.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.0.tgz#71f609369379c08e251c558527a107107b5e0fdb"
|
||||
integrity sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==
|
||||
|
||||
node-api-headers@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/node-api-headers/-/node-api-headers-1.1.0.tgz#3f9dd7bb10b29e1c3e3db675979605a308b2373c"
|
||||
integrity sha512-ucQW+SbYCUPfprvmzBsnjT034IGRB2XK8rRc78BgjNKhTdFKgAwAmgW704bKIBmcYW48it0Gkjpkd39Azrwquw==
|
||||
|
||||
node-domexception@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
|
||||
|
@ -5477,28 +5006,6 @@ node-html-parser@^6.1.1:
|
|||
css-select "^5.1.0"
|
||||
he "1.2.0"
|
||||
|
||||
node-llama-cpp@^2.8.0:
|
||||
version "2.8.10"
|
||||
resolved "https://registry.yarnpkg.com/node-llama-cpp/-/node-llama-cpp-2.8.10.tgz#6a4359a072c780f82fdad9b1112d1d4be7f4796a"
|
||||
integrity sha512-00qX591hTNhgLGS3QDhoT40LFmLgLweyLiouxdNy8+X2YamUBBSZhT1ipG1STLKZ2IpITzSm53oXtH9qDvMfXQ==
|
||||
dependencies:
|
||||
chalk "^5.3.0"
|
||||
chmodrp "^1.0.2"
|
||||
cli-progress "^3.12.0"
|
||||
cmake-js "^7.2.1"
|
||||
cross-env "^7.0.3"
|
||||
cross-spawn "^7.0.3"
|
||||
env-var "^7.3.1"
|
||||
fs-extra "^11.1.1"
|
||||
log-symbols "^5.1.0"
|
||||
node-addon-api "^7.0.0"
|
||||
octokit "^3.1.0"
|
||||
ora "^7.0.1"
|
||||
simple-git "^3.19.1"
|
||||
uuid "^9.0.0"
|
||||
which "^4.0.0"
|
||||
yargs "^17.7.2"
|
||||
|
||||
node-modules-regexp@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
|
||||
|
@ -5556,16 +5063,6 @@ npmlog@^5.0.1:
|
|||
gauge "^3.0.0"
|
||||
set-blocking "^2.0.0"
|
||||
|
||||
npmlog@^6.0.2:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
|
||||
integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
|
||||
dependencies:
|
||||
are-we-there-yet "^3.0.0"
|
||||
console-control-strings "^1.1.0"
|
||||
gauge "^4.0.3"
|
||||
set-blocking "^2.0.0"
|
||||
|
||||
nth-check@^2.0.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
|
||||
|
@ -5645,22 +5142,6 @@ object.values@^1.1.6, object.values@^1.1.7:
|
|||
define-properties "^1.2.1"
|
||||
es-object-atoms "^1.0.0"
|
||||
|
||||
octokit@^3.1.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/octokit/-/octokit-3.2.0.tgz#2e75bb0a5f0511aa37ee20c2714206ed0d09e2bf"
|
||||
integrity sha512-f25eJ/8ITwF2BdwymOjK9I5ll9Azt8UbfHE2u5ho0gVdgfpIZkUgMGbQjbvgOYGbtIAYxh7ghH3BUbZrYal1Gw==
|
||||
dependencies:
|
||||
"@octokit/app" "^14.0.2"
|
||||
"@octokit/core" "^5.0.0"
|
||||
"@octokit/oauth-app" "^6.0.0"
|
||||
"@octokit/plugin-paginate-graphql" "^4.0.0"
|
||||
"@octokit/plugin-paginate-rest" "^9.0.0"
|
||||
"@octokit/plugin-rest-endpoint-methods" "^10.0.0"
|
||||
"@octokit/plugin-retry" "^6.0.0"
|
||||
"@octokit/plugin-throttling" "^8.0.0"
|
||||
"@octokit/request-error" "^5.0.0"
|
||||
"@octokit/types" "^12.0.0"
|
||||
|
||||
ollama@^0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/ollama/-/ollama-0.5.0.tgz#cb9bc709d4d3278c9f484f751b0d9b98b06f4859"
|
||||
|
@ -5689,7 +5170,7 @@ one-time@^1.0.0:
|
|||
dependencies:
|
||||
fn.name "1.x.x"
|
||||
|
||||
onetime@^5.1.0, onetime@^5.1.2:
|
||||
onetime@^5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
|
||||
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
|
||||
|
@ -5795,21 +5276,6 @@ optionator@^0.9.3:
|
|||
type-check "^0.4.0"
|
||||
word-wrap "^1.2.5"
|
||||
|
||||
ora@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ora/-/ora-7.0.1.tgz#cdd530ecd865fe39e451a0e7697865669cb11930"
|
||||
integrity sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==
|
||||
dependencies:
|
||||
chalk "^5.3.0"
|
||||
cli-cursor "^4.0.0"
|
||||
cli-spinners "^2.9.0"
|
||||
is-interactive "^2.0.0"
|
||||
is-unicode-supported "^1.3.0"
|
||||
log-symbols "^5.1.0"
|
||||
stdin-discarder "^0.1.0"
|
||||
string-width "^6.1.0"
|
||||
strip-ansi "^7.1.0"
|
||||
|
||||
os-tmpdir@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
|
@ -6311,14 +5777,6 @@ resolve@^2.0.0-next.5:
|
|||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
restore-cursor@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9"
|
||||
integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==
|
||||
dependencies:
|
||||
onetime "^5.1.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
retry@^0.13.1:
|
||||
version "0.13.1"
|
||||
resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
|
||||
|
@ -6521,7 +5979,7 @@ side-channel@^1.0.4, side-channel@^1.0.6:
|
|||
get-intrinsic "^1.2.4"
|
||||
object-inspect "^1.13.1"
|
||||
|
||||
signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
|
||||
signal-exit@^3.0.0, signal-exit@^3.0.3:
|
||||
version "3.0.7"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
|
||||
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
|
||||
|
@ -6545,15 +6003,6 @@ simple-get@^4.0.0, simple-get@^4.0.1:
|
|||
once "^1.3.1"
|
||||
simple-concat "^1.0.0"
|
||||
|
||||
simple-git@^3.19.1:
|
||||
version "3.24.0"
|
||||
resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.24.0.tgz#33a8c88dc6fa74e53eaf3d6bfc27d0182a49ec00"
|
||||
integrity sha512-QqAKee9Twv+3k8IFOFfPB2hnk6as6Y6ACUpwCtQvRYBAes23Wv3SZlHVobAzqcE8gfsisCvPw3HGW3HYM+VYYw==
|
||||
dependencies:
|
||||
"@kwsites/file-exists" "^1.1.1"
|
||||
"@kwsites/promise-deferred" "^1.1.1"
|
||||
debug "^4.3.4"
|
||||
|
||||
simple-swizzle@^0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
|
||||
|
@ -6598,13 +6047,6 @@ statuses@2.0.1:
|
|||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
|
||||
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
|
||||
|
||||
stdin-discarder@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz#22b3e400393a8e28ebf53f9958f3880622efde21"
|
||||
integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==
|
||||
dependencies:
|
||||
bl "^5.0.0"
|
||||
|
||||
stoppable@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b"
|
||||
|
@ -6644,15 +6086,6 @@ string-natural-compare@^3.0.1:
|
|||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string-width@^6.1.0:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-6.1.0.tgz#96488d6ed23f9ad5d82d13522af9e4c4c3fd7518"
|
||||
integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==
|
||||
dependencies:
|
||||
eastasianwidth "^0.2.0"
|
||||
emoji-regex "^10.2.1"
|
||||
strip-ansi "^7.0.1"
|
||||
|
||||
string.prototype.matchall@^4.0.10:
|
||||
version "4.0.11"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a"
|
||||
|
@ -6720,13 +6153,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
|||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
|
||||
strip-ansi@^7.0.1, strip-ansi@^7.1.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
|
||||
integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
|
||||
dependencies:
|
||||
ansi-regex "^6.0.1"
|
||||
|
||||
strip-final-newline@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
|
||||
|
@ -6850,7 +6276,7 @@ tar-stream@^3.1.5:
|
|||
fast-fifo "^1.2.0"
|
||||
streamx "^2.15.0"
|
||||
|
||||
tar@^6.1.11, tar@^6.2.0:
|
||||
tar@^6.1.11:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
|
||||
integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
|
||||
|
@ -7063,24 +6489,6 @@ undici@~5.28.4:
|
|||
dependencies:
|
||||
"@fastify/busboy" "^2.0.0"
|
||||
|
||||
universal-github-app-jwt@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-1.1.2.tgz#8c1867a394d7d9d42cda34f11d1bcb023797d8df"
|
||||
integrity sha512-t1iB2FmLFE+yyJY9+3wMx0ejB+MQpEVkH0gQv7dR6FZyltyq+ZZO0uDpbopxhrZ3SLEO4dCEkIujOMldEQ2iOA==
|
||||
dependencies:
|
||||
"@types/jsonwebtoken" "^9.0.0"
|
||||
jsonwebtoken "^9.0.2"
|
||||
|
||||
universal-user-agent@^6.0.0:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa"
|
||||
integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==
|
||||
|
||||
universalify@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
|
||||
integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
|
||||
|
||||
unpipe@1.0.0, unpipe@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
||||
|
@ -7093,7 +6501,7 @@ uri-js@^4.2.2, uri-js@^4.4.1:
|
|||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
url-join@4.0.1, url-join@^4.0.1:
|
||||
url-join@4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
|
||||
integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
|
||||
|
@ -7235,21 +6643,14 @@ which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9:
|
|||
gopd "^1.0.1"
|
||||
has-tostringtag "^1.0.2"
|
||||
|
||||
which@^2.0.1, which@^2.0.2:
|
||||
which@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
|
||||
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
which@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a"
|
||||
integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==
|
||||
dependencies:
|
||||
isexe "^3.1.1"
|
||||
|
||||
wide-align@^1.1.2, wide-align@^1.1.5:
|
||||
wide-align@^1.1.2:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
|
||||
integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
|
||||
|
|
Loading…
Add table
Reference in a new issue