默认阈值写回了调用方字典
`update_gemini_kwargs()` 虽然复制了最外层请求参数,却继续复用调用者传入的嵌套 `safety_settings` 映射;合并 Gemini 默认阈值时会原地修改应用持有的配置,使同一字典在后续请求中携带 Instructor 写入的状态。

基于 Pydantic 的 LLM 结构化输出框架,将响应模型、验证、重试与多提供商适配统一到类型安全的 Python 接口,支持 OpenAI、Anthropic、Gemini、Bedrock 等主流模型服务。
外层字典被复制后,嵌套映射仍可能指向同一个对象;真正的输入隔离必须切断这条别名关系。
id: config_Aresult = kwargs.copy()nested mappingconfig_A ↔ config_Aconfig_A→ copy →OUTPUTconfig_B`update_gemini_kwargs()` 虽然复制了最外层请求参数,却继续复用调用者传入的嵌套 `safety_settings` 映射;合并 Gemini 默认阈值时会原地修改应用持有的配置,使同一字典在后续请求中携带 Instructor 写入的状态。
外层浅拷贝只隔离字典壳,不能改变嵌套可变对象仍被共享的事实。请求规范化应把调用方输入视为只读:既要把默认阈值写入即将发送的请求,也必须保证返回映射与原对象不再别名,避免一次调用改变之后的应用行为。
在应用默认阈值前显式复制 `safety_settings`,再把独立映射写回结果;回归测试同时锁定三条契约:原始配置保持不变、输出不与输入共享对象身份、发送给 Gemini 的默认安全阈值仍然完整生效。
调用者传入的安全配置在请求前后保持内容与对象边界稳定,返回映射则拥有独立的嵌套设置;默认阈值仍能完整补齐。复用同一配置发起多次请求时,后一次行为不再受前一次规范化过程影响。