
Security News
npm Adopts OIDC for Trusted Publishing in CI/CD Workflows
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
A Python package that provides a unified, easy-to-use interface for working with various Language Models (LLMs) and Vision Models from multiple providers. 🎯 It focuses on leveraging the generous free tiers offered by AI platforms.
This project is built on three core principles:
uv pip install cognicore
Before using the library, you need to configure your API keys in a .env
file. You can get your API keys from the following links:
GROQ_API_KEY=your_groq_key
GITHUB_TOKEN=your_github_token
GOOGLE_API_KEY=your_google_key
SAMBANOVA_API_KEY=your_sambanova_key
CEREBRAS_API_KEY=your_cerebras_key
from cognicore import LanguageModel
# Initialize a session with your preferred model
session = LanguageModel(
llm_model="gemini-2.0-flash",
llm_provider="google",
temperature=0.7
)
# Generate a response
response = session.answer("What is the capital of France?")
print(response)
from cognicore import ImageAnalyzerAgent
analyzer = ImageAnalyzerAgent()
description = analyzer.describe(
"path/to/image.jpg",
vision_model="llama-3.2-90b-vision-preview",
vision_provider="groq"
)
print(description)
from cognicore import LanguageModel
# Initialize a session with your preferred model
session = LanguageModel(
llm_model="llama-3-70b",
llm_provider="groq",
temperature=0.7,
top_k=45,
top_p=0.95
)
# Simple text generation
response = session.answer("What is the capital of France?")
# JSON-formatted response with Pydantic validation
from pydantic import BaseModel
class LocationInfo(BaseModel):
city: str
country: str
description: str
response = session.answer(
"What is the capital of France?",
json_formatting=True,
pydantic_object=LocationInfo
)
# Using custom tools
tools = [
{
"name": "weather",
"description": "Get current weather",
"function": get_weather
}
]
response, tool_calls = session.answer(
"What's the weather in Paris?",
tool_list=tools
)
# Streaming responses
for chunk in session.answer(
"Tell me a long story.",
stream=True
):
print(chunk, end="", flush=True)
return_thinking_token
Some advanced models (reflective models like DeepSeek, Gemini, O3 Mini, O4 Mini) may return a special <think>...</think>
block in their response, containing their internal reasoning. By default, this block is automatically removed from the final answer and only the user-facing output is returned.
You can control this behavior with the return_thinking_token
option:
return_thinking_token=False
(default): The content between <think>...</think>
is stripped from the response, and only the final answer is returned.return_thinking_token=True
: The full response, including the <think>...</think>
block, is returned.Example:
response = session.answer("Prompt...", return_thinking_token=False)
# Output: Only the final answer, without the <think>...</think> block
response = session.answer("Prompt...", return_thinking_token=True)
# Output: The full response, including the <think>...</think> block if present
from cognicore import ImageAnalyzerAgent
# Initialize the agent
analyzer = ImageAnalyzerAgent()
# Analyze an image
description = analyzer.describe(
image_path="path/to/image.jpg",
vision_model="llama-3.2-90b-vision-preview",
vision_provider="groq"
)
print(description)
Note: This list is not exhaustive. The library supports any new model ID released by these providers - you just need to get the correct model ID from your provider's documentation.
Provider | Model | LLM Provider ID | Model ID | Price | Rate Limit (per min) | Context Window | Speed |
---|---|---|---|---|---|---|---|
SambaNova | DeepSeek R1 0528 (Reflective) | sambanova | DeepSeek-R1-0528 | Free | 60 | 32,000 | Ultra Fast |
SambaNova | DeepSeek R1 670B | sambanova | DeepSeek-R1-0528 | Free | 60 | 32,000 | Ultra Fast |
SambaNova | Llama3 405B | sambanova | llama3-405b | Free | 60 | 8,000 | Fast |
GitHub | Meta Llama 3.1 405B | github | meta-Llama-3.1-405B-Instruct | Free | 50 | 8,192 | Fast |
Gemini 2.5 Pro | gemini-2.5-pro-preview-05-06 | Free | 60 | 32,768 | Ultra Fast | ||
GitHub | GPT-4.1 | github | openai/gpt-4.1 | Free | 50 | 8,192 | Fast |
GitHub | GPT-4o | github | gpt-4o | Free | 50 | 8,192 | Fast |
GitHub | O1 Preview | github | o1-preview | Free | 50 | 8,192 | Fast |
Groq | DeepSeek R1 Distill Llama 70B | groq | deepseek-r1-distill-llama-70b | Free | 100 | 131,072 | Ultra Fast |
Groq | Llama 3.3 70B Versatile | groq | llama-3.3-70b-versatile | Free | 100 | 131,072 | Ultra Fast |
Groq | Qwen3 32B | groq | qwen/qwen3-32b | Free | 100 | 4,096 | Ultra Fast |
Groq | Llama 4 Maverick 17B | groq | llama-4-maverick-17b-128e-instruct | Free | 100 | 131,072 | Ultra Fast |
GitHub | DeepSeek R1 | github | DeepSeek-R1 | Free | 50 | 8,192 | Fast |
Gemini 2.5 Flash | gemini-2.5-flash-preview-05-20 | Free | 60 | 32,768 | Ultra Fast | ||
Gemma 3N E4B IT | gemma-3n-e4b-it | Free | 60 | 32,768 | Ultra Fast | ||
Gemini Pro Exp | gemini-2.0-pro-exp-02-05 | Free | 60 | 32,768 | Ultra Fast | ||
Gemini Flash | gemini-2.0-flash | Free | 60 | 32,768 | Ultra Fast | ||
Gemini Flash Thinking | gemini-2.0-flash-thinking-exp-01-21 | Free | 60 | 32,768 | Ultra Fast | ||
Gemini Flash Lite | gemini-2.0-flash-lite-preview-02-05 | Free | 60 | 32,768 | Ultra Fast | ||
Groq | Llama 3.1 8B Instant | groq | llama-3.1-8b-instant | Free | 100 | 131,072 | Ultra Fast |
Groq | Llama 3.2 3B Preview | groq | llama-3.2-3b-preview | Free | 100 | 131,072 | Ultra Fast |
GitHub | GPT-4o Mini | github | gpt-4o-mini | Free | 50 | 8,192 | Fast |
GitHub | O3 Mini | github | o3-mini | Free | 50 | 8,192 | Fast |
GitHub | O1 Mini | github | o1-mini | Free | 50 | 8,192 | Fast |
Provider | Model | Vision Provider ID | Model ID | Price | Rate Limit (per min) | Speed |
---|---|---|---|---|---|---|
Gemini 2.5 Pro Vision | gemini | gemini-2.5-pro-preview-05-06 | Free | 60 | Ultra Fast | |
GitHub | GPT-4.1 Vision | github | openai/gpt-4.1 | Free | 50 | Fast |
GitHub | GPT-4o Vision | github | gpt-4o | Free | 50 | Fast |
GitHub | Phi-4 Multimodal | github | phi-4-multimodal-instruct | Free | 50 | Fast |
Groq | Llama 4 Maverick Vision | groq | meta-llama/llama-4-maverick-17b-128e-instruct | Free | 100 | Ultra Fast |
Groq | Llama 4 Scout Vision | groq | meta-llama/llama-4-scout-17b-16e-instruct | Free | 100 | Ultra Fast |
Gemini 2.5 Flash Vision | gemini | gemini-2.5-flash-preview-05-20 | Free | 60 | Ultra Fast | |
Gemini 3N E4B IT Vision | gemini | gemini-3n-e4b-it | Free | 60 | Ultra Fast | |
Gemini Vision Exp | gemini | gemini-exp-1206 | Free | 60 | Ultra Fast | |
Gemini Vision Flash | gemini | gemini-2.0-flash | Free | 60 | Ultra Fast | |
GitHub | GPT-4o Mini Vision | github | gpt-4o-mini | Free | 50 | Fast |
from cognicore import LanguageModel
# Initialize a session with specific provider and model IDs
session = LanguageModel(
llm_model="llama-3.3-70b-versatile", # Model ID from the table above
llm_provider="groq", # Provider ID from the table above
temperature=0.7
)
Contributions are welcome! Feel free to:
This project is licensed under the MIT License. See the LICENSE file for details.
You can initialize both LanguageModel
and ImageAnalyzerAgent
in three ways:
from cognicore import LanguageModel
llm = LanguageModel(
llm_model="llama-3.3-70b-versatile",
llm_provider="groq",
max_tokens=1024,
)
config = {
'llm_model': 'llama-3.3-70b-versatile',
'llm_provider': 'groq',
'max_tokens': 1024,
}
llm = LanguageModel(config=config)
llm = LanguageModel(config="exemple_config.yaml")
The same logic applies to ImageAnalyzerAgent
:
analyzer = ImageAnalyzerAgent(config="exemple_config.yaml")
Why is this useful?
For some providers (notably Gemini and Groq), you can pass either a single image path or a list of image paths to the describe
method:
# Single image
result = analyzer.describe("path/to/image1.jpg", prompt="Describe this image", vision_model="gemini-2.5-flash-preview-05-20", vision_provider="gemini")
# Multiple images (Gemini or Groq only)
result = analyzer.describe([
"path/to/image1.jpg",
"path/to/image2.jpg"
], prompt="Describe both images", vision_model="llama-3.2-90b-vision-preview", vision_provider="groq")
Note: Passing multiple images is only supported for providers that support it (currently Gemini and Groq). For other providers, only a single image path (str) is accepted.
TextClassifier
TextClassifier
is a utility class for classifying text into a defined list of classes (index, name, description). It inherits from LanguageModel
and thus relies on the same flexible interface (manual arguments, config dictionary, or YAML config path).
TextClassifier
inherits from LanguageModel
to leverage all the multi-provider LLM calling logic..classify()
method to get the predicted class index or name.prompts
folder.text_classifier_utils.py
config section (see example below).from cognicore.text_classifier_utils import TextClassifier
# Using a YAML config file
classifier = TextClassifier(config="exemple_config.yaml")
text = "I'm looking for a job in Paris."
print("Class index:", classifier.classify(text))
print("Class name:", classifier.classify(text, return_class_name=True))
exemple_config.yaml
)# Parameters for text_classifier_utils.py
classification_labels_dict: {
0: {"class_name": "question", "description": "A general question about any topic."},
2: {"class_name": "internet_search", "description": "A request to search for information on the internet."}
}
classifier_system_prompt: "You are an agent in charge of classifying user's queries into different categories of tasks."
prompts
folder.ImageClassifier
ImageClassifier
is a utility class for classifying an image among a defined list of classes (index, name, description). It inherits from ImageAnalyzerAgent
(see vision_utils.py) and thus relies on the same flexible interface (manual arguments, config dictionary, or YAML config path).
ImageClassifier
inherits from ImageAnalyzerAgent
to leverage all the multi-provider vision calling logic..classify()
method to get the predicted class index or name for an image.prompts
folder.image_classifier_utils.py
config section (see example below).from cognicore.image_classifier_utils import ImageClassifier
# Using a YAML config file
image_classifier = ImageClassifier(config="exemple_config.yaml")
image_path = "path/to/image.jpg"
print("Class index:", image_classifier.classify(image_path))
print("Class name:", image_classifier.classify(image_path, return_class_name=True))
exemple_config.yaml
)# Parameters for image_classifier_utils.py
classification_labels_dict: {
0: {"class_name": "cat", "description": "A domestic cat."},
1: {"class_name": "dog", "description": "A domestic dog."},
2: {"class_name": "bird", "description": "A bird."}
}
image_classifier_system_prompt: "You are an agent in charge of classifying images into different categories."
image_classification_model: "meta-llama/llama-4-scout-17b-16e-instruct"
image_classification_provider: "groq"
prompts
folder.FAQs
A Python toolbox for easy interaction with various LLMs and Vision models
We found that cognicore demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
Research
/Security News
A RubyGems malware campaign used 60 malicious packages posing as automation tools to steal credentials from social media and marketing tool users.
Security News
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.