mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-14 20:41:15 +08:00
107 lines
3.4 KiB
Go
107 lines
3.4 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 = genComponents()
|
|
result.Paths = new(openapi3.Paths)
|
|
return result
|
|
}
|
|
|
|
func genOperation(description string, variables []*ai_api_dto.AiPromptVariable) *openapi3.Operation {
|
|
operation := openapi3.NewOperation()
|
|
operation.RequestBody = genRequestBody(variables)
|
|
operation.Responses = &openapi3.Responses{}
|
|
operation.Responses.Set("200", genResponse())
|
|
operation.Description = description
|
|
return operation
|
|
}
|
|
|
|
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.NewContentWithSchema(genResponseSchema(), []string{"application/json"})
|
|
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()
|
|
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)
|
|
}
|
|
result.WithProperty("variables", variableSchema.WithRequired(required))
|
|
result.WithProperty("messages", genMessageSchema())
|
|
result.WithRequired([]string{"variables", "messages"})
|
|
return result
|
|
}
|
|
|
|
func genComponents() *openapi3.Components {
|
|
components := openapi3.NewComponents()
|
|
components.Schemas = make(openapi3.Schemas)
|
|
components.Schemas["Message"] = genMessageSchema().NewRef()
|
|
components.Schemas["Response"] = genResponseSchema().NewRef()
|
|
return &components
|
|
}
|
|
|
|
func genMessageSchema() *openapi3.Schema {
|
|
messageSchema := openapi3.NewObjectSchema()
|
|
messageSchema.Title = "Message"
|
|
messageSchema.Description = "Chat Message"
|
|
roleSchema := openapi3.NewStringSchema()
|
|
roleSchema.Description = "Role of the message sender"
|
|
roleSchema.Example = "assistant"
|
|
contentSchema := openapi3.NewStringSchema()
|
|
contentSchema.Description = "The message content"
|
|
contentSchema.Example = "Hello, how can I help you?"
|
|
messageSchema.WithProperties(map[string]*openapi3.Schema{
|
|
"role": roleSchema,
|
|
"content": contentSchema,
|
|
})
|
|
return messageSchema
|
|
}
|
|
|
|
func genResponseSchema() *openapi3.Schema {
|
|
responseSchema := openapi3.NewObjectSchema()
|
|
responseSchema.Description = "Response from the server"
|
|
responseSchema.WithPropertyRef("message", openapi3.NewSchemaRef("#/components/schemas/Message", genMessageSchema()))
|
|
responseSchema.WithProperty("code", openapi3.NewInt32Schema().WithMin(0))
|
|
responseSchema.WithProperty("error", openapi3.NewStringSchema())
|
|
responseSchema.WithProperty("finish_reason", openapi3.NewStringSchema().WithEnum([]string{
|
|
"stop",
|
|
"length",
|
|
"function_call",
|
|
"content_filter",
|
|
"null",
|
|
}))
|
|
return responseSchema
|
|
}
|