Neste projeto você vai construir uma API em Ruby que permite criar e gerenciar conversas com modelos de Inteligência Artificial. Utilizando Sinatra como servidor HTTP, ActiveRecord com SQLite3 para persistência e a gem RubyLLM para comunicação com provedores de IA, a aplicação expõe rotas para criação de chats, envio de mensagens com histórico de contexto, controle de tokens consumidos e armazenamento completo das conversas em banco de dados.
Estrutura, regras e requisitos do projeto
Use este checklist para ajudar a organizar a sua entrega
Nesse projeto você vai desenvolver uma API HTTP simples de chat com Inteligência Artificial. A aplicação irá expor rotas para criação e gerenciamento de conversas com modelos de IA, persistindo todo o histórico em banco de dados.
Nesse projeto irá praticar os seguintes conceitos:
Ao criar um novo chat, o usuário pode configurar a conversa.
Campos opcionais (com valores padrão):
gpt-4o-mini, claude-sonnet-4-6, gemini-2.5-flash — padrão: modelo default do provedor configurado)Campos gerados automaticamente:
Ao enviar uma mensagem para um chat existente, o sistema deve:
user)assistant)Campos da mensagem do usuário:
Campos persistidos da resposta da IA:
assistant)model_id)input_tokens)output_tokens)has_many)belongs_to)A API deve seguir o padrão REST com respostas em JSON.
| Método | Rota | Descrição |
|---|---|---|
POST | /chats | Criar um novo chat |
GET | /chats | Listar todos os chats |
GET | /chats/:id | Obter detalhes de um chat com suas mensagens |
DELETE | /chats/:id | Excluir um chat |
| Método | Rota | Descrição |
|---|---|---|
POST | /chats/:id/messages | Enviar uma mensagem e receber resposta da IA |
GET | /chats/:id/messages | Listar todas as mensagens de um chat |
A API deve tratar os seguintes cenários com os status codes HTTP adequados:
RubyLLM.configureComo desafio extra, crie uma interface web para interagir com a API de chat utilizando templates ERB (Embedded Ruby) renderizados pelo Sinatra. ERB é o sistema de templates padrão do Ruby que permite embutir código Ruby diretamente dentro de arquivos HTML usando as tags <%= %> (para saída) e <% %> (para lógica), gerando páginas dinâmicas no servidor.
GET /chats): Lista todos os chats existentes com opção de criar um novoGET /chats/:id): Exibe o histórico de mensagens e um formulário para enviar novas mensagensGET /chats/new): Formulário para criar um novo chat com campos de modelo, system prompt e títuloPOST /chats/:id/messages): O formulário de mensagem faz POST e redireciona de volta para a página do chat com a resposta da IA exibida.envA gem RubyLLM oferece helpers para integração com ActiveRecord que facilitam a persistência automática de chats e mensagens. Consulte a documentação da gem para utilizar acts_as_chat e acts_as_message nos seus models, o que simplifica bastante o fluxo de enviar mensagens e salvar respostas automaticamente.
views/layout.erb) para reaproveitar a estrutura HTML entre páginasviews/ (ex: views/index.erb, views/chat.erb, views/new_chat.erb)Content-Type ou rotas separadas para distingui-lasNesse projeto você vai desenvolver uma API HTTP simples de chat com Inteligência Artificial. A aplicação irá expor rotas para criação e gerenciamento de conversas com modelos de IA, persistindo todo o histórico em banco de dados.
Nesse projeto irá praticar os seguintes conceitos:
Ao criar um novo chat, o usuário pode configurar a conversa.
Campos opcionais (com valores padrão):
gpt-4o-mini, claude-sonnet-4-6, gemini-2.5-flash — padrão: modelo default do provedor configurado)Campos gerados automaticamente:
Ao enviar uma mensagem para um chat existente, o sistema deve:
user)assistant)Campos da mensagem do usuário:
Campos persistidos da resposta da IA:
assistant)model_id)input_tokens)output_tokens)has_many)belongs_to)A API deve seguir o padrão REST com respostas em JSON.
| Método | Rota | Descrição |
|---|---|---|
POST | /chats | Criar um novo chat |
GET | /chats | Listar todos os chats |
GET | /chats/:id | Obter detalhes de um chat com suas mensagens |
DELETE | /chats/:id | Excluir um chat |
| Método | Rota | Descrição |
|---|---|---|
POST | /chats/:id/messages | Enviar uma mensagem e receber resposta da IA |
GET | /chats/:id/messages | Listar todas as mensagens de um chat |
A API deve tratar os seguintes cenários com os status codes HTTP adequados:
RubyLLM.configureComo desafio extra, crie uma interface web para interagir com a API de chat utilizando templates ERB (Embedded Ruby) renderizados pelo Sinatra. ERB é o sistema de templates padrão do Ruby que permite embutir código Ruby diretamente dentro de arquivos HTML usando as tags <%= %> (para saída) e <% %> (para lógica), gerando páginas dinâmicas no servidor.
GET /chats): Lista todos os chats existentes com opção de criar um novoGET /chats/:id): Exibe o histórico de mensagens e um formulário para enviar novas mensagensGET /chats/new): Formulário para criar um novo chat com campos de modelo, system prompt e títuloPOST /chats/:id/messages): O formulário de mensagem faz POST e redireciona de volta para a página do chat com a resposta da IA exibida.envA gem RubyLLM oferece helpers para integração com ActiveRecord que facilitam a persistência automática de chats e mensagens. Consulte a documentação da gem para utilizar acts_as_chat e acts_as_message nos seus models, o que simplifica bastante o fluxo de enviar mensagens e salvar respostas automaticamente.
views/layout.erb) para reaproveitar a estrutura HTML entre páginasviews/ (ex: views/index.erb, views/chat.erb, views/new_chat.erb)Content-Type ou rotas separadas para distingui-las