PROAI-FRAMEWORK
Raccolta di informazioni utili ad impostare e lavorare con ProAi-Framework.
STRUTTURA FILE
Ai fini di spiegare come installare e come utilizzare il servizio verrà utilizzata questa struttura file, che verrà definita per la guida come "Path base" per tutte quelle che saranno le operazioni di rilascio.
IL SERVIZIO
O in questo caso I servizi, proai-framework infatti è diviso in 3 funzioni differenti, ognuna con uno specifico script .bat da cui lanciarla. Tutte e tre le funzioni svolgono operazioni separate, per questo motivo si è scelto di dividerle.
ProAi-Server
Function:
- Richieste a ChatGPT
- Salvataggio in database dei dati utili alla predizione
Report
Function:
- Generazione di report e conseguente invio per mail dello stesso
Requirements:
- [ProBi] In particolare l' exportServer ovvero il servizio che crea le immagini dei grafici a partire dai dati ottenuti dal servizio ProBi.
- [SMTP] I report vengono inviati per mail, è necessario quindi che il servizio smtp in cloud sia attivo e funzionante per poter completare l'operazione.
Telegram / Telegram Auth
Function:
- Gestisce le interazioni con il bot telegram, l'autenticazione è necessaria in almeno una macchina virtuale al momento per inserire gli utenti autorizzati a scrivere al Bot
Requirements:
- [ProAi-Server] Visto che tra le funzioni del bot c'è quella di interpretare e commentare i grafici richiesti abbiamo bisogno di questo servizio per poter interrogare ChatGPT.
- [ProBi] In particolare l' exportServer ovvero il servizio che crea le immagini dei grafici a partire dai dati ottenuti dal servizio ProBi.
DEPLOY
Tutti i file e le cartelle sono presenti nella repository git di ProAi-Framework, vengono spiegati in forma testuale per uma maggiore chiarezza.
Tutti i servizi sono stati pensati per avere separati di file di configurazione e la cartella "data", in questo modo l'aggiornamento viene notevolmente semplificato.
Per installarlo da un cliente ci basta avere in C:\PROROB\bin\pronet-iot\proai-framework questa struttura:
proai-framework
├── lib
├── res
├── scripts
├── src
|
└── requirement.txt
Di default il file aggiuntivo "config.json" non è presente, questo perchè in mancanza tutti i servizi automaticamente andranno a recuperare le loro configurazioni da C:\PROROB\config\proai. In caso si voglia modificare il path per salvare i file da qualche altra parte la struttura è la seguente:
{
"config_path":"C:\\PROROB\\config"
}
Visto che nella maggior parte dei clienti la struttura della ROOT folder è definita e uguale, si consiglia di non mettere nessun file.
Configuration folder
La cartella delle configurazioni di ProAi-Framework è strutturata in questo modo:
config\proai
├── launch
├── services
|
├── path.json
└── .env
-
.env
Contiene tutte le chiavi di telegram e openAi. -
path.json
Specifica dove salvare i log o i file del database, presenta la seguente struttura:{
"logs_path": "C:\\PROROB\\logs\\proai",
"data_path":"C:\\PROROB\\data\\proai"
}Anche in questo caso vengono fornite le impostazioni di "Base" da utilizzare per la maggior parte dei clienti.
-
services
Ogni servizio ha il suo json di configurazioni, idealmente quindi se da un cliente un servizio non è abilitato non servirà compilare il corrispettivo file di configurazione, gran parte delle configurazioni in realtà non va modificato, in quanto sono informazioni globali e costanti, bisogna invece fare attenzione principalmente agli URL, in quanto sono quelle che vanno a scegliere a quale servizio fare le richieste.
ATTENZIONE
Al momento le configurazioni in release del servizio telegram sono contenute in telegram_bot_dev.json.
Installazione
-
Scaricare e installare i programmi necessari
- Python (ver. 3.11)
- Git
- (Facoltativo) Timeseries e PostgreSQL
-
Creare un ambiente virtuale python in C:\PROROB\bin_srv\python-env\proai
-
Scaricare tutti i pacchetti python necessari (una volta attivato il venv) usando:
pip install -r requirement.txtIl file requirement come visto prima sarà collocato nella cartella di proai-framework
-
Per testare i servizi necessari sarà sufficiente eseguire gli script ".bat" collocati in
/script/launchers
Timeseries
-
Per le timeseries è necessario scaricare i due pacchetti aggiunti che contengono tutti i file. Questi possono essere scaricati dai seguenti link
https://github.com/timescale/timescaledb/releases/latest/download/timescaledb-postgresql-15-windows-amd64.ziphttps://sbp.enterprisedb.com/getfile.jsp?fileid=1259022O dal cloud, andranno quindi estratti entrambi in
C:\PROROB\bin_srv\. -
Poi é necessario runnare
install_and_rundalla cartellaC:\PROROB\bin\ProNet-IoT\proai-framework\scripts\timescaledb -
Le configurazioni del servizio saranno poi disponinili in:
C:\PROROB\config\proai\.envC:\PROROB\config\proai\services\proai.json
-
Quando probi viene lanciato, creera la tabella, che poi verra visualizzata in pgAdmin in:
Local > Databases > postgress > Schemas > public > Tables > kpi_history -
In PROROB/utility dovrebbe essercci
nssmche seerve per installare ProAI Framework come servizio, con le seguenti impostazioni:

Path: C:\PROROB\bin\ProNet-IoT\proai-framework\scripts\launchers\run_proai_server.cmd
Cartella di avvio: C:\PROROB\bin\ProNet-IoT\proai-framework\scripts\launchers\
INTEGRATION
Collection of entry point, useful function and all the tool necessary to utilise or integrate the various ProAi-Framework's function.
Storicization
ProAi-Framework include tutta la logica per interagire con database PostgreSQL. Affinché queste funzionalità operino correttamente, PostgreSQL deve essere stato precedentemente installato e configurato sulla macchina, seguendo le istruzioni fornite nella guida all'installazione.
Attraverso specifici endpoint API forniti dal framework, è possibile utilizzare operazioni comuni sul database, come la creazione di tabelle, l'inserimento di dati e la verifica dell'esistenza di tabelle.
La documentazione offre un esempio dell'URL di base:
"BASE_URL": "http://127.0.0.1:5000/api/v1"
[POST] Check table
Controlla se una specifica tabella sia presente o meno nel database. L'operazione è utile per evitare di creare la tabella quando non necessario.
URL:
<BASE_URL>"/time_series/check_table"
BODY:
{
"table_name":"table_example_name"
}
C# EXAMPLE:
var data = new Dictionary<string, object>
{
{"table_name", Config.TimeSeriesConfig.TableName}
};
response = ProRest.SendRequest(HttpMethod.Post, Config.TimeSeriesConfig.BaseUrl + "/time_series/check_table", data: data);
[POST] Table Creation
URL:
<BASE_URL>"/time_series/create_table"
BODY:
{
"column_name":[
"column_example_name"
],
"column_types":[
"INT"
],
"table_name":"table_example_name"
}
C# EXAMPLE:
var tableToCreate = new Dictionary<string, object>
{
{"column_names", new List<string>{ "kl_kp_id","kl_subject_id","kl_value","kl_target_low_bound","kl_target_high_bound", "timestamp"} },
{ "column_types", new List<string> { "INT", "INT", "FLOAT", "FLOAT", "FLOAT", "TIMESTAMP" }},
{ "table_name", Config.TimeSeriesConfig.TableName }
};
response = ProRest.SendRequest(HttpMethod.Post, Config.TimeSeriesConfig.BaseUrl + "/time_series/create_table", data: tableToCreate);
[POST] Continuos Aggregation
Abilita l'aggregazione continua per la storicizzazione (questa operazione non è obbligatoria per salvare i dati nel database) per una specifica tabella. Dovrebbe essere eseguita solo al momento della sua creazione.
URL:
<BASE_URL>"/time_series/create_continuous_aggregate"
BODY:
{
"source_table":"string",
"aggregation_values": ["string_list","column_to_aggregate"],
"aggregation_metrics": ["string_list","aggregation_type","AVG","MIN"],
"date_column": "string (name of column with time parameter)",
"aggregation_interval": "string (time interval)",
"group_by_list":["string_list","column_to_groupby"]
}
C# EXAMPLE:
var tableConfig = new Dictionary<string, object>
{
{ "source_table", Config.TimeSeriesConfig.TableName},
{ "aggregation_values", new List<string>{ "kl_value", "kl_target_low_bound", "kl_target_high_bound"} },
{ "aggregation_metrics", new List<string>{"AVG", "AVG", "AVG" } },
{ "date_column", "timestamp" },
{ "aggregation_interval", "15 minutes"},
{ "group_by_list", new List<string>{"kl_kp_id", "kl_subject_id"}}
};
response = ProRest.SendRequest(HttpMethod.Post, Config.TimeSeriesConfig.BaseUrl + "/time_series/create_continuous_aggregate", data: tableConfig);
[POST] Insert in Table
URL:
<BASE_URL>"/time_series/insert_data"
BODY:
{
"table_name":"table_example_name",
"data":{
"column_example_name":1
}
}
C# EXAMPLE:
var data = new Dictionary<string, object>
{
{
"table_name",
Config.TimeSeriesConfig.TableName
},
{
"data",
new Dictionary<string, object>{
{ "kl_kp_id", kpId },
{ "kl_subject_id", subjectId } ,
{ "kl_value", value },
{ "kl_target_low_bound", targetHighBound},
{ "kl_target_high_bound", targetHighBound},
{ "timestamp", time.ToString("yyyy-MM-dd HH:mm:ss")},
}
}
};
response = ProRest.SendRequest(HttpMethod.Post, Config.TimeSeriesConfig.BaseUrl + "/time_series/insert_data", data: data);