Skip to content

Commit

Permalink
fix: add gemini-1.5-pro-latest for llm
Browse files Browse the repository at this point in the history
  • Loading branch information
nobu007 committed May 5, 2024
1 parent d3d80d0 commit 20063d3
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 5 deletions.
55 changes: 54 additions & 1 deletion server.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,64 @@
from codeinterpreterapi import CodeInterpreterSession

model = "claude-3-haiku-20240307"
model = "gemini-1.5-pro-latest"
session = CodeInterpreterSession(model=model)

try:
message = """SVG画像を自動生成するプログラムの要件を以下のように定義します。
目的:
電子書籍のヘッダ画像を自動生成すること
別のコンテンツ生成プログラムが出力したSVGファイルを入力として受け取ること
入力SVGファイルを指定の要件に従って加工し、新たなSVGファイルとして出力すること
機能要件:
グリッドレイアウト機能の実装
指定したグリッドサイズ(行数、列数)に基づいて要素を配置できるようにする
グリッドの各セルに対して要素を割り当てられるようにする
グリッドのサイズや間隔を柔軟に設定できるようにする
SVG要素の配置と編集
グリッド上の指定した位置にSVG要素(テキスト、図形、画像など)を配置できるようにする
配置する要素の属性(サイズ、色、フォントなど)を柔軟に設定できるようにする
既存のSVG要素を削除、移動、変更できるようにする
外部画像ファイルの読み込みと配置
PNGやJPEGなどの外部画像ファイルを読み込んでSVGファイルに埋め込めるようにする
読み込んだ画像をグリッド上の指定した位置に配置できるようにする
画像のサイズを変更できるようにする
SVGファイルの入出力
SVGファイルを入力として読み込み、加工後のSVGファイルを出力できるようにする
出力ファイルのファイル名やパスを指定できるようにする
非機能要件:
Python3とsvgwriteライブラリを使用して実装すること
コードはモジュール化し、再利用性と保守性を高めること
エラーハンドリングを適切に行い、ログ出力を行うこと
コードにはコメントを付けて可読性を高めること
実装の進め方:
svgwriteを使ったSVGファイルの基本的な読み込み、編集、出力の機能を実装する
グリッドレイアウト機能を実装し、要素を配置できるようにする
外部画像ファイルの読み込みと配置機能を実装する
入力SVGファイルを読み込んで、指定の要件に従って加工し、新たなSVGファイルを出力する一連の処理を実装する
細かい仕様について検討し、機能を拡張する
テストを行い、不具合を修正する
ドキュメントを整備し、コードをリファクタリングする
まずはこの要件定義に基づいて、各機能の実装に着手してください。実装方法や詳細な手順は、要件に合わせて適宜ご判断ください。
作業フォルダは/app/workを使ってください。
全ての処理は自動で実施して結果とプログラムだけ報告してください。
"""
status = session.start_local()
result = session.generate_response("Plot the nvidea stock vs microsoft stock over the last 6 months.")
result = session.generate_response(message)
result.show()
except Exception as e:
print(e)
10 changes: 9 additions & 1 deletion src/codeinterpreterapi/agents/agents.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from langchain.memory.buffer import ConversationBufferMemory
from langchain_core.prompts.chat import MessagesPlaceholder
from langchain_experimental.plan_and_execute import PlanAndExecute, load_agent_executor, load_chat_planner
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_openai import AzureChatOpenAI, ChatOpenAI

from codeinterpreterapi.config import settings
Expand All @@ -25,13 +26,20 @@ def choose_single_chat_agent(
system_message=settings.SYSTEM_MESSAGE,
extra_prompt_messages=[MessagesPlaceholder(variable_name="chat_history")],
)
elif isinstance(llm, BaseChatModel):
elif isinstance(llm, ChatGoogleGenerativeAI):
print("choose_agent ConversationalChatAgent(ANTHROPIC)")
return ConversationalChatAgent.from_llm_and_tools(
llm=llm,
tools=tools,
system_message=settings.SYSTEM_MESSAGE.content.__str__(),
)
elif isinstance(llm, ChatGoogleGenerativeAI):
print("choose_agent ChatGoogleGenerativeAI(gemini-pro)")
return ConversationalChatAgent.from_llm_and_tools(
llm=llm,
tools=tools,
system_message=settings.SYSTEM_MESSAGE.content.__str__(),
)
else:
print("choose_agent ConversationalAgent(default)")
return ConversationalAgent.from_llm_and_tools(
Expand Down
1 change: 1 addition & 0 deletions src/codeinterpreterapi/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class CodeInterpreterAPISettings(BaseSettings):
AZURE_API_BASE: Optional[str] = None
AZURE_API_VERSION: Optional[str] = None
AZURE_DEPLOYMENT_NAME: Optional[str] = None
GEMINI_API_KEY: Optional[SecretStr] = None
ANTHROPIC_API_KEY: Optional[SecretStr] = None

# LLM Settings
Expand Down
16 changes: 13 additions & 3 deletions src/codeinterpreterapi/llm/llm.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,25 @@ def get_llm(self) -> BaseChatModel:
timeout=settings.REQUEST_TIMEOUT,
) # type: ignore
if settings.OPENAI_API_KEY:
from langchain_openai import ChatOpenAI
from langchain_openai import ChatGoogleGenerativeAI

return ChatOpenAI(
return ChatGoogleGenerativeAI(
model=settings.MODEL,
api_key=settings.OPENAI_API_KEY,
api_key=settings.GEMINI_API_KEY,
timeout=settings.REQUEST_TIMEOUT,
temperature=settings.TEMPERATURE,
max_retries=settings.MAX_RETRY,
) # type: ignore
if settings.GEMINI_API_KEY:
from langchain_google_genai import ChatGoogleGenerativeAI # type: ignore

if "gemini" not in settings.MODEL:
print("Please set the gemini model in the settings.")
return ChatGoogleGenerativeAI(
model=settings.MODEL,
temperature=settings.TEMPERATURE,
google_api_key=settings.GEMINI_API_KEY,
)
if settings.ANTHROPIC_API_KEY:
from langchain_anthropic import ChatAnthropic # type: ignore

Expand Down

0 comments on commit 20063d3

Please sign in to comment.