conductor-oss / conductor-oss/python-sdk

Framework agents call the OpenAI Responses API regardless of the configured model

未关闭
#482 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
bug
主要语言
Python
星标
104
派生
42
平均合并
2 天 1 小时
30 天内合并 PR
3

描述

**In short:** run one of the `*_openai_runner_*` examples with an Anthropic model against a server that has no OpenAI key, and it fails — because this code path always calls OpenAI, whatever model you configured. It then prints `None` and exits 0, so nothing notices.

**Files:** `examples/agents/93_openai_runner_hello_world.py`, `94_openai_runner_tools.py`, `95_openai_runner_handoffs.py`, `96_openai_runner_streaming.py` (the `conductor.ai` `Runner` / framework-agent path)

## Symptom

With no `OPENAI_API_KEY` in the **server process's** environment:

```
$ CONDUCTOR_AGENT_LLM_MODEL=anthropic/claude-sonnet-4-6 python examples/agents/93_openai_runner_hello_world.py
Framework agent 'Assistant' execution FAILED
None
```

Both `93` and `96` exit 0 despite failing, so exit-code-based tooling — including `scripts/run_examples.sh` — scores them green.

## Cause

The framework-agent path calls the OpenAI Responses API regardless of the configured model. With an Anthropic model and no OpenAI key on the server, the `Assistant_llm` `LLM_CHAT_COMPLETE` task sends an empty key to OpenAI instead of routing to Anthropic:

```
Task execution failed: OpenAI Responses API call failed: Responses API failed with status 401:
{"error": {"message": "Incorrect API key provided: ''. You can find your API key at
https://platform.openai.com/account/api-keys.", "type": "invalid_request_error",
"param": null, "code": "invalid_api_key"}}
```

Read it back with:

```
curl -s localhost:8080/api/agent/executions?size=5
curl -s "localhost:8080/api/workflow/?includeTasks=true" # Assistant_llm -> reasonForIncompletion
```

Confirmed by changing **only** the server's environment, one server, everything else fixed:

| Server env | model | result |
|---|---|---|
| no `OPENAI_API_KEY` | `anthropic/claude-sonnet-4-6` | FAILED |
| no `OPENAI_API_KEY` | `anthropic/claude-opus-4-6` | FAILED |
| `OPENAI_API_KEY` present | `anthropic/claude-sonnet-4-6` | pass |
| `OPENAI_API_KEY` present | `anthropic/claude-opus-4-6` | pass |

Ruled out:

- the **client's** environment — fails with the client key set, passes with it unset
- `langchain-anthropic` being installed — passes with it uninstalled

Only the server's environment matters.

## Fix

Either drop the OpenAI dependency when the target model is not OpenAI, or fail with a message naming the missing key. Silent failure with `None` and exit 0 is the worst outcome.

## Verify

Start the server with no `OPENAI_API_KEY`, run `93` with an Anthropic model — it should either work or say why, and exit non-zero if it fails.

**Note:** These examples document `CONDUCTOR_AGENT_LLM_MODEL=openai/gpt-4o (or anthropic/claude-opus-4-6)`, so a user following the Anthropic option with an Anthropic-only server hits this immediately.

贡献指南

这个仓库没有索引到贡献指南

调研方向

首先,在服务器缺少 OPENAI_API_KEY 的情况下,使用 examples/agents/93_openai_runner_hello_world.py 和 CONDUCTOR_AGENT_LLM_MODEL=anthropic/claude-sonnet-4-6 重现失败。阅读 conductor.ai Runner/framework-agent 路径,然后检查 execution 和 workflow 响应中的 Assistant_llm 和 reasonForIncompletion。完成标准是:example 路由到已配置的模型,或清楚地报告缺少的依赖项并以非零退出码退出。

由索引模型根据 Issue 内容生成。

评估

技术栈
python
领域
api, backend
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
活跃
描述清晰度
基本清楚
新手友好度
55/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。