mirror of
https://github.com/nomic-ai/gpt4all.git
synced 2025-09-22 03:48:08 +00:00
Break the explore models view into two. (#3269)
Signed-off-by: Adam Treat <treat.adam@gmail.com> Signed-off-by: Jared Van Bortel <jared@nomic.ai> Signed-off-by: Victor <158754254+SINAPSA-IC@users.noreply.github.com> Co-authored-by: Jared Van Bortel <jared@nomic.ai> Co-authored-by: Victor <158754254+SINAPSA-IC@users.noreply.github.com>
This commit is contained in:
@@ -465,47 +465,54 @@ bool InstalledModels::filterAcceptsRow(int sourceRow,
|
||||
return (isInstalled || (!m_selectable && isDownloading)) && !isEmbeddingModel;
|
||||
}
|
||||
|
||||
DownloadableModels::DownloadableModels(QObject *parent)
|
||||
GPT4AllDownloadableModels::GPT4AllDownloadableModels(QObject *parent)
|
||||
: QSortFilterProxyModel(parent)
|
||||
, m_expanded(false)
|
||||
, m_limit(5)
|
||||
{
|
||||
connect(this, &DownloadableModels::rowsInserted, this, &DownloadableModels::countChanged);
|
||||
connect(this, &DownloadableModels::rowsRemoved, this, &DownloadableModels::countChanged);
|
||||
connect(this, &DownloadableModels::modelReset, this, &DownloadableModels::countChanged);
|
||||
connect(this, &GPT4AllDownloadableModels::rowsInserted, this, &GPT4AllDownloadableModels::countChanged);
|
||||
connect(this, &GPT4AllDownloadableModels::rowsRemoved, this, &GPT4AllDownloadableModels::countChanged);
|
||||
connect(this, &GPT4AllDownloadableModels::modelReset, this, &GPT4AllDownloadableModels::countChanged);
|
||||
}
|
||||
|
||||
bool DownloadableModels::filterAcceptsRow(int sourceRow,
|
||||
bool GPT4AllDownloadableModels::filterAcceptsRow(int sourceRow,
|
||||
const QModelIndex &sourceParent) const
|
||||
{
|
||||
// FIXME We can eliminate the 'expanded' code as the UI no longer uses this
|
||||
bool withinLimit = sourceRow < (m_expanded ? sourceModel()->rowCount() : m_limit);
|
||||
QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
|
||||
bool hasDescription = !sourceModel()->data(index, ModelList::DescriptionRole).toString().isEmpty();
|
||||
bool isClone = sourceModel()->data(index, ModelList::IsCloneRole).toBool();
|
||||
return withinLimit && hasDescription && !isClone;
|
||||
bool isDiscovered = sourceModel()->data(index, ModelList::IsDiscoveredRole).toBool();
|
||||
return !isDiscovered && hasDescription && !isClone;
|
||||
}
|
||||
|
||||
int DownloadableModels::count() const
|
||||
int GPT4AllDownloadableModels::count() const
|
||||
{
|
||||
return rowCount();
|
||||
}
|
||||
|
||||
bool DownloadableModels::isExpanded() const
|
||||
HuggingFaceDownloadableModels::HuggingFaceDownloadableModels(QObject *parent)
|
||||
: QSortFilterProxyModel(parent)
|
||||
, m_limit(5)
|
||||
{
|
||||
return m_expanded;
|
||||
connect(this, &HuggingFaceDownloadableModels::rowsInserted, this, &HuggingFaceDownloadableModels::countChanged);
|
||||
connect(this, &HuggingFaceDownloadableModels::rowsRemoved, this, &HuggingFaceDownloadableModels::countChanged);
|
||||
connect(this, &HuggingFaceDownloadableModels::modelReset, this, &HuggingFaceDownloadableModels::countChanged);
|
||||
}
|
||||
|
||||
void DownloadableModels::setExpanded(bool expanded)
|
||||
bool HuggingFaceDownloadableModels::filterAcceptsRow(int sourceRow,
|
||||
const QModelIndex &sourceParent) const
|
||||
{
|
||||
if (m_expanded != expanded) {
|
||||
m_expanded = expanded;
|
||||
invalidateFilter();
|
||||
emit expandedChanged(m_expanded);
|
||||
}
|
||||
QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
|
||||
bool hasDescription = !sourceModel()->data(index, ModelList::DescriptionRole).toString().isEmpty();
|
||||
bool isClone = sourceModel()->data(index, ModelList::IsCloneRole).toBool();
|
||||
bool isDiscovered = sourceModel()->data(index, ModelList::IsDiscoveredRole).toBool();
|
||||
return isDiscovered && hasDescription && !isClone;
|
||||
}
|
||||
|
||||
void DownloadableModels::discoverAndFilter(const QString &discover)
|
||||
int HuggingFaceDownloadableModels::count() const
|
||||
{
|
||||
return rowCount();
|
||||
}
|
||||
|
||||
void HuggingFaceDownloadableModels::discoverAndFilter(const QString &discover)
|
||||
{
|
||||
m_discoverFilter = discover;
|
||||
ModelList *ml = qobject_cast<ModelList*>(parent());
|
||||
@@ -523,7 +530,8 @@ ModelList::ModelList()
|
||||
: QAbstractListModel(nullptr)
|
||||
, m_installedModels(new InstalledModels(this))
|
||||
, m_selectableModels(new InstalledModels(this, /*selectable*/ true))
|
||||
, m_downloadableModels(new DownloadableModels(this))
|
||||
, m_gpt4AllDownloadableModels(new GPT4AllDownloadableModels(this))
|
||||
, m_huggingFaceDownloadableModels(new HuggingFaceDownloadableModels(this))
|
||||
, m_asyncModelRequestOngoing(false)
|
||||
, m_discoverLimit(20)
|
||||
, m_discoverSortDirection(-1)
|
||||
@@ -536,7 +544,8 @@ ModelList::ModelList()
|
||||
|
||||
m_installedModels->setSourceModel(this);
|
||||
m_selectableModels->setSourceModel(this);
|
||||
m_downloadableModels->setSourceModel(this);
|
||||
m_gpt4AllDownloadableModels->setSourceModel(this);
|
||||
m_huggingFaceDownloadableModels->setSourceModel(this);
|
||||
|
||||
auto *mySettings = MySettings::globalInstance();
|
||||
connect(mySettings, &MySettings::nameChanged, this, &ModelList::updateDataForSettings );
|
||||
|
@@ -294,17 +294,28 @@ private:
|
||||
bool m_selectable;
|
||||
};
|
||||
|
||||
class DownloadableModels : public QSortFilterProxyModel
|
||||
class GPT4AllDownloadableModels : public QSortFilterProxyModel
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int count READ count NOTIFY countChanged)
|
||||
Q_PROPERTY(bool expanded READ isExpanded WRITE setExpanded NOTIFY expandedChanged)
|
||||
public:
|
||||
explicit DownloadableModels(QObject *parent);
|
||||
explicit GPT4AllDownloadableModels(QObject *parent);
|
||||
int count() const;
|
||||
|
||||
bool isExpanded() const;
|
||||
void setExpanded(bool expanded);
|
||||
Q_SIGNALS:
|
||||
void countChanged();
|
||||
|
||||
protected:
|
||||
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
||||
};
|
||||
|
||||
class HuggingFaceDownloadableModels : public QSortFilterProxyModel
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int count READ count NOTIFY countChanged)
|
||||
public:
|
||||
explicit HuggingFaceDownloadableModels(QObject *parent);
|
||||
int count() const;
|
||||
|
||||
Q_INVOKABLE void discoverAndFilter(const QString &discover);
|
||||
|
||||
@@ -314,11 +325,7 @@ Q_SIGNALS:
|
||||
protected:
|
||||
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
||||
|
||||
Q_SIGNALS:
|
||||
void expandedChanged(bool expanded);
|
||||
|
||||
private:
|
||||
bool m_expanded;
|
||||
int m_limit;
|
||||
QString m_discoverFilter;
|
||||
};
|
||||
@@ -329,7 +336,8 @@ class ModelList : public QAbstractListModel
|
||||
Q_PROPERTY(int count READ count NOTIFY countChanged)
|
||||
Q_PROPERTY(InstalledModels* installedModels READ installedModels NOTIFY installedModelsChanged)
|
||||
Q_PROPERTY(InstalledModels* selectableModels READ selectableModels NOTIFY selectableModelsChanged)
|
||||
Q_PROPERTY(DownloadableModels* downloadableModels READ downloadableModels NOTIFY downloadableModelsChanged)
|
||||
Q_PROPERTY(GPT4AllDownloadableModels* gpt4AllDownloadableModels READ gpt4AllDownloadableModels CONSTANT)
|
||||
Q_PROPERTY(HuggingFaceDownloadableModels* huggingFaceDownloadableModels READ huggingFaceDownloadableModels CONSTANT)
|
||||
Q_PROPERTY(QList<ModelInfo> selectableModelList READ selectableModelList NOTIFY selectableModelListChanged)
|
||||
Q_PROPERTY(bool asyncModelRequestOngoing READ asyncModelRequestOngoing NOTIFY asyncModelRequestOngoingChanged)
|
||||
Q_PROPERTY(int discoverLimit READ discoverLimit WRITE setDiscoverLimit NOTIFY discoverLimitChanged)
|
||||
@@ -482,7 +490,8 @@ public:
|
||||
|
||||
InstalledModels *installedModels() const { return m_installedModels; }
|
||||
InstalledModels *selectableModels() const { return m_selectableModels; }
|
||||
DownloadableModels *downloadableModels() const { return m_downloadableModels; }
|
||||
GPT4AllDownloadableModels *gpt4AllDownloadableModels() const { return m_gpt4AllDownloadableModels; }
|
||||
HuggingFaceDownloadableModels *huggingFaceDownloadableModels() const { return m_huggingFaceDownloadableModels; }
|
||||
|
||||
static inline QString toFileSize(quint64 sz) {
|
||||
if (sz < 1024) {
|
||||
@@ -520,7 +529,6 @@ Q_SIGNALS:
|
||||
void countChanged();
|
||||
void installedModelsChanged();
|
||||
void selectableModelsChanged();
|
||||
void downloadableModelsChanged();
|
||||
void selectableModelListChanged();
|
||||
void asyncModelRequestOngoingChanged();
|
||||
void discoverLimitChanged();
|
||||
@@ -570,7 +578,8 @@ private:
|
||||
QNetworkAccessManager m_networkManager;
|
||||
InstalledModels *m_installedModels;
|
||||
InstalledModels *m_selectableModels;
|
||||
DownloadableModels *m_downloadableModels;
|
||||
GPT4AllDownloadableModels *m_gpt4AllDownloadableModels;
|
||||
HuggingFaceDownloadableModels *m_huggingFaceDownloadableModels;
|
||||
QList<ModelInfo*> m_models;
|
||||
QHash<QString, ModelInfo*> m_modelMap;
|
||||
bool m_asyncModelRequestOngoing;
|
||||
|
Reference in New Issue
Block a user