diff --git a/poetry.lock b/poetry.lock index 9e6877ed..5cea3644 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3337,13 +3337,13 @@ sympy = "*" [[package]] name = "openai" -version = "1.68.0" +version = "1.67.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.8" files = [ - {file = "openai-1.68.0-py3-none-any.whl", hash = "sha256:20e279b0f3a78cb4a95f3eab2a180f3ee30c6a196aeebd6bf642a4f88ab85ee1"}, - {file = "openai-1.68.0.tar.gz", hash = "sha256:c570c06c9ba10f98b891ac30a3dd7b5c89ed48094c711c7a3f35fb5ade6c0757"}, + {file = "openai-1.67.0-py3-none-any.whl", hash = "sha256:dbbb144f38739fc0e1d951bc67864647fca0b9ffa05aef6b70eeea9f71d79663"}, + {file = "openai-1.67.0.tar.gz", hash = "sha256:3b386a866396daa4bf80e05a891c50a7746ecd7863b8a27423b62136e3b8f6bc"}, ] [package.dependencies] @@ -3351,10 +3351,8 @@ anyio = ">=3.5.0,<5" distro = ">=1.7.0,<2" httpx = ">=0.23.0,<1" jiter = ">=0.4.0,<1" -numpy = ">=2.0.2" pydantic = ">=1.9.0,<3" sniffio = "*" -sounddevice = ">=0.5.1" tqdm = ">4" typing-extensions = ">=4.11,<5" @@ -5326,26 +5324,6 @@ files = [ {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, ] -[[package]] -name = "sounddevice" -version = "0.5.1" -description = "Play and Record Sound with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sounddevice-0.5.1-py3-none-any.whl", hash = "sha256:e2017f182888c3f3c280d9fbac92e5dbddac024a7e3442f6e6116bd79dab8a9c"}, - {file = "sounddevice-0.5.1-py3-none-macosx_10_6_x86_64.macosx_10_6_universal2.whl", hash = "sha256:d16cb23d92322526a86a9490c427bf8d49e273d9ccc0bd096feecd229cde6031"}, - {file = "sounddevice-0.5.1-py3-none-win32.whl", hash = "sha256:d84cc6231526e7a08e89beff229c37f762baefe5e0cc2747cbe8e3a565470055"}, - {file = "sounddevice-0.5.1-py3-none-win_amd64.whl", hash = "sha256:4313b63f2076552b23ac3e0abd3bcfc0c1c6a696fc356759a13bd113c9df90f1"}, - {file = "sounddevice-0.5.1.tar.gz", hash = "sha256:09ca991daeda8ce4be9ac91e15a9a81c8f81efa6b695a348c9171ea0c16cb041"}, -] - -[package.dependencies] -CFFI = ">=1.0" - -[package.extras] -numpy = ["NumPy"] - [[package]] name = "soupsieve" version = "2.6" @@ -6557,4 +6535,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = "^3.11,<3.12" -content-hash = "91915e847d90ac222cdedc44682ab71870d5b369e3a6b50c3a333a09a94bcbfc" +content-hash = "9c7c1f0509dbec760fa08c7969f9ebf9a2b38c7f8ecf226817c473360306a9a8" diff --git a/pyproject.toml b/pyproject.toml index e7aa3014..3fab51e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ packages = [{ include = "skyvern" }, { include = "alembic" }] [tool.poetry.dependencies] python = "^3.11,<3.12" python-dotenv = "^1.0.0" -openai = "<2.0" +openai = "<1.68" sqlalchemy = {extras = ["mypy"], version = "^2.0.29"} aiohttp = "^3.8.5" python-multipart = "^0.0.6" diff --git a/skyvern/forge/sdk/api/llm/api_handler_factory.py b/skyvern/forge/sdk/api/llm/api_handler_factory.py index 8f984a40..81fbbfd8 100644 --- a/skyvern/forge/sdk/api/llm/api_handler_factory.py +++ b/skyvern/forge/sdk/api/llm/api_handler_factory.py @@ -163,12 +163,15 @@ class LLMAPIHandlerFactory: LOG.exception("Failed to calculate LLM cost", error=str(e)) llm_cost = 0 prompt_tokens = response.get("usage", {}).get("prompt_tokens", 0) - reasoning_tokens = ( - response.get("usage", {}).get("completion_tokens_details", {}).get("reasoning_tokens", 0) - ) completion_tokens = response.get("usage", {}).get("completion_tokens", 0) - cached_tokens = response.get("usage", {}).get("prompt_tokens_details", {}).get("cached_tokens", 0) - + reasoning_tokens = 0 + completion_token_detail = response.get("usage", {}).get("completion_tokens_details") + if completion_token_detail: + reasoning_tokens = completion_token_detail.reasoning_tokens or 0 + cached_tokens = 0 + cached_token_detail = response.get("usage", {}).get("prompt_tokens_details") + if cached_token_detail: + cached_tokens = cached_token_detail.cached_tokens or 0 if step: await app.DATABASE.update_step( task_id=step.task_id, @@ -351,10 +354,14 @@ class LLMAPIHandlerFactory: llm_cost = 0 prompt_tokens = response.get("usage", {}).get("prompt_tokens", 0) completion_tokens = response.get("usage", {}).get("completion_tokens", 0) - reasoning_tokens = ( - response.get("usage", {}).get("completion_tokens_details", {}).get("reasoning_tokens", 0) - ) - cached_tokens = response.get("usage", {}).get("prompt_tokens_details", {}).get("cached_tokens", 0) + reasoning_tokens = 0 + completion_token_detail = response.get("usage", {}).get("completion_tokens_details") + if completion_token_detail: + reasoning_tokens = completion_token_detail.reasoning_tokens or 0 + cached_tokens = 0 + cached_token_detail = response.get("usage", {}).get("prompt_tokens_details") + if cached_token_detail: + cached_tokens = cached_token_detail.cached_tokens or 0 if step: await app.DATABASE.update_step( task_id=step.task_id,