mirror of
https://github.com/lobehub/lobe-chat.git
synced 2026-06-14 03:30:19 +00:00
Compare commits
98 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b8b1ab6616 | |||
| 3891015a3d | |||
| 5babb7d826 | |||
| a7504b696a | |||
| 9dc4308942 | |||
| 082117998d | |||
| 9a74d6c045 | |||
| b1a4f24dc9 | |||
| c47551775b | |||
| 2d83300795 | |||
| 0915538da8 | |||
| b76e3c85b9 | |||
| 29ce0225b2 | |||
| 06878829c9 | |||
| ae613c7c35 | |||
| 8184f9d097 | |||
| 7fac37b983 | |||
| d3570879da | |||
| 1ad80809cf | |||
| 2c97a9e920 | |||
| 246cce28db | |||
| 9ffb6891e4 | |||
| 766ca942b3 | |||
| 147975ae46 | |||
| a6c3317192 | |||
| 4cd6347d7e | |||
| cd7d955e3d | |||
| 61901ddb07 | |||
| 77ed938cfb | |||
| 4c3ac3bce7 | |||
| a142b3384f | |||
| ee80f613df | |||
| 7d05d0270c | |||
| acd5954f15 | |||
| a52c9e5f24 | |||
| bcb998d767 | |||
| c6410b29c5 | |||
| 9872409d98 | |||
| 319a622778 | |||
| 85153f2464 | |||
| 38cfd266f4 | |||
| 53fc0642e0 | |||
| a8c725abd5 | |||
| b8a7f6e9eb | |||
| 2c93d9bb1a | |||
| bb594f87e2 | |||
| b0ee9b434e | |||
| cf2c5a1d37 | |||
| 0511e43a48 | |||
| 1f128f407f | |||
| f258a2e042 | |||
| 7996e1c431 | |||
| 93dddfc2e5 | |||
| 5e4186559b | |||
| 9bfd9bb4a5 | |||
| 9ca54135b5 | |||
| f162556607 | |||
| 3292ed83f9 | |||
| 561a38f788 | |||
| 71aaf0fac5 | |||
| 287601f8ec | |||
| b36f8781e6 | |||
| 705450a571 | |||
| 5272c7373f | |||
| fb24b6f1b7 | |||
| 2fd65fe8a3 | |||
| 35d5a2c937 | |||
| 42f40d2717 | |||
| ef8a644d8c | |||
| 81c84348bc | |||
| 8d7a0467db | |||
| e9522729c5 | |||
| cf01894077 | |||
| b5d945b1fd | |||
| cbee964582 | |||
| 87a38ad0c4 | |||
| f2d4745ad3 | |||
| 0167ac8e28 | |||
| b480227fd0 | |||
| 97ff98cada | |||
| 845d3ef58a | |||
| 906917362f | |||
| c69049d6da | |||
| 4f7356ffab | |||
| d20c82c115 | |||
| d617a6cd97 | |||
| 408391eeb6 | |||
| 4a2e671f55 | |||
| 695a261df1 | |||
| 39b723eff4 | |||
| 68937d842c | |||
| b66bc66260 | |||
| 4d06279abd | |||
| 1a8d33fbf4 | |||
| 2c086373cc | |||
| c7d49258f8 | |||
| 2280fd6ff9 | |||
| 8eb901c401 |
@@ -21,6 +21,7 @@ jobs:
|
||||
(github.event_name == 'pull_request_review' && github.event.sender.type != 'Bot') ||
|
||||
(github.event_name == 'pull_request_review_comment' && github.event.sender.type != 'Bot')
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 5
|
||||
permissions:
|
||||
contents: read
|
||||
# update issues/comments
|
||||
|
||||
+175
@@ -2,6 +2,181 @@
|
||||
|
||||
# Changelog
|
||||
|
||||
## [Version 2.0.0-next.69](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.68...v2.0.0-next.69)
|
||||
|
||||
<sup>Released on **2025-11-17**</sup>
|
||||
|
||||
#### ♻ Code Refactoring
|
||||
|
||||
- **misc**: Remove `language_model_settings` and remove isDeprecatedEdition.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### Code refactoring
|
||||
|
||||
- **misc**: Remove `language_model_settings` and remove isDeprecatedEdition, closes [#10264](https://github.com/lobehub/lobe-chat/issues/10264) ([ae613c7](https://github.com/lobehub/lobe-chat/commit/ae613c7))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.68](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.67...v2.0.0-next.68)
|
||||
|
||||
<sup>Released on **2025-11-16**</sup>
|
||||
|
||||
#### 🐛 Bug Fixes
|
||||
|
||||
- **misc**: The tool to fail execution on ollama when a message contains b….
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's fixed
|
||||
|
||||
- **misc**: The tool to fail execution on ollama when a message contains b…, closes [#10259](https://github.com/lobehub/lobe-chat/issues/10259) ([1ad8080](https://github.com/lobehub/lobe-chat/commit/1ad8080))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.67](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.66...v2.0.0-next.67)
|
||||
|
||||
<sup>Released on **2025-11-16**</sup>
|
||||
|
||||
#### ♻ Code Refactoring
|
||||
|
||||
- **misc**: Refactor to virtua.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### Code refactoring
|
||||
|
||||
- **misc**: Refactor to virtua, closes [#10151](https://github.com/lobehub/lobe-chat/issues/10151) ([9ffb689](https://github.com/lobehub/lobe-chat/commit/9ffb689))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.66](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.65...v2.0.0-next.66)
|
||||
|
||||
<sup>Released on **2025-11-16**</sup>
|
||||
|
||||
#### ✨ Features
|
||||
|
||||
- **misc**: Support to collapse message.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's improved
|
||||
|
||||
- **misc**: Support to collapse message, closes [#10234](https://github.com/lobehub/lobe-chat/issues/10234) ([4cd6347](https://github.com/lobehub/lobe-chat/commit/4cd6347))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.65](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.64...v2.0.0-next.65)
|
||||
|
||||
<sup>Released on **2025-11-16**</sup>
|
||||
|
||||
#### 💄 Styles
|
||||
|
||||
- **misc**: Update i18n.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### Styles
|
||||
|
||||
- **misc**: Update i18n, closes [#10235](https://github.com/lobehub/lobe-chat/issues/10235) ([a52c9e5](https://github.com/lobehub/lobe-chat/commit/a52c9e5))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.64](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.63...v2.0.0-next.64)
|
||||
|
||||
<sup>Released on **2025-11-15**</sup>
|
||||
|
||||
#### ♻ Code Refactoring
|
||||
|
||||
- **misc**: Refactor package types.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### Code refactoring
|
||||
|
||||
- **misc**: Refactor package types, closes [#10233](https://github.com/lobehub/lobe-chat/issues/10233) ([9872409](https://github.com/lobehub/lobe-chat/commit/9872409))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.63](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.62...v2.0.0-next.63)
|
||||
|
||||
<sup>Released on **2025-11-15**</sup>
|
||||
|
||||
#### ✨ Features
|
||||
|
||||
- **misc**: Show orphaned tool message and support delete tool message.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's improved
|
||||
|
||||
- **misc**: Show orphaned tool message and support delete tool message, closes [#10232](https://github.com/lobehub/lobe-chat/issues/10232) ([38cfd26](https://github.com/lobehub/lobe-chat/commit/38cfd26))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.62](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.61...v2.0.0-next.62)
|
||||
|
||||
<sup>Released on **2025-11-15**</sup>
|
||||
|
||||
-272
@@ -1,272 +0,0 @@
|
||||
## Set global build ENV
|
||||
ARG NODEJS_VERSION="24"
|
||||
|
||||
## Base image for all building stages
|
||||
FROM node:${NODEJS_VERSION}-slim AS base
|
||||
|
||||
ARG USE_CN_MIRROR
|
||||
|
||||
ENV DEBIAN_FRONTEND="noninteractive"
|
||||
|
||||
RUN \
|
||||
# If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true
|
||||
if [ "${USE_CN_MIRROR:-false}" = "true" ]; then \
|
||||
sed -i "s/deb.debian.org/mirrors.ustc.edu.cn/g" "/etc/apt/sources.list.d/debian.sources"; \
|
||||
fi \
|
||||
# Add required package
|
||||
&& apt update \
|
||||
&& apt install ca-certificates proxychains-ng -qy \
|
||||
# Prepare required package to distroless
|
||||
&& mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib \
|
||||
# Copy proxychains to distroless
|
||||
&& cp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4 \
|
||||
&& cp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2 \
|
||||
&& cp /usr/bin/proxychains4 /distroless/bin/proxychains \
|
||||
&& cp /etc/proxychains4.conf /distroless/etc/proxychains4.conf \
|
||||
# Copy node to distroless
|
||||
&& cp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6 \
|
||||
&& cp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1 \
|
||||
&& cp /usr/local/bin/node /distroless/bin/node \
|
||||
# Copy CA certificates to distroless
|
||||
&& cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt \
|
||||
# Cleanup temp files
|
||||
&& rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*
|
||||
|
||||
## Builder image, install all the dependencies and build the app
|
||||
FROM base AS builder
|
||||
|
||||
ARG USE_CN_MIRROR
|
||||
ARG NEXT_PUBLIC_BASE_PATH
|
||||
ARG NEXT_PUBLIC_SENTRY_DSN
|
||||
ARG NEXT_PUBLIC_ANALYTICS_POSTHOG
|
||||
ARG NEXT_PUBLIC_POSTHOG_HOST
|
||||
ARG NEXT_PUBLIC_POSTHOG_KEY
|
||||
ARG NEXT_PUBLIC_ANALYTICS_UMAMI
|
||||
ARG NEXT_PUBLIC_UMAMI_SCRIPT_URL
|
||||
ARG NEXT_PUBLIC_UMAMI_WEBSITE_ID
|
||||
ARG FEATURE_FLAGS
|
||||
|
||||
ENV NEXT_PUBLIC_CLIENT_DB="pglite"
|
||||
ENV NEXT_PUBLIC_BASE_PATH="${NEXT_PUBLIC_BASE_PATH}" \
|
||||
FEATURE_FLAGS="${FEATURE_FLAGS}"
|
||||
|
||||
# Sentry
|
||||
ENV NEXT_PUBLIC_SENTRY_DSN="${NEXT_PUBLIC_SENTRY_DSN}" \
|
||||
SENTRY_ORG="" \
|
||||
SENTRY_PROJECT=""
|
||||
|
||||
ENV APP_URL="http://app.com"
|
||||
|
||||
# Posthog
|
||||
ENV NEXT_PUBLIC_ANALYTICS_POSTHOG="${NEXT_PUBLIC_ANALYTICS_POSTHOG}" \
|
||||
NEXT_PUBLIC_POSTHOG_HOST="${NEXT_PUBLIC_POSTHOG_HOST}" \
|
||||
NEXT_PUBLIC_POSTHOG_KEY="${NEXT_PUBLIC_POSTHOG_KEY}"
|
||||
|
||||
# Umami
|
||||
ENV NEXT_PUBLIC_ANALYTICS_UMAMI="${NEXT_PUBLIC_ANALYTICS_UMAMI}" \
|
||||
NEXT_PUBLIC_UMAMI_SCRIPT_URL="${NEXT_PUBLIC_UMAMI_SCRIPT_URL}" \
|
||||
NEXT_PUBLIC_UMAMI_WEBSITE_ID="${NEXT_PUBLIC_UMAMI_WEBSITE_ID}"
|
||||
|
||||
# Node
|
||||
ENV NODE_OPTIONS="--max-old-space-size=6144"
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package.json pnpm-workspace.yaml ./
|
||||
COPY .npmrc ./
|
||||
COPY packages ./packages
|
||||
|
||||
RUN \
|
||||
# If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true
|
||||
if [ "${USE_CN_MIRROR:-false}" = "true" ]; then \
|
||||
export SENTRYCLI_CDNURL="https://npmmirror.com/mirrors/sentry-cli"; \
|
||||
npm config set registry "https://registry.npmmirror.com/"; \
|
||||
echo 'canvas_binary_host_mirror=https://npmmirror.com/mirrors/canvas' >> .npmrc; \
|
||||
fi \
|
||||
# Set the registry for corepack
|
||||
&& export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\/$//') \
|
||||
# Update corepack to latest (nodejs/corepack#612)
|
||||
&& npm i -g corepack@latest \
|
||||
# Enable corepack
|
||||
&& corepack enable \
|
||||
# Use pnpm for corepack
|
||||
&& corepack use $(sed -n 's/.*"packageManager": "\(.*\)".*/\1/p' package.json) \
|
||||
# Install the dependencies
|
||||
&& pnpm i
|
||||
|
||||
COPY . .
|
||||
|
||||
# run build standalone for docker version
|
||||
RUN npm run build:docker
|
||||
|
||||
## Application image, copy all the files for production
|
||||
FROM busybox:latest AS app
|
||||
|
||||
COPY --from=base /distroless/ /
|
||||
|
||||
# Automatically leverage output traces to reduce image size
|
||||
# https://nextjs.org/docs/advanced-features/output-file-tracing
|
||||
COPY --from=builder /app/.next/standalone /app/
|
||||
|
||||
# Copy server launcher
|
||||
COPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js
|
||||
|
||||
RUN \
|
||||
# Add nextjs:nodejs to run the app
|
||||
addgroup -S -g 1001 nodejs \
|
||||
&& adduser -D -G nodejs -H -S -h /app -u 1001 nextjs \
|
||||
# Set permission for nextjs:nodejs
|
||||
&& chown -R nextjs:nodejs /app /etc/proxychains4.conf
|
||||
|
||||
## Production image, copy all the files and run next
|
||||
FROM scratch
|
||||
|
||||
# Copy all the files from app, set the correct permission for prerender cache
|
||||
COPY --from=app / /
|
||||
|
||||
ENV NODE_ENV="production" \
|
||||
NODE_OPTIONS="--dns-result-order=ipv4first --use-openssl-ca" \
|
||||
NODE_EXTRA_CA_CERTS="" \
|
||||
NODE_TLS_REJECT_UNAUTHORIZED="" \
|
||||
SSL_CERT_FILE="/etc/ssl/certs/ca-certificates.crt"
|
||||
|
||||
# Make the middleware rewrite through local as default
|
||||
# refs: https://github.com/lobehub/lobe-chat/issues/5876
|
||||
ENV MIDDLEWARE_REWRITE_THROUGH_LOCAL="1"
|
||||
|
||||
# set hostname to localhost
|
||||
ENV HOSTNAME="0.0.0.0" \
|
||||
PORT="3210"
|
||||
|
||||
# General Variables
|
||||
ENV ACCESS_CODE="" \
|
||||
API_KEY_SELECT_MODE="" \
|
||||
DEFAULT_AGENT_CONFIG="" \
|
||||
SYSTEM_AGENT="" \
|
||||
FEATURE_FLAGS="" \
|
||||
PROXY_URL="" \
|
||||
ENABLE_AUTH_PROTECTION=""
|
||||
|
||||
# Model Variables
|
||||
ENV \
|
||||
# AI21
|
||||
AI21_API_KEY="" AI21_MODEL_LIST="" \
|
||||
# Ai360
|
||||
AI360_API_KEY="" AI360_MODEL_LIST="" \
|
||||
# AiHubMix
|
||||
AIHUBMIX_API_KEY="" AIHUBMIX_MODEL_LIST="" \
|
||||
# Anthropic
|
||||
ANTHROPIC_API_KEY="" ANTHROPIC_MODEL_LIST="" ANTHROPIC_PROXY_URL="" \
|
||||
# Amazon Bedrock
|
||||
ENABLED_AWS_BEDROCK="" AWS_ACCESS_KEY_ID="" AWS_SECRET_ACCESS_KEY="" AWS_REGION="" AWS_BEDROCK_MODEL_LIST="" \
|
||||
# Azure OpenAI
|
||||
AZURE_API_KEY="" AZURE_API_VERSION="" AZURE_ENDPOINT="" AZURE_MODEL_LIST="" \
|
||||
# Baichuan
|
||||
BAICHUAN_API_KEY="" BAICHUAN_MODEL_LIST="" \
|
||||
# Cloudflare
|
||||
CLOUDFLARE_API_KEY="" CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID="" CLOUDFLARE_MODEL_LIST="" \
|
||||
# Cohere
|
||||
COHERE_API_KEY="" COHERE_MODEL_LIST="" COHERE_PROXY_URL="" \
|
||||
# ComfyUI
|
||||
ENABLED_COMFYUI="" COMFYUI_BASE_URL="" COMFYUI_AUTH_TYPE="" \
|
||||
COMFYUI_API_KEY="" COMFYUI_USERNAME="" COMFYUI_PASSWORD="" COMFYUI_CUSTOM_HEADERS="" \
|
||||
# DeepSeek
|
||||
DEEPSEEK_API_KEY="" DEEPSEEK_MODEL_LIST="" \
|
||||
# Fireworks AI
|
||||
FIREWORKSAI_API_KEY="" FIREWORKSAI_MODEL_LIST="" \
|
||||
# Gitee AI
|
||||
GITEE_AI_API_KEY="" GITEE_AI_MODEL_LIST="" \
|
||||
# GitHub
|
||||
GITHUB_TOKEN="" GITHUB_MODEL_LIST="" \
|
||||
# Google
|
||||
GOOGLE_API_KEY="" GOOGLE_MODEL_LIST="" GOOGLE_PROXY_URL="" \
|
||||
# Groq
|
||||
GROQ_API_KEY="" GROQ_MODEL_LIST="" GROQ_PROXY_URL="" \
|
||||
# Higress
|
||||
HIGRESS_API_KEY="" HIGRESS_MODEL_LIST="" HIGRESS_PROXY_URL="" \
|
||||
# HuggingFace
|
||||
HUGGINGFACE_API_KEY="" HUGGINGFACE_MODEL_LIST="" HUGGINGFACE_PROXY_URL="" \
|
||||
# Hunyuan
|
||||
HUNYUAN_API_KEY="" HUNYUAN_MODEL_LIST="" \
|
||||
# InternLM
|
||||
INTERNLM_API_KEY="" INTERNLM_MODEL_LIST="" \
|
||||
# Jina
|
||||
JINA_API_KEY="" JINA_MODEL_LIST="" JINA_PROXY_URL="" \
|
||||
# Minimax
|
||||
MINIMAX_API_KEY="" MINIMAX_MODEL_LIST="" \
|
||||
# Mistral
|
||||
MISTRAL_API_KEY="" MISTRAL_MODEL_LIST="" \
|
||||
# ModelScope
|
||||
MODELSCOPE_API_KEY="" MODELSCOPE_MODEL_LIST="" MODELSCOPE_PROXY_URL="" \
|
||||
# Moonshot
|
||||
MOONSHOT_API_KEY="" MOONSHOT_MODEL_LIST="" MOONSHOT_PROXY_URL="" \
|
||||
# Nebius
|
||||
NEBIUS_API_KEY="" NEBIUS_MODEL_LIST="" NEBIUS_PROXY_URL="" \
|
||||
# NewAPI
|
||||
NEWAPI_API_KEY="" NEWAPI_PROXY_URL="" \
|
||||
# Novita
|
||||
NOVITA_API_KEY="" NOVITA_MODEL_LIST="" \
|
||||
# Nvidia NIM
|
||||
NVIDIA_API_KEY="" NVIDIA_MODEL_LIST="" NVIDIA_PROXY_URL="" \
|
||||
# Ollama
|
||||
ENABLED_OLLAMA="" OLLAMA_MODEL_LIST="" OLLAMA_PROXY_URL="" \
|
||||
# OpenAI
|
||||
ENABLED_OPENAI="" OPENAI_API_KEY="" OPENAI_MODEL_LIST="" OPENAI_PROXY_URL="" \
|
||||
# OpenRouter
|
||||
OPENROUTER_API_KEY="" OPENROUTER_MODEL_LIST="" \
|
||||
# Perplexity
|
||||
PERPLEXITY_API_KEY="" PERPLEXITY_MODEL_LIST="" PERPLEXITY_PROXY_URL="" \
|
||||
# Qiniu
|
||||
QINIU_API_KEY="" QINIU_MODEL_LIST="" QINIU_PROXY_URL="" \
|
||||
# Qwen
|
||||
QWEN_API_KEY="" QWEN_MODEL_LIST="" QWEN_PROXY_URL="" \
|
||||
# SambaNova
|
||||
SAMBANOVA_API_KEY="" SAMBANOVA_MODEL_LIST="" \
|
||||
# SenseNova
|
||||
SENSENOVA_API_KEY="" SENSENOVA_MODEL_LIST="" \
|
||||
# SiliconCloud
|
||||
SILICONCLOUD_API_KEY="" SILICONCLOUD_MODEL_LIST="" SILICONCLOUD_PROXY_URL="" \
|
||||
# Spark
|
||||
SPARK_API_KEY="" SPARK_MODEL_LIST="" SPARK_PROXY_URL="" SPARK_SEARCH_MODE="" \
|
||||
# Stepfun
|
||||
STEPFUN_API_KEY="" STEPFUN_MODEL_LIST="" \
|
||||
# Taichu
|
||||
TAICHU_API_KEY="" TAICHU_MODEL_LIST="" \
|
||||
# TogetherAI
|
||||
TOGETHERAI_API_KEY="" TOGETHERAI_MODEL_LIST="" \
|
||||
# Upstage
|
||||
UPSTAGE_API_KEY="" UPSTAGE_MODEL_LIST="" \
|
||||
# v0 (Vercel)
|
||||
V0_API_KEY="" V0_MODEL_LIST="" \
|
||||
# vLLM
|
||||
VLLM_API_KEY="" VLLM_MODEL_LIST="" VLLM_PROXY_URL="" \
|
||||
# Wenxin
|
||||
WENXIN_API_KEY="" WENXIN_MODEL_LIST="" \
|
||||
# xAI
|
||||
XAI_API_KEY="" XAI_MODEL_LIST="" XAI_PROXY_URL="" \
|
||||
# Xinference
|
||||
XINFERENCE_API_KEY="" XINFERENCE_MODEL_LIST="" XINFERENCE_PROXY_URL="" \
|
||||
# 01.AI
|
||||
ZEROONE_API_KEY="" ZEROONE_MODEL_LIST="" \
|
||||
# Zhipu
|
||||
ZHIPU_API_KEY="" ZHIPU_MODEL_LIST="" \
|
||||
# Tencent Cloud
|
||||
TENCENT_CLOUD_API_KEY="" TENCENT_CLOUD_MODEL_LIST="" \
|
||||
# Infini-AI
|
||||
INFINIAI_API_KEY="" INFINIAI_MODEL_LIST="" \
|
||||
# 302.AI
|
||||
AI302_API_KEY="" AI302_MODEL_LIST="" \
|
||||
# FAL
|
||||
ENABLED_FAL="" FAL_API_KEY="" FAL_MODEL_LIST="" \
|
||||
# BFL
|
||||
BFL_API_KEY="" BFL_MODEL_LIST="" \
|
||||
# Vercel AI Gateway
|
||||
VERCELAIGATEWAY_API_KEY="" VERCELAIGATEWAY_MODEL_LIST=""
|
||||
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 3210/tcp
|
||||
|
||||
ENTRYPOINT ["/bin/node"]
|
||||
|
||||
CMD ["/app/startServer.js"]
|
||||
+18
-18
@@ -32,33 +32,33 @@
|
||||
"electron-updater": "^6.6.2",
|
||||
"electron-window-state": "^5.0.3",
|
||||
"fetch-socks": "^1.3.2",
|
||||
"get-port-please": "^3.1.2",
|
||||
"get-port-please": "^3.2.0",
|
||||
"pdfjs-dist": "4.10.38"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@electron-toolkit/eslint-config-prettier": "^3.0.0",
|
||||
"@electron-toolkit/eslint-config-ts": "^3.0.0",
|
||||
"@electron-toolkit/preload": "^3.0.1",
|
||||
"@electron-toolkit/eslint-config-ts": "^3.1.0",
|
||||
"@electron-toolkit/preload": "^3.0.2",
|
||||
"@electron-toolkit/tsconfig": "^2.0.0",
|
||||
"@electron-toolkit/utils": "^4.0.0",
|
||||
"@lobechat/electron-client-ipc": "workspace:*",
|
||||
"@lobechat/electron-server-ipc": "workspace:*",
|
||||
"@lobechat/file-loaders": "workspace:*",
|
||||
"@lobehub/i18n-cli": "^1.20.3",
|
||||
"@types/lodash": "^4.17.0",
|
||||
"@lobehub/i18n-cli": "^1.25.1",
|
||||
"@types/lodash": "^4.17.20",
|
||||
"@types/resolve": "^1.20.6",
|
||||
"@types/semver": "^7.7.0",
|
||||
"@types/semver": "^7.7.1",
|
||||
"@types/set-cookie-parser": "^2.4.10",
|
||||
"@typescript/native-preview": "7.0.0-dev.20250711.1",
|
||||
"consola": "^3.1.0",
|
||||
"consola": "^3.4.2",
|
||||
"cookie": "^1.0.2",
|
||||
"electron": "^38.6.0",
|
||||
"electron": "^38.7.0",
|
||||
"electron-builder": "^26.0.12",
|
||||
"electron-is": "^3.0.0",
|
||||
"electron-log": "^5.3.3",
|
||||
"electron-log": "^5.4.3",
|
||||
"electron-store": "^8.2.0",
|
||||
"electron-vite": "^3.0.0",
|
||||
"execa": "^9.5.2",
|
||||
"electron-vite": "^3.1.0",
|
||||
"execa": "^9.6.0",
|
||||
"fast-glob": "^3.3.3",
|
||||
"fix-path": "^5.0.0",
|
||||
"http-proxy-agent": "^7.0.2",
|
||||
@@ -66,13 +66,13 @@
|
||||
"just-diff": "^6.0.2",
|
||||
"lodash": "^4.17.21",
|
||||
"lodash-es": "^4.17.21",
|
||||
"resolve": "^1.22.8",
|
||||
"semver": "^7.5.4",
|
||||
"set-cookie-parser": "^2.7.1",
|
||||
"tsx": "^4.19.3",
|
||||
"typescript": "^5.7.3",
|
||||
"undici": "^7.9.0",
|
||||
"vite": "^6.3.5",
|
||||
"resolve": "^1.22.11",
|
||||
"semver": "^7.7.3",
|
||||
"set-cookie-parser": "^2.7.2",
|
||||
"tsx": "^4.20.6",
|
||||
"typescript": "^5.9.3",
|
||||
"undici": "^7.16.0",
|
||||
"vite": "^6.4.1",
|
||||
"vitest": "^3.2.4"
|
||||
},
|
||||
"pnpm": {
|
||||
|
||||
@@ -1,4 +1,58 @@
|
||||
[
|
||||
{
|
||||
"children": {
|
||||
"improvements": ["Remove language_model_settings and remove isDeprecatedEdition."]
|
||||
},
|
||||
"date": "2025-11-17",
|
||||
"version": "2.0.0-next.69"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"fixes": ["The tool to fail execution on ollama when a message contains b…."]
|
||||
},
|
||||
"date": "2025-11-16",
|
||||
"version": "2.0.0-next.68"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"improvements": ["Refactor to virtua."]
|
||||
},
|
||||
"date": "2025-11-16",
|
||||
"version": "2.0.0-next.67"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"features": ["Support to collapse message."]
|
||||
},
|
||||
"date": "2025-11-16",
|
||||
"version": "2.0.0-next.66"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"improvements": ["Update i18n."]
|
||||
},
|
||||
"date": "2025-11-16",
|
||||
"version": "2.0.0-next.65"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"improvements": ["Refactor package types."]
|
||||
},
|
||||
"date": "2025-11-15",
|
||||
"version": "2.0.0-next.64"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"features": ["Show orphaned tool message and support delete tool message."]
|
||||
},
|
||||
"date": "2025-11-15",
|
||||
"version": "2.0.0-next.63"
|
||||
},
|
||||
{
|
||||
"children": {},
|
||||
"date": "2025-11-15",
|
||||
"version": "2.0.0-next.62"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"improvements": ["Update i18n."]
|
||||
|
||||
+2
-2
@@ -17,8 +17,8 @@
|
||||
"playwright": "^1.56.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^22.10.5",
|
||||
"@types/node": "^22.19.1",
|
||||
"tsx": "^4.20.6",
|
||||
"typescript": "^5.7.3"
|
||||
"typescript": "^5.9.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "المساعدون المتاحون",
|
||||
"backToBottom": "العودة إلى الأسفل",
|
||||
"chatList": {
|
||||
"expandMessage": "عرض الرسائل",
|
||||
"longMessageDetail": "عرض التفاصيل"
|
||||
},
|
||||
"clearCurrentMessages": "مسح رسائل الجلسة الحالية",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "الإشارة إلى الأعضاء"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "إخفاء الرسائل",
|
||||
"continueGeneration": "متابعة التوليد",
|
||||
"delAndRegenerate": "حذف وإعادة الإنشاء",
|
||||
"deleteDisabledByThreads": "يوجد موضوعات فرعية، لا يمكن الحذف",
|
||||
"expand": "عرض الرسائل",
|
||||
"regenerate": "إعادة الإنشاء"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "عرض قائمة المعلمات",
|
||||
"delete": "حذف استدعاء الأداة",
|
||||
"orphanedToolCall": "قد تكون رسالة استدعاء الأداة هذه معزولة بسبب ظروف غير طبيعية، مما قد يؤثر على تنفيذ الوكيل بشكل صحيح. يُرجى إزالتها.",
|
||||
"pluginRender": "عرض واجهة الإضافة"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "تحرير الملف",
|
||||
"getCommandOutput": "الحصول على مخرجات الأوامر",
|
||||
"globLocalFiles": "البحث عن الملفات المطابقة",
|
||||
"grepContent": "البحث في المحتوى",
|
||||
"killCommand": "إيقاف تنفيذ الأمر",
|
||||
"listLocalFiles": "عرض قائمة الملفات",
|
||||
"moveLocalFiles": "نقل الملفات",
|
||||
"readLocalFile": "قراءة محتوى الملف",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Налични асистенти",
|
||||
"backToBottom": "Върни се в началото",
|
||||
"chatList": {
|
||||
"expandMessage": "Разгъни съобщението",
|
||||
"longMessageDetail": "Вижте детайлите"
|
||||
},
|
||||
"clearCurrentMessages": "Изчисти съобщенията от текущата сесия",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Споменаване на членове"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Скрий съобщението",
|
||||
"continueGeneration": "Продължи генерирането",
|
||||
"delAndRegenerate": "Изтрий и прегенерирай",
|
||||
"deleteDisabledByThreads": "Съществуват подтеми, не можете да изтриете.",
|
||||
"expand": "Разгъни съобщението",
|
||||
"regenerate": "Прегенерирай"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "Преглед на списъка с параметри",
|
||||
"delete": "Изтриване на извикване на инструмент",
|
||||
"orphanedToolCall": "Това извикване на инструмент може да е станало изолирано поради необичайни причини, което може да повлияе на нормалното изпълнение на агента. Моля, премахнете го.",
|
||||
"pluginRender": "Преглед на интерфейса на плъгина"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "Редактиране на файл",
|
||||
"getCommandOutput": "Получаване на изход от командата",
|
||||
"globLocalFiles": "Търсене на съвпадащи файлове",
|
||||
"grepContent": "Търсене на съдържание",
|
||||
"killCommand": "Прекратяване на изпълнението на командата",
|
||||
"listLocalFiles": "Преглед на списък с файлове",
|
||||
"moveLocalFiles": "Преместване на файлове",
|
||||
"readLocalFile": "Четене на съдържание на файл",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Verfügbare Assistenten",
|
||||
"backToBottom": "Zurück zum Ende",
|
||||
"chatList": {
|
||||
"expandMessage": "Nachricht anzeigen",
|
||||
"longMessageDetail": "Details anzeigen"
|
||||
},
|
||||
"clearCurrentMessages": "Aktuelle Nachrichten löschen",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Mitglieder erwähnen"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Nachricht ausblenden",
|
||||
"continueGeneration": "Generierung fortsetzen",
|
||||
"delAndRegenerate": "Löschen und neu generieren",
|
||||
"deleteDisabledByThreads": "Es gibt Unterthemen, die Löschung ist nicht möglich.",
|
||||
"expand": "Nachricht anzeigen",
|
||||
"regenerate": "Neu generieren"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "Parameterliste anzeigen",
|
||||
"delete": "Werkzeugaufruf löschen",
|
||||
"orphanedToolCall": "Dieser Werkzeugaufruf könnte aufgrund eines Fehlers verwaist sein, was den normalen Ablauf des Agenten beeinträchtigen kann. Bitte entfernen Sie ihn.",
|
||||
"pluginRender": "Plugin-Oberfläche anzeigen"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "Datei bearbeiten",
|
||||
"getCommandOutput": "Codeausgabe abrufen",
|
||||
"globLocalFiles": "Dateien durchsuchen",
|
||||
"grepContent": "Inhalt durchsuchen",
|
||||
"killCommand": "Codeausführung beenden",
|
||||
"listLocalFiles": "Dateiliste anzeigen",
|
||||
"moveLocalFiles": "Dateien verschieben",
|
||||
"readLocalFile": "Dateiinhalt lesen",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Available assistants",
|
||||
"backToBottom": "Back to bottom",
|
||||
"chatList": {
|
||||
"expandMessage": "Expand Message",
|
||||
"longMessageDetail": "View Details"
|
||||
},
|
||||
"clearCurrentMessages": "Clear current session messages",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Mention Members"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Collapse Message",
|
||||
"continueGeneration": "Continue Generating",
|
||||
"delAndRegenerate": "Delete and Regenerate",
|
||||
"deleteDisabledByThreads": "There are subtopics, deletion is not allowed",
|
||||
"expand": "Expand Message",
|
||||
"regenerate": "Regenerate"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "View Argument List",
|
||||
"delete": "Delete Tool Call",
|
||||
"orphanedToolCall": "This tool call message may have become orphaned due to an unexpected issue, which could affect the Agent's normal operation. Please remove it.",
|
||||
"pluginRender": "View Plugin Interface"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,13 +253,18 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"getCommandOutput": "Get Code Output",
|
||||
"globLocalFiles": "Match Files",
|
||||
"grepContent": "Search Content",
|
||||
"killCommand": "Kill Code Execution",
|
||||
"listLocalFiles": "View File List",
|
||||
"moveLocalFiles": "Move Files",
|
||||
"readLocalFile": "Read File Content",
|
||||
"renameLocalFile": "Rename",
|
||||
"runCommand": "Run Code",
|
||||
"searchLocalFiles": "Search Files",
|
||||
"writeLocalFile": "Write File"
|
||||
"writeLocalFile": "Write File",
|
||||
"editLocalFile": "Edit File"
|
||||
},
|
||||
"title": "Local System"
|
||||
},
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Agentes disponibles",
|
||||
"backToBottom": "Volver al fondo",
|
||||
"chatList": {
|
||||
"expandMessage": "Expandir mensaje",
|
||||
"longMessageDetail": "Ver detalles"
|
||||
},
|
||||
"clearCurrentMessages": "Borrar mensajes actuales",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Mencionar miembros"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Ocultar mensaje",
|
||||
"continueGeneration": "Continuar generando",
|
||||
"delAndRegenerate": "Eliminar y Regenerar",
|
||||
"deleteDisabledByThreads": "Existen subtemas, no se puede eliminar",
|
||||
"expand": "Expandir mensaje",
|
||||
"regenerate": "Regenerar"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "Ver lista de parámetros",
|
||||
"delete": "Eliminar llamada a la herramienta",
|
||||
"orphanedToolCall": "Este mensaje de llamada a la herramienta podría haberse quedado huérfano debido a circunstancias excepcionales, lo que puede afectar el funcionamiento normal del agente. Por favor, elimínelo.",
|
||||
"pluginRender": "Ver interfaz del plugin"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "Editar archivo",
|
||||
"getCommandOutput": "Obtener salida del código",
|
||||
"globLocalFiles": "Buscar archivos coincidentes",
|
||||
"grepContent": "Buscar contenido",
|
||||
"killCommand": "Detener ejecución del código",
|
||||
"listLocalFiles": "Ver lista de archivos",
|
||||
"moveLocalFiles": "Mover archivos",
|
||||
"readLocalFile": "Leer contenido del archivo",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "دستیاران در دسترس",
|
||||
"backToBottom": "بازگشت به پایین",
|
||||
"chatList": {
|
||||
"expandMessage": "گسترش پیام",
|
||||
"longMessageDetail": "مشاهده جزئیات"
|
||||
},
|
||||
"clearCurrentMessages": "پاک کردن پیامهای جلسه فعلی",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "ذکر اعضا"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "بستن پیام",
|
||||
"continueGeneration": "ادامه تولید",
|
||||
"delAndRegenerate": "حذف و بازتولید",
|
||||
"deleteDisabledByThreads": "زیرموضوع وجود دارد، نمیتوان حذف کرد",
|
||||
"expand": "گسترش پیام",
|
||||
"regenerate": "بازتولید"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "مشاهده لیست پارامترها",
|
||||
"delete": "حذف فراخوانی ابزار",
|
||||
"orphanedToolCall": "این پیام فراخوانی ابزار ممکن است به دلایل غیرعادی به یک پیام یتیم تبدیل شده باشد که میتواند عملکرد عادی عامل را مختل کند. لطفاً آن را حذف کنید.",
|
||||
"pluginRender": "مشاهده رابط افزونه"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "ویرایش فایل",
|
||||
"getCommandOutput": "دریافت خروجی کد",
|
||||
"globLocalFiles": "جستجوی فایلها با الگو",
|
||||
"grepContent": "جستجوی محتوا",
|
||||
"killCommand": "متوقف کردن اجرای کد",
|
||||
"listLocalFiles": "مشاهده لیست فایلها",
|
||||
"moveLocalFiles": "جابجایی فایلها",
|
||||
"readLocalFile": "خواندن محتوای فایل",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Assistants disponibles",
|
||||
"backToBottom": "Retour en bas",
|
||||
"chatList": {
|
||||
"expandMessage": "Développer le message",
|
||||
"longMessageDetail": "Voir les détails"
|
||||
},
|
||||
"clearCurrentMessages": "Effacer les messages actuels",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Mentionner un membre"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Réduire le message",
|
||||
"continueGeneration": "Continuer la génération",
|
||||
"delAndRegenerate": "Supprimer et régénérer",
|
||||
"deleteDisabledByThreads": "Il existe des sous-sujets, la suppression n'est pas possible.",
|
||||
"expand": "Développer le message",
|
||||
"regenerate": "Régénérer"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "Voir la liste des paramètres",
|
||||
"delete": "Supprimer l'appel d'outil",
|
||||
"orphanedToolCall": "Cet appel d'outil est peut-être devenu orphelin en raison d'une erreur, ce qui pourrait perturber le bon fonctionnement de l'agent. Veuillez le supprimer.",
|
||||
"pluginRender": "Voir l'interface du plugin"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "Modifier le fichier",
|
||||
"getCommandOutput": "Obtenir la sortie du code",
|
||||
"globLocalFiles": "Rechercher des fichiers correspondants",
|
||||
"grepContent": "Rechercher dans le contenu",
|
||||
"killCommand": "Arrêter l'exécution du code",
|
||||
"listLocalFiles": "Voir la liste des fichiers",
|
||||
"moveLocalFiles": "Déplacer les fichiers",
|
||||
"readLocalFile": "Lire le contenu du fichier",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Assistenti disponibili",
|
||||
"backToBottom": "Torna in fondo",
|
||||
"chatList": {
|
||||
"expandMessage": "Espandi messaggio",
|
||||
"longMessageDetail": "Visualizza dettagli"
|
||||
},
|
||||
"clearCurrentMessages": "Cancella messaggi attuali",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Menziona membri"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Comprimi messaggio",
|
||||
"continueGeneration": "Continua a generare",
|
||||
"delAndRegenerate": "Elimina e rigenera",
|
||||
"deleteDisabledByThreads": "Esistono sottoargomenti, non è possibile eliminare",
|
||||
"expand": "Espandi messaggio",
|
||||
"regenerate": "Rigenera"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "Visualizza lista parametri",
|
||||
"delete": "Elimina chiamata allo strumento",
|
||||
"orphanedToolCall": "Questo messaggio di chiamata allo strumento potrebbe essere diventato orfano a causa di un'anomalia, il che potrebbe compromettere il corretto funzionamento dell'agente. Si consiglia di rimuoverlo.",
|
||||
"pluginRender": "Visualizza interfaccia plugin"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "Modifica file",
|
||||
"getCommandOutput": "Ottieni output del codice",
|
||||
"globLocalFiles": "Cerca file corrispondenti",
|
||||
"grepContent": "Cerca contenuto",
|
||||
"killCommand": "Termina esecuzione del codice",
|
||||
"listLocalFiles": "Visualizza lista file",
|
||||
"moveLocalFiles": "Sposta file",
|
||||
"readLocalFile": "Leggi contenuto file",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "利用可能なアシスタント",
|
||||
"backToBottom": "現在に戻る",
|
||||
"chatList": {
|
||||
"expandMessage": "メッセージを展開",
|
||||
"longMessageDetail": "詳細を見る"
|
||||
},
|
||||
"clearCurrentMessages": "現在の会話をクリア",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "メンバーをメンション"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "メッセージを折りたたむ",
|
||||
"continueGeneration": "生成を続ける",
|
||||
"delAndRegenerate": "削除して再生成",
|
||||
"deleteDisabledByThreads": "サブトピックが存在するため、削除できません。",
|
||||
"expand": "メッセージを展開",
|
||||
"regenerate": "再生成"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "パラメータリストを表示",
|
||||
"delete": "ツール呼び出しを削除",
|
||||
"orphanedToolCall": "このツール呼び出しメッセージは、異常な理由により孤立している可能性があり、エージェントの正常な実行に影響を与えることがあります。削除してください。",
|
||||
"pluginRender": "プラグイン画面を表示"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "ファイルを編集",
|
||||
"getCommandOutput": "コード出力を取得",
|
||||
"globLocalFiles": "ファイルを検索",
|
||||
"grepContent": "内容を検索",
|
||||
"killCommand": "コードの実行を停止",
|
||||
"listLocalFiles": "ファイル一覧を表示",
|
||||
"moveLocalFiles": "ファイルを移動",
|
||||
"readLocalFile": "ファイル内容を読み込み",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "사용 가능한 도우미",
|
||||
"backToBottom": "하단으로 이동",
|
||||
"chatList": {
|
||||
"expandMessage": "메시지 펼치기",
|
||||
"longMessageDetail": "자세히 보기"
|
||||
},
|
||||
"clearCurrentMessages": "현재 대화 지우기",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "멤버 언급"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "메시지 접기",
|
||||
"continueGeneration": "계속 생성하기",
|
||||
"delAndRegenerate": "삭제하고 다시 생성",
|
||||
"deleteDisabledByThreads": "하위 주제가 존재하여 삭제할 수 없습니다.",
|
||||
"expand": "메시지 펼치기",
|
||||
"regenerate": "다시 생성"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "인자 목록 보기",
|
||||
"delete": "도구 호출 삭제",
|
||||
"orphanedToolCall": "이 도구 호출 메시지는 예기치 않은 이유로 고립되었을 수 있으며, 이는 에이전트의 정상적인 실행에 영향을 줄 수 있습니다. 제거해 주세요.",
|
||||
"pluginRender": "플러그인 인터페이스 보기"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "파일 편집",
|
||||
"getCommandOutput": "코드 출력 가져오기",
|
||||
"globLocalFiles": "파일 검색",
|
||||
"grepContent": "내용 검색",
|
||||
"killCommand": "코드 실행 중지",
|
||||
"listLocalFiles": "파일 목록 보기",
|
||||
"moveLocalFiles": "파일 이동",
|
||||
"readLocalFile": "파일 내용 읽기",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Beschikbare assistenten",
|
||||
"backToBottom": "Terug naar onderen",
|
||||
"chatList": {
|
||||
"expandMessage": "Bericht uitvouwen",
|
||||
"longMessageDetail": "Bekijk details"
|
||||
},
|
||||
"clearCurrentMessages": "Huidige berichten wissen",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Leden vermelden"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Bericht samenvouwen",
|
||||
"continueGeneration": "Doorgaan met genereren",
|
||||
"delAndRegenerate": "Verwijderen en opnieuw genereren",
|
||||
"deleteDisabledByThreads": "Er zijn subonderwerpen, verwijderen is niet mogelijk.",
|
||||
"expand": "Bericht uitvouwen",
|
||||
"regenerate": "Opnieuw genereren"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "Bekijk parameterlijst",
|
||||
"delete": "Hulpoproep verwijderen",
|
||||
"orphanedToolCall": "Dit hulpoproepbericht is mogelijk geïsoleerd geraakt door een onverwachte fout, wat de normale werking van de agent kan beïnvloeden. Verwijder het alstublieft.",
|
||||
"pluginRender": "Bekijk plugin-interface"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "Bestand bewerken",
|
||||
"getCommandOutput": "Code-uitvoer ophalen",
|
||||
"globLocalFiles": "Bestanden zoeken",
|
||||
"grepContent": "Inhoud doorzoeken",
|
||||
"killCommand": "Code-uitvoering beëindigen",
|
||||
"listLocalFiles": "Bestandslijst bekijken",
|
||||
"moveLocalFiles": "Bestanden verplaatsen",
|
||||
"readLocalFile": "Bestandsinhoud lezen",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Dostępni asystenci",
|
||||
"backToBottom": "Przewiń na dół",
|
||||
"chatList": {
|
||||
"expandMessage": "Rozwiń wiadomość",
|
||||
"longMessageDetail": "Zobacz szczegóły"
|
||||
},
|
||||
"clearCurrentMessages": "Wyczyść bieżącą rozmowę",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Wzmianka o członkach"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Zwiń wiadomość",
|
||||
"continueGeneration": "Kontynuuj generowanie",
|
||||
"delAndRegenerate": "Usuń i wygeneruj ponownie",
|
||||
"deleteDisabledByThreads": "Istnieją podwątki, nie można usunąć",
|
||||
"expand": "Rozwiń wiadomość",
|
||||
"regenerate": "Wygeneruj ponownie"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "Zobacz listę argumentów",
|
||||
"delete": "Usuń wywołanie narzędzia",
|
||||
"orphanedToolCall": "To wywołanie narzędzia mogło zostać osierocone z powodu nieoczekiwanych okoliczności, co może zakłócić prawidłowe działanie Agenta. Proszę je usunąć.",
|
||||
"pluginRender": "Zobacz interfejs wtyczki"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "Edytuj plik",
|
||||
"getCommandOutput": "Pobierz wynik polecenia",
|
||||
"globLocalFiles": "Wyszukaj pasujące pliki",
|
||||
"grepContent": "Przeszukaj zawartość",
|
||||
"killCommand": "Zatrzymaj wykonywanie polecenia",
|
||||
"listLocalFiles": "Wyświetl listę plików",
|
||||
"moveLocalFiles": "Przenieś pliki",
|
||||
"readLocalFile": "Odczytaj zawartość pliku",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Assistentes disponíveis",
|
||||
"backToBottom": "Voltar para o início",
|
||||
"chatList": {
|
||||
"expandMessage": "Expandir mensagem",
|
||||
"longMessageDetail": "Ver detalhes"
|
||||
},
|
||||
"clearCurrentMessages": "Limpar mensagens atuais",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Mencionar membros"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Recolher mensagem",
|
||||
"continueGeneration": "Continuar gerando",
|
||||
"delAndRegenerate": "Excluir e Regenerar",
|
||||
"deleteDisabledByThreads": "Existem subtópicos, não é possível deletar.",
|
||||
"expand": "Expandir mensagem",
|
||||
"regenerate": "Regenerar"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "Ver lista de parâmetros",
|
||||
"delete": "Excluir chamada de ferramenta",
|
||||
"orphanedToolCall": "Esta chamada de ferramenta pode ter se tornado uma mensagem órfã devido a um erro, o que pode afetar a execução normal do Agente. Por favor, remova-a.",
|
||||
"pluginRender": "Ver interface do plugin"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "Editar arquivo",
|
||||
"getCommandOutput": "Obter saída do código",
|
||||
"globLocalFiles": "Buscar arquivos correspondentes",
|
||||
"grepContent": "Procurar conteúdo",
|
||||
"killCommand": "Encerrar execução do código",
|
||||
"listLocalFiles": "Ver lista de arquivos",
|
||||
"moveLocalFiles": "Mover arquivos",
|
||||
"readLocalFile": "Ler conteúdo do arquivo",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Доступные помощники",
|
||||
"backToBottom": "Вернуться вниз",
|
||||
"chatList": {
|
||||
"expandMessage": "Развернуть сообщение",
|
||||
"longMessageDetail": "Посмотреть детали"
|
||||
},
|
||||
"clearCurrentMessages": "Очистить текущий разговор",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Упомянуть участника"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Свернуть сообщение",
|
||||
"continueGeneration": "Продолжить генерацию",
|
||||
"delAndRegenerate": "Удалить и пересоздать",
|
||||
"deleteDisabledByThreads": "Существуют подтемы, удаление невозможно",
|
||||
"expand": "Развернуть сообщение",
|
||||
"regenerate": "Пересоздать"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "Просмотр списка параметров",
|
||||
"delete": "Удалить вызов инструмента",
|
||||
"orphanedToolCall": "Этот вызов инструмента, возможно, стал изолированным из-за непредвиденных обстоятельств, что может повлиять на корректную работу агента. Пожалуйста, удалите его.",
|
||||
"pluginRender": "Просмотр интерфейса плагина"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "Редактировать файл",
|
||||
"getCommandOutput": "Получить вывод команды",
|
||||
"globLocalFiles": "Поиск файлов по шаблону",
|
||||
"grepContent": "Поиск по содержимому",
|
||||
"killCommand": "Прервать выполнение команды",
|
||||
"listLocalFiles": "Просмотр списка файлов",
|
||||
"moveLocalFiles": "Перемещение файлов",
|
||||
"readLocalFile": "Чтение содержимого файла",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Kullanılabilir asistanlar",
|
||||
"backToBottom": "En alta git",
|
||||
"chatList": {
|
||||
"expandMessage": "Mesajı Genişlet",
|
||||
"longMessageDetail": "Detayları görüntüle"
|
||||
},
|
||||
"clearCurrentMessages": "Mevcut oturum mesajlarını temizle",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Üyeleri Etiketle"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Mesajı Daralt",
|
||||
"continueGeneration": "Oluşturmaya devam et",
|
||||
"delAndRegenerate": "Sil ve Yeniden Oluştur",
|
||||
"deleteDisabledByThreads": "Alt konular mevcut, silinemez",
|
||||
"expand": "Mesajı Genişlet",
|
||||
"regenerate": "Yeniden Oluştur"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "Parametre listesini görüntüle",
|
||||
"delete": "Araç çağrısını sil",
|
||||
"orphanedToolCall": "Bu araç çağrısı mesajı, beklenmeyen bir nedenle yetim kalmış olabilir ve bu durum Ajansın düzgün çalışmasını etkileyebilir. Lütfen bunu kaldırın.",
|
||||
"pluginRender": "Eklenti arayüzünü görüntüle"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "Dosyayı Düzenle",
|
||||
"getCommandOutput": "Komut Çıktısını Al",
|
||||
"globLocalFiles": "Dosyaları Ara",
|
||||
"grepContent": "İçeriği Ara",
|
||||
"killCommand": "Komut Yürütmesini Durdur",
|
||||
"listLocalFiles": "Dosya listesini görüntüle",
|
||||
"moveLocalFiles": "Dosya taşı",
|
||||
"readLocalFile": "Dosya içeriğini oku",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "Trợ lý có sẵn",
|
||||
"backToBottom": "Quay về dưới cùng",
|
||||
"chatList": {
|
||||
"expandMessage": "Mở rộng tin nhắn",
|
||||
"longMessageDetail": "Xem chi tiết"
|
||||
},
|
||||
"clearCurrentMessages": "Xóa tin nhắn hiện tại",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "Nhắc đến thành viên"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "Thu gọn tin nhắn",
|
||||
"continueGeneration": "Tiếp tục tạo",
|
||||
"delAndRegenerate": "Xóa và tạo lại",
|
||||
"deleteDisabledByThreads": "Có chủ đề con, không thể xóa",
|
||||
"expand": "Mở rộng tin nhắn",
|
||||
"regenerate": "Tạo lại"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "Xem danh sách tham số",
|
||||
"delete": "Xoá lệnh gọi công cụ",
|
||||
"orphanedToolCall": "Lệnh gọi công cụ này có thể đã trở thành một tin nhắn bị cô lập do sự cố bất thường, điều này có thể ảnh hưởng đến quá trình thực thi bình thường của Tác nhân. Vui lòng xoá nó.",
|
||||
"pluginRender": "Xem giao diện plugin"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "Chỉnh sửa tệp",
|
||||
"getCommandOutput": "Lấy đầu ra mã lệnh",
|
||||
"globLocalFiles": "Tìm kiếm tệp",
|
||||
"grepContent": "Tìm kiếm nội dung",
|
||||
"killCommand": "Dừng thực thi mã",
|
||||
"listLocalFiles": "Xem danh sách tệp",
|
||||
"moveLocalFiles": "Di chuyển tệp",
|
||||
"readLocalFile": "Đọc nội dung tệp",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "可用助手",
|
||||
"backToBottom": "跳转至当前",
|
||||
"chatList": {
|
||||
"expandMessage": "展开消息",
|
||||
"longMessageDetail": "查看详情"
|
||||
},
|
||||
"clearCurrentMessages": "清空当前会话消息",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "提及成员"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "收起消息",
|
||||
"continueGeneration": "继续生成",
|
||||
"delAndRegenerate": "删除并重新生成",
|
||||
"deleteDisabledByThreads": "存在子话题,不能删除",
|
||||
"expand": "展开消息",
|
||||
"regenerate": "重新生成"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "查看参数列表",
|
||||
"delete": "删除工具调用",
|
||||
"orphanedToolCall": "该工具调用消息可能因异常原因成为孤立消息,这会影响 Agent 的正常执行,请将其移除",
|
||||
"pluginRender": "查看插件界面"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "编辑文件",
|
||||
"getCommandOutput": "获取代码输出",
|
||||
"globLocalFiles": "匹配搜索文件",
|
||||
"grepContent": "搜索内容",
|
||||
"killCommand": "终止代码执行",
|
||||
"listLocalFiles": "查看文件列表",
|
||||
"moveLocalFiles": "移动文件",
|
||||
"readLocalFile": "读取文件内容",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"availableAgents": "可用助理",
|
||||
"backToBottom": "返回底部",
|
||||
"chatList": {
|
||||
"expandMessage": "展開訊息",
|
||||
"longMessageDetail": "查看詳情"
|
||||
},
|
||||
"clearCurrentMessages": "清空當前對話",
|
||||
@@ -173,9 +174,11 @@
|
||||
"title": "提及成員"
|
||||
},
|
||||
"messageAction": {
|
||||
"collapse": "收起訊息",
|
||||
"continueGeneration": "繼續生成",
|
||||
"delAndRegenerate": "刪除並重新生成",
|
||||
"deleteDisabledByThreads": "存在子話題,無法刪除",
|
||||
"expand": "展開訊息",
|
||||
"regenerate": "重新生成"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -236,6 +236,8 @@
|
||||
},
|
||||
"inspector": {
|
||||
"args": "查看參數列表",
|
||||
"delete": "刪除工具調用",
|
||||
"orphanedToolCall": "該工具調用訊息可能因異常原因成為孤立訊息,這可能會影響 Agent 的正常執行,請將其移除",
|
||||
"pluginRender": "查看插件介面"
|
||||
},
|
||||
"list": {
|
||||
@@ -251,6 +253,11 @@
|
||||
},
|
||||
"localSystem": {
|
||||
"apiName": {
|
||||
"editLocalFile": "編輯檔案",
|
||||
"getCommandOutput": "取得程式輸出",
|
||||
"globLocalFiles": "匹配搜尋檔案",
|
||||
"grepContent": "搜尋內容",
|
||||
"killCommand": "終止程式執行",
|
||||
"listLocalFiles": "查看檔案列表",
|
||||
"moveLocalFiles": "移動檔案",
|
||||
"readLocalFile": "讀取檔案內容",
|
||||
|
||||
+5
-5
@@ -249,11 +249,11 @@ const nextConfig: NextConfig = {
|
||||
// permanent: true,
|
||||
// source: '/settings',
|
||||
// },
|
||||
{
|
||||
destination: '/chat',
|
||||
permanent: false,
|
||||
source: '/',
|
||||
},
|
||||
// {
|
||||
// destination: '/chat',
|
||||
// permanent: false,
|
||||
// source: '/',
|
||||
// },
|
||||
{
|
||||
destination: '/chat',
|
||||
permanent: true,
|
||||
|
||||
+23
-29
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@lobehub/lobehub",
|
||||
"version": "2.0.0-next.62",
|
||||
"version": "2.0.0-next.69",
|
||||
"description": "LobeHub - an open-source,comprehensive AI Agent framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
|
||||
"keywords": [
|
||||
"framework",
|
||||
@@ -75,7 +75,6 @@
|
||||
"release": "semantic-release",
|
||||
"self-hosting:docker": "docker build -t lobehub:local .",
|
||||
"self-hosting:docker-cn": "docker build -t lobehub-local --build-arg USE_CN_MIRROR=true .",
|
||||
"self-hosting:docker-cn@lite": "docker build -t lobehub-lite-local -f Dockerfile.lite --build-arg USE_CN_MIRROR=true .",
|
||||
"start": "next start -p 3210",
|
||||
"stylelint": "stylelint \"src/**/*.{js,jsx,ts,tsx}\" --fix",
|
||||
"test": "npm run test-app && npm run test-server",
|
||||
@@ -123,30 +122,27 @@
|
||||
"eslint --fix"
|
||||
]
|
||||
},
|
||||
"overrides": {
|
||||
"eta": "4.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ant-design/icons": "^5.6.1",
|
||||
"@ant-design/pro-components": "^2.8.10",
|
||||
"@anthropic-ai/sdk": "^0.67.1",
|
||||
"@auth/core": "^0.40.0",
|
||||
"@aws-sdk/client-s3": "~3.893.0",
|
||||
"@aws-sdk/s3-request-presigner": "~3.893.0",
|
||||
"@aws-sdk/client-s3": "~3.932.0",
|
||||
"@aws-sdk/s3-request-presigner": "~3.932.0",
|
||||
"@azure-rest/ai-inference": "1.0.0-beta.5",
|
||||
"@azure/core-auth": "^1.10.1",
|
||||
"@cfworker/json-schema": "^4.1.1",
|
||||
"@clerk/localizations": "^3.27.2",
|
||||
"@clerk/nextjs": "^6.35.0",
|
||||
"@clerk/themes": "^2.4.35",
|
||||
"@clerk/localizations": "^3.28.0",
|
||||
"@clerk/nextjs": "^6.35.1",
|
||||
"@clerk/themes": "^2.4.36",
|
||||
"@codesandbox/sandpack-react": "^2.20.0",
|
||||
"@cyntler/react-doc-viewer": "^1.17.1",
|
||||
"@electric-sql/pglite": "0.2.17",
|
||||
"@emotion/react": "^11.14.0",
|
||||
"@fal-ai/client": "^1.7.2",
|
||||
"@formkit/auto-animate": "^0.9.0",
|
||||
"@google/genai": "^1.29.0",
|
||||
"@huggingface/inference": "^4.13.2",
|
||||
"@google/genai": "^1.29.1",
|
||||
"@huggingface/inference": "^4.13.3",
|
||||
"@icons-pack/react-simple-icons": "^13.8.0",
|
||||
"@khmyznikov/pwa-install": "0.3.9",
|
||||
"@langchain/community": "^0.3.57",
|
||||
@@ -169,14 +165,14 @@
|
||||
"@lobehub/charts": "^2.1.2",
|
||||
"@lobehub/chat-plugin-sdk": "^1.32.4",
|
||||
"@lobehub/chat-plugins-gateway": "^1.9.0",
|
||||
"@lobehub/editor": "^1.22.0",
|
||||
"@lobehub/editor": "^1.23.1",
|
||||
"@lobehub/icons": "^2.43.1",
|
||||
"@lobehub/market-sdk": "^0.23.0",
|
||||
"@lobehub/tts": "^2.0.1",
|
||||
"@lobehub/ui": "^2.13.8",
|
||||
"@lobehub/ui": "^2.16.2",
|
||||
"@modelcontextprotocol/sdk": "^1.22.0",
|
||||
"@neondatabase/serverless": "^1.0.2",
|
||||
"@next/third-parties": "^16.0.1",
|
||||
"@next/third-parties": "^16.0.3",
|
||||
"@opentelemetry/exporter-jaeger": "^2.2.0",
|
||||
"@opentelemetry/winston-transport": "^0.18.0",
|
||||
"@react-pdf/renderer": "^4.3.1",
|
||||
@@ -184,14 +180,14 @@
|
||||
"@saintno/comfyui-sdk": "^0.2.49",
|
||||
"@serwist/next": "^9.2.1",
|
||||
"@t3-oss/env-nextjs": "^0.13.8",
|
||||
"@tanstack/react-query": "^5.90.7",
|
||||
"@tanstack/react-query": "^5.90.10",
|
||||
"@trpc/client": "^11.7.1",
|
||||
"@trpc/next": "^11.7.1",
|
||||
"@trpc/react-query": "^11.7.1",
|
||||
"@trpc/server": "^11.7.1",
|
||||
"@vercel/analytics": "^1.5.0",
|
||||
"@vercel/edge-config": "^1.4.3",
|
||||
"@vercel/functions": "^3.3.0",
|
||||
"@vercel/functions": "^3.3.2",
|
||||
"@vercel/speed-insights": "^1.2.0",
|
||||
"@virtuoso.dev/masonry": "^1.3.5",
|
||||
"@xterm/xterm": "^5.5.0",
|
||||
@@ -226,7 +222,7 @@
|
||||
"langfuse": "^3.38.6",
|
||||
"langfuse-core": "^3.38.6",
|
||||
"lodash-es": "^4.17.21",
|
||||
"lucide-react": "^0.548.0",
|
||||
"lucide-react": "^0.553.0",
|
||||
"mammoth": "^1.11.0",
|
||||
"markdown-to-txt": "^2.0.1",
|
||||
"marked": "^16.4.2",
|
||||
@@ -234,7 +230,7 @@
|
||||
"model-bank": "workspace:*",
|
||||
"modern-screenshot": "^4.6.6",
|
||||
"nanoid": "^5.1.6",
|
||||
"next": "^16.0.1",
|
||||
"next": "^16.0.3",
|
||||
"next-auth": "5.0.0-beta.30",
|
||||
"next-mdx-remote": "^5.0.0",
|
||||
"nextjs-toploader": "^3.9.17",
|
||||
@@ -243,7 +239,7 @@
|
||||
"nuqs": "^2.7.3",
|
||||
"officeparser": "5.1.1",
|
||||
"oidc-provider": "^9.5.2",
|
||||
"ollama": "^0.6.2",
|
||||
"ollama": "^0.6.3",
|
||||
"openai": "^4.104.0",
|
||||
"openapi-fetch": "^0.14.1",
|
||||
"partial-json": "^0.1.7",
|
||||
@@ -266,19 +262,19 @@
|
||||
"react-fast-marquee": "^1.6.5",
|
||||
"react-hotkeys-hook": "^5.2.1",
|
||||
"react-i18next": "^15.7.4",
|
||||
"react-layout-kit": "^2.0.0",
|
||||
"react-layout-kit": "^2.0.1",
|
||||
"react-lazy-load": "^4.0.1",
|
||||
"react-pdf": "^9.2.1",
|
||||
"react-responsive": "^10.0.1",
|
||||
"react-rnd": "^10.5.2",
|
||||
"react-router-dom": "^7.9.5",
|
||||
"react-router-dom": "^7.9.6",
|
||||
"react-scan": "^0.4.3",
|
||||
"react-virtuoso": "^4.14.1",
|
||||
"react-wrap-balancer": "^1.1.1",
|
||||
"remark": "^15.0.1",
|
||||
"remark-gfm": "^4.0.1",
|
||||
"remark-html": "^16.0.1",
|
||||
"resolve-accept-language": "^3.1.13",
|
||||
"resolve-accept-language": "^3.1.14",
|
||||
"rtl-detect": "^1.1.2",
|
||||
"semver": "^7.7.3",
|
||||
"sharp": "^0.34.5",
|
||||
@@ -296,6 +292,7 @@
|
||||
"url-join": "^5.0.0",
|
||||
"use-merge-value": "^1.2.0",
|
||||
"uuid": "^11.1.0",
|
||||
"virtua": "^0.47.0",
|
||||
"word-extractor": "^1.0.4",
|
||||
"ws": "^8.18.3",
|
||||
"yaml": "^2.8.1",
|
||||
@@ -312,7 +309,7 @@
|
||||
"@lobehub/lint": "^1.26.2",
|
||||
"@lobehub/market-types": "^1.11.4",
|
||||
"@lobehub/seo-cli": "^1.7.0",
|
||||
"@next/bundle-analyzer": "^16.0.1",
|
||||
"@next/bundle-analyzer": "^16.0.3",
|
||||
"@next/eslint-plugin-next": "^15.5.6",
|
||||
"@peculiar/webcrypto": "^1.5.0",
|
||||
"@playwright/test": "^1.56.1",
|
||||
@@ -398,9 +395,6 @@
|
||||
"pnpm": {
|
||||
"onlyBuiltDependencies": [
|
||||
"@vercel/speed-insights"
|
||||
],
|
||||
"overrides": {
|
||||
"eta": "4.0.1"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,6 @@
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"openai": "^4.0.0"
|
||||
"openai": "^4.104.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/* eslint-disable sort-keys-fix/sort-keys-fix, typescript-sort-keys/interface */
|
||||
import { ChatToolPayload } from '@lobechat/types';
|
||||
|
||||
import type { AgentState, ToolsCalling } from './state';
|
||||
import { ChatToolPayload } from '@/types/message';
|
||||
|
||||
export interface AgentEventInit {
|
||||
type: 'init';
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"main": "./src/index.ts",
|
||||
"dependencies": {
|
||||
"model-bank": "workspace:*",
|
||||
"query-string": "^9.2.2",
|
||||
"query-string": "^9.3.1",
|
||||
"url-join": "^5.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,13 +4,8 @@ import { BRANDING_NAME, ORG_NAME } from './branding';
|
||||
|
||||
export const CURRENT_VERSION = pkg.version;
|
||||
|
||||
export const isServerMode = true;
|
||||
export const isUsePgliteDB = false;
|
||||
|
||||
export const isDesktop = process.env.NEXT_PUBLIC_IS_DESKTOP_APP === '1';
|
||||
|
||||
export const isDeprecatedEdition = false;
|
||||
|
||||
// @ts-ignore
|
||||
export const isCustomBranding = BRANDING_NAME !== 'LobeHub';
|
||||
// @ts-ignore
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
"@lobechat/prompts": "workspace:*",
|
||||
"@lobechat/types": "workspace:*",
|
||||
"@lobechat/utils": "workspace:*",
|
||||
"debug": "^4.3.4",
|
||||
"immer": "^10.0.3",
|
||||
"debug": "^4.4.3",
|
||||
"immer": "^10.2.0",
|
||||
"lodash-es": "^4.17.21",
|
||||
"ts-md5": "^2.0.1"
|
||||
},
|
||||
|
||||
@@ -1,17 +1,15 @@
|
||||
import type { Message, ParseResult } from '../../types';
|
||||
// Input fixtures
|
||||
import assistantChainWithFollowupInput from './inputs/assistant-chain-with-followup.json';
|
||||
import assistantWithToolsInput from './inputs/assistant-with-tools.json';
|
||||
import { assistantGroup as assistantGroupInputs } from './inputs/assistantGroup';
|
||||
import { branch as branchInputs } from './inputs/branch';
|
||||
import { compare as compareInputs } from './inputs/compare';
|
||||
import complexScenarioInput from './inputs/complex-scenario.json';
|
||||
import linearConversationInput from './inputs/linear-conversation.json';
|
||||
// Output fixtures
|
||||
import assistantChainWithFollowupOutput from './outputs/assistant-chain-with-followup.json';
|
||||
import assistantWithToolsOutput from './outputs/assistant-with-tools.json';
|
||||
import { assistantGroup as assistantGroupOutputs } from './outputs/assistantGroup';
|
||||
import { branch as branchOutputs } from './outputs/branch';
|
||||
import { compare as compareOutputs } from './outputs/compare';
|
||||
import complexScenarioOutput from './outputs/complex-scenario.json';
|
||||
import linearConversationOutput from './outputs/linear-conversation.json';
|
||||
|
||||
/**
|
||||
@@ -28,10 +26,9 @@ export interface SerializedParseResult {
|
||||
*/
|
||||
export const inputs = {
|
||||
assistantChainWithFollowup: assistantChainWithFollowupInput as Message[],
|
||||
assistantWithTools: assistantWithToolsInput as Message[],
|
||||
assistantGroup: assistantGroupInputs,
|
||||
branch: branchInputs,
|
||||
compare: compareInputs,
|
||||
complexScenario: complexScenarioInput as Message[],
|
||||
linearConversation: linearConversationInput as Message[],
|
||||
};
|
||||
|
||||
@@ -40,9 +37,8 @@ export const inputs = {
|
||||
*/
|
||||
export const outputs = {
|
||||
assistantChainWithFollowup: assistantChainWithFollowupOutput as unknown as SerializedParseResult,
|
||||
assistantWithTools: assistantWithToolsOutput as unknown as SerializedParseResult,
|
||||
assistantGroup: assistantGroupOutputs,
|
||||
branch: branchOutputs,
|
||||
compare: compareOutputs,
|
||||
complexScenario: complexScenarioOutput as unknown as SerializedParseResult,
|
||||
linearConversation: linearConversationOutput as unknown as SerializedParseResult,
|
||||
};
|
||||
|
||||
+2
-1
@@ -97,7 +97,8 @@
|
||||
"tps": 48,
|
||||
"ttft": 178,
|
||||
"duration": 875,
|
||||
"latency": 1053
|
||||
"latency": 1053,
|
||||
"collapsed": true
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -0,0 +1,8 @@
|
||||
import type { Message } from '../../../../types';
|
||||
import assistantWithTools from './assistant-with-tools.json';
|
||||
import toolsWithBranches from './tools-with-branches.json';
|
||||
|
||||
export const assistantGroup = {
|
||||
assistantWithTools: assistantWithTools as Message[],
|
||||
toolsWithBranches: toolsWithBranches as Message[],
|
||||
};
|
||||
@@ -1,14 +1,12 @@
|
||||
import type { Message } from '../../../types';
|
||||
import assistantWithTools from './assistant-with-tools.json';
|
||||
import { assistantGroup } from './assistantGroup';
|
||||
import { branch } from './branch';
|
||||
import { compare } from './compare';
|
||||
import complexScenario from './complex-scenario.json';
|
||||
import linearConversation from './linear-conversation.json';
|
||||
|
||||
export const inputs = {
|
||||
assistantWithTools: assistantWithTools as Message[],
|
||||
assistantGroup,
|
||||
branch,
|
||||
compare,
|
||||
complexScenario: complexScenario as Message[],
|
||||
linearConversation: linearConversation as Message[],
|
||||
};
|
||||
|
||||
+8
-8
@@ -9,18 +9,12 @@
|
||||
{
|
||||
"id": "msg-102",
|
||||
"type": "message",
|
||||
"tools": [
|
||||
"msg-103",
|
||||
"msg-104"
|
||||
]
|
||||
"tools": ["msg-103", "msg-104"]
|
||||
},
|
||||
{
|
||||
"id": "msg-105",
|
||||
"type": "message",
|
||||
"tools": [
|
||||
"msg-106",
|
||||
"msg-107"
|
||||
]
|
||||
"tools": ["msg-106", "msg-107"]
|
||||
},
|
||||
{
|
||||
"id": "msg-108",
|
||||
@@ -98,6 +92,9 @@
|
||||
"totalInputTokens": 28,
|
||||
"totalOutputTokens": 45,
|
||||
"totalTokens": 73
|
||||
},
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -178,6 +175,9 @@
|
||||
"totalOutputTokens": 199,
|
||||
"totalTokens": 628,
|
||||
"cost": 0.0018839999999999998
|
||||
},
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
}
|
||||
}
|
||||
],
|
||||
@@ -0,0 +1,8 @@
|
||||
import type { SerializedParseResult } from '../..';
|
||||
import assistantWithTools from './assistant-with-tools.json';
|
||||
import toolsWithBranches from './tools-with-branches.json';
|
||||
|
||||
export const assistantGroup = {
|
||||
assistantWithTools: assistantWithTools as unknown as SerializedParseResult,
|
||||
toolsWithBranches: toolsWithBranches as unknown as SerializedParseResult,
|
||||
};
|
||||
@@ -22,9 +22,9 @@ describe('parse', () => {
|
||||
|
||||
describe('Tool Usage', () => {
|
||||
it('should parse assistant with tools correctly', () => {
|
||||
const result = parse(inputs.assistantWithTools);
|
||||
const result = parse(inputs.assistantGroup.assistantWithTools);
|
||||
|
||||
expect(serializeParseResult(result)).toEqual(outputs.assistantWithTools);
|
||||
expect(serializeParseResult(result)).toEqual(outputs.assistantGroup.assistantWithTools);
|
||||
});
|
||||
|
||||
it('should include follow-up messages after assistant chain', () => {
|
||||
@@ -99,11 +99,11 @@ describe('parse', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('Complex Scenarios', () => {
|
||||
it('should handle complex mixed scenarios correctly', () => {
|
||||
const result = parse(inputs.complexScenario);
|
||||
describe('Assistant Group Scenarios', () => {
|
||||
it('should handle tools with assistant branches correctly', () => {
|
||||
const result = parse(inputs.assistantGroup.toolsWithBranches);
|
||||
|
||||
expect(serializeParseResult(result)).toEqual(outputs.complexScenario);
|
||||
expect(serializeParseResult(result)).toEqual(outputs.assistantGroup.toolsWithBranches);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -40,9 +40,53 @@ export function parse(messages: Message[], messageGroups?: MessageGroupMetadata[
|
||||
const flatList = transformer.flatten(messages);
|
||||
|
||||
// Convert messageMap from Map to plain object for serialization
|
||||
// Clean up metadata for assistant messages with tools
|
||||
const messageMapObj: Record<string, Message> = {};
|
||||
const usagePerformanceFields = new Set([
|
||||
'acceptedPredictionTokens',
|
||||
'cost',
|
||||
'duration',
|
||||
'inputAudioTokens',
|
||||
'inputCacheMissTokens',
|
||||
'inputCachedTokens',
|
||||
'inputCitationTokens',
|
||||
'inputImageTokens',
|
||||
'inputTextTokens',
|
||||
'inputWriteCacheTokens',
|
||||
'latency',
|
||||
'outputAudioTokens',
|
||||
'outputImageTokens',
|
||||
'outputReasoningTokens',
|
||||
'outputTextTokens',
|
||||
'rejectedPredictionTokens',
|
||||
'totalInputTokens',
|
||||
'totalOutputTokens',
|
||||
'totalTokens',
|
||||
'tps',
|
||||
'ttft',
|
||||
]);
|
||||
|
||||
helperMaps.messageMap.forEach((message, id) => {
|
||||
messageMapObj[id] = message;
|
||||
// For assistant messages with tools, clean metadata to keep only usage/performance fields
|
||||
if (
|
||||
message.role === 'assistant' &&
|
||||
message.tools &&
|
||||
message.tools.length > 0 &&
|
||||
message.metadata
|
||||
) {
|
||||
const cleanedMetadata: Record<string, any> = {};
|
||||
Object.entries(message.metadata).forEach(([key, value]) => {
|
||||
if (usagePerformanceFields.has(key)) {
|
||||
cleanedMetadata[key] = value;
|
||||
}
|
||||
});
|
||||
messageMapObj[id] = {
|
||||
...message,
|
||||
metadata: Object.keys(cleanedMetadata).length > 0 ? cleanedMetadata : undefined,
|
||||
};
|
||||
} else {
|
||||
messageMapObj[id] = message;
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
|
||||
@@ -445,6 +445,40 @@ export class FlatListBuilder {
|
||||
const msgUsage = assistant.usage || metaUsage;
|
||||
const msgPerformance = assistant.performance || metaPerformance;
|
||||
|
||||
// Extract non-usage/performance metadata fields
|
||||
const otherMetadata: Record<string, any> = {};
|
||||
if (assistant.metadata) {
|
||||
const usagePerformanceFields = new Set([
|
||||
'acceptedPredictionTokens',
|
||||
'cost',
|
||||
'duration',
|
||||
'inputAudioTokens',
|
||||
'inputCacheMissTokens',
|
||||
'inputCachedTokens',
|
||||
'inputCitationTokens',
|
||||
'inputImageTokens',
|
||||
'inputTextTokens',
|
||||
'inputWriteCacheTokens',
|
||||
'latency',
|
||||
'outputAudioTokens',
|
||||
'outputImageTokens',
|
||||
'outputReasoningTokens',
|
||||
'outputTextTokens',
|
||||
'rejectedPredictionTokens',
|
||||
'totalInputTokens',
|
||||
'totalOutputTokens',
|
||||
'totalTokens',
|
||||
'tps',
|
||||
'ttft',
|
||||
]);
|
||||
|
||||
Object.entries(assistant.metadata).forEach(([key, value]) => {
|
||||
if (!usagePerformanceFields.has(key)) {
|
||||
otherMetadata[key] = value;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const childBlock: AssistantContentBlock = {
|
||||
content: assistant.content || '',
|
||||
id: assistant.id,
|
||||
@@ -457,12 +491,37 @@ export class FlatListBuilder {
|
||||
if (assistant.reasoning) childBlock.reasoning = assistant.reasoning;
|
||||
if (toolsWithResults.length > 0) childBlock.tools = toolsWithResults;
|
||||
if (msgUsage) childBlock.usage = msgUsage;
|
||||
if (Object.keys(otherMetadata).length > 0) {
|
||||
childBlock.metadata = otherMetadata;
|
||||
}
|
||||
|
||||
children.push(childBlock);
|
||||
}
|
||||
|
||||
const aggregated = this.messageTransformer.aggregateMetadata(children);
|
||||
|
||||
// Collect all non-usage/performance metadata from all children
|
||||
const groupMetadata: Record<string, any> = {};
|
||||
children.forEach((child) => {
|
||||
if ((child as any).metadata) {
|
||||
Object.assign(groupMetadata, (child as any).metadata);
|
||||
}
|
||||
});
|
||||
|
||||
// If there's group-level metadata, apply it to first child and remove from others
|
||||
if (Object.keys(groupMetadata).length > 0 && children.length > 0) {
|
||||
// Ensure first child has the group metadata
|
||||
if (!(children[0] as any).metadata) {
|
||||
(children[0] as any).metadata = {};
|
||||
}
|
||||
Object.assign((children[0] as any).metadata, groupMetadata);
|
||||
|
||||
// Remove metadata from subsequent children (keep only in first child)
|
||||
for (let i = 1; i < children.length; i++) {
|
||||
delete (children[i] as any).metadata;
|
||||
}
|
||||
}
|
||||
|
||||
const result: Message = {
|
||||
...firstAssistant,
|
||||
children,
|
||||
@@ -480,6 +539,11 @@ export class FlatListBuilder {
|
||||
if (aggregated.performance) result.performance = aggregated.performance;
|
||||
if (aggregated.usage) result.usage = aggregated.usage;
|
||||
|
||||
// Add group-level metadata if it exists
|
||||
if (Object.keys(groupMetadata).length > 0) {
|
||||
result.metadata = groupMetadata;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import type { AssistantContentBlock } from '@lobechat/types';
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import type { AssistantContentBlock } from '@/types/index';
|
||||
|
||||
import type { Message } from '../../types';
|
||||
import { MessageTransformer } from '../MessageTransformer';
|
||||
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@electric-sql/pglite": "^0.2.17",
|
||||
"dayjs": ">=1.11.18",
|
||||
"dayjs": ">=1.11.19",
|
||||
"drizzle-orm": ">=0.44.7",
|
||||
"nanoid": ">=5.1.5",
|
||||
"nanoid": ">=5.1.6",
|
||||
"pg": ">=8.16.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { ClientDBLoadingProgress, DatabaseLoadingState } from '@lobechat/types';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { ClientDBLoadingProgress, DatabaseLoadingState } from '@/types/clientDB';
|
||||
|
||||
import { DatabaseManager } from './db';
|
||||
|
||||
// Mock 所有外部依赖
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import {
|
||||
type ClientDBLoadingProgress,
|
||||
DatabaseLoadingState,
|
||||
type MigrationSQL,
|
||||
type MigrationTableItem,
|
||||
} from '@lobechat/types';
|
||||
import { sql } from 'drizzle-orm';
|
||||
import { PgliteDatabase, drizzle } from 'drizzle-orm/pglite';
|
||||
import { Md5 } from 'ts-md5';
|
||||
|
||||
import {
|
||||
ClientDBLoadingProgress,
|
||||
DatabaseLoadingState,
|
||||
MigrationSQL,
|
||||
MigrationTableItem,
|
||||
} from '@/types/clientDB';
|
||||
import { sleep } from '@/utils/sleep';
|
||||
|
||||
import migrations from '../core/migrations.json';
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { PGlite } from '@electric-sql/pglite';
|
||||
import { vector } from '@electric-sql/pglite/vector';
|
||||
import type { MigrationTableItem } from '@lobechat/types';
|
||||
import { drizzle as pgliteDrizzle } from 'drizzle-orm/pglite';
|
||||
import fs from 'node:fs';
|
||||
import { Md5 } from 'ts-md5';
|
||||
|
||||
import { electronIpcClient } from '@/server/modules/ElectronIPCClient';
|
||||
import { MigrationTableItem } from '@/types/clientDB';
|
||||
|
||||
import { DrizzleMigrationModel } from '../models/drizzleMigration';
|
||||
import * as schema from '../schemas';
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
// @vitest-environment node
|
||||
import { AsyncTaskStatus, AsyncTaskType } from '@lobechat/types';
|
||||
import { eq } from 'drizzle-orm';
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { AsyncTaskStatus, AsyncTaskType } from '@/types/asyncTask';
|
||||
|
||||
import { asyncTasks, users } from '../../schemas';
|
||||
import { LobeChatDatabase } from '../../type';
|
||||
import { ASYNC_TASK_TIMEOUT, AsyncTaskModel } from '../asyncTask';
|
||||
|
||||
@@ -287,6 +287,44 @@ describe('ChunkModel', () => {
|
||||
expect(result[1].index).toBe(1);
|
||||
expect(result[2].index).toBe(2);
|
||||
});
|
||||
|
||||
it('should handle chunks with null metadata and return undefined pageNumber', async () => {
|
||||
const fileId = '1';
|
||||
const [chunk] = await serverDB
|
||||
.insert(chunks)
|
||||
.values([{ text: 'Chunk with null metadata', userId, index: 0, metadata: null }])
|
||||
.returning();
|
||||
|
||||
await serverDB.insert(fileChunks).values([{ fileId, chunkId: chunk.id, userId }]);
|
||||
|
||||
const result = await chunkModel.findByFileId(fileId, 0);
|
||||
|
||||
expect(result).toHaveLength(1);
|
||||
expect(result[0].metadata).toBeNull();
|
||||
expect(result[0].pageNumber).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should handle chunks with metadata containing pageNumber', async () => {
|
||||
const fileId = '1';
|
||||
const [chunk] = await serverDB
|
||||
.insert(chunks)
|
||||
.values([
|
||||
{
|
||||
text: 'Chunk with pageNumber',
|
||||
userId,
|
||||
index: 0,
|
||||
metadata: { pageNumber: 5 } as any,
|
||||
},
|
||||
])
|
||||
.returning();
|
||||
|
||||
await serverDB.insert(fileChunks).values([{ fileId, chunkId: chunk.id, userId }]);
|
||||
|
||||
const result = await chunkModel.findByFileId(fileId, 0);
|
||||
|
||||
expect(result).toHaveLength(1);
|
||||
expect(result[0].pageNumber).toBe(5);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getChunksTextByFileId', () => {
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
// @vitest-environment node
|
||||
import { FilesTabs, SortType } from '@lobechat/types';
|
||||
import { eq, inArray } from 'drizzle-orm';
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { FilesTabs, SortType } from '@/types/files';
|
||||
|
||||
import {
|
||||
chunks,
|
||||
embeddings,
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
// @vitest-environment node
|
||||
import { AsyncTaskStatus, ImageGenerationAsset } from '@lobechat/types';
|
||||
import { FileSource } from '@lobechat/types';
|
||||
import { eq } from 'drizzle-orm';
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { FileSource } from '@/types/files';
|
||||
|
||||
import {
|
||||
NewGeneration,
|
||||
asyncTasks,
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
// @vitest-environment node
|
||||
import { GenerationConfig } from '@lobechat/types';
|
||||
import { AsyncTaskStatus } from '@lobechat/types';
|
||||
import { eq } from 'drizzle-orm';
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { AsyncTaskStatus } from '@/types/asyncTask';
|
||||
|
||||
import {
|
||||
NewGenerationBatch,
|
||||
generationBatches,
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { and, asc, desc, eq } from 'drizzle-orm';
|
||||
import { isEmpty } from 'lodash-es';
|
||||
import { ModelProvider } from 'model-bank';
|
||||
|
||||
import { DEFAULT_MODEL_PROVIDER_LIST } from '@/config/modelProviders';
|
||||
import {
|
||||
import type {
|
||||
AiProviderDetailItem,
|
||||
AiProviderListItem,
|
||||
AiProviderRuntimeConfig,
|
||||
CreateAiProviderParams,
|
||||
UpdateAiProviderConfigParams,
|
||||
} from '@/types/aiProvider';
|
||||
} from '@lobechat/types';
|
||||
import { and, asc, desc, eq } from 'drizzle-orm';
|
||||
import { isEmpty } from 'lodash-es';
|
||||
import { ModelProvider } from 'model-bank';
|
||||
|
||||
import { DEFAULT_MODEL_PROVIDER_LIST } from '@/config/modelProviders';
|
||||
import { merge } from '@/utils/merge';
|
||||
|
||||
import { AiProviderSelectItem, aiModels, aiProviders } from '../schemas';
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import type {
|
||||
AiProviderDetailItem,
|
||||
AiProviderListItem,
|
||||
AiProviderRuntimeConfig,
|
||||
EnabledProvider,
|
||||
} from '@lobechat/types';
|
||||
import { AiProviderModelListItem, EnabledAiModel } from 'model-bank';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { DEFAULT_MODEL_PROVIDER_LIST } from '@/config/modelProviders';
|
||||
import { clientDB, initializeDB } from '@/database/client/db';
|
||||
import {
|
||||
AiProviderDetailItem,
|
||||
AiProviderListItem,
|
||||
AiProviderRuntimeConfig,
|
||||
EnabledProvider,
|
||||
} from '@/types/aiProvider';
|
||||
|
||||
import { AiInfraRepos } from './index';
|
||||
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
import type {
|
||||
AiProviderDetailItem,
|
||||
AiProviderListItem,
|
||||
AiProviderRuntimeState,
|
||||
EnabledProvider,
|
||||
ProviderConfig,
|
||||
} from '@lobechat/types';
|
||||
import { isEmpty } from 'lodash-es';
|
||||
import {
|
||||
AIChatModelCard,
|
||||
@@ -8,13 +15,6 @@ import {
|
||||
import pMap from 'p-map';
|
||||
|
||||
import { DEFAULT_MODEL_PROVIDER_LIST } from '@/config/modelProviders';
|
||||
import {
|
||||
AiProviderDetailItem,
|
||||
AiProviderListItem,
|
||||
AiProviderRuntimeState,
|
||||
EnabledProvider,
|
||||
} from '@/types/aiProvider';
|
||||
import { ProviderConfig } from '@/types/user/settings';
|
||||
import { merge, mergeArrayById } from '@/utils/merge';
|
||||
|
||||
import { AiModelModel } from '../../models/aiModel';
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import type { ImportPgDataStructure } from '@lobechat/types';
|
||||
import { eq, inArray } from 'drizzle-orm';
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { ImportPgDataStructure } from '@/types/export';
|
||||
|
||||
import { getTestDB } from '../../../models/__tests__/_util';
|
||||
import * as Schema from '../../../schemas';
|
||||
import { DataImporterRepos } from '../index';
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// @vitest-environment node
|
||||
import type { ImporterEntryData } from '@lobechat/types';
|
||||
import { eq, inArray } from 'drizzle-orm';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
@@ -12,7 +13,6 @@ import {
|
||||
topics,
|
||||
users,
|
||||
} from '@/database/schemas';
|
||||
import { ImporterEntryData } from '@/types/importer';
|
||||
|
||||
import { DeprecatedDataImporterRepos as DataImporterRepos } from '../index';
|
||||
import mockImportData from './fixtures/messages.json';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { ImporterEntryData } from '@lobechat/types';
|
||||
import { and, eq, inArray, sql } from 'drizzle-orm';
|
||||
|
||||
import { ImporterEntryData } from '@/types/importer';
|
||||
import { sanitizeUTF8 } from '@/utils/sanitizeUTF8';
|
||||
|
||||
import {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import type { ImportPgDataStructure, ImportResultData, ImporterEntryData } from '@lobechat/types';
|
||||
import { and, eq, inArray } from 'drizzle-orm';
|
||||
|
||||
import { ImportPgDataStructure } from '@/types/export';
|
||||
import { ImportResultData, ImporterEntryData } from '@/types/importer';
|
||||
import { uuid } from '@/utils/uuid';
|
||||
|
||||
import * as EXPORT_TABLES from '../../schemas';
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
import { sql } from 'drizzle-orm';
|
||||
import pMap from 'p-map';
|
||||
|
||||
import {
|
||||
import type {
|
||||
FilterCondition,
|
||||
PaginationParams,
|
||||
TableBasicInfo,
|
||||
TableColumnInfo,
|
||||
} from '@/types/tableViewer';
|
||||
} from '@lobechat/types';
|
||||
import { sql } from 'drizzle-orm';
|
||||
import pMap from 'p-map';
|
||||
|
||||
import { LobeChatDatabase } from '../../type';
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* eslint-disable sort-keys-fix/sort-keys-fix */
|
||||
import type { LobeAgentChatConfig, LobeAgentTTSConfig } from '@lobechat/types';
|
||||
import {
|
||||
boolean,
|
||||
index,
|
||||
@@ -11,8 +12,6 @@ import {
|
||||
} from 'drizzle-orm/pg-core';
|
||||
import { createInsertSchema } from 'drizzle-zod';
|
||||
|
||||
import { LobeAgentChatConfig, LobeAgentTTSConfig } from '@/types/agent';
|
||||
|
||||
import { idGenerator, randomSlug } from '../utils/idGenerator';
|
||||
import { timestamps } from './_helpers';
|
||||
import { files, knowledgeBases } from './file';
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
/* eslint-disable sort-keys-fix/sort-keys-fix */
|
||||
import type { AiProviderConfig, AiProviderSettings } from '@lobechat/types';
|
||||
import { boolean, integer, jsonb, pgTable, primaryKey, text, varchar } from 'drizzle-orm/pg-core';
|
||||
import { AiModelSettings } from 'model-bank';
|
||||
|
||||
import { AiProviderConfig, AiProviderSettings } from '@/types/aiProvider';
|
||||
|
||||
import { timestamps } from './_helpers';
|
||||
import { users } from './user';
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* eslint-disable sort-keys-fix/sort-keys-fix */
|
||||
import type { LobeDocumentPage } from '@lobechat/types';
|
||||
import {
|
||||
index,
|
||||
integer,
|
||||
@@ -12,8 +13,6 @@ import {
|
||||
} from 'drizzle-orm/pg-core';
|
||||
import { createInsertSchema } from 'drizzle-zod';
|
||||
|
||||
import { LobeDocumentPage } from '@/types/document';
|
||||
|
||||
import { idGenerator } from '../utils/idGenerator';
|
||||
import { createdAt, timestamps } from './_helpers';
|
||||
import { files } from './file';
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* eslint-disable sort-keys-fix/sort-keys-fix */
|
||||
import { FileSource } from '@lobechat/types';
|
||||
import {
|
||||
boolean,
|
||||
index,
|
||||
@@ -13,8 +14,6 @@ import {
|
||||
} from 'drizzle-orm/pg-core';
|
||||
import { createInsertSchema } from 'drizzle-zod';
|
||||
|
||||
import { FileSource } from '@/types/files';
|
||||
|
||||
import { idGenerator } from '../utils/idGenerator';
|
||||
import { accessedAt, createdAt, timestamps } from './_helpers';
|
||||
import { asyncTasks } from './asyncTask';
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
/* eslint-disable sort-keys-fix/sort-keys-fix */
|
||||
import type { ChatTopicMetadata } from '@lobechat/types';
|
||||
import { boolean, index, jsonb, pgTable, primaryKey, text, uniqueIndex } from 'drizzle-orm/pg-core';
|
||||
import { createInsertSchema } from 'drizzle-zod';
|
||||
|
||||
import { ChatTopicMetadata } from '@/types/topic';
|
||||
|
||||
import { idGenerator } from '../utils/idGenerator';
|
||||
import { createdAt, timestamps, timestamptz } from './_helpers';
|
||||
import { chatGroups } from './chatGroup';
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/* eslint-disable sort-keys-fix/sort-keys-fix */
|
||||
import type { CustomPluginParams } from '@lobechat/types';
|
||||
import { LobeChatPluginManifest } from '@lobehub/chat-plugin-sdk';
|
||||
import { boolean, jsonb, pgTable, primaryKey, text } from 'drizzle-orm/pg-core';
|
||||
|
||||
import { DEFAULT_PREFERENCE } from '@/const/user';
|
||||
import { CustomPluginParams } from '@/types/tool/plugin';
|
||||
|
||||
import { timestamps, timestamptz } from './_helpers';
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import type { UserGuide, UserPreference } from '@lobechat/types';
|
||||
import { TRPCError } from '@trpc/server';
|
||||
import dayjs from 'dayjs';
|
||||
import { count, eq } from 'drizzle-orm';
|
||||
@@ -5,7 +6,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { INBOX_SESSION_ID } from '@/const/session';
|
||||
import { KeyVaultsGateKeeper } from '@/server/modules/KeyVaultsEncrypt';
|
||||
import { UserGuide, UserPreference } from '@/types/user';
|
||||
|
||||
import { getTestDBInstance } from '../../../core/dbForTest';
|
||||
import { SessionModel } from '../../../models/session';
|
||||
|
||||
@@ -5,6 +5,6 @@
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"peerDependencies": {
|
||||
"react": "^19"
|
||||
"react": "^19.2.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
"test:coverage": "vitest --coverage --silent='passed-only'"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": "^4.3.4"
|
||||
"debug": "^4.4.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/debug": "^4.1.7"
|
||||
"@types/debug": "^4.1.12"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,6 @@
|
||||
"@lobechat/model-runtime": "workspace:*",
|
||||
"@lobechat/types": "workspace:*",
|
||||
"@lobechat/utils": "workspace:*",
|
||||
"i18next": "^24.2.1"
|
||||
"i18next": "^24.2.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,8 +28,8 @@
|
||||
"@napi-rs/canvas": "^0.1.70",
|
||||
"@xmldom/xmldom": "^0.9.8",
|
||||
"concat-stream": "^2.0.0",
|
||||
"debug": "^4.3.4",
|
||||
"mammoth": "^1.8.0",
|
||||
"debug": "^4.4.3",
|
||||
"mammoth": "^1.11.0",
|
||||
"officeparser": "5.1.1",
|
||||
"pdfjs-dist": "4.10.38",
|
||||
"word-extractor": "^1.0.4",
|
||||
@@ -39,7 +39,7 @@
|
||||
"devDependencies": {
|
||||
"@types/concat-stream": "^2.0.3",
|
||||
"@types/yauzl": "^2.10.3",
|
||||
"typescript": "^5"
|
||||
"typescript": "^5.9.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": ">=5"
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
"ora": "^9.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"tsx": "^4.19.2"
|
||||
"tsx": "^4.20.6"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"zod": "^3"
|
||||
"zod": "^3.25.76"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
"test:update": "vitest -u"
|
||||
},
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-bedrock-runtime": "^3.862.0",
|
||||
"@huggingface/inference": "^4.11.3",
|
||||
"@aws-sdk/client-bedrock-runtime": "^3.932.0",
|
||||
"@huggingface/inference": "^4.13.3",
|
||||
"@lobechat/const": "workspace:*",
|
||||
"@lobechat/types": "workspace:*",
|
||||
"@lobechat/utils": "workspace:*",
|
||||
"debug": "^4.4.1",
|
||||
"debug": "^4.4.3",
|
||||
"model-bank": "workspace:*",
|
||||
"openai": "^4.104.0"
|
||||
}
|
||||
|
||||
@@ -235,6 +235,73 @@ describe('OllamaStream', () => {
|
||||
expect(onToolCall).toHaveBeenCalledTimes(1);
|
||||
expect(onCompletionMock).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('tools use with a done', async () => {
|
||||
vi.spyOn(uuidModule, 'nanoid').mockReturnValueOnce('1').mockReturnValueOnce('abcd1234');
|
||||
|
||||
const mockOllamaStream = new ReadableStream<ChatResponse>({
|
||||
start(controller) {
|
||||
controller.enqueue({
|
||||
model: 'qwen2.5',
|
||||
created_at: new Date('2024-12-01T03:34:55.166692Z'),
|
||||
message: {
|
||||
role: 'assistant',
|
||||
content: '',
|
||||
tool_calls: [
|
||||
{
|
||||
function: {
|
||||
name: 'realtime-weather____fetchCurrentWeather',
|
||||
arguments: { city: '杭州' },
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
done_reason: 'stop',
|
||||
done: true,
|
||||
total_duration: 1122415333,
|
||||
load_duration: 26178333,
|
||||
prompt_eval_count: 221,
|
||||
prompt_eval_duration: 507000000,
|
||||
eval_count: 26,
|
||||
eval_duration: 583000000,
|
||||
} as unknown as ChatResponse);
|
||||
|
||||
controller.close();
|
||||
},
|
||||
});
|
||||
const onStartMock = vi.fn();
|
||||
const onTextMock = vi.fn();
|
||||
const onToolCall = vi.fn();
|
||||
const onCompletionMock = vi.fn();
|
||||
|
||||
const protocolStream = OllamaStream(mockOllamaStream, {
|
||||
onStart: onStartMock,
|
||||
onText: onTextMock,
|
||||
onCompletion: onCompletionMock,
|
||||
onToolsCalling: onToolCall,
|
||||
});
|
||||
|
||||
const decoder = new TextDecoder();
|
||||
const chunks = [];
|
||||
|
||||
// @ts-ignore
|
||||
for await (const chunk of protocolStream) {
|
||||
chunks.push(decoder.decode(chunk, { stream: true }));
|
||||
}
|
||||
|
||||
expect(chunks).toEqual(
|
||||
[
|
||||
'id: chat_1',
|
||||
'event: tool_calls',
|
||||
`data: [{"function":{"arguments":"{\\"city\\":\\"杭州\\"}","name":"realtime-weather____fetchCurrentWeather"},"id":"realtime-weather____fetchCurrentWeather_0_abcd1234","index":0,"type":"function"}]\n`,
|
||||
].map((i) => `${i}\n`),
|
||||
);
|
||||
|
||||
expect(onTextMock).toHaveBeenCalledTimes(0);
|
||||
expect(onStartMock).toHaveBeenCalledTimes(1);
|
||||
expect(onToolCall).toHaveBeenCalledTimes(1);
|
||||
expect(onCompletionMock).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
|
||||
it('should handle empty stream', async () => {
|
||||
|
||||
@@ -11,11 +11,6 @@ import {
|
||||
} from './protocol';
|
||||
|
||||
const transformOllamaStream = (chunk: ChatResponse, stack: StreamContext): StreamProtocolChunk => {
|
||||
// maybe need another structure to add support for multiple choices
|
||||
if (chunk.done && !chunk.message.content) {
|
||||
return { data: 'finished', id: stack.id, type: 'stop' };
|
||||
}
|
||||
|
||||
if (chunk.message.thinking) {
|
||||
return { data: chunk.message.thinking, id: stack.id, type: 'reasoning' };
|
||||
}
|
||||
@@ -36,6 +31,11 @@ const transformOllamaStream = (chunk: ChatResponse, stack: StreamContext): Strea
|
||||
};
|
||||
}
|
||||
|
||||
// maybe need another structure to add support for multiple choices
|
||||
if (chunk.done && !chunk.message.content) {
|
||||
return { data: 'finished', id: stack.id, type: 'stop' };
|
||||
}
|
||||
|
||||
// 判断是否有 <think> 或 </think> 标签,更新 thinkingInContent 状态
|
||||
if (chunk.message.content.includes('<think>')) {
|
||||
stack.thinkingInContent = true;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { GenerateContentResponse } from '@google/genai';
|
||||
|
||||
import { GroundingSearch } from '@/types/search';
|
||||
import { GroundingSearch } from '@lobechat/types';
|
||||
|
||||
import { nanoid } from '../../utils/uuid';
|
||||
import { convertGoogleAIUsage } from '../usageConverters/google-ai';
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
// @vitest-environment node
|
||||
import type { ComfyUIKeyVault } from '@lobechat/types';
|
||||
import { createBasicAuthCredentials } from '@lobechat/utils';
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import type { ComfyUIKeyVault } from '@/types/index';
|
||||
|
||||
import type { CreateImagePayload } from '../../../types/image';
|
||||
import { LobeComfyUI } from '../index';
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import type { ComfyUIKeyVault } from '@lobechat/types';
|
||||
import { createBasicAuthCredentials } from '@lobechat/utils';
|
||||
|
||||
import type { ComfyUIKeyVault } from '@/types/index';
|
||||
|
||||
export interface BasicCredentials {
|
||||
password: string;
|
||||
type: 'basic';
|
||||
|
||||
@@ -1,14 +1,9 @@
|
||||
import type { ComfyUIKeyVault } from '@lobechat/types';
|
||||
import { createBasicAuthCredentials } from '@lobechat/utils';
|
||||
import debug from 'debug';
|
||||
|
||||
import type { ComfyUIKeyVault } from '@/types/index';
|
||||
|
||||
import { LobeRuntimeAI } from '../../core/BaseAI';
|
||||
import {
|
||||
AuthenticatedImageRuntime,
|
||||
CreateImagePayload,
|
||||
CreateImageResponse,
|
||||
} from '../../types/image';
|
||||
import { AuthenticatedImageRuntime, CreateImagePayload, CreateImageResponse } from '../../types';
|
||||
import { parseComfyUIErrorMessage } from '../../utils/comfyuiErrorParser';
|
||||
import { AgentRuntimeError } from '../../utils/createError';
|
||||
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
"@opentelemetry/instrumentation": "^0.207.0",
|
||||
"@opentelemetry/instrumentation-http": "^0.207.0",
|
||||
"@opentelemetry/instrumentation-pg": "^0.60.0",
|
||||
"@opentelemetry/resources": "^2.0.1",
|
||||
"@opentelemetry/sdk-metrics": "^2.0.1",
|
||||
"@opentelemetry/resources": "^2.2.0",
|
||||
"@opentelemetry/sdk-metrics": "^2.2.0",
|
||||
"@opentelemetry/sdk-node": "^0.207.0",
|
||||
"@opentelemetry/sdk-trace-node": "^2.0.1",
|
||||
"@opentelemetry/semantic-conventions": "^1.36.0",
|
||||
"@vercel/otel": "^1.13.0"
|
||||
"@opentelemetry/sdk-trace-node": "^2.2.0",
|
||||
"@opentelemetry/semantic-conventions": "^1.38.0",
|
||||
"@vercel/otel": "^2.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,6 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"promptfoo": "^0.118.17",
|
||||
"tsx": "^4.20.4"
|
||||
"tsx": "^4.20.6"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"node-fetch": "^3.3.2",
|
||||
"request-filtering-agent": "^3"
|
||||
"request-filtering-agent": "^3.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vitest": "^3.2.4"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user