style updates
This commit is contained in:
@@ -1,16 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\AI\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\AI\Contracts\AIManager;
|
||||
use Modules\AI\Models\AIPrompt;
|
||||
|
||||
final class AIApiController extends Controller
|
||||
{
|
||||
public function execute(Request $request,AIPrompt $prompt,AIManager $manager): JsonResponse
|
||||
public function execute(Request $request, AIPrompt $prompt, AIManager $manager): JsonResponse
|
||||
{
|
||||
$data=$request->validate(['variables'=>'nullable|array','provider_id'=>'nullable|integer','model'=>'nullable|string|max:150']);
|
||||
$execution=$manager->execute($prompt,$data['variables']??[],array_filter(['provider_id'=>$data['provider_id']??null,'model'=>$data['model']??null]));
|
||||
return response()->json(['data'=>['execution_id'=>$execution->execution_id,'status'=>$execution->status,'output'=>$execution->output,'usage'=>$execution->usage,'error'=>$execution->error]],$execution->status==='completed'?200:422);
|
||||
$data = $request->validate(['variables' => 'nullable|array', 'provider_id' => 'nullable|integer', 'model' => 'nullable|string|max:150']);
|
||||
$execution = $manager->execute($prompt, $data['variables'] ?? [], array_filter(['provider_id' => $data['provider_id'] ?? null, 'model' => $data['model'] ?? null]));
|
||||
|
||||
return response()->json(['data' => ['execution_id' => $execution->execution_id, 'status' => $execution->status, 'output' => $execution->output, 'usage' => $execution->usage, 'error' => $execution->error]], $execution->status === 'completed' ? 200 : 422);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\AI\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
@@ -11,36 +13,57 @@ use Modules\AI\Models\AIKnowledgeSource;
|
||||
use Modules\AI\Models\AIPrompt;
|
||||
use Modules\AI\Models\AIProvider;
|
||||
use Modules\AI\Services\KnowledgeIndexer;
|
||||
|
||||
final class AIController extends Controller
|
||||
{
|
||||
public function index(): View
|
||||
{
|
||||
return view('ai::admin.index',['providers'=>AIProvider::latest()->get(),'prompts'=>AIPrompt::latest()->paginate(15,'*','prompts'),'executions'=>AIExecution::latest()->limit(15)->get(),'sources'=>AIKnowledgeSource::latest()->limit(15)->get()]);
|
||||
return view('ai::admin.index', ['providers' => AIProvider::latest()->get(), 'prompts' => AIPrompt::latest()->paginate(15, '*', 'prompts'), 'executions' => AIExecution::latest()->limit(15)->get(), 'sources' => AIKnowledgeSource::latest()->limit(15)->get()]);
|
||||
}
|
||||
|
||||
public function storeProvider(Request $request): RedirectResponse
|
||||
{
|
||||
$data=$request->validate(['name'=>'required|string|max:100','driver'=>'required|in:openai_compatible,openai,lm_studio,ollama','base_url'=>'nullable|url','api_key'=>'nullable|string','default_model'=>'required|string|max:150','is_default'=>'nullable|boolean']);
|
||||
if($request->boolean('is_default')) AIProvider::query()->update(['is_default'=>false]);
|
||||
$data['is_default']=$request->boolean('is_default'); AIProvider::create($data); return back()->with('status','AI provider created.');
|
||||
$data = $request->validate(['name' => 'required|string|max:100', 'driver' => 'required|in:openai_compatible,openai,lm_studio,ollama', 'base_url' => 'nullable|url', 'api_key' => 'nullable|string', 'default_model' => 'required|string|max:150', 'is_default' => 'nullable|boolean']);
|
||||
if ($request->boolean('is_default')) {
|
||||
AIProvider::query()->update(['is_default' => false]);
|
||||
}
|
||||
$data['is_default'] = $request->boolean('is_default');
|
||||
AIProvider::create($data);
|
||||
|
||||
return back()->with('status', 'AI provider created.');
|
||||
}
|
||||
public function testProvider(AIProvider $provider,AIManager $manager): RedirectResponse
|
||||
|
||||
public function testProvider(AIProvider $provider, AIManager $manager): RedirectResponse
|
||||
{
|
||||
$result=$manager->testProvider($provider->id); return back()->with($result['ok']?'status':'error',$result['message']);
|
||||
$result = $manager->testProvider($provider->id);
|
||||
|
||||
return back()->with($result['ok'] ? 'status' : 'error', $result['message']);
|
||||
}
|
||||
|
||||
public function storePrompt(Request $request): RedirectResponse
|
||||
{
|
||||
$data=$request->validate(['name'=>'required|string|max:120','slug'=>'nullable|alpha_dash|max:140','purpose'=>'nullable|string|max:100','system_prompt'=>'nullable|string','user_template'=>'required|string']);
|
||||
$data['slug']=$data['slug']?:Str::slug($data['name']); $data['created_by']=auth()->id(); AIPrompt::create($data); return back()->with('status','Prompt created.');
|
||||
$data = $request->validate(['name' => 'required|string|max:120', 'slug' => 'nullable|alpha_dash|max:140', 'purpose' => 'nullable|string|max:100', 'system_prompt' => 'nullable|string', 'user_template' => 'required|string']);
|
||||
$data['slug'] = $data['slug'] ?: Str::slug($data['name']);
|
||||
$data['created_by'] = auth()->id();
|
||||
AIPrompt::create($data);
|
||||
|
||||
return back()->with('status', 'Prompt created.');
|
||||
}
|
||||
public function execute(Request $request,AIPrompt $prompt,AIManager $manager): RedirectResponse
|
||||
|
||||
public function execute(Request $request, AIPrompt $prompt, AIManager $manager): RedirectResponse
|
||||
{
|
||||
$data=$request->validate(['input'=>'required|string|max:50000','provider_id'=>'nullable|exists:ai_providers,id']);
|
||||
$execution=$manager->execute($prompt,['input'=>$data['input']],['provider_id'=>$data['provider_id']??null]);
|
||||
return back()->with($execution->status==='completed'?'status':'error',$execution->status==='completed'?'AI execution completed.':$execution->error);
|
||||
$data = $request->validate(['input' => 'required|string|max:50000', 'provider_id' => 'nullable|exists:ai_providers,id']);
|
||||
$execution = $manager->execute($prompt, ['input' => $data['input']], ['provider_id' => $data['provider_id'] ?? null]);
|
||||
|
||||
return back()->with($execution->status === 'completed' ? 'status' : 'error', $execution->status === 'completed' ? 'AI execution completed.' : $execution->error);
|
||||
}
|
||||
public function storeSource(Request $request,KnowledgeIndexer $indexer): RedirectResponse
|
||||
|
||||
public function storeSource(Request $request, KnowledgeIndexer $indexer): RedirectResponse
|
||||
{
|
||||
$data=$request->validate(['name'=>'required|string|max:150','content'=>'required|string|max:1000000']);
|
||||
$source=AIKnowledgeSource::create(['name'=>$data['name'],'source_kind'=>'manual','content'=>$data['content'],'status'=>'pending']); $indexer->index($source); return back()->with('status','Knowledge source indexed.');
|
||||
$data = $request->validate(['name' => 'required|string|max:150', 'content' => 'required|string|max:1000000']);
|
||||
$source = AIKnowledgeSource::create(['name' => $data['name'], 'source_kind' => 'manual', 'content' => $data['content'], 'status' => 'pending']);
|
||||
$indexer->index($source);
|
||||
|
||||
return back()->with('status','Knowledge source indexed.');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user