📎 配套脚本附件正文未内嵌 · 共 17 个 · 点开可在线查看
📚 另需公共库(正文未重复内嵌,点名字直接看):_agent_cfg.py、_bootstrap.py、_config.py、_plugin_util.py
📂 查看全部 761 个脚本附件 →
⚠️ 脚本内含明文凭据(与本页正文一致),请勿在公网环境直接运行。
Dify · 专题二

Xinference 运行 bge-m3

容器起来 ≠ 模型在跑。步骤未改,代码块已换成完整程序。

Dify_专题二_Xinference运行bge-m3_cursor.md

这是基于原文生成的 Cursor 版文档。

原文件未改动;本版只做三件事:统一阅读入口、修正已审出的明显问题、补充更适合快速排障的提示。

Cursor 版修订说明

阅读提示

运行环境:业务脚本均在 207 固定目录 /opt/workbuddy 执行,Python 为 /usr/bin/python3。 Windows 开发机仅保留 _probe_* 调试脚本;同步命令:python scripts_cursor/完整代码约定/00_部署_workbuddy到207.py。


原文主体(已纳入 Cursor 版纠错)

专题二:Xinference 平台如何成功运行 bge-m3 模型

阅读导航(何时打开 · 报错往哪查)

本文是单点修复/排障专题,配合《安装配置手册》使用;下文实战步骤与代码全部保留,此处只做索引。

现象优先看本文还可能是
Xinference 容器在跑但无模型§0、§四 launch安装手册步骤 8
launch 失败 / 无 embedding§二 依赖pip sentence-transformers
Dify 测 embedding 失败§六 对接URL 勿带 /v1
知识库索引失败§五 验证 1024 维专题六 weaviate

专题目标:讲清楚 Xinference 是怎么把 bge-m3 跑起来的——从容器部署、依赖安装、显式启动模型,到验证它在对外服务。涉及的所有命令、配置、代码都直接写在文中。

环境:Xinference 跑在 192.168.110.207:9997,bge-m3 的 model_uid 固定为 bge-m3,供 Dify 当作默认 Embedding 使用。


0. 一个必须先理解的点:容器起来 ≠ 模型在跑

Xinference 是一个模型调度/推理服务平台。启动 Xinference 容器只是把"调度器"拉起来了,bge-m3 此时还没有被加载。要真正对外提供 embedding 服务,必须再显式启动(launch)一次模型——Xinference 才会分配资源、把权重加载进内存/显存,并注册成一个可调用实例。

所以"成功运行 bge-m3" = Xinference 容器运行中 + bge-m3 实例状态为 running。下面按这个链路讲。


一、部署 Xinference 容器

完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.sh

bash
#!/usr/bin/env bash
set -euo pipefail

docker run -d \
  --name xinference \
  --restart always \
  -p 9997:9997 \
  -e HF_ENDPOINT=https://hf-mirror.com \
  xprobe/xinference:latest

配置说明:

启动后确认服务在线: 完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.sh

bash
#!/usr/bin/env bash
set -euo pipefail

docker logs -f xinference        # 看到 Uvicorn running on http://0.0.0.0:9997 即就绪

二、安装 bge-m3 运行依赖(容器内)

bge-m3 依赖 sentence-transformers(底层用 transformers + FlagEmbedding)。Xinference 基础镜像不一定预装,必须进容器补装,否则启动模型会失败:

完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_03.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_03.sh

bash
#!/usr/bin/env bash
set -euo pipefail

docker exec -it xinference pip install sentence-transformers

国内环境若 pip 也慢,可先设镜像:docker exec -it xinference pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple,再装。

装完确认: 完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_04.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_04.sh

bash
#!/usr/bin/env bash
set -euo pipefail

docker exec -it xinference python -c "import sentence_transformers; print(sentence_transformers.__version__)"

三、创建 Xinference 管理员账号

Xinference 启用了鉴权,需先建账号(本文 admin / admin1234)。可通过 Web UI 注册,也可通过内置管理接口。建好后在 Dify 对接时填入对应 API Key。

Dify 对接用的 API Key 形如 xf-K8H3LiS27H4188XdOyWJj74MWMOlIR9tZbiybDbxbSas7eAI,在 Xinference 用户中心生成。


四、启动 bge-m3 模型(三种等价方式)

不管用哪种方式,核心都是向 Xinference 提交一次"启动 embedding 模型"的请求,并把 model_uid 固定为 bge-m3——Dify 之后要靠这个 uid 匹配模型。

方式 A · Web UI(最直观)

  1. 浏览器打开 http://192.168.110.207:9997,用 admin / admin1234 登录。
  2. 左侧 Models → Launch Model。
  3. 搜索框输入 bge-m3,在结果里选中(模型类型显示为 embedding)。
  4. 展开高级选项,把 Model UID 设为 bge-m3(务必与此一致)。
  5. 点 Launch,等待状态从 pending → running(首次会拉权重,已配 HF 镜像源)。
  6. Models 列表出现 bge-m3 行、状态 running,即启动成功。

方式 B · REST API(可脚本化,推荐用于自动化)

启动(必须带 model_type: "embedding"):

完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_05.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_05.sh

bash
#!/usr/bin/env bash
set -euo pipefail

curl -X POST 'http://192.168.110.207:9997/v1/models' \
  -H 'Content-Type: application/json' \
  -d '{
        "model_uid": "bge-m3",
        "model_name": "bge-m3",
        "model_type": "embedding"
      }'

可选的进阶启动参数(按需添加到 body):

json
{
  "model_uid": "bge-m3",
  "model_name": "bge-m3",
  "model_type": "embedding",
  "model_format": "pytorch",
  "model_engine": "default",
  "n_gpu": "auto"
}

返回 JSON 里会带回 model_uid(即 bge-m3),表示已接受启动任务。

方式 C · Python 客户端

完整程序:/opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.py

运行/引用:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.py

python
from xinference.client import Client

client = Client("http://192.168.110.207:9997")
# 返回启动后的 model_uid
uid = client.launch_model(
    model_uid="bge-m3",
    model_name="bge-m3",
    model_type="embedding",
)
print("launched:", uid)

五、验证 bge-m3 确实在对外服务

1. 看模型列表里有没有它(且 running): 完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_06.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_06.sh

bash
#!/usr/bin/env bash
set -euo pipefail

curl 'http://192.168.110.207:9997/v1/models'
# 期望返回里含 "bge-m3"

2. 实跑一次 embedding,确认真能出向量(最关键的一步): 完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_07.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_07.sh

bash
#!/usr/bin/env bash
set -euo pipefail

curl -X POST 'http://192.168.110.207:9997/v1/embeddings' \
  -H 'Content-Type: application/json' \
  -d '{
        "model": "bge-m3",
        "input": "这是一个测试文本"
      }'

期望返回:

json
{
  "model": "bge-m3",
  "data": [
    { "object": "embedding", "index": 0, "embedding": [0.012, -0.034, ...] }
  ],
  "usage": { "prompt_tokens": 8, "total_tokens": 8 }
}

embedding 数组长度 = bge-m3 的向量维度(1024 维),能返回即"成功运行"。

补充:bge-m3 还支持重排(rerank)能力。若需要,可另启动一个 model_type: "rerank" 的实例(uid 如 bge-reranker),在 Dify 知识库召回后做精排。本文聚焦 embedding,rerank 为可选扩展。


六、在 Dify 中对接(衔接"让知识库用上它")

Xinference 里 bge-m3 跑起来后,到 Dify 接入:

控制台 → 模型供应商 → 添加 Xinference:

本次实操等价控制台 API(模型供应商页找不到或想自动化时用这一段;路径与专题十三加 Rerank 相同,只是 model_type=embedding):

完整程序:/opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.py

运行/引用:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.py

python
from dify_api import Dify, pp

XF_KEY = "xf-K8H3LiS27H4188XdOyWJj74MWMOlIR9tZbiybDbxbSas7eAI"
d = Dify("38205036@qq.com", "Difyai123456")
d.login()

body = {
    "model": "bge-m3",
    "model_type": "embedding",
    "credentials": {
        "server_url": "http://192.168.110.207:9997",
        "model_uid": "bge-m3",
        "api_key": XF_KEY,
        "invoke_timeout": "60",
        "max_retries": "3",
    },
    "name": "bge-m3",
}
r = d.post(
    "/workspaces/current/model-providers/langgenius/xinference/xinference/models/credentials",
    body,
)
pp("add embedding cred", r)   # 期望 200/201

r = d.get("/workspaces/current/models/model-types/text-embedding")
pp("embedding models", r)

r = d.post(
    "/workspaces/current/default-model",
    body={
        "model_settings": [{
            "model_type": "text-embedding",
            "provider": "langgenius/xinference/xinference",
            "model": "bge-m3",
        }]
    },
)
pp("set default embedding", r)
d.close()

server_url 不要带 /v1。验证:model-types/text-embedding 里 bge-m3 为 active。

建知识库时选 bge-m3 做 high_quality 索引,命中测试返回相关 chunk,整条 RAG 链路即通。


七、关键配置要点(务必照做)

配置项正确做法说明
HF_ENDPOINThttps://hf-mirror.com国内拉权重必须,否则卡在拉取/超时
sentence-transformers容器内必须 pip install缺它 bge-m3 启动失败
model_uid固定 bge-m3Dify 靠 uid 匹配,不一致则选不到
服务器 URL(Dify 侧)不带 /v1插件会自己拼 /v1,多写会 404
model_typeembedding启动时必须声明,否则按默认类型处理
GPU(可选)--gpus all + n_gpu:auto大文档索引更快;CPU 也能跑

八、落地清单


九、实战记录(本次部署真实遇到的情况)

本次真实遇到的坑,核心是"容器在跑 ≠ 模型在跑"。按统一维度拆解:现象 → 定位 → 改了什么 → 怎么重启 → 怎么看日志 → 怎么判断正常。

9.1 现象

首次建「播城内部知识库」时索引失败 / 检索为空,知识库命中测试无结果。

9.2 定位

完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_08.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_08.sh

bash
#!/usr/bin/env bash
set -euo pipefail

curl 'http://192.168.110.207:9997/v1/models'     # 列表里没有 bge-m3 —— 果然没起
docker logs xinference 2>&1 | tail -20           # 一度发现 launch 失败,缺 sentence-transformers

根因:bge-m3 必须显式 launch 才变 running 实例(分配资源、加载权重);且容器里缺 sentence-transformers 导致 launch 直接失败。

9.3 改了什么(逐条命令)

  1. 容器内补装依赖:

完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_09.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_09.sh

bash
#!/usr/bin/env bash
set -euo pipefail

   docker exec -it xinference pip install sentence-transformers
   
  1. 设国内镜像源(拉权重用):

完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_10.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_10.sh

bash
#!/usr/bin/env bash
set -euo pipefail

   docker exec -it xinference pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
   

(HF_ENDPOINT=https://hf-mirror.com 已写在 docker run -e 里,确保没漏)

  1. REST 启动 bge-m3,Model UID 固定 bge-m3:

完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_11.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_11.sh

bash
#!/usr/bin/env bash
set -euo pipefail

   curl -X POST 'http://192.168.110.207:9997/v1/models' \
     -H 'Content-Type: application/json' \
     -d '{"model_uid":"bge-m3","model_name":"bge-m3","model_type":"embedding"}'
   

9.4 怎么看日志 / 判断启动

完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_12.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_12.sh

bash
#!/usr/bin/env bash
set -euo pipefail

docker logs -f xinference                      # 看 Uvicorn running on http://0.0.0.0:9997 即调度器就绪
curl 'http://192.168.110.207:9997/v1/models'   # 列表含 bge-m3 且状态 running

9.5 怎么判断正常(最关键:实跑 embedding)

完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_13.sh

运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_13.sh

bash
#!/usr/bin/env bash
set -euo pipefail

curl -X POST 'http://192.168.110.207:9997/v1/embeddings' \
  -H 'Content-Type: application/json' \
  -d '{"model":"bge-m3","input":"这是一个测试文本"}'

返回 embedding 数组长度 = 1024 维,即"成功运行"。

9.6 Dify 侧收尾

服务器 URL 不带 /v1、model_uid=bge-m3、设为默认 Embedding;知识库重建后命中测试正常。

连锁影响:这次 bge-m3 实例掉线,也正是专题三第八节"Agent 选不到已有知识库"的真实根因——两者同源(embedding provider 不可达,Dify 就隐藏该知识库)。

一句话对照:专题二前面是"三种启动方式的方法论",本节是"本次 bge-m3 没随容器自起、导致知识库建不出、又牵连 Agent 选不到"的真实经过。


本专题 Python 程序一览

| 文件 | 用途 | |---|---|| 专题二_01_确认Xinference与bge-m3.py | 专题二 · 步骤 0:确认 Xinference 容器与 bge-m3 是否在跑。 | | 专题二_02_启动bge-m3.py | 专题二 · 步骤 4B:REST 启动 bge-m3(model_uid 固定 bge-m3)。 | | 专题二_03_验证embedding.py | 专题二 · 步骤 5:实跑 embedding,确认 1024 维向量。 | | 专题二_04_添加Dify_Embedding凭据.py | 专题二 · 步骤 6:Dify 控制台 API 添加 bge-m3 Embedding 凭据。 | | 专题二_05_设默认Embedding.py | 专题二 · 步骤 6:设 bge-m3 为默认 Embedding。 |

专题二_01_确认Xinference与bge-m3.py

运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_01_确认Xinference与bge-m3.py

完整补丁:patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.py

运行/引用:见 patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.py

python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题二 · 步骤 0:确认 Xinference 容器与 bge-m3 是否在跑。"""
from __future__ import annotations

import json
import sys

import _bootstrap  # noqa: F401
import _config as C
from dify_api import Dify


def main() -> int:
    d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD)
    try:
        print("=== 1/3 容器状态 ===")
        for cmd in [
            "docker ps --filter name=%s --format '{{.Names}} {{.Status}}'" % C.XF_CONTAINER,
            "docker logs %s 2>&1 | tail -5" % C.XF_CONTAINER,
        ]:
            out, err = d.sh(cmd)
            print(out or err)

        print("\n=== 2/3 GET /v1/models(需 Bearer Key)===")
        out, err = d.sh(
            "curl -s -H 'Authorization: Bearer %s' %s/v1/models" % (C.XF_KEY, C.XF_URL)
        )
        print(out or err)
        has_bge = C.EMBED_MODEL in (out or "")
        print("bge-m3 in list:", has_bge)

        print("\n=== 3/3 sentence-transformers ===")
        out, err = d.sh(
            "docker exec %s python -c \"import sentence_transformers; print(sentence_transformers.__version__)\""
            % C.XF_CONTAINER
        )
        print(out or err)
        if not has_bge:
            print("[WARN] bge-m3 未 running — 运行 专题二_02_启动bge-m3.py")
            return 1
        return 0
    finally:
        d.close()


if __name__ == "__main__":
    sys.exit(main())

专题二_02_启动bge-m3.py

运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_02_启动bge-m3.py

完整补丁:patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.py

运行/引用:见 patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.py

python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题二 · 步骤 4B:REST 启动 bge-m3(model_uid 固定 bge-m3)。"""
from __future__ import annotations

import json
import sys

import _bootstrap  # noqa: F401
import _config as C
from dify_api import Dify


def main() -> int:
    d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD)
    try:
        body = json.dumps({
            "model_uid": C.EMBED_MODEL,
            "model_name": C.EMBED_MODEL,
            "model_type": "embedding",
        })
        out, err = d.sh(
            "curl -s -X POST '%s/v1/models' -H 'Authorization: Bearer %s' "
            "-H 'Content-Type: application/json' -d '%s'"
            % (C.XF_URL, C.XF_KEY, body)
        )
        print("launch response:", out or err)

        print("\n=== 等待列表出现 bge-m3 ===")
        out2, err2 = d.sh(
            "curl -s -H 'Authorization: Bearer %s' %s/v1/models" % (C.XF_KEY, C.XF_URL)
        )
        print(out2 or err2)
        return 0 if C.EMBED_MODEL in (out2 or "") else 1
    finally:
        d.close()


if __name__ == "__main__":
    sys.exit(main())

专题二_03_验证embedding.py

运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_03_验证embedding.py

完整补丁:patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_03.py

运行/引用:见 patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_03.py

python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题二 · 步骤 5:实跑 embedding,确认 1024 维向量。"""
from __future__ import annotations

import json
import sys

import _bootstrap  # noqa: F401
import _config as C
from dify_api import Dify


def main() -> int:
    d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD)
    try:
        body = json.dumps({"model": C.EMBED_MODEL, "input": "这是一个测试文本"})
        out, err = d.sh(
            "curl -s -X POST '%s/v1/embeddings' -H 'Authorization: Bearer %s' "
            "-H 'Content-Type: application/json' -d '%s'"
            % (C.XF_URL, C.XF_KEY, body)
        )
        print(out or err)
        try:
            data = json.loads(out)
            emb = data["data"][0]["embedding"]
            print("embedding dim:", len(emb))
            if len(emb) != 1024:
                print("[WARN] 期望 1024 维")
                return 1
        except Exception as e:
            print("[ERR] 解析失败:", e)
            return 1
        return 0
    finally:
        d.close()


if __name__ == "__main__":
    sys.exit(main())

专题二_04_添加Dify_Embedding凭据.py

运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_04_添加Dify_Embedding凭据.py

完整补丁:patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_04.py

运行/引用:见 patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_04.py

python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题二 · 步骤 6:Dify 控制台 API 添加 bge-m3 Embedding 凭据。"""
from __future__ import annotations

import sys

import _bootstrap  # noqa: F401
import _config as C
from dify_api import Dify, pp


def main() -> int:
    d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD)
    try:
        d.login()
        body = {
            "model": C.EMBED_MODEL,
            "model_type": "embedding",
            "credentials": {
                "server_url": C.XF_URL,
                "model_uid": C.EMBED_MODEL,
                "api_key": C.XF_KEY,
                "invoke_timeout": "60",
                "max_retries": "3",
            },
            "name": C.EMBED_MODEL,
        }
        path = "/workspaces/current/model-providers/%s/models/credentials" % C.XINFERENCE_PROVIDER
        r = d.post(path, body)
        pp("add embedding cred", r)
        if r.get("code") not in ("200", "201"):
            r = d.req("PUT", path, body=body)
            pp("put embedding cred", r)
        r2 = d.get("/workspaces/current/models/model-types/text-embedding")
        pp("embedding models", r2)
        return 0 if r.get("code") in ("200", "201") else 1
    finally:
        d.close()


if __name__ == "__main__":
    sys.exit(main())

专题二_05_设默认Embedding.py

运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_05_设默认Embedding.py

完整补丁:patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_05.py

运行/引用:见 patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_05.py

python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题二 · 步骤 6:设 bge-m3 为默认 Embedding。"""
from __future__ import annotations

import sys

import _bootstrap  # noqa: F401
import _config as C
from dify_api import Dify, pp


def main() -> int:
    d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD)
    try:
        d.login()
        r = d.post(
            "/workspaces/current/default-model",
            body={
                "model_settings": [{
                    "model_type": "text-embedding",
                    "provider": C.XINFERENCE_PROVIDER,
                    "model": C.EMBED_MODEL,
                }]
            },
        )
        pp("set default embedding", r)
        r2 = d.get("/workspaces/current/models/model-types/text-embedding")
        pp("embedding list", r2)
        return 0 if r.get("code") in ("200", "201") else 1
    finally:
        d.close()


if __name__ == "__main__":
    sys.exit(main())