-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathapiMistralSearchArticles.js
89 lines (79 loc) · 2.88 KB
/
apiMistralSearchArticles.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// src/models/apiModel.js
const axios = require('axios');
const promptManager = require('../features/chatbot/promptManager');
const { searchArticles } = require('../features/searchArticles/articleSearch');
class ApiMistralSearchArticles {
constructor(environment, functionDefinitions) {
this.environment = environment;
this.functionDefinitions = functionDefinitions;
this.client = axios.create({
headers: {
'Authorization': `Bearer ${environment.apiKey}`,
'Content-Type': 'application/json',
},
});
}
async processMessage(message) {
try {
// Premier appel à l'API
const response = await this.client.post(this.environment.modelEndpoint, {
model: this.environment.model,
messages: [
{ role: "user", content: message }
],
tools: [{
type: "function",
function: this.functionDefinitions.searchArticles
}],
tool_choice: "auto"
});
// Vérifier si l'API a appelé la fonction
if (response.data.choices[0].message.tool_calls) {
const toolCall = response.data.choices[0].message.tool_calls[0];
if (toolCall.function.name === 'searchArticles') {
const args = JSON.parse(toolCall.function.arguments);
const searchResults = searchArticles(args.query);
// Deuxième appel à l'API avec les résultats
const finalResponse = await this.client.post(this.environment.modelEndpoint, {
model: this.environment.model,
messages: [
{ role: "user", content: message },
response.data.choices[0].message,
{
role: "tool",
tool_call_id: toolCall.id,
name: "searchArticles",
content: JSON.stringify(searchResults)
}
]
});
return finalResponse.data.choices[0].message.content;
}
//TODO: Gérer d'autres fonctions ici
}
return response.data.choices[0].message.content;
} catch (error) {
console.error('Erreur lors du traitement du message:', error);
if (error.response) {
console.error('Réponse d\'erreur:', error.response.data);
}
throw error;
}
}
async getAIResponse(userMessage, context) {
try {
const prompt = promptManager.getPrompt(context, userMessage);
const response = await this.client.post(this.environment.modelEndpoint, {
model: this.environment.model,
messages: [{role: 'user', content: prompt}],
max_tokens: 250,
temperature: 0.5,
});
return response.data.choices[0].message.content.trim();
} catch (error) {
console.error('Erreur lors de la requête à l\'API du modèle IA :', error);
return 'Désolé, il y a eu un problème avec l\'IA.';
}
}
}
module.exports = ApiMistralSearchArticles;