برنامه نویسی

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

مقدمه

به تازگی ، در حالی که در حال کاوش در 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 یا چیز دیگری کار می کند ، اما نرم افزار ساخته شده سفارشی برای یک نیاز خاص نیز امروزه گزینه ای است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا