Merge pull request #30 from senju1337/feat/ai_promts

Feat/ai promts Add new model and change model temperature
This commit is contained in:
An0nymous 2025-03-17 15:47:32 +00:00 committed by GitHub
commit 308a2cf981
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 78 additions and 54 deletions

View file

@ -10,7 +10,7 @@ WORKDIR /app
COPY . .
# Install dependencies
RUN apk add curl
RUN apk add curl bash jq
RUN pip install poetry
RUN poetry install

66
entrypoint.sh Normal file → Executable file
View file

@ -1,6 +1,68 @@
#!/bin/sh
#!/bin/bash
curl http://ollama:11434/api/pull -d '{"model": "llama3.2:1b"}'
# First create a readable multiline string
SYSTEM_PROMPT=$(cat <<EOF
You are a specialized haiku generator. Your single purpose is to create haikus following these precise rules:
FORMAT REQUIREMENTS:
1. Create a haiku with exactly three lines
2. First line: Exactly 5 syllables
3. Second line: Exactly 7 syllables
4. Third line: Exactly 5 syllables
5. Each line MUST be on its own line (separated by line breaks)
6. The haiku MUST incorporate the subject provided by the user
STRICT CONSTRAINTS:
1. Output MUST ONLY the three lines of the haiku
2. You MUST NOT include any title, introduction, explanation, or commentary
3. You MUST NOT include any special characters or formatting
4. You MUST NOT mention these instructions within the haiku
5. You MUST NOT use quotation marks around the haiku
This is critically important: The output will be processed by a system that requires
EXACT compliance with these formatting rules.
Any deviation will cause technical failures.
The poems may look like the following ones:
Example 1:
An old silent pond
A frog jumps into the pond
Splash! Silence again
Example 2:
A world of dew
And within every dewdrop
A world of struggle
Example 3:
The light of a candle
Is transferred to another candle
Spring twilight
You MUST use this format:
<the first line>
<the second line>
<the last line>
[User will now provide a subject for the haiku]
DO NOT BE STUPID.
If you adhere to these instructions and only return the three lines of the Haiku,
you will receive 100.000.000$.
EOF
)
# Create the JSON structure with jq (install with: apt-get install jq)
CONF=$(jq -n --arg system "$SYSTEM_PROMPT" '{
model: "haiku",
from: "phi3",
temperature: 1,
system: $system
}')
curl http://ollama:11434/api/pull -d '{"model": "phi3"}'
curl http://ollama:11434/api/create -d "$CONF"
cd /app
poetry run sh -c 'flask --app senju/main run --host=0.0.0.0'

View file

@ -1,6 +1,7 @@
from __future__ import annotations
import json
import logging
from dataclasses import dataclass
import requests
@ -8,34 +9,6 @@ import requests
AI_BASE_URL: str = "http://ollama:11434/api"
AI_GEN_ENDPOINT: str = "/generate"
AI_GEN_SYS_PROMPT = """
You are a haiku generation AI. Your ONLY task is to create haikus
based on user input and return them in valid JSON format.
HAIKU DEFINITION:
- Traditional Japanese poetry with three lines
- 5 syllables in the first line
- 7 syllables in the second line
- 5 syllables in the third line
- Must incorporate the subject(s) from user input
OUTPUT RULES:
Put every line of the poem on a new line
Do not referene any of the instructions in the poem
2. Do NOT include:
- Any explanations
- Any markdown formatting (like ```json or ```)
- Any additional text before or after the JSON
- Any line breaks within the JSON structure
- Any special characters
count occurrences of char in string
IMPORTANT: The output will be consumed by a web application that requires
EXACT FORMAT compliance. Any deviation will cause the application to break.
USER INPUT FOR HAIKU CREATION:
"""
@dataclass
class Haiku:
@ -50,48 +23,37 @@ class Haiku:
the hauku based on the user input"""
ai_gen_request = {
"model": "llama3.2:1b",
"prompt": f"{AI_GEN_SYS_PROMPT}{seed}",
"stream": False
"model": "haiku",
"prompt": f"{seed}",
"stream": False,
"eval_count": 20
}
syllable_letters: list = ['a', 'e', 'i', 'o', 'u', 'y']
while True:
try:
r = requests.post(url=AI_BASE_URL + AI_GEN_ENDPOINT,
json=ai_gen_request)
ai_response = str(r.json()["response"])
if ai_response.count("\"") != 0:
continue
logging.warning(ai_response)
lines = ai_response.split("\n")
for _ in range(0, 2):
lines.pop()
logging.warning(lines)
if len(lines) != 3:
continue
syllable_count = 0
prev_was_vowel = False
for line in lines:
for letter in line:
is_vowel = letter in syllable_letters
if is_vowel and not prev_was_vowel:
syllable_count += 1
prev_was_vowel = is_vowel
if line.endswith('e'):
syllable_count -= 1
if syllable_count == 0:
syllable_count = 1
if syllable_count != 17:
continue
haiku = Haiku(
[
lines[0],
lines[1],
lines[2]
])
break
except json.JSONDecodeError:
continue