AiController.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace manager\controllers;
  3. use app\models\OllamaAI;
  4. use app\models\NvidiaAI;
  5. use Yii;
  6. class AiController extends BaseController
  7. {
  8. public function actionIndex()
  9. {
  10. return 'Используй API для получения данных';
  11. }
  12. public function actionAjaxGetTitle()
  13. {
  14. if (Yii::$app->request->isPost){
  15. $cache = Yii::$app->cache;
  16. $type = Yii::$app->request->post('AI');
  17. $text = Yii::$app->request->post('text');
  18. $tokens = Yii::$app->request->post('tokens');
  19. $progress = Yii::$app->request->post('progress');
  20. $key = 'AI_time_mid'.$type.$progress;
  21. if( $text && $type == 'ollama' ){
  22. $ses = false;
  23. if( \Yii::$app->session->isActive ){
  24. \Yii::$app->session->close();
  25. $ses = true;
  26. }
  27. $ollama = new OllamaAI();
  28. $r = $ollama->generate(strip_tags($text));
  29. $data = $ollama->Getres();
  30. $t = $ollama->GetTime();
  31. $tm = $cache->get($key);
  32. if( $tm ){
  33. $cache->set($key, ($t+$tm)/2);
  34. }else{
  35. $cache->set($key, $t);
  36. }
  37. if( $ses ) \Yii::$app->session->open();
  38. return json_encode( ['status'=>'ok', 'data'=>$data, 'progress'=>$progress] );
  39. }elseif( $text && $type == 'nv' ){
  40. $ses = false;
  41. if( \Yii::$app->session->isActive ){
  42. \Yii::$app->session->close();
  43. $ses = true;
  44. }
  45. $nv = new NvidiaAI();
  46. $r = $nv->generate(strip_tags($text), '', $tokens);
  47. if( $r ){
  48. $data = $nv->Getres();
  49. }else{
  50. if( $ses ) \Yii::$app->session->open();
  51. return json_encode( ['status'=>'err', 'msg'=>'Нет доступа до AI '.$type] );
  52. }
  53. $t = $nv->GetTime();
  54. $tm = $cache->get($key);
  55. if( $tm ){
  56. $cache->set($key, ($t+$tm)/2);
  57. }else{
  58. $cache->set($key, $t);
  59. }
  60. if( $ses ) \Yii::$app->session->open();
  61. return json_encode( ['status'=>'ok', 'data'=>$data, 'progress'=>$progress] );
  62. }else{
  63. return json_encode( ['status'=>'err', 'msg'=>'Нет доступа до AI '.$type] );
  64. }
  65. }
  66. return json_encode( ['status'=>'err', 'msg'=>'Ошибка получения данных'] );
  67. }
  68. public function actionAjaxTime()
  69. {
  70. $tm = 0;
  71. if (Yii::$app->request->isPost){
  72. $cache = Yii::$app->cache;
  73. $type = Yii::$app->request->post('AI');
  74. $progress = Yii::$app->request->post('progress');
  75. $key = 'AI_time_mid'.$type.$progress;
  76. $tm = $cache->get($key);
  77. }
  78. return json_encode( ['status'=>'ok', 'time'=>$tm] );
  79. }
  80. }