rag 0.1.0

A Rust library and CLI for Retrieval-Augmented Generation
Documentation
use rag::{
    mcp::McpServer,
};
use std::io::{self, BufRead, Write};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let api_key = std::env::var("OPENAI_API_KEY").ok();

    let mcp_server = if let Some(key) = api_key {
        McpServer::new_openai(key)
    } else {
        McpServer::new_ollama()
    };

    let stdin = io::stdin();
    let stdout = io::stdout();
    let mut stdout = stdout.lock();

    eprintln!("RAG MCP Server started. Waiting for requests...");

    for line in stdin.lock().lines() {
        let line = line?;
        if line.trim().is_empty() {
            continue;
        }

        let request: rag::mcp::McpRequest = match serde_json::from_str(&line) {
            Ok(req) => req,
            Err(e) => {
                eprintln!("Failed to parse request: {}", e);
                continue;
            }
        };

        eprintln!("Received request: {}", request.method);

        let response = mcp_server.handle_request(request).await;
        let response_json = serde_json::to_string(&response)?;

        writeln!(stdout, "{}", response_json)?;
        stdout.flush()?;
    }

    Ok(())
}