mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-12 18:11:34 +08:00
193 lines
5.5 KiB
Go
193 lines
5.5 KiB
Go
package ai_api
|
|
|
|
import (
|
|
ai_api_dto "github.com/APIParkLab/APIPark/module/ai-api/dto"
|
|
"github.com/getkin/kin-openapi/openapi3"
|
|
)
|
|
|
|
func genOpenAPI3Template(title string, description string) *openapi3.T {
|
|
result := new(openapi3.T)
|
|
result.OpenAPI = "3.1.0"
|
|
result.Info = &openapi3.Info{
|
|
Title: title,
|
|
Description: description,
|
|
Version: "beta",
|
|
}
|
|
|
|
result.Components = components
|
|
result.Paths = new(openapi3.Paths)
|
|
return result
|
|
}
|
|
|
|
func genOperation(summary string, description string, variables []*ai_api_dto.AiPromptVariable) *openapi3.Operation {
|
|
operation := openapi3.NewOperation()
|
|
operation.Summary = summary
|
|
operation.Description = description
|
|
operation.AddParameter(&openapi3.Parameter{
|
|
Name: "Authorization",
|
|
In: "header",
|
|
Required: true,
|
|
Example: "Bearer {your_apipark_apikey}",
|
|
})
|
|
operation.RequestBody = genRequestBody(variables)
|
|
operation.Responses = &openapi3.Responses{}
|
|
operation.Responses.Set("200", genResponse())
|
|
return operation
|
|
}
|
|
|
|
func genRequestHeaders() openapi3.Parameters {
|
|
return openapi3.Parameters{
|
|
{
|
|
Value: &openapi3.Parameter{
|
|
Name: "Authorization",
|
|
In: "header",
|
|
Description: "your_apipark_apikey", // 替换Prompt的变量列表
|
|
Required: true,
|
|
Example: "your_apipark_apikey",
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func genRequestParameters(variables []*ai_api_dto.AiPromptVariable) openapi3.Parameters {
|
|
return openapi3.Parameters{
|
|
{
|
|
Value: &openapi3.Parameter{
|
|
Name: "variables",
|
|
In: "body",
|
|
Description: "Replace the variable list of Prompt", // 替换Prompt的变量列表
|
|
Schema: genVariableSchema(variables).NewRef(),
|
|
Required: true,
|
|
},
|
|
},
|
|
{
|
|
Value: &openapi3.Parameter{
|
|
Name: "messages",
|
|
In: "body",
|
|
Description: "Chat Message",
|
|
Schema: messagesSchemaRef,
|
|
Required: true,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func genRequestBody(variables []*ai_api_dto.AiPromptVariable) *openapi3.RequestBodyRef {
|
|
requestBody := openapi3.NewRequestBody()
|
|
requestBody.Content = openapi3.NewContentWithSchema(genRequestBodySchema(variables), []string{"application/json"})
|
|
return &openapi3.RequestBodyRef{
|
|
Value: requestBody,
|
|
}
|
|
}
|
|
|
|
func genResponse() *openapi3.ResponseRef {
|
|
response := openapi3.NewResponse()
|
|
response.Content = openapi3.NewContentWithJSONSchemaRef(responseSchemaRef)
|
|
description := "Response from the server"
|
|
response.Description = &description
|
|
return &openapi3.ResponseRef{
|
|
Value: response,
|
|
}
|
|
}
|
|
|
|
func genRequestBodySchema(variables []*ai_api_dto.AiPromptVariable) *openapi3.Schema {
|
|
result := openapi3.NewObjectSchema()
|
|
if len(variables) > 0 {
|
|
result.WithProperty("variables", genVariableSchema(variables))
|
|
result.WithRequired([]string{"variables", "messages"})
|
|
}
|
|
|
|
result.WithPropertyRef("messages", messagesSchemaRef)
|
|
|
|
return result
|
|
}
|
|
|
|
func genVariableSchema(variables []*ai_api_dto.AiPromptVariable) *openapi3.Schema {
|
|
variableSchema := openapi3.NewObjectSchema()
|
|
required := make([]string, 0, len(variables))
|
|
for _, v := range variables {
|
|
val := openapi3.NewStringSchema()
|
|
val.Example = ""
|
|
val.Description = v.Description
|
|
if v.Require {
|
|
required = append(required, v.Key)
|
|
}
|
|
variableSchema.WithProperty(v.Key, val)
|
|
}
|
|
variableSchema.WithRequired(required)
|
|
return variableSchema
|
|
}
|
|
|
|
func genComponents() *openapi3.Components {
|
|
result := openapi3.NewComponents()
|
|
result.Schemas = make(openapi3.Schemas)
|
|
result.Schemas["Message"] = messageSchema.NewRef()
|
|
result.Schemas["Messages"] = messagesSchema.NewRef()
|
|
result.Schemas["Response"] = responseSchema.NewRef()
|
|
return &result
|
|
}
|
|
|
|
var (
|
|
messageSchema *openapi3.Schema
|
|
messagesSchema *openapi3.Schema
|
|
messageSchemaRef *openapi3.SchemaRef
|
|
messagesSchemaRef *openapi3.SchemaRef
|
|
responseSchema *openapi3.Schema
|
|
responseSchemaRef *openapi3.SchemaRef
|
|
components *openapi3.Components
|
|
)
|
|
|
|
func init() {
|
|
messageSchema = genMessageSchema()
|
|
messagesSchema = genMessagesSchema()
|
|
messageSchemaRef = openapi3.NewSchemaRef("#/components/schemas/Message", messageSchema)
|
|
messagesSchemaRef = openapi3.NewSchemaRef("#/components/schemas/Messages", messagesSchema)
|
|
|
|
responseSchema = genResponseSchema()
|
|
components = genComponents()
|
|
responseSchemaRef = openapi3.NewSchemaRef("#/components/schemas/Response", responseSchema)
|
|
}
|
|
|
|
func genMessageSchema() *openapi3.Schema {
|
|
result := openapi3.NewObjectSchema()
|
|
result.Title = "Message"
|
|
result.Description = "Chat Message"
|
|
roleSchema := openapi3.NewStringSchema()
|
|
roleSchema.Description = "Role of the message sender"
|
|
roleSchema.Example = "user"
|
|
contentSchema := openapi3.NewStringSchema()
|
|
contentSchema.Description = "The message content"
|
|
contentSchema.Example = "Hello, who are you?"
|
|
result.WithProperties(map[string]*openapi3.Schema{
|
|
"role": roleSchema,
|
|
"content": contentSchema,
|
|
})
|
|
return result
|
|
}
|
|
|
|
func genMessagesSchema() *openapi3.Schema {
|
|
result := openapi3.NewArraySchema()
|
|
result.Title = "Messages"
|
|
result.Description = "Chat Messages"
|
|
result.Items = openapi3.NewSchemaRef("#/components/schemas/Message", messageSchema)
|
|
return result
|
|
}
|
|
|
|
func genResponseSchema() *openapi3.Schema {
|
|
result := openapi3.NewObjectSchema()
|
|
result.Description = "Response from the server"
|
|
result.WithPropertyRef("message", messageSchemaRef)
|
|
openapi3.NewIntegerSchema()
|
|
result.WithProperty("code", openapi3.NewIntegerSchema())
|
|
result.WithProperty("error", openapi3.NewStringSchema())
|
|
result.WithProperty("finish_reason", openapi3.NewStringSchema().WithEnum(
|
|
"stop",
|
|
"length",
|
|
"function_call",
|
|
"content_filter",
|
|
"null",
|
|
))
|
|
|
|
return result
|
|
}
|