LibreChat/packages/data-provider/specs/openapiSpecs.ts

524 lines
14 KiB
TypeScript

import { OpenAPIV3 } from 'openapi-types';
export type FlowchartSchema = {
mermaid: {
type: 'string';
description: 'Flowchart to be rendered, in Mermaid syntax';
};
title: {
type: 'string';
description: 'Title of the flowchart';
};
};
export const getWeatherOpenapiSpec: OpenAPIV3.Document = {
openapi: '3.1.0',
info: {
title: 'Get weather data',
description: 'Retrieves current weather data for a location.',
version: 'v1.0.0',
},
servers: [
{
url: 'https://weather.example.com',
},
],
paths: {
'/location': {
get: {
description: 'Get temperature for a specific location',
operationId: 'GetCurrentWeather',
parameters: [
{
name: 'location',
in: 'query',
description: 'The city and state to retrieve the weather for',
required: true,
schema: {
type: 'string',
},
},
],
requestBody: {
required: true,
content: {
'application/json': {
schema: {
type: 'object',
properties: {
locations: {
type: 'array',
items: {
type: 'object',
properties: {
city: {
type: 'string',
example: 'San Francisco',
},
state: {
type: 'string',
example: 'CA',
},
countryCode: {
type: 'string',
description: 'ISO 3166-1 alpha-2 country code',
example: 'US',
},
time: {
type: 'string',
description:
'Optional time for which the weather is requested, in ISO 8601 format.',
example: '2023-12-04T14:00:00Z',
},
},
required: ['city', 'state', 'countryCode'],
description:
'Details of the location for which the weather data is requested.',
},
description: 'A list of locations to retrieve the weather for.',
},
},
},
},
},
},
deprecated: false,
responses: {},
},
},
},
components: {
schemas: {},
},
};
export const whimsicalOpenapiSpec: OpenAPIV3.Document = {
openapi: '3.0.0',
info: {
version: '1.0.0',
title: 'Diagram to Image API',
description: 'A simple API to generate flowchart, mindmap, or sequence diagram images.',
},
servers: [{ url: 'https://whimsical.com/api' }],
paths: {
'/ai.chatgpt.render-flowchart': {
post: {
operationId: 'postRenderFlowchart',
// 'x-openai-isConsequential': false,
summary: 'Renders a flowchart',
description:
'Accepts a string describing a flowchart and returns a URL to a rendered image',
requestBody: {
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/FlowchartRequest',
},
},
},
required: true,
},
responses: {
'200': {
description: 'URL to the rendered image',
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/FlowchartResponse',
},
},
},
},
},
},
},
},
components: {
schemas: {
FlowchartRequest: {
type: 'object',
properties: {
mermaid: {
type: 'string',
description: 'Flowchart to be rendered, in Mermaid syntax',
},
title: {
type: 'string',
description: 'Title of the flowchart',
},
},
required: ['mermaid'],
},
FlowchartResponse: {
type: 'object',
properties: {
imageURL: {
type: 'string',
description: 'URL of the rendered image',
},
},
},
},
},
};
export const formOpenAPISpec: OpenAPIV3.Document = {
openapi: '3.1.0',
info: {
title: 'Submit Google Form',
description: 'Submit data to a Google Forms',
version: 'v1.0.0',
},
servers: [
{
url: 'https://docs.google.com/forms',
},
],
paths: {
'/formResponse': {
post: {
description: 'Submit a Google Form',
operationId: 'SubmitForm',
requestBody: {
required: true,
content: {
'application/x-www-form-urlencoded': {
schema: {
type: 'object',
properties: {
'entry.123': {
type: 'string',
description: 'Name',
},
'entry.456': {
type: 'string',
description: 'Address',
},
},
},
},
},
},
deprecated: false,
responses: {},
},
},
},
components: {
schemas: {},
},
};
export const scholarAIOpenapiSpec = `
openapi: 3.0.1
info:
title: ScholarAI
description: Allows the user to search facts and findings from scientific articles
version: 'v1'
servers:
- url: https://scholar-ai.net
paths:
/api/abstracts:
get:
operationId: searchAbstracts
summary: Get relevant paper abstracts by keywords search
parameters:
- name: keywords
in: query
description: Keywords of inquiry which should appear in article. Must be in English.
required: true
schema:
type: string
- name: sort
in: query
description: The sort order for results. Valid values are cited_by_count or publication_date. Excluding this value does a relevance based search.
required: false
schema:
type: string
enum:
- cited_by_count
- publication_date
- name: query
in: query
description: The user query
required: true
schema:
type: string
- name: peer_reviewed_only
in: query
description: Whether to only return peer reviewed articles. Defaults to true, ChatGPT should cautiously suggest this value can be set to false
required: false
schema:
type: string
- name: start_year
in: query
description: The first year, inclusive, to include in the search range. Excluding this value will include all years.
required: false
schema:
type: string
- name: end_year
in: query
description: The last year, inclusive, to include in the search range. Excluding this value will include all years.
required: false
schema:
type: string
- name: offset
in: query
description: The offset of the first result to return. Defaults to 0.
required: false
schema:
type: string
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/searchAbstractsResponse'
/api/fulltext:
get:
operationId: getFullText
summary: Get full text of a paper by URL for PDF
parameters:
- name: pdf_url
in: query
description: URL for PDF
required: true
schema:
type: string
- name: chunk
in: query
description: chunk number to retrieve, defaults to 1
required: false
schema:
type: number
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/getFullTextResponse'
/api/save-citation:
get:
operationId: saveCitation
summary: Save citation to reference manager
parameters:
- name: doi
in: query
description: Digital Object Identifier (DOI) of article
required: true
schema:
type: string
- name: zotero_user_id
in: query
description: Zotero User ID
required: true
schema:
type: string
- name: zotero_api_key
in: query
description: Zotero API Key
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/saveCitationResponse'
components:
schemas:
searchAbstractsResponse:
type: object
properties:
next_offset:
type: number
description: The offset of the next page of results.
total_num_results:
type: number
description: The total number of results.
abstracts:
type: array
items:
type: object
properties:
title:
type: string
abstract:
type: string
description: Summary of the context, methods, results, and conclusions of the paper.
doi:
type: string
description: The DOI of the paper.
landing_page_url:
type: string
description: Link to the paper on its open-access host.
pdf_url:
type: string
description: Link to the paper PDF.
publicationDate:
type: string
description: The date the paper was published in YYYY-MM-DD format.
relevance:
type: number
description: The relevance of the paper to the search query. 1 is the most relevant.
creators:
type: array
items:
type: string
description: The name of the creator.
cited_by_count:
type: number
description: The number of citations of the article.
description: The list of relevant abstracts.
getFullTextResponse:
type: object
properties:
full_text:
type: string
description: The full text of the paper.
pdf_url:
type: string
description: The PDF URL of the paper.
chunk:
type: number
description: The chunk of the paper.
total_chunk_num:
type: number
description: The total chunks of the paper.
saveCitationResponse:
type: object
properties:
message:
type: string
description: Confirmation of successful save or error message.`;
export const swapidev = `
openapi: 3.0.3
info:
title: Star Wars API
description: This is a simple API that provides information about the Star Wars universe.
version: 1.0.0
servers:
- url: https://swapi.dev
paths:
/api/people:
get:
summary: List all people
operationId: getPeople
tags:
- People
responses:
'200':
description: A list of people
content:
application/json:
schema:
type: object
properties:
count:
type: integer
example: 82
next:
type: string
nullable: true
example: https://swapi.dev/api/people/?page=2
previous:
type: string
nullable: true
example: null
results:
type: array
items:
$ref: '#/components/schemas/Person'
/api/people/{id}:
get:
summary: Get a person by ID
operationId: getPersonById
tags:
- People
parameters:
- name: id
in: path
required: true
description: The ID of the person to retrieve
schema:
type: string
responses:
'200':
description: A single person
content:
application/json:
schema:
$ref: '#/components/schemas/Person'
'404':
description: Person not found
components:
schemas:
Person:
type: object
properties:
name:
type: string
example: Luke Skywalker
height:
type: string
example: "172"
mass:
type: string
example: "77"
hair_color:
type: string
example: blond
skin_color:
type: string
example: fair
eye_color:
type: string
example: blue
birth_year:
type: string
example: "19BBY"
gender:
type: string
example: male
homeworld:
type: string
example: https://swapi.dev/api/planets/1/
films:
type: array
items:
type: string
example: https://swapi.dev/api/films/1/
species:
type: array
items:
type: string
example: https://swapi.dev/api/species/1/
vehicles:
type: array
items:
type: string
example: https://swapi.dev/api/vehicles/14/
starships:
type: array
items:
type: string
example: https://swapi.dev/api/starships/12/
created:
type: string
format: date-time
example: 2014-12-09T13:50:51.644000Z
edited:
type: string
format: date-time
example: 2014-12-20T21:17:56.891000Z
url:
type: string
example: https://swapi.dev/api/people/1/`;