Files
linux/deploy_reme_issue.md
2026-04-08 14:00:32 +08:00

699 lines
50 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 记录 ReMe 容器化部署踩的坑
- Githubhttps://github.com/agentscope-ai/ReMe
- Releasehttps://github.com/agentscope-ai/ReMe/releases
- 使用的版本https://github.com/agentscope-ai/ReMe/releases/tag/v0.3.1.8
- 快速上手https://github.com/agentscope-ai/ReMe/blob/v0.3.1.8/docs/quick_start.md
## Dockerfile
```
FROM ubuntu:24.04
# 1. 更换为中科大 (USTC) 源
# Ubuntu 24.04 使用 DEB822 格式,配置文件在 /etc/apt/sources.list.d/ubuntu.sources
# 我们需要将 URIs 字段中的默认地址替换为中科大镜像地址
RUN sed -i 's|http://archive.ubuntu.com/ubuntu|http://mirrors.ustc.edu.cn/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources && \
sed -i 's|http://security.ubuntu.com/ubuntu|http://mirrors.ustc.edu.cn/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources
ENV DEBIAN_FRONTEND=noninteractive \
TZ=Asia/Shanghai
# 2. 安装基础依赖
RUN apt-get update && apt-get install -y \
locales \
tzdata \
ca-certificates \
python3 \
python3-venv \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# 3. 设置语言环境
RUN locale-gen zh_CN.UTF-8 en_US.UTF-8
ENV LANG=zh_CN.UTF-8 \
LANGUAGE=zh_CN:zh \
LC_ALL=zh_CN.UTF-8
# 4. 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata
WORKDIR /opt
# 5. 复制项目文件
COPY ReMe-0.3.1.8 ./reme
# 6. 创建虚拟环境并安装依赖
RUN cd reme \
&& python3 -m venv .venv \
&& .venv/bin/pip install --no-cache-dir --upgrade pip \
&& .venv/bin/pip install --no-cache-dir -e ".[light]"
# 7. 设置环境变量
ENV PATH="/opt/reme/.venv/bin:$PATH"
WORKDIR /opt/reme
```
## docker-compose.yaml
```yaml
services:
reme:
image: reme:0.3.1.8
container_name: reme
restart: on-failure:3
volumes:
- ./local_vector_store:/opt/reme/local_vector_store
- ./.env:/opt/reme/.env
ports:
- "28202:28202"
command: [
"reme",
"http.port=28202",
"llm.default.model_name=qwen2.5",
"embedding_model.default.model_name=bge-m3",
"vector_store.default.backend=local"
]
```
## .env 文件的内容
```
LLM_API_KEY=sk-***
LLM_BASE_URL=http://IP:PORT/v1
EMBEDDING_API_KEY=sk-***
EMBEDDING_BASE_URL=http://IP:PORT/v1
```
## 通过 agentscope-java 构建的 demo
```java
package ai.agentscope.example.memory;
import ai.agentscope.example.conf.LlmConfig;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.StrUtil;
import io.agentscope.core.ReActAgent;
import io.agentscope.core.memory.LongTermMemoryMode;
import io.agentscope.core.memory.reme.ReMeLongTermMemory;
import io.agentscope.core.message.Msg;
import io.agentscope.core.message.MsgRole;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Optional;
import java.util.Scanner;
@Component
@ConditionalOnBooleanProperty(value = "ENABLE_RE_ME_TEST")
@RequiredArgsConstructor
public class ReMeMemoryCmdRunner implements CommandLineRunner {
private final LlmConfig llmConfig;
@Value("${RE_ME_BASE_URL}")
private String longTermMemoryBaseUrl;
@Override
public void run(String... args) throws Exception {
System.out.println("-".repeat(40));
System.out.printf("Start %s%n", this.getClass().getSimpleName());
System.out.println("-".repeat(40));
Scanner scanner = new Scanner(System.in);
for (; ; ) {
System.out.print(">>>You");
String input = scanner.nextLine();
if (StrUtil.isBlank(input)) {
continue;
}
if ("q".equals(input) || "exit".equals(input)) {
break;
}
Msg assistantMsg = this.agent().call(this.readUserMsg(input)).block();
System.out.printf("""
>>>LLM
%s
%n""", Optional.ofNullable(assistantMsg).map(Msg::getTextContent).orElse("没有获取到任何输出"));
}
}
private Msg readUserMsg(String input) {
return Msg.builder()
.timestamp(LocalDateTime.now().format(DatePattern.PURE_DATETIME_MS_FORMATTER))
.role(MsgRole.USER)
.textContent(input)
.build();
}
private ReActAgent agent() {
return ReActAgent.builder()
.name("ReMeMemoryAgent")
.model(llmConfig.model())
.longTermMemory(this.longTermMemory())
.longTermMemoryMode(LongTermMemoryMode.STATIC_CONTROL)
.build();
}
private ReMeLongTermMemory longTermMemory() {
return ReMeLongTermMemory.builder()
.userId("example_user_id")
.apiBaseUrl(this.longTermMemoryBaseUrl)
.build();
}
}
```
## 坑点1、因环境变量错误导致 API 调用失败(已解决)
```
2026-04-07 15:56:51 | ERROR | base_embedding_model.py:126 | embedding model name=bge-negative-train encounter error with e=('Connection error.',)
Traceback (most recent call last):
File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions
yield
File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 394, in handle_async_request
resp = await self._pool.handle_async_request(req)
│ │ │ └ <Request [b'POST']>
│ │ └ <function AsyncConnectionPool.handle_async_request at 0x72074ae19c60>
│ └ <AsyncConnectionPool [Requests: 0 active, 0 queued | Connections: 0 active, 0 idle]>
└ <httpx.AsyncHTTPTransport object at 0x72074aebf6e0>
File "/opt/reme/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 207, in handle_async_request
raise UnsupportedProtocol(
└ <class 'httpcore.UnsupportedProtocol'>
httpcore.UnsupportedProtocol: Request URL is missing an 'http://' or 'https://' protocol.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1604, in request
response = await self._client.send(
│ │ └ <function AsyncClient.send at 0x72075ed6e2a0>
│ └ <openai._base_client.AsyncHttpxClientWrapper object at 0x72074af718b0>
└ <openai.AsyncOpenAI object at 0x72074afb1160>
File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1629, in send
response = await self._send_handling_auth(
│ └ <function AsyncClient._send_handling_auth at 0x72075ed6e340>
└ <openai._base_client.AsyncHttpxClientWrapper object at 0x72074af718b0>
File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1657, in _send_handling_auth
response = await self._send_handling_redirects(
│ └ <function AsyncClient._send_handling_redirects at 0x72075ed6e3e0>
└ <openai._base_client.AsyncHttpxClientWrapper object at 0x72074af718b0>
File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1694, in _send_handling_redirects
response = await self._send_single_request(request)
│ │ └ <Request('POST', '/embeddings')>
│ └ <function AsyncClient._send_single_request at 0x72075ed6e480>
└ <openai._base_client.AsyncHttpxClientWrapper object at 0x72074af718b0>
File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1730, in _send_single_request
response = await transport.handle_async_request(request)
│ │ └ <Request('POST', '/embeddings')>
│ └ <function AsyncHTTPTransport.handle_async_request at 0x72075ed53100>
└ <httpx.AsyncHTTPTransport object at 0x72074aebf6e0>
File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 393, in handle_async_request
with map_httpcore_exceptions():
└ <function map_httpcore_exceptions at 0x72075ed52700>
File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__
self.gen.throw(value)
│ │ │ └ UnsupportedProtocol("Request URL is missing an 'http://' or 'https://' protocol.")
│ │ └ <method 'throw' of 'generator' objects>
│ └ <generator object map_httpcore_exceptions at 0x720742fc8740>
└ <contextlib._GeneratorContextManager object at 0x720742fcce30>
File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions
raise mapped_exc(message) from exc
│ └ "Request URL is missing an 'http://' or 'https://' protocol."
└ <class 'httpx.UnsupportedProtocol'>
httpx.UnsupportedProtocol: Request URL is missing an 'http://' or 'https://' protocol.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/reme/.venv/bin/reme", line 6, in <module>
sys.exit(main())
│ │ └ <function main at 0x72074b0089a0>
│ └ <built-in function exit>
└ <module 'sys' (built-in)>
File "/opt/reme/reme_ai/main.py", line 231, in main
app.run_service()
│ └ <function Application.run_service at 0x72074b009580>
└ <reme_ai.main.ReMeApp object at 0x720760696a50>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/application.py", line 384, in run_service
service.run()
│ └ <function HttpService.run at 0x72074c0d7e20>
└ <flowllm.core.service.http_service.HttpService object at 0x72074af46750>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/service/http_service.py", line 123, in run
uvicorn.run(
│ └ <function run at 0x72075e2ddb20>
└ <module 'uvicorn' from '/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/__init__.py'>
File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/main.py", line 606, in run
server.run()
│ └ <function Server.run at 0x72075e2ddee0>
└ <uvicorn.server.Server object at 0x72074abbb650>
File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py", line 75, in run
return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())
│ │ │ │ │ │ └ <function Config.get_loop_factory at 0x72075e2dd8a0>
│ │ │ │ │ └ <uvicorn.config.Config object at 0x72074aebe060>
│ │ │ │ └ <uvicorn.server.Server object at 0x72074abbb650>
│ │ │ └ None
│ │ └ <function Server.serve at 0x72075e2ddf80>
│ └ <uvicorn.server.Server object at 0x72074abbb650>
└ <function run at 0x72075fd55ee0>
File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
return runner.run(main)
│ │ └ <coroutine object Server.serve at 0x72074ac1c200>
│ └ <function Runner.run at 0x72075fda3880>
└ <asyncio.runners.Runner object at 0x72074af47d40>
File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
│ │ │ └ <Task pending name='Task-4' coro=<Server.serve() running at /opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py:79...
│ │ └ <cyfunction Loop.run_until_complete at 0x72074aba9300>
│ └ <uvloop.Loop running=True closed=False debug=False>
└ <asyncio.runners.Runner object at 0x72074af47d40>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/op/base_async_op.py", line 185, in async_call
result = await self.async_execute()
│ └ <function LoadTodayMemoryOp.async_execute at 0x72074ae345e0>
└ <reme_ai.summary.personal.load_today_memory_op.LoadTodayMemoryOp object at 0x72074a94ac60>
File "/opt/reme/reme_ai/summary/personal/load_today_memory_op.py", line 49, in async_execute
today_memories = await self._retrieve_today_memories(workspace_id, user_name, top_k)
 │ │ │ │ └ 50
 │ │ │ └ 'user'
 │ │ └ 'example_user_id'
 │ └ <function LoadTodayMemoryOp._retrieve_today_memories at 0x72074ae34680>
 └ <reme_ai.summary.personal.load_today_memory_op.LoadTodayMemoryOp object at 0x72074a94ac60>
File "/opt/reme/reme_ai/summary/personal/load_today_memory_op.py", line 87, in _retrieve_today_memories
nodes: List[VectorNode] = await self.vector_store.async_search(
 │ │ │ └ <property object at 0x72074c304b80>
 │ │ └ <reme_ai.summary.personal.load_today_memory_op.LoadTodayMemoryOp object at 0x72074a94ac60>
 │ └ <class 'flowllm.core.schema.vector_node.VectorNode'>
 └ typing.List
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/local_vector_store.py", line 512, in async_search
return await super().async_search(query, workspace_id, top_k, filter_dict, **kwargs)
│ │ │ │ └ {}
│ │ │ └ {'memory_type': 'personal', 'target': 'user', 'created_date': '20260407'}
│ │ └ 50
│ └ 'example_user_id'
└ ' '
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/memory_vector_store.py", line 673, in async_search
query_vector = await self.async_get_embeddings(query) if use_vector_search else None
│ │ │ └ True
│ │ └ ' '
│ └ <function BaseVectorStore.async_get_embeddings at 0x72074c2c04a0>
└ <flowllm.core.vector_store.local_vector_store.LocalVectorStore object at 0x72074af73980>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/base_vector_store.py", line 123, in async_get_embeddings
return await self.embedding_model.async_get_embeddings(query)
│ │ │ └ ' '
│ │ └ <function BaseEmbeddingModel.async_get_embeddings at 0x72075d257e20>
│ └ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x72074c324f20>
└ <flowllm.core.vector_store.local_vector_store.LocalVectorStore object at 0x72074af73980>
> File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/base_embedding_model.py", line 123, in async_get_embeddings
return await self._async_get_embeddings(input_text)
│ │ └ ' '
│ └ <function OpenAICompatibleEmbeddingModel._async_get_embeddings at 0x72075cbb0400>
└ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x72074c324f20>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/openai_compatible_embedding_model.py", line 124, in _async_get_embeddings
completion = await self._async_client.embeddings.create(
│ │ │ └ <function AsyncEmbeddings.create at 0x7207482b5440>
│ │ └ <openai.resources.embeddings.AsyncEmbeddings object at 0x72074ae0f980>
│ └ <openai.AsyncOpenAI object at 0x72074afb1160>
└ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x72074c324f20>
File "/opt/reme/.venv/lib/python3.12/site-packages/openai/resources/embeddings.py", line 259, in create
return await self._post(
│ └ <bound method AsyncAPIClient.post of <openai.AsyncOpenAI object at 0x72074afb1160>>
└ <openai.resources.embeddings.AsyncEmbeddings object at 0x72074ae0f980>
File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1884, in post
return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
│ │ │ │ │ └ None
│ │ │ │ └ False
│ │ │ └ FinalRequestOptions(method='post', url='/embeddings', params={}, headers=NOT_GIVEN, max_retries=NOT_GIVEN, timeout=NOT_GIVEN,...
│ │ └ <class 'openai.types.create_embedding_response.CreateEmbeddingResponse'>
│ └ <function AsyncAPIClient.request at 0x72075cc47e20>
└ <openai.AsyncOpenAI object at 0x72074afb1160>
File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1636, in request
raise APIConnectionError(request=request) from err
│ └ <Request('POST', '/embeddings')>
└ <class 'openai.APIConnectionError'>
openai.APIConnectionError: Connection error.
2026-04-07 15:56:51 | ERROR | load_today_memory_op.py:103 | Error retrieving today's memories: Connection error.
```
FlowLLM 的 openai_compatible_embedding_model.py 脚本中使用的环境变量是写死的
```python
self.api_key = api_key or os.getenv("FLOW_EMBEDDING_API_KEY", "")
self.base_url = base_url or os.getenv("FLOW_EMBEDDING_BASE_URL", "")
```
在 .env 文件添加上正确的环境变量即可
```
LLM_API_KEY=sk-***
LLM_BASE_URL=http://IP:PORT/v1
EMBEDDING_API_KEY=sk-***
EMBEDDING_BASE_URL=http://IP:PORT/v1
FLOW_EMBEDDING_API_KEY=sk-***
FLOW_EMBEDDING_BASE_URL=http://IP:PORT/v1
FLOW_LLM_API_KEY=sk-***
FLOW_LLM_BASE_URL=http://IP:PORT/v1
```
## 坑点2、不知道问题源头未解决
```
2026-04-08 10:33:27 | ERROR | base_embedding_model.py:126 | embedding model name=bge-m3 encounter error with e=('Error code: 400 - {\'error\': {\'message\': \'Model "bge-m3" does not support matryoshka representation, changing output dimensions will lead to poor results.\', \'type\': \'BadRequestError\', \'param\': \'\', \'code\': 400}}',)
Traceback (most recent call last):
File "/opt/reme/.venv/bin/reme", line 6, in <module>
sys.exit(main())
│ │ └ <function main at 0x73b6151dc9a0>
│ └ <built-in function exit>
└ <module 'sys' (built-in)>
File "/opt/reme/reme_ai/main.py", line 231, in main
app.run_service()
│ └ <function Application.run_service at 0x73b6151dd580>
└ <reme_ai.main.ReMeApp object at 0x73b62a862b70>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/application.py", line 384, in run_service
service.run()
│ └ <function HttpService.run at 0x73b6162abe20>
└ <flowllm.core.service.http_service.HttpService object at 0x73b6281913d0>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/service/http_service.py", line 123, in run
uvicorn.run(
│ └ <function run at 0x73b6284a5b20>
└ <module 'uvicorn' from '/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/__init__.py'>
File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/main.py", line 606, in run
server.run()
│ └ <function Server.run at 0x73b6284a5ee0>
└ <uvicorn.server.Server object at 0x73b614d549b0>
File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py", line 75, in run
return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())
│ │ │ │ │ │ └ <function Config.get_loop_factory at 0x73b6284a58a0>
│ │ │ │ │ └ <uvicorn.config.Config object at 0x73b614d8fcb0>
│ │ │ │ └ <uvicorn.server.Server object at 0x73b614d549b0>
│ │ │ └ None
│ │ └ <function Server.serve at 0x73b6284a5f80>
│ └ <uvicorn.server.Server object at 0x73b614d549b0>
└ <function run at 0x73b629f21ee0>
File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
return runner.run(main)
│ │ └ <coroutine object Server.serve at 0x73b614bf82e0>
│ └ <function Runner.run at 0x73b629f6f880>
└ <asyncio.runners.Runner object at 0x73b614d8cd70>
File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
│ │ │ └ <Task pending name='Task-4' coro=<Server.serve() running at /opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py:79...
│ │ └ <cyfunction Loop.run_until_complete at 0x73b614d81300>
│ └ <uvloop.Loop running=True closed=False debug=False>
└ <asyncio.runners.Runner object at 0x73b614d8cd70>
> File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/base_embedding_model.py", line 123, in async_get_embeddings
return await self._async_get_embeddings(input_text)
│ │ └ ['Xiao Bai, 29, apples, Hami melons']
│ └ <function OpenAICompatibleEmbeddingModel._async_get_embeddings at 0x73b626d7c400>
└ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x73b6153c5d90>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/openai_compatible_embedding_model.py", line 124, in _async_get_embeddings
completion = await self._async_client.embeddings.create(
│ │ │ └ <function AsyncEmbeddings.create at 0x73b611c89440>
│ │ └ <openai.resources.embeddings.AsyncEmbeddings object at 0x73b614c7a900>
│ └ <openai.AsyncOpenAI object at 0x73b61517d070>
└ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x73b6153c5d90>
File "/opt/reme/.venv/lib/python3.12/site-packages/openai/resources/embeddings.py", line 259, in create
return await self._post(
│ └ <bound method AsyncAPIClient.post of <openai.AsyncOpenAI object at 0x73b61517d070>>
└ <openai.resources.embeddings.AsyncEmbeddings object at 0x73b614c7a900>
File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1884, in post
return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
│ │ │ │ │ └ None
│ │ │ │ └ False
│ │ │ └ FinalRequestOptions(method='post', url='/embeddings', params={}, headers=NOT_GIVEN, max_retries=NOT_GIVEN, timeout=NOT_GIVEN,...
│ │ └ <class 'openai.types.create_embedding_response.CreateEmbeddingResponse'>
│ └ <function AsyncAPIClient.request at 0x73b626e13e20>
└ <openai.AsyncOpenAI object at 0x73b61517d070>
File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1669, in request
raise self._make_status_error_from_response(err.response) from None
│ └ <function BaseClient._make_status_error_from_response at 0x73b626e10fe0>
└ <openai.AsyncOpenAI object at 0x73b61517d070>
openai.BadRequestError: Error code: 400 - {'error': {'message': 'Model "bge-m3" does not support matryoshka representation, changing output dimensions will lead to poor results.', 'type': 'BadRequestError', 'param': '', 'code': 400}}
2026-04-08 10:33:27 | ERROR | base_async_op.py:190 | op=update_vector_store_op async execute failed, error=('Error code: 400 - {\'error\': {\'message\': \'Model "bge-m3" does not support matryoshka representation, changing output dimensions will lead to poor results.\', \'type\': \'BadRequestError\', \'param\': \'\', \'code\': 400}}',)
Traceback (most recent call last):
File "/opt/reme/.venv/bin/reme", line 6, in <module>
sys.exit(main())
│ │ └ <function main at 0x73b6151dc9a0>
│ └ <built-in function exit>
└ <module 'sys' (built-in)>
File "/opt/reme/reme_ai/main.py", line 231, in main
app.run_service()
│ └ <function Application.run_service at 0x73b6151dd580>
└ <reme_ai.main.ReMeApp object at 0x73b62a862b70>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/application.py", line 384, in run_service
service.run()
│ └ <function HttpService.run at 0x73b6162abe20>
└ <flowllm.core.service.http_service.HttpService object at 0x73b6281913d0>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/service/http_service.py", line 123, in run
uvicorn.run(
│ └ <function run at 0x73b6284a5b20>
└ <module 'uvicorn' from '/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/__init__.py'>
File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/main.py", line 606, in run
server.run()
│ └ <function Server.run at 0x73b6284a5ee0>
└ <uvicorn.server.Server object at 0x73b614d549b0>
File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py", line 75, in run
return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())
│ │ │ │ │ │ └ <function Config.get_loop_factory at 0x73b6284a58a0>
│ │ │ │ │ └ <uvicorn.config.Config object at 0x73b614d8fcb0>
│ │ │ │ └ <uvicorn.server.Server object at 0x73b614d549b0>
│ │ │ └ None
│ │ └ <function Server.serve at 0x73b6284a5f80>
│ └ <uvicorn.server.Server object at 0x73b614d549b0>
└ <function run at 0x73b629f21ee0>
File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
return runner.run(main)
│ │ └ <coroutine object Server.serve at 0x73b614bf82e0>
│ └ <function Runner.run at 0x73b629f6f880>
└ <asyncio.runners.Runner object at 0x73b614d8cd70>
File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
│ │ │ └ <Task pending name='Task-4' coro=<Server.serve() running at /opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py:79...
│ │ └ <cyfunction Loop.run_until_complete at 0x73b614d81300>
│ └ <uvloop.Loop running=True closed=False debug=False>
└ <asyncio.runners.Runner object at 0x73b614d8cd70>
File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi
result = await app( # type: ignore[func-returns-value]
└ <uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware object at 0x73b614d8e8a0>
File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
return await self.app(scope, receive, send)
│ │ │ │ └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614ce5e...
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
│ └ <fastapi.applications.FastAPI object at 0x73b61516aed0>
└ <uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware object at 0x73b614d8e8a0>
File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/applications.py", line 1163, in __call__
await super().__call__(scope, receive, send)
│ │ └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614ce5e...
│ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
└ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/applications.py", line 90, in __call__
await self.middleware_stack(scope, receive, send)
│ │ │ │ └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614ce5e...
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
│ └ <starlette.middleware.errors.ServerErrorMiddleware object at 0x73b614ce56a0>
└ <fastapi.applications.FastAPI object at 0x73b61516aed0>
File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in __call__
await self.app(scope, receive, _send)
│ │ │ │ └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x73b6148ef740>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
│ └ <starlette.middleware.cors.CORSMiddleware object at 0x73b614ce5640>
└ <starlette.middleware.errors.ServerErrorMiddleware object at 0x73b614ce56a0>
File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 88, in __call__
await self.app(scope, receive, send)
│ │ │ │ └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x73b6148ef740>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
│ └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x73b614e1e270>
└ <starlette.middleware.cors.CORSMiddleware object at 0x73b614ce5640>
File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
│ │ │ │ │ │ └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x73b6148ef740>
│ │ │ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ │ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
│ │ │ └ <starlette.requests.Request object at 0x73b614ce6120>
│ │ └ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x73b614e1d0a0>
│ └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x73b614e1e270>
└ <function wrap_app_handling_exceptions at 0x73b628876c00>
File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
│ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
└ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x73b614e1d0a0>
File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
│ └ <fastapi.routing.APIRouter object at 0x73b61517e090>
└ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x73b614e1d0a0>
File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/routing.py", line 660, in __call__
await self.middleware_stack(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
│ └ <bound method Router.app of <fastapi.routing.APIRouter object at 0x73b61517e090>>
└ <fastapi.routing.APIRouter object at 0x73b61517e090>
File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/routing.py", line 680, in app
await route.handle(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
│ └ <function Route.handle at 0x73b6288991c0>
└ APIRoute(path='/summary_personal_memory', name='execute_endpoint', methods=['POST'])
File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/routing.py", line 276, in handle
await self.app(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
│ └ <function request_response.<locals>.app at 0x73b614d40ae0>
└ APIRoute(path='/summary_personal_memory', name='execute_endpoint', methods=['POST'])
File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 134, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
│ │ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
│ │ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
│ │ └ <starlette.requests.Request object at 0x73b614ce5c70>
│ └ <function request_response.<locals>.app.<locals>.app at 0x73b6148ef920>
└ <function wrap_app_handling_exceptions at 0x73b628876c00>
File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148efa60>
│ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
└ <function request_response.<locals>.app.<locals>.app at 0x73b6148ef920>
File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 120, in app
response = await f(request)
│ └ <starlette.requests.Request object at 0x73b614ce5c70>
└ <function get_request_handler.<locals>.app at 0x73b614d17d80>
File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 674, in app
raw_response = await run_endpoint_function(
└ <function run_endpoint_function at 0x73b6162a8360>
File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 328, in run_endpoint_function
return await dependant.call(**values)
│ │ └ {'request': SummaryPersonalMemoryModel(query='', messages=[], workspace_id='example_user_id', metadata={}, trajectories=[{'me...
│ └ <function HttpService.integrate_tool_flow.<locals>.execute_endpoint at 0x73b614e02e80>
└ Dependant(path_params=[], query_params=[], header_params=[], cookie_params=[], body_params=[ModelField(field_info=Body(Pydant...
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/service/http_service.py", line 61, in execute_endpoint
return await flow.async_call(**request.model_dump(exclude_none=True))
│ │ │ └ <function BaseModel.model_dump at 0x73b629562480>
│ │ └ SummaryPersonalMemoryModel(query='', messages=[], workspace_id='example_user_id', metadata={}, trajectories=[{'messages': [{'...
│ └ <function BaseFlow.async_call at 0x73b6164e3e20>
└ <flowllm.core.flow.expression_tool_flow.ExpressionToolFlow object at 0x73b614e041d0>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/flow/base_flow.py", line 255, in async_call
result = await self._async_call(context=context)
│ │ └ FlowContext({'query': '', 'messages': [PersonalMemory(workspace_id='example_user_id', memory_id='56dc81c4a3a945fb9aaf8cc671bf...
│ └ <function BaseFlow._async_call at 0x73b6164e3d80>
└ <flowllm.core.flow.expression_tool_flow.ExpressionToolFlow object at 0x73b614e041d0>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/flow/base_flow.py", line 225, in _async_call
await flow_op.async_call(context=context)
│ │ └ FlowContext({'query': '', 'messages': [PersonalMemory(workspace_id='example_user_id', memory_id='56dc81c4a3a945fb9aaf8cc671bf...
│ └ <function BaseAsyncOp.async_call at 0x73b6164e22a0>
└ <flowllm.core.op.sequential_op.SequentialOp object at 0x73b611bb3200>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/op/base_async_op.py", line 185, in async_call
result = await self.async_execute()
│ └ <function SequentialOp.async_execute at 0x73b6164e37e0>
└ <flowllm.core.op.sequential_op.SequentialOp object at 0x73b611bb3200>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/op/sequential_op.py", line 51, in async_execute
result = await op.async_call(context=self.context)
│ │ │ └ FlowContext({'query': '', 'messages': [PersonalMemory(workspace_id='example_user_id', memory_id='56dc81c4a3a945fb9aaf8cc671bf...
│ │ └ <flowllm.core.op.sequential_op.SequentialOp object at 0x73b611bb3200>
│ └ <function BaseAsyncOp.async_call at 0x73b6164e22a0>
└ <reme_ai.vector_store.update_vector_store_op.UpdateVectorStoreOp object at 0x73b614ce7170>
> File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/op/base_async_op.py", line 185, in async_call
result = await self.async_execute()
│ └ <function UpdateVectorStoreOp.async_execute at 0x73b61504c9a0>
└ <reme_ai.vector_store.update_vector_store_op.UpdateVectorStoreOp object at 0x73b614ce7170>
File "/opt/reme/reme_ai/vector_store/update_vector_store_op.py", line 54, in async_execute
await self.vector_store.async_insert(nodes=insert_nodes, workspace_id=workspace_id)
 │ │ │ └ 'example_user_id'
 │ │ └ [VectorNode(unique_id='49dc2f8253d34deaa2e57c185cc62ac2', workspace_id='example_user_id', content='Xiao Bai, 29, apples, Hami...
 │ └ <property object at 0x73b6164dc900>
 └ <reme_ai.vector_store.update_vector_store_op.UpdateVectorStoreOp object at 0x73b614ce7170>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/local_vector_store.py", line 546, in async_insert
await super().async_insert(nodes, workspace_id, **kwargs)
│ │ └ {}
│ └ 'example_user_id'
└ [VectorNode(unique_id='49dc2f8253d34deaa2e57c185cc62ac2', workspace_id='example_user_id', content='Xiao Bai, 29, apples, Hami...
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/memory_vector_store.py", line 755, in async_insert
nodes = await self.async_get_node_embeddings(nodes)
│ │ └ [VectorNode(unique_id='49dc2f8253d34deaa2e57c185cc62ac2', workspace_id='example_user_id', content='Xiao Bai, 29, apples, Hami...
│ └ <function BaseVectorStore.async_get_node_embeddings at 0x73b616494360>
└ <flowllm.core.vector_store.local_vector_store.LocalVectorStore object at 0x73b616cca2a0>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/base_vector_store.py", line 91, in async_get_node_embeddings
return await self.embedding_model.async_get_node_embeddings(nodes)
│ │ │ └ [VectorNode(unique_id='49dc2f8253d34deaa2e57c185cc62ac2', workspace_id='example_user_id', content='Xiao Bai, 29, apples, Hami...
│ │ └ <function BaseEmbeddingModel.async_get_node_embeddings at 0x73b627423f60>
│ └ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x73b6153c5d90>
└ <flowllm.core.vector_store.local_vector_store.LocalVectorStore object at 0x73b616cca2a0>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/base_embedding_model.py", line 207, in async_get_node_embeddings
batch_results = await asyncio.gather(*batch_tasks)
│ │ └ [<coroutine object BaseEmbeddingModel.async_get_embeddings at 0x73b614c8ab40>]
│ └ <function gather at 0x73b629f5dee0>
└ <module 'asyncio' from '/usr/lib/python3.12/asyncio/__init__.py'>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/base_embedding_model.py", line 129, in async_get_embeddings
raise e
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/base_embedding_model.py", line 123, in async_get_embeddings
return await self._async_get_embeddings(input_text)
│ │ └ ['Xiao Bai, 29, apples, Hami melons']
│ └ <function OpenAICompatibleEmbeddingModel._async_get_embeddings at 0x73b626d7c400>
└ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x73b6153c5d90>
File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/openai_compatible_embedding_model.py", line 124, in _async_get_embeddings
completion = await self._async_client.embeddings.create(
│ │ │ └ <function AsyncEmbeddings.create at 0x73b611c89440>
│ │ └ <openai.resources.embeddings.AsyncEmbeddings object at 0x73b614c7a900>
│ └ <openai.AsyncOpenAI object at 0x73b61517d070>
└ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x73b6153c5d90>
File "/opt/reme/.venv/lib/python3.12/site-packages/openai/resources/embeddings.py", line 259, in create
return await self._post(
│ └ <bound method AsyncAPIClient.post of <openai.AsyncOpenAI object at 0x73b61517d070>>
└ <openai.resources.embeddings.AsyncEmbeddings object at 0x73b614c7a900>
File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1884, in post
return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
│ │ │ │ │ └ None
│ │ │ │ └ False
│ │ │ └ FinalRequestOptions(method='post', url='/embeddings', params={}, headers=NOT_GIVEN, max_retries=NOT_GIVEN, timeout=NOT_GIVEN,...
│ │ └ <class 'openai.types.create_embedding_response.CreateEmbeddingResponse'>
│ └ <function AsyncAPIClient.request at 0x73b626e13e20>
└ <openai.AsyncOpenAI object at 0x73b61517d070>
File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1669, in request
raise self._make_status_error_from_response(err.response) from None
│ └ <function BaseClient._make_status_error_from_response at 0x73b626e10fe0>
└ <openai.AsyncOpenAI object at 0x73b61517d070>
openai.BadRequestError: Error code: 400 - {'error': {'message': 'Model "bge-m3" does not support matryoshka representation, changing output dimensions will lead to poor results.', 'type': 'BadRequestError', 'param': '', 'code': 400}}
```