From 96aff0d7d9e3ca9b11d2677479db50ed4da6cbb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mayoral=20Vilches?= Date: Sun, 30 Nov 2025 13:01:27 +0100 Subject: [PATCH] v0.5.9, handle better dotenv MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: VĂ­ctor Mayoral Vilches --- pyproject.toml | 2 +- src/cai/agents/__init__.py | 5 +++++ src/cai/cli.py | 4 +++- src/cai/sdk/agents/models/openai_chatcompletions.py | 4 +++- src/cai/sdk/agents/models/openai_responses.py | 4 +++- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e24173b7..d72bb1df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "cai-framework" -version = "0.5.8" +version = "0.5.9" description = "Cybersecurity AI Framework" readme = "README.md" requires-python = ">=3.9" diff --git a/src/cai/agents/__init__.py b/src/cai/agents/__init__.py index e6edf8f2..acd914f4 100644 --- a/src/cai/agents/__init__.py +++ b/src/cai/agents/__init__.py @@ -52,6 +52,11 @@ from typing import Dict from dotenv import load_dotenv # pylint: disable=import-error # noqa: E501 +# Load .env file from current directory before importing agents +# This ensures that .env files in the user's working directory are loaded +# even when CAI is installed from PyPI +load_dotenv(override=True) # override=True ensures env vars from .env take precedence + # Local application imports from cai.agents.flag_discriminator import flag_discriminator, transfer_to_flag_discriminator from cai.sdk.agents import Agent diff --git a/src/cai/cli.py b/src/cai/cli.py index ce9bfa2b..580d8aa9 100644 --- a/src/cai/cli.py +++ b/src/cai/cli.py @@ -116,7 +116,9 @@ import os from dotenv import load_dotenv -load_dotenv() +# Load .env file from current working directory with override +# This ensures env vars from .env take precedence over system env vars +load_dotenv(override=True) # Configure Python warnings BEFORE any other imports import warnings diff --git a/src/cai/sdk/agents/models/openai_chatcompletions.py b/src/cai/sdk/agents/models/openai_chatcompletions.py index ff118f4c..7e88f438 100644 --- a/src/cai/sdk/agents/models/openai_chatcompletions.py +++ b/src/cai/sdk/agents/models/openai_chatcompletions.py @@ -3521,7 +3521,9 @@ class OpenAIChatCompletionsModel(Model): def _get_client(self) -> AsyncOpenAI: if self._client is None: - self._client = AsyncOpenAI() + # Determine API key + api_key = os.getenv("ALIAS_API_KEY", os.getenv("OPENAI_API_KEY", "sk-alias-1234567890")) + self._client = AsyncOpenAI(api_key=api_key) return self._client # Helper function to detect and format function calls from various models diff --git a/src/cai/sdk/agents/models/openai_responses.py b/src/cai/sdk/agents/models/openai_responses.py index ce587045..ca559868 100644 --- a/src/cai/sdk/agents/models/openai_responses.py +++ b/src/cai/sdk/agents/models/openai_responses.py @@ -356,7 +356,9 @@ class OpenAIResponsesModel(Model): def _get_client(self) -> AsyncOpenAI: if self._client is None: - self._client = AsyncOpenAI() + # Determine API key + api_key = os.getenv("ALIAS_API_KEY", os.getenv("OPENAI_API_KEY", "sk-alias-1234567890")) + self._client = AsyncOpenAI(api_key=api_key) return self._client