Groovy Code Example
/**
* AI Custom Model
* @type classes
* @namespace ai_custom_model
* @returntype
*/
class CustomModelManageImpl implements CustomModelManage {
// API key for the model
String apiKey = "Bearer xxxx-be91-4adb-8acc-xxxxxx"
// URL endpoint for the model
String url = "https://xxx.xxx.com/api/v3/chat/completions"
// Model identifier
String model = "chat-4"
ChatCompletion.Result chatCompletion(ChatCompletion.Arg arg) {
// Complete message list
def messageList = arg.getMessages() as List
// Message content
String content = arg.getMessages().get(0).getContent()
// Message role
String user = arg.getMessages().get(0).getRole()
// Build message payload
def messages = []
messageList.each { message ->
messages << [
"content": message['content'],
"role" : message['role']
]
}
Map bodyMap = [
"messages": messages,
"model" : model,
"stream" : false
]
log.info(bodyMap)
StringBody body = StringBody.builder().content(bodyMap).build()
Request request = Request.builder()
.method("POST")
.url(url)
.timeout(7000)
.retryCount(0)
.header("Content-Type", "application/json")
.header("Authorization", apiKey)
.body(body)
.build()
// Model invocation - replace with your actual model calling logic
def (Boolean error, HttpResult ret, String message) = Fx.http.execute(request)
// Log model output
log.info(ret)
// Convert result to Fenxiang standard format
ChatCompletion.Result newResult = convertResult(ret)
// Return final result
return newResult
}
// Converts model output to Fenxiang standard result format
private ChatCompletion.Result convertResult(HttpResult result) {
log.info(result)
ChatCompletion.Result res = new ChatCompletion.Result()
if (result.statusCode != 200) {
return res
}
// Extract first choice's message content
def choices = result.content["choices"] as List
def content = choices[0]["message"]["content"] as String
ChatCompletion.Choice newChoice = new ChatCompletion.Choice()
// finish_reason - termination reason for model inference
newChoice.setFinish_reason("")
ChatCompletion.Message newMessage = new ChatCompletion.Message()
newMessage.setRole("user")
newMessage.setContent(content)
newChoice.setMessage(newMessage)
ChatCompletion.Choice[] newChoices = [newChoice] as ChatCompletion.Choice[]
res.setChoices(newChoices)
return res
}
// Debug entry point
static void main(String[] args) {
}
}