AiController.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. $progress = Yii::$app->request->post('progress');
  19. $key = 'AI_time_mid'.$type.$progress;
  20. if( $text && $type == 'ollama' ){
  21. $ses = false;
  22. if( \Yii::$app->session->isActive ){
  23. \Yii::$app->session->close();
  24. $ses = true;
  25. }
  26. $ollama = new OllamaAI();
  27. $r = $ollama->generate(strip_tags($text));
  28. $data = $ollama->Getres();
  29. $t = $ollama->GetTime();
  30. $tm = $cache->get($key);
  31. if( $tm ){
  32. $cache->set($key, ($t+$tm)/2);
  33. }else{
  34. $cache->set($key, $t);
  35. }
  36. if( $ses ) \Yii::$app->session->open();
  37. return json_encode( ['status'=>'ok', 'data'=>$data, 'progress'=>$progress] );
  38. }elseif( $text && $type == 'nv' ){
  39. $ses = false;
  40. if( \Yii::$app->session->isActive ){
  41. \Yii::$app->session->close();
  42. $ses = true;
  43. }
  44. $nv = new NvidiaAI();
  45. $r = $nv->generate(strip_tags($text));
  46. if( $r ){
  47. $data = $nv->Getres();
  48. }else{
  49. if( $ses ) \Yii::$app->session->open();
  50. return json_encode( ['status'=>'err', 'msg'=>'Нет доступа до AI '.$type] );
  51. }
  52. $t = $nv->GetTime();
  53. $tm = $cache->get($key);
  54. if( $tm ){
  55. $cache->set($key, ($t+$tm)/2);
  56. }else{
  57. $cache->set($key, $t);
  58. }
  59. if( $ses ) \Yii::$app->session->open();
  60. return json_encode( ['status'=>'ok', 'data'=>$data, 'progress'=>$progress] );
  61. }else{
  62. return json_encode( ['status'=>'err', 'msg'=>'Нет доступа до AI '.$type] );
  63. }
  64. }
  65. return json_encode( ['status'=>'err', 'msg'=>'Ошибка получения данных'] );
  66. }
  67. public function actionAjaxTime()
  68. {
  69. $tm = 0;
  70. if (Yii::$app->request->isPost){
  71. $cache = Yii::$app->cache;
  72. $type = Yii::$app->request->post('AI');
  73. $progress = Yii::$app->request->post('progress');
  74. $key = 'AI_time_mid'.$type.$progress;
  75. $tm = $cache->get($key);
  76. }
  77. return json_encode( ['status'=>'ok', 'time'=>$tm] );
  78. }
  79. }