Metadata-Version: 2.4
Name: uc-llm-provider
Version: 0.1.1
Summary: Generic LLM provider abstraction — Anthropic, OpenAI, Google, Ollama and any OpenAI-compatible local model
Author: cuber IT service
License: MIT
Requires-Python: >=3.11
Requires-Dist: httpx>=0.26.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: pyyaml>=6.0
Provides-Extra: all
Requires-Dist: anthropic>=0.20.0; extra == 'all'
Requires-Dist: fastapi>=0.100.0; extra == 'all'
Requires-Dist: google-generativeai>=0.5.0; extra == 'all'
Requires-Dist: openai>=1.0.0; extra == 'all'
Requires-Dist: uvicorn[standard]>=0.20.0; extra == 'all'
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.20.0; extra == 'anthropic'
Provides-Extra: dev
Requires-Dist: mypy>=1.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: ruff>=0.1.0; extra == 'dev'
Provides-Extra: google
Requires-Dist: google-generativeai>=0.5.0; extra == 'google'
Provides-Extra: openai
Requires-Dist: openai>=1.0.0; extra == 'openai'
Provides-Extra: server
Requires-Dist: fastapi>=0.100.0; extra == 'server'
Requires-Dist: uvicorn[standard]>=0.20.0; extra == 'server'
Description-Content-Type: text/markdown

# uc-uc-llm-provider

Generic LLM provider abstraction for Python.  
Anthropic, OpenAI, Google — and any OpenAI-compatible local model (Ollama, LM Studio, vLLM, llama.cpp).

## Install

```bash
pip install uc-uc-llm-provider
```

## Quickstart

```python
from uc_llm_provider import get_provider, ChatRequest, ChatMessage

# Cloud provider
provider = get_provider({
    "name":          "anthropic",
    "provider_type": "anthropic",
    "api_key":       "sk-ant-...",
    "default_model": "claude-sonnet-4-20250514",
})

# Local via Ollama
provider = get_provider({
    "name":          "ollama",
    "provider_type": "ollama",
    "api_base":      "http://localhost:11434",
    "default_model": "llama3.2",
})

# Any OpenAI-compatible endpoint (LM Studio, vLLM, llama.cpp …)
provider = get_provider({
    "name":          "lm-studio",
    "provider_type": "openai_compatible",
    "api_base":      "http://localhost:1234/v1",
    "default_model": "local-model",
})

response = await provider.chat(ChatRequest(
    messages=[ChatMessage(role="user", content="Hello")],
    max_tokens=256,
))
print(response.content)
```

## Streaming

```python
async for chunk in provider.chat_stream(request):
    if chunk.type == "content_delta":
        print(chunk.content, end="", flush=True)
```

## Ollama extras

```python
from uc_llm_provider import get_provider

ollama = get_provider({"provider_type": "ollama", ...})

# List installed models
models = await ollama.list_local_models()

# Pull a model
async for status in ollama.pull_model("mistral"):
    print(status)

# Check if running
running = await ollama.is_running()
```

## Custom provider

```python
from uc_llm_provider import register_provider
from uc_llm_provider.providers.template import TemplateProvider

class MyProvider(TemplateProvider):
    def _get_endpoint(self, path=""):
        return "https://api.myprovider.com/v1/chat"

register_provider("myprovider", MyProvider)
provider = get_provider({"provider_type": "myprovider", ...})
```

## Supported provider_type values

| Value | Provider |
|---|---|
| `anthropic` | Anthropic Claude |
| `openai` | OpenAI |
| `google` | Google Gemini |
| `ollama` | Ollama (local) |
| `openai_compatible` | Any OpenAI-compatible API |
| `lm_studio` / `lmstudio` | LM Studio |
| `vllm` | vLLM |
| `llamacpp` | llama.cpp server |
| `localai` | LocalAI |

## License
MIT
