feat:adds LLM capabilities to chat with your portfolios and holdings

This commit is contained in:
hackerESQ
2024-10-31 12:09:06 -05:00
parent 4cde6b82ea
commit 4c1da2308e
20 changed files with 1662 additions and 181 deletions
+37
View File
@@ -0,0 +1,37 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
class AiChat extends Model
{
use HasUuids;
protected $fillable = [
'role',
'content'
];
protected $hidden = [];
protected static function boot()
{
parent::boot();
static::creating(function ($chat) {
$chat->user_id = auth()->user()->id;
});
}
public function user() {
return $this->belongsTo(User::class);
}
public function chatable()
{
return $this->morphTo();
}
}
+11
View File
@@ -3,6 +3,7 @@
namespace App\Models;
use App\Models\Split;
use App\Models\AiChat;
use App\Models\Dividend;
use App\Models\Portfolio;
use App\Models\MarketData;
@@ -131,6 +132,16 @@ class Holding extends Model
->orderBy('date', 'DESC');
}
/**
* Related chats for holding
*
* @return void
*/
public function chats()
{
return $this->morphMany(AiChat::class, 'chatable');
}
public function scopeWithMarketData($query)
{
return $query->withAggregate('market_data', 'name')
+11
View File
@@ -2,6 +2,7 @@
namespace App\Models;
use App\Models\AiChat;
use Carbon\CarbonPeriod;
use Illuminate\Support\Arr;
use Illuminate\Support\Carbon;
@@ -64,6 +65,16 @@ class Portfolio extends Model
return $this->hasMany(DailyChange::class);
}
/**
* Related chats for portfolio
*
* @return void
*/
public function chats()
{
return $this->morphMany(AiChat::class, 'chatable');
}
public function scopeMyPortfolios()
{
return $this->whereHas('users', function ($query) {