增加
This commit is contained in:
parent
ce8aff3626
commit
97753a264a
78
app/Http/Controllers/Api/AssistantController.php
Normal file
78
app/Http/Controllers/Api/AssistantController.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\AssistantRequest;
|
||||
use App\Models\Assistant;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AssistantController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
return $this->success(
|
||||
Assistant::whereUserId($request->user('api')->id)->get()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'string|required',
|
||||
'description' => 'string|required',
|
||||
'prompt' => 'string|required|max:2000',
|
||||
]);
|
||||
|
||||
$assistantModel = new Assistant();
|
||||
|
||||
$assistant = $assistantModel->create([
|
||||
'name' => $request->input('name'),
|
||||
'description' => $request->input('description'),
|
||||
'prompt' => $request->input('prompt'),
|
||||
'user_id' => $request->user('api')->id,
|
||||
]);
|
||||
|
||||
// $tools = $request->input('tools');
|
||||
|
||||
// 检测这些工具是否存在且是否属于用户
|
||||
// $tools = $assistantModel->whereIn('id', $tools)->whereUserId($request->user('api')->id)->get();
|
||||
//
|
||||
// $assistant->tools()->sync($tools->pluck('id')->toArray());
|
||||
//
|
||||
//
|
||||
// $assistant->tools()->sync($request->input('tools'));
|
||||
|
||||
return $this->created($assistant);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(AssistantRequest $request, Assistant $assistant)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(AssistantRequest $request, Assistant $assistant)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(AssistantRequest $request, Assistant $assistant)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
58
app/Http/Controllers/Api/AssistantToolController.php
Normal file
58
app/Http/Controllers/Api/AssistantToolController.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\AssistantRequest;
|
||||
use App\Models\Assistant;
|
||||
use App\Models\Tool;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AssistantToolController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(Request $request, Assistant $assistant)
|
||||
{
|
||||
return $this->success(
|
||||
$assistant->tools()->get()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(AssistantRequest $request, Assistant $assistant)
|
||||
{
|
||||
$request->validate([
|
||||
'tool_id' => 'required|exists:tools,id',
|
||||
]);
|
||||
|
||||
$tool = Tool::find($request->input('tool_id'));
|
||||
// 检测 tool是否属于user
|
||||
if ($tool->user_id !== $request->user('api')->id) {
|
||||
return $this->forbidden();
|
||||
}
|
||||
|
||||
// 检测是否存在
|
||||
if ($assistant->tools()->where('tool_id', $tool->id)->exists()) {
|
||||
return $this->conflict('The tool already exists');
|
||||
}
|
||||
|
||||
$assistant->tools()->attach($tool->id);
|
||||
|
||||
return $this->created($assistant->tools);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(AssistantRequest $request, Assistant $assistant, Tool $tool)
|
||||
{
|
||||
// 从 assistant_tools 表中删除
|
||||
$assistant->tools()->detach($tool->id);
|
||||
|
||||
return $this->deleted();
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
87
app/Http/Controllers/Api/ToolController.php
Normal file
87
app/Http/Controllers/Api/ToolController.php
Normal file
@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\ToolRequest;
|
||||
use App\Models\Tool;
|
||||
use App\Repositories\Tool\Tool as ToolRepo;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class ToolController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
return $this->success(
|
||||
Tool::whereUserId($request->user('api')->id)->get()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'string|required',
|
||||
'description' => 'string|nullable',
|
||||
'url' => 'string|required',
|
||||
'api_key' => 'string|nullable',
|
||||
]);
|
||||
|
||||
$url = $request->input('url');
|
||||
|
||||
// 检测是否存在
|
||||
if (Tool::whereDiscoveryUrl($url)->exists()) {
|
||||
return $this->conflict('The tool already exists');
|
||||
}
|
||||
|
||||
$json = Http::get($url);
|
||||
|
||||
$toolRepo = new ToolRepo($json->json());
|
||||
|
||||
$tool = new Tool();
|
||||
$tool->create([
|
||||
'name' => $toolRepo->name,
|
||||
'description' => $toolRepo->description,
|
||||
'discovery_url' => $url,
|
||||
'api_key' => $request->input('api_key'),
|
||||
'data' => $toolRepo,
|
||||
'user_id' => $request->user('api')->id,
|
||||
]);
|
||||
|
||||
return $this->created($tool);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(ToolRequest $request, Tool $tool)
|
||||
{
|
||||
return $this->success($tool);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(ToolRequest $request, Tool $tool)
|
||||
{
|
||||
$tool->delete();
|
||||
|
||||
return $this->deleted();
|
||||
}
|
||||
}
|
@ -2,7 +2,123 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
abstract class Controller
|
||||
{
|
||||
//
|
||||
public function success($data = [], $status = 200): JsonResponse
|
||||
{
|
||||
return $this->apiResponse($data, $status);
|
||||
}
|
||||
|
||||
public function apiResponse($data = [], $status = 200): JsonResponse
|
||||
{
|
||||
// if data is string, then it is error message
|
||||
if (is_string($data)) {
|
||||
$data = [
|
||||
'message' => $data,
|
||||
];
|
||||
}
|
||||
|
||||
return response()->json($data, $status)->setEncodingOptions(JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
public function created($message = 'Created'): JsonResponse
|
||||
{
|
||||
return $this->success($message, 201);
|
||||
}
|
||||
|
||||
public function noContent($message = 'No content'): JsonResponse
|
||||
{
|
||||
return $this->success($message, 204);
|
||||
}
|
||||
|
||||
public function badRequest($message = 'Bad request'): JsonResponse
|
||||
{
|
||||
return $this->error($message);
|
||||
}
|
||||
|
||||
public function error($message = '', $code = 400): JsonResponse
|
||||
{
|
||||
return $this->apiResponse($message, $code);
|
||||
}
|
||||
|
||||
public function serviceUnavailable($message = 'Service unavailable'): JsonResponse
|
||||
{
|
||||
return $this->error($message, 503);
|
||||
}
|
||||
|
||||
public function forbidden($message = 'Forbidden'): JsonResponse
|
||||
{
|
||||
return $this->error($message, 403);
|
||||
}
|
||||
|
||||
public function notFound($message = 'Not found'): JsonResponse
|
||||
{
|
||||
return $this->error($message, 404);
|
||||
}
|
||||
|
||||
public function methodNotAllowed($message = 'Method not allowed'): JsonResponse
|
||||
{
|
||||
return $this->error($message, 405);
|
||||
}
|
||||
|
||||
public function tooManyRequests($message = 'Too many requests'): JsonResponse
|
||||
{
|
||||
return $this->error($message, 429);
|
||||
}
|
||||
|
||||
public function serverError($message = 'Server error'): JsonResponse
|
||||
{
|
||||
return $this->error($message, 500);
|
||||
}
|
||||
|
||||
public function failed($message = 'Failed', $code = 400): JsonResponse
|
||||
{
|
||||
return $this->apiResponse($message, $code);
|
||||
}
|
||||
|
||||
public function unauthorized($message = 'Unauthorized'): JsonResponse
|
||||
{
|
||||
return $this->error($message, 401);
|
||||
}
|
||||
|
||||
public function accepted($message = 'Accepted'): JsonResponse
|
||||
{
|
||||
return $this->success($message, 202);
|
||||
}
|
||||
|
||||
public function updated(mixed $message = 'Updated'): JsonResponse
|
||||
{
|
||||
if ($message instanceof Model) {
|
||||
$message = $message->getChanges();
|
||||
}
|
||||
|
||||
return $this->success($message);
|
||||
}
|
||||
|
||||
public function deleted($message = 'Deleted'): JsonResponse
|
||||
{
|
||||
return $this->success($message, 204);
|
||||
}
|
||||
|
||||
public function notAllowed($message = 'Not allowed'): JsonResponse
|
||||
{
|
||||
return $this->error($message, 405);
|
||||
}
|
||||
|
||||
public function conflict($message = 'Conflict'): JsonResponse
|
||||
{
|
||||
return $this->error($message, 409);
|
||||
}
|
||||
|
||||
public function notAcceptable($message = 'Not acceptable'): JsonResponse
|
||||
{
|
||||
return $this->error($message, 406);
|
||||
}
|
||||
|
||||
public function preconditionFailed($message = 'Precondition failed'): JsonResponse
|
||||
{
|
||||
return $this->error($message, 412);
|
||||
}
|
||||
}
|
||||
|
@ -1,46 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AssistantController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(Request $request) {}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
@ -30,6 +30,7 @@ class AuthController extends Controller
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->callback_url = route('oauth.callback');
|
||||
$this->openIDLogic = app(OpenIDLogic::class);
|
||||
}
|
||||
|
||||
|
@ -1,75 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use Apiboard\OpenAPI\OpenAPI;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Repositories\Tool\Tool;
|
||||
use cebe\openapi\exceptions\IOException;
|
||||
use cebe\openapi\exceptions\TypeErrorException;
|
||||
use cebe\openapi\exceptions\UnresolvableReferenceException;
|
||||
use cebe\openapi\json\InvalidJsonPointerSyntaxException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class ToolController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'string|required',
|
||||
'description' => 'string|nullable',
|
||||
'url' => 'string|required',
|
||||
'api_key' => 'string|nullable',
|
||||
]);
|
||||
|
||||
$url = $request->input('url');
|
||||
|
||||
|
||||
$url = "localhost:8081/fn.php";
|
||||
|
||||
$json = Http::get($url);
|
||||
|
||||
|
||||
|
||||
$tool = new Tool($json->json());
|
||||
|
||||
dd($tool);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
21
app/Http/Middleware/JSONRequest.php
Normal file
21
app/Http/Middleware/JSONRequest.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class JSONRequest
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$request->headers->set('Accept', 'application/json');
|
||||
return $next($request);
|
||||
}
|
||||
}
|
34
app/Http/Requests/AssistantRequest.php
Normal file
34
app/Http/Requests/AssistantRequest.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class AssistantRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
$assistant = $this->route('assistant');
|
||||
|
||||
if ($assistant && $assistant->user_id === $this->user('api')->id) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
33
app/Http/Requests/ToolRequest.php
Normal file
33
app/Http/Requests/ToolRequest.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class ToolRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
$tool = $this->route('tool');
|
||||
if ($tool) {
|
||||
return $tool->user_id === $this->user()->id;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
@ -6,7 +6,8 @@
|
||||
|
||||
class Qwen extends Base
|
||||
{
|
||||
protected string $model = "qwen-max";
|
||||
protected string $model = 'qwen-max';
|
||||
|
||||
/**
|
||||
* Create a new class instance.
|
||||
*/
|
||||
@ -15,30 +16,30 @@ public function __construct()
|
||||
//
|
||||
}
|
||||
|
||||
public function getResponse()
|
||||
public function getResponse(): void
|
||||
{
|
||||
$client = new Client([
|
||||
'headers' => [
|
||||
'Content-Type' => 'application/json',
|
||||
'Accept' => 'text/event-stream',
|
||||
'Cache-Control' => 'no-cache',
|
||||
'Authorization' => 'Bearer ' . config('services.dashscope.api_key'),
|
||||
]
|
||||
'Authorization' => 'Bearer '.config('services.dashscope.api_key'),
|
||||
],
|
||||
]);
|
||||
|
||||
$url = config('services.dashscope.api_base') . '/compatible-mode/v1/chat/completions';
|
||||
$url = config('services.dashscope.api_base').'/compatible-mode/v1/chat/completions';
|
||||
|
||||
$messages = [
|
||||
[
|
||||
'role' => 'user',
|
||||
'content' => "你好",
|
||||
'content' => '你好',
|
||||
],
|
||||
];
|
||||
|
||||
$jsonBody = json_encode([
|
||||
'model' => $this->model,
|
||||
'messages' => $messages,
|
||||
'stream' => true
|
||||
'stream' => true,
|
||||
]);
|
||||
|
||||
$response = $client->request('POST', $url, [
|
||||
@ -47,15 +48,14 @@ public function getResponse()
|
||||
]);
|
||||
|
||||
$body = $response->getBody();
|
||||
// while (!$body->eof()) {
|
||||
// echo $body->read(1024);
|
||||
// }
|
||||
// while (!$body->eof()) {
|
||||
// echo $body->read(1024);
|
||||
// }
|
||||
|
||||
while (!$body->eof()) {
|
||||
// $body->read(1);
|
||||
while (! $body->eof()) {
|
||||
// $body->read(1);
|
||||
echo $body->read(1);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ class Assistant extends Model
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'description',
|
||||
'prompt',
|
||||
'user_id',
|
||||
];
|
||||
|
||||
|
@ -5,19 +5,22 @@
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class Tool extends Model
|
||||
{
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'description',
|
||||
'url',
|
||||
'discovery_url',
|
||||
'api_key',
|
||||
'callback_url',
|
||||
'data',
|
||||
'user_id',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'data' => 'array',
|
||||
];
|
||||
|
||||
public function user(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
@ -28,15 +31,4 @@ public function functions(): HasMany
|
||||
return $this->hasMany(ToolFunction::class);
|
||||
}
|
||||
|
||||
public function fetchFunctions(): void
|
||||
{
|
||||
$url = $this->url;
|
||||
|
||||
$json = Http::get($url);
|
||||
|
||||
$json = $json->json();
|
||||
|
||||
$this->callback_url = $json['callback_url'];
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,8 @@ private function setJWTGuard(): void
|
||||
$jwt = $request->bearerToken();
|
||||
|
||||
if (empty($jwt)) {
|
||||
return response()->json(['error' => 'No token provided'], 401);
|
||||
return null;
|
||||
// return response()->json(['error' => 'No token provided'], 401);
|
||||
}
|
||||
|
||||
$headers = new stdClass();
|
||||
@ -49,12 +50,18 @@ private function setJWTGuard(): void
|
||||
$decoded = JWT::decode($jwt, $keys, $headers);
|
||||
// $request->attributes->add(['token_type' => $headers->typ]);
|
||||
} catch (Exception $e) {
|
||||
return response()->json(['error' => 'Invalid token, '.$e->getMessage()], 401);
|
||||
// dd($e);
|
||||
return null;
|
||||
|
||||
|
||||
// return response()->json(['error' => 'Invalid token, '.$e->getMessage()], 401);
|
||||
}
|
||||
|
||||
// must id_token
|
||||
if ($headers->typ !== 'id_token') {
|
||||
return response()->json(['error' => 'The token not id_token'], 401);
|
||||
return null;
|
||||
|
||||
// return response()->json(['error' => 'The token not id_token'], 401);
|
||||
}
|
||||
|
||||
// 检查是否有 字段
|
||||
@ -63,17 +70,22 @@ private function setJWTGuard(): void
|
||||
];
|
||||
|
||||
foreach ($required_fields as $field) {
|
||||
if (! isset($decoded->$field)) {
|
||||
return response()->json(['error' => 'The token not contain the field '.$field], 401);
|
||||
if (!isset($decoded->$field)) {
|
||||
return null;
|
||||
|
||||
// return response()->json(['error' => 'The token not contain the field '.$field], 401);
|
||||
}
|
||||
}
|
||||
|
||||
if (config('oauth.force_aud')) {
|
||||
if (! in_array($decoded->aud, config('oauth.trusted_aud'))) {
|
||||
return response()->json(['error' => 'The application rejected the token, token aud is '.$decoded->aud.', app aud is '.config('oauth.client_id')], 401);
|
||||
if (!in_array($decoded->aud, config('oauth.trusted_aud'))) {
|
||||
throw new Exception('The application rejected the token, token aud is ' . $decoded->aud . ', app aud is ' . config('oauth.client_id'));
|
||||
// return response()->json(['error' => 'The application rejected the token, token aud is '.$decoded->aud.', app aud is '.config('oauth.client_id')], 401);
|
||||
}
|
||||
|
||||
return response()->json(['error' => 'The token not match the application, '.' token aud is '.$decoded->aud.', app aud is '.config('oauth.client_id')], 401);
|
||||
// throw
|
||||
throw new Exception('The token not match the application, ' . ' token aud is ' . $decoded->aud . ', app aud is ' . config('oauth.client_id'));
|
||||
// return response()->json(['error' => 'The token not match the application, '.' token aud is '.$decoded->aud.', app aud is '.config('oauth.client_id')], 401);
|
||||
}
|
||||
|
||||
return User::where('external_id', $decoded->sub)->firstOrCreate([
|
||||
|
@ -9,6 +9,7 @@ class Tool
|
||||
public string $name;
|
||||
|
||||
public string $homepage_url;
|
||||
|
||||
public string $callback_url;
|
||||
|
||||
public string $description;
|
||||
@ -25,6 +26,7 @@ public function __construct(array $data)
|
||||
$this->data = $data;
|
||||
$this->parse();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
|
@ -7,13 +7,18 @@
|
||||
class ToolFunction
|
||||
{
|
||||
public string $name;
|
||||
|
||||
public string $description;
|
||||
|
||||
public array $parameters;
|
||||
|
||||
protected array $data;
|
||||
|
||||
public array $required;
|
||||
|
||||
/**
|
||||
* Create a new class instance.
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct(array $data)
|
||||
|
@ -1,5 +1,6 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Middleware\JSONRequest;
|
||||
use App\Http\Middleware\JWTMiddleware;
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Foundation\Configuration\Exceptions;
|
||||
@ -16,6 +17,10 @@
|
||||
// $middleware->alias([
|
||||
// 'jwt' => JWTMiddleware::class
|
||||
// ]);
|
||||
// add for api
|
||||
$middleware->api([
|
||||
JSONRequest::class
|
||||
]);
|
||||
})
|
||||
->withExceptions(function (Exceptions $exceptions) {
|
||||
//
|
||||
|
@ -42,7 +42,7 @@
|
||||
],
|
||||
'api' => [
|
||||
'driver' => 'jwt',
|
||||
// 'provider' => 'users',
|
||||
// 'provider' => 'users',
|
||||
],
|
||||
],
|
||||
|
||||
|
@ -38,6 +38,6 @@
|
||||
'dashscope' => [
|
||||
'api_key' => env('DASHSCOPE_API_KEY'),
|
||||
'api_base' => env('DASHSCOPE_API_BASE', 'https://dashscope.aliyuncs.com'),
|
||||
]
|
||||
],
|
||||
|
||||
];
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
|
||||
*/
|
||||
|
||||
'driver' => env('SESSION_DRIVER', 'database'),
|
||||
'driver' => env('SESSION_DRIVER', 'redis'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
@ -17,7 +17,7 @@ public function up(): void
|
||||
$table->string('name');
|
||||
$table->string('description')->nullable();
|
||||
|
||||
$table->string('discovery_url');
|
||||
$table->string('discovery_url')->index();
|
||||
|
||||
$table->string('api_key')->nullable();
|
||||
|
||||
|
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('assistants', function (Blueprint $table) {
|
||||
// prompt
|
||||
$table->text('prompt')->after('description');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('assistants', function (Blueprint $table) {
|
||||
$table->dropColumn('prompt');
|
||||
});
|
||||
}
|
||||
};
|
@ -1,8 +1,23 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Api\AssistantController;
|
||||
use App\Http\Controllers\Api\AssistantToolController;
|
||||
use App\Http\Controllers\Api\ChatController;
|
||||
use App\Http\Controllers\Api\ToolController;
|
||||
use App\Http\Middleware\JSONRequest;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::get('/user', function (Request $request) {
|
||||
return $request->user();
|
||||
})->middleware('auth:api,web');
|
||||
Route::middleware(['auth:api,web'])->group(function () {
|
||||
Route::get('/user', function (Request $request) {
|
||||
return $request->user();
|
||||
});
|
||||
|
||||
Route::apiResource('tools', ToolController::class);
|
||||
Route::apiResource('assistants', AssistantController::class);
|
||||
Route::apiResource('chats', ChatController::class);
|
||||
|
||||
Route::get('assistants/{assistant}/tools', [AssistantToolController::class, 'index']);
|
||||
Route::post('assistants/{assistant}/tools', [AssistantToolController::class, 'store']);
|
||||
Route::delete('assistants/{assistant}/tools/{tool}', [AssistantToolController::class, 'destroy']);
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user