Xianbao QIAN commited on
Commit
071dac0
·
1 Parent(s): d384ea9

/trend: add filter for models/datasets.

Browse files
Files changed (1) hide show
  1. src/pages/trend/index.tsx +58 -9
src/pages/trend/index.tsx CHANGED
@@ -65,6 +65,7 @@ const TrendPage: React.FC<TrendProps> = ({ monthlyData = [], totalData = [], det
65
  const [selectedProviders, setSelectedProviders] = useState<string[]>([]);
66
  const [minLikes, setMinLikes] = useState(100);
67
  const [isLoading, setIsLoading] = useState(false);
 
68
 
69
  const toggleProvider = (provider: string) => {
70
  setSelectedProviders(prev =>
@@ -76,18 +77,33 @@ const TrendPage: React.FC<TrendProps> = ({ monthlyData = [], totalData = [], det
76
 
77
  // Group data by provider
78
  const providerData = Object.fromEntries(
79
- Object.keys(PROVIDERS_MAP).map(provider => [
80
- provider,
81
- monthlyData.filter(d => d.provider === provider) || []
82
- ])
 
 
 
 
 
 
 
 
83
  );
84
 
85
  // Filter and group detailed model data
86
  const filteredModels = (detailedData || [])
87
  .filter(model => {
88
- console.log('Filtering model:', model.name, model.likes, model.provider);
 
 
 
 
 
 
89
  return model.likes >= minLikes &&
90
- (selectedProviders.length === 0 || selectedProviders.includes(model.provider));
 
91
  })
92
  .reduce<Record<string, DetailedModelData[]>>((acc, model) => {
93
  if (!acc[model.monthKey]) {
@@ -98,10 +114,10 @@ const TrendPage: React.FC<TrendProps> = ({ monthlyData = [], totalData = [], det
98
  }, {});
99
 
100
  useEffect(() => {
101
- console.log('Current filtered models:', filteredModels);
102
  console.log('Selected providers:', selectedProviders);
103
  console.log('Min likes:', minLikes);
104
- }, [filteredModels, selectedProviders, minLikes]);
105
 
106
  if (error) {
107
  return (
@@ -119,8 +135,41 @@ const TrendPage: React.FC<TrendProps> = ({ monthlyData = [], totalData = [], det
119
  <div className="w-full max-w-screen-xl mx-auto p-4">
120
  <h1 className="text-3xl lg:text-5xl mt-16 font-bold text-center mb-2 dark:text-white">Chinese AI Model Release Trends 📈</h1>
121
  <p className="text-center text-sm mb-8 dark:text-gray-300">
122
- Historical trends of model releases from Chinese AI organizations
123
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
 
125
  {/* Controls */}
126
  <div className="flex flex-wrap gap-4 mb-6 justify-center items-center">
 
65
  const [selectedProviders, setSelectedProviders] = useState<string[]>([]);
66
  const [minLikes, setMinLikes] = useState(100);
67
  const [isLoading, setIsLoading] = useState(false);
68
+ const [contentType, setContentType] = useState<'all' | 'models' | 'datasets'>('all');
69
 
70
  const toggleProvider = (provider: string) => {
71
  setSelectedProviders(prev =>
 
77
 
78
  // Group data by provider
79
  const providerData = Object.fromEntries(
80
+ Object.keys(PROVIDERS_MAP).map(provider => {
81
+ const providerMonthlyData = monthlyData.filter(d => {
82
+ const isDataset = d.name?.toLowerCase().includes('dataset') ||
83
+ d.name?.toLowerCase().includes('corpus') ||
84
+ d.name?.toLowerCase().includes('data');
85
+ const matchesContentType = contentType === 'all' ||
86
+ (contentType === 'datasets' && isDataset) ||
87
+ (contentType === 'models' && !isDataset);
88
+ return d.provider === provider && matchesContentType;
89
+ });
90
+ return [provider, providerMonthlyData || []];
91
+ })
92
  );
93
 
94
  // Filter and group detailed model data
95
  const filteredModels = (detailedData || [])
96
  .filter(model => {
97
+ const isDataset = model.name.toLowerCase().includes('dataset') ||
98
+ model.name.toLowerCase().includes('corpus') ||
99
+ model.name.toLowerCase().includes('data');
100
+ const matchesContentType = contentType === 'all' ||
101
+ (contentType === 'datasets' && isDataset) ||
102
+ (contentType === 'models' && !isDataset);
103
+
104
  return model.likes >= minLikes &&
105
+ (selectedProviders.length === 0 || selectedProviders.includes(model.provider)) &&
106
+ matchesContentType;
107
  })
108
  .reduce<Record<string, DetailedModelData[]>>((acc, model) => {
109
  if (!acc[model.monthKey]) {
 
114
  }, {});
115
 
116
  useEffect(() => {
117
+ console.log('Content type changed:', contentType);
118
  console.log('Selected providers:', selectedProviders);
119
  console.log('Min likes:', minLikes);
120
+ }, [contentType, selectedProviders, minLikes]);
121
 
122
  if (error) {
123
  return (
 
135
  <div className="w-full max-w-screen-xl mx-auto p-4">
136
  <h1 className="text-3xl lg:text-5xl mt-16 font-bold text-center mb-2 dark:text-white">Chinese AI Model Release Trends 📈</h1>
137
  <p className="text-center text-sm mb-8 dark:text-gray-300">
138
+ Track the growth of Chinese AI models and datasets over time
139
  </p>
140
+
141
+ <div className="flex justify-center mb-6 space-x-4">
142
+ <button
143
+ onClick={() => setContentType('all')}
144
+ className={`px-4 py-2 rounded-lg ${
145
+ contentType === 'all'
146
+ ? 'bg-blue-500 text-white'
147
+ : 'bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-300'
148
+ }`}
149
+ >
150
+ All
151
+ </button>
152
+ <button
153
+ onClick={() => setContentType('models')}
154
+ className={`px-4 py-2 rounded-lg ${
155
+ contentType === 'models'
156
+ ? 'bg-blue-500 text-white'
157
+ : 'bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-300'
158
+ }`}
159
+ >
160
+ Models
161
+ </button>
162
+ <button
163
+ onClick={() => setContentType('datasets')}
164
+ className={`px-4 py-2 rounded-lg ${
165
+ contentType === 'datasets'
166
+ ? 'bg-blue-500 text-white'
167
+ : 'bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-300'
168
+ }`}
169
+ >
170
+ Datasets
171
+ </button>
172
+ </div>
173
 
174
  {/* Controls */}
175
  <div className="flex flex-wrap gap-4 mb-6 justify-center items-center">