| 101 | |
| 102 | |
| 103 | class OllamaEmbedding: |
| 104 | name = "ollama" |
| 105 | |
| 106 | def __init__(self, model: str, dimensions: int, base_url: str = "http://localhost:11434", timeout: float = 60.0) -> None: |
| 107 | self.model = model |
| 108 | self.dimensions = dimensions |
| 109 | self._base_url = base_url.rstrip("/") |
| 110 | self._timeout = timeout |
| 111 | |
| 112 | def embed(self, text: str) -> List[float]: |
| 113 | response = requests.post( |
| 114 | f"{self._base_url}/api/embeddings", |
| 115 | json={"model": self.model, "prompt": text or " "}, |
| 116 | timeout=self._timeout, |
| 117 | ) |
| 118 | response.raise_for_status() |
| 119 | data = response.json() |
| 120 | vector = list(data.get("embedding") or []) |
| 121 | return _resize(vector, self.dimensions) |
| 122 | |
| 123 | def embed_batch(self, texts: Iterable[str]) -> List[List[float]]: |
| 124 | return [self.embed(text) for text in texts] |
| 125 | |
| 126 | |
| 127 | class HashEmbedding: |
no outgoing calls
no test coverage detected