import%20marimo%0A%0A__generated_with%20%3D%20%220.13.7%22%0Aapp%20%3D%20marimo.App()%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20LangChain%20with%20Ollama%3A%20A%20Step-by-Step%20Integration%20Tutorial%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%20Installation%20and%20Setup%0A%0A%20%20%20%20%23%23%23%20Installation%0A%0A%20%20%20%20Ollama%20needs%20to%20be%20installed%20separately%20since%20it's%20a%20standalone%20service%20that%20runs%20locally%3A%0A%0A%20%20%20%20-%20For%20macOS%3A%20Download%20from%20%5Bollama.com%5D(https%3A%2F%2Follama.com)%20-%20this%20installs%20both%20the%20CLI%20tool%20and%20service%0A%20%20%20%20-%20For%20Linux%3A%20%60curl%20-fsSL%20https%3A%2F%2Follama.com%2Finstall.sh%20%7C%20sh%60%20-%20this%20script%20sets%20up%20both%20the%20binary%20and%20system%20service%0A%20%20%20%20-%20For%20Windows%3A%20Download%20Windows%20(Preview)%20from%20%5Bollama.com%5D(https%3A%2F%2Follama.com)%20-%20still%20in%20preview%20mode%20with%20some%20limitations%0A%0A%20%20%20%20Start%20the%20Ollama%20server%3A%0A%0A%20%20%20%20%60%60%60bash%0A%20%20%20%20ollama%20serve%0A%20%20%20%20%60%60%60%0A%0A%20%20%20%20%23%23%23%20Pulling%20Models%20with%20Ollama%0A%0A%20%20%20%20Before%20using%20any%20model%20with%20LangChain%2C%20you%20need%20to%20pull%20it%20to%20your%20local%20machine%3A%0A%0A%20%20%20%20%60%60%60bash%0A%20%20%20%20ollama%20pull%20qwen3%3A0.6b%0A%20%20%20%20%60%60%60%0A%0A%20%20%20%20Once%20it%20is%20downloaded%2C%20you%20can%20serve%20the%20model%20with%20the%20following%20command%3A%0A%0A%20%20%20%20%60%60%60bash%0A%20%20%20%20ollama%20run%20qwen3%3A0.6b%0A%20%20%20%20%60%60%60%0A%0A%0A%20%20%20%20%23%23%20Basic%20Chat%20Integration%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20langchain_core.messages%20import%20HumanMessage%2C%20SystemMessage%0A%20%20%20%20from%20langchain_ollama%20import%20ChatOllama%0A%0A%20%20%20%20%23%20Initialize%20the%20chat%20model%20with%20specific%20configurations%0A%20%20%20%20chat_model%20%3D%20ChatOllama(%0A%20%20%20%20%20%20%20%20model%3D%22qwen2.5%3A0.5b%22%2C%0A%20%20%20%20%20%20%20%20temperature%3D0.3%2C%20%20%23%20Lower%20temperature%20for%20more%20deterministic%20outputs%0A%20%20%20%20%20%20%20%20base_url%3D%22http%3A%2F%2Flocalhost%3A11434%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20%23%20Define%20a%20prompt%20for%20generating%20a%20basic%20function%20in%20a%20data%20science%20project%0A%20%20%20%20messages%20%3D%20%5B%0A%20%20%20%20%20%20%20%20SystemMessage(%0A%20%20%20%20%20%20%20%20%20%20%20%20content%3D%22You%20are%20a%20data%20scientist%20who%20writes%20efficient%20Python%20code%20with%20short%20docstring.%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20HumanMessage(%0A%20%20%20%20%20%20%20%20%20%20%20%20content%3D(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Given%20a%20DataFrame%20with%20columns%20'product'%20and%20'sales'%2C%20calculates%20the%20total%20sales%20for%20each%20product.%22)%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%5D%0A%0A%20%20%20%20%23%20Invoke%20the%20model%20and%20print%20the%20generated%20function%0A%20%20%20%20response%20%3D%20chat_model.invoke(messages)%0A%20%20%20%20print(response.content)%0A%20%20%20%20return%20ChatOllama%2C%20chat_model%2C%20messages%0A%0A%0A%40app.cell%0Aasync%20def%20_(chat_model%2C%20messages)%3A%0A%20%20%20%20async%20def%20generate_async()%3A%0A%20%20%20%20%20%20%20%20response%20%3D%20await%20chat_model.ainvoke(messages)%0A%20%20%20%20%20%20%20%20return%20response.content%0A%0A%20%20%20%20%23%20In%20async%20context%0A%20%20%20%20result%20%3D%20await%20generate_async()%0A%0A%20%20%20%20print(result)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20Using%20Completion%20Models%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20langchain_ollama%20import%20OllamaLLM%0A%0A%20%20%20%20llm%20%3D%20OllamaLLM(model%3D%22qwen2.5%3A0.5b%22)%0A%20%20%20%20text%20%3D%20%22%22%22%0A%20%20%20%20Write%20a%20function%20that%20takes%20a%20DataFrame%20with%20columns%20'product'%2C%20'year'%2C%20and%20'sales'%20and%20calculate%20the%20total%20sales%20for%20each%20product%20over%20the%20specified%20years.%0A%0A%20%20%20%20%60%60%60python%0A%20%20%20%20def%20calculate_total_sales(df)%3A%0A%20%20%20%20%22%22%22%0A%20%20%20%20completion_response%20%3D%20llm.invoke(text)%0A%20%20%20%20print(completion_response)%0A%20%20%20%20return%20(OllamaLLM%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22For%20streaming%20responses%20(showing%20tokens%20as%20they're%20generated)%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20%23%20for%20chunk%20in%20llm.stream(text)%3A%0A%20%20%20%20%23%20%20%20%20%20print(chunk%2C%20end%3D%22%22%2C%20flush%3DTrue)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%20Customizing%20Model%20Parameters%0A%0A%20%20%20%20Ollama%20offers%20fine-grained%20control%20over%20generation%20parameters%3A%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(OllamaLLM)%3A%0A%20%20%20%20llm_1%20%3D%20OllamaLLM(%0A%20%20%20%20%20%20%20%20model%3D%22qwen2.5%3A0.5b%22%2C%0A%20%20%20%20%20%20%20%20temperature%3D0.7%2C%0A%20%20%20%20%20%20%20%20repeat_penalty%3D1.1%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(OllamaLLM)%3A%0A%20%20%20%20%23%20Scientific%20writing%20with%20precise%20output%0A%20%20%20%20scientific_llm%20%3D%20OllamaLLM(model%3D%22qwen2.5%3A0.5b%22%2C%20temperature%3D0.1%2C%20repeat_penalty%3D1.2)%0A%0A%20%20%20%20scientific_prompt%20%3D%20%22Summarize%20the%20key%20findings%20of%20a%20study%20on%20the%20impact%20of%20sleep%20on%20memory%20retention.%22%0A%20%20%20%20scientific_response%20%3D%20scientific_llm.invoke(scientific_prompt)%0A%20%20%20%20print(scientific_response)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(OllamaLLM)%3A%0A%20%20%20%20%23%20Creative%20storytelling%0A%20%20%20%20creative_llm%20%3D%20OllamaLLM(model%3D%22qwen2.5%3A0.5b%22%2C%20temperature%3D0.9%2C%20repeat_penalty%3D1.0)%0A%0A%20%20%20%20creative_prompt%20%3D%20%22Tell%20a%20short%20story%20about%20a%20robot%20who%20discovers%20the%20meaning%20of%20friendship.%22%0A%20%20%20%20creative_response%20%3D%20creative_llm.invoke(creative_prompt)%0A%20%20%20%20print(creative_response)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(OllamaLLM)%3A%0A%20%20%20%20%23%20Code%20generation%0A%20%20%20%20code_llm%20%3D%20OllamaLLM(model%3D%22codellama%3A7b%22%2C%20temperature%3D0.3)%0A%0A%20%20%20%20code_prompt%20%3D%20%22Write%20a%20Python%20function%20to%20calculate%20total%20sales%20of%20the%20%60sale%60%20column%20in%20a%20polars%20DataFrame.%22%0A%20%20%20%20code_response%20%3D%20code_llm.invoke(code_prompt)%0A%20%20%20%20print(code_response)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20Creating%20LangChain%20Chains%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(OllamaLLM)%3A%0A%20%20%20%20from%20langchain_core.output_parsers%20import%20StrOutputParser%0A%20%20%20%20from%20langchain_core.prompts%20import%20PromptTemplate%0A%0A%20%20%20%20model%20%3D%20OllamaLLM(model%3D%22codellama%3A7b%22)%0A%20%20%20%20function_prompt%20%3D%20PromptTemplate.from_template(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20Write%20a%20Python%20function%20using%20pandas%20that%20takes%20a%20DataFrame%20with%20columns%20'%7Bdate_col%7D'%2C%20'%7Bgroup_col%7D'%2C%20and%20'%7Bvalue_col%7D'.%0A%20%20%20%20%20%20%20%20The%20function%20should%20return%20a%20new%20DataFrame%20that%20includes%20a%20%7Bwindow%7D-day%20rolling%20average%20of%20%7Bvalue_col%7D%20for%20each%20%7Bgroup_col%7D.%0A%20%20%20%20%20%20%20%20Only%20output%20the%20function%20code.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%0A%20%20%20%20%23%20Build%20the%20chain%0A%20%20%20%20code_chain%20%3D%20function_prompt%20%7C%20model%20%7C%20StrOutputParser()%0A%0A%20%20%20%20%23%20Run%20the%20chain%20with%20specific%20variable%20values%0A%20%20%20%20chain_response%20%3D%20code_chain.invoke(%7B%0A%20%20%20%20%20%20%20%20%22date_col%22%3A%20%22date%22%2C%0A%20%20%20%20%20%20%20%20%22group_col%22%3A%20%22store_id%22%2C%0A%20%20%20%20%20%20%20%20%22value_col%22%3A%20%22sales%22%2C%0A%20%20%20%20%20%20%20%20%22window%22%3A%207%0A%20%20%20%20%7D)%0A%0A%20%20%20%20print(chain_response)%0A%20%20%20%20return%20PromptTemplate%2C%20StrOutputParser%2C%20code_chain%0A%0A%0A%40app.cell%0Adef%20_(OllamaLLM%2C%20PromptTemplate%2C%20StrOutputParser%2C%20code_chain)%3A%0A%20%20%20%20test_model%20%3D%20OllamaLLM(model%3D%22codellama%3A7b%22%2C%20temperature%3D0.3)%0A%0A%20%20%20%20test_prompt%20%3D%20PromptTemplate.from_template(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20Given%20the%20following%20Python%20function%3A%0A%0A%20%20%20%20%20%20%20%20%60%60%60python%0A%20%20%20%20%20%20%20%20%7Bcode%7D%0A%20%20%20%20%20%20%20%20%60%60%60%0A%0A%20%20%20%20%20%20%20%20Write%201%E2%80%932%20simple%20unit%20tests%20for%20this%20function%20using%20pytest.%20Only%20include%20the%20test%20code.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%0A%20%20%20%20test_chain%20%3D%20(%0A%20%20%20%20%20%20%20%20%7B%22code%22%3A%20code_chain%7D%0A%20%20%20%20%20%20%20%20%7C%20test_prompt%0A%20%20%20%20%20%20%20%20%7C%20test_model%0A%20%20%20%20%20%20%20%20%7C%20StrOutputParser()%0A%20%20%20%20)%0A%0A%20%20%20%20%23%20Invoke%20the%20test%20chain%0A%20%20%20%20test_response%20%3D%20test_chain.invoke(%7B%0A%20%20%20%20%20%20%20%20%22date_col%22%3A%20%22date%22%2C%0A%20%20%20%20%20%20%20%20%22group_col%22%3A%20%22store_id%22%2C%0A%20%20%20%20%20%20%20%20%22value_col%22%3A%20%22sales%22%2C%0A%20%20%20%20%20%20%20%20%22window%22%3A%207%0A%20%20%20%20%7D)%0A%0A%20%20%20%20print(test_response)%0A%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20Building%20a%20question-answering%20system%20for%20your%20data%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20Working%20with%20Embeddings%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20from%20langchain_ollama%20import%20OllamaEmbeddings%0A%0A%20%20%20%20%23%20Initialize%20embeddings%20model%20with%20specific%20parameters%0A%20%20%20%20embedder%20%3D%20OllamaEmbeddings(%0A%20%20%20%20%20%20%20%20model%3D%22nomic-embed-text%22%2C%20%20%23%20Specialized%20embedding%20model%20that%20is%20also%20supported%20by%20Ollama%0A%20%20%20%20)%0A%20%20%20%20return%20embedder%2C%20np%0A%0A%0A%40app.cell%0Adef%20_(embedder)%3A%0A%20%20%20%20%23%20Create%20embeddings%20for%20a%20query%0A%20%20%20%20example_query%20%3D%20%22How%20do%20neural%20networks%20learn%3F%22%0A%20%20%20%20example_query_embedding%20%3D%20embedder.embed_query(example_query)%0A%20%20%20%20print(f%22Embedding%20dimension%3A%20%7Blen(example_query_embedding)%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(embedder)%3A%0A%20%20%20%20documents%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%22Python%20is%20a%20high-level%20programming%20language%20known%20for%20its%20simplicity%20and%20readability.%22%2C%0A%20%20%20%20%20%20%20%20%22Machine%20learning%20algorithms%20can%20automatically%20learn%20patterns%20from%20data%20without%20explicit%20programming.%22%2C%0A%20%20%20%20%20%20%20%20%22Data%20preprocessing%20involves%20cleaning%2C%20changing%2C%20and%20organizing%20raw%20data%20for%20analysis.%22%2C%0A%20%20%20%20%20%20%20%20%22Neural%20networks%20are%20computational%20models%20inspired%20by%20biological%20brain%20networks.%22%2C%0A%20%20%20%20%5D%0A%0A%20%20%20%20doc_embeddings%20%3D%20embedder.embed_documents(documents)%0A%0A%20%20%20%20print(f%22Generated%20%7Blen(doc_embeddings)%7D%20embeddings%20for%20the%20input%20documents.%22)%0A%20%20%20%20return%20(documents%2C)%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20%23%20Calculate%20similarity%20between%20vectors%0A%20%20%20%20def%20compute_cosine_similarity(query_vec%2C%20document_vec)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Compute%20cosine%20similarity%20between%20two%20vectors.%22%22%22%0A%20%20%20%20%20%20%20%20return%20np.dot(query_vec%2C%20document_vec)%20%2F%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20np.linalg.norm(query_vec)%20*%20np.linalg.norm(document_vec)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20def%20get_most_similar_indices(similarities%2C%20num_documents)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Return%20indices%20of%20top%20%60num_documents%60%20highest%20similarity%20scores.%22%22%22%0A%20%20%20%20%20%20%20%20return%20np.argsort(similarities)%5B-num_documents%3A%5D%5B%3A%3A-1%5D%0A%0A%0A%20%20%20%20def%20similarity_search(query%2C%20documents%2C%20embedder%2C%20num_documents%3D2)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Return%20the%20most%20relevant%20documents%20for%20the%20given%20query.%22%22%22%0A%20%20%20%20%20%20%20%20query_embedding%20%3D%20embedder.embed_query(query)%0A%20%20%20%20%20%20%20%20document_embeddings%20%3D%20embedder.embed_documents(documents)%0A%20%20%20%20%20%20%20%20similarities%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20compute_cosine_similarity(query_embedding%2C%20doc_embedding)%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20doc_embedding%20in%20document_embeddings%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20top_indices%20%3D%20get_most_similar_indices(similarities%2C%20num_documents)%0A%20%20%20%20%20%20%20%20return%20%5Bdocuments%5Bi%5D%20for%20i%20in%20top_indices%5D%0A%20%20%20%20return%20(similarity_search%2C)%0A%0A%0A%40app.cell%0Adef%20_(documents%2C%20embedder%2C%20similarity_search)%3A%0A%20%20%20%20question%20%3D%20%22What%20makes%20Python%20popular%20for%20data%20science%3F%22%0A%0A%20%20%20%20relevant_docs%20%3D%20similarity_search(query%3Dquestion%2C%20documents%3Ddocuments%2C%20embedder%3Dembedder)%0A%0A%20%20%20%20print(f%22Top%20%7Blen(relevant_docs)%7D%20relevant%20documents%20retrieved%3A%5Cn%22)%0A%20%20%20%20for%20i%2C%20doc%20in%20enumerate(relevant_docs%2C%201)%3A%0A%20%20%20%20%20%20%20%20print(f%22Document%20%7Bi%7D%3A%5Cn%7Bdoc%7D%5Cn%22)%0A%20%20%20%20return%20question%2C%20relevant_docs%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20Building%20a%20RAG%20Pipeline%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(PromptTemplate)%3A%0A%20%20%20%20rag_prompt%20%3D%20PromptTemplate.from_template(%22%22%22%0A%20%20%20%20%20%20%20%20Use%20the%20following%20context%20to%20answer%20the%20question.%20If%20the%20answer%20isn't%20in%20the%20context%2C%20say%20so.%0A%20%20%20%20%20%20%20%20Context%3A%0A%20%20%20%20%20%20%20%20%7Bcontext%7D%0A%0A%20%20%20%20%20%20%20%20Question%3A%20%7Bquestion%7D%0A%0A%20%20%20%20%20%20%20%20Answer%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%20(rag_prompt%2C)%0A%0A%0A%40app.cell%0Adef%20_(relevant_docs)%3A%0A%20%20%20%20context%20%3D%20%22%5Cn%22.join(relevant_docs)%0A%20%20%20%20return%20(context%2C)%0A%0A%0A%40app.cell%0Adef%20_(ChatOllama%2C%20StrOutputParser%2C%20context%2C%20question%2C%20rag_prompt)%3A%0A%20%20%20%20rag_chat_model%20%3D%20ChatOllama(model%3D%22qwen2.5%3A0.5b%22%2C%20temperature%3D0.3)%0A%0A%20%20%20%20rag_chain%20%3D%20rag_prompt%20%7C%20rag_chat_model%20%7C%20StrOutputParser()%0A%0A%20%20%20%20%23%20Run%20the%20chain%20with%20specific%20variable%20values%0A%20%20%20%20rag_response%20%3D%20rag_chain.invoke(%7B%22context%22%3A%20context%2C%20%22question%22%3A%20question%7D)%0A%0A%20%20%20%20print(rag_response)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
a9eccdb5afcf18f02631107b274c4b424d746c780573c32f80ef21b9902dff5c