http_interactions:
- request:
    method: POST
    uri: https://api.openai.com/v1/responses
    body:
      string: '{"input":[{"role":"user","content":[{"type":"input_text","text":"\n  What
        is the difference between a tibble and a data frame?\n  Answer with a bulleted
        list\n"}]}],"model":"gpt-4.1","stream":false,"store":false,"service_tier":"auto"}'
  response:
    status: 200
    headers:
      alt-svc: h3=":443"; ma=86400
      cf-cache-status: DYNAMIC
      cf-ray: 999ef5971de0671d-DFW
      content-encoding: gzip
      content-type: application/json
      date: Wed, 05 Nov 2025 20:04:24 GMT
      openai-organization: posit-esfrkf
      openai-processing-ms: '7744'
      openai-project: proj_IeWhBnzvOO8wbVR5MdxnGXFq
      openai-version: '2020-10-01'
      server: cloudflare
      set-cookie:
      - __cf_bm=DCTO9T6N0oDAj87OjHxOVBzzK91MuTSXFaFzbC6HzQw-1762373064-1.0.1.1-SdyusT5Ktfwp6vywMqu8i5lEthsL5qEVKyE6nKSaHJ2gJ2BuGFMjvsAoCjgrn3e9HimjjB4WLxifI1_5jzU4AosPB0204SZ3gT1wtazILMU;
        path=/; expires=Wed, 05-Nov-25 20:34:24 GMT; domain=.api.openai.com; HttpOnly;
        Secure; SameSite=None
      - _cfuvid=xMpC8ec52j08lmQ1GrpquOOujG59dyYX1ho0uQRNuds-1762373064946-0.0.1.1-604800000;
        path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
      strict-transport-security: max-age=31536000; includeSubDomains; preload
      x-content-type-options: nosniff
      x-envoy-upstream-service-time: '7748'
      x-ratelimit-limit-requests: '10000'
      x-ratelimit-limit-tokens: '30000000'
      x-ratelimit-remaining-requests: '9999'
      x-ratelimit-remaining-tokens: '29999951'
      x-ratelimit-reset-requests: 6ms
      x-ratelimit-reset-tokens: 0s
      x-request-id: req_fb4d6499dcce44338601e74e0b084836
    body:
      string: |-
        {
          "id": "resp_04aabf786ba604aa01690badc132d081949f06ca205b3fc80f",
          "object": "response",
          "created_at": 1762373057,
          "status": "completed",
          "background": false,
          "billing": {
            "payer": "developer"
          },
          "error": null,
          "incomplete_details": null,
          "instructions": null,
          "max_output_tokens": null,
          "max_tool_calls": null,
          "model": "gpt-4.1-2025-04-14",
          "output": [
            {
              "id": "msg_04aabf786ba604aa01690badc1aad48194a524adc301c92a7a",
              "type": "message",
              "status": "completed",
              "content": [
                {
                  "type": "output_text",
                  "annotations": [],
                  "logprobs": [],
                  "text": "- **Origin:**\n  - **Data Frame:** Base R object for storing tabular data.\n  - **Tibble:** Modern reimagining of data frames, part of the tidyverse (tibble package).\n\n- **Printing:**\n  - **Data Frame:** Prints the entire object, possibly flooding the console.\n  - **Tibble:** Prints a preview (first 10 rows and fits columns to screen), making output more readable.\n\n- **Subsetting:**\n  - **Data Frame:** May simplify to a vector when selecting a single column.\n  - **Tibble:** Always returns a tibble when subsetting columns with `[`.\n\n- **Column Names:**\n  - **Data Frame:** Allows non-syntactic names (with some issues).\n  - **Tibble:** Accepts any name but displays them as is, including those with spaces or special characters (backticks needed to reference).\n\n- **Data Types:**\n  - **Data Frame:** Converts strings to factors by default (unless specified otherwise).\n  - **Tibble:** Does **not** convert strings to factors by default.\n\n- **Partial Matching:**\n  - **Data Frame:** Allows partial matching of column names.\n  - **Tibble:** Does **not** allow partial matching; requires exact names.\n\n- **Performance:**\n  - **Data Frame:** Slightly faster for basic operations due to simpler structure.\n  - **Tibble:** Slightly slower but offers better usability, especially for big data analysis.\n\n- **Use in Tidyverse:**\n  - **Data Frame:** Used in base R workflows.\n  - **Tibble:** Default in tidyverse packages (ggplot2, dplyr, etc.).\n\n- **Row Names:**\n  - **Data Frame:** Supports row names.\n  - **Tibble:** Does not support row names; stores them as a column if needed.\n\nIn summary, tibbles are a modern and tidyverse-friendly version of data frames with improved usability and printing features."
                }
              ],
              "role": "assistant"
            }
          ],
          "parallel_tool_calls": true,
          "previous_response_id": null,
          "prompt_cache_key": null,
          "prompt_cache_retention": null,
          "reasoning": {
            "effort": null,
            "summary": null
          },
          "safety_identifier": null,
          "service_tier": "default",
          "store": false,
          "temperature": 1.0,
          "text": {
            "format": {
              "type": "text"
            },
            "verbosity": "medium"
          },
          "tool_choice": "auto",
          "tools": [],
          "top_logprobs": 0,
          "top_p": 1.0,
          "truncation": "disabled",
          "usage": {
            "input_tokens": 30,
            "input_tokens_details": {
              "cached_tokens": 0
            },
            "output_tokens": 408,
            "output_tokens_details": {
              "reasoning_tokens": 0
            },
            "total_tokens": 438
          },
          "user": null,
          "metadata": {}
        }
  recorded_at: 2025-11-05 20:04:25
- request:
    method: POST
    uri: https://api.openai.com/v1/responses
    body:
      string: '{"input":[{"role":"user","content":[{"type":"input_text","text":"\n  What
        is the difference between a tibble and a data frame?\n  Answer with a bulleted
        list\n"}]},{"role":"assistant","content":[{"type":"output_text","text":"-
        **Origin:**\n  - **Data Frame:** Base R object for storing tabular data.\n  -
        **Tibble:** Modern reimagining of data frames, part of the tidyverse (tibble
        package).\n\n- **Printing:**\n  - **Data Frame:** Prints the entire object,
        possibly flooding the console.\n  - **Tibble:** Prints a preview (first 10
        rows and fits columns to screen), making output more readable.\n\n- **Subsetting:**\n  -
        **Data Frame:** May simplify to a vector when selecting a single column.\n  -
        **Tibble:** Always returns a tibble when subsetting columns with `[`.\n\n-
        **Column Names:**\n  - **Data Frame:** Allows non-syntactic names (with some
        issues).\n  - **Tibble:** Accepts any name but displays them as is, including
        those with spaces or special characters (backticks needed to reference).\n\n-
        **Data Types:**\n  - **Data Frame:** Converts strings to factors by default
        (unless specified otherwise).\n  - **Tibble:** Does **not** convert strings
        to factors by default.\n\n- **Partial Matching:**\n  - **Data Frame:** Allows
        partial matching of column names.\n  - **Tibble:** Does **not** allow partial
        matching; requires exact names.\n\n- **Performance:**\n  - **Data Frame:**
        Slightly faster for basic operations due to simpler structure.\n  - **Tibble:**
        Slightly slower but offers better usability, especially for big data analysis.\n\n-
        **Use in Tidyverse:**\n  - **Data Frame:** Used in base R workflows.\n  -
        **Tibble:** Default in tidyverse packages (ggplot2, dplyr, etc.).\n\n- **Row
        Names:**\n  - **Data Frame:** Supports row names.\n  - **Tibble:** Does not
        support row names; stores them as a column if needed.\n\nIn summary, tibbles
        are a modern and tidyverse-friendly version of data frames with improved usability
        and printing features."}]},{"role":"user","content":[{"type":"input_text","text":"Tell
        me three funny jokes about statisticians"}]}],"model":"gpt-4.1","stream":false,"store":false,"service_tier":"auto"}'
  response:
    status: 200
    headers:
      alt-svc: h3=":443"; ma=86400
      cf-cache-status: DYNAMIC
      cf-ray: 999ef5c9abb8671d-DFW
      content-encoding: gzip
      content-type: application/json
      date: Wed, 05 Nov 2025 20:04:27 GMT
      openai-organization: posit-esfrkf
      openai-processing-ms: '1961'
      openai-project: proj_IeWhBnzvOO8wbVR5MdxnGXFq
      openai-version: '2020-10-01'
      server: cloudflare
      set-cookie:
      - __cf_bm=5BGMg2JU8tzLG9ymH7HQrBmBVGOvzZrtd1_wYr8oFMg-1762373067-1.0.1.1-ZLtU3PvrcO0W3dsa3ydw.gENmk1cVmM5bsCv4w181oDCB4KHNoe82XFuGG.AYgTIu5CpLKcYgkMTzFE.rx7SvAtVDGWbqQ9dGAUMvp7X.Fo;
        path=/; expires=Wed, 05-Nov-25 20:34:27 GMT; domain=.api.openai.com; HttpOnly;
        Secure; SameSite=None
      - _cfuvid=gfL2RieBjur1k9yBFJPyfybGfQzKjbOaSxqRFx55HjE-1762373067273-0.0.1.1-604800000;
        path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
      strict-transport-security: max-age=31536000; includeSubDomains; preload
      x-content-type-options: nosniff
      x-envoy-upstream-service-time: '1964'
      x-ratelimit-limit-requests: '10000'
      x-ratelimit-limit-tokens: '30000000'
      x-ratelimit-remaining-requests: '9999'
      x-ratelimit-remaining-tokens: '29999528'
      x-ratelimit-reset-requests: 6ms
      x-ratelimit-reset-tokens: 0s
      x-request-id: req_7f9dc301f1c7492183fbde3ddb592ffc
    body:
      string: |-
        {
          "id": "resp_04e0a6439acdfa6501690badc94f7c8197a7a6adac94f32b20",
          "object": "response",
          "created_at": 1762373065,
          "status": "completed",
          "background": false,
          "billing": {
            "payer": "developer"
          },
          "error": null,
          "incomplete_details": null,
          "instructions": null,
          "max_output_tokens": null,
          "max_tool_calls": null,
          "model": "gpt-4.1-2025-04-14",
          "output": [
            {
              "id": "msg_04e0a6439acdfa6501690badc9ee808197820847ca90e7c652",
              "type": "message",
              "status": "completed",
              "content": [
                {
                  "type": "output_text",
                  "annotations": [],
                  "logprobs": [],
                  "text": "Absolutely! Here are three funny jokes about statisticians:\n\n1. **Why did the statistician bring a ladder to the bar?**  \n   Because they heard the drinks were on the house!\n\n2. **How does a statistician catch a lion?**  \n   They build a cage, label it as \u201cpopulation,\u201d and wait for the lion to walk right in\u2014it's all about sampling!\n\n3. **Why don\u2019t statisticians ever get sunburned?**  \n   Because they know how to avoid the \"mean rays.\""
                }
              ],
              "role": "assistant"
            }
          ],
          "parallel_tool_calls": true,
          "previous_response_id": null,
          "prompt_cache_key": null,
          "prompt_cache_retention": null,
          "reasoning": {
            "effort": null,
            "summary": null
          },
          "safety_identifier": null,
          "service_tier": "default",
          "store": false,
          "temperature": 1.0,
          "text": {
            "format": {
              "type": "text"
            },
            "verbosity": "medium"
          },
          "tool_choice": "auto",
          "tools": [],
          "top_logprobs": 0,
          "top_p": 1.0,
          "truncation": "disabled",
          "usage": {
            "input_tokens": 453,
            "input_tokens_details": {
              "cached_tokens": 0
            },
            "output_tokens": 109,
            "output_tokens_details": {
              "reasoning_tokens": 0
            },
            "total_tokens": 562
          },
          "user": null,
          "metadata": {}
        }
  recorded_at: 2025-11-05 20:04:27
recorded_with: VCR-vcr/2.0.0
