YoMo is an open-source LLM Function Calling Framework for building Geo-distributed AI applications. Built atop QUIC Transport Protocol and Stateful Serverless architecture, makes your AI application low-latency, reliable, secure, and easy.
💚 We care about: Customer Experience in the Age of AI
| Features | |
|---|---|
| ⚡️ | Low-latency Guaranteed by implementing atop QUIC QUIC |
| 🔐 | Security TLS v1.3 on every data packet by design |
| 📸 | Stateful Serverless Make your GPU serverless 10x faster |
| 🌎 | Geo-Distributed Architecture Brings AI inference closer to end users |
| 🚀 | Y3 a faster than real-time codec |
Let's implement a function calling with sfn-currency-converter:
curl -fsSL https://get.yomo.run | shVerify if the CLI was installed successfully
yomo version
Prepare the configuration as my-agent.yaml
name: ai-zipper host: 0.0.0.0 port: 9000 auth: type: token token: SECRET_TOKEN bridge: ai: server: addr: 0.0.0.0:8000 ## Restful API endpoint provider: openai ## LLM API Service we will use providers: azopenai: api_endpoint: https://<RESOURCE>.openai.azure.com deployment_id: <DEPLOYMENT_ID> api_key: <API_KEY> api_version: <API_VERSION> openai: api_key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx model: gpt-4-1106-preview gemini: api_key: <GEMINI_API_KEY> cloudflare_azure: endpoint: https://gateway.ai.cloudflare.com/v1/<CF_GATEWAY_ID>/<CF_GATEWAY_NAME> api_key: <AZURE_API_KEY> resource: <AZURE_OPENAI_RESOURCE> deployment_id: <AZURE_OPENAI_DEPLOYMENT_ID> api_version: 2023年12月01日-preview
Start the server:
YOMO_LOG_LEVEL=debug yomo serve -c my-agent.yaml
First, let's define what this function do and how's the parameters required, these will be combined to prompt when invoking LLM.
type Parameter struct { Domain string `json:"domain" jsonschema:"description=Domain of the website,example=example.com"` } func Description() string { return `if user asks ip or network latency of a domain, you should return the result of the giving domain. try your best to dissect user expressions to infer the right domain names` } func InputSchema() any { return &Parameter{} }
Create a Stateful Serverless Function to get the IP and Latency of a domain:
func Handler(ctx serverless.Context) { var msg Parameter ctx.ReadLLMArguments(&msg) // get ip of the domain ips, _ := net.LookupIP(msg.Domain) // get ip[0] ping latency pinger, _ := ping.NewPinger(ips[0].String()) pinger.Count = 3 pinger.Run() stats := pinger.Statistics() val := fmt.Sprintf("domain %s has ip %s with average latency %s", msg.Domain, ips[0], stats.AvgRtt) ctx.WriteLLMResult(val) }
Finally, let's run it
$ yomo run app.go time=2024年03月19日T21:43:30.583+08:00 level=INFO msg="connected to zipper" component=StreamFunction sfn_id=B0ttNSEKLSgMjXidB11K1 sfn_name=fn-get-ip-from-domain zipper_addr=localhost:9000 time=2024年03月19日T21:43:30.584+08:00 level=INFO msg="register ai function success" component=StreamFunction sfn_id=B0ttNSEKLSgMjXidB11K1 sfn_name=fn-get-ip-from-domain zipper_addr=localhost:9000 name=fn-get-ip-from-domain tag=16
$ curl -i http://127.0.0.1:9000/v1/chat/completions -H "Content-Type: application/json" -d '{ "messages": [ { "role": "system", "content": "You are a test assistant." }, { "role": "user", "content": "Compare website speed between Nike and Puma" } ], "stream": false }' HTTP/1.1 200 OK Content-Length: 944 Connection: keep-alive Content-Type: application/json Date: 2024年3月19日 13:30:14 GMT Keep-Alive: timeout=4 Proxy-Connection: keep-alive { "Content": "Based on the data provided for the domains nike.com and puma.com which include IP addresses and average latencies, we can infer the following about their website speeds: - Nike.com has an IP address of 13.225.183.84 with an average latency of 65.568333 milliseconds. - Puma.com has an IP address of 151.101.194.132 with an average latency of 54.563666 milliseconds. Comparing these latencies, Puma.com is faster than Nike.com as it has a lower average latency. Please be aware, however, that website speed can be influenced by many factors beyond latency, such as server processing time, content size, and delivery networks among others. To get a more comprehensive understanding of website speed, you would need to consider additional metrics and possibly conductreal-time speed tests.", "FinishReason": "stop" }
Full LLM Function Calling Codes
Read more about YoMo at yomo.run/docs.
YoMo ❤️ Vercel, our documentation website is
It’s no secret that today’s users want instant AI inference, every AI
application is more powerful when it response quickly. But, currently, when we
talk about distribution, it represents distribution in data center. The AI model is
far away from their users from all over the world.
If an application can be deployed anywhere close to their end users, solve the problem, this is Geo-distributed System Architecture:
First off, thank you for considering making contributions. It's people like you that make YoMo better. There are many ways in which you can participate in the project, for example:
- File a bug report. Be sure to include information like what version of YoMo you are using, what your operating system is, and steps to recreate the bug.
- Suggest a new feature.
- Read our contributing guidelines to learn about what types of contributions we are looking for.
- We have also adopted a code of conduct that we expect project participants to adhere to.