diff --git a/docs/content/index.mdx b/docs/content/index.mdx index 8a22b27b31..1eff2aca68 100644 --- a/docs/content/index.mdx +++ b/docs/content/index.mdx @@ -21,12 +21,12 @@ To install the Mirascope v2 alpha, use the following command: ```bash -uv add "mirascope[all]==2.0.0-alpha.5" +uv add "mirascope[all]==2.0.0-alpha.6" ``` ```bash -pip install "mirascope[all]==2.0.0-alpha.5" +pip install "mirascope[all]==2.0.0-alpha.6" ``` diff --git a/python/examples/mcp_with_thinking.py b/python/examples/mcp_with_thinking.py new file mode 100644 index 0000000000..876a89e1df --- /dev/null +++ b/python/examples/mcp_with_thinking.py @@ -0,0 +1,34 @@ +import asyncio + +from mirascope import llm + + +async def main(): + async with llm.mcp.streamable_http_client( + "https://gofastmcp.com/mcp" + ) as mcp_client: + tools = await mcp_client.list_tools() + + @llm.call( + "google/gemini-3-flash-preview", + thinking={"level": "medium", "include_summaries": True}, + tools=tools, + ) + async def learn_mcp(): + return "Use the tools to learn about FastMCP, and write a report on the library." + + response = await learn_mcp.stream() + while True: # Loop for tool calls + async for chunk in response.pretty_stream(): + print(chunk, flush=True, end="") + print() + + if response.tool_calls: + tool_output = await response.execute_tools() + response = await response.resume(tool_output) + else: + break + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/python/pyproject.toml b/python/pyproject.toml index 7d881a58fd..ac627a396d 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "mirascope" -version = "2.0.0-alpha.5" +version = "2.0.0-alpha.6" description = "LLM abstractions that aren't obstructions" readme = "README.md" license = { file = "LICENSE" } diff --git a/python/tests/ops/_internal/test_closure.py b/python/tests/ops/_internal/test_closure.py index 9717ef464a..542a96c60b 100644 --- a/python/tests/ops/_internal/test_closure.py +++ b/python/tests/ops/_internal/test_closure.py @@ -759,7 +759,7 @@ def closure_inside_decorator_fn() -> str: assert closure.dependencies == snapshot( { "mirascope": { - "version": "2.0.0a5", + "version": "2.0.0a6", "extras": ["all"], } } @@ -793,7 +793,7 @@ def closure_inside_imported_decorator_fn() -> str: assert closure.dependencies == snapshot( { "mirascope": { - "version": "2.0.0a5", + "version": "2.0.0a6", "extras": ["all"], } } diff --git a/python/tests/ops/cassettes/test_versioned_async_call.yaml b/python/tests/ops/cassettes/test_versioned_async_call.yaml index 0ba90f76a5..ff087d3e63 100644 --- a/python/tests/ops/cassettes/test_versioned_async_call.yaml +++ b/python/tests/ops/cassettes/test_versioned_async_call.yaml @@ -1,117 +1,4 @@ interactions: -- request: - body: '{"input":[{"content":"Recommend a horror book.","role":"user"}],"model":"gpt-4o-mini"}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '86' - content-type: - - application/json - host: - - api.openai.com - user-agent: - - AsyncOpenAI/Python 2.7.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - async:asyncio - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 2.7.1 - x-stainless-read-timeout: - - '600' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.10.15 - method: POST - uri: https://api.openai.com/v1/responses - response: - body: - string: !!binary | - H4sIAAAAAAAAA3RVS2/bOBC+51fM6lLAiANZcWI7x700XaCn7a1dCGNqZHFNcbjk0IlQ5L8vSNmy - 3SY3ch4f5/nx5w1AoZviCQpPwdXlw4aq6vFxtWmVapdVWT5u7hfre9o0KyrXi83DelMtyrJtqbrf - Ns12WdwmCN7+S0pOMGwDjXLlCYWaGpNusXpcrh+q1eI+64KgxJB8FPfOkFAzOm1R7Xeeo01xtWgC - jWJtjLa74gl+3gAAFA4H8sm/oQMZduSLG4C3bEzec9LZaEwWaHt6pW5IUJtwrQ3ioxLN9kre42vN - UVyUWnhPvyuF2dQKzTVczw2ZFNnOyXzJ815bPa/KajkvV/PF+lizjFs8wfeczpjU1I4+7D7uBq6r - SqVubJotLTdqVVHTLhfqPiNnFBkcZRwKAXd0VnxU9qxUbIXsOajLwK5gT0WhV5m8swFay4KnQn7/ - 50ppeOc8b9/RZKAnKL6AJ8V9T7aB2exH8a0jeMZoRdsdcAvP2hh45hjoRwHbAf7utDc0wF+o9oHt - bHYH3zodQBkMQSuwfCAD9OoMewogHQGR1wRoG4g2kEgaqmSRxFZRSM8gpAF06eiInSEIgkMy1BYQ - QnSOAzVmgC4FRw30aINme3eK5FMAlJ6D68hrBS9e5xTSsy4MqmPDO63QgFB2hHFVAEF146BfxHQL - Pe7z6wIIfQwy94QNtOyh4zTq0KINd/ClhYHjJ09gmLNHMgnck3Tp1rMnyE3uHXv0w226Bd2Qz+X+ - Sq9aoYXPLJ1WxxJrc9AIX9mT5fln9ErjbHYLL51WHSjut9pSADLUk5Vcvl12P4X2oqUDBJ/No5Ho - 0UBa8sazu4M/WTrYMu+Ta0seotX/xbFDaURprIbgPvXG5h7uyHr6o5gm6O14moaq8GzyoKYxCIJW - RuNkmI0Khx6NIXO9wuLjyDbO00FzDPWJ0Oq8l9OKO8+9k1qh6qje0/ChzlPaKM320sITBrZXbEZt - y14ujNKuxr5Hf8KeyC1gSzLUuknAraYrogvkD1pRLfpEji1GM25pEYQ9XaaZBoE8SszixV15lOZt - PEbWsu/xfL9ggWw31vUY8YH8loOWYeSeRsf+TMpjpTvWamxNFC4mxZkUCmFXX1BFOQndZYw+WoXH - whaNDrg1px8kZsqbEtD2isAX1e3v8otfYUozN7A5O5ZXqf76LyzK5Xua94Cn9n+ELSxoLqAXj1MR - Y7jud0+CDQom/Lebt/8BAAD//wMA3uAootIHAAA= - headers: - CF-RAY: - - 9a8b7014d894736d-NRT - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - application/json - Date: - - Thu, 04 Dec 2025 12:51:58 GMT - Server: - - cloudflare - Set-Cookie: - - __cf_bm=BIIXO8Z3NJRQIxJSJ5SPsOBgGgocdevSMJzflNsFb2c-1764852718-1.0.1.1-vtmyTHEh2N4P7b0ah0xRbk8IEhhodC0MdYPk0DScmaICS6B7PMFJbWlKsSulX32XFF0Qg6zFJs3i8xQCkqmE7wB_wXblF63SIeFQ2.vjGTg; - path=/; expires=Thu, 04-Dec-25 13:21:58 GMT; domain=.api.openai.com; HttpOnly; - Secure; SameSite=None - - _cfuvid=seDeOxLm5rNIV9eWKpg0yNe4_KDzXKVJg9DghwLqSJo-1764852718994-0.0.1.1-604800000; - path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - alt-svc: - - h3=":443"; ma=86400 - cf-cache-status: - - DYNAMIC - openai-organization: - - sotai-i3ryiz - openai-processing-ms: - - '4955' - openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev - openai-version: - - '2020-10-01' - x-envoy-upstream-service-time: - - '4957' - x-ratelimit-limit-requests: - - '5000' - x-ratelimit-limit-tokens: - - '4000000' - x-ratelimit-remaining-requests: - - '4999' - x-ratelimit-remaining-tokens: - - '3999969' - x-ratelimit-reset-requests: - - 12ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_ef605889a56042a1a2a5c6921b8e036b - status: - code: 200 - message: OK - request: body: '' headers: @@ -122,225 +9,241 @@ interactions: connection: - keep-alive host: - - localhost:3000 + - v2.mirascope.com user-agent: - python-httpx/0.28.1 x-fern-language: - Python method: GET - uri: http://example.com/functions/hash/0391c2bfd9cae644a1b467679c5d6b8a03a8df17c733c4309e36838127bc6d85 - response: - body: - string: '{"message":"Function with hash 0391c2bfd9cae644a1b467679c5d6b8a03a8df17c733c4309e36838127bc6d85 - not found","resource":"function","tag":"NotFoundError"}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:24:32 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '151' - content-type: - - application/json - status: - code: 404 - message: Not Found -- request: - body: '{"code":"from mirascope import llm\n\n\n@llm.call(\"openai/gpt-4o-mini\")\nasync - def recommend(genre: str) -> str:\n return f\"Recommend a {genre} book.\"\n","hash":"0391c2bfd9cae644a1b467679c5d6b8a03a8df17c733c4309e36838127bc6d85","signature":"@llm.call(\"openai/gpt-4o-mini\")\nasync - def recommend(genre: str) -> str: ...","signatureHash":"b9cd3d0dbb1c669832bb9bec2c556281f7587625908d698c7152a510b516ec26","name":"recommend","description":null,"tags":null,"metadata":null,"dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}}}' - headers: - accept: - - '*/*' - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '545' - content-type: - - application/json - host: - - localhost:3000 - user-agent: - - python-httpx/0.28.1 - x-fern-language: - - Python - method: POST - uri: http://example.com/functions - response: - body: - string: '{"id":"1c6495c3-f5b4-4795-b99c-221ff3273156","hash":"0391c2bfd9cae644a1b467679c5d6b8a03a8df17c733c4309e36838127bc6d85","signatureHash":"b9cd3d0dbb1c669832bb9bec2c556281f7587625908d698c7152a510b516ec26","name":"recommend","description":null,"version":"2.0","tags":null,"metadata":null,"code":"from - mirascope import llm\n\n\n@llm.call(\"openai/gpt-4o-mini\")\nasync def recommend(genre: - str) -> str:\n return f\"Recommend a {genre} book.\"\n","signature":"@llm.call(\"openai/gpt-4o-mini\")\nasync - def recommend(genre: str) -> str: ...","dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}},"environmentId":"5e8c6ab2-3b1a-4ec0-a1f1-e4d01c5e1f18","projectId":"100bf0f4-7503-4524-bd4b-ddec75d8a346","organizationId":"ad201cf0-4185-4952-9608-95ad50080360","createdAt":"2025-12-24T03:24:32.841Z","updatedAt":"2025-12-24T03:24:32.841Z","isNew":true}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:24:32 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '858' - content-type: - - application/json - status: - code: 200 - message: OK -- request: - body: '{"input":[{"content":"Recommend a horror book.","role":"user"}],"model":"gpt-4o-mini"}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '86' - content-type: - - application/json - host: - - api.openai.com - user-agent: - - AsyncOpenAI/Python 2.7.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - async:asyncio - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 2.7.1 - x-stainless-read-timeout: - - '600' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.13.3 - method: POST - uri: https://api.openai.com/v1/responses + uri: https://v2.mirascope.com/functions/hash/0391c2bfd9cae644a1b467679c5d6b8a03a8df17c733c4309e36838127bc6d85 response: body: string: !!binary | - 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 + L59JE9BM8wAA headers: + CF-Cache-Status: + - HIT CF-RAY: - - 9b301385cebaeb74-NRT + - 9bb62ab33d03682c-SEA Connection: - keep-alive Content-Encoding: - gzip Content-Type: - - application/json + - text/html Date: - - Wed, 24 Dec 2025 12:24:34 GMT + - Fri, 09 Jan 2026 18:58:34 GMT + ETag: + - W/"f1fda39f3bf457c7f642f8bcc5026695" + Nel: + - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' + Report-To: + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=Dv9a2nBV891QJ%2BGmYrwigyrjdG1ASdZ0r5R3uCNkj6w3gwr%2BA2MTeS0E6FlDPTt8Wsu5e8VRc%2FqToAhiYuZAXOJbqBLRVxIs3HlisCrZ"}]}' Server: - cloudflare - Set-Cookie: - - __cf_bm=uj9OCnI2riqDL5eCupMUjMCwvyG0pQ0lI.Cb3HH.PUQ-1766579074-1.0.1.1-b75uwOJpeliOyQNtdghzqEfhDtcKk.4M64hHHvQ3qPzPrklNZ0gW_YU2g_7ZYCK6Q6qD.V63q.VD5j.dHqWan7tjQTNYGzN8cBo8tBgirIs; - path=/; expires=Wed, 24-Dec-25 12:54:34 GMT; domain=.api.openai.com; HttpOnly; - Secure; SameSite=None - - _cfuvid=5BV_q6Imle8zv.y_kJO2sxIN5vMrLj_sBHFZo2ZjSL4-1766579074568-0.0.1.1-604800000; - path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload Transfer-Encoding: - chunked - X-Content-Type-Options: - - nosniff + Vary: + - accept-encoding alt-svc: - h3=":443"; ma=86400 - cf-cache-status: - - DYNAMIC - openai-organization: - - sotai-i3ryiz - openai-processing-ms: - - '1469' - openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev - openai-version: - - '2020-10-01' - x-envoy-upstream-service-time: - - '1473' - x-ratelimit-limit-requests: - - '5000' - x-ratelimit-limit-tokens: - - '4000000' - x-ratelimit-remaining-requests: - - '4999' - x-ratelimit-remaining-tokens: - - '3999969' - x-ratelimit-reset-requests: - - 12ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_f2eb7d80da514e34831892442745359d - status: - code: 200 - message: OK -- request: - body: '' - headers: - accept: - - '*/*' - accept-encoding: - - gzip, deflate - connection: - - keep-alive - host: - - localhost:3000 - user-agent: - - python-httpx/0.28.1 - x-fern-language: - - Python - method: GET - uri: http://example.com/functions/hash/0391c2bfd9cae644a1b467679c5d6b8a03a8df17c733c4309e36838127bc6d85 - response: - body: - string: '{"id":"1c6495c3-f5b4-4795-b99c-221ff3273156","hash":"0391c2bfd9cae644a1b467679c5d6b8a03a8df17c733c4309e36838127bc6d85","signatureHash":"b9cd3d0dbb1c669832bb9bec2c556281f7587625908d698c7152a510b516ec26","name":"recommend","description":null,"version":"2.0","tags":null,"metadata":null,"code":"from - mirascope import llm\n\n\n@llm.call(\"openai/gpt-4o-mini\")\nasync def recommend(genre: - str) -> str:\n return f\"Recommend a {genre} book.\"\n","signature":"@llm.call(\"openai/gpt-4o-mini\")\nasync - def recommend(genre: str) -> str: ...","dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}},"environmentId":"5e8c6ab2-3b1a-4ec0-a1f1-e4d01c5e1f18","projectId":"100bf0f4-7503-4524-bd4b-ddec75d8a346","organizationId":"ad201cf0-4185-4952-9608-95ad50080360","createdAt":"2025-12-24T03:24:32.841Z","updatedAt":"2025-12-24T03:24:32.841Z"}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:33:39 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '845' - content-type: - - application/json status: code: 200 message: OK @@ -360,7 +263,7 @@ interactions: host: - api.openai.com user-agent: - - AsyncOpenAI/Python 2.7.1 + - AsyncOpenAI/Python 2.14.0 x-stainless-arch: - arm64 x-stainless-async: @@ -370,7 +273,7 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 2.7.1 + - 2.14.0 x-stainless-read-timeout: - '600' x-stainless-retry-count: @@ -378,31 +281,30 @@ interactions: x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.13.3 + - 3.10.16 method: POST uri: https://api.openai.com/v1/responses response: body: string: !!binary | - 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 headers: CF-RAY: - - 9b3020e15841e35a-NRT + - 9bb62ab408e75580-SEA Connection: - keep-alive Content-Encoding: @@ -410,14 +312,14 @@ interactions: Content-Type: - application/json Date: - - Wed, 24 Dec 2025 12:33:42 GMT + - Fri, 09 Jan 2026 18:58:35 GMT Server: - cloudflare Set-Cookie: - - __cf_bm=rALsPDp33QLc85HbN5qvfPX3.PKAArMafzHGf0MTYVc-1766579622-1.0.1.1-2kQkBxiKUdXsWhICkvIeAZO_N2PWw0QX3CBv9yN_piZJYDma_JZ6BFrN5.8zx9J2bXlhTOZpVXUmpXUEPrf3KeJpSWZ5HskwND4hl5CcLJU; - path=/; expires=Wed, 24-Dec-25 13:03:42 GMT; domain=.api.openai.com; HttpOnly; + - __cf_bm=utA71hx1MQ51PqAuXmX_PCI2g9GhUDn4a._EHNRIU0Q-1767985115-1.0.1.1-Gx2wB9l2jUOpsJg27O41CF6f5C4K96G696OXJimbxCuTPYji7B7XzJlupHJw7ZnJl5RDT_sZQlzyD5RB_jO1WVIhKNIiTd9FDr3lk0DlTHk; + path=/; expires=Fri, 09-Jan-26 19:28:35 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - - _cfuvid=FZzjF3xo5wtVerFDHaGkSfqDzkz3.lVVCsO7N5DFVBI-1766579622266-0.0.1.1-604800000; + - _cfuvid=gY_dX_YoA8SK7XgUPVXrnVpsRoTvT_m0hg_FTPT9JAA-1767985115999-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Strict-Transport-Security: - max-age=31536000; includeSubDomains; preload @@ -432,13 +334,13 @@ interactions: openai-organization: - sotai-i3ryiz openai-processing-ms: - - '2057' + - '1657' openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev + - proj_2kPLXdwNOjkHt3ifb0aZ4FwU openai-version: - '2020-10-01' x-envoy-upstream-service-time: - - '2061' + - '1660' x-ratelimit-limit-requests: - '5000' x-ratelimit-limit-tokens: @@ -452,7 +354,7 @@ interactions: x-ratelimit-reset-tokens: - 0s x-request-id: - - req_dce2c67773f24e70ab762999fcc5db71 + - req_ea12f217b26749e9b4b1ff740aea43ca status: code: 200 message: OK diff --git a/python/tests/ops/cassettes/test_versioned_async_context_call.yaml b/python/tests/ops/cassettes/test_versioned_async_context_call.yaml index b114eb77be..525c0e7a21 100644 --- a/python/tests/ops/cassettes/test_versioned_async_context_call.yaml +++ b/python/tests/ops/cassettes/test_versioned_async_context_call.yaml @@ -1,110 +1,4 @@ interactions: -- request: - body: '{"input":[{"content":"As a librarian, Recommend a mystery book.","role":"user"}],"model":"gpt-4o-mini"}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '103' - content-type: - - application/json - host: - - api.openai.com - user-agent: - - AsyncOpenAI/Python 2.7.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - async:asyncio - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 2.7.1 - x-stainless-read-timeout: - - '600' - x-stainless-retry-count: - - '1' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.10.15 - method: POST - uri: https://api.openai.com/v1/responses - response: - body: - string: !!binary | - H4sIAAAAAAAAAwAAAP//dFRNb+M4DL33V3B9WaBIC+ejbdLbXnZRYI5zmy4MWaZtbWVJIKnMGIP+ - 94XkxIln2ptNUk/vkeL7eQNQmKZ4hoKQQ1Ue2lJvtnuNW9ysd7osHw/b9X5X6gbr3X59eKi36/Xj - ocSHB2zrZrsuVgnC1/+hljOMd4xTXBMqwaZSKbd+etztHzZPu33OsSiJnM5oPwSLgs10qFb6rSMf - XeLVKss4hY21xnXFM/y8AQAoghqR0vkGj2h9QCpuAN5zMRL5lHPR2hww7nxL1aAoY3mZZaGoxXi3 - iA/qR+WjhCiV+Df8PSne20oru4QbfIM2MeuC3O383WCcuduUm91d+XS33p96lnGLZ/iW5Uyi5nEM - 3H0+jWZ72Og0jX1bPzT7zfZQbrZq87jLyBlFxoAZB5lVh5fEZ23PSe2doLuQuia2gD03BX/IfDoX - KOe8qHMjv/27SFrfBfL1B5kM9AzFCxBqPwzoGri9fS2+9gj/RGSBL4bltYB6hC9Rj/C3tzje3t7D - 194wdGRCMK6DYWRBGiG61tuGoYmUwgqsOhru4Ts2TQpotFhT5gnegQLCwQvCC6Uqw1a55h7+YpAe - oUsEGDolPdIKBB0nfUCGcQXKNcCoCYWhxs44EA8cqVUaV6CjHYxTki416SLuvX7LVCM1SEkAglOU - yBwRuDdtBpLviA6GaMUEixCQOKBONbyCN8Qsd/Qxs+P0E50YmwkfUwswKXiRPxkUtMqJYjEaapta - 61vgyAFdEkBG96B7RUoLEpy2aUAnkzglg+fQIxkNjJKkvMZNud4FpBa1QOsp3cAJNvCoe299Z7RK - ZMhYi8R/FPO0309f8wMoyNv8qBSzYVFOpuJUmIuKoEhZi3a5bkJxcoZAeDQ+cnU2nyrv0LyOgfwQ - pNJK91i94fhpjjC9fuPddQWhYu8WzoNt60muitJexWFQdMaejYhVizJWpknArcGFKTHS0WisxJyN - rFXRThtVsHjCa5mCQ0BSEnN4fV+eonlzTsxaT4O6/F9tbK6b+npifESqPRsZJ59oTBwuBjp1uvdG - T6OJ4os5cVngQnyorta6nIPhmiNFp9WpsUVjWNX27PYx29MswLiF2a4fV7/Hrxx8lpkH2FwOlgup - v3r4/umjxEe48/Q/gxYvyl4RLrdzDyMvxz2gqEaJSvjvN+//AwAA//8DAGKlw/l9BwAA - headers: - CF-RAY: - - 9a8b70efbf53e87a-NRT - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - application/json - Date: - - Thu, 04 Dec 2025 12:52:33 GMT - Server: - - cloudflare - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - alt-svc: - - h3=":443"; ma=86400 - cf-cache-status: - - DYNAMIC - openai-organization: - - sotai-i3ryiz - openai-processing-ms: - - '4443' - openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev - openai-version: - - '2020-10-01' - x-envoy-upstream-service-time: - - '4451' - x-ratelimit-limit-requests: - - '5000' - x-ratelimit-limit-tokens: - - '4000000' - x-ratelimit-remaining-requests: - - '4999' - x-ratelimit-remaining-tokens: - - '3999965' - x-ratelimit-reset-requests: - - 12ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_21f3161c674241a78d604673506fea9b - status: - code: 200 - message: OK - request: body: '' headers: @@ -115,223 +9,241 @@ interactions: connection: - keep-alive host: - - localhost:3000 + - v2.mirascope.com user-agent: - python-httpx/0.28.1 x-fern-language: - Python method: GET - uri: http://example.com/functions/hash/79085c0ac8178f3ae453795c87e509b7738abc1b1dcf58b045137c5cfe7e7923 - response: - body: - string: '{"message":"Function with hash 79085c0ac8178f3ae453795c87e509b7738abc1b1dcf58b045137c5cfe7e7923 - not found","resource":"function","tag":"NotFoundError"}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:24:51 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '151' - content-type: - - application/json - status: - code: 404 - message: Not Found -- request: - body: '{"code":"from mirascope import llm\n\nctx = llm.Context(deps=\"As a librarian,\")\n\n\n@llm.call(\"openai/gpt-4o-mini\")\nasync - def recommend(ctx: llm.Context[str], genre: str) -> str:\n return f\"{ctx.deps} - Recommend a {genre} book.\"\n","hash":"79085c0ac8178f3ae453795c87e509b7738abc1b1dcf58b045137c5cfe7e7923","signature":"@llm.call(\"openai/gpt-4o-mini\")\nasync - def recommend(ctx: llm.Context[str], genre: str) -> str: ...","signatureHash":"ae19bdc73bdb0f93f143b7df3c8cead8efc708c74688fcf000de53be729c5e96","name":"recommend","description":null,"tags":null,"metadata":null,"dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}}}' - headers: - accept: - - '*/*' - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '649' - content-type: - - application/json - host: - - localhost:3000 - user-agent: - - python-httpx/0.28.1 - x-fern-language: - - Python - method: POST - uri: http://example.com/functions - response: - body: - string: '{"id":"64705856-f7bc-4f08-9fbd-466386f562a3","hash":"79085c0ac8178f3ae453795c87e509b7738abc1b1dcf58b045137c5cfe7e7923","signatureHash":"ae19bdc73bdb0f93f143b7df3c8cead8efc708c74688fcf000de53be729c5e96","name":"recommend","description":null,"version":"4.0","tags":null,"metadata":null,"code":"from - mirascope import llm\n\nctx = llm.Context(deps=\"As a librarian,\")\n\n\n@llm.call(\"openai/gpt-4o-mini\")\nasync - def recommend(ctx: llm.Context[str], genre: str) -> str:\n return f\"{ctx.deps} - Recommend a {genre} book.\"\n","signature":"@llm.call(\"openai/gpt-4o-mini\")\nasync - def recommend(ctx: llm.Context[str], genre: str) -> str: ...","dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}},"environmentId":"5e8c6ab2-3b1a-4ec0-a1f1-e4d01c5e1f18","projectId":"100bf0f4-7503-4524-bd4b-ddec75d8a346","organizationId":"ad201cf0-4185-4952-9608-95ad50080360","createdAt":"2025-12-24T03:24:51.560Z","updatedAt":"2025-12-24T03:24:51.560Z","isNew":true}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:24:51 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '962' - content-type: - - application/json - status: - code: 200 - message: OK -- request: - body: '{"input":[{"content":"As a librarian, Recommend a mystery book.","role":"user"}],"model":"gpt-4o-mini"}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '103' - content-type: - - application/json - host: - - api.openai.com - user-agent: - - AsyncOpenAI/Python 2.7.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - async:asyncio - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 2.7.1 - x-stainless-read-timeout: - - '600' - x-stainless-retry-count: - - '1' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.13.3 - method: POST - uri: https://api.openai.com/v1/responses + uri: https://v2.mirascope.com/functions/hash/79085c0ac8178f3ae453795c87e509b7738abc1b1dcf58b045137c5cfe7e7923 response: body: string: !!binary | - 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 + L59JE9BM8wAA headers: + CF-Cache-Status: + - HIT CF-RAY: - - 9b3013fdbda6688a-NRT + - 9bb62ad97a0d27d6-SEA Connection: - keep-alive Content-Encoding: - gzip Content-Type: - - application/json + - text/html Date: - - Wed, 24 Dec 2025 12:24:54 GMT + - Fri, 09 Jan 2026 18:58:40 GMT + ETag: + - W/"f1fda39f3bf457c7f642f8bcc5026695" + Nel: + - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' + Report-To: + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=JMUdv7S%2BzdgQjnglEcg1LhHri5gXNKltgRBzU8Y62eMCNhByIZzvs2oxzGRak88TznjrHBApMyzlLbrDLxuKiow3AvSwH5rWLxo%2FyJsg"}]}' Server: - cloudflare - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload Transfer-Encoding: - chunked - X-Content-Type-Options: - - nosniff + Vary: + - accept-encoding alt-svc: - h3=":443"; ma=86400 - cf-cache-status: - - DYNAMIC - openai-organization: - - sotai-i3ryiz - openai-processing-ms: - - '2096' - openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev - openai-version: - - '2020-10-01' - x-envoy-upstream-service-time: - - '2100' - x-ratelimit-limit-requests: - - '5000' - x-ratelimit-limit-tokens: - - '4000000' - x-ratelimit-remaining-requests: - - '4999' - x-ratelimit-remaining-tokens: - - '3999965' - x-ratelimit-reset-requests: - - 12ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_827d789b50c34fb5a6ee5549832370af - status: - code: 200 - message: OK -- request: - body: '' - headers: - accept: - - '*/*' - accept-encoding: - - gzip, deflate - connection: - - keep-alive - host: - - localhost:3000 - user-agent: - - python-httpx/0.28.1 - x-fern-language: - - Python - method: GET - uri: http://example.com/functions/hash/79085c0ac8178f3ae453795c87e509b7738abc1b1dcf58b045137c5cfe7e7923 - response: - body: - string: '{"id":"64705856-f7bc-4f08-9fbd-466386f562a3","hash":"79085c0ac8178f3ae453795c87e509b7738abc1b1dcf58b045137c5cfe7e7923","signatureHash":"ae19bdc73bdb0f93f143b7df3c8cead8efc708c74688fcf000de53be729c5e96","name":"recommend","description":null,"version":"4.0","tags":null,"metadata":null,"code":"from - mirascope import llm\n\nctx = llm.Context(deps=\"As a librarian,\")\n\n\n@llm.call(\"openai/gpt-4o-mini\")\nasync - def recommend(ctx: llm.Context[str], genre: str) -> str:\n return f\"{ctx.deps} - Recommend a {genre} book.\"\n","signature":"@llm.call(\"openai/gpt-4o-mini\")\nasync - def recommend(ctx: llm.Context[str], genre: str) -> str: ...","dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}},"environmentId":"5e8c6ab2-3b1a-4ec0-a1f1-e4d01c5e1f18","projectId":"100bf0f4-7503-4524-bd4b-ddec75d8a346","organizationId":"ad201cf0-4185-4952-9608-95ad50080360","createdAt":"2025-12-24T03:24:51.560Z","updatedAt":"2025-12-24T03:24:51.560Z"}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:33:58 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '949' - content-type: - - application/json status: code: 200 message: OK @@ -351,7 +263,7 @@ interactions: host: - api.openai.com user-agent: - - AsyncOpenAI/Python 2.7.1 + - AsyncOpenAI/Python 2.14.0 x-stainless-arch: - arm64 x-stainless-async: @@ -361,39 +273,40 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 2.7.1 + - 2.14.0 x-stainless-read-timeout: - '600' x-stainless-retry-count: - - '1' + - '0' x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.13.3 + - 3.10.16 method: POST uri: https://api.openai.com/v1/responses response: body: string: !!binary | - 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 + AA== headers: CF-RAY: - - 9b302159aabd095f-NRT + - 9bb62ada29b7e2c1-SEA Connection: - keep-alive Content-Encoding: @@ -401,9 +314,15 @@ interactions: Content-Type: - application/json Date: - - Wed, 24 Dec 2025 12:34:01 GMT + - Fri, 09 Jan 2026 18:58:43 GMT Server: - cloudflare + Set-Cookie: + - __cf_bm=Z7JusXQ.rE.Ee7SiagsNlZOzuuQbnxQcW_1FBFrCj7o-1767985123-1.0.1.1-HRNO850WZlApU26MVZD2npM2UvitgRr0id8BOvErl3GP.62IlpM27lSX.kMXljmL4_CdpQtnr28jntIsDFp0HGevvHVCPnWN64Ib0GQECe4; + path=/; expires=Fri, 09-Jan-26 19:28:43 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=7gGMrQp.4f6ua1B6qA566gIBhCcWRG.5LUVqejOBb1c-1767985123791-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Strict-Transport-Security: - max-age=31536000; includeSubDomains; preload Transfer-Encoding: @@ -417,13 +336,13 @@ interactions: openai-organization: - sotai-i3ryiz openai-processing-ms: - - '2155' + - '3014' openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev + - proj_2kPLXdwNOjkHt3ifb0aZ4FwU openai-version: - '2020-10-01' x-envoy-upstream-service-time: - - '2159' + - '3017' x-ratelimit-limit-requests: - '5000' x-ratelimit-limit-tokens: @@ -431,13 +350,13 @@ interactions: x-ratelimit-remaining-requests: - '4999' x-ratelimit-remaining-tokens: - - '3999965' + - '3999964' x-ratelimit-reset-requests: - 12ms x-ratelimit-reset-tokens: - 0s x-request-id: - - req_0d9b6190c0954587891eaef0b797e98c + - req_18697877ac514b6ebe91e4a8dc73591c status: code: 200 message: OK diff --git a/python/tests/ops/cassettes/test_versioned_call_sync.yaml b/python/tests/ops/cassettes/test_versioned_call_sync.yaml index be5589e3f5..bfab0e5379 100644 --- a/python/tests/ops/cassettes/test_versioned_call_sync.yaml +++ b/python/tests/ops/cassettes/test_versioned_call_sync.yaml @@ -1,116 +1,4 @@ interactions: -- request: - body: '{"input":[{"content":"Recommend a fantasy book.","role":"user"}],"model":"gpt-4o-mini"}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '87' - content-type: - - application/json - host: - - api.openai.com - user-agent: - - OpenAI/Python 2.7.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - 'false' - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 2.7.1 - x-stainless-read-timeout: - - '600' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.10.15 - method: POST - uri: https://api.openai.com/v1/responses - response: - body: - string: !!binary | - H4sIAAAAAAAAA3xUTW/jNhC951dMdVkgiAPZcfyRa9HDYoGiKAr0sFsII2okMaY4Ajm0V1jkvxek - bNnqJj1Znjfz5ovzftwBZLrKXiBz5Psir3b77XqpNvtlvqrqVZ5v9k/L3ZPCFW3y3XK/KTfb5/JJ - PW/rnFZPq3X2ECm4fCUlFxq2nka7coRCVYERW243693zarNbJcwLSvAxRnHXGxKqxqAS1aFxHGys - q0bjaTRrY7Rtshf4cQcAkPU4kIvxFR3JcE8uuwN4S87kHEfMBmOSQdtLlqIiQW38HPXighLNdmbv - 8HvBQfoghfCBfgaF2RQKzZyu44pMrKzpZbHmRaetXqzy1XqRbxfL3XlmiTd7ga+pnbGpaR2db/5n - G7RVaRt7fC6Xu3Ve5stlrvYjc2KRoafEQ95jQ1fgo7EnULEVsteibgub0V6GQt9lik4OaC0LXgb5 - 9Z8ZaLjpHZfvIInoBbLP0OqmNQM4Utx1ZCu4v/+W/dUS/I4dAdcgLcHf2lbfMigH+APFaXWAP1na - Onh/f/8In+WTT261dl6gZD6AtsnyRdvmoI0hB7+2jq1WhsCT0+QBbQU1G8OnMdoLuyFm/HJkaekB - EBpdC1UwcLANdGjh1DKUsdQYD4YashW6AWrdBEePEAu36ByKPhKcCI/kQbghaclBh41WD9AFH39i - fqyOZCW4mM0YEDZVLH2s4JMHPlk4slYE6KGlNKZgxUOrPRhdR59XDs7SMCY/OS3aNqA9lIRBdB3M - mCq2eGJnqkUZtKnOTk6rNsG668h5faRH+M2+8hCbduAIo+cv2bS8t/PXtM/MsUlvBL3XXtDK6Bwd - k1PWo0NjyMyvR1wYD713dNQcfHHRkiKdxHRdveOul0Khaqk40PAh5ig+Zs321sMRerYzIaG6Zic3 - TvFMQtehu3BPuuKxJhkKXUXiWtNMYzy5o1ZUiL7oUo3BjAeSxddEt20KdT05jMuO4viYn63pEM6V - 1ew6vP6/OcDkN871XPGRXMleyzCefaVDd9XDcdJtfDlpNUE4m4DrPWbCfXFzpflk7G9rdMEqPA82 - q7TH0lzEOyS1mRrQdqady9XDz/YbQZ7aTAusroH5rNX/SvL+6T3gPd5p+x9RCwuam4Lz52mGwc/X - 3ZFghYKR/+3u7V8AAAD//wMAuHZAVUwHAAA= - headers: - CF-RAY: - - 9a8b6f4caac46831-NRT - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - application/json - Date: - - Thu, 04 Dec 2025 12:51:27 GMT - Server: - - cloudflare - Set-Cookie: - - __cf_bm=gS7xZPwytgNJ.aaqff9ROnoymoZT.iQqlE3OtGAJtaQ-1764852687-1.0.1.1-TCLR_WrfZ_PzANh9aBM4TKhKVlMMG28ckkRhoCgalnn7fvGbxgvfV3ngwUHj_tiHV2Yv4B1fpd7nT9ZGlRboYxzDdVTfTJgoChJcRz1k3jA; - path=/; expires=Thu, 04-Dec-25 13:21:27 GMT; domain=.api.openai.com; HttpOnly; - Secure; SameSite=None - - _cfuvid=anbWzlF6F7i0HdTD1HcmU1YTSZsY0Xe3LaW5.g0BCZU-1764852687182-0.0.1.1-604800000; - path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - alt-svc: - - h3=":443"; ma=86400 - cf-cache-status: - - DYNAMIC - openai-organization: - - sotai-i3ryiz - openai-processing-ms: - - '4827' - openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev - openai-version: - - '2020-10-01' - x-envoy-upstream-service-time: - - '4830' - x-ratelimit-limit-requests: - - '5000' - x-ratelimit-limit-tokens: - - '4000000' - x-ratelimit-remaining-requests: - - '4999' - x-ratelimit-remaining-tokens: - - '3999969' - x-ratelimit-reset-requests: - - 12ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_f50e41a0709a4fa7be004628015e6579 - status: - code: 200 - message: OK - request: body: '' headers: @@ -121,226 +9,241 @@ interactions: connection: - keep-alive host: - - localhost:3000 + - v2.mirascope.com user-agent: - python-httpx/0.28.1 x-fern-language: - Python method: GET - uri: http://example.com/functions/hash/2820850484af684cd70ef2b89cc09bd16dffd6003b2e8bb3ed0907232e44144e - response: - body: - string: '{"message":"Function with hash 2820850484af684cd70ef2b89cc09bd16dffd6003b2e8bb3ed0907232e44144e - not found","resource":"function","tag":"NotFoundError"}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:24:17 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '151' - content-type: - - application/json - status: - code: 404 - message: Not Found -- request: - body: '{"code":"from mirascope import llm\n\n\n@llm.call(\"openai/gpt-4o-mini\")\ndef - recommend(genre: str) -> str:\n return f\"Recommend a {genre} book.\"\n","hash":"2820850484af684cd70ef2b89cc09bd16dffd6003b2e8bb3ed0907232e44144e","signature":"@llm.call(\"openai/gpt-4o-mini\")\ndef - recommend(genre: str) -> str: ...","signatureHash":"d3afa65513fc5a9d79bcfdadd5775889dc259dc949c76d2c476ef916b4f234c2","name":"recommend","description":null,"tags":null,"metadata":null,"dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}}}' - headers: - accept: - - '*/*' - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '533' - content-type: - - application/json - host: - - localhost:3000 - user-agent: - - python-httpx/0.28.1 - x-fern-language: - - Python - method: POST - uri: http://example.com/functions - response: - body: - string: '{"id":"f90e3dcd-5907-4822-aa74-f051a60e37de","hash":"2820850484af684cd70ef2b89cc09bd16dffd6003b2e8bb3ed0907232e44144e","signatureHash":"d3afa65513fc5a9d79bcfdadd5775889dc259dc949c76d2c476ef916b4f234c2","name":"recommend","description":null,"version":"1.0","tags":null,"metadata":null,"code":"from - mirascope import llm\n\n\n@llm.call(\"openai/gpt-4o-mini\")\ndef recommend(genre: - str) -> str:\n return f\"Recommend a {genre} book.\"\n","signature":"@llm.call(\"openai/gpt-4o-mini\")\ndef - recommend(genre: str) -> str: ...","dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}},"environmentId":"5e8c6ab2-3b1a-4ec0-a1f1-e4d01c5e1f18","projectId":"100bf0f4-7503-4524-bd4b-ddec75d8a346","organizationId":"ad201cf0-4185-4952-9608-95ad50080360","createdAt":"2025-12-24T03:24:17.295Z","updatedAt":"2025-12-24T03:24:17.295Z","isNew":true}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:24:17 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '846' - content-type: - - application/json - status: - code: 200 - message: OK -- request: - body: '{"input":[{"content":"Recommend a fantasy book.","role":"user"}],"model":"gpt-4o-mini"}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '87' - content-type: - - application/json - host: - - api.openai.com - user-agent: - - OpenAI/Python 2.7.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - 'false' - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 2.7.1 - x-stainless-read-timeout: - - '600' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.13.3 - method: POST - uri: https://api.openai.com/v1/responses + uri: https://v2.mirascope.com/functions/hash/2820850484af684cd70ef2b89cc09bd16dffd6003b2e8bb3ed0907232e44144e response: body: string: !!binary | - H4sIAAAAAAAAA3RUwW7jOAy99yu4viwQNIWTSZO61z0NBlgsFgvsYbowaJlyNJFFQ6LSMQb994Xk - xElm2lMcPvKJ5CP54w6gMG3xDIWnMNTltmraXVlqLD9VpKuy3Fabpm12K6oa9bSqHp+apql2j3qz - K3f4SW+K+0TBzTdScqZhF2iyK08o1NaYsNVuu33cVeXjLmNBUGJIMYr7wZJQOwU1qA6d5+hSXhpt - oMlsrDWuK57hxx0AQDHgSD7Ft3QkywP54g7gbXr4TPnT01VGyXtOkS5amw3GnQPqlgSNDbdoEB+V - GHY39h6/1xxliFILH+hXUJhtrdDe0vXckk15d4MsN7zsjTPLdbneLMvdcvV06mjmLZ7hay52KnkW - qw/dx1qtt1vaZK2q9VOzrbRa681GVVVmziwyDpR5KATs6AJ8JEoGFTshd0nqOrEb2nNT6LvM0dkB - nWPBcyO//ncDWu4Gz807SCZ6huIzeFLc9+RaWCxein/2BH9iT8AaZE/wr3HtS7FYQDPCXyjeqAP8 - zbLXMYQH+CwvcV2uqpB9tfFBoGE+gHHZsvhiXHcw1pKHP/aenVGWFhDIGwqArgXN1vLrFB+E/Zge - /nJk2dM9IHRGC7UwcnQd9Ojgdc/QpIxTPFjqyLXoR9Cmi54eIOXv0HsUcyR4JTxSgD4Go+6hxy79 - pGexPZKT6OkeWGvyxnXgjdrDK3vbLptobJtsybclGkDt0aMS8nBajZ6cpAb8nvJIylLeJfCEqSoP - 6EZ2lBO2nLLQ6ATD+Fsx6/B2+pqlKTzbLDeGYIKgk8k5OWanYkCP1pK9XQTxcdrowdPRcAz1+WjU - ebrnRRk894PUCtWe6gONH2Ke0lwadtcenjCwu7kYpDV7uXJKEx/7Hv2Zez4gATXJWJs2EWtDN+ci - kD8aRbWY8wHSGO0060UaDLouU6gfyGMSMJ2ih/JkzTN9ykyz7/Hy/2qXst/U11PGR/INByPjtMGt - if3l8E2d3rNRkzRRuJiBy2oVwkN9tXDlbByuc/TRKTw1tmhNwMaer3TMh2MuwLibM7ha3/9qv7qt - c5lZwPYSWN6U+vN13VXvAe/xzup/RC0saC9gtZpbGMOt2j0JtiiY6N/u3v4HAAD//wMA9TNCTjQH - AAA= + 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 + L59JE9BM8wAA headers: + CF-Cache-Status: + - HIT CF-RAY: - - 9b3013254bb7354b-NRT + - 9bb62a992c6ba385-SEA Connection: - keep-alive Content-Encoding: - gzip Content-Type: - - application/json + - text/html Date: - - Wed, 24 Dec 2025 12:24:19 GMT + - Fri, 09 Jan 2026 18:58:29 GMT + ETag: + - W/"f1fda39f3bf457c7f642f8bcc5026695" + Nel: + - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' + Report-To: + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=P90OhbJEgjcejpKyXLuu1ORyeIIMydmDSqqkNTwR1IxTPd2nKHa1DL3Jc73qjCzRQvpKwHSToMdoPWAH6x30BeohqphPcCHOTGI8AUxz1v0%3D"}]}' Server: - cloudflare - Set-Cookie: - - __cf_bm=jPL2FdGKx7wRFV694mNaMt6eeD5lu8QWqUjMGksXbuQ-1766579059-1.0.1.1-t9JfhuMF0Q1ft0HOAhde4cs5aypNbfCGRd9e9TAv4zkM2xvQ1eBTLkqksLm3eEVwGU8McmNK1aJqQkjEx1Q7PGPNY1VO75ZXzAXPa_yIKN8; - path=/; expires=Wed, 24-Dec-25 12:54:19 GMT; domain=.api.openai.com; HttpOnly; - Secure; SameSite=None - - _cfuvid=NCPR75kYzYzPl5iaHr7tI79SV.qqrhflTh6GPBGKBhw-1766579059606-0.0.1.1-604800000; - path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload Transfer-Encoding: - chunked - X-Content-Type-Options: - - nosniff + Vary: + - accept-encoding alt-svc: - h3=":443"; ma=86400 - cf-cache-status: - - DYNAMIC - openai-organization: - - sotai-i3ryiz - openai-processing-ms: - - '1629' - openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev - openai-version: - - '2020-10-01' - x-envoy-upstream-service-time: - - '1632' - x-ratelimit-limit-requests: - - '5000' - x-ratelimit-limit-tokens: - - '4000000' - x-ratelimit-remaining-requests: - - '4999' - x-ratelimit-remaining-tokens: - - '3999969' - x-ratelimit-reset-requests: - - 12ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_538049cdf3ab4d0f882dc5fe117b1afa - status: - code: 200 - message: OK -- request: - body: '' - headers: - accept: - - '*/*' - accept-encoding: - - gzip, deflate - connection: - - keep-alive - host: - - localhost:3000 - user-agent: - - python-httpx/0.28.1 - x-fern-language: - - Python - method: GET - uri: http://example.com/functions/hash/2820850484af684cd70ef2b89cc09bd16dffd6003b2e8bb3ed0907232e44144e - response: - body: - string: '{"id":"f90e3dcd-5907-4822-aa74-f051a60e37de","hash":"2820850484af684cd70ef2b89cc09bd16dffd6003b2e8bb3ed0907232e44144e","signatureHash":"d3afa65513fc5a9d79bcfdadd5775889dc259dc949c76d2c476ef916b4f234c2","name":"recommend","description":null,"version":"1.0","tags":null,"metadata":null,"code":"from - mirascope import llm\n\n\n@llm.call(\"openai/gpt-4o-mini\")\ndef recommend(genre: - str) -> str:\n return f\"Recommend a {genre} book.\"\n","signature":"@llm.call(\"openai/gpt-4o-mini\")\ndef - recommend(genre: str) -> str: ...","dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}},"environmentId":"5e8c6ab2-3b1a-4ec0-a1f1-e4d01c5e1f18","projectId":"100bf0f4-7503-4524-bd4b-ddec75d8a346","organizationId":"ad201cf0-4185-4952-9608-95ad50080360","createdAt":"2025-12-24T03:24:17.295Z","updatedAt":"2025-12-24T03:24:17.295Z"}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:33:21 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '833' - content-type: - - application/json status: code: 200 message: OK @@ -360,7 +263,7 @@ interactions: host: - api.openai.com user-agent: - - OpenAI/Python 2.7.1 + - OpenAI/Python 2.14.0 x-stainless-arch: - arm64 x-stainless-async: @@ -370,7 +273,7 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 2.7.1 + - 2.14.0 x-stainless-read-timeout: - '600' x-stainless-retry-count: @@ -378,30 +281,31 @@ interactions: x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.13.3 + - 3.10.16 method: POST uri: https://api.openai.com/v1/responses response: body: string: !!binary | - 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 + AAD//wMAaDzbdEkHAAA= headers: CF-RAY: - - 9b30206d9dd5734a-NRT + - 9bb62a9a1aba6e84-SEA Connection: - keep-alive Content-Encoding: @@ -409,14 +313,14 @@ interactions: Content-Type: - application/json Date: - - Wed, 24 Dec 2025 12:33:26 GMT + - Fri, 09 Jan 2026 18:58:33 GMT Server: - cloudflare Set-Cookie: - - __cf_bm=X7sebFuouItvoRRrcEbe9Ow2mhCOkteXn48cDbJXzFo-1766579606-1.0.1.1-fSbd5ITq9qyikoL06H4CYUT8Ipp.aFgUey3dmZaboqYjYuhEl3HlsayDR8J5I2iToMm7NdJGF0anss3ZXDtj4EvBXLj.Dxscigr9cqAaGVE; - path=/; expires=Wed, 24-Dec-25 13:03:26 GMT; domain=.api.openai.com; HttpOnly; + - __cf_bm=EbWHSDnphvXTTBnMU2lR.johpXXzVEiwwwzi1AzNtJc-1767985113-1.0.1.1-ph9PVONIr1J4Om3GOi81bi_839f2oWxiWtSTntjdgdsmguQyDHdkjcvS0DxVucZsIUKRs.nIXqH2Q2yAWxyC03KvQE9HalgOZx4_7OLsLtc; + path=/; expires=Fri, 09-Jan-26 19:28:33 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - - _cfuvid=oFRk0a_kIONBdJceukkFiJU3WbRzx6sbTLv__C4y8Ho-1766579606175-0.0.1.1-604800000; + - _cfuvid=T4dstdW4EhhVkvYD6fLtxiZWld3Fzmlt7NC2VeLP.uU-1767985113225-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Strict-Transport-Security: - max-age=31536000; includeSubDomains; preload @@ -431,13 +335,13 @@ interactions: openai-organization: - sotai-i3ryiz openai-processing-ms: - - '4431' + - '2706' openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev + - proj_2kPLXdwNOjkHt3ifb0aZ4FwU openai-version: - '2020-10-01' x-envoy-upstream-service-time: - - '4441' + - '2709' x-ratelimit-limit-requests: - '5000' x-ratelimit-limit-tokens: @@ -451,7 +355,7 @@ interactions: x-ratelimit-reset-tokens: - 0s x-request-id: - - req_35a86c61fa1a462ca6ac05ef4455b1c4 + - req_00fbf6ae2d704047a7fd966ac0d61609 status: code: 200 message: OK diff --git a/python/tests/ops/cassettes/test_versioned_context_call.yaml b/python/tests/ops/cassettes/test_versioned_context_call.yaml index 9dca62eecb..393379aebf 100644 --- a/python/tests/ops/cassettes/test_versioned_context_call.yaml +++ b/python/tests/ops/cassettes/test_versioned_context_call.yaml @@ -1,111 +1,4 @@ interactions: -- request: - body: '{"input":[{"content":"As a librarian, Recommend a fantasy book.","role":"user"}],"model":"gpt-4o-mini"}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '103' - content-type: - - application/json - host: - - api.openai.com - user-agent: - - OpenAI/Python 2.7.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - 'false' - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 2.7.1 - x-stainless-read-timeout: - - '600' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.10.15 - method: POST - uri: https://api.openai.com/v1/responses - response: - body: - string: !!binary | - H4sIAAAAAAAAA3xVwW7jRgy95ytYXQoEdmA7duzk2lOxQLEoFuhhtxCoGUqaeDRUORxnhUX+vRjJ - duxu0pvNRz6Rj+LTjxuAwtniCQqh2JeLytjtenVvsLIbXD8sFg+P98vdfW3ut5vdbvm4xfqx3pGp - 1vbR7KqNKWaZgqtnMnqi4RBpihshVLIlZmy5fVjvNqvt/WrEoqKmmGsMd70nJTsVVWj2jXAKua8a - faQp7Lx3oSme4McNAEDR40CS6y0dyHNPUtwAvI7JJMIZC8n7MeDC6SmlJUXn4zUaVZJRx+Eq3uH3 - kpP2SUvlPf0MKrMvDfpruo4t+dxZ0+t8zfPOBTdfLVbr+WI7X+6Omo28xRN8HceZhjqvo4vN/2xj - a3CRt7HbbBdVtbPVmra4uZ9UH1l06GnkoRixuQA+kn0EDQel8NbUZWNXtCdR6Lueq8cEDIEVT0J+ - /fsK9Nz0wtU7yEj0BMXv0Lqm9QMIGe46ChZub78VX1qCP7Aj4Bq0JfjLBfutgGqAz6jizB7+ZG3r - FOPt7R18aV2EwAfy4OKYXzuJChXzHlwYI7efXGj2znsS+K0VDs54uoVI4igCBgs1e88vU31UliE/ - /NOBtaUZIDSuVrIwcAoNdBjgpWVoJFekHpShyhMQIHhqKFiUAWrXJKHcIEFAEVR3IDDcVS5QBHGm - hRcWb+dVct660OQnpeD+SQQdNs5AHKJSNxs7dBqhF1ZsOLiov0Z45iSBBtBWODUteD7QDDzHOFXk - WfokMTnN0+wDv3iyzbGlXjhSlswP4gz6GXS4d6EBp4DwzEMeSwgtvLTOE9D33rPkBG2po5gpR6WU - xlOdmrQU1OlwB59JajIKNQvUGMZ0F/L6UAl6zzoJb1oUNEoyt+IOFEDRU/ylOL8vr8df51eoEPbj - a4kxuqgYdErOiWNS0aOg9+SvD1YlTd7SCx0cp1ie7Kscr/B80L1w12tp0LRU7mn4EBPK9+M4XGYI - YeRw5V1U1yx6kZQvM3Udyon7bGURa9KhnHSsHV3ZWiQ5OEOlupMV1pj8dJNF3gVdjqnU9SSoaQwv - 7xbH6Hh7x85qlg7f/l/c/Jg36Xrs+EBScXQ6TE5jXereLHhSumVnptUk5eIMvFlAodyXF8awOAf7 - yx4lBYNHYQvrIlb+9L1Io8GdB3Dhyq6XD7Of4xffgPOY4wLtW+HiatT/fgWWy9V7yHvE5/V/xK2s - 6C+oV7uziCle77sjRYuKmf/15vVfAAAA//8DAODUYJXABwAA - headers: - CF-RAY: - - 9a8b7087a8af8eb8-NRT - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - application/json - Date: - - Thu, 04 Dec 2025 12:52:17 GMT - Server: - - cloudflare - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - alt-svc: - - h3=":443"; ma=86400 - cf-cache-status: - - DYNAMIC - openai-organization: - - sotai-i3ryiz - openai-processing-ms: - - '4898' - openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev - openai-version: - - '2020-10-01' - x-envoy-upstream-service-time: - - '4901' - x-ratelimit-limit-requests: - - '5000' - x-ratelimit-limit-tokens: - - '4000000' - x-ratelimit-remaining-requests: - - '4999' - x-ratelimit-remaining-tokens: - - '3999965' - x-ratelimit-reset-requests: - - 12ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_d0dedd8c783d40df825b3f72d9d0dfde - status: - code: 200 - message: OK - request: body: '' headers: @@ -116,223 +9,241 @@ interactions: connection: - keep-alive host: - - localhost:3000 + - v2.mirascope.com user-agent: - python-httpx/0.28.1 x-fern-language: - Python method: GET - uri: http://example.com/functions/hash/040ba4bb8fbe484b0fec96048fc27c7f1b8c8f3ed36a2ed94e92e8cc13407517 - response: - body: - string: '{"message":"Function with hash 040ba4bb8fbe484b0fec96048fc27c7f1b8c8f3ed36a2ed94e92e8cc13407517 - not found","resource":"function","tag":"NotFoundError"}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:24:42 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '151' - content-type: - - application/json - status: - code: 404 - message: Not Found -- request: - body: '{"code":"from mirascope import llm\n\n\n@llm.call(\"openai/gpt-4o-mini\")\ndef - recommend(ctx: llm.Context[str], genre: str) -> str:\n return f\"{ctx.deps} - Recommend a {genre} book.\"\n","hash":"040ba4bb8fbe484b0fec96048fc27c7f1b8c8f3ed36a2ed94e92e8cc13407517","signature":"@llm.call(\"openai/gpt-4o-mini\")\ndef - recommend(ctx: llm.Context[str], genre: str) -> str: ...","signatureHash":"3d98c672f65730494cad6b8cc3410c69067bbaa986d745e26f416e99b9db9373","name":"recommend","description":null,"tags":null,"metadata":null,"dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}}}' - headers: - accept: - - '*/*' - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '590' - content-type: - - application/json - host: - - localhost:3000 - user-agent: - - python-httpx/0.28.1 - x-fern-language: - - Python - method: POST - uri: http://example.com/functions - response: - body: - string: '{"id":"cd413ec2-9f30-4be7-bfb4-a0f6e1f3bb49","hash":"040ba4bb8fbe484b0fec96048fc27c7f1b8c8f3ed36a2ed94e92e8cc13407517","signatureHash":"3d98c672f65730494cad6b8cc3410c69067bbaa986d745e26f416e99b9db9373","name":"recommend","description":null,"version":"3.0","tags":null,"metadata":null,"code":"from - mirascope import llm\n\n\n@llm.call(\"openai/gpt-4o-mini\")\ndef recommend(ctx: - llm.Context[str], genre: str) -> str:\n return f\"{ctx.deps} Recommend - a {genre} book.\"\n","signature":"@llm.call(\"openai/gpt-4o-mini\")\ndef recommend(ctx: - llm.Context[str], genre: str) -> str: ...","dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}},"environmentId":"5e8c6ab2-3b1a-4ec0-a1f1-e4d01c5e1f18","projectId":"100bf0f4-7503-4524-bd4b-ddec75d8a346","organizationId":"ad201cf0-4185-4952-9608-95ad50080360","createdAt":"2025-12-24T03:24:42.745Z","updatedAt":"2025-12-24T03:24:42.745Z","isNew":true}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:24:42 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '903' - content-type: - - application/json - status: - code: 200 - message: OK -- request: - body: '{"input":[{"content":"As a librarian, Recommend a fantasy book.","role":"user"}],"model":"gpt-4o-mini"}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '103' - content-type: - - application/json - host: - - api.openai.com - user-agent: - - OpenAI/Python 2.7.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - 'false' - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 2.7.1 - x-stainless-read-timeout: - - '600' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.13.3 - method: POST - uri: https://api.openai.com/v1/responses + uri: https://v2.mirascope.com/functions/hash/040ba4bb8fbe484b0fec96048fc27c7f1b8c8f3ed36a2ed94e92e8cc13407517 response: body: string: !!binary | - H4sIAAAAAAAAAwAAAP//dFRNj9s4DL3PryB8KRDMDJyPJs5c91QUWCwWC+yhXRi0RNtqZNGQ6LRG - Mf99ITlx4nbmFIePfCL5SP58AMiMzl4g8xT6Mt+s6bCtikLVpLaHTZ7vj7tKVwUS4a5YH/dFUeWk - Drra66L6uN9lj5GCq2+k5ErDLtBkV55QSJcYsfVhv/94OObFJmFBUIYQYxR3vSUhPQVVqE6N58HF - vGq0gSazsda4JnuBnw8AAFmPI/kYr+lMlnvy2QPA6/TwlfKXp3cJJe85RrrB2mQw7hpQahI0NizR - IH5QYtgt7B3+KHmQfpBS+ES/g8JsS4V2SdexJhvzbnp52vFTZ5x52uSb3VN+eFoXl44m3uwFvqRi - p5JnsbrQvK9Vtc+3RdLqoFWxVbQ+5nq9xWNiTiwy9pR4KARs6Aa8J0oCFTshd0vqPrEF7bUp9EPm - 6OSAzrHgtZFf/luAlpvec/UGkoheIPsEnhR3HTkNq9XX7J+W4E/sCLgGaQn+NU5/zaAa4S8Ub9QJ - /mZp6yGE1eoZPsmHkNxq44NAxXwC45Jl9dm45mSsJQ9/tJ6dUZZWEMgbCoBOQ83W8vcp/hsP3tEY - X/18ZmnpERAaUwtpGHlwDXTo4HvLUMV0IwNYashp9CPUphk8PUNMPgj7USgNNpgA3qg2PWe6jnww - Z3qEypLTJpE2Rj1CN4T4E71Qn8lJYrsW+iGAHb1RaKH3HCj5aaIeVIselZCHy7505AQ6PBEYAYQo - +CUTTxgr9oBuhBqdYBiBnLRDMBjkOZvFeb18zXplnm2aAQzBBEEnk3N0TE5Zjx6tJbvcDvHDtOa9 - p7PhIZTXS1KmkZ+3p/fc9VIqVC2VJxrfxTzFYTXs7j08YWC3OCNU1+zlzimuwdB16K/c81UJWJOM - pdGRuDa0uCGB/NkoKsVcr1KNg50WIItC032ZQl1PHqN48T495xdrGvRLZjX7Dm//7xYs+U19vWR8 - Jl9xMDJOa63N0N2u4dTplo2apBmEsxm47Vsm3Jd3W5jPxv4+Rz84hZfGZtoErOz1dA/pmswFGLe4 - jev94+/2u4M7l5kE1LfAfFHqrye32L4FvMU7q/8etbCgvYHH49zCISzV7khQo2Ckf314/R8AAP// - AwCcYLaISQcAAA== + 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 + L59JE9BM8wAA headers: + CF-Cache-Status: + - HIT CF-RAY: - - 9b3013c3b8088a79-NRT + - 9bb62ac35e98ebb7-SEA Connection: - keep-alive Content-Encoding: - gzip Content-Type: - - application/json + - text/html Date: - - Wed, 24 Dec 2025 12:24:44 GMT + - Fri, 09 Jan 2026 18:58:36 GMT + ETag: + - W/"f1fda39f3bf457c7f642f8bcc5026695" + Nel: + - '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}' + Report-To: + - '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=AbRgrvKS2HO6Z60GpK4KzFo%2BtCKIFVfSnU43tmbGAJL0VDR%2FvWrLSpFf66xo1zJmC8XZw04YT6Em3Fi5c%2BeFMv%2BISC9Za7jgwVhZcnPKajo%3D"}]}' Server: - cloudflare - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload Transfer-Encoding: - chunked - X-Content-Type-Options: - - nosniff + Vary: + - accept-encoding alt-svc: - h3=":443"; ma=86400 - cf-cache-status: - - DYNAMIC - openai-organization: - - sotai-i3ryiz - openai-processing-ms: - - '1931' - openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev - openai-version: - - '2020-10-01' - x-envoy-upstream-service-time: - - '1936' - x-ratelimit-limit-requests: - - '5000' - x-ratelimit-limit-tokens: - - '4000000' - x-ratelimit-remaining-requests: - - '4999' - x-ratelimit-remaining-tokens: - - '3999965' - x-ratelimit-reset-requests: - - 12ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_be0b5bce156e4a85a93e4b36211d1ee2 - status: - code: 200 - message: OK -- request: - body: '' - headers: - accept: - - '*/*' - accept-encoding: - - gzip, deflate - connection: - - keep-alive - host: - - localhost:3000 - user-agent: - - python-httpx/0.28.1 - x-fern-language: - - Python - method: GET - uri: http://example.com/functions/hash/040ba4bb8fbe484b0fec96048fc27c7f1b8c8f3ed36a2ed94e92e8cc13407517 - response: - body: - string: '{"id":"cd413ec2-9f30-4be7-bfb4-a0f6e1f3bb49","hash":"040ba4bb8fbe484b0fec96048fc27c7f1b8c8f3ed36a2ed94e92e8cc13407517","signatureHash":"3d98c672f65730494cad6b8cc3410c69067bbaa986d745e26f416e99b9db9373","name":"recommend","description":null,"version":"3.0","tags":null,"metadata":null,"code":"from - mirascope import llm\n\n\n@llm.call(\"openai/gpt-4o-mini\")\ndef recommend(ctx: - llm.Context[str], genre: str) -> str:\n return f\"{ctx.deps} Recommend - a {genre} book.\"\n","signature":"@llm.call(\"openai/gpt-4o-mini\")\ndef recommend(ctx: - llm.Context[str], genre: str) -> str: ...","dependencies":{"mirascope":{"version":"2.0.0a5","extras":["all"]}},"environmentId":"5e8c6ab2-3b1a-4ec0-a1f1-e4d01c5e1f18","projectId":"100bf0f4-7503-4524-bd4b-ddec75d8a346","organizationId":"ad201cf0-4185-4952-9608-95ad50080360","createdAt":"2025-12-24T03:24:42.745Z","updatedAt":"2025-12-24T03:24:42.745Z"}' - headers: - Connection: - - keep-alive - Date: - - Wed, 24 Dec 2025 12:33:49 GMT - Keep-Alive: - - timeout=5 - Vary: - - Origin - content-length: - - '890' - content-type: - - application/json status: code: 200 message: OK @@ -352,7 +263,7 @@ interactions: host: - api.openai.com user-agent: - - OpenAI/Python 2.7.1 + - OpenAI/Python 2.14.0 x-stainless-arch: - arm64 x-stainless-async: @@ -362,7 +273,7 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 2.7.1 + - 2.14.0 x-stainless-read-timeout: - '600' x-stainless-retry-count: @@ -370,31 +281,31 @@ interactions: x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.13.3 + - 3.10.16 method: POST uri: https://api.openai.com/v1/responses response: body: string: !!binary | - H4sIAAAAAAAAA3RU227bOBB9z1fM6qVAYAey49hx/qBYoFgsCuxDuxBG5MhiTXEEcuhUKPLvC1K2 - bG2TN2nOzOHczvy6AyiMLl6g8BT6qsTmaa12uNNb/bzZbMtyu9/UWqPW+1o9r/aP+FxudvtyvX9s - 9ut1uSoWiYLrH6TkQsMu0GhXnlBIV5iw1W67fdrtt+t9xoKgxJBiFHe9JSE9BtWojgfP0aW8GrSB - RrOx1rhD8QK/7gAAih4H8ile04ks9+SLO4C38eEL5fzpx1VGyXtOkS5amw3GXQIqTYLGhjkaxEcl - ht3M3uHPiqP0USrhI/0OCrOtFNo5XceabMr70Mtyw8vOOLNcl+vNstwtV8/njmbe4gW+5WLHkqdh - deHw8axoTTrPav9U7/VjvdqstptSY5OZM4sMPWUeCgEPdAU+GkoGFTshd03qNrEZ7aUp9FOm6OyA - zrHgpZHf/p2Blg+95/odJBO9QPEZPCnuOnIa7u+/F19bgi/YEXAD0hL8Y5z+XtzfQz3AXyjeqCP8 - zdI2MYQH+NqaAI5PZKFha/k15KAg7IfE8OeJpaUFIBxMI6Rh4OgO0MVglEEH6DR0eMg/C8AALeV8 - opMAidua5kLXGGtJw6uRdoxZAOoTOYk+vZCYhiDkh4cpwU8B7OCNQgu950DZSxP1oFr0qIQ8nDe9 - IyfQ4ZHACCAo7MWcUIw7gCfU0LAHdAM06ATDAOSkjcFgkAf43KS6gNwPHsAb1cIre6uXdTRWJ4b0 - rHGpeSjncoSy9BYgqcya+QgmpD4leYNq2Sj6o5gm9nb+moZYeLZ5MTAEEwSdjM7JMTsVPXq0luxc - MuLjqP3e08lwDNXlvFRZB5Okes9dL5VC1VJ1pOFDzFPaYMPu1sMTBnaz20JNw15unJI2Ytehv3BP - pyZgQzJURifixtDssATyJ6OoEnM5VQ1GO6qiSL2l2zKFup48piVJR+uhPFvz9p8za9h3eP2/UV32 - G/t6zvhEvuZgZBi1rk3sridy7HSeXR5NFC4m4CrCQrivbqRZTsb+NkcfncJzYwttAtb2cs9jPjFT - AcbNDuZqu/jdfnOFpzLzAPU1sJyV+v87/Lx7D3iPd5r+R9TCgvYm4fJx6mEM83F3JKhRMPG/3b39 - BwAA//8DACmSAhxfBwAA + H4sIAAAAAAAAA3RVwW7bSAy95yu4OgZJIDm2E+e2KHrYQ/fUW7sQ6BElsRkNtTOUE6HIvy9mZMtW + NrnZfOQj+Tikfl8BZFxlT5B5Cn2Zb8wqx/viHvNqU6z3eb7dbYt1XZmqytePxW67ezCr/Wr7iLlZ + bbb1fXYTKWT/i4yeaMQFmuzGEypVJUaseNg+7B43RbFNWFDUIcQYI11vSamagvZonhsvg4t11WgD + TWa2ll2TPcHvKwCArMeRfIyv6EBWevLZFcDblPhE+S71LqHkvcRIN1ibDOxOAWVFimzDEg3qB6Ms + bmHv8LWUQftBS5Vn+j+oIrY0aJd0nVRkY91Nr7drue3Y8e0qX61v84fb4vGoaOLNnuBHanZqeR5W + F5rPZ1U9bncmzaraFbQ3ZrfZ5ptNvU7MiUXHnhIPhYANnYHPhpJAI07JnYu6LGxBexKFXnWOTg7o + nCiehPzxzwK00vRe9h8giegJsr/Ak5GuI1fB9fXP7HtL8Dc3rcIX9mYIPzPYj/DVs4Nv4htyQcm7 + 6+s7+N5yAHKmRafsGnByIAtK1gbQliCo+BGkBoRujFEsQwCTWEFbVMC+J/QBxNkRUMHFvDdQE+rg + IyW9/jtwYCXoydfiO3SGAqCroMOGDVp4EVeRD3fwp6asLaHXmPVcAgdAiNqTctQJ9qQvRA70RWCU + wTXA1g6BxXHQcANfyDKmLN/QG7mBfdwcUAFC04JoSz6qgmBatJZcQ1ND7JS8vrCjJAF7qFEpRK0I + 7BDaG+BYuEPlA8GL56RczMROPRuMrVpR6PCZgDWmwF75gMnRE1ZQiwd0I9ToFMMI5LQdAmPQO/jq + fsmYWk/6/JHNI387/ppfQebFppeFIXBQdDo5R8fklPXoY3d2uXPqh+l49J4OcaTl6T6VaZHmney9 + dL2WBk1L5TONn2Ke4gqwuEsPTxjELY4T1bV4vXCKyzV0HfoT93yrAtakY8lVJK6ZFpcpkD+woVL5 + dOtqHOy0Vll8MnTZplLXk48vMpqLu/xoTetzrCw9zfP/i7VNfpOux4oP5PcSWMfpWFQ8dOcbOynd + CptpNINKNgPnLc5U+vJit/PZ2F/W6Adn8ChsVnHAvT19EIZ0o+YG2C0u7vQ5eWe/OONzm2mA1Tkw + X7T6/pDv1h8BH/HO0/+MWkXRXhRc5LOGQ1iOuyPFChUj/9vV238AAAD//wMAfcv/TKAHAAA= headers: CF-RAY: - - 9b30211dfe6ab662-NRT + - 9bb62ac41d4ea35c-SEA Connection: - keep-alive Content-Encoding: @@ -402,9 +313,15 @@ interactions: Content-Type: - application/json Date: - - Wed, 24 Dec 2025 12:33:51 GMT + - Fri, 09 Jan 2026 18:58:39 GMT Server: - cloudflare + Set-Cookie: + - __cf_bm=wAXLzqlf.O83EqkaquOvSeQ715BIbEIPJ2cwgihe6.Q-1767985119-1.0.1.1-vBb1fiAzg_onKPZq_pLVpP4P6f.6Cj.LxpTMuoOWYUMVpsWk8Uuy1BDKF6brg8lZ7zIPFuCHCttnMVb8cskqN9oWoVtc0WtWI4iXBSvpH28; + path=/; expires=Fri, 09-Jan-26 19:28:39 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=0cP.7Irqr6Uzscxf2yauThCIGPu2RUXzCXINR168fA8-1767985119386-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Strict-Transport-Security: - max-age=31536000; includeSubDomains; preload Transfer-Encoding: @@ -418,13 +335,13 @@ interactions: openai-organization: - sotai-i3ryiz openai-processing-ms: - - '1763' + - '2497' openai-project: - - proj_BrdCBgI2MYOVf6LqjZtIUDev + - proj_2kPLXdwNOjkHt3ifb0aZ4FwU openai-version: - '2020-10-01' x-envoy-upstream-service-time: - - '1765' + - '2500' x-ratelimit-limit-requests: - '5000' x-ratelimit-limit-tokens: @@ -438,7 +355,7 @@ interactions: x-ratelimit-reset-tokens: - 0s x-request-id: - - req_bd08e747b1b14ce2bfd451e642cc232d + - req_baecebf214d7443f957b86d2563680cd status: code: 200 message: OK diff --git a/python/tests/ops/test_versioning.py b/python/tests/ops/test_versioning.py index 6a554862fa..da4877bc30 100644 --- a/python/tests/ops/test_versioning.py +++ b/python/tests/ops/test_versioning.py @@ -757,9 +757,8 @@ def recommend(genre: str) -> str: "mirascope.trace.arg_values": '{"args":["fantasy"],"kwargs":{}}', "mirascope.version.hash": "2820850484af684cd70ef2b89cc09bd16dffd6003b2e8bb3ed0907232e44144e", "mirascope.version.signature_hash": "d3afa65513fc5a9d79bcfdadd5775889dc259dc949c76d2c476ef916b4f234c2", - "mirascope.version.uuid": "f90e3dcd-5907-4822-aa74-f051a60e37de", "mirascope.version.version": "1.0", - "mirascope.trace.output": "I highly recommend **\"The Name of the Wind\" by Patrick Rothfuss**. It's the first book in the Kingkiller Chronicle series and follows the story of Kvothe, a gifted young man who becomes a legendary figure. The narrative weaves together magic, music, and adventure, all told in Kvothe's own voice as he recounts his life's journey. The writing is beautiful, and the world-building is rich and immersive. Enjoy your reading!", + "mirascope.trace.output": "I recommend **\"The Name of the Wind\" by Patrick Rothfuss**. It's the first book in the *Kingkiller Chronicle* series and follows the story of Kvothe, a talented young man who becomes a legendary figure. The narrative blends elements of magic, music, and adventure with rich world-building and an engaging, character-driven plot. It's a fantastic read for anyone who loves immersive fantasy!", }, "status": {"status_code": "UNSET", "description": None}, "events": [], @@ -949,9 +948,8 @@ async def recommend(genre: str) -> str: "mirascope.trace.arg_values": '{"args":["horror"],"kwargs":{}}', "mirascope.version.hash": "0391c2bfd9cae644a1b467679c5d6b8a03a8df17c733c4309e36838127bc6d85", "mirascope.version.signature_hash": "b9cd3d0dbb1c669832bb9bec2c556281f7587625908d698c7152a510b516ec26", - "mirascope.version.uuid": "1c6495c3-f5b4-4795-b99c-221ff3273156", "mirascope.version.version": "1.0", - "mirascope.trace.output": 'I recommend **"The Haunting of Hill House" by Shirley Jackson**. This classic novel explores the eerie and unsettling experiences of a group of people staying in a supposedly haunted mansion. Jackson\'s atmospheric writing and psychological tension create a chilling experience, making it a must-read for horror fans. If you\'re looking for something more contemporary, consider **"Mexican Gothic" by Silvia Moreno-Garcia**, which combines elements of gothic horror with a rich cultural backdrop. Both books offer unique and compelling takes on the genre!', + "mirascope.trace.output": 'I recommend **"The Haunting of Hill House" by Shirley Jackson**. This classic novel masterfully blends psychological tension with supernatural elements, following a group of people who experience unsettling occurrences in a mysterious mansion. Jackson\'s atmospheric writing and exploration of fear and isolation make it a compelling read for any horror enthusiast. Enjoy the chills!', }, "status": {"status_code": "UNSET", "description": None}, "events": [], @@ -1058,9 +1056,8 @@ def recommend(ctx: llm.Context[str], genre: str) -> str: "mirascope.trace.arg_values": '{"ctx":{"deps":"As a librarian,"},"args":["fantasy"],"kwargs":{}}', "mirascope.version.hash": "040ba4bb8fbe484b0fec96048fc27c7f1b8c8f3ed36a2ed94e92e8cc13407517", "mirascope.version.signature_hash": "3d98c672f65730494cad6b8cc3410c69067bbaa986d745e26f416e99b9db9373", - "mirascope.version.uuid": "cd413ec2-9f30-4be7-bfb4-a0f6e1f3bb49", "mirascope.version.version": "1.0", - "mirascope.trace.output": 'I highly recommend **"The Name of the Wind" by Patrick Rothfuss**. This novel is the first book in the *Kingkiller Chronicle* series and follows the story of Kvothe, a gifted young man who grows up to become a legendary figure. The narrative combines rich world-building, a unique magic system, and its protagonist\'s journey through love, loss, and the pursuit of knowledge. The prose is lyrical, making it a joy to read while exploring themes of storytelling and identity. Perfect for fans of intricate plots and character-driven tales!', + "mirascope.trace.output": 'I recommend **"The Night Circus" by Erin Morgenstern**. This enchanting novel tells the story of a mysterious circus that appears only at night, featuring exquisite performances and magical wonders. At the heart of the story is a competition between two young illusionists, Celia and Marco, bound to each other by a challenge that intertwines their fates. The lush, imaginative writing and intricate plot make it a captivating read for any fantasy enthusiast. Enjoy the magic!', }, "status": {"status_code": "UNSET", "description": None}, "events": [], @@ -1140,9 +1137,8 @@ async def recommend(ctx: llm.Context[str], genre: str) -> str: "mirascope.trace.arg_values": '{"ctx":{"deps":"As a librarian,"},"args":["mystery"],"kwargs":{}}', "mirascope.version.hash": "79085c0ac8178f3ae453795c87e509b7738abc1b1dcf58b045137c5cfe7e7923", "mirascope.version.signature_hash": "ae19bdc73bdb0f93f143b7df3c8cead8efc708c74688fcf000de53be729c5e96", - "mirascope.version.uuid": "64705856-f7bc-4f08-9fbd-466386f562a3", "mirascope.version.version": "1.0", - "mirascope.trace.output": 'I recommend **"The Guest List" by Lucy Foley**. This gripping mystery unfolds during a lavish wedding celebration on a remote Irish island. As the guests gather, tensions rise, and secrets begin to surface, culminating in a shocking murder. The narrative shifts between multiple perspectives, keeping you guessing until the very end. It\'s a fantastic blend of suspense, rich character development, and atmospheric setting—perfect for fans of psychological thrillers!', + "mirascope.trace.output": "I recommend **\"The Cuckoo's Calling\"** by Robert Galbraith (pen name of J.K. Rowling). It's the first book in the Cormoran Strike series, featuring a private detective investigating the suspicious death of a supermodel. The plot is intricately woven with rich character development and sharp insights into the world of fame and fortune. It expertly balances suspense and a deep exploration of human nature, making it a compelling read for any mystery enthusiast. Enjoy!", }, "status": {"status_code": "UNSET", "description": None}, "events": [], diff --git a/python/uv.lock b/python/uv.lock index e9832c05c4..a032e02d72 100644 --- a/python/uv.lock +++ b/python/uv.lock @@ -1171,7 +1171,7 @@ wheels = [ [[package]] name = "mirascope" -version = "2.0.0a5" +version = "2.0.0a6" source = { editable = "." } dependencies = [ { name = "docstring-parser" },