Skip to main content
Glama
smatiolids
by smatiolids
llm.py3.96 kB
import os import requests EMBEDDING_PROVIDER = { "text-embedding-3-small": "openai", "text-embedding-3-large": "openai", "text-embedding-ada-002": "openai", "all-minilm-l6-v2": "ibm-watsonx", "granite-embedding-107m-multilingual": "ibm-watsonx", "granite-embedding-278m-multilingual": "ibm-watsonx", "ms-marco-minilm-l-12-v2": "ibm-watsonx", "multilingual-e5-large": "ibm-watsonx", "slate-30m-english-rtrvr-v2": "ibm-watsonx", "slate-30m-english-rtrvr": "ibm-watsonx", "slate-125m-english-rtrvr-v2": "ibm-watsonx", "slate-125m-english-rtrvr": "ibm-watsonx" } def run_prompt(prompt: str) -> str: base_url = os.getenv("OPENAI_BASE_URL") or "https://api.openai.com/v1" api_key = os.getenv("OPENAI_API_KEY") if not base_url or not api_key: raise EnvironmentError("Missing OPENAI_BASE_URL or OPENAI_API_KEY environment variables.") url = f"{base_url.rstrip('/')}/chat/completions" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {api_key}", } payload = { "model": "gpt-4o-mini", "messages": [{"role": "user", "content": prompt}], } response = requests.post(url, headers=headers, json=payload) response.raise_for_status() return response.json() def generate_embedding(text: str, model: str = "text-embedding-3-small") -> list[float]: if EMBEDDING_PROVIDER[model] == "openai": return generate_embedding_openai(text, model) elif EMBEDDING_PROVIDER[model] == "ibm-watsonx": return generate_embedding_ibm_watsonx(text, model) else: raise ValueError(f"Unsupported embedding model: {model}") def generate_embedding_ibm_watsonx(text: str, model: str = "granite-embedding-278m-multilingual") -> list[float]: """ Generate an embedding using the IBM Watsonx REST API without using the SDK. Environment variables required: - IBM_WATSONX_BASE_URL: the base URL of the IBM Watsonx endpoint (e.g., https://{cluster_url}/ml/v1/text/embeddings?version=2023-10-25) - IBM_WATSONX_API_KEY: your API key - IBM_WATSONX_PROJECT_ID: your project ID """ base_url = os.getenv("IBM_WATSONX_BASE_URL") api_key = os.getenv("IBM_WATSONX_API_KEY") project_id = os.getenv("IBM_WATSONX_PROJECT_ID") if not base_url or not api_key or not project_id: raise EnvironmentError("Missing IBM_WATSONX_BASE_URL or IBM_WATSONX_API_KEY or IBM_WATSONX_PROJECT_ID environment variables.") url = f"{base_url.rstrip('/')}" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {api_key}", } payload = { "model_id": model, "inputs": [text], "project_id": os.getenv("IBM_WATSONX_PROJECT_ID") } response = requests.post(url, headers=headers, json=payload) response.raise_for_status() data = response.json() return data["results"][0]["embedding"] def generate_embedding_openai(text: str, model: str = "text-embedding-3-small") -> list[float]: """ Generate an embedding using the OpenAI REST API without using the SDK. Environment variables required: - OPENAI_API_KEY: your API key - OPENAI_BASE_URL: the base URL of the OpenAI endpoint (e.g., https://api.openai.com/v1) """ base_url = os.getenv("OPENAI_BASE_URL") or "https://api.openai.com/v1" api_key = os.getenv("OPENAI_API_KEY") if not base_url or not api_key: raise EnvironmentError("Missing OPENAI_BASE_URL or OPENAI_API_KEY environment variables.") url = f"{base_url.rstrip('/')}/embeddings" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {api_key}", } payload = { "model": model, "input": text, } response = requests.post(url, headers=headers, json=payload) response.raise_for_status() data = response.json() return data["data"][0]["embedding"]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/smatiolids/astra-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server