This shows you the differences between two versions of the page.
pm:prj2023:danield:gptma [2023/05/28 22:57] farhad_ali.gul |
pm:prj2023:danield:gptma [2023/05/30 18:38] (current) farhad_ali.gul [Download] |
||
---|---|---|---|
Line 41: | Line 41: | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | {{pm:prj2023:danield:gptma_kicad.png?600x400 | Schema hardware }} | + | {{ pm:prj2023:danield:gptma_kicad.png?700x500 | Schema hardware }} |
+ | |||
Line 70: | Line 72: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Proiectarea software a fost realizata in CircuitPython, care dispune de biblioteci si suport pentru ce am realizat in cadrul proiectului. | ||
- | <note tip> | + | Pentru a realiza un API Request avem în primul rând nevoie de conexiune la internet. |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | După conectarea Pico la internet prin WIFI, avem nevoie de o bibliotecă care să poată face request-uri. Am ales biblioteca adafruit_requests, capabilă de requesturi simple. |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | Tot codul este complex și lung, vom pune accentul pe baza acestuia și anume requestul la ChatGPT. |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | Pentru a face acest request, avem nevoie de preconfigurare de socket, ssl, pentru ca mai apoi să deschidem o sesiune de request. |
+ | |||
+ | Formatul prompt-ului trimis este de forma: full_prompt = [{"role": "user", "content": payload},], payload fiind textul primit ca input. În cadrul request-ului, trebuie precizat ce model vrem să folosim, am folosit gpt-3.5-turbo. | ||
+ | |||
+ | De asemenea, am precizat și authorization key-ul, cel obținut de pe pagina celor de la OpenAI. | ||
- | Proiectarea software a fost realizata in CircuitPython, care dispune de biblioteci si suport pentru ce am realizat in cadrul proiectului. | ||
- | Pentru a realiza un API Request avem în primul rând nevoie de conexiune la internet. După conectarea Pico la internet prin WIFI, avem nevoie de o bibliotecă care să poată face request-uri. Am ales biblioteca adafruit_requests, capabilă de requesturi simple. | ||
- | Tot codul este complex și lung, vom pune accentul pe baza acestuia și anume requestul la ChatGPT. Pentru a face acest request, avem nevoie de preconfigurare de socket, ssl, pentru ca mai apoi să deschidem o sesiune de request. | ||
- | Formatul prompt-ului trimis este de forma: full_prompt = [{"role": "user", "content": payload},], payload fiind textul primit ca input. În cadrul request-ului, trebuie precizat ce model vrem să folosim, noi am folosit gpt-3.5-turbo. De asemenea, am precizat și authorization key-ul, cel obținut de pe pagina celor de la OpenAI. | ||
Pentru a trimite request-ul, am folosit requests.post cu parametrii: URL, modelul dorit și mesajul ca JSON și Authorization Key ca header. | Pentru a trimite request-ul, am folosit requests.post cu parametrii: URL, modelul dorit și mesajul ca JSON și Authorization Key ca header. | ||
+ | |||
Răspunsul primit poate fi extras sub formă de JSON din response.content. | Răspunsul primit poate fi extras sub formă de JSON din response.content. | ||
- | Fiecare API poate avea un model de împachetare a datelor diferit, la fel și tipul de cerere care trebuie făcută pentru a afla informațiile. Modelul de request de mai sus se aplică mai departe și pentru alte API-uri pe care le-am folosit în proiect cu modificările necesare aferente. | + | |
+ | Fiecare API poate avea un model de împachetare a datelor diferit, la fel și tipul de cerere care trebuie făcută pentru a afla informațiile. | ||
+ | |||
+ | Modelul de request de mai sus se aplică mai departe și pentru alte API-uri pe care le-am folosit în proiect cu modificările necesare aferente. | ||
API - uri folosite: | API - uri folosite: | ||
ChatGPT | ChatGPT | ||
+ | |||
Vreme - https://openweathermap.org/api | Vreme - https://openweathermap.org/api | ||
+ | |||
Text-to-speech - https://rapidapi.com/voicerss/api/text-to-speech-1 | Text-to-speech - https://rapidapi.com/voicerss/api/text-to-speech-1 | ||
+ | |||
Youtube API - https://github.com/FarhadGUL06/YoutubeAPI | Youtube API - https://github.com/FarhadGUL06/YoutubeAPI | ||
+ | |||
ESP_32_STATS_API - https://github.com/FarhadGUL06/esp32_stats_api | ESP_32_STATS_API - https://github.com/FarhadGUL06/esp32_stats_api | ||
+ | |||
Folosesc proiectul de la IC - ESP32 pe post de tracker pentru statistici de temperature, umiditate, calitatea aerului, acceleratia (In cazul deplasarii) din orice loc cu o conexiune la internet, care trimite date din 10 in 10 secunde catre API-ul ESP_32_STATS_API, date care pot fi preluate ulterior de catre GPT Multimedia Assistant. | Folosesc proiectul de la IC - ESP32 pe post de tracker pentru statistici de temperature, umiditate, calitatea aerului, acceleratia (In cazul deplasarii) din orice loc cu o conexiune la internet, care trimite date din 10 in 10 secunde catre API-ul ESP_32_STATS_API, date care pot fi preluate ulterior de catre GPT Multimedia Assistant. | ||
Line 102: | Line 114: | ||
Schema de comunicare cu API-urile de mai sus: | Schema de comunicare cu API-urile de mai sus: | ||
- | {{pm:prj2023:danield:gptma_software.png?600x500 | Schema software }} | + | {{ pm:prj2023:danield:gptma_software.png?700x500 | Schema software }} |
Line 158: | Line 171: | ||
!espv - statistici transmise sub forma audio, prin boxa | !espv - statistici transmise sub forma audio, prin boxa | ||
- | <payload>: scriind direct textul, neprefixat de „!”, acesta va fi prelucrat de ChatGPT și se va oferi un răspuns | + | <payload>: scriind direct textul, neprefixat de „!”, acesta va fi prelucrat de ChatGPT și se va oferi un |
+ | răspuns | ||
</code> | </code> | ||
Line 171: | Line 186: | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | <note> | ||
Un mic demo cu cateva din functionalitatile GPTMA in faza incipienta: | Un mic demo cu cateva din functionalitatile GPTMA in faza incipienta: | ||
+ | |||
[[https://ctipub-my.sharepoint.com/personal/farhad_ali_gul_stud_acs_upb_ro/_layouts/15/stream.aspx?id=%2Fpersonal%2Ffarhad%5Fali%5Fgul%5Fstud%5Facs%5Fupb%5Fro%2FDocuments%2Fprezentare%2Emp4&ga=1|Prezentare GPT Multimedia Assistant]] | [[https://ctipub-my.sharepoint.com/personal/farhad_ali_gul_stud_acs_upb_ro/_layouts/15/stream.aspx?id=%2Fpersonal%2Ffarhad%5Fali%5Fgul%5Fstud%5Facs%5Fupb%5Fro%2FDocuments%2Fprezentare%2Emp4&ga=1|Prezentare GPT Multimedia Assistant]] | ||
+ | </note> | ||
Poza cu proiectul la inceputul proiectarii: | Poza cu proiectul la inceputul proiectarii: | ||
- | {{pm:prj2023:danield:gptma_poza.jpeg?500x250| Demo GPTMA}} | ||
+ | {{pm:prj2023:danield:gptma_poza.jpeg?500x400| Demo GPTMA}} | ||
- | Poze cu proiectul lipit pe placaj de test: | ||
+ | Lipiturile de pe spatele placutei: | ||
+ | |||
+ | {{pm:prj2023:danield:gptma_circuit2.jpg?400x550| GPTMA}} | ||
+ | |||
+ | |||
+ | Poza cu proiectul lipit pe placaj de test: | ||
+ | |||
+ | |||
+ | {{pm:prj2023:danield:gptma_circuit.jpg?400x550| GPTMA}} | ||
+ | |||
+ | |||
+ | Proiectul in stadiu final: | ||
+ | |||
+ | |||
+ | {{pm:prj2023:danield:gptma_circuit3.jpg?400x550| GPTMA}} | ||
Line 187: | Line 219: | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | Ca si concluzie, o sa evidentiez limitarea la nivel de software pentru procesarea audio. | + | Lucrul asupra acestui proiect a fost unul destul de indelungat. |
+ | |||
+ | De la inceput am plecat de la premisa ca daca nu iese o singura parte din proiect (comunicarea cu GPT de exemplu), se duce toata ideea si sensul | ||
+ | proiectului. | ||
+ | |||
+ | Pana la urma, in prima faza reusisem sa proiectez software proiectul intr-o faza incipienta, pe care am prezentat-o si la SCSS. | ||
+ | |||
+ | Ulterior, am decis sa fac portabil proiectul (am incercat sa-l aduc o data la facultate montat pe breadboard si s-a facut praf). | ||
+ | |||
+ | Aici am mai consumat cateva zile cu lipiturile care se pot vedea in poza, au fost si altele nereusite. | ||
- | Pe viitor, pentru a reduce seminificativ timpul de descarcare + redare audio, as dori sa paralelizez aceste 2 operatii. | + | Intr-un final a iesit un proiect complet functional, deschizator de drumuri pentru orientarea asupra proiectarii programelor mai sofisticate pe microcontrolere. |
===== Download ===== | ===== Download ===== | ||
- | [[https://github.com/FarhadGUL06/PicoAssistant|PicoAssistant]] | + | [[https://github.com/FarhadGUL06/PicoAssistant|PicoAssistant]] - fisierul cod si biblioteci pt GPT Multimedia Assistant |
- | [[https://github.com/FarhadGUL06/YoutubeAPI|YoutubeAPI]] | + | [[https://github.com/FarhadGUL06/YoutubeAPI|YoutubeAPI]] - API-ul care proceseaza audio si trimite catre GPTMA |
- | [[https://github.com/FarhadGUL06/esp32_stats_api|ESP32_STATS_API]] | + | [[https://github.com/FarhadGUL06/esp32_stats_api|ESP32_STATS_API]] - API-ul care preia si trimite date de la [[https://ocw.cs.pub.ro/courses/icalc/proiect2023|ESP32]] |