Skip to main content

Unified toolkit for managing and using multiple LLM providers with automatic model detection

Project description

๐Ÿš€ beanllm

Production-ready LLM toolkit with Clean Architecture and unified interface for multiple providers

Python 3.11+ License: MIT GitHub

beanllm is a comprehensive, production-ready toolkit for building LLM applications with a unified interface across OpenAI, Anthropic, Google, and Ollama. Built with Clean Architecture and SOLID principles for maintainability and scalability.


โœจ Key Features

๐ŸŽฏ Core Features

  • ๐Ÿ”„ Unified Interface - Single API for OpenAI, Anthropic, Google, Ollama
  • ๐ŸŽ›๏ธ Intelligent Adaptation - Automatic parameter conversion between providers
  • ๐Ÿ“Š Model Registry - Auto-detect available models from API keys
  • ๐Ÿ” CLI Tools - Inspect models and capabilities from command line
  • ๐Ÿ’ฐ Cost Tracking - Accurate token counting and cost estimation
  • ๐Ÿ—๏ธ Clean Architecture - Layered architecture with clear separation of concerns

๐Ÿ—๏ธ RAG & Document Processing

  • ๐Ÿ“„ Document Loaders - PDF, CSV, TXT with automatic format detection
  • โœ‚๏ธ Smart Text Splitters - Semantic chunking with tiktoken
  • ๐Ÿ” Vector Search - Chroma, FAISS, Pinecone, Qdrant, Weaviate
  • ๐ŸŽฏ RAG Pipeline - Complete question-answering system in one line
  • ๐Ÿ› RAG Debugging - Comprehensive debugging toolkit

๐Ÿค– Advanced LLM Features

  • ๐Ÿ› ๏ธ Tools & Agents - Function calling with ReAct pattern
  • ๐Ÿง  Memory Systems - Buffer, window, token-based, summary memory
  • โ›“๏ธ Chains - Sequential, parallel, and custom chain composition
  • ๐Ÿ“Š Output Parsers - Pydantic, JSON, datetime, enum parsing
  • ๐Ÿ” Streaming - Real-time response streaming with stats

๐Ÿ“ˆ Graph & Multi-Agent

  • ๐Ÿ•ธ๏ธ Graph Workflows - LangGraph-style DAG execution
  • ๐Ÿค Multi-Agent - Sequential, parallel, hierarchical, debate patterns
  • ๐Ÿ”„ State Management - Automatic state threading and checkpoints
  • ๐Ÿ“ž Communication - Inter-agent message passing

๐ŸŽจ Multimodal AI

  • ๐Ÿ–ผ๏ธ Vision RAG - Image-based question answering with CLIP
  • ๐ŸŽ™๏ธ Audio Processing - Whisper STT, multi-provider TTS
  • ๐Ÿ”Š Audio RAG - Search and QA across audio files
  • ๐ŸŒ Web Search - Google, Bing, DuckDuckGo integration
  • ๐Ÿงฎ ML Integration - TensorFlow, PyTorch, Scikit-learn

๐Ÿญ Production Features

  • ๐Ÿ’ต Token & Cost - tiktoken-based accurate counting, cost optimization
  • ๐Ÿ“ Prompt Templates - Few-shot, chat, chain-of-thought templates
  • ๐Ÿ“Š Evaluation - BLEU, ROUGE, LLM-as-Judge, RAG metrics, Context Recall
  • ๐Ÿ‘ค Human-in-the-Loop - ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘ ๋ฐ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํ‰๊ฐ€
  • ๐Ÿ”„ Continuous Evaluation - ์ •๊ธฐ ํ‰๊ฐ€ ๋ฐ ์ถ”์ 
  • ๐Ÿ“‰ Drift Detection - ๋ชจ๋ธ ๋“œ๋ฆฌํ”„ํŠธ ๊ฐ์ง€
  • ๐Ÿ“ˆ Evaluation Dashboard - ํ‰๊ฐ€ ๊ฒฐ๊ณผ ์‹œ๊ฐํ™”
  • ๐Ÿ“‹ Rubric-Driven Grading - ๊ตฌ์กฐํ™”๋œ ๋ฃจ๋ธŒ๋ฆญ ๊ธฐ๋ฐ˜ ํ‰๊ฐ€
  • โœ… CheckEval - ์ฒดํฌ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜ Boolean ํ‰๊ฐ€
  • ๐Ÿ“Š Evaluation Analytics - ํŠธ๋ Œ๋“œ ๋ฐ ์ƒ๊ด€๊ด€๊ณ„ ๋ถ„์„
  • ๐ŸŽฏ Fine-tuning - OpenAI fine-tuning API integration
  • ๐Ÿ›ก๏ธ Error Handling - Retry, circuit breaker, rate limiting
  • ๐Ÿ“ˆ Tracing - Distributed tracing with OpenTelemetry export

๐Ÿ—๏ธ Architecture

beanllm์€ Clean Architecture์™€ SOLID ์›์น™์„ ๋”ฐ๋ฅด๋Š” ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์–ด ๊ตฌ์กฐ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Facade Layer                          โ”‚
โ”‚  (์‚ฌ์šฉ์ž ์นœํ™”์  API) - Client, RAGChain, Agent ๋“ฑ       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Handler Layer                          โ”‚
โ”‚  (Controller ์—ญํ• ) - ์ž…๋ ฅ ๊ฒ€์ฆ, ์—๋Ÿฌ ์ฒ˜๋ฆฌ                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Service Layer                          โ”‚
โ”‚  (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง) - ์ธํ„ฐํŽ˜์ด์Šค + ๊ตฌํ˜„์ฒด                     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Domain Layer                           โ”‚
โ”‚  (ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค) - ์—”ํ‹ฐํ‹ฐ, ์ธํ„ฐํŽ˜์ด์Šค, ๊ทœ์น™              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                Infrastructure Layer                       โ”‚
โ”‚  (์™ธ๋ถ€ ์‹œ์Šคํ…œ) - Provider, Vector Store ๊ตฌํ˜„              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

src/beanllm/
โ”œโ”€โ”€ facade/          # ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค (Facade ํŒจํ„ด)
โ”œโ”€โ”€ handler/         # ์š”์ฒญ ์ฒ˜๋ฆฌ (Controller ์—ญํ• )
โ”œโ”€โ”€ service/         # ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง (Service ์ธํ„ฐํŽ˜์ด์Šค + ๊ตฌํ˜„์ฒด)
โ”œโ”€โ”€ domain/          # ๋„๋ฉ”์ธ ๋ชจ๋ธ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™
โ”œโ”€โ”€ infrastructure/ # ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์ธํ„ฐํŽ˜์ด์Šค
โ”œโ”€โ”€ dto/             # ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด
โ”œโ”€โ”€ decorators/      # ๊ณตํ†ต ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
โ””โ”€โ”€ utils/           # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜

SOLID ์›์น™ ์ ์šฉ

  • SRP: ๊ฐ ๋ ˆ์ด์–ด๊ฐ€ ๋‹จ์ผ ์ฑ…์ž„๋งŒ ๋‹ด๋‹น
  • OCP: ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜ ํ™•์žฅ ๊ฐ€๋Šฅ
  • LSP: ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด๋Š” ์–ธ์ œ๋“  ๊ต์ฒด ๊ฐ€๋Šฅ
  • ISP: ์ž‘์€, ํŠนํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค
  • DIP: ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กด, ๊ตฌํ˜„์ฒด์— ์˜์กดํ•˜์ง€ ์•Š์Œ

์ž์„ธํ•œ ์•„ํ‚คํ…์ฒ˜ ์„ค๋ช…์€ ARCHITECTURE.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.


๐Ÿ“ฆ Installation

Poetry ์‚ฌ์šฉ (๊ถŒ์žฅ)

# ํ”„๋กœ์ ํŠธ ํด๋ก 
git clone https://github.com/yourusername/beanllm.git
cd beanllm

# ์˜์กด์„ฑ ์„ค์น˜
poetry install --extras all  # ๋ชจ๋“  Provider ํฌํ•จ
# ๋˜๋Š”
poetry install --extras openai  # OpenAI๋งŒ

# ๊ฐ€์ƒ ํ™˜๊ฒฝ ํ™œ์„ฑํ™”
poetry shell

pip ์‚ฌ์šฉ

# ๊ธฐ๋ณธ ์„ค์น˜ (์˜์กด์„ฑ ์—†์Œ)
pip install beanllm

# ํŠน์ • Provider ์ถ”๊ฐ€
pip install beanllm[openai]
pip install beanllm[anthropic]
pip install beanllm[gemini]
pip install beanllm[ollama]

# ๋ชจ๋“  Provider
pip install beanllm[all]

# ๊ฐœ๋ฐœ ๋„๊ตฌ ํฌํ•จ
pip install beanllm[dev,all]

์ฐธ๊ณ : Provider๋Š” ์„ ํƒ์  ์˜์กด์„ฑ์ž…๋‹ˆ๋‹ค. ํ•„์š”ํ•œ Provider๋งŒ ์„ค์น˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๐Ÿš€ Quick Start

Environment Setup

.env ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ์ƒ์„ฑํ•˜์„ธ์š”:

# .env ํŒŒ์ผ ์ƒ์„ฑ
cat > .env << EOF
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GEMINI_API_KEY=...
OLLAMA_HOST=http://localhost:11434
EOF

Basic Usage

import asyncio
from beanllm import Client

async def main():
    # Unified interface - works with any provider
    client = Client(model="gpt-4o")
    response = await client.chat(
        messages=[{"role": "user", "content": "Explain quantum computing in simple terms"}]
    )
    print(response.content)
    
    # Switch providers seamlessly
    client = Client(model="claude-3-5-sonnet-20241022")
    response = await client.chat(
        messages=[{"role": "user", "content": "Same question, different provider"}]
    )
    
    # Streaming
    async for chunk in client.stream_chat(
        messages=[{"role": "user", "content": "Tell me a story"}]
    ):
        print(chunk, end="", flush=True)

asyncio.run(main())

RAG in One Line

import asyncio
from beanllm import RAGChain

async def main():
    # Create RAG system from documents
    rag = RAGChain.from_documents("docs/")
    
    # Ask questions
    answer = await rag.query("What is this document about?")
    print(answer)
    
    # With sources
    result = await rag.query("Explain the main concept", include_sources=True)
    print(result.answer)
    for source in result.sources:
        print(f"Source: {source.metadata.get('source', 'unknown')}")
    
    # Streaming query
    async for chunk in rag.stream_query("์งˆ๋ฌธ"):
        print(chunk, end="", flush=True)

asyncio.run(main())

Tools & Agents

import asyncio
from beanllm import Agent, Tool

async def main():
    # Define tools
    @Tool.from_function
    def calculator(expression: str) -> str:
        """Evaluate a math expression"""
        return str(eval(expression))

    # Create agent
    agent = Agent(
        model="gpt-4o-mini",
        tools=[calculator],
        max_iterations=10
    )
    
    # Run agent
    result = await agent.run("What is 25 * 17?")
    print(result.answer)
    print(f"Steps: {result.total_steps}")

asyncio.run(main())

Graph Workflows

import asyncio
from beanllm import StateGraph, Client

async def main():
    client = Client(model="gpt-4o-mini")
    
    # Create graph
    graph = StateGraph()
    
    async def analyze(state):
        response = await client.chat(
            messages=[{"role": "user", "content": f"Analyze: {state['input']}"}]
        )
        state["analysis"] = response.content
        return state
    
    def decide(state):
        score = float(state["analysis"].split("Score:")[1]) if "Score:" in state["analysis"] else 0.5
        return "good" if score > 0.8 else "bad"
    
    # Build graph
    graph.add_node("analyze", analyze)
    graph.add_conditional_edges("analyze", decide, {
        "good": "END",
        "bad": "improve"
    })
    
    # Run
    result = await graph.invoke({"input": "Draft text"})
    print(result)

asyncio.run(main())

๐Ÿ“– Examples

๋” ๋งŽ์€ ์‚ฌ์šฉ ์˜ˆ์ œ๋Š” examples/ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”:

  • basic_usage.py - ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•
  • rag_demo.py - RAG ํŒŒ์ดํ”„๋ผ์ธ ์˜ˆ์ œ
  • rag_chain_demo.py - RAG Chain ์˜ˆ์ œ
  • state_graph_demo.py - Graph Workflow ์˜ˆ์ œ
  • embeddings_demo.py - ์ž„๋ฒ ๋”ฉ ์˜ˆ์ œ
  • vector_stores_demo.py - Vector Store ์˜ˆ์ œ

๐Ÿ“š Core Modules

1. Client & Adapters

Unified interface with automatic parameter adaptation:

from beanllm import Client

# Works across all providers
client = Client(model="gpt-4o")

# Parameters automatically adapted
response = await client.chat(
    messages=[{"role": "user", "content": "Hello"}],
    temperature=0.7,
    max_tokens=1000,  # โ†’ max_completion_tokens for GPT-5
                       # โ†’ max_output_tokens for Gemini
                       # โ†’ num_predict for Ollama
)

2. Document Processing

from beanllm import DocumentLoader, RecursiveCharacterTextSplitter

# Load documents
docs = DocumentLoader.load("docs/")  # PDF, CSV, TXT

# Smart splitting
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50,
    separators=["\n\n", "\n", " "]
)
chunks = splitter.split_documents(docs)

3. Embeddings & Vector Stores

from beanllm import OpenAIEmbedding, ChromaVectorStore

# Create embeddings
embedding = OpenAIEmbedding(model="text-embedding-3-small")

# Vector store
store = ChromaVectorStore.from_documents(
    documents=chunks,
    embedding=embedding,
    persist_directory="./chroma_db"
)

# Search
results = store.similarity_search("query", k=5)

# MMR search (diversity)
diverse_results = store.mmr_search("query", k=5, lambda_mult=0.5)

4. Multi-Agent Systems

import asyncio
from beanllm import MultiAgentCoordinator, Agent

async def main():
    # Create agents
    researcher = Agent(model="gpt-4o-mini", tools=[], max_iterations=10)
    writer = Agent(model="gpt-4o-mini", tools=[], max_iterations=10)
    
    # Coordinate
    coordinator = MultiAgentCoordinator(
        agents={"researcher": researcher, "writer": writer}
    )
    
    result = await coordinator.execute_sequential(
        task="Write an article about quantum computing",
        agent_order=["researcher", "writer"]
    )
    print(result["final_result"])

asyncio.run(main())

๐Ÿ”ง CLI Usage

# List available models
beanllm list

# Show model details
beanllm show gpt-4o

# Check providers
beanllm providers

# Quick summary
beanllm summary

# Export model info
beanllm export > models.json

๐Ÿงช Testing

# Run all tests
pytest

# With coverage
pytest --cov=src/beanllm --cov-report=html

# Specific module
pytest tests/test_facade/ -v

ํ˜„์žฌ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€: 61% (624 tests, 593 passed)


๐Ÿ› ๏ธ Development

Makefile ์‚ฌ์šฉ (๊ถŒ์žฅ)

# ๊ฐœ๋ฐœ ๋„๊ตฌ ์„ค์น˜
make install-dev

# ๋น ๋ฅธ ์ž๋™ ์ˆ˜์ •
make quick-fix

# ํƒ€์ž… ์ฒดํฌ
make type-check

# ๋ฆฐํŠธ ์ฒดํฌ
make lint

# ์ „์ฒด ๊ฒ€์‚ฌ ๋ฐ ์ˆ˜์ •
make all

์ˆ˜๋™ ์‹คํ–‰

# Install in editable mode
pip install -e ".[dev,all]"

# Format code
ruff format src/beanllm

# Lint
ruff check src/beanllm

# Type check
mypy src/beanllm

๐Ÿ—บ๏ธ Roadmap

โœ… ์™„๋ฃŒ๋œ ์ฃผ์š” ๊ธฐ๋Šฅ

  • โœ… Clean Architecture & SOLID principles
  • โœ… Unified multi-provider interface (OpenAI, Anthropic, Google, Ollama)
  • โœ… RAG pipeline & Document Processing
  • โœ… Tools & Agents (ReAct pattern)
  • โœ… Graph workflows (LangGraph-style)
  • โœ… Multi-agent systems
  • โœ… Vision & Audio processing
  • โœ… Production features (evaluation, monitoring, cost tracking)
  • โœ… ํ”„๋กฌํ”„ํŠธ ๋ฒ„์ „ ๊ด€๋ฆฌ & A/B ํ…Œ์ŠคํŠธ
  • โœ… ์ŠคํŠธ๋ฆฌ๋ฐ ์‘๋‹ต ๋ฒ„ํผ๋ง
  • โœ… ํ‰๊ฐ€ ์‹œ์Šคํ…œ ํ™•์žฅ (Human-in-the-Loop, Continuous Evaluation, Drift Detection)
  • โœ… ๋‚ด๋ถ€ ์„ฑ๋Šฅ ์ตœ์ ํ™” (๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ, ๋ฐฐ์น˜ ๊ฒ€์ƒ‰, ํžˆ์Šคํ† ๋ฆฌ ์••์ถ•)

๐Ÿ“‹ ๊ณ„ํš ์ค‘

  • โฌœ ๋ฒค์น˜๋งˆํฌ ์‹œ์Šคํ…œ

๐Ÿ“š Documentation

  • QUICK_START.md - ๋น ๋ฅธ ์‹œ์ž‘ ๊ฐ€์ด๋“œ
  • ARCHITECTURE.md - ์•„ํ‚คํ…์ฒ˜ ์ƒ์„ธ ์„ค๋ช…
  • docs/DEPLOYMENT.md - PyPI ๋ฐฐํฌ ๊ฐ€์ด๋“œ
  • docs/theory/ - ์ด๋ก  ๋ฌธ์„œ ๋ฐ ํ•™์Šต ์ž๋ฃŒ
  • docs/tutorials/ - ํŠœํ† ๋ฆฌ์–ผ ์ฝ”๋“œ
  • examples/ - ์‚ฌ์šฉ ์˜ˆ์ œ ์ฝ”๋“œ

๐Ÿค Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create feature branch (git checkout -b feature/amazing-feature)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push to branch (git push origin feature/amazing-feature)
  5. Open Pull Request

๐Ÿ“„ License

MIT License - see LICENSE file for details.


๐Ÿ™ Acknowledgments

Inspired by:

Special thanks to:

  • OpenAI for GPT models and APIs
  • Anthropic for Claude API
  • Google for Gemini API
  • Ollama team for local LLM support

๐Ÿ“ง Contact


Built with โค๏ธ for the LLM community

Transform your LLM applications from prototype to production with beanllm.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

beanllm-0.1.1.tar.gz (284.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

beanllm-0.1.1-py3-none-any.whl (386.9 kB view details)

Uploaded Python 3

File details

Details for the file beanllm-0.1.1.tar.gz.

File metadata

  • Download URL: beanllm-0.1.1.tar.gz
  • Upload date:
  • Size: 284.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.10

File hashes

Hashes for beanllm-0.1.1.tar.gz
Algorithm Hash digest
SHA256 2c1e3a5bec7e9c38d33f48d5d2476b8101e365405e1385b89bb19c52683c07ad
MD5 3b674c8692152008cc8c483a735f5894
BLAKE2b-256 5f1ab8a5a464fba7399385da57a87f1e4fac7c893845d6c524e8b548d4535f7f

See more details on using hashes here.

File details

Details for the file beanllm-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: beanllm-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 386.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.10

File hashes

Hashes for beanllm-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 641af28635cca0d688d5f816290191f6092d8aec5a9bcf9e3017de0424d0f2e4
MD5 4c698f0fa56cc160f62dca5e70bd4e69
BLAKE2b-256 58770d92e0ee163a0246265a94f83e0d7562ab4765706a5aa93e49c36e6bc783

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page