import 'package:dio/dio.dart'; import 'package:trainhub_flutter/core/constants/ai_constants.dart'; /// Wraps the Nomic embedding server (llama.cpp). /// Returns a 768-dimensional float vector for any input text. class EmbeddingService { final _dio = Dio( BaseOptions( connectTimeout: AiConstants.embeddingConnectTimeout, receiveTimeout: AiConstants.embeddingReceiveTimeout, ), ); /// Returns the embedding vector for [text]. /// Throws a [DioException] if the Nomic server is unreachable. Future> embed(String text) async { final response = await _dio.post>( AiConstants.embeddingApiUrl, data: { 'input': text, 'model': AiConstants.nomicModelName, }, ); final raw = (response.data!['data'] as List)[0]['embedding'] as List; return raw.map((e) => (e as num).toDouble()).toList(); } }