کمی پروکسی زنگ زدگی برای اولاما

مقدمه
به تازگی ، در حالی که در حال کاوش در ZED IDE جدید هستم ، با یک نیاز به ادغام آن با یک مدل اولما با میزبان روبرو شدم. ZED اجازه می دهد تا ادغام های LLM سفارشی ، که عالی است ، اما من به یک سکسکه کوچک سوار شدم.
توصیف مشکل
این چالش به وجود آمد زیرا پیکربندی اولاما در ZED نیاز به اتصال دارد localhost
بشر با این حال ، من Ollama روی سرور خانگی با قابلیت GPU خود کار می کنم ، نه در دستگاه محلی من.
رویکرد راه حل
برای عبور از این شکاف ، من یک راه حل ساده را ابداع کردم: یک اسکریپت زنگ زدگی که به عنوان یک پروکسی عمل می کند. این اسکریپت پورت Ollama را از سرور من به دستگاه محلی منتقل می کند و به ZED اجازه می دهد یکپارچه وصل شود.
جزئیات اجرای
در اینجا یک پیاده روی کوتاه از فیلمنامه Rust آمده است:
use hyper::service::{make_service_fn, service_fn};
use hyper::{Body, Client, Request, Response, Server};
use std::convert::Infallible;
use std::net::SocketAddr;
async fn proxy(req: Request<Body>) -> Result<Response<Body>, hyper::Error> {
// Create a client to send the forwarded request.
let client = Client::new();
// Build a new URI using the hostname "ace" and the appropriate port.
// Here, we assume your Ollama server is also listening on port 11434.
// Adjust the port in the format string if it's different.
let uri_string = format!("http://ace:11434{}", req.uri());
let new_uri = uri_string.parse().expect("Failed to parse URI");
// Replace the URI in the incoming request with the new one.
// This effectively "redirects" the request to your remote server.
let mut proxied_request = req;
*proxied_request.uri_mut() = new_uri;
// Forward the request to the remote server.
client.request(proxied_request).await
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
// Bind to local port 11434.
let addr = SocketAddr::from(([127, 0, 0, 1], 11434));
let make_svc = make_service_fn(|_conn| async {
// For each connection, we create a service to handle the request.
Ok::<_, Infallible>(service_fn(proxy))
});
let server = Server::bind(&addr).serve(make_svc);
println!("Reverse proxy running on http://{}", addr);
// Run the server until it's stopped.
server.await?;
Ok(())
}
اسکریپت به طور موثر حمل و نقل بندر را بدون مجازات عملکرد قابل توجه اداره می کند و ادغام را صاف و قابل اعتماد می کند.
پایان
این اسکریپت سریع زنگ زدگی چالش ادغام را حل کرد و به من این امکان را می داد تا از ZED با مدل Ollama خود میزبان من بدون زحمت استفاده کنم. این شهادت است که چگونه اسکریپت های کوچک و هدفمند می توانند به طور موثری مشکلات خاص را بدون استفاده از تنظیمات ، حل کنند.
برای من این یک پیامدهای بسیار جالب از دنیای جدید ابزار هوش مصنوعی است. من فقط از چند مورد ساده استفاده کردم و طی چند دقیقه یک راه حل کار برای یک مشکل داشتم. من مطمئن هستم که می توانستم وقت بسازم caddy
یا nginx
یا چیز دیگری کار می کند ، اما نرم افزار ساخته شده سفارشی برای یک نیاز خاص نیز امروزه گزینه ای است.