fix: pass api_key/base_url via model_config_dict, not env vars

camel-ai v0.2.78 reads OPENAI_API_KEY from env and auto-passes it to
chat.completions.create() which doesn't accept it (TypeError).

Fix: pass api_key and base_url through model_config_dict so camel-ai
extracts them for the OpenAI client constructor only.
This commit is contained in:
Kunthawat Greethong
2026-06-18 20:12:51 +07:00
parent 3ba42db6e2
commit cfaa6e8b8d
3 changed files with 30 additions and 31 deletions

View File

@@ -1019,25 +1019,24 @@ def create_model(config: Dict[str, Any], use_boost: bool = False):
if not llm_model: if not llm_model:
llm_model = config.get("llm_model", "gpt-4o-mini") llm_model = config.get("llm_model", "gpt-4o-mini")
# 设置 camel-ai 所需的环境变量 if not llm_api_key:
if llm_api_key: raise ValueError("LLM_API_KEY not configured. Set it in .env file.")
os.environ["OPENAI_API_KEY"] = llm_api_key
if not os.environ.get("OPENAI_API_KEY"):
raise ValueError("缺少 API Key 配置,请在项目根目录 .env 文件中设置 LLM_API_KEY")
if llm_base_url:
os.environ["OPENAI_BASE_URL"] = llm_base_url
print(f"{config_label} model={llm_model}, base_url={llm_base_url[:40] if llm_base_url else '默认'}...") print(f"{config_label} model={llm_model}, base_url={llm_base_url[:40] if llm_base_url else '默认'}...")
# camel-ai reads OPENAI_API_KEY from env automatically # camel-ai reads OPENAI_API_KEY from env automatically
# For base_url, we must also set it as env var # Pass api_key and base_url via model_config_dict
# (model_config_dict passes values to create() call, not client constructor) # camel-ai extracts these for the OpenAI client constructor
model_config = {}
if llm_api_key:
model_config["api_key"] = llm_api_key
if llm_base_url:
model_config["base_url"] = llm_base_url
return ModelFactory.create( return ModelFactory.create(
model_platform=ModelPlatformType.OPENAI, model_platform=ModelPlatformType.OPENAI,
model_type=llm_model, model_type=llm_model,
model_config_dict=model_config,
) )

View File

@@ -449,23 +449,23 @@ class RedditSimulationRunner:
if not llm_model: if not llm_model:
llm_model = self.config.get("llm_model", "gpt-4o-mini") llm_model = self.config.get("llm_model", "gpt-4o-mini")
# 设置 camel-ai 所需的环境变量 if not llm_api_key:
if llm_api_key: raise ValueError("LLM_API_KEY not configured. Set it in .env file.")
os.environ["OPENAI_API_KEY"] = llm_api_key
if not os.environ.get("OPENAI_API_KEY"):
raise ValueError("缺少 API Key 配置,请在项目根目录 .env 文件中设置 LLM_API_KEY")
if llm_base_url:
os.environ["OPENAI_BASE_URL"] = llm_base_url
print(f"LLM配置: model={llm_model}, base_url={llm_base_url[:40] if llm_base_url else '默认'}...") print(f"LLM配置: model={llm_model}, base_url={llm_base_url[:40] if llm_base_url else '默认'}...")
# camel-ai reads OPENAI_API_KEY from env automatically # Pass api_key and base_url via model_config_dict
# camel-ai extracts these for the OpenAI client constructor
model_config = {}
if llm_api_key:
model_config["api_key"] = llm_api_key
if llm_base_url:
model_config["base_url"] = llm_base_url
return ModelFactory.create( return ModelFactory.create(
model_platform=ModelPlatformType.OPENAI, model_platform=ModelPlatformType.OPENAI,
model_type=llm_model, model_type=llm_model,
model_config_dict=model_config,
) )
def _get_active_agents_for_round( def _get_active_agents_for_round(

View File

@@ -442,23 +442,23 @@ class TwitterSimulationRunner:
if not llm_model: if not llm_model:
llm_model = self.config.get("llm_model", "gpt-4o-mini") llm_model = self.config.get("llm_model", "gpt-4o-mini")
# 设置 camel-ai 所需的环境变量 if not llm_api_key:
if llm_api_key: raise ValueError("LLM_API_KEY not configured. Set it in .env file.")
os.environ["OPENAI_API_KEY"] = llm_api_key
if not os.environ.get("OPENAI_API_KEY"):
raise ValueError("缺少 API Key 配置,请在项目根目录 .env 文件中设置 LLM_API_KEY")
if llm_base_url:
os.environ["OPENAI_BASE_URL"] = llm_base_url
print(f"LLM配置: model={llm_model}, base_url={llm_base_url[:40] if llm_base_url else '默认'}...") print(f"LLM配置: model={llm_model}, base_url={llm_base_url[:40] if llm_base_url else '默认'}...")
# camel-ai reads OPENAI_API_KEY from env automatically # Pass api_key and base_url via model_config_dict
# camel-ai extracts these for the OpenAI client constructor
model_config = {}
if llm_api_key:
model_config["api_key"] = llm_api_key
if llm_base_url:
model_config["base_url"] = llm_base_url
return ModelFactory.create( return ModelFactory.create(
model_platform=ModelPlatformType.OPENAI, model_platform=ModelPlatformType.OPENAI,
model_type=llm_model, model_type=llm_model,
model_config_dict=model_config,
) )
def _get_active_agents_for_round( def _get_active_agents_for_round(