Skip to content

Commit

Permalink
Merge branch 'main' into add-pgvector-datastore
Browse files Browse the repository at this point in the history
  • Loading branch information
sahusiddharth authored Jan 5, 2024
2 parents c87c374 + 03eca65 commit 825f73c
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 11 deletions.
55 changes: 55 additions & 0 deletions integrations/ollama/example/example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# In order to run this example, you will need to have an instance of Ollama running with the
# orca-mini model downloaded. We suggest you use the following commands to serve an orca-mini
# model from Ollama
#
# docker run -d -p 11434:11434 --name ollama ollama/ollama:latest
# docker exec ollama ollama pull orca-mini

from haystack import Document, Pipeline
from haystack.components.builders.prompt_builder import PromptBuilder
from haystack.components.retrievers import InMemoryBM25Retriever
from haystack.document_stores.in_memory import InMemoryDocumentStore

from ollama_haystack import OllamaGenerator

document_store = InMemoryDocumentStore()
document_store.write_documents(
[
Document(content="Super Mario was an important politician"),
Document(content="Mario owns several castles and uses them to conduct important political business"),
Document(
content="Super Mario was a successful military leader who fought off several invasion attempts by "
"his arch rival - Bowser"
),
]
)

query = "Who is Super Mario?"

template = """
Given only the following information, answer the question.
Ignore your own knowledge.
Context:
{% for document in documents %}
{{ document.content }}
{% endfor %}
Question: {{ query }}?
"""
pipe = Pipeline()

pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
pipe.add_component("prompt_builder", PromptBuilder(template=template))
pipe.add_component("llm", OllamaGenerator(model="orca-mini"))
pipe.connect("retriever", "prompt_builder.documents")
pipe.connect("prompt_builder", "llm")

response = pipe.run({"prompt_builder": {"query": query}, "retriever": {"query": query}})

print(response["llm"]["replies"])
# An expected response - the output is not deterministic:
# ['Based on the information provided, Super Mario is a successful military leader who fought
# off several invasion attempts by his arch rival - Bowser. He is also an important politician and owns several
# castles where he conducts political business. ' 'Therefore, it can be inferred that Super Mario is a combination of
# both a military leader and an important politician.']
2 changes: 2 additions & 0 deletions integrations/ollama/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,8 @@ ban-relative-imports = "all"
[tool.ruff.per-file-ignores]
# Tests can use magic values, assertions, and relative imports
"tests/**/*" = ["PLR2004", "S101", "TID252"]
# Examples can print their output
"example/**" = ["T201"]


[tool.coverage.run]
Expand Down
24 changes: 13 additions & 11 deletions integrations/ollama/src/ollama_haystack/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ def __init__(
:param url: The URL of the generation endpoint of a running Ollama instance.
Default is "http://localhost:11434/api/generate".
:param generation_kwargs: Optional arguments to pass to the Ollama generation endpoint, such as temperature,
top_p, etc. See the
top_p, and others. See the available arguments in
[Ollama docs](https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values).
:param system_prompt: Optional system message (overrides what is defined in the Ollama Modelfile).
:param template: The full prompt template (overrides what is defined in the Ollama Modelfile).
:param raw: If True, no formatting will be applied to the prompt. You may choose to use the raw parameter
if you are specifying a full templated prompt in your request to the API.
if you are specifying a full templated prompt in your API request.
:param timeout: The number of seconds before throwing a timeout error from the Ollama API.
Default is 30 seconds.
"""
Expand All @@ -47,10 +47,12 @@ def __init__(

def _create_json_payload(self, prompt: str, generation_kwargs=None) -> Dict[str, Any]:
"""
Returns A dictionary of JSON arguments for a POST request to an Ollama service
:param prompt: the prompt to generate a response for
:param generation_kwargs:
:return: A dictionary of arguments for a POST request to an Ollama service
Returns a dictionary of JSON arguments for a POST request to an Ollama service.
:param prompt: The prompt to generate a response for.
:param generation_kwargs: Optional arguments to pass to the Ollama generation endpoint, such as temperature,
top_p, and others. See the available arguments in
[Ollama docs](https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values).
:return: A dictionary of arguments for a POST request to an Ollama service.
"""
generation_kwargs = generation_kwargs or {}
return {
Expand All @@ -65,9 +67,9 @@ def _create_json_payload(self, prompt: str, generation_kwargs=None) -> Dict[str,

def _convert_to_haystack_response(self, ollama_response: Response) -> Dict[str, List[Any]]:
"""
Convert a response from the Ollama API to the required Haystack format
:param ollama_response: A response (requests library) from the Ollama API
:return: A dictionary of the returned responses and metadata
Convert a response from the Ollama API to the required Haystack format.
:param ollama_response: A response (requests library) from the Ollama API.
:return: A dictionary of the returned responses and metadata.
"""
resp_dict = ollama_response.json()

Expand All @@ -83,10 +85,10 @@ def run(
generation_kwargs: Optional[Dict[str, Any]] = None,
):
"""
Run an Ollama Model on the a given prompt.
Run an Ollama Model on the given prompt.
:param prompt: The prompt to generate a response for.
:param generation_kwargs: Optional arguments to pass to the Ollama generation endpoint, such as temperature,
top_p, etc. See the
top_p, and others. See the available arguments in
[Ollama docs](https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values).
:return: A dictionary of the response and returned metadata
"""
Expand Down

0 comments on commit 825f73c

Please sign in to comment.