Spaces:
Configuration error
Configuration error
Je vous remercie pour votre travail. J’ai bien récupéré ma clé API OpenAI. Pourriez-vous l’intégrer à notre système afin que l’IA soit pleinement fonctionnelle (chat, génération d’images, etc.) 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
Browse files- index.html +4 -2
- script.js +103 -2
- style.css +24 -0
index.html
CHANGED
|
@@ -34,9 +34,11 @@
|
|
| 34 |
<div class="activity-monitor">[ Activité IA en cours... ]</div>
|
| 35 |
</div>
|
| 36 |
<div class="chat-messages" id="chatMessages">
|
| 37 |
-
<
|
|
|
|
|
|
|
| 38 |
</div>
|
| 39 |
-
|
| 40 |
<button title="Ajouter un fichier"><i class="fas fa-plus"></i></button>
|
| 41 |
<button title="Connexion"><i class="fas fa-plug"></i></button>
|
| 42 |
<input type="text" placeholder="Écrire à Rosalinda..." />
|
|
|
|
| 34 |
<div class="activity-monitor">[ Activité IA en cours... ]</div>
|
| 35 |
</div>
|
| 36 |
<div class="chat-messages" id="chatMessages">
|
| 37 |
+
<ai-assistant>
|
| 38 |
+
Bonjour ! Je suis Rosalinda, votre assistante IA. Comment puis-je vous aider aujourd'hui ?
|
| 39 |
+
</ai-assistant>
|
| 40 |
</div>
|
| 41 |
+
<div class="chat-input">
|
| 42 |
<button title="Ajouter un fichier"><i class="fas fa-plus"></i></button>
|
| 43 |
<button title="Connexion"><i class="fas fa-plug"></i></button>
|
| 44 |
<input type="text" placeholder="Écrire à Rosalinda..." />
|
script.js
CHANGED
|
@@ -1,4 +1,105 @@
|
|
| 1 |
|
| 2 |
-
|
|
|
|
|
|
|
| 3 |
|
| 4 |
-
//
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
|
| 2 |
+
// Configuration OpenAI
|
| 3 |
+
const OPENAI_API_KEY = "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";
|
| 4 |
+
const OPENAI_API_URL = "https://api.openai.com/v1";
|
| 5 |
|
| 6 |
+
// Éléments DOM
|
| 7 |
+
const chatMessages = document.getElementById('chatMessages');
|
| 8 |
+
const chatInput = document.querySelector('.chat-input input');
|
| 9 |
+
const sendButton = document.querySelector('.chat-input button[title="Envoyer"]');
|
| 10 |
+
const codeOutput = document.getElementById('codeOutput');
|
| 11 |
+
|
| 12 |
+
// Gestionnaire d'envoi de message
|
| 13 |
+
sendButton.addEventListener('click', sendMessage);
|
| 14 |
+
chatInput.addEventListener('keypress', (e) => {
|
| 15 |
+
if (e.key === 'Enter') sendMessage();
|
| 16 |
+
});
|
| 17 |
+
|
| 18 |
+
async function sendMessage() {
|
| 19 |
+
const message = chatInput.value.trim();
|
| 20 |
+
if (!message) return;
|
| 21 |
+
|
| 22 |
+
// Afficher le message de l'utilisateur
|
| 23 |
+
addMessage('user', message);
|
| 24 |
+
chatInput.value = '';
|
| 25 |
+
|
| 26 |
+
try {
|
| 27 |
+
// Appel à l'API OpenAI
|
| 28 |
+
const response = await fetch(`${OPENAI_API_URL}/chat/completions`, {
|
| 29 |
+
method: 'POST',
|
| 30 |
+
headers: {
|
| 31 |
+
'Content-Type': 'application/json',
|
| 32 |
+
'Authorization': `Bearer ${OPENAI_API_KEY}`
|
| 33 |
+
},
|
| 34 |
+
body: JSON.stringify({
|
| 35 |
+
model: "gpt-4",
|
| 36 |
+
messages: [{ role: "user", content: message }],
|
| 37 |
+
temperature: 0.7
|
| 38 |
+
})
|
| 39 |
+
});
|
| 40 |
+
|
| 41 |
+
const data = await response.json();
|
| 42 |
+
const aiResponse = data.choices[0].message.content;
|
| 43 |
+
|
| 44 |
+
// Afficher la réponse de l'IA
|
| 45 |
+
addMessage('assistant', aiResponse);
|
| 46 |
+
|
| 47 |
+
// Si la réponse contient du code, l'afficher dans la sortie code
|
| 48 |
+
if (aiResponse.includes('```')) {
|
| 49 |
+
const codeBlocks = aiResponse.match(/```[\s\S]*?```/g);
|
| 50 |
+
codeOutput.innerHTML = `<pre><code>${codeBlocks.join('\n\n').replace(/```/g, '')}</code></pre>`;
|
| 51 |
+
}
|
| 52 |
+
} catch (error) {
|
| 53 |
+
console.error('Erreur OpenAI:', error);
|
| 54 |
+
addMessage('assistant', "Désolé, une erreur s'est produite. Veuillez réessayer.");
|
| 55 |
+
}
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
function addMessage(sender, content) {
|
| 59 |
+
const messageDiv = document.createElement('div');
|
| 60 |
+
messageDiv.className = `message ${sender}`;
|
| 61 |
+
messageDiv.innerHTML = `
|
| 62 |
+
<div class="message-content">${content}</div>
|
| 63 |
+
`;
|
| 64 |
+
chatMessages.appendChild(messageDiv);
|
| 65 |
+
chatMessages.scrollTop = chatMessages.scrollHeight;
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
// Fonction pour générer des images
|
| 69 |
+
async function generateImage(prompt) {
|
| 70 |
+
try {
|
| 71 |
+
const response = await fetch(`${OPENAI_API_URL}/images/generations`, {
|
| 72 |
+
method: 'POST',
|
| 73 |
+
headers: {
|
| 74 |
+
'Content-Type': 'application/json',
|
| 75 |
+
'Authorization': `Bearer ${OPENAI_API_KEY}`
|
| 76 |
+
},
|
| 77 |
+
body: JSON.stringify({
|
| 78 |
+
prompt: prompt,
|
| 79 |
+
n: 1,
|
| 80 |
+
size: "1024x1024"
|
| 81 |
+
})
|
| 82 |
+
});
|
| 83 |
+
|
| 84 |
+
const data = await response.json();
|
| 85 |
+
return data.data[0].url;
|
| 86 |
+
} catch (error) {
|
| 87 |
+
console.error('Erreur génération image:', error);
|
| 88 |
+
return null;
|
| 89 |
+
}
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
// Exposer la fonction pour le bouton "Nouvelle tâche"
|
| 93 |
+
document.querySelector('.menu button:nth-child(1)').addEventListener('click', () => {
|
| 94 |
+
const prompt = prompt("Décrivez l'image que vous souhaitez générer:");
|
| 95 |
+
if (prompt) {
|
| 96 |
+
generateImage(prompt).then(url => {
|
| 97 |
+
if (url) {
|
| 98 |
+
const resultOutput = document.querySelector('.result-output');
|
| 99 |
+
resultOutput.innerHTML = `<img src="${url}" alt="Image générée" style="max-width:100%;">`;
|
| 100 |
+
}
|
| 101 |
+
});
|
| 102 |
+
}
|
| 103 |
+
});
|
| 104 |
+
|
| 105 |
+
console.log("Interface Espace Codage chargée avec intégration OpenAI.");
|
style.css
CHANGED
|
@@ -72,6 +72,30 @@ body, html {
|
|
| 72 |
padding: 10px;
|
| 73 |
border: 1px solid #ddd;
|
| 74 |
overflow-y: auto;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
}
|
| 76 |
.chat-input {
|
| 77 |
display: flex;
|
|
|
|
| 72 |
padding: 10px;
|
| 73 |
border: 1px solid #ddd;
|
| 74 |
overflow-y: auto;
|
| 75 |
+
display: flex;
|
| 76 |
+
flex-direction: column;
|
| 77 |
+
gap: 10px;
|
| 78 |
+
}
|
| 79 |
+
.message {
|
| 80 |
+
max-width: 80%;
|
| 81 |
+
padding: 10px 15px;
|
| 82 |
+
border-radius: 18px;
|
| 83 |
+
line-height: 1.4;
|
| 84 |
+
}
|
| 85 |
+
.message.user {
|
| 86 |
+
align-self: flex-end;
|
| 87 |
+
background: #6366f1;
|
| 88 |
+
color: white;
|
| 89 |
+
border-bottom-right-radius: 5px;
|
| 90 |
+
}
|
| 91 |
+
.message.assistant {
|
| 92 |
+
align-self: flex-start;
|
| 93 |
+
background: #e0e0e0;
|
| 94 |
+
color: #333;
|
| 95 |
+
border-bottom-left-radius: 5px;
|
| 96 |
+
}
|
| 97 |
+
.message-content {
|
| 98 |
+
white-space: pre-wrap;
|
| 99 |
}
|
| 100 |
.chat-input {
|
| 101 |
display: flex;
|