From 06bf1a4a0d5fcc96ec846b0040cd7bbdcea3aef8 Mon Sep 17 00:00:00 2001 From: bernomone Date: Sun, 18 Jan 2026 17:16:19 +0100 Subject: [PATCH 1/5] feat(pyproject): update pydantic ai version --- pyproject.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f1409b4..4989370 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,11 +7,11 @@ build-backend = "setuptools.build_meta" [project] name = "askademic" -version = "2.0.0" +version = "2.1.0" dependencies = [ - "pydantic==2.10.6", - "pydantic-ai==0.2.15", - "logfire==3.18.0", + "pydantic==2.11.7", + "pydantic-ai==1.44.0", + "logfire==4.16.0", "requests==2.32.3", "pandas==2.2.3", "tabulate==0.9.0", From 852d3df666e2fc0bff67b30b99ab7e579e244364 Mon Sep 17 00:00:00 2001 From: bernomone Date: Sun, 18 Jan 2026 17:22:38 +0100 Subject: [PATCH 2/5] feat(all): use provider:model syntax and fix tests --- pyproject.toml | 4 ++++ src/askademic/article.py | 5 +++-- src/askademic/constants.py | 10 ++++++---- src/askademic/general.py | 3 +-- src/askademic/question.py | 3 +-- src/askademic/summary.py | 7 +++---- src/askademic/utils.py | 23 ++++++----------------- tests/test_article.py | 4 ++-- tests/test_question.py | 6 +++--- tests/test_summarizer.py | 5 ++--- 10 files changed, 31 insertions(+), 39 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4989370..a68d6b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,3 +44,7 @@ askademic = "askademic.main:main" [tool.pytest.ini_options] pythonpath = ["src"] +asyncio_default_fixture_loop_scope = "function" +filterwarnings = [ + "ignore:builtin type Swig:DeprecationWarning", +] diff --git a/src/askademic/article.py b/src/askademic/article.py index c115247..61582fb 100644 --- a/src/askademic/article.py +++ b/src/askademic/article.py @@ -3,7 +3,6 @@ from pydantic import BaseModel, Field from pydantic_ai import Agent -from pydantic_ai.models import Model from pydantic_ai.settings import ModelSettings from askademic.prompts.general import ( @@ -61,7 +60,9 @@ class ArticleRetrievalResponse(BaseModel): class ArticleAgent: - def __init__(self, model: Model, model_settings: ModelSettings = None, use_cache: bool = True): + def __init__( + self, model: str, model_settings: ModelSettings = None, use_cache: bool = True + ): self._get_article = get_article self.use_cache = use_cache diff --git a/src/askademic/constants.py b/src/askademic/constants.py index bb6f7d3..daf7b29 100644 --- a/src/askademic/constants.py +++ b/src/askademic/constants.py @@ -7,11 +7,13 @@ - Type "help" to see instructions again """ -# LLM model IDs -GEMINI_2_FLASH_MODEL_ID = "gemini-2.0-flash" +# LLM model IDs (using provider:model syntax) +GEMINI_2_FLASH_MODEL_ID = "google-gla:gemini-2.0-flash" CLAUDE_HAIKU_3_5_MODEL_ID = "anthropic:claude-3-5-haiku-latest" -CLAUDE_HAIKU_3_5_BEDROCK_MODEL_ID = "{region}.anthropic.claude-3-5-haiku-20241022-v1:0" -NOVA_PRO_BEDROCK_MODEL_ID = "{region}.amazon.nova-pro-v1:0" +CLAUDE_HAIKU_3_5_BEDROCK_MODEL_ID = ( + "bedrock:{region}.anthropic.claude-3-5-haiku-20241022-v1:0" +) +NOVA_PRO_BEDROCK_MODEL_ID = "bedrock:{region}.amazon.nova-pro-v1:0" MISTRAL_LARGE_MODEL_ID = "mistral:mistral-large-latest" # ARXIV URLS diff --git a/src/askademic/general.py b/src/askademic/general.py index 042a16b..3ec50ee 100644 --- a/src/askademic/general.py +++ b/src/askademic/general.py @@ -4,7 +4,6 @@ from pydantic import BaseModel, Field from pydantic_ai import Agent, RunContext -from pydantic_ai.models import Model from pydantic_ai.settings import ModelSettings from askademic.prompts.general import SYSTEM_PROMPT_GENERAL @@ -106,7 +105,7 @@ async def list_research_categories(ctx: RunContext[Context]) -> dict: class GeneralAgent: - def __init__(self, model: Model, model_settings: ModelSettings = None): + def __init__(self, model: str, model_settings: ModelSettings = None): self.agent = general_agent_base self.agent.model = model if model_settings: diff --git a/src/askademic/question.py b/src/askademic/question.py index a8eda75..7bf4520 100644 --- a/src/askademic/question.py +++ b/src/askademic/question.py @@ -3,7 +3,6 @@ from pydantic import BaseModel, Field from pydantic_ai import Agent -from pydantic_ai.models import Model from pydantic_ai.settings import ModelSettings from askademic.prompts.general import ( @@ -56,7 +55,7 @@ class QuestionAnswerResponse(BaseModel): class QuestionAgent: def __init__( self, - model: Model, + model: str, model_settings: ModelSettings = None, query_list_limit: int = 10, relevance_score_threshold: float = 0.8, diff --git a/src/askademic/summary.py b/src/askademic/summary.py index 3dd9d18..c74b2b8 100644 --- a/src/askademic/summary.py +++ b/src/askademic/summary.py @@ -3,7 +3,6 @@ from pydantic import BaseModel, Field from pydantic_ai import Agent, Tool -from pydantic_ai.models import Model from pydantic_ai.settings import ModelSettings from askademic.prompts.general import ( @@ -54,14 +53,14 @@ class SummaryResponse(BaseModel): class SummaryAgent: - def __init__(self, model: Model, model_settings: ModelSettings = None): + def __init__(self, model: str, model_settings: ModelSettings = None): self._category_agent = Agent( model=model, model_settings=model_settings, system_prompt=SYSTEM_PROMPT_CATEGORY, output_type=Category, - tools=[Tool(get_categories, takes_ctx=False)], + tools=[Tool(get_categories)], ) self._summary_agent = Agent( @@ -71,7 +70,7 @@ def __init__(self, model: Model, model_settings: ModelSettings = None): output_type=Summary, ) - if "nova" in model.model_name: + if "nova" in model: self._max_results = 100 else: self._max_results = 300 diff --git a/src/askademic/utils.py b/src/askademic/utils.py index 1d4115b..293ed3c 100644 --- a/src/askademic/utils.py +++ b/src/askademic/utils.py @@ -5,10 +5,6 @@ import boto3 import feedparser import pandas as pd -from pydantic_ai.models import Model -from pydantic_ai.models.anthropic import AnthropicModel -from pydantic_ai.models.bedrock import BedrockConverseModel, BedrockModelSettings -from pydantic_ai.models.gemini import GeminiModel from pydantic_ai.settings import ModelSettings from askademic.constants import ( @@ -23,9 +19,10 @@ logger = logging.getLogger(__name__) -def choose_model(model_family: str = "gemini") -> Tuple[Model, ModelSettings]: +def choose_model(model_family: str = "gemini") -> Tuple[str, ModelSettings]: """ Choose the model ID based on the given model family. + Returns a tuple of (model_string, model_settings) using the provider:model syntax. """ if model_family not in [ "gemini", @@ -36,17 +33,12 @@ def choose_model(model_family: str = "gemini") -> Tuple[Model, ModelSettings]: raise ValueError(f"Invalid model family '{model_family}'.") if model_family == "gemini": - model_name = GEMINI_2_FLASH_MODEL_ID - model = GeminiModel(model_name=model_name) model_settings = ModelSettings(max_tokens=1000, temperature=0) - return model, model_settings + return GEMINI_2_FLASH_MODEL_ID, model_settings elif model_family == "claude": - model_name = CLAUDE_HAIKU_3_5_MODEL_ID - model = AnthropicModel(model_name=model_name) model_settings = ModelSettings(max_tokens=1000, temperature=0) - return model, model_settings + return CLAUDE_HAIKU_3_5_MODEL_ID, model_settings elif model_family in ("claude-aws-bedrock", "nova-pro-aws-bedrock"): - model_id = ( CLAUDE_HAIKU_3_5_BEDROCK_MODEL_ID if model_family == "claude-aws-bedrock" @@ -60,14 +52,11 @@ def choose_model(model_family: str = "gemini") -> Tuple[Model, ModelSettings]: region = region.split("-")[0] model_name = model_id.format(region=region) - model_settings = BedrockModelSettings( + model_settings = ModelSettings( temperature=0, max_tokens=4000, - top_k=1, - bedrock_performance_configuration={"latency": "optimized"}, ) - model = BedrockConverseModel(model_name=model_name) - return model, model_settings + return model_name, model_settings def list_categories() -> dict: diff --git a/tests/test_article.py b/tests/test_article.py index d724a50..13fd574 100644 --- a/tests/test_article.py +++ b/tests/test_article.py @@ -5,7 +5,7 @@ import pytest from pydantic_ai.agent import AgentRunResult # noqa: F401 -os.environ["GEMINI_API_KEY"] = "mock" +os.environ["GOOGLE_API_KEY"] = "mock" from askademic.article import ( # noqa: E402 USER_PROMPT_ARTICLE_RETRIEVAL_TEMPLATE, @@ -65,7 +65,7 @@ async def test_article_agent( # Mock the agents article_agent = ArticleAgent( - model="gemini-2.0-flash", + model="google-gla:gemini-2.0-flash", ) article_agent._get_article = MagicMock( return_value="Mocked article text for testing purposes." diff --git a/tests/test_question.py b/tests/test_question.py index fd59d8b..353be66 100644 --- a/tests/test_question.py +++ b/tests/test_question.py @@ -5,7 +5,7 @@ import pytest from pydantic_ai.agent import AgentRunResult # noqa: F401 -os.environ["GEMINI_API_KEY"] = "mock" +os.environ["GOOGLE_API_KEY"] = "mock" from askademic.question import ( # noqa: E402 Article, @@ -93,9 +93,9 @@ async def test_question_agent( ): """Test the QuestionAgent class.""" - assert os.environ["GEMINI_API_KEY"] == "mock" + assert os.environ["GOOGLE_API_KEY"] == "mock" - question_agent = QuestionAgent("gemini-2.0-flash") + question_agent = QuestionAgent("google-gla:gemini-2.0-flash") question_agent._query_agent = MagicMock() question_agent._abstract_relevance_agent = MagicMock() question_agent._many_articles_agent = MagicMock() diff --git a/tests/test_summarizer.py b/tests/test_summarizer.py index 5f1a689..4eedf09 100644 --- a/tests/test_summarizer.py +++ b/tests/test_summarizer.py @@ -4,9 +4,8 @@ import pytest from pydantic_ai.agent import AgentRunResult -from pydantic_ai.models.gemini import GeminiModel -os.environ["GEMINI_API_KEY"] = "mock" +os.environ["GOOGLE_API_KEY"] = "mock" from askademic.summary import ( # noqa: E402 Category, @@ -57,7 +56,7 @@ async def test_summary_agent( summary_response, ): """Test the SummaryAgent class.""" - model = GeminiModel(model_name="gemini-2.0-flash") + model = "google-gla:gemini-2.0-flash" summary_agent = SummaryAgent(model) summary_agent._category_agent = MagicMock() summary_agent._summary_agent = MagicMock() From 1b70066a8c289d5b8e403984034e4d0eee54a56b Mon Sep 17 00:00:00 2001 From: bernomone Date: Sun, 18 Jan 2026 17:33:10 +0100 Subject: [PATCH 3/5] fix(evals+main): use GOOGLE_API_KEY instead of GEMINI_API_KEY --- .env-template | 2 +- CLAUDE.md | 2 +- evals/evals.py | 13 +++++++------ src/askademic/main.py | 4 ++-- src/askademic/summary.py | 2 +- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.env-template b/.env-template index 0e09a39..4da0624 100644 --- a/.env-template +++ b/.env-template @@ -1,5 +1,5 @@ LLM_FAMILY="gemini" or "claude" or "claude-aws-bedrock" or "nova-pro-aws-bedrock" -GEMINI_API_KEY="your key if using gemini" +GOOGLE_API_KEY="your key if using gemini" ANTHROPIC_API_KEY="your key if using Claude" AWS_ACCESS_KEY_ID="your aws access key id if using Claude via aws bedrock" AWS_SECRET_ACCESS_KEY_ID="your aws secret access key id if using Claude via aws bedrock" diff --git a/CLAUDE.md b/CLAUDE.md index 0fc7269..c9c4a1b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -67,7 +67,7 @@ pre-commit run --all-files # Run pre-commit hooks ### Environment Variables Required in `.env` file (copy from `.env-template`): - `LLM_FAMILY`: "gemini", "claude", "claude-aws-bedrock", or "nova-pro-aws-bedrock" -- `GEMINI_API_KEY`: For Gemini models +- `GOOGLE_API_KEY`: For Gemini models - `ANTHROPIC_API_KEY`: For Claude models - `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`: For AWS Bedrock diff --git a/evals/evals.py b/evals/evals.py index 5d60a18..82fbc06 100644 --- a/evals/evals.py +++ b/evals/evals.py @@ -2,6 +2,7 @@ import os import boto3 +from botocore.exceptions import ClientError, NoCredentialsError from dotenv import load_dotenv from evals_allower import run_evals as run_evals_allower from evals_article import run_evals as run_evals_article @@ -25,10 +26,10 @@ async def main(): "nova-pro-aws-bedrock", ]: - if model_family == "gemini" and os.getenv("GEMINI_API_KEY") is None: + if model_family == "gemini" and os.getenv("GOOGLE_API_KEY") is None: console.print( """ - [bold red]GEMINI_API_KEY environment variable is not set. + [bold red]GOOGLE_API_KEY environment variable is not set. Skipping evals.[/bold red] """ ) @@ -43,13 +44,13 @@ async def main(): ) continue - if model_family == "claude-aws-bedrock": + if model_family in ("claude-aws-bedrock", "nova-pro-aws-bedrock"): try: _ = boto3.client("sts").get_caller_identity() - except boto3.exceptions.ClientError: + except (ClientError, NoCredentialsError): console.print( - """[bold red]AWS credentials are not set or invalid. - Skipping CLAUDE AWS Bedrock evals.[/bold red]""" + f"""[bold red]AWS credentials are not set or invalid. + Skipping {model_family} evals.[/bold red]""" ) continue diff --git a/src/askademic/main.py b/src/askademic/main.py index 899b386..e7d2498 100644 --- a/src/askademic/main.py +++ b/src/askademic/main.py @@ -48,9 +48,9 @@ async def ask_user_question(): async def check_environment_variables(user_model: str): if user_model == "gemini": - if not os.getenv("GEMINI_API_KEY"): + if not os.getenv("GOOGLE_API_KEY"): console.print( - "[bold red]The GEMINI_API_KEY environment variable is not set.[/bold red]" + "[bold red]The GOOGLE_API_KEY environment variable is not set.[/bold red]" ) sys.exit() elif user_model in "claude": diff --git a/src/askademic/summary.py b/src/askademic/summary.py index c74b2b8..d8f19bc 100644 --- a/src/askademic/summary.py +++ b/src/askademic/summary.py @@ -70,7 +70,7 @@ def __init__(self, model: str, model_settings: ModelSettings = None): output_type=Summary, ) - if "nova" in model: + if "nova" in str(model): self._max_results = 100 else: self._max_results = 300 From 4e4512b5f45e802d52c0bd6f47f3a21e9cd42e58 Mon Sep 17 00:00:00 2001 From: bernomone Date: Sun, 18 Jan 2026 17:38:48 +0100 Subject: [PATCH 4/5] feat(models): update haiku to kaiku 4.5 --- CLAUDE.md | 2 +- README.md | 4 ++-- src/askademic/constants.py | 6 +++--- src/askademic/utils.py | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index c9c4a1b..e2ce393 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -58,7 +58,7 @@ pre-commit run --all-files # Run pre-commit hooks ### Model Support - **Gemini 2.0 Flash** (default, preferred for cost and context window) -- **Claude 3.5 Haiku** (experimental, rate limited) +- **Claude 4.5 Haiku** (experimental, rate limited) - **Claude via AWS Bedrock** (experimental) - **Nova Pro via AWS Bedrock** (experimental) diff --git a/README.md b/README.md index 4dee8c3..9313c5a 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,8 @@ As for everything that uses LLM, **check your outputs** - it can make mistakes. As its underlying LLM, you can choose to run it either with: * Gemini (it will use 2.0 Flash) [preferred and default option] -* Claude (it will use Haiku 3.5) [experimental] -* Claude via AWS Bedrock (it will use Haiku 3.5) [experimental] +* Claude (it will use Haiku 4.5) [experimental] +* Claude via AWS Bedrock (it will use Haiku 4.5) [experimental] * Nova Pro via AWS Bedrock [experimental] Gemini is preferred because: diff --git a/src/askademic/constants.py b/src/askademic/constants.py index daf7b29..ba58dd3 100644 --- a/src/askademic/constants.py +++ b/src/askademic/constants.py @@ -9,9 +9,9 @@ # LLM model IDs (using provider:model syntax) GEMINI_2_FLASH_MODEL_ID = "google-gla:gemini-2.0-flash" -CLAUDE_HAIKU_3_5_MODEL_ID = "anthropic:claude-3-5-haiku-latest" -CLAUDE_HAIKU_3_5_BEDROCK_MODEL_ID = ( - "bedrock:{region}.anthropic.claude-3-5-haiku-20241022-v1:0" +CLAUDE_HAIKU_4_5_MODEL_ID = "anthropic:claude-haiku-4-5-latest" +CLAUDE_HAIKU_4_5_BEDROCK_MODEL_ID = ( + "bedrock:{region}.anthropic.claude-haiku-4-5-20251001-v1:0" ) NOVA_PRO_BEDROCK_MODEL_ID = "bedrock:{region}.amazon.nova-pro-v1:0" MISTRAL_LARGE_MODEL_ID = "mistral:mistral-large-latest" diff --git a/src/askademic/utils.py b/src/askademic/utils.py index 293ed3c..8103c9a 100644 --- a/src/askademic/utils.py +++ b/src/askademic/utils.py @@ -8,8 +8,8 @@ from pydantic_ai.settings import ModelSettings from askademic.constants import ( - CLAUDE_HAIKU_3_5_BEDROCK_MODEL_ID, - CLAUDE_HAIKU_3_5_MODEL_ID, + CLAUDE_HAIKU_4_5_BEDROCK_MODEL_ID, + CLAUDE_HAIKU_4_5_MODEL_ID, GEMINI_2_FLASH_MODEL_ID, NOVA_PRO_BEDROCK_MODEL_ID, ) @@ -37,10 +37,10 @@ def choose_model(model_family: str = "gemini") -> Tuple[str, ModelSettings]: return GEMINI_2_FLASH_MODEL_ID, model_settings elif model_family == "claude": model_settings = ModelSettings(max_tokens=1000, temperature=0) - return CLAUDE_HAIKU_3_5_MODEL_ID, model_settings + return CLAUDE_HAIKU_4_5_MODEL_ID, model_settings elif model_family in ("claude-aws-bedrock", "nova-pro-aws-bedrock"): model_id = ( - CLAUDE_HAIKU_3_5_BEDROCK_MODEL_ID + CLAUDE_HAIKU_4_5_BEDROCK_MODEL_ID if model_family == "claude-aws-bedrock" else NOVA_PRO_BEDROCK_MODEL_ID ) From 88afc950ab1e618341892b9c0d75ae0b6e069c63 Mon Sep 17 00:00:00 2001 From: bernomone Date: Sun, 18 Jan 2026 17:45:06 +0100 Subject: [PATCH 5/5] feat(models): update nova pro to nova lite 2 --- .env-template | 2 +- CLAUDE.md | 4 ++-- README.md | 2 +- evals/evals.py | 4 ++-- src/askademic/constants.py | 2 +- src/askademic/main.py | 8 ++++---- src/askademic/utils.py | 8 ++++---- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.env-template b/.env-template index 4da0624..446720a 100644 --- a/.env-template +++ b/.env-template @@ -1,4 +1,4 @@ -LLM_FAMILY="gemini" or "claude" or "claude-aws-bedrock" or "nova-pro-aws-bedrock" +LLM_FAMILY="gemini" or "claude" or "claude-aws-bedrock" or "nova-lite-aws-bedrock" GOOGLE_API_KEY="your key if using gemini" ANTHROPIC_API_KEY="your key if using Claude" AWS_ACCESS_KEY_ID="your aws access key id if using Claude via aws bedrock" diff --git a/CLAUDE.md b/CLAUDE.md index e2ce393..11754c9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -60,13 +60,13 @@ pre-commit run --all-files # Run pre-commit hooks - **Gemini 2.0 Flash** (default, preferred for cost and context window) - **Claude 4.5 Haiku** (experimental, rate limited) - **Claude via AWS Bedrock** (experimental) -- **Nova Pro via AWS Bedrock** (experimental) +- **Nova 2 Lite via AWS Bedrock** (experimental) ## Configuration ### Environment Variables Required in `.env` file (copy from `.env-template`): -- `LLM_FAMILY`: "gemini", "claude", "claude-aws-bedrock", or "nova-pro-aws-bedrock" +- `LLM_FAMILY`: "gemini", "claude", "claude-aws-bedrock", or "nova-lite-aws-bedrock" - `GOOGLE_API_KEY`: For Gemini models - `ANTHROPIC_API_KEY`: For Claude models - `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`: For AWS Bedrock diff --git a/README.md b/README.md index 9313c5a..1110f7b 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ As its underlying LLM, you can choose to run it either with: * Gemini (it will use 2.0 Flash) [preferred and default option] * Claude (it will use Haiku 4.5) [experimental] * Claude via AWS Bedrock (it will use Haiku 4.5) [experimental] -* Nova Pro via AWS Bedrock [experimental] +* Nova 2 Lite via AWS Bedrock [experimental] Gemini is preferred because: * it has a free tier - we privilege cost-effectiveness over speed, which means for short conversations you should be within the quotas of the free tier diff --git a/evals/evals.py b/evals/evals.py index 82fbc06..cf1a9b0 100644 --- a/evals/evals.py +++ b/evals/evals.py @@ -23,7 +23,7 @@ async def main(): "gemini", "claude", "claude-aws-bedrock", - "nova-pro-aws-bedrock", + "nova-lite-aws-bedrock", ]: if model_family == "gemini" and os.getenv("GOOGLE_API_KEY") is None: @@ -44,7 +44,7 @@ async def main(): ) continue - if model_family in ("claude-aws-bedrock", "nova-pro-aws-bedrock"): + if model_family in ("claude-aws-bedrock", "nova-lite-aws-bedrock"): try: _ = boto3.client("sts").get_caller_identity() except (ClientError, NoCredentialsError): diff --git a/src/askademic/constants.py b/src/askademic/constants.py index ba58dd3..887e81f 100644 --- a/src/askademic/constants.py +++ b/src/askademic/constants.py @@ -13,7 +13,7 @@ CLAUDE_HAIKU_4_5_BEDROCK_MODEL_ID = ( "bedrock:{region}.anthropic.claude-haiku-4-5-20251001-v1:0" ) -NOVA_PRO_BEDROCK_MODEL_ID = "bedrock:{region}.amazon.nova-pro-v1:0" +NOVA_LITE_BEDROCK_MODEL_ID = "bedrock:{region}.amazon.nova-2-lite-v1:0" MISTRAL_LARGE_MODEL_ID = "mistral:mistral-large-latest" # ARXIV URLS diff --git a/src/askademic/main.py b/src/askademic/main.py index e7d2498..57e5bbb 100644 --- a/src/askademic/main.py +++ b/src/askademic/main.py @@ -59,7 +59,7 @@ async def check_environment_variables(user_model: str): "[bold red]The ANTHROPIC_API_KEY environment variable is not set.[/bold red]" ) sys.exit() - elif user_model in ("claude-aws-bedrock", "nova-pro-aws-bedrock"): + elif user_model in ("claude-aws-bedrock", "nova-lite-aws-bedrock"): try: _ = boto3.client("sts").get_caller_identity() except boto3.exceptions.ClientError: @@ -75,7 +75,7 @@ async def check_environment_variables(user_model: str): console.print( "[bold red]Invalid model family selected. " + "Please choose 'gemini', 'claude', 'claude-aws-bedrock'" - + " or 'nova-pro-aws-bedrock'.[/bold red]" + + " or 'nova-lite-aws-bedrock'.[/bold red]" ) sys.exit() @@ -125,12 +125,12 @@ async def ask_me(): "gemini", "claude", "claude-aws-bedrock", - "nova-pro-aws-bedrock", + "nova-lite-aws-bedrock", ): console.print( """[bold red]Please configure the LLM family to be either "gemini" or "claude", "claude-aws-bedrock" - or "nova-pro-aws-bedrock"):[/bold red]""" + or "nova-lite-aws-bedrock"):[/bold red]""" ) return diff --git a/src/askademic/utils.py b/src/askademic/utils.py index 8103c9a..37d9687 100644 --- a/src/askademic/utils.py +++ b/src/askademic/utils.py @@ -11,7 +11,7 @@ CLAUDE_HAIKU_4_5_BEDROCK_MODEL_ID, CLAUDE_HAIKU_4_5_MODEL_ID, GEMINI_2_FLASH_MODEL_ID, - NOVA_PRO_BEDROCK_MODEL_ID, + NOVA_LITE_BEDROCK_MODEL_ID, ) today = datetime.now().strftime("%Y-%m-%d") @@ -28,7 +28,7 @@ def choose_model(model_family: str = "gemini") -> Tuple[str, ModelSettings]: "gemini", "claude", "claude-aws-bedrock", - "nova-pro-aws-bedrock", + "nova-lite-aws-bedrock", ]: raise ValueError(f"Invalid model family '{model_family}'.") @@ -38,11 +38,11 @@ def choose_model(model_family: str = "gemini") -> Tuple[str, ModelSettings]: elif model_family == "claude": model_settings = ModelSettings(max_tokens=1000, temperature=0) return CLAUDE_HAIKU_4_5_MODEL_ID, model_settings - elif model_family in ("claude-aws-bedrock", "nova-pro-aws-bedrock"): + elif model_family in ("claude-aws-bedrock", "nova-lite-aws-bedrock"): model_id = ( CLAUDE_HAIKU_4_5_BEDROCK_MODEL_ID if model_family == "claude-aws-bedrock" - else NOVA_PRO_BEDROCK_MODEL_ID + else NOVA_LITE_BEDROCK_MODEL_ID ) region = boto3.session.Session().region_name