AiTranslateController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\Http;
  5. use Illuminate\Support\Facades\Log;
  6. use App\Models\PaliText;
  7. class AiTranslateController extends Controller
  8. {
  9. /**
  10. * Display a listing of the resource.
  11. *
  12. * @return \Illuminate\Http\Response
  13. */
  14. public function index() {}
  15. /**
  16. * Store a newly created resource in storage.
  17. *
  18. * @param \Illuminate\Http\Request $request
  19. * @return \Illuminate\Http\Response
  20. */
  21. public function store(Request $request)
  22. {
  23. //
  24. return $this->fetch(strip_tags($request->get('origin')));
  25. }
  26. private function fetch($origin, $engin = 'kimi', $prompt_pre = '', $prompt_suf = '请翻译上述巴利文。')
  27. {
  28. $api = config('mint.ai.accounts');
  29. $selected = array_filter($api, function ($value) use ($engin) {
  30. return $value['name'] === $engin;
  31. });
  32. if (!is_array($selected) || count($selected) === 0) {
  33. return $this->error('no engin name', 200, 200);
  34. }
  35. $url = $selected[0]['api_url'];
  36. $param = [
  37. "model" => $selected[0]['model'],
  38. "messages" => [
  39. ["role" => "system", "content" => "你是翻译人工智能助手,bhikkhu 为专有名词,不可翻译成其他语言。"],
  40. ["role" => "user", "content" => "{$prompt_pre}{$origin}\n{$prompt_suf}"],
  41. ],
  42. "temperature" => 0.3,
  43. ];
  44. $response = Http::withToken($selected[0]['token'])
  45. ->post($url, $param);
  46. if ($response->failed()) {
  47. $this->error('http request error' . $response->json('message'));
  48. Log::error('http request error', ['data' => $response->json()]);
  49. return $this->error($response->json(), 200, 200);
  50. } else {
  51. return $this->ok($response->json());
  52. }
  53. }
  54. /**
  55. * Display the specified resource.
  56. *
  57. * @param string $id
  58. * @return \Illuminate\Http\Response
  59. */
  60. public function show(Request $request, $id)
  61. {
  62. //
  63. $para = explode('-', $id);
  64. if (count($para) >= 2) {
  65. $content = PaliText::where('book', $para[0])
  66. ->where('paragraph', $para[1])
  67. ->value('text');
  68. if (!empty($content)) {
  69. return $this->fetch($content, $request->get('engin', config('mint.ai.default')));
  70. } else {
  71. return $this->error('no content', 200, 200);
  72. }
  73. } else {
  74. return $this->error('参数错误', 403, 403);
  75. }
  76. }
  77. /**
  78. * Update the specified resource in storage.
  79. *
  80. * @param \Illuminate\Http\Request $request
  81. * @param int $id
  82. * @return \Illuminate\Http\Response
  83. */
  84. public function update(Request $request, $id)
  85. {
  86. //
  87. }
  88. /**
  89. * Remove the specified resource from storage.
  90. *
  91. * @param int $id
  92. * @return \Illuminate\Http\Response
  93. */
  94. public function destroy($id)
  95. {
  96. //
  97. }
  98. }