How to Configure Custom OpenAI‑Compatible API Endpoints for Meetily Summaries
Meetily supports custom OpenAI‑compatible endpoints by storing the URL and optional API key in the frontend configuration service, enabling seamless integration with Ollama, Groq, or self‑hosted LLMs for generating meeting summaries.
Meetily, an open‑source meeting assistant from Zackriya‑Solutions, allows you to configure custom OpenAI‑compatible API endpoints for Meetily summaries. This flexibility enables you to process meeting transcripts using local models via Ollama, private cloud deployments, or third‑party providers that implement the OpenAI chat completions API contract. The configuration is stored locally and applied at runtime without requiring application restarts.
How Meetily's Summarization Architecture Works
Behind the scenes, Meetily generates meeting summaries by sending transcribed text to an LLM service that conforms to the OpenAI API contract. The system stores your endpoint and API key in the front‑end configuration service (frontend/src/services/configService.ts), persists them in IndexedDB via storageService, and retrieves them during summary generation through the useSummaryGeneration.ts hook.
When you trigger a summary, the hook constructs a standard OpenAI chat/completions payload and posts it to your configured endpoint. Because the request follows the standard OpenAI schema, any compatible server can be swapped in without modifying the application code.
Configuring a Custom Endpoint via the Settings UI
The simplest way to configure custom OpenAI‑compatible API endpoints for Meetily summaries is through the ModelConfig.tsx component:
- Open the Settings UI by navigating to sidebar → Model & API (handled by
frontend/src/components/Settings/ModelConfig.tsx). - Enter the full HTTP URL of your server's
/v1/chat/completionsroute (e.g.,http://localhost:11434/v1/chat/completionsfor Ollama). - Provide an API key only if your server enforces authentication; leave this field blank for open local servers.
- Save the configuration. The values are immediately written to IndexedDB and will be used for the next summary request.
Technical Implementation Details
Configuration Storage Layer
The ConfigService class in frontend/src/services/configService.ts handles persistence of your custom endpoint settings. The service exposes setSummarizerEndpoint(endpoint, apiKey?) to store values and getSummarizerConfig() to retrieve them:
// Programmatically configure a custom endpoint (e.g., for Ollama)
ConfigService.setSummarizerEndpoint(
'http://my-local-ollama:11434/v1/chat/completions',
'' // No API key required for local Ollama
);
// Retrieve stored configuration for debugging
const { endpoint, apiKey } = await ConfigService.getSummarizerConfig();
console.log('LLM endpoint:', endpoint, 'API key:', apiKey);
Summary Generation Hook
The useSummaryGeneration.ts hook located at frontend/src/hooks/meeting-details/useSummaryGeneration.ts reads the stored configuration and constructs the HTTP request. The implementation uses a standard fetch call with the OpenAI chat completions format:
const payload = {
model: selectedModel, // e.g., "llama3"
messages: [{ role: 'user', content: transcriptText }],
temperature: 0.7
};
const response = await fetch(endpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
...(apiKey && { Authorization: `Bearer ${apiKey}` })
},
body: JSON.stringify(payload)
});
const result = await response.json();
return result.choices[0].message.content; // Rendered as meeting summary
The hook conditionally adds the Authorization: Bearer <apiKey> header only when a key is present, supporting both authenticated and open endpoints.
Compatible LLM Providers
Because Meetily implements the standard OpenAI API contract, you can configure custom OpenAI‑compatible API endpoints for Meetily summaries using various backends:
- Ollama: Run models locally at
http://localhost:11434/v1/chat/completions - Groq: Use high‑speed inference with Groq's OpenAI‑compatible endpoint
- LiteLLM: Proxy multiple providers through a unified OpenAI‑compatible interface
- Self‑hosted: Deploy vLLM, Text Generation Inference (TGI), or custom inference servers
Summary
- Meetily stores custom endpoint configurations in
frontend/src/services/configService.tsand persists them in IndexedDB viastorageService.ts - The
setSummarizerEndpoint(endpoint, apiKey?)method saves your settings, whileuseSummaryGeneration.tsretrieves them at runtime - Requests follow the OpenAI chat/completions format, supporting any compatible server without code changes
- Authentication is optional; the system only sends the
Authorizationheader when an API key is provided
Frequently Asked Questions
What is the exact format for the endpoint URL?
You must provide the full HTTP URL including the path to the chat completions endpoint, typically ending in /v1/chat/completions. For example, use http://localhost:11434/v1/chat/completions for Ollama or https://api.groq.com/openai/v1/chat/completions for Groq.
Is authentication required for custom endpoints?
Authentication is only required if your specific server enforces it. The useSummaryGeneration.ts hook conditionally adds the Authorization: Bearer <apiKey> header based on whether you provided a key via ConfigService.setSummarizerEndpoint(). Local servers like Ollama typically require no authentication.
Where does Meetily store the API key and endpoint configuration?
Meetily persists these values in the browser's IndexedDB through the storageService.ts layer, accessed via methods in configService.ts. This client‑side storage ensures your configuration remains available across browser sessions without requiring backend changes.
Can I switch between different providers without restarting the application?
Yes. Because the configuration is read at runtime from IndexedDB for each summary generation request, changes made through the Settings UI or ConfigService.setSummarizerEndpoint() take effect immediately. The next meeting summary you generate will use the newly configured endpoint.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →