Hi @supershaneski
to make things more concrete I am currently trying to embed Scholar-AI and Wolfram Alpha:
Here, are is the openapi config for Scholar-AI
{
"openapi": "3.0.1",
"info": {
"title": "ScholarAI",
"description": "Allows the user to search facts and findings from scientific articles",
"version": "v1"
},
"paths": {
"/api/abstracts": {
"get": {
"operationId": "searchAbstracts",
"summary": "Get relevant paper abstracts by search 2-6 relevant keywords.",
"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"
}
},
{
"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 incrementally. Good for general summary. DO NOT use this endpoint for singular questions, use /api/question instead.",
"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/paperContentResponse"
}
}
}
}
}
}
},
"/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"
}
}
}
}
}
}
},
"/api/question": {
"get": {
"operationId": "question",
"summary": "Get sections of PDF to answer questions about PDF. ALWAYS use this endpoint if the user has a specific question about a singular PDF.",
"parameters": [
{
"name": "question",
"in": "query",
"description": "The user question. Must be in English.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "pdf_url",
"in": "query",
"description": "URL for source PDF",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/paperContentResponse"
}
}
}
},
"402": {
"description": "Premium required",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/premiumRequiredResponse"
}
}
}
}
}
}
}
},
"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."
}
}
},
"paperContentResponse": {
"type": "object",
"properties": {
"chunks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"chunk_num": {
"type": "number",
"description": "The chunk number of the paper."
},
"chunk": {
"type": "string",
"description": "The chunk of the paper."
},
"img_mds": {
"type": "list",
"description": "List of content that appears in the current chunk. Display ALL markdown, including images. The viewing platform ALWAYS supports markdown, ALWAYS show the images."
},
"pdf_url": {
"type": "string",
"description": "Link to the paper PDF."
}
}
},
"description": "The chunk of the paper."
},
"total_chunk_num": {
"type": "number",
"description": "The total chunks of the paper."
},
"hint": {
"type": "string",
"description": "Instructions for GPT to follow regarding this response."
}
}
},
"saveCitationResponse": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "Confirmation of successful save or error message."
}
}
},
"premiumRequiredResponse": {
"type": "object",
"properties": {
"hint": {
"type": "string",
"description": "Suggestion to use premium or alternative for free users."
}
}
}
}
},
"servers": [
{
"url": "https://plugin.scholar-ai.net"
}
]
}
and for Wolfram Alpha
{
"openapi":"3.1.0",
"info":{
"title":"Wolfram",
"version":"v0.1"
},
"servers":[
{
"url":"https://www.wolframalpha.com",
"description":"Wolfram Server for ChatGPT"
}
],
"paths": {
"/api/v1/cloud-plugin": {
"get": {
"operationId": "getWolframCloudResults",
"externalDocs": "https://reference.wolfram.com/language/",
"summary": "Evaluate Wolfram Language code",
"responses": {
"200": {
"description": "The result of the Wolfram Language evaluation",
"content": {
"text/plain": {}
}
},
"500": {
"description": "Wolfram Cloud was unable to generate a result"
},
"400": {
"description": "The request is missing the 'input' parameter"
},
"403": {
"description": "Unauthorized"
},
"503":{
"description":"Service temporarily unavailable. This may be the result of too many requests."
}
},
"parameters": [
{
"name": "input",
"in": "query",
"description": "the input expression",
"required": true,
"schema": {
"type": "string"
}
}
]
}
},
"/api/v1/llm-api": {
"get":{
"operationId":"getWolframAlphaResults",
"externalDocs":"https://products.wolframalpha.com/api",
"summary":"Get Wolfram|Alpha results",
"responses":{
"200":{
"description":"The result of the Wolfram|Alpha query",
"content":{
"text/plain":{
}
}
},
"400":{
"description":"The request is missing the 'input' parameter"
},
"403":{
"description":"Unauthorized"
},
"500":{
"description":"Wolfram|Alpha was unable to generate a result"
},
"501":{
"description":"Wolfram|Alpha was unable to generate a result"
},
"503":{
"description":"Service temporarily unavailable. This may be the result of too many requests."
}
},
"parameters":[
{
"name":"input",
"in":"query",
"description":"the input",
"required":true,
"schema":{
"type":"string"
}
},
{
"name":"assumption",
"in":"query",
"description":"the assumption to use, passed back from a previous query with the same input.",
"required":false,
"explode":true,
"style":"form",
"schema":{
"type":"array",
"items":{
"type":"string"
}
}
}
]
}
}
}
}
I am wondering how I can make it dynamically with then openai API, in the sense that these endpoints are used differently for each different question we can enter?
Could you help me to implement it as I have simply no idea how to do it with the openai API and with langchain it simply does not work as intended.