Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit fa8e8f3

Browse files
committedMar 15, 2025·
add API to get a list of all available models
1 parent 8c49793 commit fa8e8f3

File tree

1 file changed

+54
-0
lines changed
  • src/puter-js/src/modules

1 file changed

+54
-0
lines changed
 

‎src/puter-js/src/modules/AI.js

+54
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,60 @@ class AI{
3737
this.APIOrigin = APIOrigin;
3838
}
3939

40+
/**
41+
* Returns a list of available AI models.
42+
* @param {string} provider - The provider to filter the models by.
43+
* @returns {Object} Object containing lists of available models by provider
44+
*/
45+
async listModels(provider) {
46+
const modelsByProvider = {};
47+
48+
const modelsList = await puter.drivers.call('puter-chat-completion','ai-chat','models');
49+
50+
if (modelsList && modelsList.result && Array.isArray(modelsList.result)) {
51+
modelsList.result.forEach((item) => {
52+
if (item.provider && item.id) {
53+
if (provider) {
54+
if (item.provider === provider) { // Only add models for the specified provider
55+
if (!modelsByProvider[item.provider]) {
56+
modelsByProvider[item.provider] = [];
57+
}
58+
modelsByProvider[item.provider].push(item.id);
59+
}
60+
} else { // Add all models
61+
if (!modelsByProvider[item.provider]) {
62+
modelsByProvider[item.provider] = [];
63+
}
64+
modelsByProvider[item.provider].push(item.id);
65+
}
66+
}
67+
});
68+
}
69+
70+
return modelsByProvider;
71+
}
72+
73+
/**
74+
* Returns a list of all available AI providers
75+
* @returns {Array} Array containing providers
76+
*/
77+
async listModelProviders() {
78+
let providers = [];
79+
const models = await puter.drivers.call('puter-chat-completion','ai-chat','models');
80+
81+
if (models && models.result && Array.isArray(models.result)) {
82+
providers = new Set(); // Use a Set to store unique providers
83+
84+
models.result.forEach((item) => {
85+
if (item.provider) {
86+
providers.add(item.provider);
87+
}
88+
});
89+
providers = Array.from(providers); // Convert Set to an array
90+
}
91+
return providers;
92+
}
93+
4094
img2txt = async (...args) => {
4195
let MAX_INPUT_SIZE = 10 * 1024 * 1024;
4296
let options = {};

0 commit comments

Comments
 (0)
Please sign in to comment.