ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Onyx Terraform Provider 数据源 `onyx_llm_providers`:查询全部 LLM Provider 与部署默认模型的完整指南

Onyx Terraform Provider 数据源 `onyx_llm_providers`:查询全部 LLM Provider 与部署默认模型的完整指南 Onyx Terraform Provider 数据源onyx_llm_providers查询全部 LLM Provider 与部署默认模型的完整指南【免费下载链接】danswerOpen Source AI Platform - AI Chat with advanced features that works with every LLM项目地址: https://gitcode.com/GitHub_Trending/da/dansweronyx_llm_providers是 Terraform Provider for Onyx 提供的一个只读数据源Data Source用于一次性读取 Onyx 部署中所有已配置的 LLM Provider以及三个部署级默认模型文本、视觉、会话自动命名。它是编写 IaC 时做模型路由、默认模型引用、依赖编排与故障排查的入口。读完本文你将掌握该数据源的完整 Schema、每个属性的来源与含义、与后端 API 的对应关系、与onyx_llm_provider资源及onyx_llm_provider_default资源的协同用法以及如何编写可落地的 Terraform 配置和测试。数据源概览与设计定位在 Terraform Provider for Onyx 中data.onyx_llm_providers对应后端管理接口GET /admin/llm/provider见 backend/onyx/server/manage/llm/api.py其作用是返回部署中全部LLM ProviderOpenAI、Anthropic、Azure、Bedrock、Vertex AI、Ollama 等的非敏感摘要返回当前部署的默认模型文本、视觉、会话自动命名刻意隐藏敏感字段api_key与custom_config不会出现在结果中。该数据源在 Provider 中被注册为onyx_llm_providers见 terraform-provider-onyx/internal/provider/provider.go 的NewLLMProvidersDataSource与可写的onyx_llm_provider资源、onyx_llm_provider_default资源单例管理部署默认模型形成读-写互补关系。README 中将其定位为Read-only list of providers defaults见 terraform-provider-onyx/README.md。最小可用示例官方文档给出的用法极其简洁声明一个空的数据源然后在任意位置引用它的属性。data onyx_llm_providers all {} output default_model { value data.onyx_llm_providers.all.default_text }该示例同时收录在 terraform-provider-onyx/examples/data-sources/onyx_llm_providers/data-source.tf是 tfplugindocs 生成文档时引用的标准示例。几点实操细节数据源不需要任何必填参数所有属性均为Computed只读output块直接引用default_text对象terraform apply后会打印出形如{ model_name gpt-5-mini, provider_id 1 }的结构数据源的读取发生在terraform plan/apply时Read方法之后引用它的资源会按依赖顺序正确编排。Schema 全解顶层属性数据源的 Schema 在 terraform-provider-onyx/internal/provider/llm_providers_data_source.go 中定义顶层共 4 个只读属性属性类型说明providersAttributes List全部 LLM Provider 的摘要列表见下节嵌套 Schemadefault_textAttributes对象部署默认文本模型未设置时为nulldefault_visionAttributes对象部署默认视觉模型未设置时为nulldefault_chat_namingAttributes对象部署默认会话自动命名模型未设置时为null其中三个默认模型使用同一个嵌套结构源码中以defaultModelAttribute(kind)工厂函数生成每个对象包含两个字段字段类型说明provider_idString承载该默认模型的 Provider 的数值 id字符串形式model_nameString模型名称如gpt-5-mini底层数据来源DefaultModel三个默认模型对象直接映射后端响应的default_text/default_vision/default_chat_naming字段对应 Go 客户端结构体 terraform-provider-onyx/internal/client/llm_provider.go 中的DefaultModeltype DefaultModel struct { ProviderID int64 json:provider_id ModelName string json:model_name }在数据源实现中defaultModelObjectllm_providers_data_source.go负责把*DefaultModel转成 Terraform 对象若后端返回null未设置则返回types.ObjectNullTerraform 侧表现为null否则填充provider_id转为字符串与model_name。需要留意的是当前 Provider 的数据源版本只暴露三个默认模型。而后端LLMProviderResponse.from_models实际还会返回default_craftCraft 默认模型等字段见 backend/onyx/server/manage/llm/api.py。Go 客户端LLMProviderList也只声明了前三个字段多余响应字段被忽略源码注释明确说明Only fields the provider consumes are declared; extra response fields are ignored。因此若你在最新后端上设置了 Craft 默认模型该数据源目前不会暴露它——这是设计边界不是 bug。Schema 全解providers 嵌套 Schemaproviders列表中的每个元素包含 9 个只读字段全部为Computed字段类型说明idStringProvider 数值 id字符串形式可用于关联资源nameStringProvider 配置的显示名称provider_typeStringLiteLLM Provider 键如openai、anthropic、azure、bedrock、vertex_ai、ollamaapi_baseString自定义 API Base URL如 Azure 或自托管网关api_versionStringAPI 版本通常用于 Azuredeployment_nameString部署名通常用于 Azureis_publicBoolean该 Provider 是否对所有用户可用is_auto_modeBoolean是否处于 Onyx Auto 模式模型列表由 Onyx 托管model_namesSet of String该 Provider 上启用的全部模型名称集合底层实现摘要模型与模型名提取这些字段来自 Go 客户端中的LLMProviderViewterraform-provider-onyx/internal/client/llm_provider.go数据源读取时逐个转换为llmProviderSummaryModelllm_providers_data_source.go。其中model_names并非后端单独返回的字段而是数据源从每个 Provider 的model_configurations列表中抽取每个模型的name汇总成集合见 llm_providers_data_source.gonames : make([]string, 0, len(p.ModelConfigurations)) for _, mc : range p.ModelConfigurations { names append(names, mc.Name) }这解释了为什么model_names是去重无序的 Set 而非 List。权限与过滤语义数据源Read调用client.ListLLMProviders对应 HTTP 请求GET /admin/llm/provider?include_image_gentrue见 terraform-provider-onyx/internal/client/llm_provider.go。这里有一个容易被忽略的重要细节Provider 故意传了include_image_gentrue而后端该参数默认为Falsebackend/onyx/server/manage/llm/api.py 中exclude_image_generation_providersnot include_image_gen。也就是说Provider 的数据源返回的是包含图片生成 Provider的完整列表若不加该参数图片生成类 Provider 会被后端过滤掉并被视为已删除导致数据源视图不完整。代码注释也点明了这一点include_image_gentrue, or image-gen providers read as deleted.同时该接口需要Permission.MANAGE_LLMS权限require_permission(Permission.MANAGE_LLMS)因此用于运行 Terraform 的 API Key 必须拥有管理 LLM 的权限通常是 Admin 组的 key见 terraform-provider-onyx/README.md。与资源类别的协同用法数据源最有价值的用法不是单独查询而是与其他资源配合实现依赖编排与动态引用。这里给出两个完整场景。场景一动态引用默认模型给外部系统假设你想把当前部署的默认文本模型输出给 CI 或下游系统data onyx_llm_providers all {} output default_text_model { value data.onyx_llm_providers.all.default_text.model_name } output default_text_provider { value data.onyx_llm_providers.all.default_text.provider_id } # 条件表达式默认视觉模型未设置时给出提示 output vision_note { value data.onyx_llm_providers.all.default_vision null ? No default vision model configured : data.onyx_llm_providers.all.default_vision.model_name }场景二按 provider_type 过滤出可用模型由于providers是列表、model_names是集合可以用for表达式按类型筛选data onyx_llm_providers all {} # 找出所有 OpenAI 类型 provider 的模型名扁平化 output openai_models { value toset(flatten([ for p in data.onyx_llm_providers.all.providers : p.model_names if p.provider_type openai ])) }场景三与onyx_llm_provider/onyx_llm_provider_default配合可写资源onyx_llm_provider负责创建/更新 Provider 及其model_configurations完整模型列表Schema 见 terraform-provider-onyx/internal/provider/llm_provider_resource.go单例资源onyx_llm_provider_default负责设置部署默认文本/视觉模型。典型组合是resource onyx_llm_provider openai { name openai provider_type openai api_key_wo var.openai_api_key api_key_wo_version 1 model_configurations [{ name gpt-5-mini }] } resource onyx_llm_provider_default default { depends_on [onyx_llm_provider.openai] # 指向上面创建的 provider default_text { provider_id onyx_llm_provider.openai.id model_name gpt-5-mini } } data onyx_llm_providers all { depends_on [onyx_llm_provider_default.default] } output effective_default { value data.onyx_llm_providers.all.default_text }关于写侧的三个关键行为对理解数据源读到的内容至关重要详见 terraform-provider-onyx/internal/provider/llm_provider_resource.go 的 MarkdownDescriptionmodel_configurations是完整记录列表配置中省略的模型会在 apply 时被服务端删除如果删掉的是当前部署默认模型校验会失败——需要先用onyx_llm_provider_default重新指定默认模型api_key与custom_config是敏感字段API 读取时会被掩码见后端_mask_provider_credentialsbackend/onyx/server/manage/llm/api.py因此数据源永远看不到它们Terraform 也无法据此检测越权变更的漂移Auto 模式is_auto_mode true下模型列表由 Onyx 托管Terraform 不再对列表做漂移检查。因此数据源中is_auto_mode字段对判断模型列表是否为 Onyx 托管很有用。场景四用数据源做漂移/状态核对由于数据源每次plan/apply都会重新拉取后端真实状态可以把它的输出与某个资源声明做断言式对比帮助定位为何 plan 显示漂移data onyx_llm_providers all {} locals { expected onyx_llm_provider.openai.model_configurations[*].name actual [for p in data.onyx_llm_providers.all.providers : p.model_names if p.id onyx_llm_provider.openai.id][0] } output model_list_diverges { value sort(local.expected) ! sort(tolist(local.actual)) }测试与验证该数据源有对应的接受测试AccTest见 terraform-provider-onyx/internal/provider/data_sources_test.goresource onyx_llm_provider ds_seed { name tf-acc-ds-seed provider_type openai api_key sk-tf-acc-fake-key model_configurations [ { name gpt-5-mini }, ] } data onyx_llm_providers all { depends_on [onyx_llm_provider.ds_seed] }测试先创建一个 Provider 保证数据源至少有一行数据然后断言providers.#列表非空、providers.0.id、providers.0.provider_type均已设置。这说明该数据源是真实 CRUD 闭环的一部分先写后读读到的内容就是 API 返回的真实状态。本地验证方式无需 Onyx 部署即可跑通单元测试go test ./... # 在 terraform-provider-onyx/ 目录下无 TF_ACC 时接受测试自动跳过若要对真实部署运行接受测试参考 terraform-provider-onyx/README.mdTF_ACC1 ONYX_TF_ACC_SERVER_URLhttp://localhost:8080 go test ./internal/provider/ -v常见问题与设计边界1. 为什么读不到api_key/custom_config这是刻意设计。数据源顶层描述明确写着 Secret fields (api_key, custom_config) are not exposed见 llm_providers_data_source.go后端在返回前调用_mask_provider_credentials掩码。因此数据源适合做非敏感信息的发现与编排敏感信息只能通过可写资源api_key/api_key_wo等下发且一旦写入 API读取时永远拿不到原文。2. 未设置默认模型时返回什么null。数据源实现中defaultModelObject(nil)返回types.ObjectNull所以可以用data.onyx_llm_providers.all.default_text null判断未设置配合条件表达式输出提示或跳过依赖。3. 数据源和资源看到的模型列表一致吗基本一致但有一个已知偏差Provider 的 READMEterraform-provider-onyx/README.md明确说明——模型列表读取的是 API 的展示视图display view会隐藏过时模型和带日期后缀的重复模型所以任何写操作都无法保留 API 未返回的行管理员 UI 行为相同。这意味着数据源的model_names也可能不包含被展示视图隐藏的模型。4. 什么时候providers会为空当部署中没有任何 LLM Provider 时例如全新部署尚未配置模型。数据源返回空列表而非报错引用它的资源需要自行处理空列表情况。另外需要注意后端列表接口默认排除图片生成 Provider而 Provider 的数据源传了include_image_gentrue所以即使只有图片生成 Provider也会出现在列表中。延伸阅读数据源完整实现terraform-provider-onyx/internal/provider/llm_providers_data_source.goGo 客户端API 契约、掩码语义terraform-provider-onyx/internal/client/llm_provider.go可写 Provider 资源创建/更新/删除、Auto 模式、敏感字段处理terraform-provider-onyx/internal/provider/llm_provider_resource.go后端 API 实现权限、掩码、默认模型组装backend/onyx/server/manage/llm/api.py接受测试示例terraform-provider-onyx/internal/provider/data_sources_test.goProvider 认证与 API Key 获取terraform-provider-onyx/README.md【免费下载链接】danswerOpen Source AI Platform - AI Chat with advanced features that works with every LLM项目地址: https://gitcode.com/GitHub_Trending/da/danswer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表