Phase 3: AI integration with Ollama via Python sidecar

- sidecar: FastAPI app with /embed, /generate, /rerank hitting Ollama
- sidecar: Dockerfile, env var config (EMBED_MODEL, GEN_MODEL, RERANK_MODEL)
- aibridge: reqwest HTTP client with typed request/response structs
- aibridge: Axum proxy endpoints (POST /ai/embed, /ai/generate, /ai/rerank)
- gateway: wires AiClient with SIDECAR_URL env var
- e2e verified: nomic-embed-text returns 768d vectors, qwen2.5 generates text

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
root
2026-03-27 05:53:56 -05:00
co-authored by Claude Opus 4.6
parent 19bdfab227
commit 239e471223
21 changed files with 453 additions and 12 deletions
+5 -1
View File
@@ -22,12 +22,16 @@ async fn main() {
// Query engine — DataFusion over catalog-registered Parquet
let engine = queryd::context::QueryEngine::new(registry.clone(), store.clone());
// AI sidecar client
let sidecar_url = std::env::var("SIDECAR_URL").unwrap_or_else(|_| "http://localhost:3200".to_string());
let ai_client = aibridge::client::AiClient::new(&sidecar_url);
let app = Router::new()
.route("/health", get(health))
.nest("/storage", storaged::service::router(store))
.nest("/catalog", catalogd::service::router(registry))
.nest("/query", queryd::service::router(engine))
.nest("/ai", aibridge::service::router())
.nest("/ai", aibridge::service::router(ai_client))
.layer(TraceLayer::new_for_http());
let addr = "0.0.0.0:3100";