openapi.json

This commit is contained in:
Russell Ballestrini 2025-03-21 12:58:03 +00:00
parent e324b6f886
commit 5c1d478350

737
static/openapi.json Normal file
View file

@ -0,0 +1,737 @@
{
"openapi": "3.0.0",
"info": {
"title": "SLOP API",
"description": "A SLOP pattern implementation with dynamic model endpoints, tools, memory, resources, and payment simulation.",
"version": "1.0.0"
},
"servers": [
{
"url": "https://slop.unturf.com",
"description": "Production server"
},
{
"url": "http://localhost:31337",
"description": "Local development server"
}
],
"paths": {
"/chat": {
"post": {
"summary": "Send a message to an AI model",
"tags": ["Chat"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChatRequest"
}
}
}
},
"responses": {
"200": {
"description": "Successful response with AI message",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChatResponse"
}
}
}
},
"404": {
"description": "Model not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"500": {
"description": "Server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/models": {
"get": {
"summary": "List available models",
"tags": ["Models"],
"responses": {
"200": {
"description": "List of model IDs",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ModelsResponse"
}
}
}
}
}
}
},
"/tools": {
"get": {
"summary": "List available tools",
"tags": ["Tools"],
"responses": {
"200": {
"description": "List of tools",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolsResponse"
}
}
}
}
}
}
},
"/tools/{tool_id}": {
"post": {
"summary": "Use a specific tool",
"tags": ["Tools"],
"parameters": [
{
"name": "tool_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"enum": ["calculator", "greet"]
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolRequest"
}
}
}
},
"responses": {
"200": {
"description": "Tool execution result",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
},
"400": {
"description": "Missing required parameter",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"404": {
"description": "Tool not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/memory": {
"get": {
"summary": "List all memory keys",
"tags": ["Memory"],
"responses": {
"200": {
"description": "List of memory keys",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MemoryListResponse"
}
}
}
},
"503": {
"description": "Memory lock timeout",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
},
"post": {
"summary": "Store a key-value pair in memory",
"tags": ["Memory"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MemoryStoreRequest"
}
}
}
},
"responses": {
"200": {
"description": "Successfully stored",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MemoryStoreResponse"
}
}
}
},
"400": {
"description": "Missing key or value",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"503": {
"description": "Memory lock timeout",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/memory/{key}": {
"get": {
"summary": "Retrieve a value by key from memory",
"tags": ["Memory"],
"parameters": [
{
"name": "key",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Retrieved value",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MemoryGetResponse"
}
}
}
},
"503": {
"description": "Memory lock timeout",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
},
"delete": {
"summary": "Delete a memory key",
"tags": ["Memory"],
"parameters": [
{
"name": "key",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successfully deleted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MemoryStoreResponse"
}
}
}
},
"404": {
"description": "Key not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"503": {
"description": "Memory lock timeout",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/resources": {
"get": {
"summary": "List all available resources",
"tags": ["Resources"],
"responses": {
"200": {
"description": "List of resources",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ResourcesResponse"
}
}
}
}
}
}
},
"/resources/{resource_id}": {
"get": {
"summary": "Get a specific resource or nested resources by prefix",
"description": "Retrieves a resource by its exact ID. If no exact match is found, performs a prefix search (e.g., `/resources/foo` returns all resources under `foo/` like `foo/bar` and `foo/baz`).",
"tags": ["Resources"],
"parameters": [
{
"name": "resource_id",
"in": "path",
"required": true,
"schema": {
"type": "string"
},
"description": "The ID of the resource or a prefix for nested resources (e.g., \"foo\" for \"foo/bar\")."
}
],
"responses": {
"200": {
"description": "Resource content or list of nested resources",
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"$ref": "#/components/schemas/ResourceResponse"
},
{
"$ref": "#/components/schemas/ResourcesResponse"
}
]
},
"examples": {
"exactMatch": {
"summary": "Exact resource match",
"value": {
"id": "hello",
"content": "Hello, SLOP!"
}
},
"prefixMatch": {
"summary": "Nested resources via prefix search",
"value": {
"resources": [
{
"id": "foo/bar",
"content": "Nested Foo Bar"
},
{
"id": "foo/baz",
"content": "Nested Foo Baz"
}
]
}
}
}
}
}
},
"404": {
"description": "No resource or nested resources found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
},
"put": {
"summary": "Update or create a resource",
"description": "Updates an existing resource or creates a new one if it doesnt exist.",
"tags": ["Resources"],
"parameters": [
{
"name": "resource_id",
"in": "path",
"required": true,
"schema": {
"type": "string"
},
"description": "The ID of the resource to update or create."
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ResourceUpdateRequest"
}
}
}
},
"responses": {
"200": {
"description": "Resource updated or created successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ResourceUpdateResponse"
}
}
}
},
"400": {
"description": "Missing content field",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/pay": {
"post": {
"summary": "Simulate a payment",
"tags": ["Pay"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PayRequest"
}
}
}
},
"responses": {
"200": {
"description": "Payment simulation result",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PayResponse"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"ChatRequest": {
"type": "object",
"properties": {
"messages": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Message"
}
},
"model": {
"type": "string",
"nullable": true
}
},
"required": ["messages"]
},
"Message": {
"type": "object",
"properties": {
"role": {
"type": "string",
"enum": ["user", "assistant", "system"]
},
"content": {
"type": "string"
}
},
"required": ["role", "content"]
},
"ChatResponse": {
"type": "object",
"properties": {
"choices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"message": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
},
"required": ["content"]
}
},
"required": ["message"]
}
}
},
"required": ["choices"]
},
"ModelsResponse": {
"type": "object",
"properties": {
"models": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": ["models"]
},
"ToolsResponse": {
"type": "object",
"properties": {
"tools": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": ["id", "description"]
}
}
},
"required": ["tools"]
},
"ToolRequest": {
"type": "object",
"properties": {
"expression": {
"type": "string",
"nullable": true
},
"name": {
"type": "string",
"nullable": true
}
}
},
"ToolResponse": {
"type": "object",
"properties": {
"result": {
"oneOf": [
{
"type": "string"
},
{
"type": "integer"
}
]
}
},
"required": ["result"]
},
"MemoryStoreRequest": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": ["key", "value"]
},
"MemoryStoreResponse": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": ["stored", "deleted"]
}
},
"required": ["status"]
},
"MemoryGetResponse": {
"type": "object",
"properties": {
"value": {
"type": "string",
"nullable": true
}
},
"required": ["value"]
},
"MemoryListResponse": {
"type": "object",
"properties": {
"keys": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": ["keys"]
},
"ResourcesResponse": {
"type": "object",
"properties": {
"resources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"content": {
"type": "string"
}
},
"required": ["id", "content"]
}
}
},
"required": ["resources"]
},
"ResourceResponse": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"content": {
"type": "string"
}
},
"required": ["id", "content"]
},
"ResourceUpdateRequest": {
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "The content to set for the resource."
}
},
"required": ["content"]
},
"ResourceUpdateResponse": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": ["updated"]
},
"resource": {
"$ref": "#/components/schemas/ResourceResponse"
}
},
"required": ["status", "resource"]
},
"PayRequest": {
"type": "object",
"properties": {
"amount": {
"type": "number",
"format": "float"
}
},
"required": ["amount"]
},
"PayResponse": {
"type": "object",
"properties": {
"transaction_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": ["success"]
}
},
"required": ["transaction_id", "status"]
},
"ErrorResponse": {
"type": "object",
"properties": {
"error": {
"type": "string"
}
},
"required": ["error"]
}
}
}
}