visuddhinanda 1 rok temu
rodzic
commit
5c430414fa

+ 46 - 0
api-v8/app/Console/Commands/TestAiTask.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\Http\Api\AiTaskPrepare;
+
+class TestAiTask extends Command
+{
+    /**
+     * The name and signature of the console command.
+     * php artisan test:ai.task c77af42f-ffb5-48ae-af71-4c32e1c30dab
+     * @var string
+     */
+    protected $signature = 'test:ai.task {id}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'test ai task';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return int
+     */
+    public function handle()
+    {
+        $taskId = $this->argument('id');
+        $params = AiTaskPrepare::translate($taskId);
+        var_dump($params);
+        return 0;
+    }
+}

+ 85 - 0
api-v8/app/Http/Api/AiTaskPrepare.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace App\Http\Api;
+
+use App\Models\Task;
+use App\Models\PaliText;
+use App\Models\PaliSentence;
+
+class AiTaskPrepare
+{
+    public static function translate(string $taskId)
+    {
+        $task = Task::findOrFail($taskId);
+        $description = $task->description;
+        $rows = explode("\n", $description);
+        $params = [];
+        foreach ($rows as $key => $row) {
+            if (strpos($row, '=') !== false) {
+                $param = explode('=', $row);
+                $params[$param[0]] = $param[1];
+            }
+        }
+        if (!isset($param['type']) || !isset($param['book']) || !isset($param['para'])) {
+            return false;
+        }
+
+        //get sentences in article
+        $sentences = array();
+        $totalLen = 0;
+        switch ($param['type']) {
+            case 'sentence':
+                $sentences[] = explode('-', $param['id']);
+                break;
+            case 'paragraph':
+                $sent = PaliSentence::where('book', $param['book'])
+                    ->where('paragraph', $param['para'])->orderBy('word_begin')->get();
+                foreach ($sent as $key => $value) {
+                    $sentences[] = [$param['book'], $param['para'], $value->word_begin, $value->word_end];
+                }
+                break;
+            case 'chapter':
+                $chapterLen = PaliText::where('book', $param['book'])
+                    ->where('paragraph', $param['para'])->value('chapter_len');
+                $sent = PaliSentence::where('book', $param['book'])
+                    ->whereBetween('paragraph', [$param['para'], $param['para'] + $chapterLen - 1])
+                    ->orderBy('paragraph')
+                    ->orderBy('word_begin')->get();
+                foreach ($sent as $key => $value) {
+                    $sentences[] = [$param['book'], $param['para'], $value->word_begin, $value->word_end];
+                }
+                break;
+            default:
+                return false;
+                break;
+        }
+
+        //render prompt
+        $mdRender = new MdRender([
+            'format' => 'prompt',
+            'footnote' => false,
+            'paragraph' => false,
+        ]);
+        $m = new \Mustache_Engine(array(
+            'entity_flags' => ENT_QUOTES,
+            'escape' => function ($value) {
+                return $value;
+            }
+        ));
+
+        $params = [];
+        foreach ($sentences as $key => $sentence) {
+            $sid = implode('-', $sentence);
+            $data['pali'] = '{{' . $sid . '}}';
+            if (isset($param['nissaya'])) {
+                $data['nissaya'] = '{{' . $sid . '@' . $param['nissaya'] . '}}';
+            }
+            $content = $m->render($description, $data);
+            $prompt = $mdRender->convert($content, []);
+            $params[] = $prompt;
+            //gen mq
+        }
+
+        return $params;
+    }
+}