Skip to content

Build AI agents with Go. Multiple providers, multiple models, one API 🧙

License

charmbracelet/fantasy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Fantasy

The Charm Fantasy logo
Latest Release GoDoc Build Status

Build AI agents with Go. Multi-provider, multi-model, one API.

  1. Choose a model and provider
  2. Add some tools
  3. Compile to native machine code and let it rip

Note

Fantasy is currently a preview. Expect API changes.

import "charm.land/fantasy"
import "charm.land/fantasy/providers/openrouter"

// Choose your fave provider.
provider, err := openrouter.New(openrouter.WithAPIKey(myHotKey))
if err != nil {
	fmt.Fprintln(os.Stderr, "Whoops:", err)
	os.Exit(1)
}

ctx := context.Background()

// Pick your fave model.
model, err := provider.LanguageModel(ctx, "moonshotai/kimi-k2")
if err != nil {
	fmt.Fprintln(os.Stderr, "Dang:", err)
	os.Exit(1)
}

// Make your own tools.
cuteDogTool := fantasy.NewAgentTool(
  "cute_dog_tool",
  "Provide up-to-date info on cute dogs.",
  fetchCuteDogInfoFunc,
)

// Equip your agent.
agent := fantasy.NewAgent(model, fantasy.WithTools(cuteDogTool))

// Put that agent to work!
const prompt = "Find all the cute dogs in Silver Lake, Los Angeles."
result, err := agent.Generate(context.Background(), fantasy.AgentCall{Prompt: prompt})
if err != nil {
    fmt.Fprintln(os.Stderr, "Oof:", err)
    os.Exit(1)
}
fmt.Println(result.Response.Content.Text())

🍔 For the full implementation and more see the examples directory.

Multi-model? Multi-provider?

Yeah! Fantasy is designed to support a wide variety of providers and models under a single API. While many providers such as Microsoft Azure, Amazon Bedrock, and OpenRouter have dedicated package, many other work just fine with openaicompat, the generic OpenAI-compatible layer. That said, if you find a provider that’s not compatible and needs special treatment, please let us know in an issue (or open a PR).

Work in Progress

We built Fantasy to power Crush, a hot coding agent for glamourously invincible development. Given that, Fantasy does not yet support things like:

  • Image models
  • Audio models
  • PDF uploads
  • Provider tools (e.g. web_search)

For things you’d like to see supported, PRs are welcome.

Whatcha think?

We’d love to hear your thoughts on this project. Need help? We gotchu. You can find us on:


Part of Charm.

The Charm logo

Charm热爱开源 • Charm loves open source

About

Build AI agents with Go. Multiple providers, multiple models, one API 🧙

Resources

License

Contributing

Security policy

Stars

Watchers

Forks