|
|
@@ -6,9 +6,11 @@ use Illuminate\Console\Command;
|
|
|
use App\Http\Api\Mq;
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
use Illuminate\Support\Facades\Http;
|
|
|
-use App\Http\Api\UserApi;
|
|
|
-use App\Http\Controllers\AuthController;
|
|
|
+use Illuminate\Support\Str;
|
|
|
|
|
|
+use App\Http\Controllers\AuthController;
|
|
|
+use App\Models\Sentence;
|
|
|
+use App\Models\ModelLog;
|
|
|
|
|
|
class MqAiTranslate extends Command
|
|
|
{
|
|
|
@@ -51,46 +53,129 @@ class MqAiTranslate extends Command
|
|
|
$this->info(" [*] Waiting for {$queue}. To exit press CTRL+C");
|
|
|
Log::debug("mq:progress start.");
|
|
|
Mq::worker($exchange, $queue, function ($message) {
|
|
|
+ Log::debug('start', ['message' => $message]);
|
|
|
+ //写入 model log
|
|
|
+ $modelLog = new ModelLog();
|
|
|
+ $modelLog->uid = Str::uuid();
|
|
|
|
|
|
$param = [
|
|
|
"model" => $message->model->model,
|
|
|
"messages" => [
|
|
|
- ["role" => "system", "content" => "你是翻译人工智能助手.bhikkhu 为专有名词,不可翻译成其他语言。"],
|
|
|
- ["role" => "user", "content" => $message->content],
|
|
|
+ ["role" => "system", "content" => "你是翻译人工智能助手."],
|
|
|
+ ["role" => "user", "content" => $message->prompt],
|
|
|
],
|
|
|
- "temperature" => 0.3,
|
|
|
+ "temperature" => 0.7,
|
|
|
"stream" => false
|
|
|
];
|
|
|
- $response = Http::withToken($message->model->token)
|
|
|
- ->retry(2, 1000)
|
|
|
+ $this->info('ai request' . $message->model->url);
|
|
|
+ Log::debug('ai api request', [
|
|
|
+ 'url' => $message->model->url,
|
|
|
+ 'data' => $param
|
|
|
+ ]);
|
|
|
+ $modelLog->model_id = $message->model->uid;
|
|
|
+ $modelLog->request_url = $message->model->url;
|
|
|
+ $modelLog->request_at = now();
|
|
|
+ $modelLog->request_data = json_encode($param, JSON_UNESCAPED_UNICODE);
|
|
|
+ $response = Http::withToken($message->model->key)
|
|
|
+ ->retry(1, 2000)
|
|
|
->post($message->model->url, $param);
|
|
|
+ $modelLog->status = $response->status();
|
|
|
+ $modelLog->response_data = json_encode($response->json(), JSON_UNESCAPED_UNICODE);
|
|
|
if ($response->failed()) {
|
|
|
+ $modelLog->success = false;
|
|
|
+ $modelLog->save();
|
|
|
$this->error('http response error' . $response->json('message'));
|
|
|
Log::error('http response error', ['data' => $response->json()]);
|
|
|
return 1;
|
|
|
}
|
|
|
+ $modelLog->save();
|
|
|
+ $this->info('log saved');
|
|
|
$aiData = $response->json();
|
|
|
Log::debug('http response', ['data' => $response->json()]);
|
|
|
+ $responseContent = $aiData['choices'][0]['message']['content'];
|
|
|
+ $this->info('ai content' . $responseContent);
|
|
|
|
|
|
- //获取ai帐号的用户token
|
|
|
- $user = UserApi::getByName(config('mint.ai.assistant'));
|
|
|
- $token = AuthController::getUserToken($user['id']);
|
|
|
- Log::debug('ai assistant token', [
|
|
|
- 'user' => $user,
|
|
|
- 'token' => $token
|
|
|
- ]);
|
|
|
+ //获取model token
|
|
|
+ Log::debug('ai assistant token', ['user' => $message->model->uid]);
|
|
|
+ $token = AuthController::getUserToken($message->model->uid);
|
|
|
+ Log::debug('ai assistant token', ['token' => $token]);
|
|
|
|
|
|
//写入句子库
|
|
|
- $url = '/v2/sentence';
|
|
|
+ $url = config('app.url') . '/api/v2/sentence';
|
|
|
$sentData = [];
|
|
|
+ $message->sentence->content = $responseContent;
|
|
|
$sentData[] = $message->sentence;
|
|
|
+ $this->info("upload to {$url}");
|
|
|
+ Log::debug('sentence update http request', ['data' => $sentData]);
|
|
|
$response = Http::withToken($token)->post($url, [
|
|
|
'sentences' => $sentData,
|
|
|
]);
|
|
|
Log::debug('sentence update http response', ['data' => $response->json()]);
|
|
|
- //写入task log
|
|
|
+ if ($response->failed()) {
|
|
|
+ $this->error('upload error' . $response->json('message'));
|
|
|
+ Log::error('upload error', ['data' => $response->json()]);
|
|
|
+ } else {
|
|
|
+ $this->info('upload successful');
|
|
|
+ }
|
|
|
+ //写入discussion
|
|
|
+ #获取句子id
|
|
|
+ $sUid = Sentence::where('book_id', $message->sentence->book_id)
|
|
|
+ ->where('paragraph', $message->sentence->paragraph)
|
|
|
+ ->where('word_start', $message->sentence->word_start)
|
|
|
+ ->where('word_end', $message->sentence->word_end)
|
|
|
+ ->where('channel_uid', $message->sentence->channel_uid)
|
|
|
+ ->value('uid');
|
|
|
+ $url = config('app.url') . '/api/v2/discussion';
|
|
|
+ $data = [
|
|
|
+ 'res_id' => $sUid,
|
|
|
+ 'res_type' => 'sentence',
|
|
|
+ 'title' => 'ai 译文',
|
|
|
+ 'content' => $responseContent,
|
|
|
+ 'content_type' => 'markdown',
|
|
|
+ 'type' => 'discussion',
|
|
|
+ ];
|
|
|
+ $response = Http::withToken($token)->post($url, $data);
|
|
|
+ if ($response->failed()) {
|
|
|
+ $this->error('discussion error' . $response->json('message'));
|
|
|
+ Log::error('discussion error', ['data' => $response->json()]);
|
|
|
+ } else {
|
|
|
+ $this->info('discussion successful');
|
|
|
+ }
|
|
|
//修改task 完成度
|
|
|
+ $taskProgress = $message->task->progress;
|
|
|
+ $progress = (int)($taskProgress->current * 100 / $taskProgress->total);
|
|
|
+ $url = config('app.url') . '/api/v2/task/' . $message->task->task_id;
|
|
|
+ $data = [
|
|
|
+ 'progress' => $progress,
|
|
|
+ ];
|
|
|
+ Log::debug('task progress request', ['url' => $url, 'data' => $data]);
|
|
|
+ $response = Http::withToken($token)->patch($url, $data);
|
|
|
+ if ($response->failed()) {
|
|
|
+ $this->error('task progress error' . $response->json('message'));
|
|
|
+ Log::error('task progress error', ['data' => $response->json()]);
|
|
|
+ } else {
|
|
|
+ $this->info('task progress successful progress=' . $response->json()['data']['progress']);
|
|
|
+ }
|
|
|
+
|
|
|
+ //完成 修改状态
|
|
|
+ if ($taskProgress->current === $taskProgress->total) {
|
|
|
+ $url = config('app.url') . '/api/v2/task-status/' . $message->task->task_id;
|
|
|
+ $data = [
|
|
|
+ 'status' => 'done',
|
|
|
+ ];
|
|
|
+ Log::debug('task status request', ['url' => $url, 'data' => $data]);
|
|
|
+ $response = Http::withToken($token)->patch($url, $data);
|
|
|
+ //判断状态码
|
|
|
+ if ($response->failed()) {
|
|
|
+ $this->error('task status error' . $response->json('message'));
|
|
|
+ Log::error('task status error', ['data' => $response->json()]);
|
|
|
+ } else {
|
|
|
+ $this->info('task status successful ');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
+ sleep(2);
|
|
|
return 0;
|
|
|
});
|
|
|
return 0;
|