Módulos
Dev Copilot
Assistente IA powered by Claude com contexto Arc blockchain embutido.
O DevCopilot é um assistente IA com contexto completo da blockchain Arc embutido no system prompt. Responde perguntas, gera código, explica conceitos do ecossistema Circle — sem configuração extra além de uma chave de API.
Backend multi-provedor
O DevCopilot é alimentado por um provedor de LLM plugável, selecionado globalmente via COPILOT_PROVIDER no .env:
COPILOT_PROVIDER=anthropic # padrão — requer ANTHROPIC_API_KEY
# COPILOT_PROVIDER=gemini # pip install arc-devkit[gemini] — requer GEMINI_API_KEY, GEMINI_MODEL
# COPILOT_PROVIDER=openai # pip install arc-devkit[openai] — requer OPENAI_API_KEY, OPENAI_MODEL
# COPILOT_PROVIDER=ollama # local, sem API key — requer OLLAMA_MODEL (já baixado) e um servidor Ollama rodando
ask(), ask_stream(), histórico, cache, modo offline e anexos de imagem funcionam identicamente nos quatro provedores — o código desta página não muda dependendo de qual está ativo. Nenhum nome de modelo é adivinhado para Gemini/OpenAI/Ollama: GEMINI_MODEL/OPENAI_MODEL/OLLAMA_MODEL precisam ser definidos explicitamente, já que um default hardcoded poderia silenciosamente apontar para um modelo descontinuado ou inexistente.
⚠Modo agentic com tools é exclusivo do Anthropic
run_agent() (o loop de tool-use somente leitura usado por arc ask --agent) levanta NotImplementedError para qualquer provedor que não seja anthropic — cada provedor tem um schema de tool-calling incompatível que ainda não foi implementado.
Instalação e importação
from arc_devkit.copilot.agent import DevCopilot
Uso básico
copilot = DevCopilot()
# Pergunta simples
answer = copilot.ask("What is the gas cost in USDC for a transfer on Arc?")
print(answer)
Streaming
Receba tokens à medida que o modelo os gera:
for chunk in copilot.ask_stream("Write a recurring payment agent in Python"):
print(chunk, end="", flush=True)
Conversa multi-turn
O histórico é mantido em memória por instância:
copilot.ask("What is Circle CCTP?")
copilot.ask("Show me a Python example of a cross-chain USDC transfer")
# O contexto da primeira pergunta está disponível na segunda
Imagens como contexto
Suporte a PNG, JPEG, GIF e WebP:
answer = copilot.ask(
"What does this error mean?",
image_path="screenshot.png"
)
Contagem de tokens
Estime o custo antes de fazer a chamada (sem custo de API):
tokens = copilot.count_tokens("Explain how Malachite consensus works")
print(f"~{tokens} tokens")
Modo offline
Útil em CI/CD ou ambientes sem chave de API:
copilot = DevCopilot(offline=True)
response = copilot.ask("anything")
# → "[Offline mode] Arc DevKit is running in offline mode."
Contexto customizado
Injete descrição do seu projeto ou ABI de contrato:
copilot = DevCopilot(
extra_context="This project uses a custom USDC vault at 0xABC..."
)
Referência da API
DevCopilot(offline=False, extra_context=None)
| Parâmetro | Tipo | Descrição |
|---|---|---|
offline | bool | Se True, retorna resposta estática sem chamar a API |
extra_context | str | None | Contexto adicional injetado no system prompt |
ask(prompt, image_path=None)
| Parâmetro | Tipo | Descrição |
|---|---|---|
prompt | str | Pergunta ou instrução para o modelo |
image_path | str | None | Caminho para imagem a ser enviada como contexto |
Retorna: str — resposta completa do modelo.
ask_stream(prompt, image_path=None)
Retorna: Generator[str, None, None] — chunks de texto conforme o modelo gera.
count_tokens(prompt)
Retorna: int — estimativa de tokens sem fazer chamada de geração.
Features
| Feature | Descrição |
|---|---|
| Cache | 5 minutos de TTL por hash MD5 do prompt + modelo |
| Histórico | self.history — lista de mensagens da conversa atual |
| Token logging | Uso de tokens logado em cada chamada (DEBUG) |
| Provedor configurável | COPILOT_PROVIDER env var (padrão: anthropic) |
| Modelo configurável | env var *_MODEL de cada provedor (ex.: ANTHROPIC_MODEL, padrão: claude-sonnet-4-6) |
✦Uma instância por sessão
DevCopilot é instanciado por chamada — não é um singleton. Se quiser histórico contínuo, mantenha a mesma instância durante a sessão.