1 पॉइंट द्वारा GN⁺ 2024-02-09 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Ollama ने OpenAI Chat Completions API के साथ शुरुआती संगतता बिल्ट-इन की है, जिससे OpenAI के लिए बने टूल और एप्लिकेशन को लोकल मॉडल्स से वैसे ही जोड़ा जा सकता है
  • इंस्टॉल करने के बाद llama2 या mistral जैसे मॉडल डाउनलोड करें, और OpenAI request format को बनाए रखते हुए सिर्फ host को http://localhost:11434 में बदलकर कॉल कर सकते हैं
  • OpenAI Python·JavaScript लाइब्रेरी में base_url/baseURL को http://localhost:11434/v1 पर सेट करें, और ज़रूरी लेकिन उपयोग न होने वाली api_key वैल्यू देकर इसे चलाया जा सकता है
  • Vercel AI SDK streaming chat app और Microsoft Autogen multi-agent framework को Ollama से जोड़ने के उदाहरण दिए गए हैं
  • मौजूदा समर्थन अभी शुरुआती experimental support चरण में है, और Embeddings API, function calling, vision support, Logprobs improvements आगे विचार के लिए हैं

OpenAI API फ़ॉर्मैट में Ollama कॉल करना

  • Ollama, OpenAI Chat Completions API के साथ संगत endpoint देता है, जिससे लोकल मॉडल्स को मौजूदा OpenAI-आधारित टूल्स में इस्तेमाल किया जा सकता है
  • शुरू करने के लिए Ollama इंस्टॉल करें और Llama 2 या Mistral जैसे मॉडल डाउनलोड करें
ollama pull llama2
  • cURL में OpenAI request format को वैसे ही रखें और host को http://localhost:11434 में बदल दें
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
  • OpenAI Python लाइब्रेरी में base_url को Ollama local endpoint पर सेट करें
    • api_key='ollama' ज़रूरी है, लेकिन इस्तेमाल नहीं होता
from openai import OpenAI
client = OpenAI(
base_url = 'http://localhost:11434/v1',
api_key='ollama',
)
response = client.chat.completions.create(
model="llama2",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The LA Dodgers won in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
print(response.choices[0].message.content)
  • OpenAI JavaScript लाइब्रेरी में baseURL को http://localhost:11434/v1 पर सेट करें
    • apiKey: 'ollama' भी ज़रूरी है, लेकिन इस्तेमाल नहीं होता
import OpenAI from 'openai'
const openai = new OpenAI({
baseURL: 'http://localhost:11434/v1',
apiKey: 'ollama',
})
const completion = await openai.chat.completions.create({
model: 'llama2',
messages: [{ role: 'user', content: 'Why is the sky blue?' }],
})
console.log(completion.choices[0].message.content)

उदाहरण इंटीग्रेशन और आगे की योजना

  • Vercel AI SDK बातचीत-आधारित streaming applications बनाने के लिए एक open source library है, और Next.js OpenAI example को Ollama के लिए बदलकर इस्तेमाल किया जा सकता है
npx create-next-app --example https://github.com/vercel/ai/tree/main/examples/next-openai example
cd example
  • app/api/chat/route.ts में OpenAI client configuration को Ollama local endpoint पर बदलें
const openai = new OpenAI({
baseURL: 'http://localhost:11434/v1',
apiKey: 'ollama',
});
  • chat completion request में llama2 मॉडल और stream: true का उपयोग करें
const response = await openai.chat.completions.create({
model: 'llama2',
stream: true,
messages,
});
  • ऐप को npm run dev से चलाएँ और ब्राउज़र में http://localhost:3000 खोलकर देखें
npm run dev
  • Autogen Microsoft का multi-agent applications के लिए open source framework है, और उदाहरण में Code Llama का उपयोग किया गया है
ollama pull codellama
pip install pyautogen
  • Autogen configuration में model: "codellama", base_url: "http://localhost:11434/v1";, api_key: "ollama" शामिल हैं
from autogen import AssistantAgent, UserProxyAgent
config_list = [
{
"model": "codellama",
"base_url": "http://localhost:11434/v1";,
"api_key": "ollama",
}
]
assistant = AssistantAgent("assistant", llm_config={"config_list": config_list})
user_proxy = UserProxyAgent("user_proxy", code_execution_config={"work_dir": "coding", "use_docker": False})
user_proxy.initiate_chat(assistant, message="Plot a chart of NVDA and TESLA stock price change YTD.")
  • उदाहरण को python example.py से चलाया जाता है, जिससे assistant चार्ट बनाने वाला कोड लिखता है
python example.py
  • OpenAI API support अभी शुरुआती experimental support चरण में है
    • आगे सुधार के लिए जिन बिंदुओं पर विचार होगा, वे हैं Embeddings API, function calling, vision support, और Logprobs
    • GitHub issues स्वीकार किए जा सकते हैं, और अधिक जानकारी OpenAI compatibility documentation में देखी जा सकती है

1 टिप्पणियां

 
GN⁺ 2024-02-09
Hacker News की राय
  • पिछले कुछ महीनों में local LLM hosting की usability जितनी तेज़ी से बेहतर हुई है, वह हैरान करने वाली है। कुछ घंटे पहले तक मैं https://github.com/Mozilla-Ocho/llamafile कितना आसान है, यह बताता फिर रहा था[1], और अब समझ नहीं आ रहा कि क्या इस्तेमाल करूँ
    [1] सचमुच कुछ घंटे पहले: https://euri.ca/blog/2024-llm-self-hosting-is-easy-now/

    • अब लगता है कि कंपनियों के लिए बुनियादी RAG-सपोर्टेड inference server को self-host करना और आसान हो गया है। Mac Mini या Mac Studio खरीदिए, ollama serve चलाइए, Docker में ollama web-ui उठाइए, फिर web UI से OllamaHub का coding assistant model जोड़कर documents upload कर दीजिए
      बिना code लिखे ऐसा self-hosted LLM मिल जाता है जो documents को context बनाकर जवाब देता है। हमारे यहाँ 64GB RAM वाले Mac Studio पर deepseek coder 33b काफ़ी तेज़ चलता है, और internal coding docs के आधार पर अच्छी-खासी useful suggestions देता है
    • मेरी व्यक्तिगत recommendation Ollama है। इसका model management Docker जैसा काफ़ी अच्छा बना हुआ है, और API support भी ज़्यादा व्यापक है
      एक ही model file के भीतर कई models को mix भी किया जा सकता है, जो इन दिनों एक experimental feature है। Ollama की model library पर निर्भर रहना ज़रूरी नहीं, अपने बनाए models भी इस्तेमाल कर सकते हैं। नए model support llama.cpp bindings के ज़रिए आते हैं
    • इस क्षेत्र की प्रगति की रफ़्तार वाकई चौंकाने वाली है। llamafile को चलाना आसान होना अच्छी बात थी, लेकिन feature-complete chat interface की कमी लगी, इसलिए उसके ऊपर https://recurse.chat/ बनाया
      अभी भी कुछ कामों के लिए GPT-4 चाहिए, लेकिन रोज़मर्रा के इस्तेमाल में इसने ChatGPT के काफ़ी हिस्से की जगह ले ली है, और खासकर यह अच्छा है कि ChatGPT chat history पूरी की पूरी import की जा सकती है। लोग local AI से क्या करना चाहते हैं, यह जानने की भी उत्सुकता है
    • MBP पर local development के लिए Ollama और Mixtral-7B इस्तेमाल कर रहा हूँ और बहुत संतुष्ट हूँ
    • मैं हमेशा सिर्फ़ llamacpp -m -p ही इस्तेमाल करता आया हूँ, और MacBook पर Mixtral 8x7b + CodeLlama 70b को रोज़मर्रा के tools की तरह अच्छे से चला रहा हूँ। जानना चाहता हूँ कि Llama.cpp के alternatives में कोई ऐसा killer feature है क्या, और इस बढ़िया नई wave को miss नहीं करना चाहता
  • मैं management professor हूँ, और छात्रों से Ollama और web-ui आज़माने के लिए Google Cloud पर चलाने की एक guide बनाई है[1]। spot instance इस्तेमाल करें तो इसे 18 सेंट प्रति घंटा में चलाया जा सकता है
    [1] https://docs.google.com/document/d/1OpZl4P3d0WKH9XtErUZib5_2...

    • इस setup में छात्र admin privileges हासिल करके instance hijack कर सकते हैं। यह बिल्कुल सुरक्षित नहीं है। मैं ज़ोर देकर सलाह दूँगा कि git-bash में SSH keys इस्तेमाल करवाइए। यह उन चीज़ों से तकनीकी रूप से ज़्यादा मुश्किल भी नहीं है जो आप पहले ही समझा चुके हैं
    • Google Colab पर भी काफ़ी कुछ मुफ़्त में चलाया जा सकता है। KoboldCPP के लिए website पर पहले से बना हुआ execution environment अच्छी तरह तैयार है, और दूसरे models भी लोड किए जा सकते हैं
  • मैं कुछ लोगों को जानता हूँ जिन्हें यह बात अंदर ही अंदर असहज करती है कि OpenAI API compatibility community standard बनती जा रही है। data.choices.text.response जैसी अटपटी चीज़ों या schema की बेवजह defensive nesting को छोड़ दें, तो मुझे खास शिकायत नहीं है
    जिज्ञासा है कि API के standard बनने की प्रक्रिया में कौन-कौन से pain points हैं, और क्या किसी ने कोई alternative standard आज़माया है जिस पर विचार किया जा सके

    • documentation चाहिए
      इसका community standard बनना ठीक है, लेकिन community जब OpenAI API compatible कहती है तो उसका मतलब क्या है, इसकी बहुत मज़बूत specification होनी चाहिए। खासकर अगर OpenAI आज सुबह कोई नया feature जारी कर दे, तब भी वह standard स्थिर रहना चाहिए
      जो चाहिए वह है errors की conditions तक शामिल करने वाली एक robust API spec, tests का ऐसा suite जिससे verify किया जा सके कि कोई नया implementation spec का पालन करता है या नहीं, और एक नाम। उदाहरण के लिए, अगर कोई software कहता है कि वह OpenAI-API-Spec v3 compatible है, तो मैं जानना चाहता हूँ कि उसका मतलब क्या है। अभी सिर्फ़ “OpenAI API compatible” कह देने से जानकारी अधूरी रहती है। API के किस हिस्से की बात हो रही है, और API के किस समय वाले version के हिसाब से compatibility है, यह पता नहीं चलता
    • सच कहूँ तो इसे जोड़ने से पहले हमने अंदर काफी चर्चा की थी। किसी और की API से बँधे रहना, और यह कि उसी API से तय हो कि हमारे project में कौन-सी features डालनी हैं या नहीं डालनी हैं, अजीब लगता है
      अगर Ollama में कोई शानदार, नया और अलग feature जोड़ें भी, तो OpenAI API में उसका counterpart न होने पर पता नहीं लोग उसका इस्तेमाल कर पाएँगे या नहीं
    • इसलिए इसे एक option के रूप में उपलब्ध होना अच्छा है। इससे friction कम होता है और OpenAI के moat पर निर्भरता भी घट सकती है
    • मेरे हिसाब से imperfect standard हमेशा no standard से बेहतर होता है
    • अपनी पसंद की language bindings के साथ llama.cpp functions को सीधे call करने वाला web server बनाना बहुत आसान है, इसलिए यह कोई बहुत बड़ी बात नहीं है। अगर ज़्यादा control चाहिए तो थोड़ा-सा अतिरिक्त काम कर लीजिए, ऐसी plug-and-play tools अनिवार्य नहीं हैं
  • हम काम पर Copilot से बेहतर version बना रहे हैं, और users को अपना LLM लाने का तरीका भी support करते हैं। हाल में हम OpenAI-compatible backend जोड़ रहे हैं; अगर आप बस OpenAI-compatible API endpoint और यह बता दें कि उसे किस model की तरह treat करना है, तो हम उस model की semantics के हिसाब से prompt, stop sequences, max tokens वगैरह format कर सकते हैं
    local development environment में test करने के लिए मुझे बिल्कुल इसी तरह की चीज़ चाहिए थी। अगर Ollama यह support करता है, तो जिन असंख्य LLMs को हमें support करना है, उनके लिए testing बहुत आसान हो जाएगी। OpenLLM जैसे कई tools को भी वही API implement करते देखकर लगता है कि सब लोग OpenAI API compatibility की तरफ़ converge कर रहे हैं

  • अभी AI startup बनाना वाकई बहुत अच्छा लग रहा है
    शुरुआत में token limit की वजह से काफी परेशानी हुई थी, लेकिन वह हल हो गई, consistent JSON output की समस्या भी हल हो गई, बड़े third-party models की rate limit और performance समस्याएँ भी सुलझ गईं, और छोटे व मध्यम जटिलता वाले कामों के लिए open source models को self-host करके लागत घटाने की जो इच्छा थी, वह भी पूरी हो गई
    हर बार जब कोई बड़ा LLM advancement आता है, तो लगता है कि प्रोडक्ट अपने-आप सस्ता, ज्यादा stable और ज्यादा scalable हो जाता है। बेशक, focus इस पर होना चाहिए कि moat बनाई जाए और उन सभी चीज़ों में differentiation किया जाए जो “AI” नहीं हैं

    • यह जानने की उत्सुकता है कि token limit के हल होने से आपका क्या मतलब है। क्या आपका मतलब यह है कि हाल की versions में context limit बहुत बढ़ गई है, लेकिन उसकी लागत भी बहुत बढ़ गई है?
  • अगर आप कहते हैं कि यह OpenAI-compatible है, तो लोग function calling या tool calling तक की अपेक्षा करने लगते हैं, इसलिए मुझे लगता है कि इससे थोड़ा भ्रम पैदा हो सकता है
    roles और content structure होना अच्छी बात है, लेकिन वह implementation तो मूल रूप से काफी सरल थी। Agent की तरफ जाते ही actual action execution की ज़रूरत पड़ती है। जिस agent hosting system पर मैंने काम शुरू किया था, उसमें मैंने scripting engine डाला था, और तब लगा कि security और permissions संभाल लेने के बाद क्या agent को बस code execute नहीं करने देना चाहिए? मैंने वास्तव में शुरुआत भी ऐसे ही की थी
    इसलिए मुझे यकीन नहीं है कि function/tool calling सच में अनिवार्य है। लेकिन अगर बहुत से लोग tool calling को standardize कर रहे हैं, तो arbitrary script execution होने पर भी शायद मुझे उसे अपने framework में जोड़ना पड़े

    • Docs में साफ़ बताया गया है कि कौन-सी features शामिल नहीं हैं: https://github.com/ollama/ollama/blob/main/docs/openai.md
      Function calling/tool choice को application level पर handle किया जाता है, और अभी इसका कोई standard format नहीं है। जो व्यापक रूप से इस्तेमाल हो रहे हैं, वे भी असल में inefficient custom system prompts के काफ़ी करीब हैं: https://github.com/langchain-ai/langchain/blob/master/libs/l...
    • Gemini Pro function/tool calling को support करता है, इसलिए वह आकर्षक लगा था, लेकिन व्यवहार में वह बहुत खराब काम करता है। Gemini Ultra मैंने अभी तक नहीं आज़माया है, और API के ज़रिए यह संभव भी है या नहीं, यह भी स्पष्ट नहीं है
      वैसे भी, शायद ऐसा support जारी न करना बेहतर है जो काम ही न करे
    • OpenAI API इस्तेमाल कर चुके लोगों के लिए यह स्वाभाविक रूप से समझ में आने वाला फैसला है
  • संदर्भ के लिए, Ollama का Linux install script आजकल tools में आम हो चुके “standard” तरीके से काम करता है:
    curl https://ollama.ai/install.sh | sh
    लेकिन आख़िरी बार जब मैंने देखा था, तब यह script sudo के साथ root privileges माँगती थी। अगर आप यह tool इस्तेमाल करना चाहते हैं, तो script डाउनलोड करके उसे देख लेना या अपनी ज़रूरत के अनुसार बदल लेना बेहतर होगा

    • manual install के निर्देश मौजूद हैं[0]। उन्हें देखने पर लगता है कि यह startup पर auto-run होने वाली SystemD service सेट करता है। अगर मकसद सिर्फ इसे आज़माना है, तो [1] डाउनलोड करके उसे executable बना दें (chmod +x ollama-linux-amd64) और फिर चला दें, यह ठीक चला। root privileges की ज़रूरत नहीं पड़ी
      [0] https://github.com/ollama/ollama/blob/main/docs/linux.md#man...
      [1] https://ollama.ai/download/ollama-linux-amd64
    • ollama binary /usr/bin में जाती है, ऐसा होना अनिवार्य नहीं है, लेकिन सुविधाजनक है। इसके अलावा और किस चीज़ के लिए root access चाहिए, यह मैंने नहीं देखा
    • आजकल के ज़माने में package manager होते हैं
  • compatibility layer को library के अंदर भी बनाया जा सकता है। उदाहरण के लिए, LangChain का llm() कई LLM backends के साथ काम कर सकता है। जानना चाहूँगा कि आप किसे prefer करते हैं

    • मैं library के अंदर वाली approach को prefer करता हूँ, लेकिन अभी उसमें काफ़ी समस्याएँ हैं। सबसे बड़ी समस्या यह है कि ecosystem इतनी तेज़ी से बदल रहा है कि library wrappers उसके साथ कदम नहीं मिला पा रहे
      दूसरी बात यह है कि अगर दुनिया LangChain जैसी खराब library पर standardize हो गई, तो non-uniform backends के maintenance cost की वजह से late entrants मर जाएँगे और सब लंबे समय तक फँसे रहेंगे। इसलिए अभी के लिए uniform API सुविधा के लिहाज़ से बेहतर विकल्प लगती है
    • ऐसा करने पर हर library को हर LLM को support करना होगा। मुझे यह वही समस्या लगती है जैसी object storage में हुई, जहाँ अंततः लगभग सभी ने S3-compatible API को support करना शुरू कर दिया
      perfect न होने पर भी standard API होना अच्छी बात है। साथ ही, Backblaze के B2 की तरह एक दूसरी API होना भी ठीक है, जो उसकी पूरी क्षमता इस्तेमाल करने देती है। कोई one-size-fits-all तरीका नहीं है, और अगर models की capabilities अलग-अलग हैं, तो मुझे लगता है कि दोनों विकल्प देने चाहिए
    • OpenAI के app जारी करने से पहले मैं अपने बनाए सिस्टम में LangChain इस्तेमाल कर रहा था। वह LLM से जुड़ा बहुत ही साधारण SMS interface था, और GPT-4 API से सीधे जूझने की तुलना में मुझे LangChain की abstraction के साथ काम करना बेहतर लगता था
  • मैं एक ऐसा project बना रहा हूँ जिसमें Python से open source models (HF, VLLM के ज़रिए) और commercial models (OpenAI, Google, Anthropic, Together) के बीच आसानी से switch किया जा सके: https://github.com/datadreamer-dev/DataDreamer
    अगर आप HTTP API के बिना सीधे Python में इसका इस्तेमाल करना चाहते हैं, तो यह थोड़ा आसान तरीका है

  • मैं सोच रहा हूँ कि Ollama का उपयोग-केंद्र क्या है। llama.cpp को सीधे क्यों न इस्तेमाल किया जाए?

    • यह LLMs के लिए Docker/package manager जैसा है। standardized और simple CLI के साथ models को आसानी से install, discover और update किया जा सकता है। auto-update भी बिना झंझट हो जाता है
    • मेरे मन में भी यही सवाल है। लगता है Ollama की काफी मार्केटिंग हुई है और प्रतिक्रिया भी अच्छी मिली है, लेकिन आज के समय में जब llama.cpp में built-in OpenAI-compatible server भी है, तब सीधे उसे इस्तेमाल करने की तुलना में Ollama का सटीक फायदा क्या है, यह जानने की उत्सुकता है