Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:danield:gptma [2023/05/28 22:45]
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.gAVR StudioCodeVisionAVR) +După conectarea Pico la internet prin WIFI, avem nevoie ​de o bibliotecă care să poată face request-uriAm ales biblioteca adafruit_requestscapabilă de requesturi simple
-  * librării şi surse 3rd-party (e.gProcyon AVRlib) + 
-  * algoritmi şstructuri ​pe care plănuiţi să le implementaţi +Tot codul este complex șlung, vom pune accentul ​pe baza acestuia ș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 130: Line 143:
 <​code>​ <​code>​
 !help: afișează comenzile disponibile !help: afișează comenzile disponibile
 +
 !ping: se poate verifica conexiunea între telefon și Pico. Se va afișa un „Pong!” pe ecran. !ping: se poate verifica conexiunea între telefon și Pico. Se va afișa un „Pong!” pe ecran.
 +
 !restart / !reload: se rulează de la început fișierul code.py !restart / !reload: se rulează de la început fișierul code.py
 +
 !p <​payload>:​ se poate reda piesa cu titlul specificat în <​payload>​ !p <​payload>:​ se poate reda piesa cu titlul specificat în <​payload>​
 +
 !tell <​payload>​ / !say <​payload>:​ dispozitivul va transmite audio inputul primit !tell <​payload>​ / !say <​payload>:​ dispozitivul va transmite audio inputul primit
 +
 !mem: memoria RAM disponibilă !mem: memoria RAM disponibilă
-!wf <​payload>:​ vremea în viitorul apropiat din orașul dat ca input, dacă <​payload>​ este gol, atunci se va analiza vremea în viitorul apropiat din București + 
-!w <​payload>:​ vremea în acest moment din orașul dat ca input, dacă <​payload>​ este gol, atunci se va analiza vremea în acest moment din București+!wf <​payload>:​ vremea în viitorul apropiat din orașul dat ca input, dacă <​payload>​ este gol,  
 +atunci se va analiza vremea în viitorul apropiat din București 
 + 
 +!w <​payload>:​ vremea în acest moment din orașul dat ca input, dacă <​payload>​ este gol,  
 +atunci se va analiza vremea în acest moment din București 
 !last: se va reda ultimul răspuns primit de la ChatGPT !last: se va reda ultimul răspuns primit de la ChatGPT
-!lan ro / en: se va seta limba pe ro / en, în funcție de cum este precizat. Limba este utilizată și pentru API-ul text-to-speech,​ selectându-se vocea potrivită limbii selectate+ 
 +!lan ro / en: se va seta limba pe ro / en, în funcție de cum este precizat. ​ 
 +Limba este utilizată și pentru API-ul text-to-speech,​ selectându-se vocea potrivită limbii selectate 
 !stats: statistici de temperatură și umiditate din încăperea in care se afla GPT Multimedia Assistant !stats: statistici de temperatură și umiditate din încăperea in care se afla GPT Multimedia Assistant
 +
 !esp - statistici de temperatura,​ umiditate si altele din locul in care se afla ESP32, cu afisare pe ecran !esp - statistici de temperatura,​ umiditate si altele din locul in care se afla ESP32, cu afisare pe ecran
 +
 !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>​
  
-Spre exemplu, pentru o cerere de vreme, se trimite un API Request către API-ul de vreme, se așteaptă răspunsul. După ce a fost primit, se trimite json-ul mai departe la ChatGPT pentru a fi prelucrat într-un text cursiv. La final, răspunsul primit de la ChatGPT este trimis la API-ul de text-to-speech care prelucrează textul și trimite răspuns fișierul binar mp3 care este salvat pe cardul SD și redat ulterior.+Spre exemplu, pentru o cerere de vreme, se trimite un API Request către API-ul de vreme, se așteaptă răspunsul. ​ 
 + 
 +După ce a fost primit, se trimite json-ul mai departe la ChatGPT pentru a fi prelucrat într-un text cursiv. ​ 
 + 
 +La final, răspunsul primit de la ChatGPT este trimis la API-ul de text-to-speech care  
 +prelucrează textul și trimite răspuns fișierul binar mp3 care este salvat pe cardul SD și redat ulterior.
  
  
 ===== 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}}
  
  
  
 ===== Concluzii ===== ===== Concluzii =====
 +
 +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.
 +
 +Intr-un final a iesit un proiect complet functional, deschizator de drumuri pentru orientarea asupra proiectarii programelor mai sofisticate pe microcontrolere.
 +
  
 ===== Download ===== ===== Download =====
  
-<note warning> +[[https://​github.com/​FarhadGUL06/​PicoAssistant|PicoAssistant]] - fisierul cod si biblioteci pt GPT Multimedia Assistant 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etcUn fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+ 
 +[[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]] - API-ul care preia si trimite date de la [[https://​ocw.cs.pub.ro/​courses/​icalc/​proiect2023|ESP32]]
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. 
-</​note>​ 
  
 ===== Jurnal ===== ===== Jurnal =====
Line 180: Line 248:
 07.05.2023 - adaugare componente folosite 07.05.2023 - adaugare componente folosite
  
-19.05.2023 - pr+19.05.2023 - prezentare proiectare hardware in laborator
  
 20.05.2023 - adaugare implementare hardware 20.05.2023 - adaugare implementare hardware
  
-2+26.05.2023 - prezentare demo functionare in laborator 
 + 
 +28.05.2023 - adaugare implementare software + concluzii 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. 
-</​note>​ 
  
-[1] https://​docs.circuitpython.org/​projects/​requests/​en/​latest/​api.html  +[1] https://​developer.mozilla.org/​en-US/​docs/​Web/​HTTP/​Methods  
-[2+ 
 +[2] https://​docs.circuitpython.org/​projects/​requests/​en/​latest/​api.html ​ 
 + 
 +[3https://​platform.openai.com 
 + 
 +[4] https://​openweathermap.org/​api  
 + 
 +[5] https://​rapidapi.com/​voicerss/​api/​text-to-speech-1  
 + 
 +[6] https://​play.google.com/​store/​apps/​details?​id=com.broxcode.arduinobluetoothfree  
 + 
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
  
pm/prj2023/danield/gptma.1685303126.txt.gz · Last modified: 2023/05/28 22:45 by farhad_ali.gul
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0