Skip to content
Back to skills

Ollama Patterns

ASecurity

Ollama local LLM — pull models, generate, chat, embeddings, REST API, Python client, structured output

  • 10 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 9, 2026
ai-agentspythongobashdockerapidatabase

Works with

  • cli
  • api

Security analysis

A96/100
  • mediumUses curl or wget to download content

Pro shows the line behind each finding and how to fix it

Scanned September 9, 2026

npx -y skills add yanacuti1121/Yana-AI --skill ollama-patterns --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ollama Patterns?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ollama Patterns
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/yanacuti1121-ollama-patterns/badge)](https://www.skillsdirectory.com/skills/yanacuti1121-ollama-patterns)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ollama-patterns
description: Ollama local LLM — pull models, generate, chat, embeddings, REST API, Python client, structured output
triggers:
  - ollama
  - local llm ollama
  - ollama python
  - ollama chat
  - ollama generate
  - ollama embeddings
  - ollama structured output
  - ollama model pull
  - ollama api
  - run llm locally
do_not_use_for:
  - cloud LLM APIs — use litellm/portkey
  - structured generation with local models — use outlines for guaranteed schema
  - vector database — use qdrant
see_also:
  - outlines
  - litellm
  - portkey
  - vllm-paged-attention
---

# Ollama — Local LLM

## Setup & Pull Models

```bash
# Install
curl -fsSL https://ollama.ai/install.sh -o /tmp/ollama-install.sh
# Inspect first: head -40 /tmp/ollama-install.sh — then run if safe:
sh /tmp/ollama-install.sh

# Pull models
ollama pull llama3.2             # 3B — fast, good for dev
ollama pull llama3.1:8b          # 8B — balanced quality
ollama pull mistral-nemo         # 12B — strong reasoning
ollama pull deepseek-r1:8b       # reasoning model
ollama pull nomic-embed-text     # embeddings
ollama pull mxbai-embed-large    # better embeddings

# List, remove
ollama list
ollama rm llama3.2
ollama show llama3.2             # model info, parameters
```

## Python Client

```python
import ollama

# Simple chat
response = ollama.chat(
    model="llama3.2",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Explain quantum entanglement briefly."},
    ],
)
print(response["message"]["content"])

# Streaming
for chunk in ollama.chat(
    model="llama3.2",
    messages=[{"role": "user", "content": "Write a haiku"}],
    stream=True,
):
    print(chunk["message"]["content"], end="", flush=True)

# Generate (no chat format)
response = ollama.generate(
    model="llama3.2",
    prompt="Complete this: The sky is",
    options={"temperature": 0.8, "top_p": 0.9, "num_predict": 100},
)
print(response["response"])
```

## Embeddings

```python
import ollama

# Single embedding
result = ollama.embeddings(
    model="nomic-embed-text",
    prompt="Machine learning is fascinating",
)
vector = result["embedding"]   # List[float], dim=768

# Batch embeddings (loop — no native batch API)
texts = ["text1", "text2", "text3"]
embeddings = [
    ollama.embeddings(model="nomic-embed-text", prompt=t)["embedding"]
    for t in texts
]

# With async client
import asyncio

async def embed_batch(texts: list[str]) -> list[list[float]]:
    client = ollama.AsyncClient()
    tasks = [client.embeddings(model="nomic-embed-text", prompt=t) for t in texts]
    results = await asyncio.gather(*tasks)
    return [r["embedding"] for r in results]
```

## Async Client

```python
import asyncio
import ollama

async def main():
    client = ollama.AsyncClient()

    # Async chat
    response = await client.chat(
        model="llama3.2",
        messages=[{"role": "user", "content": "Hello"}],
    )
    print(response["message"]["content"])

    # Async streaming
    async for chunk in await client.chat(
        model="llama3.2",
        messages=[{"role": "user", "content": "Tell me a story"}],
        stream=True,
    ):
        print(chunk["message"]["content"], end="", flush=True)

asyncio.run(main())
```

## Structured Output (JSON mode)

```python
import ollama
import json

response = ollama.chat(
    model="llama3.2",
    messages=[{
        "role": "user",
        "content": "Extract: name, age, profession from: 'John is a 30-year-old engineer'",
    }],
    format="json",                  # forces JSON output
)
data = json.loads(response["message"]["content"])
print(data["name"], data["age"])    # "John", 30

# With Pydantic schema
from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int
    profession: str

response = ollama.chat(
    model="llama3.2",
    messages=[{"role": "user", "content": "Extract from: 'Alice is a 25-year-old designer'"}],
    format=Person.model_json_schema(),   # enforce schema
)
person = Person.model_validate_json(response["message"]["content"])
```

## REST API (curl / direct)

```bash
# Generate
curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "Why is the sky blue?",
  "stream": false
}'

# Chat
curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [{"role": "user", "content": "Hello"}],
  "stream": false
}'

# Embeddings
curl http://localhost:11434/api/embeddings -d '{
  "model": "nomic-embed-text",
  "prompt": "Here is an article about llamas"
}'
```

## OpenAI-Compatible API

```python
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",               # required but ignored
)

response = client.chat.completions.create(
    model="llama3.2",
    messages=[{"role": "user", "content": "Say hello"}],
)
print(response.choices[0].message.content)

# Works with any OpenAI-compatible library
```

## Modelfile — Custom Models

```dockerfile
# Modelfile
FROM llama3.2

SYSTEM """You are a Python expert. Always include type hints and docstrings."""

PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_predict 2048
```

```bash
ollama create python-expert -f Modelfile
ollama run python-expert "Write a binary search function"
```

## Anti-Fake-Pass Checks

- Ollama server must be running: `ollama serve` or daemon auto-start on macOS/Linux
- `stream=False` in REST API — without it, response is streaming NDJSON, not single JSON
- `format="json"` encourages but doesn't guarantee valid JSON — use outlines for guaranteed schema
- Embeddings are model-specific dimension — `nomic-embed-text`=768, `mxbai-embed-large`=1024
- `num_predict=-1` means unlimited tokens — set a limit to avoid runaway generation
- Async client returns coroutines — must `await` every call inside `async def`
- OpenAI-compatible API at `/v1` — base_url must include `/v1` path

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.