[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"portal-settings:stajic:sr":3,"public-menus:all":38,"post:ollama-is-not-the-product-building-production-ready-open-llm-applications:sr":221,"related:post:ollama-is-not-the-product-building-production-ready-open-llm-applications:sr:1":1199},{"statusCode":4,"data":5,"message":37},200,{"tenantId":6,"lang":7,"defaultLang":8,"siteUrl":9,"contactEmail":10,"brandName":11,"logoUrl":12,"siteName":11,"siteDescription":13,"ogImage":10,"robotsIndex":14,"socialLinks":10,"reservedSlugs":10,"seoPolicy":15},"stajic","sr","de","https:\u002F\u002Fstajic.de",null,"Stajic Platform","\u002FLogo_Planet.svg","Stajic Portal",true,{"branding":16,"relatedContent":17,"crossDomainLinks":18},{"logoUrl":12},{"enabled":14},[19,22,25,28,31,34],{"url":20,"label":21,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Ffigure.rocks","figure.rocks",{"url":23,"label":24,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Floving.rocks","loving.rocks",{"url":26,"label":27,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.com","bazify.com",{"url":29,"label":30,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.de","bazify.de",{"url":32,"label":33,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.at","bazify.at",{"url":35,"label":36,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.ba","bazify.ba","Portal settings resolved",[39,45],{"id":40,"name":41,"location":42,"isActive":14,"isDefault":43,"items":44},1,"main-navigation","header",false,[],{"id":46,"name":47,"location":48,"isActive":14,"isDefault":14,"items":49},4,"main-menu","sidebar",[50,66,79,93,103,118,133],{"id":51,"title":52,"url":60,"target":61,"icon":62,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":64,"portfolioId":10,"children":65},"item-18",{"de":53,"en":54,"es":55,"fr":56,"it":54,"ru":57,"sr":58,"zh":59},"Startseite","Home","Inicio","Accueil","Главная","Почетна","首页","\u002Ffull-stack-web-developer-munich-performance-seo-and-maintainable-builds","_self","i-lucide-home","page",111,[],{"id":67,"title":68,"url":75,"target":61,"icon":76,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":77,"portfolioId":10,"children":78},"item-22",{"de":69,"en":69,"es":70,"fr":69,"it":71,"ru":72,"sr":73,"zh":74},"Vision","Visión","Visione","Видение","Визија","想象","\u002Fueber-uns-webdesign-muenchen-webaplikation","i-lucide-eye",113,[],{"id":80,"title":81,"url":89,"target":61,"icon":90,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":91,"portfolioId":10,"children":92},"item-19",{"de":82,"en":83,"es":84,"fr":83,"it":85,"ru":86,"sr":87,"zh":88},"Leistungen","Services","Servicios","Servizi","Услуги","Услуге","服务","\u002Fservices-dienstleistungen-muenchen","i-lucide-wrench",116,[],{"id":94,"title":95,"url":99,"target":61,"icon":100,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":101,"portfolioId":10,"children":102},"item-23",{"de":96,"en":96,"es":96,"fr":96,"it":96,"ru":97,"sr":97,"zh":98},"Blog","Блог","博客","\u002Fblog","i-lucide-book-open",112,[],{"id":104,"title":105,"url":114,"target":61,"icon":115,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":116,"portfolioId":10,"children":117},"item-32",{"de":106,"en":107,"es":108,"fr":109,"it":110,"ru":111,"sr":112,"zh":113},"Neue Technologien","New Technologies","Nuevas tecnologías","Nouvelles technologies","Nuove tecnologie","Новые технологии","Нове технологије","新技术！","\u002Fneue-webtechnologien","i-lucide-sparkles",122,[],{"id":119,"title":120,"url":129,"target":61,"icon":130,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":131,"portfolioId":10,"children":132},"item-20",{"de":121,"en":122,"es":123,"fr":124,"it":125,"ru":126,"sr":127,"zh":128},"Kontakt","Contact us!","Contacto","Contact","Contatto","Контакт","Контактирајте нас","联系我们！","\u002Fcontact","i-lucide-mail",115,[],{"id":134,"title":135,"url":144,"target":61,"icon":145,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":146,"portfolioId":10,"children":147},"item-21",{"de":136,"en":137,"es":138,"fr":139,"it":140,"ru":141,"sr":142,"zh":143},"Unsere Arbeit","Our Work","Nuestro trabajo","Nos réalisations","I nostri lavori","Наши работы","Наши радови","文件夹","\u002Fportfolio","i-lucide-briefcase",114,[148,161,175,191,206],{"id":149,"title":150,"url":144,"target":61,"icon":159,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":146,"portfolioId":10,"children":160},"item-24",{"de":151,"en":152,"es":153,"fr":154,"it":155,"ru":156,"sr":157,"zh":158},"Alle Projekte","All Projects","Todos los proyectos","Tous les projets","Tutti i progetti","Все проекты","Сви пројекти","所有项目","i-lucide-grid-3x3",[],{"id":162,"title":163,"url":171,"target":61,"icon":172,"isActive":14,"type":173,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":10,"children":174},"item-29",{"de":164,"en":165,"es":166,"fr":167,"it":168,"ru":169,"sr":170,"zh":143},"Local Roots, Global Reach","Local Roots - Global Reach","Empresa local ","Entreprise locale","Azienda locale","Местная компания","Локално предузеће глобално тржиште","\u002Fportfolio\u002Flocal-roots-global-reach-communication-media-systems-for-modern-business","i-lucide-globe-2","custom",[],{"id":176,"title":177,"url":186,"target":61,"icon":187,"isActive":14,"type":188,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":189,"children":190},"menu-2916d060-8681-482a-af9a-c107a8bc30d8",{"de":178,"en":179,"es":180,"fr":181,"it":182,"ru":183,"sr":184,"zh":185},"Von Rohdaten zu verifizierbarem KI-Kontext: Eine praktische Architektur für agentenbereite Informationen","From Raw Data to Verifiable AI Context:","De datos sin procesar a contexto de IA verificable: una arquitectura práctica para información lista para agentes","Des données brutes au contexte d'IA vérifiable : une architecture pratique pour des informations prêtes pour les agents","Dai dati grezzi a un contesto IA verificabile: Un'architettura pratica per informazioni pronte per gli agenti","От необработанных данных к верифицируемому контексту ИИ: практическая архитектура информации, готовой для агентов","Od sirovih podataka do proverljivog AI konteksta: Praktična arhitektura za informacije spremne za agente","从原始数据到可验证的 AI 上下文：面向智能体就绪信息的实用架构","\u002Fportfolio\u002Ffrom-raw-data-to-verifiable-ai-context-a-practical-architecture-for-agent-ready-information","i-lucide-database","portfolio",22,[],{"id":192,"title":193,"url":202,"target":61,"icon":203,"isActive":14,"type":188,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":204,"children":205},"menu-e2061cd7-ff53-49d5-a0e8-3d49090577c0",{"de":194,"en":195,"es":196,"fr":197,"it":198,"ru":199,"sr":200,"zh":201},"Präsenzplattformen — Unternehmenskommunikation","Presence Platforms — Enterprise Communication","Plataformas de presencia — Comunicación empresarial","Plateformes de présence — Communication d'entreprise","Presence Platforms — Comunicazione aziendale","Платформы присутствия — Корпоративные коммуникации","Presence platforme — Poslovna komunikacija","Presence 平台 — 企业通信","\u002Fportfolio\u002Fpresence-platforms-enterprise-communication-that-wins-without-competing","i-lucide-badge-percent",21,[],{"id":207,"title":208,"url":217,"target":61,"icon":218,"isActive":14,"type":188,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":219,"children":220},"menu-a781582e-e90d-418e-b8c9-b070bc37c37e",{"de":209,"en":210,"es":211,"fr":212,"it":213,"ru":214,"sr":215,"zh":216},"Maximierung des POS-ROI durch Konsistenz","Maximizing POS ROI Through Consistent","Maximizar el ROI del POS a través de constante","Maximiser le ROI du PDV grâce à la cohérence","Massimizzare il ROI del POS attraverso costante","Максимизация ROI POS за счет последовательного","Maksimizacija POS ROI-ja kroz dosledno","通过持续最大化 POS 投资回报率","\u002Fportfolio\u002Ffrom-vision-to-value-maximizing-pos-roi-through-consistent-ci-creation-and-strategic-branding","i-lucide-briefcase-business",11,[],{"statusCode":4,"data":222,"message":1198},{"id":223,"title":224,"slug":225,"content":226,"contentJson":227,"excerpt":626,"featuredImage":627,"featuredImageAlt":628,"featuredImageCaption":10,"featuredImageTitle":10,"featuredImageCopyright":10,"featuredImageAuthor":10,"featuredImageSourceUrl":10,"featuredImageLicense":10,"featuredImageIsAiGenerated":43,"status":629,"publishedAt":630,"createdAt":631,"updatedAt":632,"seoLocalePaths":633,"categories":642,"author":663,"translations":668},"459","Ollama nije proizvod: Izgradnja aplikacija spremnih za produkciju sa otvorenim LLM-ovima","ollama-is-not-the-product-building-production-ready-open-llm-applications","\u003Ch1>Ollama nije proizvod: Izgradnja produkcijski spremnih Open-LLM aplikacija\u003C\u002Fh1>\n\u003Cp>Alati poput \u003Cb>Ollame\u003C\u002Fb> su lokalno eksperimentisanje sa LLM-ovima učinili gotovo bez trenja. Instalirajte runtime, povucite model, pošaljite prompt, i lokalni asistent odgovara za nekoliko sekundi. To je korisno. To je takođe i najlakši deo putovanja.\u003C\u002Fp>\n\u003Cp>Terminal demo nije aplikacija. Lokalni model nije proizvod. Produktivna Open-LLM aplikacija zahteva kontrolisan unos podataka, pretragu, dozvole, evaluaciju, logovanje, apstrakciju provajdera, disciplinu u primeni i korisnički tok koji rešava stvarni poslovni problem.\u003C\u002Fp>\n\u003Cp>Osnovna teza je jednostavna: \u003Cb>Ollama je runtime, a ne proizvod\u003C\u002Fb>. Proizvod živi u aplikacionom sloju oko modela. Taj sloj odlučuje koji su dokumenti vidljivi, koji delovi se pretražuju, koji promptovi se koriste, kako se odgovori evaluiraju, kako se greške loguju i da li se sistem može verovati u svakodnevnom radu.\u003C\u002Fp>\n\u003Cp>Ovo je mesto gde lokalna AI postaje interesantna za timove koji grade privatne asistente, interne alate za znanje, LLM-om omogućene SaaS funkcije ili kopilote za poslovne tokove. Model može da radi lokalno, ali privatnost, pouzdanost i poslovna vrednost postoje samo ako je ceo sistem pravilno projektovan.\u003C\u002Fp>\n\u003Ch2>Ollama je runtime, a ne proizvod\u003C\u002Fh2>\n\u003Cp>Ollama je odlična za pokretanje i serviranje otvorenih modela lokalno. Posebno je jaka za istraživanje, radne tokove programera, PoC-ove i timove koji žele da testiraju ponašanje modela bez trenutnog obavezivanja na cloud provajdera. Izlaže lokalnu interakciju sa modelom putem API-ja i slojeva kompatibilnosti koji olakšavaju povezivanje postojećih alata u OpenAI stilu.\u003C\u002Fp>\n\u003Cp>To ne znači da Ollama rešava problem aplikacije. Ona automatski ne zna koje dokumente kompanije korisnik može da čita. Ne stvara izolaciju zakupaca, verzionisanje dokumenata, revizijske tragove, atribuciju izvora, skupove podataka za evaluaciju ili poslovno specifične UI tokove. Te odgovornosti ostaju na arhitekturi aplikacije.\u003C\u002Fp>\n\u003Cul>\u003Cli>\u003Cb>Ollama pomaže sa:\u003C\u002Fb> lokalnim izvršavanjem modela, brzim eksperimentisanjem, API-baziranim pristupom modelu, PoC-ovima bez interneta i produktivnošću programera.\u003C\u002Fli>\u003Cli>\u003Cb>Ollama sama ne rešava:\u003C\u002Fb> kontrolu pristupa, kvalitet RAG-a, životni ciklus dokumenata, granice zakupaca, evaluaciju, revizijsko logovanje, praćenje, ponašanje u slučaju pada ili dizajn poslovnih tokova.\u003C\u002Fli>\u003Cli>\u003Cb>Arhitektonska greška:\u003C\u002Fb> tretiranje lokalnog zaključivanja kao da je već siguran AI proizvod.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cblockquote class=\"border-l-4 border-gray-300 pl-4 italic\">Model je najlakši deo. Aplikacioni sloj je mesto gde živi vrednost proizvoda.\u003Ccite class=\"block mt-2 text-sm\">— Arhitektonski princip\u003C\u002Fcite>\u003C\u002Fblockquote>\n\u003Ch2>Demo, PoC i produkcija su različite faze\u003C\u002Fh2>\n\u003Cp>Mnoge Open-LLM inicijative propadaju jer timovi brkaju radni demo sa produkcijskom sposobnošću. Razlika nije kozmetička. Svaki nivo zrelosti ima drugačiji cilj, drugačiji profil rizika i drugačiji inženjerski zahtev.\u003C\u002Fp>\n\u003Ctable class=\"w-full border-collapse\">\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Faza\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Šta dokazuje\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tipično podešavanje\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Šta još nedostaje\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Demo\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Model može da odgovori na prompt lokalno.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ollama na laptopu, jedan model, jedan prompt, bez stvarne kontrole podataka.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Dozvole, pretraga, logovi, evaluacija, primena, praćenje, korisnički tok.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">PoC\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Mali kontrolisani sistem može da odgovara na pitanja o odabranim dokumentima ili tokovima.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Osnovni web UI, skripta za unos, vektorska pretraga, ograničeni korisnici, ograničen obim dokumenata.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Skaliranje, upravljanje, test skupovi podataka, strategija za pad, revizijska sposobnost, model podrške.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Produkcija\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Više korisnika može bezbedno i ponovljivo da koristi sistem unutar stvarnog rada.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Autentifikovana aplikacija, izolacija zakupaca, RAG cevovod, opservabilnost, apstrakcija provajdera, rezervne kopije, proces izdavanja.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Kontinuirano poboljšanje, proširenje evaluacije, operativna zrelost.\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftable>\n\u003Cp>PoC može biti namerno mali. Produkcija ne može biti namerno slepa. Kada stvarni korisnici, privatni podaci, poslovne odluke i očekivanja usaglašenosti uđu u sistem, arhitektura mora postati eksplicitna.\u003C\u002Fp>\n\u003Ch2>Gde se RAG uklapa\u003C\u002Fh2>\n\u003Cp>\u003Cb>Retrieval-Augmented Generation\u003C\u002Fb> je najčešći most između jezičkog modela i privatnog poslovnog znanja. Model magično ne zna interne dokumente, ugovore, tikete, specifikacije proizvoda ili runbook-ove. Aplikacija mora da preuzme relevantan kontekst pre nego što zatraži od modela da odgovori.\u003C\u002Fp>\n\u003Cp>Praktičan RAG tok izgleda ovako:\u003C\u002Fp>\n\u003Col>\u003Cli>Dokumenti se otpremaju ili sinhronizuju iz kontrolisanih izvora.\u003C\u002Fli>\u003Cli>Tekst se izdvaja, čisti i deli na delove.\u003C\u002Fli>\u003Cli>Delovi dobijaju metapodatke kao što su zakupac, vlasnik, verzija dokumenta, URL izvora, opseg pristupa i vremenska oznaka.\u003C\u002Fli>\u003Cli>Za svaki deo se generišu embedding-ovi.\u003C\u002Fli>\u003Cli>Vektori se skladište u pgvector, Qdrant ili drugom sloju za pretragu.\u003C\u002Fli>\u003Cli>U trenutku upita, aplikacija proverava dozvole pre pretrage.\u003C\u002Fli>\u003Cli>Relevantni delovi se pretražuju pomoću pretrage sličnosti i filtera metapodataka.\u003C\u002Fli>\u003Cli>Builder prompta ubacuje odabrani kontekst u zahtev modelu.\u003C\u002Fli>\u003Cli>Odgovor se generiše sa citatima, granicama pouzdanosti i padom bez odgovora kada je pretraga slaba.\u003C\u002Fli>\u003C\u002Fol>\n\u003Cp>RAG smanjuje halucinacije, ali ih ne eliminiše. Loša strategija deljenja, slabi metapodaci, nedostajući filteri dozvola, niskokvalitetni embedding ili preširoko pretraživanje i dalje mogu proizvesti uverljive, ali netačne odgovore. Ozbiljni RAG sistemi zahtevaju pragove, citate, evidenciju pretraživanja i evaluaciju.\u003C\u002Fp>\n\u003Ch2>Praktična lokalna Open-LLM arhitektura\u003C\u002Fh2>\n\u003Cp>Realističan proizvodni put ne zahteva egzotičnu infrastrukturu. Za mnoge timove, snažna prva arhitektura može koristiti normalan web stack: Nuxt za frontend, Nitro ili Node API, PostgreSQL kao sistem zapisa, pgvector za pretraživanje, Ollama kao lokalno izvršno okruženje, Prisma za pristup podacima i pozadinske radnike za unos i embedding.\u003C\u002Fp>\n\u003Cpre class=\"code-block\">\u003Ccode>Korisničko pitanje | v\nFrontend UI | v\nAPI \u002F Backend | +--&gt; Autentifikacija +--&gt; Provera dozvola zakupca i uloge | v\nSloj pretraživanja | +--&gt; PostgreSQL metapodaci +--&gt; pgvector ili Qdrant vektorsko pretraživanje +--&gt; prag sličnosti | v\nGraditelj upita | +--&gt; sistemski upit +--&gt; pronađeni delovi +--&gt; reference izvora +--&gt; pravila bez odgovora | v\nApstrakcija LLM provajdera | +--&gt; Ollama \u002F lokalni model +--&gt; cloud model fallback +--&gt; buduće samostalno izvršno okruženje | v\nOdgovor sa izvorima | v\nEvidencije, tragovi, metrike, skup podataka za evaluaciju\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Ova arhitektura omogućava zamenu modela. Ollama može biti prvo izvršno okruženje, ali sistem ne treba biti zaključan za jedan inferentni mehanizam. Čista arhitektura razdvaja korisnički tok, pretraživanje, konstrukciju upita, model provajdera i mogućnost posmatranja.\u003C\u002Fp>\n\u003Cul>\u003Cli>\u003Cb>Frontend:\u003C\u002Fb> Nuxt ili drugi web UI za autentifikovane korisničke tokove.\u003C\u002Fli>\u003Cli>\u003Cb>Backend\u002FAPI:\u003C\u002Fb> Nitro, Node.js ili FastAPI za orkestraciju, dozvole i rutiranje provajdera.\u003C\u002Fli>\u003Cli>\u003Cb>Baza podataka:\u003C\u002Fb> PostgreSQL za dokumente, korisnike, zakupce, uloge, upite, evidencije i metapodatke.\u003C\u002Fli>\u003Cli>\u003Cb>Vektorsko pretraživanje:\u003C\u002Fb> pgvector za jednostavno integrisano pretraživanje ili Qdrant kada vektorsko pretraživanje postane namenska usluga.\u003C\u002Fli>\u003Cli>\u003Cb>Izvršno okruženje modela:\u003C\u002Fb> Ollama za lokalno izvršavanje, llama.cpp server za lagano serviranje ili vLLM za GPU serviranje veće propusnosti.\u003C\u002Fli>\u003Cli>\u003Cb>Skladište:\u003C\u002Fb> lokalni sistem datoteka ili S3-kompatibilno objektno skladište za otpremljene datoteke i izdvojene artefakte.\u003C\u002Fli>\u003Cli>\u003Cb>Radnici:\u003C\u002Fb> pozadinski unos, deljenje, embedding, ponovno indeksiranje i obrada verzija dokumenata.\u003C\u002Fli>\u003Cli>\u003Cb>Mogućnost posmatranja:\u003C\u002Fb> evidencije, metrike, tragovi upita, tragovi pretraživanja, praćenje kašnjenja i rezultati evaluacije.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2>Kontrolna lista za proizvodnu spremnost\u003C\u002Fh2>\n\u003Cp>Sledeća kontrolna lista je razlika između demonstracije lokalnog modela i upotrebljive Open-LLM aplikacije:\u003C\u002Fp>\n\u003Cul>\u003Cli>Svaki dokument i deo ima tenant_id.\u003C\u002Fli>\u003Cli>Pretraživanje je blokirano dok se ne provere dozvole korisnika i uloge.\u003C\u002Fli>\u003Cli>Dokumenti uključuju metapodatke, izvor, vlasnika, verziju, stanje životnog ciklusa i politiku čuvanja.\u003C\u002Fli>\u003Cli>Strategija deljenja je dokumentovana i testirana na stvarnim dokumentima.\u003C\u002Fli>\u003Cli>Izbor embedding modela je eksplicitan i verzionisan.\u003C\u002Fli>\u003Cli>Konfiguracija vektorskog indeksa je ponovljiva.\u003C\u002Fli>\u003Cli>Prag sličnosti sprečava slepo korišćenje slabog konteksta.\u003C\u002Fli>\u003Cli>Odgovori uključuju citate izvora ili reference izvora gde je moguće.\u003C\u002Fli>\u003Cli>Koristi se padajući mehanizam bez odgovora kada je poverenje u pretraživanje prenisko.\u003C\u002Fli>\u003Cli>Šabloni upita su verzionisani i kontrolisani izdanjem.\u003C\u002Fli>\u003Cli>Apstrakcija LLM provajdera je izgrađena od početka.\u003C\u002Fli>\u003Cli>Struktuirani izlaz se validira pre korišćenja u nizvodnim procesima.\u003C\u002Fli>\u003Cli>Skup podataka za evaluaciju sadrži stvarna pitanja, očekivane izvore i neprihvatljive odgovore.\u003C\u002Fli>\u003Cli>Evidencije pretraživanja pokazuju koji su delovi korišćeni za svaki odgovor.\u003C\u002Fli>\u003Cli>Prate se kašnjenje, korišćenje tokena, opterećenje GPU\u002FCPU i stope grešaka.\u003C\u002Fli>\u003Cli>Pravila privatnosti i čuvanja pokrivaju otpremanja, izdvojeni tekst, delove, embedding, upite, odgovore i evidencije.\u003C\u002Fli>\u003Cli>Putevi za implementaciju, rezervnu kopiju, vraćanje, povlačenje i incidente su dokumentovani.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cp>Ovo se direktno povezuje sa \u003Ca href=\"\u002Fsr\u002Fenterprise\">Enterprise Delivery OS\u003C\u002Fa>: korisna AI nije samo odluka o modelu. To je disciplina isporuke, dokazi, kontrole, metrike i operativno vlasništvo.\u003C\u002Fp>\n\u003Ch2>Apstrakcija provajdera: Ne venčavajte se sa jednim modelom\u003C\u002Fh2>\n\u003Cp>Lokalni modeli su vredni za slučajeve osetljive na privatnost, vanmrežne scenarije, kontrolu troškova i interno eksperimentisanje. Cloud modeli i dalje mogu biti jači za teško rezonovanje, kodiranje, višejezičnu tačnost ili multimodalni rad. Proizvodna aplikacija ne treba tretirati nijedan model kao trajnu infrastrukturu.\u003C\u002Fp>\n\u003Cp>Apstrakcija provajdera omogućava istom aplikacionom toku da pozove Ollama, OpenAI, Gemini, Anthropic, Mistral, vLLM ili drugu samostalno hostovanu tačku bez prepisivanja proizvoda. Aplikacija odlučuje o provajderu na osnovu slučaja korišćenja, osetljivosti podataka, kašnjenja, troškova i zahteva za kvalitetom.\u003C\u002Fp>\n\u003Cpre class=\"code-block\">\u003Ccode>type LlmProvider = &quot;ollama&quot; | &quot;openai&quot; | &quot;gemini&quot; | &quot;anthropic&quot; | &quot;vllm&quot;; type ChatInput = { provider: LlmProvider; model: string; tenantId: string; userId: string; question: string; context: Array&lt;{ chunkId: string; sourceTitle: string; text: string; }&gt;;\n}; async function chat(input: ChatInput) { await assertUserCanAccessContext(input.userId, input.context); const messages = buildRagMessages({ question: input.question, context: input.context, rules: [ &quot;Odgovaraj samo iz datog konteksta kada je moguće.&quot;, &quot;Citiraj naslove izvora.&quot;, &quot;Reci kada je kontekst nedovoljan.&quot; ] }); return llm.chat({ provider: input.provider, model: input.model, messages, trace: { tenantId: input.tenantId, userId: input.userId, promptVersion: &quot;rag-v3.2&quot; } });\n}\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Ključna ideja nije TypeScript sintaksa. Ključna ideja je granica. Aplikacija poseduje dozvole, pretraživanje, pravila upita, praćenje i evaluaciju. Provajder samo proizvodi izlaz modela.\u003C\u002Fp>\n\u003Ch2>pgvector vs Qdrant\u003C\u002Fh2>\n\u003Cp>Za mnoge Open-LLM aplikacije, odluka o vektorskom skladištu je jednostavna na početku: ako je PostgreSQL već vaš sistem zapisa, \u003Cb>pgvector\u003C\u002Fb> je snažna polazna tačka. Drži metapodatke, dozvole, evidencije dokumenata i vektore blizu zajedno. To smanjuje operativnu složenost.\u003C\u002Fp>\n\u003Cp>\u003Cb>Qdrant\u003C\u002Fb> postaje privlačniji kada vektorsko pretraživanje treba da postane namenska usluga: veći obim pretraživanja, napredno filtriranje, specijalizovano indeksiranje, hibridni obrasci pretraživanja ili nezavisno skaliranje infrastrukture pretraživanja.\u003C\u002Fp>\n\u003Ctable class=\"w-full border-collapse\">\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Opcija\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Najbolje odgovara\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Prednosti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Kompromisi\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">pgvector\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">PoC, rana produkcija, sistemi već izgrađeni na PostgreSQL-u.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Jedna baza podataka, SQL spajanja, ACID ponašanje, jednostavnije operacije, metapodaci blizu vektora.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Manje specijalizovan od namenske vektorske baze podataka pri velikom obimu pretraživanja.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Qdrant\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Namenske usluge semantičkog pretraživanja, veća vektorska opterećenja, napredno filtriranje i obrasci pretraživanja.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Namenski izgrađeno vektorsko pretraživanje, snažan model filtriranja, nezavisno skaliranje, API-ji fokusirani na pretraživanje.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Dodaje još jednu infrastrukturnu komponentu i operativnu površinu.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Počnite jednostavno\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Većina korporativnih timova koji počinju sa privatnim RAG aplikacijama.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Manji arhitektonski rizik, brža isporuka, lakši put za reviziju.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Može zahtevati migraciju kasnije ako pretraživanje postane centralno i velikog obima.\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftable>\n\u003Cp>Praktično pravilo: počnite sa pgvector kada PostgreSQL već poseduje vaše poslovne podatke i obim pretraživanja je umeren. Pređite na Qdrant kada vektorsko pretraživanje postane samostalna proizvodna mogućnost.\u003C\u002Fp>\n\u003Ch2>Provera sigurnosti i privatnosti\u003C\u002Fh2>\n\u003Cp>Lokalno zaključivanje automatski ne znači sigurnu AI. To samo znači da se izvršavanje modela može obaviti lokalno. Celokupni put podataka i dalje je važan: otpremljene datoteke, izvučeni tekst, delovi, vektori, evidencije, upiti, odgovori, rezervne kopije, pristup programera, administratorski alati i izvoz analitike.\u003C\u002Fp>\n\u003Cp>Vektori takođe zaslužuju pažnju. Oni nisu originalni dokument, ali i dalje predstavljaju informacije izvedene iz osetljivog sadržaja. Tretirajte ih kao deo zaštićenog puta podataka, posebno kada su povezani sa metapodacima, izvornim zapisima, korisničkim upitima ili identifikatorima zakupaca.\u003C\u002Fp>\n\u003Cul>\u003Cli>Ne indeksirajte dokumente pre nego što su pravila pristupa poznata.\u003C\u002Fli>\u003Cli>Ne preuzimajte delove bez filtera zakupca i uloge.\u003C\u002Fli>\u003Cli>Ne evidentirajte potpune upite i odgovore bez pravila o čuvanju.\u003C\u002Fli>\u003Cli>Ne šaljite osetljiv kontekst cloud modelu osim ako politika to ne dozvoljava.\u003C\u002Fli>\u003Cli>Ne pretpostavljajte da lokalno automatski znači usklađeno sa GDPR-om; usklađenost zavisi od celokupnog dizajna obrade.\u003C\u002Fli>\u003Cli>Ne dozvolite da kopije za evaluaciju i otklanjanje grešaka postanu nekontrolisani skupovi podataka u senci.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cp>Ovo je mesto gde \u003Ca href=\"\u002Fsr\u002Fblog\u002Fenterprise-grade-multi-tenant-architecture-for-an-international-platform\">multi-instanca SaaS arhitektura\u003C\u002Fa> postaje važna. Ako su zakupci, uloge, vlasništvo nad podacima i operativne granice slabe, dodavanje lokalnog LLM-a može povećati rizik umesto da ga smanji.\u003C\u002Fp>\n\u003Ch2>Evaluacija nije opciona\u003C\u002Fh2>\n\u003Cp>Produkciona Open-LLM aplikacija zahteva petlju evaluacije. Bez nje, timovi imaju samo anegdote. Nekoliko dobrih demo odgovora ne dokazuje da pretraživanje funkcioniše, da je upit stabilan ili da se model ponaša bezbedno u stvarnoj upotrebi.\u003C\u002Fp>\n\u003Cp>Minimalni skup podataka za evaluaciju treba da uključuje stvarna korisnička pitanja, očekivane izvorne dokumente, neprihvatljive odgovore, slučajeve bez odgovora i regresione testove za prethodne greške. Svaka promena u deljenju, vektorima, upitima, pružaocu modela ili pragu pretraživanja treba da bude testirana u odnosu na taj skup podataka.\u003C\u002Fp>\n\u003Cul>\u003Cli>\u003Cb>Evaluacija pretraživanja:\u003C\u002Fb> Da li je sistem preuzeo prave izvorne delove?\u003C\u002Fli>\u003Cli>\u003Cb>Evaluacija odgovora:\u003C\u002Fb> Da li je odgovor ostao utemeljen u preuzetom kontekstu?\u003C\u002Fli>\u003Cli>\u003Cb>Bezbednosna evaluacija:\u003C\u002Fb> Da li je sistem izbegao zabranjena otkrivanja ili neovlašćene podatke?\u003C\u002Fli>\u003Cli>\u003Cb>Operativna evaluacija:\u003C\u002Fb> Da li su kašnjenje, stopa grešaka i troškovi ostali u prihvatljivim granicama?\u003C\u002Fli>\u003Cli>\u003Cb>Regresiona evaluacija:\u003C\u002Fb> Da li je nadogradnja modela ili upita pokvarila prethodno ispravno ponašanje?\u003C\u002Fli>\u003C\u002Ful>\n\u003Cp>RAG smanjuje halucinacije, ali ne uklanja potrebu za evaluacijom. Evaluacija je kontrolna petlja koja pretvara pametan prototip u proizvod koji se poboljšava.\u003C\u002Fp>\n\u003Ch2>Disciplina implementacije: Model je događaj izdavanja\u003C\u002Fh2>\n\u003Cp>Promena modela nije bezazleno podešavanje konfiguracije. Može promeniti stil odgovora, ponašanje zaključivanja, kvalitet jezika, kašnjenje, upotrebu tokena, disciplinu citiranja i načine otkazivanja. U produkciji, nadogradnje modela treba tretirati kao događaje izdavanja.\u003C\u002Fp>\n\u003Cp>To znači verzionisanje upita, modela za vektore, podešavanja pretraživanja, identifikatora modela, ruta pružaoca i rezultata evaluacije. Takođe znači imati logiku za vraćanje na prethodno stanje. Ako novi model izazove lošije odgovore utemeljene na pretraživanju ili pokvari strukturirani izlaz, sistemu je potreban kontrolisan put nazad do poznate ispravne konfiguracije.\u003C\u002Fp>\n\u003Cp>Ovo se uklapa u istu operativnu logiku kao \u003Ca href=\"\u002Fsr\u002Fenterprise\u002Freference-models\u002Fdelivery-and-change\">Isporuka i promena\u003C\u002Fa> i \u003Ca href=\"\u002Fsr\u002Fenterprise\u002Freference-models\u002Fdigital-platform\">AI-spremna platformska arhitektura\u003C\u002Fa>: stabilna isporuka zahteva ponovljive kontrole, a ne herojske ručne popravke.\u003C\u002Fp>\n\u003Ch2>Zaključak: Produkcija počinje tamo gde demo završava\u003C\u002Fh2>\n\u003Cp>Ollama može započeti putovanje. Čini lokalno izvršavanje modela dostupnim i snižava barijeru za eksperimentisanje. To je vredno. Ali produkciona aplikacija počinje tamo gde demo završava.\u003C\u002Fp>\n\u003Cp>Model je samo jedna zamenljiva komponenta. Pravi proizvod je kontrolisani sistem oko njega: unos podataka, dozvole, pretraga, promptovi, rutiranje provajdera, evaluacija, logovi, monitoring, implementacija, rezervne kopije i korisnički tok rada. Tu privatnost postaje stvarna, kvalitet merljiv, a poslovna vrednost ponovljiva.\u003C\u002Fp>\n\u003Cp>Ozbiljna Open-LLM aplikacija se gradi kroz inženjersku disciplinu, a ne jednokratnim pokretanjem lokalnog modela. Ollama može započeti putovanje, ali produkciona aplikacija počinje tamo gde se demo završava.\u003C\u002Fp>\n\u003Cp>Tema:\u003C\u002Fp>\n\u003Cp>Ollama, Open LLM, RAG, pgvector, Qdrant, Lokalni AI, LLMOps, Apstrakcija provajdera, Enterprise AI arhitektura\u003C\u002Fp>",{"time":228,"blocks":229,"version":625},1782679670394,[230,235,241,246,251,256,262,267,272,283,291,296,301,327,332,337,342,347,364,369,374,379,385,390,404,409,414,437,442,447,452,457,462,467,472,477,482,507,512,517,522,527,539,544,549,554,559,570,575,580,585,590,595,600,605,610,615,620],{"id":231,"data":232,"type":42,"tunes":234},"HsB_-_Sdzh",{"text":233,"level":40},"Ollama nije proizvod: Izgradnja produkcijski spremnih Open-LLM aplikacija",{},{"id":236,"data":237,"type":239,"tunes":240},"G_FTnJiMVo",{"text":238},"Alati poput \u003Cb>Ollame\u003C\u002Fb> su lokalno eksperimentisanje sa LLM-ovima učinili gotovo bez trenja. Instalirajte runtime, povucite model, pošaljite prompt, i lokalni asistent odgovara za nekoliko sekundi. To je korisno. To je takođe i najlakši deo putovanja.","paragraph",{},{"id":242,"data":243,"type":239,"tunes":245},"fVa1sJxmy6",{"text":244},"Terminal demo nije aplikacija. Lokalni model nije proizvod. Produktivna Open-LLM aplikacija zahteva kontrolisan unos podataka, pretragu, dozvole, evaluaciju, logovanje, apstrakciju provajdera, disciplinu u primeni i korisnički tok koji rešava stvarni poslovni problem.",{},{"id":247,"data":248,"type":239,"tunes":250},"f6EzZPNhRc",{"text":249},"Osnovna teza je jednostavna: \u003Cb>Ollama je runtime, a ne proizvod\u003C\u002Fb>. Proizvod živi u aplikacionom sloju oko modela. Taj sloj odlučuje koji su dokumenti vidljivi, koji delovi se pretražuju, koji promptovi se koriste, kako se odgovori evaluiraju, kako se greške loguju i da li se sistem može verovati u svakodnevnom radu.",{},{"id":252,"data":253,"type":239,"tunes":255},"wjgsXAJQ-i",{"text":254},"Ovo je mesto gde lokalna AI postaje interesantna za timove koji grade privatne asistente, interne alate za znanje, LLM-om omogućene SaaS funkcije ili kopilote za poslovne tokove. Model može da radi lokalno, ali privatnost, pouzdanost i poslovna vrednost postoje samo ako je ceo sistem pravilno projektovan.",{},{"id":257,"data":258,"type":42,"tunes":261},"NnYUiRBtwJ",{"text":259,"level":260},"Ollama je runtime, a ne proizvod",2,{},{"id":263,"data":264,"type":239,"tunes":266},"nVrpsWCll3",{"text":265},"Ollama je odlična za pokretanje i serviranje otvorenih modela lokalno. Posebno je jaka za istraživanje, radne tokove programera, PoC-ove i timove koji žele da testiraju ponašanje modela bez trenutnog obavezivanja na cloud provajdera. Izlaže lokalnu interakciju sa modelom putem API-ja i slojeva kompatibilnosti koji olakšavaju povezivanje postojećih alata u OpenAI stilu.",{},{"id":268,"data":269,"type":239,"tunes":271},"_aQOCMkaG8",{"text":270},"To ne znači da Ollama rešava problem aplikacije. Ona automatski ne zna koje dokumente kompanije korisnik može da čita. Ne stvara izolaciju zakupaca, verzionisanje dokumenata, revizijske tragove, atribuciju izvora, skupove podataka za evaluaciju ili poslovno specifične UI tokove. Te odgovornosti ostaju na arhitekturi aplikacije.",{},{"id":273,"data":274,"type":281,"tunes":282},"jeeZbnQvh7",{"meta":275,"items":276,"style":280},{},[277,278,279],"\u003Cb>Ollama pomaže sa:\u003C\u002Fb> lokalnim izvršavanjem modela, brzim eksperimentisanjem, API-baziranim pristupom modelu, PoC-ovima bez interneta i produktivnošću programera.","\u003Cb>Ollama sama ne rešava:\u003C\u002Fb> kontrolu pristupa, kvalitet RAG-a, životni ciklus dokumenata, granice zakupaca, evaluaciju, revizijsko logovanje, praćenje, ponašanje u slučaju pada ili dizajn poslovnih tokova.","\u003Cb>Arhitektonska greška:\u003C\u002Fb> tretiranje lokalnog zaključivanja kao da je već siguran AI proizvod.","unordered","list",{},{"id":284,"data":285,"type":289,"tunes":290},"U8K0Qat9xz",{"text":286,"caption":287,"alignment":288},"Model je najlakši deo. Aplikacioni sloj je mesto gde živi vrednost proizvoda.","Arhitektonski princip","left","quote",{},{"id":292,"data":293,"type":42,"tunes":295},"NYU66FQDT8",{"text":294,"level":260},"Demo, PoC i produkcija su različite faze",{},{"id":297,"data":298,"type":239,"tunes":300},"-EGq4eScAy",{"text":299},"Mnoge Open-LLM inicijative propadaju jer timovi brkaju radni demo sa produkcijskom sposobnošću. Razlika nije kozmetička. Svaki nivo zrelosti ima drugačiji cilj, drugačiji profil rizika i drugačiji inženjerski zahtev.",{},{"id":302,"data":303,"type":325,"tunes":326},"V_OydBfVSx",{"content":304,"stretched":43,"withHeadings":14},[305,310,315,320],[306,307,308,309],"Faza","Šta dokazuje","Tipično podešavanje","Šta još nedostaje",[311,312,313,314],"Demo","Model može da odgovori na prompt lokalno.","Ollama na laptopu, jedan model, jedan prompt, bez stvarne kontrole podataka.","Dozvole, pretraga, logovi, evaluacija, primena, praćenje, korisnički tok.",[316,317,318,319],"PoC","Mali kontrolisani sistem može da odgovara na pitanja o odabranim dokumentima ili tokovima.","Osnovni web UI, skripta za unos, vektorska pretraga, ograničeni korisnici, ograničen obim dokumenata.","Skaliranje, upravljanje, test skupovi podataka, strategija za pad, revizijska sposobnost, model podrške.",[321,322,323,324],"Produkcija","Više korisnika može bezbedno i ponovljivo da koristi sistem unutar stvarnog rada.","Autentifikovana aplikacija, izolacija zakupaca, RAG cevovod, opservabilnost, apstrakcija provajdera, rezervne kopije, proces izdavanja.","Kontinuirano poboljšanje, proširenje evaluacije, operativna zrelost.","table",{},{"id":328,"data":329,"type":239,"tunes":331},"ikp3g9j4So",{"text":330},"PoC može biti namerno mali. Produkcija ne može biti namerno slepa. Kada stvarni korisnici, privatni podaci, poslovne odluke i očekivanja usaglašenosti uđu u sistem, arhitektura mora postati eksplicitna.",{},{"id":333,"data":334,"type":42,"tunes":336},"f1xN0TAU53",{"text":335,"level":260},"Gde se RAG uklapa",{},{"id":338,"data":339,"type":239,"tunes":341},"wVTJ2-nEg8",{"text":340},"\u003Cb>Retrieval-Augmented Generation\u003C\u002Fb> je najčešći most između jezičkog modela i privatnog poslovnog znanja. Model magično ne zna interne dokumente, ugovore, tikete, specifikacije proizvoda ili runbook-ove. Aplikacija mora da preuzme relevantan kontekst pre nego što zatraži od modela da odgovori.",{},{"id":343,"data":344,"type":239,"tunes":346},"fvxr_M2czf",{"text":345},"Praktičan RAG tok izgleda ovako:",{},{"id":348,"data":349,"type":281,"tunes":363},"tVZHbBjBJe",{"meta":350,"items":352,"style":362},{"counterType":351},"numeric",[353,354,355,356,357,358,359,360,361],"Dokumenti se otpremaju ili sinhronizuju iz kontrolisanih izvora.","Tekst se izdvaja, čisti i deli na delove.","Delovi dobijaju metapodatke kao što su zakupac, vlasnik, verzija dokumenta, URL izvora, opseg pristupa i vremenska oznaka.","Za svaki deo se generišu embedding-ovi.","Vektori se skladište u pgvector, Qdrant ili drugom sloju za pretragu.","U trenutku upita, aplikacija proverava dozvole pre pretrage.","Relevantni delovi se pretražuju pomoću pretrage sličnosti i filtera metapodataka.","Builder prompta ubacuje odabrani kontekst u zahtev modelu.","Odgovor se generiše sa citatima, granicama pouzdanosti i padom bez odgovora kada je pretraga slaba.","ordered",{},{"id":365,"data":366,"type":239,"tunes":368},"5VP9OTHrad",{"text":367},"RAG smanjuje halucinacije, ali ih ne eliminiše. Loša strategija deljenja, slabi metapodaci, nedostajući filteri dozvola, niskokvalitetni embedding ili preširoko pretraživanje i dalje mogu proizvesti uverljive, ali netačne odgovore. Ozbiljni RAG sistemi zahtevaju pragove, citate, evidenciju pretraživanja i evaluaciju.",{},{"id":370,"data":371,"type":42,"tunes":373},"6R3G0KzeXf",{"text":372,"level":260},"Praktična lokalna Open-LLM arhitektura",{},{"id":375,"data":376,"type":239,"tunes":378},"hsYURnHqGd",{"text":377},"Realističan proizvodni put ne zahteva egzotičnu infrastrukturu. Za mnoge timove, snažna prva arhitektura može koristiti normalan web stack: Nuxt za frontend, Nitro ili Node API, PostgreSQL kao sistem zapisa, pgvector za pretraživanje, Ollama kao lokalno izvršno okruženje, Prisma za pristup podacima i pozadinske radnike za unos i embedding.",{},{"id":380,"data":381,"type":383,"tunes":384},"ie58nqmk5o",{"code":382},"Korisničko pitanje | v\nFrontend UI | v\nAPI \u002F Backend | +--> Autentifikacija +--> Provera dozvola zakupca i uloge | v\nSloj pretraživanja | +--> PostgreSQL metapodaci +--> pgvector ili Qdrant vektorsko pretraživanje +--> prag sličnosti | v\nGraditelj upita | +--> sistemski upit +--> pronađeni delovi +--> reference izvora +--> pravila bez odgovora | v\nApstrakcija LLM provajdera | +--> Ollama \u002F lokalni model +--> cloud model fallback +--> buduće samostalno izvršno okruženje | v\nOdgovor sa izvorima | v\nEvidencije, tragovi, metrike, skup podataka za evaluaciju","code",{},{"id":386,"data":387,"type":239,"tunes":389},"HCdDDntKaG",{"text":388},"Ova arhitektura omogućava zamenu modela. Ollama može biti prvo izvršno okruženje, ali sistem ne treba biti zaključan za jedan inferentni mehanizam. Čista arhitektura razdvaja korisnički tok, pretraživanje, konstrukciju upita, model provajdera i mogućnost posmatranja.",{},{"id":391,"data":392,"type":281,"tunes":403},"jx3zLyUEmA",{"meta":393,"items":394,"style":280},{},[395,396,397,398,399,400,401,402],"\u003Cb>Frontend:\u003C\u002Fb> Nuxt ili drugi web UI za autentifikovane korisničke tokove.","\u003Cb>Backend\u002FAPI:\u003C\u002Fb> Nitro, Node.js ili FastAPI za orkestraciju, dozvole i rutiranje provajdera.","\u003Cb>Baza podataka:\u003C\u002Fb> PostgreSQL za dokumente, korisnike, zakupce, uloge, upite, evidencije i metapodatke.","\u003Cb>Vektorsko pretraživanje:\u003C\u002Fb> pgvector za jednostavno integrisano pretraživanje ili Qdrant kada vektorsko pretraživanje postane namenska usluga.","\u003Cb>Izvršno okruženje modela:\u003C\u002Fb> Ollama za lokalno izvršavanje, llama.cpp server za lagano serviranje ili vLLM za GPU serviranje veće propusnosti.","\u003Cb>Skladište:\u003C\u002Fb> lokalni sistem datoteka ili S3-kompatibilno objektno skladište za otpremljene datoteke i izdvojene artefakte.","\u003Cb>Radnici:\u003C\u002Fb> pozadinski unos, deljenje, embedding, ponovno indeksiranje i obrada verzija dokumenata.","\u003Cb>Mogućnost posmatranja:\u003C\u002Fb> evidencije, metrike, tragovi upita, tragovi pretraživanja, praćenje kašnjenja i rezultati evaluacije.",{},{"id":405,"data":406,"type":42,"tunes":408},"CG1PJLbPuV",{"text":407,"level":260},"Kontrolna lista za proizvodnu spremnost",{},{"id":410,"data":411,"type":239,"tunes":413},"aOHxNXO4Mk",{"text":412},"Sledeća kontrolna lista je razlika između demonstracije lokalnog modela i upotrebljive Open-LLM aplikacije:",{},{"id":415,"data":416,"type":281,"tunes":436},"TBkg7dLMT1",{"meta":417,"items":418,"style":280},{},[419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435],"Svaki dokument i deo ima tenant_id.","Pretraživanje je blokirano dok se ne provere dozvole korisnika i uloge.","Dokumenti uključuju metapodatke, izvor, vlasnika, verziju, stanje životnog ciklusa i politiku čuvanja.","Strategija deljenja je dokumentovana i testirana na stvarnim dokumentima.","Izbor embedding modela je eksplicitan i verzionisan.","Konfiguracija vektorskog indeksa je ponovljiva.","Prag sličnosti sprečava slepo korišćenje slabog konteksta.","Odgovori uključuju citate izvora ili reference izvora gde je moguće.","Koristi se padajući mehanizam bez odgovora kada je poverenje u pretraživanje prenisko.","Šabloni upita su verzionisani i kontrolisani izdanjem.","Apstrakcija LLM provajdera je izgrađena od početka.","Struktuirani izlaz se validira pre korišćenja u nizvodnim procesima.","Skup podataka za evaluaciju sadrži stvarna pitanja, očekivane izvore i neprihvatljive odgovore.","Evidencije pretraživanja pokazuju koji su delovi korišćeni za svaki odgovor.","Prate se kašnjenje, korišćenje tokena, opterećenje GPU\u002FCPU i stope grešaka.","Pravila privatnosti i čuvanja pokrivaju otpremanja, izdvojeni tekst, delove, embedding, upite, odgovore i evidencije.","Putevi za implementaciju, rezervnu kopiju, vraćanje, povlačenje i incidente su dokumentovani.",{},{"id":438,"data":439,"type":239,"tunes":441},"tdTcmD4DEO",{"text":440},"Ovo se direktno povezuje sa \u003Ca href=\"\u002Fsr\u002Fenterprise\">Enterprise Delivery OS\u003C\u002Fa>: korisna AI nije samo odluka o modelu. To je disciplina isporuke, dokazi, kontrole, metrike i operativno vlasništvo.",{},{"id":443,"data":444,"type":42,"tunes":446},"zOuV7s1ByX",{"text":445,"level":260},"Apstrakcija provajdera: Ne venčavajte se sa jednim modelom",{},{"id":448,"data":449,"type":239,"tunes":451},"gPuC35eEAc",{"text":450},"Lokalni modeli su vredni za slučajeve osetljive na privatnost, vanmrežne scenarije, kontrolu troškova i interno eksperimentisanje. Cloud modeli i dalje mogu biti jači za teško rezonovanje, kodiranje, višejezičnu tačnost ili multimodalni rad. Proizvodna aplikacija ne treba tretirati nijedan model kao trajnu infrastrukturu.",{},{"id":453,"data":454,"type":239,"tunes":456},"ssy1KKIyUv",{"text":455},"Apstrakcija provajdera omogućava istom aplikacionom toku da pozove Ollama, OpenAI, Gemini, Anthropic, Mistral, vLLM ili drugu samostalno hostovanu tačku bez prepisivanja proizvoda. Aplikacija odlučuje o provajderu na osnovu slučaja korišćenja, osetljivosti podataka, kašnjenja, troškova i zahteva za kvalitetom.",{},{"id":458,"data":459,"type":383,"tunes":461},"droVs9NwWG",{"code":460},"type LlmProvider = \"ollama\" | \"openai\" | \"gemini\" | \"anthropic\" | \"vllm\"; type ChatInput = { provider: LlmProvider; model: string; tenantId: string; userId: string; question: string; context: Array\u003C{ chunkId: string; sourceTitle: string; text: string; }>;\n}; async function chat(input: ChatInput) { await assertUserCanAccessContext(input.userId, input.context); const messages = buildRagMessages({ question: input.question, context: input.context, rules: [ \"Odgovaraj samo iz datog konteksta kada je moguće.\", \"Citiraj naslove izvora.\", \"Reci kada je kontekst nedovoljan.\" ] }); return llm.chat({ provider: input.provider, model: input.model, messages, trace: { tenantId: input.tenantId, userId: input.userId, promptVersion: \"rag-v3.2\" } });\n}",{},{"id":463,"data":464,"type":239,"tunes":466},"TqpI4xqkq1",{"text":465},"Ključna ideja nije TypeScript sintaksa. Ključna ideja je granica. Aplikacija poseduje dozvole, pretraživanje, pravila upita, praćenje i evaluaciju. Provajder samo proizvodi izlaz modela.",{},{"id":468,"data":469,"type":42,"tunes":471},"RuZt2H8Qtd",{"text":470,"level":260},"pgvector vs Qdrant",{},{"id":473,"data":474,"type":239,"tunes":476},"-nl0_dtw9s",{"text":475},"Za mnoge Open-LLM aplikacije, odluka o vektorskom skladištu je jednostavna na početku: ako je PostgreSQL već vaš sistem zapisa, \u003Cb>pgvector\u003C\u002Fb> je snažna polazna tačka. Drži metapodatke, dozvole, evidencije dokumenata i vektore blizu zajedno. To smanjuje operativnu složenost.",{},{"id":478,"data":479,"type":239,"tunes":481},"mJJZ9Vhiy4",{"text":480},"\u003Cb>Qdrant\u003C\u002Fb> postaje privlačniji kada vektorsko pretraživanje treba da postane namenska usluga: veći obim pretraživanja, napredno filtriranje, specijalizovano indeksiranje, hibridni obrasci pretraživanja ili nezavisno skaliranje infrastrukture pretraživanja.",{},{"id":483,"data":484,"type":325,"tunes":506},"ZNBNQmWTqi",{"content":485,"stretched":43,"withHeadings":14},[486,491,496,501],[487,488,489,490],"Opcija","Najbolje odgovara","Prednosti","Kompromisi",[492,493,494,495],"pgvector","PoC, rana produkcija, sistemi već izgrađeni na PostgreSQL-u.","Jedna baza podataka, SQL spajanja, ACID ponašanje, jednostavnije operacije, metapodaci blizu vektora.","Manje specijalizovan od namenske vektorske baze podataka pri velikom obimu pretraživanja.",[497,498,499,500],"Qdrant","Namenske usluge semantičkog pretraživanja, veća vektorska opterećenja, napredno filtriranje i obrasci pretraživanja.","Namenski izgrađeno vektorsko pretraživanje, snažan model filtriranja, nezavisno skaliranje, API-ji fokusirani na pretraživanje.","Dodaje još jednu infrastrukturnu komponentu i operativnu površinu.",[502,503,504,505],"Počnite jednostavno","Većina korporativnih timova koji počinju sa privatnim RAG aplikacijama.","Manji arhitektonski rizik, brža isporuka, lakši put za reviziju.","Može zahtevati migraciju kasnije ako pretraživanje postane centralno i velikog obima.",{},{"id":508,"data":509,"type":239,"tunes":511},"EaNwvz0Ala",{"text":510},"Praktično pravilo: počnite sa pgvector kada PostgreSQL već poseduje vaše poslovne podatke i obim pretraživanja je umeren. Pređite na Qdrant kada vektorsko pretraživanje postane samostalna proizvodna mogućnost.",{},{"id":513,"data":514,"type":42,"tunes":516},"Xm3eJKCflO",{"text":515,"level":260},"Provera sigurnosti i privatnosti",{},{"id":518,"data":519,"type":239,"tunes":521},"rdIR5uvVuv",{"text":520},"Lokalno zaključivanje automatski ne znači sigurnu AI. To samo znači da se izvršavanje modela može obaviti lokalno. Celokupni put podataka i dalje je važan: otpremljene datoteke, izvučeni tekst, delovi, vektori, evidencije, upiti, odgovori, rezervne kopije, pristup programera, administratorski alati i izvoz analitike.",{},{"id":523,"data":524,"type":239,"tunes":526},"IhqG3kxPSc",{"text":525},"Vektori takođe zaslužuju pažnju. Oni nisu originalni dokument, ali i dalje predstavljaju informacije izvedene iz osetljivog sadržaja. Tretirajte ih kao deo zaštićenog puta podataka, posebno kada su povezani sa metapodacima, izvornim zapisima, korisničkim upitima ili identifikatorima zakupaca.",{},{"id":528,"data":529,"type":281,"tunes":538},"QvcBrg8G6B",{"meta":530,"items":531,"style":280},{},[532,533,534,535,536,537],"Ne indeksirajte dokumente pre nego što su pravila pristupa poznata.","Ne preuzimajte delove bez filtera zakupca i uloge.","Ne evidentirajte potpune upite i odgovore bez pravila o čuvanju.","Ne šaljite osetljiv kontekst cloud modelu osim ako politika to ne dozvoljava.","Ne pretpostavljajte da lokalno automatski znači usklađeno sa GDPR-om; usklađenost zavisi od celokupnog dizajna obrade.","Ne dozvolite da kopije za evaluaciju i otklanjanje grešaka postanu nekontrolisani skupovi podataka u senci.",{},{"id":540,"data":541,"type":239,"tunes":543},"_YLdd4iHrS",{"text":542},"Ovo je mesto gde \u003Ca href=\"\u002Fsr\u002Fblog\u002Fenterprise-grade-multi-tenant-architecture-for-an-international-platform\">multi-instanca SaaS arhitektura\u003C\u002Fa> postaje važna. Ako su zakupci, uloge, vlasništvo nad podacima i operativne granice slabe, dodavanje lokalnog LLM-a može povećati rizik umesto da ga smanji.",{},{"id":545,"data":546,"type":42,"tunes":548},"I6V0KMIQjb",{"text":547,"level":260},"Evaluacija nije opciona",{},{"id":550,"data":551,"type":239,"tunes":553},"yaKCxuptHO",{"text":552},"Produkciona Open-LLM aplikacija zahteva petlju evaluacije. Bez nje, timovi imaju samo anegdote. Nekoliko dobrih demo odgovora ne dokazuje da pretraživanje funkcioniše, da je upit stabilan ili da se model ponaša bezbedno u stvarnoj upotrebi.",{},{"id":555,"data":556,"type":239,"tunes":558},"Kq_qe2AL-v",{"text":557},"Minimalni skup podataka za evaluaciju treba da uključuje stvarna korisnička pitanja, očekivane izvorne dokumente, neprihvatljive odgovore, slučajeve bez odgovora i regresione testove za prethodne greške. Svaka promena u deljenju, vektorima, upitima, pružaocu modela ili pragu pretraživanja treba da bude testirana u odnosu na taj skup podataka.",{},{"id":560,"data":561,"type":281,"tunes":569},"oBlROQd5Li",{"meta":562,"items":563,"style":280},{},[564,565,566,567,568],"\u003Cb>Evaluacija pretraživanja:\u003C\u002Fb> Da li je sistem preuzeo prave izvorne delove?","\u003Cb>Evaluacija odgovora:\u003C\u002Fb> Da li je odgovor ostao utemeljen u preuzetom kontekstu?","\u003Cb>Bezbednosna evaluacija:\u003C\u002Fb> Da li je sistem izbegao zabranjena otkrivanja ili neovlašćene podatke?","\u003Cb>Operativna evaluacija:\u003C\u002Fb> Da li su kašnjenje, stopa grešaka i troškovi ostali u prihvatljivim granicama?","\u003Cb>Regresiona evaluacija:\u003C\u002Fb> Da li je nadogradnja modela ili upita pokvarila prethodno ispravno ponašanje?",{},{"id":571,"data":572,"type":239,"tunes":574},"9gDXPLZ6Rp",{"text":573},"RAG smanjuje halucinacije, ali ne uklanja potrebu za evaluacijom. Evaluacija je kontrolna petlja koja pretvara pametan prototip u proizvod koji se poboljšava.",{},{"id":576,"data":577,"type":42,"tunes":579},"Hi1K8JLPUo",{"text":578,"level":260},"Disciplina implementacije: Model je događaj izdavanja",{},{"id":581,"data":582,"type":239,"tunes":584},"sEpigdnlkD",{"text":583},"Promena modela nije bezazleno podešavanje konfiguracije. Može promeniti stil odgovora, ponašanje zaključivanja, kvalitet jezika, kašnjenje, upotrebu tokena, disciplinu citiranja i načine otkazivanja. U produkciji, nadogradnje modela treba tretirati kao događaje izdavanja.",{},{"id":586,"data":587,"type":239,"tunes":589},"sLXBCBh3E0",{"text":588},"To znači verzionisanje upita, modela za vektore, podešavanja pretraživanja, identifikatora modela, ruta pružaoca i rezultata evaluacije. Takođe znači imati logiku za vraćanje na prethodno stanje. Ako novi model izazove lošije odgovore utemeljene na pretraživanju ili pokvari strukturirani izlaz, sistemu je potreban kontrolisan put nazad do poznate ispravne konfiguracije.",{},{"id":591,"data":592,"type":239,"tunes":594},"pcbe8eGMbe",{"text":593},"Ovo se uklapa u istu operativnu logiku kao \u003Ca href=\"\u002Fsr\u002Fenterprise\u002Freference-models\u002Fdelivery-and-change\">Isporuka i promena\u003C\u002Fa> i \u003Ca href=\"\u002Fsr\u002Fenterprise\u002Freference-models\u002Fdigital-platform\">AI-spremna platformska arhitektura\u003C\u002Fa>: stabilna isporuka zahteva ponovljive kontrole, a ne herojske ručne popravke.",{},{"id":596,"data":597,"type":42,"tunes":599},"mOhI-jF1zx",{"text":598,"level":260},"Zaključak: Produkcija počinje tamo gde demo završava",{},{"id":601,"data":602,"type":239,"tunes":604},"3mXK980w23",{"text":603},"Ollama može započeti putovanje. Čini lokalno izvršavanje modela dostupnim i snižava barijeru za eksperimentisanje. To je vredno. Ali produkciona aplikacija počinje tamo gde demo završava.",{},{"id":606,"data":607,"type":239,"tunes":609},"9O27eQ_Svm",{"text":608},"Model je samo jedna zamenljiva komponenta. Pravi proizvod je kontrolisani sistem oko njega: unos podataka, dozvole, pretraga, promptovi, rutiranje provajdera, evaluacija, logovi, monitoring, implementacija, rezervne kopije i korisnički tok rada. Tu privatnost postaje stvarna, kvalitet merljiv, a poslovna vrednost ponovljiva.",{},{"id":611,"data":612,"type":239,"tunes":614},"4Lyy3E4ZsF",{"text":613},"Ozbiljna Open-LLM aplikacija se gradi kroz inženjersku disciplinu, a ne jednokratnim pokretanjem lokalnog modela. Ollama može započeti putovanje, ali produkciona aplikacija počinje tamo gde se demo završava.",{},{"id":616,"data":617,"type":239,"tunes":619},"eKPRtinG5L",{"text":618},"Tema:",{},{"id":621,"data":622,"type":239,"tunes":624},"GMa6lE1NNl",{"text":623},"Ollama, Open LLM, RAG, pgvector, Qdrant, Lokalni AI, LLMOps, Apstrakcija provajdera, Enterprise AI arhitektura",{},"2.31","Pokretanje lokalnog modela pomoću Ollama-e je jednostavno. Izgradnja Open-LLM aplikacije spremne za produkciju je teža: zahteva RAG, kontrolu pristupa, apstrakciju provajdera, evaluaciju, logovanje, disciplinu puštanja u rad i kontrolisani aplikativni sloj oko modela.","\u002Fuploads\u002F2026\u002F06\u002Follama-is-not-the-product-building-production-ready-open-llm-applications-1782679361640-h0usqf.webp","ollama-is-not-the-product-building-production-ready-open-llm-applications-1782679361640-h0usqf","PUBLISHED","2026-06-28T16:39:00.000Z","2026-06-28T20:39:17.972Z","2026-06-28T20:56:51.719Z",{"en":634,"de":635,"sr":636,"es":637,"fr":638,"it":639,"ru":640,"zh":641},"\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fde\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fsr\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fes\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Ffr\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fit\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fru\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fzh\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications",[643,647,651,655,659],{"id":644,"name":645,"slug":646},39,"Enterprise Delivery OS","enterprise",{"id":648,"name":649,"slug":650},87,"Playbook: LLMOps","llmops",{"id":652,"name":653,"slug":654},58,"Evaluacija i gate-ovi kvaliteta","evaluation",{"id":656,"name":657,"slug":658},89,"Eval harness","evaluation-harness",{"id":660,"name":661,"slug":662},85,"Gate-ovi kvaliteta","quality-gates",{"id":664,"login":665,"email":666,"displayName":667},"20","rooth8233","","Aleksandar Stajić",[669,999],{"lang":670,"title":671,"content":672,"contentJson":673,"excerpt":998},"en","Ollama Is Not the Product: Building Production-Ready Open-LLM Applications","{\"time\":1782679301267,\"blocks\":[{\"id\":\"HsB_-_Sdzh\",\"type\":\"header\",\"data\":{\"text\":\"Ollama Is Not the Product: Building Production-Ready Open-LLM Applications\",\"level\":1},\"tunes\":{}},{\"id\":\"G_FTnJiMVo\",\"type\":\"paragraph\",\"data\":{\"text\":\"Tools like \u003Cb>Ollama\u003C\u002Fb> have made local LLM experimentation almost frictionless. Install the runtime, pull a model, send a prompt, and a local assistant answers in seconds. That is useful. It is also the easiest part of the journey.\"},\"tunes\":{}},{\"id\":\"fVa1sJxmy6\",\"type\":\"paragraph\",\"data\":{\"text\":\"A terminal demo is not an application. A local model is not a product. A productive Open-LLM application needs controlled data ingestion, retrieval, permissions, evaluation, logging, provider abstraction, deployment discipline, and a user workflow that solves a real business problem.\"},\"tunes\":{}},{\"id\":\"f6EzZPNhRc\",\"type\":\"paragraph\",\"data\":{\"text\":\"The core thesis is simple: \u003Cb>Ollama is a runtime, not the product\u003C\u002Fb>. The product lives in the application layer around the model. That layer decides which documents are visible, which chunks are retrieved, which prompts are used, how answers are evaluated, how failures are logged, and whether the system can be trusted in daily work.\"},\"tunes\":{}},{\"id\":\"wjgsXAJQ-i\",\"type\":\"paragraph\",\"data\":{\"text\":\"This is where local AI becomes interesting for teams building private assistants, internal knowledge tools, LLM-enabled SaaS features, or enterprise workflow copilots. The model can run locally, but privacy, reliability, and business value only exist if the full system is engineered properly.\"},\"tunes\":{}},{\"id\":\"NnYUiRBtwJ\",\"type\":\"header\",\"data\":{\"text\":\"Ollama Is a Runtime, Not a Product\",\"level\":2},\"tunes\":{}},{\"id\":\"nVrpsWCll3\",\"type\":\"paragraph\",\"data\":{\"text\":\"Ollama is excellent for running and serving open models locally. It is especially strong for exploration, developer workflows, PoCs, and teams that want to test model behavior without immediately committing to a cloud provider. It exposes local model interaction through APIs and compatibility layers that make it easier to connect existing OpenAI-style tooling.\"},\"tunes\":{}},{\"id\":\"_aQOCMkaG8\",\"type\":\"paragraph\",\"data\":{\"text\":\"That does not mean Ollama solves the application problem. It does not automatically know which company documents a user may read. It does not create tenant isolation, document versioning, audit trails, source attribution, evaluation datasets, or business-specific UI workflows. Those responsibilities stay with the application architecture.\"},\"tunes\":{}},{\"id\":\"jeeZbnQvh7\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"\u003Cb>Ollama helps with:\u003C\u002Fb> local model execution, fast experimentation, API-based model access, offline-first PoCs, and developer productivity.\",\"\u003Cb>Ollama does not solve by itself:\u003C\u002Fb> access control, RAG quality, document lifecycle, tenant boundaries, evaluation, audit logging, monitoring, fallback behavior, or enterprise workflow design.\",\"\u003Cb>The architectural mistake:\u003C\u002Fb> treating local inference as if it were already a secure AI product.\"]},\"tunes\":{}},{\"id\":\"U8K0Qat9xz\",\"type\":\"quote\",\"data\":{\"text\":\"The model is the easiest part. The application layer is where the product value lives.\",\"caption\":\"Architecture principle\",\"alignment\":\"left\"},\"tunes\":{}},{\"id\":\"NYU66FQDT8\",\"type\":\"header\",\"data\":{\"text\":\"Demo, PoC, and Production Are Different Stages\",\"level\":2},\"tunes\":{}},{\"id\":\"-EGq4eScAy\",\"type\":\"paragraph\",\"data\":{\"text\":\"Many Open-LLM initiatives fail because teams confuse a working demo with a production capability. The difference is not cosmetic. Each maturity level has a different goal, different risk profile, and different engineering requirement.\"},\"tunes\":{}},{\"id\":\"V_OydBfVSx\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Stage\",\"What it proves\",\"Typical setup\",\"What is still missing\"],[\"Demo\",\"A model can answer a prompt locally.\",\"Ollama on a laptop, one model, one prompt, no real data control.\",\"Permissions, retrieval, logs, evaluation, deployment, monitoring, user workflow.\"],[\"PoC\",\"A small controlled system can answer questions over selected documents or workflows.\",\"Basic web UI, ingestion script, vector search, limited users, limited document scope.\",\"Scale, governance, test datasets, fallback strategy, auditability, support model.\"],[\"Production\",\"Multiple users can use the system safely and repeatedly inside real work.\",\"Authenticated app, tenant isolation, RAG pipeline, observability, provider abstraction, backups, release process.\",\"Continuous improvement, evaluation expansion, operational maturity.\"]]},\"tunes\":{}},{\"id\":\"ikp3g9j4So\",\"type\":\"paragraph\",\"data\":{\"text\":\"A PoC can be intentionally small. Production cannot be intentionally blind. Once real users, private data, business decisions, and compliance expectations enter the system, the architecture must become explicit.\"},\"tunes\":{}},{\"id\":\"f1xN0TAU53\",\"type\":\"header\",\"data\":{\"text\":\"Where RAG Fits In\",\"level\":2},\"tunes\":{}},{\"id\":\"wVTJ2-nEg8\",\"type\":\"paragraph\",\"data\":{\"text\":\"\u003Cb>Retrieval-Augmented Generation\u003C\u002Fb> is the most common bridge between a language model and private business knowledge. The model does not magically know internal documents, contracts, tickets, product specs, or runbooks. The application must retrieve relevant context before asking the model to answer.\"},\"tunes\":{}},{\"id\":\"fvxr_M2czf\",\"type\":\"paragraph\",\"data\":{\"text\":\"A practical RAG flow looks like this:\"},\"tunes\":{}},{\"id\":\"tVZHbBjBJe\",\"type\":\"list\",\"data\":{\"style\":\"ordered\",\"meta\":{\"counterType\":\"numeric\"},\"items\":[\"Documents are uploaded or synchronized from controlled sources.\",\"Text is extracted, cleaned, and split into chunks.\",\"Chunks receive metadata such as tenant, owner, document version, source URL, access scope, and timestamp.\",\"Embeddings are generated for each chunk.\",\"Vectors are stored in pgvector, Qdrant, or another retrieval layer.\",\"At query time, the application checks permissions before retrieval.\",\"Relevant chunks are retrieved with similarity search and metadata filters.\",\"The prompt builder injects selected context into the model request.\",\"The answer is generated with citations, confidence boundaries, and no-answer fallback when retrieval is weak.\"]},\"tunes\":{}},{\"id\":\"5VP9OTHrad\",\"type\":\"paragraph\",\"data\":{\"text\":\"RAG reduces hallucinations, but it does not eliminate them. A poor chunking strategy, weak metadata, missing permission filters, low-quality embeddings, or overly broad retrieval can still produce convincing but wrong answers. Serious RAG systems need thresholds, citations, retrieval logs, and evaluation.\"},\"tunes\":{}},{\"id\":\"6R3G0KzeXf\",\"type\":\"header\",\"data\":{\"text\":\"A Practical Local Open-LLM Architecture\",\"level\":2},\"tunes\":{}},{\"id\":\"hsYURnHqGd\",\"type\":\"paragraph\",\"data\":{\"text\":\"A realistic production path does not require exotic infrastructure. For many teams, a strong first architecture can use a normal web stack: Nuxt for the frontend, a Nitro or Node API, PostgreSQL as the system of record, pgvector for retrieval, Ollama as a local runtime, Prisma for data access, and background workers for ingestion and embeddings.\"},\"tunes\":{}},{\"id\":\"ie58nqmk5o\",\"type\":\"code\",\"data\":{\"code\":\"User question | v\\nFrontend UI | v\\nAPI \u002F Backend | +--> Authentication +--> Tenant and role permission check | v\\nRetrieval layer | +--> PostgreSQL metadata +--> pgvector or Qdrant vector search +--> similarity threshold | v\\nPrompt builder | +--> system prompt +--> retrieved chunks +--> source references +--> no-answer rules | v\\nLLM provider abstraction | +--> Ollama \u002F local model +--> cloud model fallback +--> future self-hosted runtime | v\\nAnswer with sources | v\\nLogs, traces, metrics, evaluation dataset\"},\"tunes\":{}},{\"id\":\"HCdDDntKaG\",\"type\":\"paragraph\",\"data\":{\"text\":\"This architecture keeps the model replaceable. Ollama can be the first runtime, but the system should not be locked to one inference engine. A clean architecture separates user workflow, retrieval, prompt construction, model provider, and observability.\"},\"tunes\":{}},{\"id\":\"jx3zLyUEmA\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"\u003Cb>Frontend:\u003C\u002Fb> Nuxt or another web UI for authenticated user workflows.\",\"\u003Cb>Backend\u002FAPI:\u003C\u002Fb> Nitro, Node.js, or FastAPI for orchestration, permissions, and provider routing.\",\"\u003Cb>Database:\u003C\u002Fb> PostgreSQL for documents, users, tenants, roles, prompts, logs, and metadata.\",\"\u003Cb>Vector search:\u003C\u002Fb> pgvector for simple integrated retrieval or Qdrant when vector search becomes a dedicated service.\",\"\u003Cb>Model runtime:\u003C\u002Fb> Ollama for local execution, llama.cpp server for lightweight serving, or vLLM for higher-throughput GPU serving.\",\"\u003Cb>Storage:\u003C\u002Fb> local filesystem or S3-compatible object storage for uploaded files and extracted artifacts.\",\"\u003Cb>Workers:\u003C\u002Fb> background ingestion, chunking, embedding, re-indexing, and document version processing.\",\"\u003Cb>Observability:\u003C\u002Fb> logs, metrics, prompt traces, retrieval traces, latency tracking, and evaluation results.\"]},\"tunes\":{}},{\"id\":\"CG1PJLbPuV\",\"type\":\"header\",\"data\":{\"text\":\"The Production Readiness Checklist\",\"level\":2},\"tunes\":{}},{\"id\":\"aOHxNXO4Mk\",\"type\":\"paragraph\",\"data\":{\"text\":\"The following checklist is the difference between a local model demo and a usable Open-LLM application:\"},\"tunes\":{}},{\"id\":\"TBkg7dLMT1\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"Every document and chunk has a tenant_id.\",\"Retrieval is blocked until user and role permissions are checked.\",\"Documents include metadata, source, owner, version, lifecycle state, and retention policy.\",\"Chunking strategy is documented and tested against real documents.\",\"Embedding model selection is explicit and versioned.\",\"Vector index configuration is reproducible.\",\"Similarity threshold prevents weak context from being used blindly.\",\"Answers include source citations or source references where possible.\",\"No-answer fallback is used when retrieval confidence is too low.\",\"Prompt templates are versioned and release-controlled.\",\"LLM provider abstraction is built from the start.\",\"Structured output is validated before downstream use.\",\"Evaluation dataset contains real questions, expected sources, and unacceptable answers.\",\"Retrieval logs show which chunks were used for each answer.\",\"Latency, token usage, GPU\u002FCPU load, and error rates are monitored.\",\"Privacy and retention rules cover uploads, extracted text, chunks, embeddings, prompts, responses, and logs.\",\"Deployment, backup, restore, rollback, and incident paths are documented.\"]},\"tunes\":{}},{\"id\":\"tdTcmD4DEO\",\"type\":\"paragraph\",\"data\":{\"text\":\"This connects directly with \u003Ca href=\\\"\u002Fenterprise\\\">Enterprise Delivery OS\u003C\u002Fa>: useful AI is not only a model decision. It is delivery discipline, evidence, controls, metrics, and operational ownership.\"},\"tunes\":{}},{\"id\":\"zOuV7s1ByX\",\"type\":\"header\",\"data\":{\"text\":\"Provider Abstraction: Do Not Marry One Model\",\"level\":2},\"tunes\":{}},{\"id\":\"gPuC35eEAc\",\"type\":\"paragraph\",\"data\":{\"text\":\"Local models are valuable for privacy-sensitive use cases, offline scenarios, cost control, and internal experimentation. Cloud models may still be stronger for difficult reasoning, coding, multilingual accuracy, or multimodal work. A production application should not treat any one model as permanent infrastructure.\"},\"tunes\":{}},{\"id\":\"ssy1KKIyUv\",\"type\":\"paragraph\",\"data\":{\"text\":\"A provider abstraction allows the same application workflow to call Ollama, OpenAI, Gemini, Anthropic, Mistral, vLLM, or another self-hosted endpoint without rewriting the product. The application decides the provider based on use case, data sensitivity, latency, cost, and quality requirements.\"},\"tunes\":{}},{\"id\":\"droVs9NwWG\",\"type\":\"code\",\"data\":{\"code\":\"type LlmProvider = \\\"ollama\\\" | \\\"openai\\\" | \\\"gemini\\\" | \\\"anthropic\\\" | \\\"vllm\\\"; type ChatInput = { provider: LlmProvider; model: string; tenantId: string; userId: string; question: string; context: Array\u003C{ chunkId: string; sourceTitle: string; text: string; }>;\\n}; async function chat(input: ChatInput) { await assertUserCanAccessContext(input.userId, input.context); const messages = buildRagMessages({ question: input.question, context: input.context, rules: [ \\\"Answer only from provided context when possible.\\\", \\\"Cite source titles.\\\", \\\"Say when the context is insufficient.\\\" ] }); return llm.chat({ provider: input.provider, model: input.model, messages, trace: { tenantId: input.tenantId, userId: input.userId, promptVersion: \\\"rag-v3.2\\\" } });\\n}\"},\"tunes\":{}},{\"id\":\"TqpI4xqkq1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The key idea is not the TypeScript syntax. The key idea is the boundary. The application owns permissions, retrieval, prompt rules, tracing, and evaluation. The provider only produces the model output.\"},\"tunes\":{}},{\"id\":\"RuZt2H8Qtd\",\"type\":\"header\",\"data\":{\"text\":\"pgvector vs Qdrant\",\"level\":2},\"tunes\":{}},{\"id\":\"-nl0_dtw9s\",\"type\":\"paragraph\",\"data\":{\"text\":\"For many Open-LLM applications, the vector store decision is simple at the beginning: if PostgreSQL is already your system of record, \u003Cb>pgvector\u003C\u002Fb> is a strong starting point. It keeps metadata, permissions, document records, and vectors close together. That reduces operational complexity.\"},\"tunes\":{}},{\"id\":\"mJJZ9Vhiy4\",\"type\":\"paragraph\",\"data\":{\"text\":\"\u003Cb>Qdrant\u003C\u002Fb> becomes more attractive when vector search needs to become a dedicated service: larger retrieval scale, advanced filtering, specialized indexing, hybrid search patterns, or independent scaling of retrieval infrastructure.\"},\"tunes\":{}},{\"id\":\"ZNBNQmWTqi\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Option\",\"Best fit\",\"Strengths\",\"Trade-offs\"],[\"pgvector\",\"PoCs, early production, systems already built on PostgreSQL.\",\"Single database, SQL joins, ACID behavior, simpler operations, metadata close to vectors.\",\"Less specialized than a dedicated vector database at large retrieval scale.\"],[\"Qdrant\",\"Dedicated semantic search services, larger vector workloads, advanced filtering and retrieval patterns.\",\"Purpose-built vector search, strong filtering model, independent scaling, retrieval-focused APIs.\",\"Adds another infrastructure component and operational surface.\"],[\"Start simple\",\"Most enterprise teams beginning with private RAG applications.\",\"Lower architecture risk, faster delivery, easier audit path.\",\"May need migration later if retrieval becomes central and high-scale.\"]]},\"tunes\":{}},{\"id\":\"EaNwvz0Ala\",\"type\":\"paragraph\",\"data\":{\"text\":\"A practical rule: start with pgvector when PostgreSQL already owns your business data and the retrieval scale is moderate. Move to Qdrant when vector search becomes a product capability of its own.\"},\"tunes\":{}},{\"id\":\"Xm3eJKCflO\",\"type\":\"header\",\"data\":{\"text\":\"Security and Privacy Reality Check\",\"level\":2},\"tunes\":{}},{\"id\":\"rdIR5uvVuv\",\"type\":\"paragraph\",\"data\":{\"text\":\"Local inference does not automatically mean secure AI. It only means the model execution can happen locally. The full data path still matters: uploaded files, extracted text, chunks, embeddings, logs, prompts, responses, backups, developer access, admin tools, and analytics exports.\"},\"tunes\":{}},{\"id\":\"IhqG3kxPSc\",\"type\":\"paragraph\",\"data\":{\"text\":\"Embeddings also deserve care. They are not the original document, but they still represent information derived from sensitive content. Treat them as part of the protected data path, especially when they are tied to metadata, source records, user queries, or tenant identifiers.\"},\"tunes\":{}},{\"id\":\"QvcBrg8G6B\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"Do not index documents before access rules are known.\",\"Do not retrieve chunks without tenant and role filters.\",\"Do not log full prompts and responses without retention rules.\",\"Do not send sensitive context to a cloud model unless the policy allows it.\",\"Do not assume that local equals GDPR-compliant; compliance depends on the complete processing design.\",\"Do not let evaluation and debugging copies become uncontrolled shadow datasets.\"]},\"tunes\":{}},{\"id\":\"_YLdd4iHrS\",\"type\":\"paragraph\",\"data\":{\"text\":\"This is where \u003Ca href=\\\"\u002Fblog\u002Fenterprise-grade-multi-tenant-architecture-for-an-international-platform\\\">multi-instance SaaS architecture\u003C\u002Fa> matters. If tenants, roles, data ownership, and operational boundaries are weak, adding a local LLM can amplify risk instead of reducing it.\"},\"tunes\":{}},{\"id\":\"I6V0KMIQjb\",\"type\":\"header\",\"data\":{\"text\":\"Evaluation Is Not Optional\",\"level\":2},\"tunes\":{}},{\"id\":\"yaKCxuptHO\",\"type\":\"paragraph\",\"data\":{\"text\":\"A production Open-LLM application needs an evaluation loop. Without it, teams only have anecdotes. A few good demo answers do not prove that retrieval works, that the prompt is stable, or that the model behaves safely across real usage.\"},\"tunes\":{}},{\"id\":\"Kq_qe2AL-v\",\"type\":\"paragraph\",\"data\":{\"text\":\"A minimal evaluation dataset should include real user questions, expected source documents, unacceptable answers, no-answer cases, and regression tests for previous failures. Every change to chunking, embeddings, prompts, model provider, or retrieval threshold should be tested against that dataset.\"},\"tunes\":{}},{\"id\":\"oBlROQd5Li\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"\u003Cb>Retrieval evaluation:\u003C\u002Fb> Did the system fetch the right source chunks?\",\"\u003Cb>Answer evaluation:\u003C\u002Fb> Did the answer stay grounded in the retrieved context?\",\"\u003Cb>Safety evaluation:\u003C\u002Fb> Did the system avoid forbidden disclosures or unauthorized data?\",\"\u003Cb>Operational evaluation:\u003C\u002Fb> Did latency, failure rate, and cost stay inside acceptable limits?\",\"\u003Cb>Regression evaluation:\u003C\u002Fb> Did a model or prompt upgrade break previously correct behavior?\"]},\"tunes\":{}},{\"id\":\"9gDXPLZ6Rp\",\"type\":\"paragraph\",\"data\":{\"text\":\"RAG reduces hallucinations, but it does not remove the need for evaluation. Evaluation is the control loop that turns a clever prototype into an improving product.\"},\"tunes\":{}},{\"id\":\"Hi1K8JLPUo\",\"type\":\"header\",\"data\":{\"text\":\"Deployment Discipline: The Model Is a Release Event\",\"level\":2},\"tunes\":{}},{\"id\":\"sEpigdnlkD\",\"type\":\"paragraph\",\"data\":{\"text\":\"Changing a model is not a harmless configuration tweak. It can change answer style, reasoning behavior, language quality, latency, token usage, citation discipline, and failure modes. In production, model upgrades should be handled like release events.\"},\"tunes\":{}},{\"id\":\"sLXBCBh3E0\",\"type\":\"paragraph\",\"data\":{\"text\":\"That means versioning prompts, embedding models, retrieval settings, model identifiers, provider routes, and evaluation results. It also means having rollback logic. If a new model causes worse retrieval-grounded answers or breaks structured output, the system needs a controlled path back to the known-good configuration.\"},\"tunes\":{}},{\"id\":\"pcbe8eGMbe\",\"type\":\"paragraph\",\"data\":{\"text\":\"This fits the same operating logic as \u003Ca href=\\\"\u002Fenterprise\u002Freference-models\u002Fdelivery-and-change\\\">Delivery &amp; Change\u003C\u002Fa> and \u003Ca href=\\\"\u002Fenterprise\u002Freference-models\u002Fdigital-platform\\\">AI-ready platform architecture\u003C\u002Fa>: stable delivery requires repeatable controls, not heroic manual fixes.\"},\"tunes\":{}},{\"id\":\"mOhI-jF1zx\",\"type\":\"header\",\"data\":{\"text\":\"Conclusion: Production Begins Where the Demo Ends\",\"level\":2},\"tunes\":{}},{\"id\":\"3mXK980w23\",\"type\":\"paragraph\",\"data\":{\"text\":\"Ollama can start the journey. It makes local model execution accessible and lowers the barrier to experimentation. That is valuable. But the production application begins where the demo ends.\"},\"tunes\":{}},{\"id\":\"9O27eQ_Svm\",\"type\":\"paragraph\",\"data\":{\"text\":\"The model is only one replaceable component. The real product is the controlled system around it: ingestion, permissions, retrieval, prompts, provider routing, evaluation, logs, monitoring, deployment, backup, and user workflow. That is where privacy becomes real, quality becomes measurable, and business value becomes repeatable.\"},\"tunes\":{}},{\"id\":\"4Lyy3E4ZsF\",\"type\":\"paragraph\",\"data\":{\"text\":\"A serious Open-LLM application is built through engineering discipline, not by running a local model once. Ollama can start the journey, but the production application begins where the demo ends.\"},\"tunes\":{}},{\"id\":\"eKPRtinG5L\",\"type\":\"paragraph\",\"data\":{\"text\":\"Theme:\"},\"tunes\":{}},{\"id\":\"GMa6lE1NNl\",\"type\":\"paragraph\",\"data\":{\"text\":\"Ollama, Open LLM, RAG, pgvector, Qdrant, Local AI, LLMOps, Provider Abstraction, Enterprise AI Architecture\"},\"tunes\":{}}],\"version\":\"2.31.5\"}",{"time":674,"blocks":675,"version":997},1782679301267,[676,679,683,687,691,695,699,703,707,715,720,724,728,750,754,758,762,766,780,784,788,792,796,800,813,817,821,843,847,851,855,859,863,867,870,874,878,900,904,908,912,916,927,931,935,939,943,953,957,961,965,969,973,977,981,985,989,993],{"id":231,"data":677,"type":42,"tunes":678},{"text":671,"level":40},{},{"id":236,"data":680,"type":239,"tunes":682},{"text":681},"Tools like \u003Cb>Ollama\u003C\u002Fb> have made local LLM experimentation almost frictionless. Install the runtime, pull a model, send a prompt, and a local assistant answers in seconds. That is useful. It is also the easiest part of the journey.",{},{"id":242,"data":684,"type":239,"tunes":686},{"text":685},"A terminal demo is not an application. A local model is not a product. A productive Open-LLM application needs controlled data ingestion, retrieval, permissions, evaluation, logging, provider abstraction, deployment discipline, and a user workflow that solves a real business problem.",{},{"id":247,"data":688,"type":239,"tunes":690},{"text":689},"The core thesis is simple: \u003Cb>Ollama is a runtime, not the product\u003C\u002Fb>. The product lives in the application layer around the model. That layer decides which documents are visible, which chunks are retrieved, which prompts are used, how answers are evaluated, how failures are logged, and whether the system can be trusted in daily work.",{},{"id":252,"data":692,"type":239,"tunes":694},{"text":693},"This is where local AI becomes interesting for teams building private assistants, internal knowledge tools, LLM-enabled SaaS features, or enterprise workflow copilots. The model can run locally, but privacy, reliability, and business value only exist if the full system is engineered properly.",{},{"id":257,"data":696,"type":42,"tunes":698},{"text":697,"level":260},"Ollama Is a Runtime, Not a Product",{},{"id":263,"data":700,"type":239,"tunes":702},{"text":701},"Ollama is excellent for running and serving open models locally. It is especially strong for exploration, developer workflows, PoCs, and teams that want to test model behavior without immediately committing to a cloud provider. It exposes local model interaction through APIs and compatibility layers that make it easier to connect existing OpenAI-style tooling.",{},{"id":268,"data":704,"type":239,"tunes":706},{"text":705},"That does not mean Ollama solves the application problem. It does not automatically know which company documents a user may read. It does not create tenant isolation, document versioning, audit trails, source attribution, evaluation datasets, or business-specific UI workflows. Those responsibilities stay with the application architecture.",{},{"id":273,"data":708,"type":281,"tunes":714},{"meta":709,"items":710,"style":280},{},[711,712,713],"\u003Cb>Ollama helps with:\u003C\u002Fb> local model execution, fast experimentation, API-based model access, offline-first PoCs, and developer productivity.","\u003Cb>Ollama does not solve by itself:\u003C\u002Fb> access control, RAG quality, document lifecycle, tenant boundaries, evaluation, audit logging, monitoring, fallback behavior, or enterprise workflow design.","\u003Cb>The architectural mistake:\u003C\u002Fb> treating local inference as if it were already a secure AI product.",{},{"id":284,"data":716,"type":289,"tunes":719},{"text":717,"caption":718,"alignment":288},"The model is the easiest part. The application layer is where the product value lives.","Architecture principle",{},{"id":292,"data":721,"type":42,"tunes":723},{"text":722,"level":260},"Demo, PoC, and Production Are Different Stages",{},{"id":297,"data":725,"type":239,"tunes":727},{"text":726},"Many Open-LLM initiatives fail because teams confuse a working demo with a production capability. The difference is not cosmetic. Each maturity level has a different goal, different risk profile, and different engineering requirement.",{},{"id":302,"data":729,"type":325,"tunes":749},{"content":730,"stretched":43,"withHeadings":14},[731,736,740,744],[732,733,734,735],"Stage","What it proves","Typical setup","What is still missing",[311,737,738,739],"A model can answer a prompt locally.","Ollama on a laptop, one model, one prompt, no real data control.","Permissions, retrieval, logs, evaluation, deployment, monitoring, user workflow.",[316,741,742,743],"A small controlled system can answer questions over selected documents or workflows.","Basic web UI, ingestion script, vector search, limited users, limited document scope.","Scale, governance, test datasets, fallback strategy, auditability, support model.",[745,746,747,748],"Production","Multiple users can use the system safely and repeatedly inside real work.","Authenticated app, tenant isolation, RAG pipeline, observability, provider abstraction, backups, release process.","Continuous improvement, evaluation expansion, operational maturity.",{},{"id":328,"data":751,"type":239,"tunes":753},{"text":752},"A PoC can be intentionally small. Production cannot be intentionally blind. Once real users, private data, business decisions, and compliance expectations enter the system, the architecture must become explicit.",{},{"id":333,"data":755,"type":42,"tunes":757},{"text":756,"level":260},"Where RAG Fits In",{},{"id":338,"data":759,"type":239,"tunes":761},{"text":760},"\u003Cb>Retrieval-Augmented Generation\u003C\u002Fb> is the most common bridge between a language model and private business knowledge. The model does not magically know internal documents, contracts, tickets, product specs, or runbooks. The application must retrieve relevant context before asking the model to answer.",{},{"id":343,"data":763,"type":239,"tunes":765},{"text":764},"A practical RAG flow looks like this:",{},{"id":348,"data":767,"type":281,"tunes":779},{"meta":768,"items":769,"style":362},{"counterType":351},[770,771,772,773,774,775,776,777,778],"Documents are uploaded or synchronized from controlled sources.","Text is extracted, cleaned, and split into chunks.","Chunks receive metadata such as tenant, owner, document version, source URL, access scope, and timestamp.","Embeddings are generated for each chunk.","Vectors are stored in pgvector, Qdrant, or another retrieval layer.","At query time, the application checks permissions before retrieval.","Relevant chunks are retrieved with similarity search and metadata filters.","The prompt builder injects selected context into the model request.","The answer is generated with citations, confidence boundaries, and no-answer fallback when retrieval is weak.",{},{"id":365,"data":781,"type":239,"tunes":783},{"text":782},"RAG reduces hallucinations, but it does not eliminate them. A poor chunking strategy, weak metadata, missing permission filters, low-quality embeddings, or overly broad retrieval can still produce convincing but wrong answers. Serious RAG systems need thresholds, citations, retrieval logs, and evaluation.",{},{"id":370,"data":785,"type":42,"tunes":787},{"text":786,"level":260},"A Practical Local Open-LLM Architecture",{},{"id":375,"data":789,"type":239,"tunes":791},{"text":790},"A realistic production path does not require exotic infrastructure. For many teams, a strong first architecture can use a normal web stack: Nuxt for the frontend, a Nitro or Node API, PostgreSQL as the system of record, pgvector for retrieval, Ollama as a local runtime, Prisma for data access, and background workers for ingestion and embeddings.",{},{"id":380,"data":793,"type":383,"tunes":795},{"code":794},"User question | v\nFrontend UI | v\nAPI \u002F Backend | +--> Authentication +--> Tenant and role permission check | v\nRetrieval layer | +--> PostgreSQL metadata +--> pgvector or Qdrant vector search +--> similarity threshold | v\nPrompt builder | +--> system prompt +--> retrieved chunks +--> source references +--> no-answer rules | v\nLLM provider abstraction | +--> Ollama \u002F local model +--> cloud model fallback +--> future self-hosted runtime | v\nAnswer with sources | v\nLogs, traces, metrics, evaluation dataset",{},{"id":386,"data":797,"type":239,"tunes":799},{"text":798},"This architecture keeps the model replaceable. Ollama can be the first runtime, but the system should not be locked to one inference engine. A clean architecture separates user workflow, retrieval, prompt construction, model provider, and observability.",{},{"id":391,"data":801,"type":281,"tunes":812},{"meta":802,"items":803,"style":280},{},[804,805,806,807,808,809,810,811],"\u003Cb>Frontend:\u003C\u002Fb> Nuxt or another web UI for authenticated user workflows.","\u003Cb>Backend\u002FAPI:\u003C\u002Fb> Nitro, Node.js, or FastAPI for orchestration, permissions, and provider routing.","\u003Cb>Database:\u003C\u002Fb> PostgreSQL for documents, users, tenants, roles, prompts, logs, and metadata.","\u003Cb>Vector search:\u003C\u002Fb> pgvector for simple integrated retrieval or Qdrant when vector search becomes a dedicated service.","\u003Cb>Model runtime:\u003C\u002Fb> Ollama for local execution, llama.cpp server for lightweight serving, or vLLM for higher-throughput GPU serving.","\u003Cb>Storage:\u003C\u002Fb> local filesystem or S3-compatible object storage for uploaded files and extracted artifacts.","\u003Cb>Workers:\u003C\u002Fb> background ingestion, chunking, embedding, re-indexing, and document version processing.","\u003Cb>Observability:\u003C\u002Fb> logs, metrics, prompt traces, retrieval traces, latency tracking, and evaluation results.",{},{"id":405,"data":814,"type":42,"tunes":816},{"text":815,"level":260},"The Production Readiness Checklist",{},{"id":410,"data":818,"type":239,"tunes":820},{"text":819},"The following checklist is the difference between a local model demo and a usable Open-LLM application:",{},{"id":415,"data":822,"type":281,"tunes":842},{"meta":823,"items":824,"style":280},{},[825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841],"Every document and chunk has a tenant_id.","Retrieval is blocked until user and role permissions are checked.","Documents include metadata, source, owner, version, lifecycle state, and retention policy.","Chunking strategy is documented and tested against real documents.","Embedding model selection is explicit and versioned.","Vector index configuration is reproducible.","Similarity threshold prevents weak context from being used blindly.","Answers include source citations or source references where possible.","No-answer fallback is used when retrieval confidence is too low.","Prompt templates are versioned and release-controlled.","LLM provider abstraction is built from the start.","Structured output is validated before downstream use.","Evaluation dataset contains real questions, expected sources, and unacceptable answers.","Retrieval logs show which chunks were used for each answer.","Latency, token usage, GPU\u002FCPU load, and error rates are monitored.","Privacy and retention rules cover uploads, extracted text, chunks, embeddings, prompts, responses, and logs.","Deployment, backup, restore, rollback, and incident paths are documented.",{},{"id":438,"data":844,"type":239,"tunes":846},{"text":845},"This connects directly with \u003Ca href=\"\u002Fenterprise\">Enterprise Delivery OS\u003C\u002Fa>: useful AI is not only a model decision. It is delivery discipline, evidence, controls, metrics, and operational ownership.",{},{"id":443,"data":848,"type":42,"tunes":850},{"text":849,"level":260},"Provider Abstraction: Do Not Marry One Model",{},{"id":448,"data":852,"type":239,"tunes":854},{"text":853},"Local models are valuable for privacy-sensitive use cases, offline scenarios, cost control, and internal experimentation. Cloud models may still be stronger for difficult reasoning, coding, multilingual accuracy, or multimodal work. A production application should not treat any one model as permanent infrastructure.",{},{"id":453,"data":856,"type":239,"tunes":858},{"text":857},"A provider abstraction allows the same application workflow to call Ollama, OpenAI, Gemini, Anthropic, Mistral, vLLM, or another self-hosted endpoint without rewriting the product. The application decides the provider based on use case, data sensitivity, latency, cost, and quality requirements.",{},{"id":458,"data":860,"type":383,"tunes":862},{"code":861},"type LlmProvider = \"ollama\" | \"openai\" | \"gemini\" | \"anthropic\" | \"vllm\"; type ChatInput = { provider: LlmProvider; model: string; tenantId: string; userId: string; question: string; context: Array\u003C{ chunkId: string; sourceTitle: string; text: string; }>;\n}; async function chat(input: ChatInput) { await assertUserCanAccessContext(input.userId, input.context); const messages = buildRagMessages({ question: input.question, context: input.context, rules: [ \"Answer only from provided context when possible.\", \"Cite source titles.\", \"Say when the context is insufficient.\" ] }); return llm.chat({ provider: input.provider, model: input.model, messages, trace: { tenantId: input.tenantId, userId: input.userId, promptVersion: \"rag-v3.2\" } });\n}",{},{"id":463,"data":864,"type":239,"tunes":866},{"text":865},"The key idea is not the TypeScript syntax. The key idea is the boundary. The application owns permissions, retrieval, prompt rules, tracing, and evaluation. The provider only produces the model output.",{},{"id":468,"data":868,"type":42,"tunes":869},{"text":470,"level":260},{},{"id":473,"data":871,"type":239,"tunes":873},{"text":872},"For many Open-LLM applications, the vector store decision is simple at the beginning: if PostgreSQL is already your system of record, \u003Cb>pgvector\u003C\u002Fb> is a strong starting point. It keeps metadata, permissions, document records, and vectors close together. That reduces operational complexity.",{},{"id":478,"data":875,"type":239,"tunes":877},{"text":876},"\u003Cb>Qdrant\u003C\u002Fb> becomes more attractive when vector search needs to become a dedicated service: larger retrieval scale, advanced filtering, specialized indexing, hybrid search patterns, or independent scaling of retrieval infrastructure.",{},{"id":483,"data":879,"type":325,"tunes":899},{"content":880,"stretched":43,"withHeadings":14},[881,886,890,894],[882,883,884,885],"Option","Best fit","Strengths","Trade-offs",[492,887,888,889],"PoCs, early production, systems already built on PostgreSQL.","Single database, SQL joins, ACID behavior, simpler operations, metadata close to vectors.","Less specialized than a dedicated vector database at large retrieval scale.",[497,891,892,893],"Dedicated semantic search services, larger vector workloads, advanced filtering and retrieval patterns.","Purpose-built vector search, strong filtering model, independent scaling, retrieval-focused APIs.","Adds another infrastructure component and operational surface.",[895,896,897,898],"Start simple","Most enterprise teams beginning with private RAG applications.","Lower architecture risk, faster delivery, easier audit path.","May need migration later if retrieval becomes central and high-scale.",{},{"id":508,"data":901,"type":239,"tunes":903},{"text":902},"A practical rule: start with pgvector when PostgreSQL already owns your business data and the retrieval scale is moderate. Move to Qdrant when vector search becomes a product capability of its own.",{},{"id":513,"data":905,"type":42,"tunes":907},{"text":906,"level":260},"Security and Privacy Reality Check",{},{"id":518,"data":909,"type":239,"tunes":911},{"text":910},"Local inference does not automatically mean secure AI. It only means the model execution can happen locally. The full data path still matters: uploaded files, extracted text, chunks, embeddings, logs, prompts, responses, backups, developer access, admin tools, and analytics exports.",{},{"id":523,"data":913,"type":239,"tunes":915},{"text":914},"Embeddings also deserve care. They are not the original document, but they still represent information derived from sensitive content. Treat them as part of the protected data path, especially when they are tied to metadata, source records, user queries, or tenant identifiers.",{},{"id":528,"data":917,"type":281,"tunes":926},{"meta":918,"items":919,"style":280},{},[920,921,922,923,924,925],"Do not index documents before access rules are known.","Do not retrieve chunks without tenant and role filters.","Do not log full prompts and responses without retention rules.","Do not send sensitive context to a cloud model unless the policy allows it.","Do not assume that local equals GDPR-compliant; compliance depends on the complete processing design.","Do not let evaluation and debugging copies become uncontrolled shadow datasets.",{},{"id":540,"data":928,"type":239,"tunes":930},{"text":929},"This is where \u003Ca href=\"\u002Fblog\u002Fenterprise-grade-multi-tenant-architecture-for-an-international-platform\">multi-instance SaaS architecture\u003C\u002Fa> matters. If tenants, roles, data ownership, and operational boundaries are weak, adding a local LLM can amplify risk instead of reducing it.",{},{"id":545,"data":932,"type":42,"tunes":934},{"text":933,"level":260},"Evaluation Is Not Optional",{},{"id":550,"data":936,"type":239,"tunes":938},{"text":937},"A production Open-LLM application needs an evaluation loop. Without it, teams only have anecdotes. A few good demo answers do not prove that retrieval works, that the prompt is stable, or that the model behaves safely across real usage.",{},{"id":555,"data":940,"type":239,"tunes":942},{"text":941},"A minimal evaluation dataset should include real user questions, expected source documents, unacceptable answers, no-answer cases, and regression tests for previous failures. Every change to chunking, embeddings, prompts, model provider, or retrieval threshold should be tested against that dataset.",{},{"id":560,"data":944,"type":281,"tunes":952},{"meta":945,"items":946,"style":280},{},[947,948,949,950,951],"\u003Cb>Retrieval evaluation:\u003C\u002Fb> Did the system fetch the right source chunks?","\u003Cb>Answer evaluation:\u003C\u002Fb> Did the answer stay grounded in the retrieved context?","\u003Cb>Safety evaluation:\u003C\u002Fb> Did the system avoid forbidden disclosures or unauthorized data?","\u003Cb>Operational evaluation:\u003C\u002Fb> Did latency, failure rate, and cost stay inside acceptable limits?","\u003Cb>Regression evaluation:\u003C\u002Fb> Did a model or prompt upgrade break previously correct behavior?",{},{"id":571,"data":954,"type":239,"tunes":956},{"text":955},"RAG reduces hallucinations, but it does not remove the need for evaluation. Evaluation is the control loop that turns a clever prototype into an improving product.",{},{"id":576,"data":958,"type":42,"tunes":960},{"text":959,"level":260},"Deployment Discipline: The Model Is a Release Event",{},{"id":581,"data":962,"type":239,"tunes":964},{"text":963},"Changing a model is not a harmless configuration tweak. It can change answer style, reasoning behavior, language quality, latency, token usage, citation discipline, and failure modes. In production, model upgrades should be handled like release events.",{},{"id":586,"data":966,"type":239,"tunes":968},{"text":967},"That means versioning prompts, embedding models, retrieval settings, model identifiers, provider routes, and evaluation results. It also means having rollback logic. If a new model causes worse retrieval-grounded answers or breaks structured output, the system needs a controlled path back to the known-good configuration.",{},{"id":591,"data":970,"type":239,"tunes":972},{"text":971},"This fits the same operating logic as \u003Ca href=\"\u002Fenterprise\u002Freference-models\u002Fdelivery-and-change\">Delivery &amp; Change\u003C\u002Fa> and \u003Ca href=\"\u002Fenterprise\u002Freference-models\u002Fdigital-platform\">AI-ready platform architecture\u003C\u002Fa>: stable delivery requires repeatable controls, not heroic manual fixes.",{},{"id":596,"data":974,"type":42,"tunes":976},{"text":975,"level":260},"Conclusion: Production Begins Where the Demo Ends",{},{"id":601,"data":978,"type":239,"tunes":980},{"text":979},"Ollama can start the journey. It makes local model execution accessible and lowers the barrier to experimentation. That is valuable. But the production application begins where the demo ends.",{},{"id":606,"data":982,"type":239,"tunes":984},{"text":983},"The model is only one replaceable component. The real product is the controlled system around it: ingestion, permissions, retrieval, prompts, provider routing, evaluation, logs, monitoring, deployment, backup, and user workflow. That is where privacy becomes real, quality becomes measurable, and business value becomes repeatable.",{},{"id":611,"data":986,"type":239,"tunes":988},{"text":987},"A serious Open-LLM application is built through engineering discipline, not by running a local model once. Ollama can start the journey, but the production application begins where the demo ends.",{},{"id":616,"data":990,"type":239,"tunes":992},{"text":991},"Theme:",{},{"id":621,"data":994,"type":239,"tunes":996},{"text":995},"Ollama, Open LLM, RAG, pgvector, Qdrant, Local AI, LLMOps, Provider Abstraction, Enterprise AI Architecture",{},"2.31.5","Running a local model with Ollama is easy. Building a production-ready Open-LLM application is harder: it requires RAG, access control, provider abstraction, evaluation, logging, deployment discipline and a controlled application layer around the model.\n",{"lang":7,"title":224,"content":226,"contentJson":1000,"excerpt":626},{"time":228,"blocks":1001,"version":625},[1002,1005,1008,1011,1014,1017,1020,1023,1026,1031,1034,1037,1040,1048,1051,1054,1057,1060,1065,1068,1071,1074,1077,1080,1085,1088,1091,1096,1099,1102,1105,1108,1111,1114,1117,1120,1123,1131,1134,1137,1140,1143,1148,1151,1154,1157,1160,1165,1168,1171,1174,1177,1180,1183,1186,1189,1192,1195],{"id":231,"data":1003,"type":42,"tunes":1004},{"text":233,"level":40},{},{"id":236,"data":1006,"type":239,"tunes":1007},{"text":238},{},{"id":242,"data":1009,"type":239,"tunes":1010},{"text":244},{},{"id":247,"data":1012,"type":239,"tunes":1013},{"text":249},{},{"id":252,"data":1015,"type":239,"tunes":1016},{"text":254},{},{"id":257,"data":1018,"type":42,"tunes":1019},{"text":259,"level":260},{},{"id":263,"data":1021,"type":239,"tunes":1022},{"text":265},{},{"id":268,"data":1024,"type":239,"tunes":1025},{"text":270},{},{"id":273,"data":1027,"type":281,"tunes":1030},{"meta":1028,"items":1029,"style":280},{},[277,278,279],{},{"id":284,"data":1032,"type":289,"tunes":1033},{"text":286,"caption":287,"alignment":288},{},{"id":292,"data":1035,"type":42,"tunes":1036},{"text":294,"level":260},{},{"id":297,"data":1038,"type":239,"tunes":1039},{"text":299},{},{"id":302,"data":1041,"type":325,"tunes":1047},{"content":1042,"stretched":43,"withHeadings":14},[1043,1044,1045,1046],[306,307,308,309],[311,312,313,314],[316,317,318,319],[321,322,323,324],{},{"id":328,"data":1049,"type":239,"tunes":1050},{"text":330},{},{"id":333,"data":1052,"type":42,"tunes":1053},{"text":335,"level":260},{},{"id":338,"data":1055,"type":239,"tunes":1056},{"text":340},{},{"id":343,"data":1058,"type":239,"tunes":1059},{"text":345},{},{"id":348,"data":1061,"type":281,"tunes":1064},{"meta":1062,"items":1063,"style":362},{"counterType":351},[353,354,355,356,357,358,359,360,361],{},{"id":365,"data":1066,"type":239,"tunes":1067},{"text":367},{},{"id":370,"data":1069,"type":42,"tunes":1070},{"text":372,"level":260},{},{"id":375,"data":1072,"type":239,"tunes":1073},{"text":377},{},{"id":380,"data":1075,"type":383,"tunes":1076},{"code":382},{},{"id":386,"data":1078,"type":239,"tunes":1079},{"text":388},{},{"id":391,"data":1081,"type":281,"tunes":1084},{"meta":1082,"items":1083,"style":280},{},[395,396,397,398,399,400,401,402],{},{"id":405,"data":1086,"type":42,"tunes":1087},{"text":407,"level":260},{},{"id":410,"data":1089,"type":239,"tunes":1090},{"text":412},{},{"id":415,"data":1092,"type":281,"tunes":1095},{"meta":1093,"items":1094,"style":280},{},[419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435],{},{"id":438,"data":1097,"type":239,"tunes":1098},{"text":440},{},{"id":443,"data":1100,"type":42,"tunes":1101},{"text":445,"level":260},{},{"id":448,"data":1103,"type":239,"tunes":1104},{"text":450},{},{"id":453,"data":1106,"type":239,"tunes":1107},{"text":455},{},{"id":458,"data":1109,"type":383,"tunes":1110},{"code":460},{},{"id":463,"data":1112,"type":239,"tunes":1113},{"text":465},{},{"id":468,"data":1115,"type":42,"tunes":1116},{"text":470,"level":260},{},{"id":473,"data":1118,"type":239,"tunes":1119},{"text":475},{},{"id":478,"data":1121,"type":239,"tunes":1122},{"text":480},{},{"id":483,"data":1124,"type":325,"tunes":1130},{"content":1125,"stretched":43,"withHeadings":14},[1126,1127,1128,1129],[487,488,489,490],[492,493,494,495],[497,498,499,500],[502,503,504,505],{},{"id":508,"data":1132,"type":239,"tunes":1133},{"text":510},{},{"id":513,"data":1135,"type":42,"tunes":1136},{"text":515,"level":260},{},{"id":518,"data":1138,"type":239,"tunes":1139},{"text":520},{},{"id":523,"data":1141,"type":239,"tunes":1142},{"text":525},{},{"id":528,"data":1144,"type":281,"tunes":1147},{"meta":1145,"items":1146,"style":280},{},[532,533,534,535,536,537],{},{"id":540,"data":1149,"type":239,"tunes":1150},{"text":542},{},{"id":545,"data":1152,"type":42,"tunes":1153},{"text":547,"level":260},{},{"id":550,"data":1155,"type":239,"tunes":1156},{"text":552},{},{"id":555,"data":1158,"type":239,"tunes":1159},{"text":557},{},{"id":560,"data":1161,"type":281,"tunes":1164},{"meta":1162,"items":1163,"style":280},{},[564,565,566,567,568],{},{"id":571,"data":1166,"type":239,"tunes":1167},{"text":573},{},{"id":576,"data":1169,"type":42,"tunes":1170},{"text":578,"level":260},{},{"id":581,"data":1172,"type":239,"tunes":1173},{"text":583},{},{"id":586,"data":1175,"type":239,"tunes":1176},{"text":588},{},{"id":591,"data":1178,"type":239,"tunes":1179},{"text":593},{},{"id":596,"data":1181,"type":42,"tunes":1182},{"text":598,"level":260},{},{"id":601,"data":1184,"type":239,"tunes":1185},{"text":603},{},{"id":606,"data":1187,"type":239,"tunes":1188},{"text":608},{},{"id":611,"data":1190,"type":239,"tunes":1191},{"text":613},{},{"id":616,"data":1193,"type":239,"tunes":1194},{"text":618},{},{"id":621,"data":1196,"type":239,"tunes":1197},{"text":623},{},"Post erfolgreich abgerufen",{"items":1200,"source":1283,"manualIds":1284,"manualMatchedIds":1285},[1201,1208,1214,1221,1228,1235,1242,1249,1256,1263,1270,1276],{"id":1202,"slug":1203,"title":1204,"excerpt":1205,"featuredImage":1206,"publishedAt":1207},"381","enterprise-grade-multi-tenant-architecture-for-an-international-platform","Višezakupna arhitektura korporativnog nivoa za međunarodnu platformu","Loving Rocks je platforma za venčanja poslovne klase, dizajnirana sa istinskom više-zakupnom arhitekturom, izolovanim bazama podataka po zakupcu i ugrađenom internacionalizacijom za globalnu skalabilnost, bezbednost i dugoročnu operativnu stabilnost.","\u002Fuploads\u002F2026\u002F01\u002Fenterprise-grade-multi-tenant-architecture-for-an-international-platform-1769789121298-b6v7ak.webp","2026-01-30T12:04:00.000Z",{"id":1209,"slug":658,"title":1210,"excerpt":1211,"featuredImage":1212,"publishedAt":1213},"434","Sveobuhvatan vodič za Evaluation Harness: Ovladavanje evaluacijom performansi LLM-ova","Ovaj vodič pruža detaljan pregled Evaluation Harness-a, ključnog okvira za rigoroznu procenu sposobnosti velikih jezičkih modela (LLM) u korporativnim LLMOps procesima. Naučite podešavanje, najbolje prakse i napredne tehnike kako biste osigurali pouzdano benčmarkovanje i optimizaciju modela.","\u002Fuploads\u002F2026\u002F04\u002Fevaluation-harness-1775466944495-4s0xv2.webp","2026-03-01T17:50:00.000Z",{"id":1215,"slug":1216,"title":1217,"excerpt":1218,"featuredImage":1219,"publishedAt":1220},"477","computer-use-agents-why-a-successful-demo-can-still-be-an-unreliable-system","Agenti za korišćenje računara: Zašto uspešan demo i dalje može biti nepouzdan sistem","Agenti za korišćenje računara sada mogu da završe impresivne radne tokove u pregledaču i na radnoj površini, ali jedno uspešno izvršavanje dokazuje sposobnost—ne pouzdanost. Ovaj članak pokazuje kako testirati ponovljivost, robusnost u odnosu na okruženje, kontrolu dugog horizonta, svest o stanju, verifikaciju ishoda i bezbedno upravljanje ciljevima.","\u002Fuploads\u002F2026\u002F09\u002Fcomputer-use-agents-why-a-successful-demo-can-still-be-an-unreliable-system-1790352854690-75qnrg.webp","2026-09-25T12:13:00.000Z",{"id":1222,"slug":1223,"title":1224,"excerpt":1225,"featuredImage":1226,"publishedAt":1227},"479","where-does-an-llm-get-its-data-rag-data-sources-in-python","Odakle LLM dobija svoje podatke? RAG izvori podataka u Python-u","LLM ne zna magično vaše fajlove, baze podataka ili API-je. Ovaj praktični nastavak RAG serije pokazuje, uz jednostavan Python, kako eksterni podaci postaju dokazi koji se mogu pronaći: od tekstualnih fajlova i SQL-a do pretrage punog teksta, embeddinga, sastavljanja konteksta i konačnog LLM poziva.","\u002Fuploads\u002F2026\u002F09\u002Fwhere-does-an-llm-get-its-data-rag-data-sources-in-python-1790517200521-nfsi5i.webp","2026-09-27T05:51:00.000Z",{"id":1229,"slug":1230,"title":1231,"excerpt":1232,"featuredImage":1233,"publishedAt":1234},"493","mlops-vs-llmops-what-changes-when-the-model-is-an-llm","MLOps vs LLMOps: Šta se menja kada je model LLM","MLOps upravlja sistemima mašinskog učenja; LLMOps proširuje te prakse na promptove, kontekst, pretragu, provajdere, alate, evaluacije i ponašanje u vreme izvršavanja oko velikih jezičkih modela.","\u002Fuploads\u002F2026\u002F10\u002Fmlops-vs-llmops-what-changes-when-the-model-is-an-llm-1791487319869-2v7hxo.webp","2026-10-08T15:20:00.000Z",{"id":1236,"slug":1237,"title":1238,"excerpt":1239,"featuredImage":1240,"publishedAt":1241},"364","tipps-fuer-die-verbesserung-der-seo-suchmaschinenoptimierung","Ovladavanje SEO radnim tokom: Ključne strategije optimizacije za organski rast","Strukturiran SEO tok posla je ključan za održiv organski rast. Naučite deset osnovnih strategija, od istraživanja ključnih reči i tehničke optimizacije do kvaliteta sadržaja i analize performansi.","\u002Fuploads\u002F2026\u002F03\u002Ftipps-fuer-die-verbesserung-der-seo-suchmaschinenoptimierung-1774866098131-hwkzrg.webp","2024-01-26T06:35:00.000Z",{"id":1243,"slug":1244,"title":1245,"excerpt":1246,"featuredImage":1247,"publishedAt":1248},"384","new-qwen-3-5-plus","Novi Qwen 3.5-Plus: AI otvorenog koda je upravo postao ozbiljan.","Otkrijte revolucionarne funkcije i prednosti Alibabinog Qwen 3.5-Plus modela, AI otvorenog koda koji menja pravila igre za programere.","\u002Fuploads\u002F2026\u002F02\u002Fnew-qwen-3-5-plus-1771515512741-dcbi9p.webp","2026-02-19T10:23:00.000Z",{"id":1250,"slug":1251,"title":1252,"excerpt":1253,"featuredImage":1254,"publishedAt":1255},"475","managed-agent-harness-vs-self-hosted-agent-loop-what-you-gain-what-you-lose","Upravljani harness za agente naspram samostalno hostovane petlje agenta: Šta dobijate, šta gubite","“Samostalno hostovani agent” može značiti veoma različite arhitekture. Ovaj vodič razgraničava upravljani harness, samostalno hostovano okruženje za izvršavanje i potpuno samostalno upravljanu petlju agenta—i pokazuje koja je granica kontrole timovima zapravo potrebna.","\u002Fuploads\u002F2026\u002F09\u002Fmanaged-agent-harness-vs-self-hosted-agent-loop-what-you-gain-what-you-lose-1790352403475-kj10jh.webp","2026-09-25T12:05:00.000Z",{"id":1257,"slug":1258,"title":1259,"excerpt":1260,"featuredImage":1261,"publishedAt":1262},"469","rag-failed-but-which-layer-actually-failed-a-diagnostic-method","RAG nije uspeo — ali koji sloj je zapravo zakazao? Dijagnostička metoda","Kada je RAG odgovor pogrešan, kriviti pretragu ili model je previše neodređeno. Ova dijagnostička metoda izoluje pokrivenost izvora, konstrukciju upita, pretragu, rangiranje, sastavljanje konteksta, generisanje, pripisivanje dokaza i svežinu—tako da se stvarni kvar može reprodukovati i ispraviti.","\u002Fuploads\u002F2026\u002F09\u002Frag-failed-but-which-layer-actually-failed-a-diagnostic-method-1790350847177-pior4c.webp","2026-09-24T19:39:00.000Z",{"id":1264,"slug":1265,"title":1266,"excerpt":1267,"featuredImage":1268,"publishedAt":1269},"361","model-view-controller-mvc","Model-View-Controller (MVC): Strukturna okosnica modernih veb aplikacija","Model-View-Controller, obično skraćeno kao MVC, ostaje jedan od najtrajnijih arhitektonskih obrazaca u razvoju softvera. On timovima pruža praktičan način da razdvoje poslovnu logiku, prezentaciju i interakciju korisnika kako bi aplikacije ostale lakše za izgradnju, proširenje, testiranje i održavanje. Ovaj članak objašnjava šta je MVC, zašto je i dalje važan, gde se uklapa u današnje veb stekove i kako se povezuje sa širom arhitekturom platforme, kvalitetom isporuke, strategijom migracije i operativnom zrelošću.","\u002Fuploads\u002F2026\u002F03\u002Fmodel-view-controller-mvc-1774872805793-0bjubu.webp","2023-04-12T12:57:00.000Z",{"id":1271,"slug":1272,"title":1273,"excerpt":1274,"featuredImage":1247,"publishedAt":1275},"445","qwen-3-6-in-production-release-runbook-ai-rollback-and-llmops-versioning","Qwen 3.6 u produkciji: Runbook za izdavanje, AI rollback i LLMOps verziranje","Qwen 3.6 nije samo još jedna nadogradnja modela. To je istovremeno događaj objavljivanja, scenario povratka na prethodnu verziju i problem verziranja. Ovaj članak objašnjava kako Qwen 3.6 treba tretirati u produkciji kroz LLMOps disciplinu, sledljivost promptova i modela, kontrolisano uvođenje i spremnost za povratak na prethodnu verziju zasnovanu na dokazima.","2026-05-04T02:49:00.000Z",{"id":1277,"slug":1278,"title":1279,"excerpt":1280,"featuredImage":1281,"publishedAt":1282},"468","ai-agent-memory-is-not-rag-how-to-separate-memory-retrieval-state-and-context","Memorija AI agenta nije RAG: Kako razdvojiti memoriju, pronalaženje, stanje i kontekst","Memorija agenta, RAG, stanje i kontekst često se koriste kao da su međusobno zamenjivi. Oni to nisu. Ovaj praktični arhitektonski model razdvaja ova četiri sloja, pokazuje gde svaki pripada i objašnjava šta se kvari kada ih sistemi stope u jedno.","\u002Fuploads\u002F2026\u002F09\u002Fai-agent-memory-is-not-rag-how-to-separate-memory-retrieval-state-and-context-1790350560308-np0xy6.webp","2026-09-25T11:34:00.000Z","fallback",[],[]]