gptscript-ai / gptscript

Build AI assistants that interact with your systems
https://gptscript.ai
Apache License 2.0
2.84k stars 251 forks source link

Openapi tool - Validate Openapi yaml before executing the tool calls. #223

Open sangee2004 opened 3 months ago

sangee2004 commented 3 months ago

Steps to reproduce the problem:

  1. Run gptscript with invalid Openapi yaml (In my case I used - https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/examples/v3.0/petstore.yaml and removed a space in front of path entry /pets/{petId)
  2. This results in gptscript execution providing the full tool yam as the output.

OUTPUT:

openapi: "3.0.0"
info:
  version: 1.0.0
  title: Swagger Petstore
  license:
    name: MIT
servers:
  - url: http://127.0.0.1:5000
paths:
  /pets:
    get:
      summary: List all pets
      operationId: listPets
      tags:
        - pets
      parameters:
        - name: limit
          in: query
          description: How many items to return at one time (max 100)
          required: false
          schema:
            type: integer
            maximum: 100
            format: int32
      responses:
        '200':
          description: A paged array of pets
          headers:
            x-next:
              description: A link to the next page of responses
              schema:
                type: string
          content:
            application/json:    
              schema:
                $ref: "#/components/schemas/Pets"
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      summary: Create a pet
      operationId: createPets
      tags:
        - pets
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Pet'
        required: true
      responses:
        '201':
          description: Null response
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /pets/{petId}:
    get:
      summary: Info for a specific pet
      operationId: showPetById
      tags:
        - pets
      parameters:
        - name: petId
          in: path
          required: true
          description: The id of the pet to retrieve
          schema:
            type: string
      responses:
        '200':
          description: Expected response to a valid request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Pet"
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
components:
  schemas:
    Pet:
      type: object
      required:
        - id
        - name
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        tag:
          type: string
    Pets:
      type: array
      maxItems: 100
      items:
        $ref: "#/components/schemas/Pet"
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string

Expected Behavior: In this case , we should be able to validate Openapi yaml even before it is used for execution and provide error messages that will help users fix their openapi yaml file.

Note - gptscript --list-tools <yaml> will also not return tools as expected in this case .

g-linville commented 4 weeks ago

I'm testing this out now, using the Validate function in the OpenAPI package we're using. It's failing on one of my Microsoft Graph OpenAPI documents, but any errors in this spec are not the kind of thing that would affect the user, so I think we are probably best off not validating.

cjellick commented 3 weeks ago

Are you suggeseting we close this issue then?

g-linville commented 3 weeks ago

@cjellick yeah