Skip to content

Add OpenEnv <> Turing <> HF <> Meta blog post#3275

Merged
burtenshaw merged 9 commits intomainfrom
turing-colab
Feb 12, 2026
Merged

Add OpenEnv <> Turing <> HF <> Meta blog post#3275
burtenshaw merged 9 commits intomainfrom
turing-colab

Conversation

@lewtun
Copy link
Member

@lewtun lewtun commented Feb 11, 2026

Congratulations! You've made it this far! Once merged, the article will appear at https://huggingface.co/blog. Official articles
require additional reviews. Alternatively, you can write a community article following the process here.

Preparing the Article

You're not quite done yet, though. Please make sure to follow this process (as documented here):

  • Add an entry to _blog.yml.
  • Add a thumbnail. There are no requirements here, but there is a template if it's helpful.
  • Check you use a short title and blog path.
  • Upload any additional assets (such as images) to the Documentation Images repo. This is to reduce bloat in the GitHub base repo when cloning and pulling. Try to have small images to avoid a slow or expensive user experience.
  • Add metadata (such as authors) to your md file. You can also specify guest or org for the authors.
  • Ensure the publication date is correct.
  • Preview the content. A quick way is to paste the markdown content in https://huggingface.co/new-blog. Do not click publish, this is just a way to do an early check.

Here is an example of a complete PR: #2382

Getting a Review

Please make sure to get a review from someone on your team or a co-author.
Once this is done and once all the steps above are completed, you should be able to merge.
There is no need for additional reviews if you and your co-authors are happy and meet all of the above.

Feel free to add @pcuenca as a reviewer if you want a final check. Keep in mind he'll be biased toward light reviews
(e.g., check for proper metadata) rather than content reviews unless explicitly asked.

@burtenshaw burtenshaw requested a review from pcuenca February 11, 2026 14:21
@lewtun lewtun requested a review from burtenshaw February 11, 2026 14:24
Copy link
Collaborator

@burtenshaw burtenshaw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this blog post. The topic is very useful to the community. I've left some small comments on titles and links, and a few structural changes in the second section because I found there were too many heading.

Also, I would consider this:

  • remove the formattted bullet chains in favour of prose
  • move a snippet earlier. readers code.

Copy link
Member

@pcuenca pcuenca left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with all of @burtenshaw's suggestions. If possible, I'd try to show some specific error cases found in the wild, in addition to the generic learnings presented throughout.

```python
result = client.step(MCPAction(action_type="ListToolsAction"))
print("Available tools:", len(result.observation.tools_list))
```
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we maybe list a few?

@burtenshaw
Copy link
Collaborator

I've responded to many of my own and @pcuenca 's comments. Remaining are:

  • Review authors. They need to all be hf hub users.
  • Show an output of tools form here
  • It would be nice to get some "specific error cases found in the wild"
  • The thumbnail should be revised.

@christian-washington
Copy link

christian-washington commented Feb 11, 2026

@burtenshaw thank you for your review! i've made most of the changes in this comment, i don't have write access to this project so hopefully someone who does can please apply these changes.

  1. do the users all need to be HF hub users, even if they're labeled "guest" in the markdown? if so, the name list would be: christian-washington, ajasuja, santosh-iima, lewtun and burtenshaw.
  2. The output of tools form is listed below, i can go right after the "Discovering Available Tools" section. let me know what you think @pcuenca

Example output: ListToolsAction

Below is an excerpt of what the Calendar Gym returns when you call ListToolsAction. Each entry includes the tool name plus an input schema (what arguments the tool accepts).

{
  "tools_list": [
    {
      "name": "calendars_list",
      "description": "List calendars visible to the current user.",
      "input_schema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "events_insert",
      "description": "Create an event in a calendar.",
      "input_schema": {
        "type": "object",
        "properties": {
          "calendarId": { "type": "string" },
          "summary": { "type": "string" },
          "start": {
            "type": "object",
            "properties": { "dateTime": { "type": "string" } },
            "required": ["dateTime"]
          },
          "end": {
            "type": "object",
            "properties": { "dateTime": { "type": "string" } },
            "required": ["dateTime"]
          }
        },
        "required": ["calendarId", "summary", "start", "end"]
      }
    }
  ]
}

@christian-washington
Copy link

@burtenshaw @pcuenca i'm going to copy and paste the markdown for the error cases section here, it should go below the sample code section!

Specific error cases found in the wild

In practice, tool integrations rarely fail in dramatic ways; they fail in small, predictable ones. When wiring up MCP tools to real APIs (like calendar operations), we encountered a handful of recurring issues.

Below are three common failure modes we’ve seen in production, along with representative error payloads and mitigation strategies. These examples illustrate not just what can go wrong, but how structured errors can help agents recover gracefully.

1) Schema validation errors (missing or malformed arguments)

What happens:
The agent calls a valid tool (e.g. events_insert), but the arguments do not match the declared JSON schema.

Typical causes:

  • Missing required fields like calendarId
  • Incorrect nesting of start / end
  • Passing a string where an object is expected

Example error payload:

{
  "ok": false,
  "error_type": "validation_error",
  "tool_name": "events_insert",
  "message": "Invalid arguments for tool 'events_insert'.",
  "details": {
    "missing_required_fields": ["calendarId", "end"],
    "invalid_fields": [
      {
        "field": "start",
        "expected_type": "object",
        "received_type": "string"
      }
    ]
  }
}

Mitigation:
Provide one canonical example of a correct 'events_insert' call in your prompt. Return structured validation errors so the model can repair and retry instead of failing silently.

2) Permission / authorization errors (401/403)

What happens:
The tool call is syntactically correct, but the API rejects it due to insufficient permissions.

Typical causes:

  • Missing OAuth scopes
  • Expired access token
  • User lacks write access to the target calendar

Example error payload:

{
  "ok": false,
  "error_type": "permission_error",
  "tool_name": "events_insert",
  "http_status": 403,
  "message": "The authenticated user does not have write access to calendar 'primary'.",
  "remediation": [
    "Ensure the OAuth token includes calendar write scope.",
    "Verify the user has edit access to the target calendar.",
    "Reconnect the integration if the token has expired."
  ]
}

Mitigation:
Clearly document required OAuth scopes. Return structured, actionable remediation steps so the agent can guide the user instead of retrying the same failing call.

3) Datetime / format errors (RFC3339 & timezone issues)

What happens:
The event is rejected by the API, or it is created at an unexpected time.

Typical causes:

  • Missing timezone offset
  • Non-RFC3339 datetime format
  • Incorrect nesting of start.dateTime or end.dateTime
  • Mixing local time and UTC without specifying an offset

Example error payload:

{
  "ok": false,
  "error_type": "format_error",
  "tool_name": "events_insert",
  "message": "Invalid datetime format for field 'start.dateTime'.",
  "details": {
    "received": "02/11/2026 9:30 AM",
    "expected_format": "RFC3339 (e.g. 2026-02-11T09:30:00-05:00)"
  }
}

Mitigation:
Standardize on RFC3339 with explicit timezone offsets (e.g. 2026-02-11T09:30:00-05:00). Include at least one correct datetime example in your documentation to anchor model behavior and reduce repair retries.

@christian-washington
Copy link

@burtenshaw

image has been sent over Slack, and should work through this link, or through the file attachment.

openEnv-header-2160_1080

@burtenshaw
Copy link
Collaborator

Thanks @christian-washington . I've reviewed and merged those changes.

@burtenshaw
Copy link
Collaborator

burtenshaw commented Feb 12, 2026

@lewtun @pcuenca Could you please add a review. We'll release today 16.30 CET.

Co-authored-by: Pedro Cuenca <pedro@huggingface.co>
@burtenshaw burtenshaw merged commit 086c420 into main Feb 12, 2026
1 check passed
@burtenshaw burtenshaw deleted the turing-colab branch February 12, 2026 12:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants