Feat: handle decode errors (#425)
* show decode error * handle loading error in post audio/recording * tweak * upgrade deps * fix logout * update build-enjoy-app.yml
This commit is contained in:
20
.github/workflows/build-enjoy-app.yml
vendored
20
.github/workflows/build-enjoy-app.yml
vendored
@@ -1,19 +1,13 @@
|
||||
name: Build Enjoy App
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
os:
|
||||
type: choice
|
||||
description: Choose os
|
||||
options:
|
||||
- macos-12
|
||||
- macos-14
|
||||
- windows-latest
|
||||
- ubuntu-latest
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ github.event.inputs.os }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-12, macos-14, windows-latest, ubuntu-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -31,13 +25,13 @@ jobs:
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: "**/node_modules"
|
||||
key: ${{ github.event.inputs.os }}-${{ hashFiles('**/yarn.lock') }}
|
||||
key: ${{ matrix.os }}-${{ hashFiles('**/yarn.lock') }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn install
|
||||
|
||||
- name: Install Apple certificate
|
||||
if: contains(github.event.inputs.os, 'macos')
|
||||
if: contains(matrix.os, 'macos')
|
||||
env:
|
||||
MACOS_CERTIFICATE_APPLICATION_BASE64: ${{ secrets.MACOS_CERTIFICATE_APPLICATION_BASE64 }}
|
||||
MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
|
||||
@@ -54,7 +48,7 @@ jobs:
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Enjoy-${{ runner.os }}-${{ github.event.inputs.os == 'macos-14' && 'arm64' || 'x64' }}-build-${{ github.ref_name }}-${{ steps.current-time.outputs.formattedTime }}
|
||||
name: Enjoy-${{ runner.os }}-${{ matrix.os == 'macos-14' && 'arm64' || 'x64' }}-build-${{ github.ref_name }}-${{ steps.current-time.outputs.formattedTime }}
|
||||
path: |
|
||||
enjoy/out/make/**/*.deb
|
||||
enjoy/out/make/**/*.rpm
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
"@types/intl-tel-input": "^18.1.4",
|
||||
"@types/lodash": "^4.17.0",
|
||||
"@types/mark.js": "^8.11.12",
|
||||
"@types/node": "^20.11.27",
|
||||
"@types/node": "^20.11.28",
|
||||
"@types/react": "^18.2.66",
|
||||
"@types/react-dom": "^18.2.22",
|
||||
"@types/validator": "^13.11.9",
|
||||
@@ -66,7 +66,7 @@
|
||||
"flora-colossus": "^2.0.0",
|
||||
"octokit": "^3.1.2",
|
||||
"progress": "^2.0.3",
|
||||
"tailwind-merge": "^2.2.1",
|
||||
"tailwind-merge": "^2.2.2",
|
||||
"tailwind-scrollbar": "^3.1.0",
|
||||
"tailwindcss": "^3.4.1",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
@@ -82,7 +82,7 @@
|
||||
"@ffmpeg/ffmpeg": "^0.12.10",
|
||||
"@ffmpeg/util": "^0.12.1",
|
||||
"@hookform/resolvers": "^3.3.4",
|
||||
"@langchain/community": "^0.0.39",
|
||||
"@langchain/community": "^0.0.40",
|
||||
"@langchain/google-genai": "^0.0.10",
|
||||
"@mozilla/readability": "^0.5.0",
|
||||
"@radix-ui/react-accordion": "^1.1.2",
|
||||
@@ -110,7 +110,7 @@
|
||||
"@uidotdev/usehooks": "^2.4.1",
|
||||
"@vidstack/react": "^1.10.9",
|
||||
"autosize": "^6.0.1",
|
||||
"axios": "^1.6.7",
|
||||
"axios": "^1.6.8",
|
||||
"camelcase": "^8.0.0",
|
||||
"camelcase-keys": "^9.1.3",
|
||||
"chart.js": "^4.4.2",
|
||||
@@ -135,7 +135,7 @@
|
||||
"html-to-text": "^9.0.5",
|
||||
"https-proxy-agent": "^7.0.4",
|
||||
"i18next": "^23.10.1",
|
||||
"intl-tel-input": "^19.5.7",
|
||||
"intl-tel-input": "^20.0.3",
|
||||
"js-md5": "^0.8.3",
|
||||
"langchain": "^0.1.28",
|
||||
"lodash": "^4.17.21",
|
||||
@@ -143,14 +143,14 @@
|
||||
"mark.js": "^8.11.1",
|
||||
"microsoft-cognitiveservices-speech-sdk": "^1.36.0",
|
||||
"next-themes": "^0.3.0",
|
||||
"openai": "^4.29.0",
|
||||
"openai": "^4.29.1",
|
||||
"pitchfinder": "^2.3.2",
|
||||
"postcss": "^8.4.35",
|
||||
"postcss": "^8.4.36",
|
||||
"proxy-agent": "^6.4.0",
|
||||
"react": "^18.2.0",
|
||||
"react-activity-calendar": "^2.2.8",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-hook-form": "^7.51.0",
|
||||
"react-hook-form": "^7.51.1",
|
||||
"react-hotkeys-hook": "^4.5.0",
|
||||
"react-i18next": "^14.1.0",
|
||||
"react-markdown": "^9.0.1",
|
||||
|
||||
@@ -474,6 +474,7 @@
|
||||
"resolvingDownloadUrl": "Resolving download URL",
|
||||
"waveformIsDecoded": "Waveform is decoded",
|
||||
"decodingWaveform": "Decoding waveform",
|
||||
"failedToDecodeWaveform": "Failed to decode waveform",
|
||||
"transcribedSuccessfully": "Transcribed successfully",
|
||||
"transcribing": "Transcribing",
|
||||
"notTranscribedYet": "Not transcribed yet",
|
||||
|
||||
@@ -473,6 +473,7 @@
|
||||
"resolvingDownloadUrl": "正在解析下载地址",
|
||||
"waveformIsDecoded": "波形已解码",
|
||||
"decodingWaveform": "正在解码波形",
|
||||
"failedToDecodeWaveform": "解码波形失败",
|
||||
"transcribedSuccessfully": "语音转文本成功",
|
||||
"transcribing": "正在语音转文本",
|
||||
"notTranscribedYet": "尚未语音转文本",
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
PingPoint,
|
||||
Progress,
|
||||
} from "@renderer/components/ui";
|
||||
import { CheckCircleIcon, LoaderIcon } from "lucide-react";
|
||||
import { CheckCircleIcon, LoaderIcon, XCircleIcon } from "lucide-react";
|
||||
import { t } from "i18next";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
|
||||
@@ -23,7 +23,9 @@ export const MediaLoadingModal = () => {
|
||||
const navigate = useNavigate();
|
||||
const { whisperConfig } = useContext(AISettingsProviderContext);
|
||||
const {
|
||||
media,
|
||||
decoded,
|
||||
decodeError,
|
||||
transcription,
|
||||
transcribing,
|
||||
transcribingProgress,
|
||||
@@ -47,6 +49,21 @@ export const MediaLoadingModal = () => {
|
||||
<CheckCircleIcon className="w-4 h-4 text-green-500" />
|
||||
<span>{t("waveformIsDecoded")}</span>
|
||||
</div>
|
||||
) : decodeError ? (
|
||||
<div className="mb-4 flex items-center space-x-4">
|
||||
<div className="w-4 h-4">
|
||||
<XCircleIcon className="w-4 h-4 text-destructive" />
|
||||
</div>
|
||||
<div className="select-text">
|
||||
<div className="mb-2">
|
||||
{decodeError}
|
||||
</div>
|
||||
<div className="text-sm text-muted-foreground">
|
||||
{t("failedToDecodeWaveform")}:{" "}
|
||||
<span className="break-all ">{media?.src}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<div className="mb-4 flex items-center space-x-4">
|
||||
<LoaderIcon className="w-4 h-4 animate-spin" />
|
||||
|
||||
@@ -13,7 +13,9 @@ import {
|
||||
} from "@vidstack/react/player/layouts/default";
|
||||
|
||||
export const MediaPlayer = () => {
|
||||
const { media, setMediaProvider } = useContext(MediaPlayerProviderContext);
|
||||
const { media, setMediaProvider, setDecodeError } = useContext(
|
||||
MediaPlayerProviderContext
|
||||
);
|
||||
const mediaRemote = useMediaRemote();
|
||||
if (!media?.src) return null;
|
||||
|
||||
@@ -31,6 +33,7 @@ export const MediaPlayer = () => {
|
||||
setMediaProvider(provider.video);
|
||||
}
|
||||
}}
|
||||
onError={(err) => setDecodeError(err.message)}
|
||||
>
|
||||
<MediaProvider />
|
||||
<DefaultAudioLayout icons={defaultLayoutIcons} />
|
||||
|
||||
@@ -14,6 +14,8 @@ import {
|
||||
} from "@vidstack/react/player/layouts/default";
|
||||
export const STORAGE_WORKER_ENDPOINT = "https://enjoy-storage.baizhiheizi.com";
|
||||
import { TimelineEntry } from "echogarden/dist/utilities/Timeline.d.js";
|
||||
import { t } from "i18next";
|
||||
import { XCircleIcon } from "lucide-react";
|
||||
|
||||
export const PostAudio = (props: {
|
||||
audio: Partial<MediumType>;
|
||||
@@ -23,6 +25,7 @@ export const PostAudio = (props: {
|
||||
const [currentTime, setCurrentTime] = useState<number>(0);
|
||||
const { webApi } = useContext(AppSettingsProviderContext);
|
||||
const [transcription, setTranscription] = useState<TranscriptionType>();
|
||||
const [error, setError] = useState<string>(null);
|
||||
|
||||
const currentTranscription = transcription?.result["transcript"]
|
||||
? (transcription.result?.timeline || []).find(
|
||||
@@ -45,6 +48,22 @@ export const PostAudio = (props: {
|
||||
});
|
||||
}, [audio.md5]);
|
||||
|
||||
if (error) {
|
||||
return (
|
||||
<div className="w-full rounded-lg p-4 border">
|
||||
<div className="flex items-center justify-center mb-2">
|
||||
<XCircleIcon className="w-4 h-4 text-destructive" />
|
||||
</div>
|
||||
<div className="select-text break-all text-center text-sm text-muted-foreground mb-4">
|
||||
{error}
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<Button onClick={() => setError(null)}>{t("retry")}</Button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="w-full">
|
||||
{audio.sourceUrl.startsWith(STORAGE_WORKER_ENDPOINT) ? (
|
||||
@@ -53,6 +72,7 @@ export const PostAudio = (props: {
|
||||
setCurrentTime={setCurrentTime}
|
||||
audio={audio}
|
||||
height={height}
|
||||
onError={(err) => setError(err.message)}
|
||||
/>
|
||||
) : (
|
||||
<MediaPlayer
|
||||
@@ -60,6 +80,7 @@ export const PostAudio = (props: {
|
||||
setCurrentTime(_currentTime);
|
||||
}}
|
||||
src={audio.sourceUrl}
|
||||
onError={(err) => setError(err.message)}
|
||||
>
|
||||
<MediaProvider />
|
||||
<DefaultAudioLayout icons={defaultLayoutIcons} />
|
||||
@@ -88,8 +109,9 @@ const WavesurferPlayer = (props: {
|
||||
height?: number;
|
||||
currentTime: number;
|
||||
setCurrentTime: (currentTime: number) => void;
|
||||
onError?: (error: Error) => void;
|
||||
}) => {
|
||||
const { audio, height = 80, currentTime, setCurrentTime } = props;
|
||||
const { audio, height = 80, onError, setCurrentTime } = props;
|
||||
const [initialized, setInitialized] = useState(false);
|
||||
const [isPlaying, setIsPlaying] = useState(false);
|
||||
const [wavesurfer, setWavesurfer] = useState(null);
|
||||
@@ -162,6 +184,9 @@ const WavesurferPlayer = (props: {
|
||||
}, 1000);
|
||||
setInitialized(true);
|
||||
}),
|
||||
wavesurfer.on("error", (err: Error) => {
|
||||
onError(err);
|
||||
}),
|
||||
];
|
||||
|
||||
return () => {
|
||||
|
||||
@@ -6,6 +6,8 @@ import { Button, Skeleton } from "@renderer/components/ui";
|
||||
import { PlayIcon, PauseIcon } from "lucide-react";
|
||||
import { useIntersectionObserver } from "@uidotdev/usehooks";
|
||||
import { secondsToTimestamp } from "@renderer/lib/utils";
|
||||
import { t } from "i18next";
|
||||
import { XCircleIcon } from "lucide-react";
|
||||
|
||||
export const PostRecording = (props: {
|
||||
recording: RecordingType;
|
||||
@@ -20,6 +22,7 @@ export const PostRecording = (props: {
|
||||
threshold: 1,
|
||||
});
|
||||
const [duration, setDuration] = useState<number>(0);
|
||||
const [error, setError] = useState<string>(null);
|
||||
|
||||
const onPlayClick = useCallback(() => {
|
||||
wavesurfer.isPlaying() ? wavesurfer.pause() : wavesurfer.play();
|
||||
@@ -31,6 +34,7 @@ export const PostRecording = (props: {
|
||||
if (!entry?.isIntersecting) return;
|
||||
if (!recording.src) return;
|
||||
if (wavesurfer) return;
|
||||
if (error) return;
|
||||
|
||||
const ws = WaveSurfer.create({
|
||||
container: containerRef.current,
|
||||
@@ -48,7 +52,11 @@ export const PostRecording = (props: {
|
||||
});
|
||||
|
||||
setWavesurfer(ws);
|
||||
}, [recording.src, entry]);
|
||||
|
||||
return () => {
|
||||
setWavesurfer(null);
|
||||
};
|
||||
}, [recording.src, entry, error]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!wavesurfer) return;
|
||||
@@ -84,6 +92,9 @@ export const PostRecording = (props: {
|
||||
}, 1000);
|
||||
setInitialized(true);
|
||||
}),
|
||||
wavesurfer.on("error", (err: Error) => {
|
||||
setError(err.message);
|
||||
}),
|
||||
];
|
||||
|
||||
return () => {
|
||||
@@ -92,6 +103,22 @@ export const PostRecording = (props: {
|
||||
};
|
||||
}, [wavesurfer]);
|
||||
|
||||
if (error) {
|
||||
return (
|
||||
<div className="w-full bg-sky-500/30 rounded-lg p-4 border">
|
||||
<div className="flex items-center justify-center mb-2">
|
||||
<XCircleIcon className="w-4 h-4 text-destructive" />
|
||||
</div>
|
||||
<div className="select-text break-all text-center text-sm text-muted-foreground mb-4">
|
||||
{error}
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<Button onClick={() => setError(null)}>{t("retry")}</Button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="w-full">
|
||||
<div className="flex justify-end">
|
||||
|
||||
@@ -39,7 +39,6 @@ export const AppSettingsProvider = ({
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) => {
|
||||
const [initialized, setInitialized] = useState<boolean>(false);
|
||||
const [version, setVersion] = useState<string>("");
|
||||
const [apiUrl, setApiUrl] = useState<string>(WEB_API_URL);
|
||||
const [webApi, setWebApi] = useState<Client>(null);
|
||||
@@ -62,10 +61,6 @@ export const AppSettingsProvider = ({
|
||||
fetchProxyConfig();
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
validate();
|
||||
}, [user, libraryPath]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!apiUrl) return;
|
||||
|
||||
@@ -192,10 +187,6 @@ export const AppSettingsProvider = ({
|
||||
});
|
||||
};
|
||||
|
||||
const validate = async () => {
|
||||
setInitialized(Boolean(user && libraryPath));
|
||||
};
|
||||
|
||||
return (
|
||||
<AppSettingsProviderContext.Provider
|
||||
value={{
|
||||
@@ -214,7 +205,7 @@ export const AppSettingsProvider = ({
|
||||
ffmpegWasm,
|
||||
proxy,
|
||||
setProxy: setProxyConfigHandler,
|
||||
initialized,
|
||||
initialized: Boolean(user && libraryPath),
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
|
||||
@@ -9,6 +9,7 @@ import Regions, {
|
||||
import Chart from "chart.js/auto";
|
||||
import { TimelineEntry } from "echogarden/dist/utilities/Timeline.d.js";
|
||||
import { IPA_MAPPING } from "@/constants";
|
||||
import { toast } from "@renderer/components/ui";
|
||||
|
||||
type MediaPlayerContextType = {
|
||||
media: AudioType | VideoType;
|
||||
@@ -19,6 +20,8 @@ type MediaPlayerContextType = {
|
||||
wavesurfer: WaveSurfer;
|
||||
setRef: (ref: any) => void;
|
||||
decoded: boolean;
|
||||
decodeError: string;
|
||||
setDecodeError: (error: string) => void;
|
||||
// player state
|
||||
currentTime: number;
|
||||
currentSegmentIndex: number;
|
||||
@@ -89,6 +92,7 @@ export const MediaPlayerProvider = ({
|
||||
|
||||
// Player state
|
||||
const [decoded, setDecoded] = useState<boolean>(false);
|
||||
const [decodeError, setDecodeError] = useState<string>(null);
|
||||
const [currentTime, setCurrentTime] = useState<number>(0);
|
||||
const [currentSegmentIndex, setCurrentSegmentIndex] = useState<number>(0);
|
||||
const [fitZoomRatio, setFitZoomRatio] = useState<number>(1.0);
|
||||
@@ -333,6 +337,10 @@ export const MediaPlayerProvider = ({
|
||||
wavesurfer.on("ready", () => {
|
||||
setDecoded(true);
|
||||
}),
|
||||
wavesurfer.on("error", (err: Error) => {
|
||||
toast.error(err.message);
|
||||
setDecodeError(err.message);
|
||||
}),
|
||||
];
|
||||
|
||||
return () => {
|
||||
@@ -360,7 +368,7 @@ export const MediaPlayerProvider = ({
|
||||
|
||||
return () => {
|
||||
setFitZoomRatio(1.0);
|
||||
}
|
||||
};
|
||||
}, [ref, wavesurfer, activeRegion]);
|
||||
|
||||
/*
|
||||
@@ -411,6 +419,8 @@ export const MediaPlayerProvider = ({
|
||||
*/
|
||||
useEffect(() => {
|
||||
initializeWavesurfer();
|
||||
setDecoded(false);
|
||||
setDecodeError(null);
|
||||
}, [media, ref, mediaProvider]);
|
||||
|
||||
return (
|
||||
@@ -422,6 +432,8 @@ export const MediaPlayerProvider = ({
|
||||
wavesurfer,
|
||||
setRef,
|
||||
decoded,
|
||||
decodeError,
|
||||
setDecodeError,
|
||||
currentTime,
|
||||
currentSegmentIndex,
|
||||
setCurrentSegmentIndex,
|
||||
|
||||
398
yarn.lock
398
yarn.lock
@@ -1144,7 +1144,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.7, @babel/runtime@npm:^7.23.9":
|
||||
"@babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.0":
|
||||
version: 7.24.0
|
||||
resolution: "@babel/runtime@npm:7.24.0"
|
||||
dependencies:
|
||||
@@ -2222,7 +2222,281 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@langchain/community@npm:^0.0.39, @langchain/community@npm:~0.0.36":
|
||||
"@langchain/community@npm:^0.0.40":
|
||||
version: 0.0.40
|
||||
resolution: "@langchain/community@npm:0.0.40"
|
||||
dependencies:
|
||||
"@langchain/core": "npm:~0.1.44"
|
||||
"@langchain/openai": "npm:~0.0.19"
|
||||
flat: "npm:^5.0.2"
|
||||
langsmith: "npm:~0.1.1"
|
||||
uuid: "npm:^9.0.0"
|
||||
zod: "npm:^3.22.3"
|
||||
peerDependencies:
|
||||
"@aws-crypto/sha256-js": ^5.0.0
|
||||
"@aws-sdk/client-bedrock-agent-runtime": ^3.485.0
|
||||
"@aws-sdk/client-bedrock-runtime": ^3.422.0
|
||||
"@aws-sdk/client-dynamodb": ^3.310.0
|
||||
"@aws-sdk/client-kendra": ^3.352.0
|
||||
"@aws-sdk/client-lambda": ^3.310.0
|
||||
"@aws-sdk/client-sagemaker-runtime": ^3.310.0
|
||||
"@aws-sdk/client-sfn": ^3.310.0
|
||||
"@aws-sdk/credential-provider-node": ^3.388.0
|
||||
"@azure/search-documents": ^12.0.0
|
||||
"@clickhouse/client": ^0.2.5
|
||||
"@cloudflare/ai": "*"
|
||||
"@datastax/astra-db-ts": ^0.1.4
|
||||
"@elastic/elasticsearch": ^8.4.0
|
||||
"@getmetal/metal-sdk": "*"
|
||||
"@getzep/zep-js": ^0.9.0
|
||||
"@gomomento/sdk": ^1.51.1
|
||||
"@gomomento/sdk-core": ^1.51.1
|
||||
"@google-ai/generativelanguage": ^0.2.1
|
||||
"@gradientai/nodejs-sdk": ^1.2.0
|
||||
"@huggingface/inference": ^2.6.4
|
||||
"@mozilla/readability": "*"
|
||||
"@opensearch-project/opensearch": "*"
|
||||
"@pinecone-database/pinecone": "*"
|
||||
"@planetscale/database": ^1.8.0
|
||||
"@qdrant/js-client-rest": ^1.2.0
|
||||
"@raycast/api": ^1.55.2
|
||||
"@rockset/client": ^0.9.1
|
||||
"@smithy/eventstream-codec": ^2.0.5
|
||||
"@smithy/protocol-http": ^3.0.6
|
||||
"@smithy/signature-v4": ^2.0.10
|
||||
"@smithy/util-utf8": ^2.0.0
|
||||
"@supabase/postgrest-js": ^1.1.1
|
||||
"@supabase/supabase-js": ^2.10.0
|
||||
"@tensorflow-models/universal-sentence-encoder": "*"
|
||||
"@tensorflow/tfjs-converter": "*"
|
||||
"@tensorflow/tfjs-core": "*"
|
||||
"@upstash/redis": ^1.20.6
|
||||
"@upstash/vector": ^1.0.2
|
||||
"@vercel/kv": ^0.2.3
|
||||
"@vercel/postgres": ^0.5.0
|
||||
"@writerai/writer-sdk": ^0.40.2
|
||||
"@xata.io/client": ^0.28.0
|
||||
"@xenova/transformers": ^2.5.4
|
||||
"@zilliz/milvus2-sdk-node": ">=2.2.7"
|
||||
better-sqlite3: ^9.4.0
|
||||
cassandra-driver: ^4.7.2
|
||||
chromadb: "*"
|
||||
closevector-common: 0.1.3
|
||||
closevector-node: 0.1.6
|
||||
closevector-web: 0.1.6
|
||||
cohere-ai: "*"
|
||||
convex: ^1.3.1
|
||||
couchbase: ^4.3.0
|
||||
discord.js: ^14.14.1
|
||||
dria: ^0.0.3
|
||||
faiss-node: ^0.5.1
|
||||
firebase-admin: ^11.9.0 || ^12.0.0
|
||||
google-auth-library: ^8.9.0
|
||||
googleapis: ^126.0.1
|
||||
hnswlib-node: ^1.4.2
|
||||
html-to-text: ^9.0.5
|
||||
ioredis: ^5.3.2
|
||||
jsdom: "*"
|
||||
jsonwebtoken: ^9.0.2
|
||||
llmonitor: ^0.5.9
|
||||
lodash: ^4.17.21
|
||||
lunary: ^0.6.11
|
||||
mongodb: ">=5.2.0"
|
||||
mysql2: ^3.3.3
|
||||
neo4j-driver: "*"
|
||||
node-llama-cpp: "*"
|
||||
pg: ^8.11.0
|
||||
pg-copy-streams: ^6.0.5
|
||||
pickleparser: ^0.2.1
|
||||
portkey-ai: ^0.1.11
|
||||
redis: "*"
|
||||
replicate: ^0.18.0
|
||||
typeorm: ^0.3.12
|
||||
typesense: ^1.5.3
|
||||
usearch: ^1.1.1
|
||||
vectordb: ^0.1.4
|
||||
voy-search: 0.6.2
|
||||
weaviate-ts-client: "*"
|
||||
web-auth-library: ^1.0.3
|
||||
ws: ^8.14.2
|
||||
peerDependenciesMeta:
|
||||
"@aws-crypto/sha256-js":
|
||||
optional: true
|
||||
"@aws-sdk/client-bedrock-agent-runtime":
|
||||
optional: true
|
||||
"@aws-sdk/client-bedrock-runtime":
|
||||
optional: true
|
||||
"@aws-sdk/client-dynamodb":
|
||||
optional: true
|
||||
"@aws-sdk/client-kendra":
|
||||
optional: true
|
||||
"@aws-sdk/client-lambda":
|
||||
optional: true
|
||||
"@aws-sdk/client-sagemaker-runtime":
|
||||
optional: true
|
||||
"@aws-sdk/client-sfn":
|
||||
optional: true
|
||||
"@aws-sdk/credential-provider-node":
|
||||
optional: true
|
||||
"@azure/search-documents":
|
||||
optional: true
|
||||
"@clickhouse/client":
|
||||
optional: true
|
||||
"@cloudflare/ai":
|
||||
optional: true
|
||||
"@datastax/astra-db-ts":
|
||||
optional: true
|
||||
"@elastic/elasticsearch":
|
||||
optional: true
|
||||
"@getmetal/metal-sdk":
|
||||
optional: true
|
||||
"@getzep/zep-js":
|
||||
optional: true
|
||||
"@gomomento/sdk":
|
||||
optional: true
|
||||
"@gomomento/sdk-core":
|
||||
optional: true
|
||||
"@google-ai/generativelanguage":
|
||||
optional: true
|
||||
"@gradientai/nodejs-sdk":
|
||||
optional: true
|
||||
"@huggingface/inference":
|
||||
optional: true
|
||||
"@mozilla/readability":
|
||||
optional: true
|
||||
"@opensearch-project/opensearch":
|
||||
optional: true
|
||||
"@pinecone-database/pinecone":
|
||||
optional: true
|
||||
"@planetscale/database":
|
||||
optional: true
|
||||
"@qdrant/js-client-rest":
|
||||
optional: true
|
||||
"@raycast/api":
|
||||
optional: true
|
||||
"@rockset/client":
|
||||
optional: true
|
||||
"@smithy/eventstream-codec":
|
||||
optional: true
|
||||
"@smithy/protocol-http":
|
||||
optional: true
|
||||
"@smithy/signature-v4":
|
||||
optional: true
|
||||
"@smithy/util-utf8":
|
||||
optional: true
|
||||
"@supabase/postgrest-js":
|
||||
optional: true
|
||||
"@supabase/supabase-js":
|
||||
optional: true
|
||||
"@tensorflow-models/universal-sentence-encoder":
|
||||
optional: true
|
||||
"@tensorflow/tfjs-converter":
|
||||
optional: true
|
||||
"@tensorflow/tfjs-core":
|
||||
optional: true
|
||||
"@upstash/redis":
|
||||
optional: true
|
||||
"@upstash/vector":
|
||||
optional: true
|
||||
"@vercel/kv":
|
||||
optional: true
|
||||
"@vercel/postgres":
|
||||
optional: true
|
||||
"@writerai/writer-sdk":
|
||||
optional: true
|
||||
"@xata.io/client":
|
||||
optional: true
|
||||
"@xenova/transformers":
|
||||
optional: true
|
||||
"@zilliz/milvus2-sdk-node":
|
||||
optional: true
|
||||
better-sqlite3:
|
||||
optional: true
|
||||
cassandra-driver:
|
||||
optional: true
|
||||
chromadb:
|
||||
optional: true
|
||||
closevector-common:
|
||||
optional: true
|
||||
closevector-node:
|
||||
optional: true
|
||||
closevector-web:
|
||||
optional: true
|
||||
cohere-ai:
|
||||
optional: true
|
||||
convex:
|
||||
optional: true
|
||||
couchbase:
|
||||
optional: true
|
||||
discord.js:
|
||||
optional: true
|
||||
dria:
|
||||
optional: true
|
||||
faiss-node:
|
||||
optional: true
|
||||
firebase-admin:
|
||||
optional: true
|
||||
google-auth-library:
|
||||
optional: true
|
||||
googleapis:
|
||||
optional: true
|
||||
hnswlib-node:
|
||||
optional: true
|
||||
html-to-text:
|
||||
optional: true
|
||||
ioredis:
|
||||
optional: true
|
||||
jsdom:
|
||||
optional: true
|
||||
jsonwebtoken:
|
||||
optional: true
|
||||
llmonitor:
|
||||
optional: true
|
||||
lodash:
|
||||
optional: true
|
||||
lunary:
|
||||
optional: true
|
||||
mongodb:
|
||||
optional: true
|
||||
mysql2:
|
||||
optional: true
|
||||
neo4j-driver:
|
||||
optional: true
|
||||
node-llama-cpp:
|
||||
optional: true
|
||||
pg:
|
||||
optional: true
|
||||
pg-copy-streams:
|
||||
optional: true
|
||||
pickleparser:
|
||||
optional: true
|
||||
portkey-ai:
|
||||
optional: true
|
||||
redis:
|
||||
optional: true
|
||||
replicate:
|
||||
optional: true
|
||||
typeorm:
|
||||
optional: true
|
||||
typesense:
|
||||
optional: true
|
||||
usearch:
|
||||
optional: true
|
||||
vectordb:
|
||||
optional: true
|
||||
voy-search:
|
||||
optional: true
|
||||
weaviate-ts-client:
|
||||
optional: true
|
||||
web-auth-library:
|
||||
optional: true
|
||||
ws:
|
||||
optional: true
|
||||
checksum: 10c0/24c86d437bc14302c22ef2b0b55d6e3213487e69edf57c63be25888b2082391f76598263c8268e9e3ed73da0a6c1b1b9e7c1c474cf5fc2288bc1caf64e439732
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@langchain/community@npm:~0.0.36":
|
||||
version: 0.0.39
|
||||
resolution: "@langchain/community@npm:0.0.39"
|
||||
dependencies:
|
||||
@@ -5374,12 +5648,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:^20.11.27":
|
||||
version: 20.11.27
|
||||
resolution: "@types/node@npm:20.11.27"
|
||||
"@types/node@npm:^20.11.28":
|
||||
version: 20.11.28
|
||||
resolution: "@types/node@npm:20.11.28"
|
||||
dependencies:
|
||||
undici-types: "npm:~5.26.4"
|
||||
checksum: 10c0/ec40bea80c60a12b39bd0da9b16333237a84c67ae83c8aa382b88381ae3948943bf6af969442e209270ad3e109f301a6b01ab243f80bd0e69673a877425f9418
|
||||
checksum: 10c0/c599745243ed9ae4ca87460f18f88d02ab7424b545136aa504ed7a1d898e3a9bb133c927bcc7e861f79d7f6043ef917a173e780c8a001e129221e92f6d97b0ee
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6453,14 +6727,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"axios@npm:^1.6.7":
|
||||
version: 1.6.7
|
||||
resolution: "axios@npm:1.6.7"
|
||||
"axios@npm:^1.6.8":
|
||||
version: 1.6.8
|
||||
resolution: "axios@npm:1.6.8"
|
||||
dependencies:
|
||||
follow-redirects: "npm:^1.15.4"
|
||||
follow-redirects: "npm:^1.15.6"
|
||||
form-data: "npm:^4.0.0"
|
||||
proxy-from-env: "npm:^1.1.0"
|
||||
checksum: 10c0/131bf8e62eee48ca4bd84e6101f211961bf6a21a33b95e5dfb3983d5a2fe50d9fffde0b57668d7ce6f65063d3dc10f2212cbcb554f75cfca99da1c73b210358d
|
||||
checksum: 10c0/0f22da6f490335479a89878bc7d5a1419484fbb437b564a80c34888fc36759ae4f56ea28d55a191695e5ed327f0bad56e7ff60fb6770c14d1be6501505d47ab9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -8840,7 +9114,7 @@ __metadata:
|
||||
"@ffmpeg/ffmpeg": "npm:^0.12.10"
|
||||
"@ffmpeg/util": "npm:^0.12.1"
|
||||
"@hookform/resolvers": "npm:^3.3.4"
|
||||
"@langchain/community": "npm:^0.0.39"
|
||||
"@langchain/community": "npm:^0.0.40"
|
||||
"@langchain/google-genai": "npm:^0.0.10"
|
||||
"@mozilla/readability": "npm:^0.5.0"
|
||||
"@playwright/test": "npm:^1.42.1"
|
||||
@@ -8875,7 +9149,7 @@ __metadata:
|
||||
"@types/intl-tel-input": "npm:^18.1.4"
|
||||
"@types/lodash": "npm:^4.17.0"
|
||||
"@types/mark.js": "npm:^8.11.12"
|
||||
"@types/node": "npm:^20.11.27"
|
||||
"@types/node": "npm:^20.11.28"
|
||||
"@types/react": "npm:^18.2.66"
|
||||
"@types/react-dom": "npm:^18.2.22"
|
||||
"@types/validator": "npm:^13.11.9"
|
||||
@@ -8887,7 +9161,7 @@ __metadata:
|
||||
"@vitejs/plugin-react": "npm:^4.2.1"
|
||||
autoprefixer: "npm:^10.4.18"
|
||||
autosize: "npm:^6.0.1"
|
||||
axios: "npm:^1.6.7"
|
||||
axios: "npm:^1.6.8"
|
||||
camelcase: "npm:^8.0.0"
|
||||
camelcase-keys: "npm:^9.1.3"
|
||||
chart.js: "npm:^4.4.2"
|
||||
@@ -8918,7 +9192,7 @@ __metadata:
|
||||
html-to-text: "npm:^9.0.5"
|
||||
https-proxy-agent: "npm:^7.0.4"
|
||||
i18next: "npm:^23.10.1"
|
||||
intl-tel-input: "npm:^19.5.7"
|
||||
intl-tel-input: "npm:^20.0.3"
|
||||
js-md5: "npm:^0.8.3"
|
||||
langchain: "npm:^0.1.28"
|
||||
lodash: "npm:^4.17.21"
|
||||
@@ -8927,15 +9201,15 @@ __metadata:
|
||||
microsoft-cognitiveservices-speech-sdk: "npm:^1.36.0"
|
||||
next-themes: "npm:^0.3.0"
|
||||
octokit: "npm:^3.1.2"
|
||||
openai: "npm:^4.29.0"
|
||||
openai: "npm:^4.29.1"
|
||||
pitchfinder: "npm:^2.3.2"
|
||||
postcss: "npm:^8.4.35"
|
||||
postcss: "npm:^8.4.36"
|
||||
progress: "npm:^2.0.3"
|
||||
proxy-agent: "npm:^6.4.0"
|
||||
react: "npm:^18.2.0"
|
||||
react-activity-calendar: "npm:^2.2.8"
|
||||
react-dom: "npm:^18.2.0"
|
||||
react-hook-form: "npm:^7.51.0"
|
||||
react-hook-form: "npm:^7.51.1"
|
||||
react-hotkeys-hook: "npm:^4.5.0"
|
||||
react-i18next: "npm:^14.1.0"
|
||||
react-markdown: "npm:^9.0.1"
|
||||
@@ -8947,7 +9221,7 @@ __metadata:
|
||||
sequelize-typescript: "npm:^2.1.6"
|
||||
sonner: "npm:^1.4.3"
|
||||
sqlite3: "npm:^5.1.7"
|
||||
tailwind-merge: "npm:^2.2.1"
|
||||
tailwind-merge: "npm:^2.2.2"
|
||||
tailwind-scrollbar: "npm:^3.1.0"
|
||||
tailwind-scrollbar-hide: "npm:^1.1.7"
|
||||
tailwindcss: "npm:^3.4.1"
|
||||
@@ -9876,13 +10150,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"follow-redirects@npm:^1.15.4":
|
||||
version: 1.15.5
|
||||
resolution: "follow-redirects@npm:1.15.5"
|
||||
"follow-redirects@npm:^1.15.6":
|
||||
version: 1.15.6
|
||||
resolution: "follow-redirects@npm:1.15.6"
|
||||
peerDependenciesMeta:
|
||||
debug:
|
||||
optional: true
|
||||
checksum: 10c0/418d71688ceaf109dfd6f85f747a0c75de30afe43a294caa211def77f02ef19865b547dfb73fde82b751e1cc507c06c754120b848fe5a7400b0a669766df7615
|
||||
checksum: 10c0/9ff767f0d7be6aa6870c82ac79cf0368cd73e01bbc00e9eb1c2a16fbb198ec105e3c9b6628bb98e9f3ac66fe29a957b9645bcb9a490bb7aa0d35f908b6b85071
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -11081,14 +11355,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"intl-tel-input@npm:^19.5.7":
|
||||
version: 19.5.7
|
||||
resolution: "intl-tel-input@npm:19.5.7"
|
||||
dependencies:
|
||||
prop-types: "npm:^15.8.1"
|
||||
react: "npm:^18.2.0"
|
||||
react-dom: "npm:^18.2.0"
|
||||
checksum: 10c0/99937f79099456759d1c6493c2b57d8a9e9ec4b8d186599be4ee432b4a8edd14fbb889f8866b6a7e001ef6a5092ee6fce81210592e10dfc061aa4f7bb9c07c33
|
||||
"intl-tel-input@npm:^20.0.3":
|
||||
version: 20.0.3
|
||||
resolution: "intl-tel-input@npm:20.0.3"
|
||||
checksum: 10c0/430315b65cc29becb3ea7cc2a99036ec3dae07d7c4ea1bbdea4823e798842c00bdc45e78bbebb8b555f6a369b5a99a5ca7f4ae64502082b9443aefbf5d897c5a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -12317,7 +12587,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0":
|
||||
"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0":
|
||||
version: 1.4.0
|
||||
resolution: "loose-envify@npm:1.4.0"
|
||||
dependencies:
|
||||
@@ -14100,7 +14370,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"object-assign@npm:^4.0.1, object-assign@npm:^4.1.1":
|
||||
"object-assign@npm:^4.0.1":
|
||||
version: 4.1.1
|
||||
resolution: "object-assign@npm:4.1.1"
|
||||
checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414
|
||||
@@ -14256,9 +14526,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"openai@npm:^4.29.0":
|
||||
version: 4.29.0
|
||||
resolution: "openai@npm:4.29.0"
|
||||
"openai@npm:^4.29.1":
|
||||
version: 4.29.1
|
||||
resolution: "openai@npm:4.29.1"
|
||||
dependencies:
|
||||
"@types/node": "npm:^18.11.18"
|
||||
"@types/node-fetch": "npm:^2.6.4"
|
||||
@@ -14271,7 +14541,7 @@ __metadata:
|
||||
web-streams-polyfill: "npm:^3.2.1"
|
||||
bin:
|
||||
openai: bin/cli
|
||||
checksum: 10c0/df5a99c7a54f782780446cfb346d18793ded57a54908d839ca49967f85f8803c74ec7473f11426228af2c1df2c0d2325d52fe5590e54b194552593db7c524637
|
||||
checksum: 10c0/7873d1c8f69d8a76ca38bd3b0aa10e967ee1a2e705a1a2eb1012dcdd1b689569e041e1bcbeb72e10fc15a43d62c0f99e01de58c8ed454e8c0b54626b58c0794f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -14918,6 +15188,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss@npm:^8.4.36":
|
||||
version: 8.4.36
|
||||
resolution: "postcss@npm:8.4.36"
|
||||
dependencies:
|
||||
nanoid: "npm:^3.3.7"
|
||||
picocolors: "npm:^1.0.0"
|
||||
source-map-js: "npm:^1.1.0"
|
||||
checksum: 10c0/e7c834e31d8f4e8dfd0a427df36fdc7bdc58a16e373551618e2c3ac172019eb816b24f1b4709311ebcade8d3ba31b2d75522d28ef45ecbbeb11eb01f265579fb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postject@npm:^1.0.0-alpha.6":
|
||||
version: 1.0.0-alpha.6
|
||||
resolution: "postject@npm:1.0.0-alpha.6"
|
||||
@@ -14996,17 +15277,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"prop-types@npm:^15.8.1":
|
||||
version: 15.8.1
|
||||
resolution: "prop-types@npm:15.8.1"
|
||||
dependencies:
|
||||
loose-envify: "npm:^1.4.0"
|
||||
object-assign: "npm:^4.1.1"
|
||||
react-is: "npm:^16.13.1"
|
||||
checksum: 10c0/59ece7ca2fb9838031d73a48d4becb9a7cc1ed10e610517c7d8f19a1e02fa47f7c27d557d8a5702bec3cfeccddc853579832b43f449e54635803f277b1c78077
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"property-information@npm:^6.0.0":
|
||||
version: 6.4.1
|
||||
resolution: "property-information@npm:6.4.1"
|
||||
@@ -15206,12 +15476,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"react-hook-form@npm:^7.51.0":
|
||||
version: 7.51.0
|
||||
resolution: "react-hook-form@npm:7.51.0"
|
||||
"react-hook-form@npm:^7.51.1":
|
||||
version: 7.51.1
|
||||
resolution: "react-hook-form@npm:7.51.1"
|
||||
peerDependencies:
|
||||
react: ^16.8.0 || ^17 || ^18
|
||||
checksum: 10c0/929464db00d1bc60bb7de41ab7c05cd2b28afba1d4d4ed10b02288919fb95fa81667e467bc571cbb403bec2bb9116b465211ce9962c3c0120a49dcbf47bfa699
|
||||
checksum: 10c0/f0acbf27fc548d3cd0e4db40b84d9dfe6c24209e4421fffbd422da15e32cc98f877ab0af9e06cb1deaf4205ec655b56020ff9f8b2bae6ada5e619890f174c374
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -15243,13 +15513,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"react-is@npm:^16.13.1":
|
||||
version: 16.13.1
|
||||
resolution: "react-is@npm:16.13.1"
|
||||
checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"react-markdown@npm:^9.0.1":
|
||||
version: 9.0.1
|
||||
resolution: "react-markdown@npm:9.0.1"
|
||||
@@ -16316,6 +16579,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"source-map-js@npm:^1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "source-map-js@npm:1.1.0"
|
||||
checksum: 10c0/d1f016efe4fcf67fd92e36da0670f2889b13a36cc453329758336450e811c61164376eb451b453b4dd4e89a760f841b0a014942d54f240af31a791829bc0e336
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"source-map-support@npm:^0.5.13":
|
||||
version: 0.5.21
|
||||
resolution: "source-map-support@npm:0.5.21"
|
||||
@@ -16761,12 +17031,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tailwind-merge@npm:^2.2.1":
|
||||
version: 2.2.1
|
||||
resolution: "tailwind-merge@npm:2.2.1"
|
||||
"tailwind-merge@npm:^2.2.2":
|
||||
version: 2.2.2
|
||||
resolution: "tailwind-merge@npm:2.2.2"
|
||||
dependencies:
|
||||
"@babel/runtime": "npm:^7.23.7"
|
||||
checksum: 10c0/14ab965ec897e9377484b7593f7a700dde09b8035b762ad42652622a3ed1f202b203f48c0f235c0b1b38e9390470d94458f6f9010d33a5a18d71b15f38b986a6
|
||||
"@babel/runtime": "npm:^7.24.0"
|
||||
checksum: 10c0/68a5e199848a467aed4f8d1a8d7b6a5b583ff72f1d2801e018bf245eaa41e6564b63ead9e2b708a214cefbd843970c5e0a21754d5f2a20e2c1238e25955685ce
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
Reference in New Issue
Block a user