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.0.tar.gz (22.5 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.0-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: beanllm-0.1.0.tar.gz
  • Upload date:
  • Size: 22.5 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.0.tar.gz
Algorithm Hash digest
SHA256 09a8d3f9c879c0fe5812fee9bbc2f06bb4359105624a83603ac45308ea684145
MD5 15034f38ee7fd157391593f148dfa647
BLAKE2b-256 e13745b2ef62958abeb2074f487c3db9c11855dde536debc4306139c1ea210db

See more details on using hashes here.

File details

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

File metadata

  • Download URL: beanllm-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.0 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e9a2c24914f6c52a2200e054b71e3e4cb62920a710a374697a5d23aea8746068
MD5 ef5baf9d597fee19e8d5320222e6c43f
BLAKE2b-256 893b0f93b62a95f27ccd2d51ebd15d4fb6a9099e3bad4ef472a071d3c9554642

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