Portkey provides a robust and secure gateway to facilitate the integration of various Large Language Models (LLMs) into your applications, including your locally hosted models through Ollama.
Instantiate the Portkey client by adding your Ollama publicly-exposed URL to the customHost property.
import Portkey from 'portkey-ai'const portkey = new Portkey({ apiKey: "PORTKEY_API_KEY", // defaults to process.env["PORTKEY_API_KEY"] provider: "ollama", customHost: "https://7cc4-3-235-157-146.ngrok-free.app" // Your Ollama ngrok URL})
import Portkey from 'portkey-ai'const portkey = new Portkey({ apiKey: "PORTKEY_API_KEY", // defaults to process.env["PORTKEY_API_KEY"] provider: "ollama", customHost: "https://7cc4-3-235-157-146.ngrok-free.app" // Your Ollama ngrok URL})
from portkey_ai import Portkeyportkey = Portkey( api_key="PORTKEY_API_KEY", # Replace with your Portkey API key provider="ollama", custom_host="https://7cc4-3-235-157-146.ngrok-free.app" # Your Ollama ngrok URL)
For the Ollama integration, you only need to pass the base URL to customHost without the version identifier (such as /v1) - Portkey takes care of the rest!
Virtual Keys serve as Portkey’s unified authentication system for all LLM interactions, simplifying the use of multiple providers and Portkey features within your application. For self-hosted LLMs, you can configure custom authentication requirements including authorization keys, bearer tokens, or any other headers needed to access your model:
Navigate to Virtual Keys in your Portkey dashboard
Click “Add Key” and enable the “Local/Privately hosted provider” toggle
Configure your deployment:
Select the matching provider API specification (typically OpenAI)
Enter your model’s base URL in the Custom Host field
Add required authentication headers and their values
Click “Create” to generate your virtual key
You can now use this virtual key in your requests:
const portkey = new Portkey({ apiKey: "PORTKEY_API_KEY", virtualKey: "YOUR_SELF_HOSTED_LLM_VIRTUAL_KEY"async function main() { const response = await client.chat.completions.create({ messages: [{ role: "user", content: "Bob the builder.." }], model: "your-self-hosted-model-name", });console.log(response.choices[0].message.content);})
const portkey = new Portkey({ apiKey: "PORTKEY_API_KEY", virtualKey: "YOUR_SELF_HOSTED_LLM_VIRTUAL_KEY"async function main() { const response = await client.chat.completions.create({ messages: [{ role: "user", content: "Bob the builder.." }], model: "your-self-hosted-model-name", });console.log(response.choices[0].message.content);})
Then, just change the baseURL to the Gateway URL, customHost to the Ollam URL, and make requests.
If you are running Portkey inside a Docker container, but Ollama is running natively on your machine (i.e. not in Docker), you will have to refer to Ollama using http://host.docker.internal:11434 for the Gateway to be able to call it.
import Portkey from 'portkey-ai';const client = new Portkey({ baseUrl: 'http://localhost:8080/v1', apiKey: 'PORTKEY_API_KEY', virtualKey: 'PROVIDER_VIRTUAL_KEY', customHost: "http://host.docker.internal:11434" // Your Ollama Docker URL});async function main() { const response = await client.chat.completions.create({ messages: [{ role: "user", content: "Bob the builder.." }], model: "gpt-4o", }); console.log(response.choices[0].message.content);}main();
Tool calling feature lets models trigger external tools based on conversation context. You define available functions, the model chooses when to use them, and your application executes them and returns results.
Portkey supports Ollama Tool Calling and makes it interoperable across multiple providers. With Portkey Prompts, you can templatize various your prompts & tool schemas as well.