akra35567 commited on
Commit
2836ad4
·
1 Parent(s): ca462dc

Upload 10 files

Browse files
Files changed (9) hide show
  1. .dockerignore +27 -0
  2. .env.example +15 -0
  3. .gitattributes +2 -0
  4. Dockerfile +6 -0
  5. README.md +198 -9
  6. docker-compose.yml +14 -0
  7. main.py +29 -0
  8. requirements.txt +11 -0
  9. setup.py +48 -0
.dockerignore ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ **/__pycache__
2
+ **/.venv
3
+ **/.classpath
4
+ **/.dockerignore
5
+ **/.env
6
+ **/.git
7
+ **/.gitignore
8
+ **/.project
9
+ **/.settings
10
+ **/.toolstarget
11
+ **/.vs
12
+ **/.vscode
13
+ **/*.*proj.user
14
+ **/*.dbmdl
15
+ **/*.jfm
16
+ **/bin
17
+ **/charts
18
+ **/docker-compose*
19
+ **/compose*
20
+ **/Dockerfile*
21
+ **/node_modules
22
+ **/npm-debug.log
23
+ **/obj
24
+ **/secrets.dev.yaml
25
+ **/values.dev.yaml
26
+ LICENSE
27
+ README.md
.env.example ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Configuração das APIs de LLM
2
+ # Obtenha suas chaves em:
3
+ # Mistral: https://console.mistral.ai/
4
+ # Gemini: https://aistudio.google.com/app/apikey
5
+
6
+ # API da Mistral (Provedor Primário)
7
+ MISTRAL_API_KEY=your_mistral_api_key_here
8
+ MISTRAL_MODEL=mistral-small-latest
9
+
10
+ # API do Gemini (Fallback)
11
+ GEMINI_API_KEY=your_gemini_api_key_here
12
+ GEMINI_MODEL=gemini-1.5-flash
13
+
14
+ # Porta do servidor
15
+ PORT=5000
.gitattributes CHANGED
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ akira.db filter=lfs diff=lfs merge=lfs -text
37
+ test.db filter=lfs diff=lfs merge=lfs -text
Dockerfile ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ # Dockerfile para IA Akira
2
+ FROM python:3.11-slim
3
+ WORKDIR /app
4
+ COPY . .
5
+ RUN pip install --upgrade pip && pip install -r requirements.txt
6
+ CMD ["python", "main.py"]
README.md CHANGED
@@ -1,11 +1,200 @@
1
- ---
2
- title: Akira
3
- emoji: 🌍
4
- colorFrom: blue
5
- colorTo: pink
6
- sdk: docker
7
- pinned: false
8
- short_description: akira-bot
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  ---
10
 
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ # Akira IA - Chatbot Angolano com Personalidade
2
+
3
+ Akira é uma IA angolana com personalidade forte, senso de humor, opiniões próprias e emoções. Usa APIs de LLM (Mistral como primário e Gemini como fallback) para gerar respostas naturais e contextualizadas.
4
+
5
+ ## 🚀 Características
6
+
7
+ - **Personalidade Única**: Fala com gírias angolanas, é sarcástica, empática e curiosa
8
+ - **Memória Contextual**: Lembra de conversas anteriores e mantém contexto
9
+ - **Emoções Dinâmicas**: Muda de humor baseado nas interações
10
+ - **Sistema de Fallback**: Usa Mistral API como primário e Gemini como backup
11
+ - **Proteção contra Prompt Injection**: Sistema de privilégios para usuários
12
+ - **Aprendizado Contínuo**: Sistema de treinamento periódico (opcional)
13
+
14
+ ## 📋 Pré-requisitos
15
+
16
+ - Python 3.8+
17
+ - Chaves de API:
18
+ - [Mistral AI](https://console.mistral.ai/) (Provedor primário)
19
+ - [Google Gemini](https://aistudio.google.com/app/apikey) (Fallback)
20
+
21
+ ## 🔧 Instalação
22
+
23
+ 1. **Clone o repositório**
24
+ ```bash
25
+ git clone <seu-repositorio>
26
+ cd flask-main
27
+ ```
28
+
29
+ 2. **Instale as dependências**
30
+ ```bash
31
+ pip install -r requirements.txt
32
+ ```
33
+
34
+ 3. **Configure as variáveis de ambiente**
35
+
36
+ Copie o arquivo `.env.example` para `.env`:
37
+ ```bash
38
+ cp .env.example .env
39
+ ```
40
+
41
+ Edite o arquivo `.env` e adicione suas chaves de API:
42
+ ```env
43
+ MISTRAL_API_KEY=sua_chave_mistral_aqui
44
+ GEMINI_API_KEY=sua_chave_gemini_aqui
45
+ ```
46
+
47
+ ## 🎯 Como Usar
48
+
49
+ ### Iniciar o servidor
50
+
51
+ ```bash
52
+ python main.py
53
+ ```
54
+
55
+ O servidor iniciará na porta 5000 (ou a porta definida em `PORT`).
56
+
57
+ ### Fazer requisições
58
+
59
+ **Endpoint**: `POST /akira`
60
+
61
+ **Exemplo de requisição**:
62
+ ```bash
63
+ curl -X POST http://localhost:5000/akira \
64
+ -H "Content-Type: application/json" \
65
+ -d '{
66
+ "usuario": "João",
67
+ "numero": "244999999999",
68
+ "mensagem": "Eai Akira, tudo fixe?"
69
+ }'
70
+ ```
71
+
72
+ **Resposta**:
73
+ ```json
74
+ {
75
+ "resposta": "Ss, puto! Tá tudo na boa por aqui. E contigo?"
76
+ }
77
+ ```
78
+
79
+ ### Health Check
80
+
81
+ ```bash
82
+ curl http://localhost:5000/health
83
+ ```
84
+
85
+ ## 🏗️ Estrutura do Projeto
86
+
87
+ ```
88
+ flask-main/
89
+ ├── modules/
90
+ │ ├── __init__.py
91
+ │ ├── api.py # API Flask e rotas
92
+ │ ├── llm_provider.py # Gerenciador de LLMs (Mistral + Gemini)
93
+ │ ├── config.py # Configurações
94
+ │ ├── database.py # Gerenciamento de banco de dados
95
+ │ ├── contexto.py # Análise de contexto e intenções
96
+ │ └── treinamento.py # Sistema de treinamento
97
+ ├── main.py # Ponto de entrada
98
+ ├── requirements.txt # Dependências
99
+ ├── .env.example # Exemplo de variáveis de ambiente
100
+ └── akira.db # Banco de dados SQLite
101
+ ```
102
+
103
+ ## ⚙️ Configuração Avançada
104
+
105
+ ### Modelos Disponíveis
106
+
107
+ **Mistral**:
108
+ - `mistral-tiny` (mais rápido, mais barato)
109
+ - `mistral-small-latest` (padrão - bom equilíbrio)
110
+ - `mistral-medium-latest` (mais capaz)
111
+ - `mistral-large-latest` (mais poderoso)
112
+
113
+ **Gemini**:
114
+ - `gemini-1.5-flash` (padrão - rápido)
115
+ - `gemini-1.5-pro` (mais capaz)
116
+ - `gemini-pro` (versão anterior)
117
+
118
+ ### Personalização
119
+
120
+ Edite `modules/config.py` para ajustar:
121
+ - Personalidade e regras
122
+ - Temperatura e parâmetros de geração
123
+ - Memória e contexto
124
+ - Filtros e limites
125
+
126
+ ### Treinamento Periódico
127
+
128
+ Para ativar o treinamento automático, edite `modules/config.py`:
129
+ ```python
130
+ START_PERIODIC_TRAINER = True
131
+ TRAIN_INTERVAL_HOURS = 24 # Treinar a cada 24 horas
132
+ ```
133
+
134
+ ## 🐳 Docker
135
+
136
+ ```bash
137
+ docker-compose up -d
138
+ ```
139
+
140
+ ## 📊 Sistema de Fallback
141
+
142
+ O sistema tenta usar os provedores na seguinte ordem:
143
+
144
+ 1. **Mistral API** (Primário)
145
+ - Se falhar ou não estiver configurado, tenta o próximo
146
+
147
+ 2. **Gemini API** (Fallback)
148
+ - Se falhar ou não estiver configurado, retorna mensagem padrão
149
+
150
+ 3. **Mensagem Padrão**
151
+ - "Desculpa, puto, o modelo tá off hoje. Tenta depois!"
152
+
153
+ ## 🔒 Segurança
154
+
155
+ - Sistema de usuários privilegiados para comandos especiais
156
+ - Proteção contra prompt injection
157
+ - Validação de entrada
158
+ - Rate limiting (recomendado adicionar)
159
+
160
+ ## 🤝 Contribuindo
161
+
162
+ Contribuições são bem-vindas! Sinta-se à vontade para:
163
+ - Reportar bugs
164
+ - Sugerir novas funcionalidades
165
+ - Melhorar a documentação
166
+ - Enviar pull requests
167
+
168
+ ## 📝 Licença
169
+
170
+ Este projeto é de código aberto. Use como quiser!
171
+
172
+ ## 🆘 Suporte
173
+
174
+ Se tiver problemas:
175
+ 1. Verifique se as chaves de API estão corretas
176
+ 2. Confirme que as dependências estão instaladas
177
+ 3. Veja os logs para mensagens de erro
178
+ 4. Abra uma issue no repositório
179
+
180
+ ## 🎨 Exemplos de Uso
181
+
182
+ ### Conversa Normal
183
+ ```json
184
+ {
185
+ "usuario": "Maria",
186
+ "numero": "244912345678",
187
+ "mensagem": "Que música tá a tocar aí?"
188
+ }
189
+ ```
190
+
191
+ ### Resposta com Emoção
192
+ ```json
193
+ {
194
+ "resposta": "Oroh, tô a ouvir uns kuduro fixe! Bué de energia, puto!"
195
+ }
196
+ ```
197
+
198
  ---
199
 
200
+ Feito com ❤️ em Angola 🇦🇴
docker-compose.yml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+ services:
3
+ akira:
4
+ build: .
5
+ ports:
6
+ - "5000:5000"
7
+ volumes:
8
+ - .:/app
9
+ environment:
10
+ - PYTHONUNBUFFERED=1
11
+ - MISTRAL_API_KEY=${MISTRAL_API_KEY}
12
+ - GEMINI_API_KEY=${GEMINI_API_KEY}
13
+ - MISTRAL_MODEL=${MISTRAL_MODEL:-mistral-small-latest}
14
+ - GEMINI_MODEL=${GEMINI_MODEL:-gemini-1.5-flash}
main.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import logging
3
+ from modules.api import AkiraAPI
4
+ import modules.config as config
5
+
6
+ # Configuração de logging
7
+ logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s')
8
+ logger = logging.getLogger(__name__)
9
+
10
+
11
+ def create_app():
12
+ akira = AkiraAPI(config)
13
+ return akira.app
14
+
15
+
16
+ app = create_app()
17
+
18
+
19
+ # Healthcheck
20
+ @app.route('/health')
21
+ def health():
22
+ logger.info("✅ Health check accessed.")
23
+ return "OK", 200
24
+
25
+
26
+ if __name__ == "__main__":
27
+ logger.info("Starting Akira IA Flask app...")
28
+ port = int(os.getenv("PORT", 5000))
29
+ app.run(debug=True, host="0.0.0.0", port=port)
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ flask
2
+ numpy
3
+ psutil
4
+ structlog
5
+ cachetools
6
+ mistralai
7
+ google-generativeai
8
+ requests
9
+
10
+ # Dependências opcionais (para funcionalidades avançadas)
11
+ sentence-transformers # Para embeddings e análise semântica
setup.py ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Script de setup para instalar dependências e configurar o projeto Akira IA
3
+ """
4
+ import subprocess
5
+ import sys
6
+ import os
7
+
8
+ def install_dependencies():
9
+ """Instala as dependências do requirements.txt"""
10
+ print("📦 Instalando dependências...")
11
+ try:
12
+ subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"])
13
+ print("✅ Dependências instaladas com sucesso!")
14
+ return True
15
+ except subprocess.CalledProcessError as e:
16
+ print(f"❌ Erro ao instalar dependências: {e}")
17
+ return False
18
+
19
+ def check_env_file():
20
+ """Verifica se o arquivo .env existe"""
21
+ if not os.path.exists('.env'):
22
+ print("⚠️ Arquivo .env não encontrado!")
23
+ print("📝 Copie .env.example para .env e configure suas chaves de API:")
24
+ print(" cp .env.example .env")
25
+ return False
26
+ print("✅ Arquivo .env encontrado!")
27
+ return True
28
+
29
+ def main():
30
+ print("🚀 Configurando Akira IA...\n")
31
+
32
+ # Instalar dependências
33
+ if not install_dependencies():
34
+ sys.exit(1)
35
+
36
+ print()
37
+
38
+ # Verificar .env
39
+ check_env_file()
40
+
41
+ print("\n✨ Setup concluído!")
42
+ print("\n📖 Próximos passos:")
43
+ print("1. Configure suas chaves de API no arquivo .env")
44
+ print("2. Execute: python main.py")
45
+ print("3. Acesse: http://localhost:5000/health")
46
+
47
+ if __name__ == "__main__":
48
+ main()