(vector: List[float], target_dim: int)
| 28 | |
| 29 | |
| 30 | def _resize(vector: List[float], target_dim: int) -> List[float]: |
| 31 | if not vector: |
| 32 | return [0.0] * target_dim |
| 33 | if len(vector) == target_dim: |
| 34 | return vector |
| 35 | if len(vector) < target_dim: |
| 36 | return vector + [0.0] * (target_dim - len(vector)) |
| 37 | |
| 38 | bucket = len(vector) / target_dim |
| 39 | out: List[float] = [] |
| 40 | for index in range(target_dim): |
| 41 | start = int(index * bucket) |
| 42 | end = int((index + 1) * bucket) or start + 1 |
| 43 | segment = vector[start:end] |
| 44 | out.append(sum(segment) / len(segment)) |
| 45 | norm = sum(value * value for value in out) ** 0.5 |
| 46 | if norm > 0: |
| 47 | out = [value / norm for value in out] |
| 48 | return out |
| 49 | |
| 50 | |
| 51 | class OpenAIEmbedding: |
no outgoing calls