Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add examples/semiconductor-etching-yieldguard #365

Merged
merged 33 commits into from
Oct 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
519637f
add examples/semiconductor-etching-yieldguard/README
TheVinhLuong102 Oct 5, 2024
902f4b7
Merge branch 'main' of https://GitHub.com/Aitomatic/OpenSSA into exam…
TheVinhLuong102 Oct 5, 2024
964a935
add examples/semiconductor-etching-yieldguard/semikong_lm module
TheVinhLuong102 Oct 5, 2024
d781fa3
add examples/semiconductor-etching-yieldguard key files
TheVinhLuong102 Oct 5, 2024
ac33136
add first-cut examples/semiconductor-etching-yieldguard/expert-knowledge
TheVinhLuong102 Oct 5, 2024
f904ed2
add examples/semiconductor-etching-yieldguard/.gitignore
TheVinhLuong102 Oct 5, 2024
1e1ed84
add examples/semiconductor-etching-yieldguard/.streamlit/secrets.toml…
TheVinhLuong102 Oct 5, 2024
0b63e06
add examples/semiconductor-etching-yieldguard Makefiles
TheVinhLuong102 Oct 5, 2024
fbe1cbe
Merge branch 'main' of https://GitHub.com/Aitomatic/OpenSSA into exam…
TheVinhLuong102 Oct 5, 2024
f908a10
Merge branch 'main' of https://GitHub.com/Aitomatic/OpenSSA into exam…
TheVinhLuong102 Oct 5, 2024
5c1ce15
update examples/semiconductor-etching-yieldguard Streamlit app
TheVinhLuong102 Oct 5, 2024
8f84559
update examples/semiconductor-etching-yieldguard Streamlit app
TheVinhLuong102 Oct 5, 2024
90c7480
refactor examples/semiconductor-etching-yieldguard/expertise dir
TheVinhLuong102 Oct 5, 2024
88896e9
refactor examples/semiconductor-etching-yieldguard/expertise dir
TheVinhLuong102 Oct 5, 2024
7aa1858
update examples/semiconductor-etching-yieldguard/dana module
TheVinhLuong102 Oct 5, 2024
6e87f97
refactor examples/semiconductor-etching-yieldguard/dana module
TheVinhLuong102 Oct 5, 2024
51c0a0d
refactor examples/semiconductor-etching-yieldguard/dana module
TheVinhLuong102 Oct 5, 2024
3ac61f3
refactor examples/semiconductor-etching-yieldguard/dana module
TheVinhLuong102 Oct 5, 2024
1017f54
update examples/semiconductor-etching-yieldguard/README
TheVinhLuong102 Oct 5, 2024
230cf95
update examples/semiconductor-etching-yieldguard/README
TheVinhLuong102 Oct 6, 2024
00f2387
Merge branch 'main' of https://GitHub.com/Aitomatic/OpenSSA into exam…
TheVinhLuong102 Oct 6, 2024
cbe93d1
add examples/semiconductor-etching-yieldguard/requirements.txt
TheVinhLuong102 Oct 7, 2024
43886ea
update examples/semiconductor-etching-yieldguard Streamlit app
TheVinhLuong102 Oct 7, 2024
ed10725
update examples/semiconductor-etching-yieldguard
TheVinhLuong102 Oct 7, 2024
0250e80
Merge branch 'main' of https://GitHub.com/Aitomatic/OpenSSA into exam…
TheVinhLuong102 Oct 7, 2024
b99f170
update examples/semiconductor-etching-yieldguard expert knowledge, me…
TheVinhLuong102 Oct 8, 2024
9c65938
comment out error img
radiangle Oct 8, 2024
8177e0a
update examples/semiconductor-etching-yieldguard/data/measurement-data
TheVinhLuong102 Oct 8, 2024
722e458
use absolute path in examples/semiconductor-etching-yieldguard Stream…
TheVinhLuong102 Oct 8, 2024
6bbe0a4
use absolute paths in examples/semiconductor-etching-yieldguard Strea…
TheVinhLuong102 Oct 8, 2024
f35c0ae
minor fix to st.image(...) argument type in examples/semiconductor-et…
TheVinhLuong102 Oct 8, 2024
09a3125
update examples/semiconductor-etching-yieldguard measurement data
TheVinhLuong102 Oct 8, 2024
5ec0903
update examples/semiconductor-etching-yieldguard Expert Program
TheVinhLuong102 Oct 9, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions examples/semiconductor-etching-yieldguard/.env.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
HF_API_KEY=[... HuggingFace API key if running HuggingFace-hosted models ...]
OPENAI_API_KEY=[... OpenAI API key if running on OpenAI services ...]
5 changes: 5 additions & 0 deletions examples/semiconductor-etching-yieldguard/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# environment variables
.env

# Streamlit secrets
.streamlit/secrets.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
HF_API_KEY = '[... HuggingFace API key if running HuggingFace-hosted models ...]'
OPENAI_API_KEY = '[... OpenAI API key if running on OpenAI services ...]'
2 changes: 2 additions & 0 deletions examples/semiconductor-etching-yieldguard/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
streamlit-run:
@poetry run streamlit run streamlit-main.py --server.allowRunOnSave=true --server.runOnSave=true
16 changes: 16 additions & 0 deletions examples/semiconductor-etching-yieldguard/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!-- markdownlint-disable MD013 MD043 -->

# Semiconductor Etching YieldGuard

## How to Run This Example

Install OpenSSA repo beforehand by running `make install` (or `.\make install` on Windows)
at the OpenSSA repo root directory.

In this example's directory:

- Necessary credentials need to be in the `.env` file

- DANA problem-solving can be run by `make dana-solve prob="..."` (or `.\make dana-solve "..."` on Windows)

- Streamlit app can be run by `make streamlit-run` (or `.\make streamlit-run` on Windows)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
65 changes: 65 additions & 0 deletions examples/semiconductor-etching-yieldguard/dana.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
from argparse import ArgumentParser
from functools import cache
from pathlib import Path

from dotenv import load_dotenv
import yaml

from openssa import DANA, ProgramStore, HTP, HTPlanner, FileResource, HuggingFaceLM

# pylint: disable=wrong-import-order
from semikong_lm import SemiKongLM


load_dotenv()


BASE_DIR: Path = Path(__file__).parent

DATA_DIR_PATH: Path = BASE_DIR / 'data'

EXPERTISE_DIR_PATH: Path = BASE_DIR / 'expertise'

EXPERT_KNOWLEDGE_FILE_PATH: Path = EXPERTISE_DIR_PATH / 'expert-knowledge.txt'
with open(file=EXPERT_KNOWLEDGE_FILE_PATH,
buffering=-1,
encoding='utf-8',
errors='strict',
newline=None,
closefd=True,
opener=None) as f:
EXPERT_KNOWLEDGE: str = f.read()

EXPERT_PROGRAMS_FILE_PATH: Path = EXPERTISE_DIR_PATH / 'expert-programs.yml'
with open(file=EXPERT_PROGRAMS_FILE_PATH,
buffering=-1,
encoding='utf-8',
errors='strict',
newline=None,
closefd=True,
opener=None) as f:
EXPERT_PROGRAMS: dict[str, dict] = yaml.safe_load(stream=f)


@cache
def get_or_create_dana(use_semikong_lm: bool = True, max_depth=2, max_subtasks_per_decomp=4) -> DANA:
lm = (SemiKongLM if use_semikong_lm else HuggingFaceLM).from_defaults()

program_store = ProgramStore(lm=lm)
if EXPERT_PROGRAMS:
for program_name, htp_dict in EXPERT_PROGRAMS.items():
htp = HTP.from_dict(htp_dict)
program_store.add_or_update_program(name=program_name, description=htp.task.ask, program=htp)

return DANA(knowledge={EXPERT_KNOWLEDGE},
program_store=program_store,
programmer=HTPlanner(lm=lm, max_depth=max_depth, max_subtasks_per_decomp=max_subtasks_per_decomp),
resources={FileResource(path=DATA_DIR_PATH, re_index=True)})


if __name__ == '__main__':
arg_parser = ArgumentParser()
arg_parser.add_argument('problem')
args = arg_parser.parse_args()

print(get_or_create_dana().solve(problem=args.problem))
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
WaterBatch: 1, 2, 3, 4, 5, 6

ReflectedPower_W: 36.6, 35.4, 37.5, 40.1, 42.3, 37.9

ForwardPower_W: 60.0, 58.0, 58.2, 57.8, 65.3, 60.0

ChamberPressure_Torr: 3.89, 4.18, 3.85, 4.22, 4.25, 3.53

GasFlowRate_sccm: 59.7, 58.1, 56.2, 55.1, 59.7, 54.4

ChamberWallTemperature_C: 76.3, 78.3, 76.6, 79.6, 81.7, 81.9
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
SEMICONDUCTOR ETCHING EQUIPMENT MONITORING, MAINTENANCE & OPTIMIZATION
======================================================================


RF Power Fluctuation Rule
-------------------------
HEURISTIC: If the reflected power in the TEL Tactras RLSA Etcher increases by more than 5% for three consecutive wafers,
and the forward power adjustment exceeds 10%, this suggests possible electrode erosion or plasma instability.

ACTION: Alert the maintenance engineer to inspect the electrodes and adjust gas flow or power settings,
potentially avoiding costly equipment downtime.


Pressure Stability Monitoring
-----------------------------
HEURISTIC: If the chamber pressure deviation exceeds ±3% for more than 30 seconds during steady-state etching,
coupled with a gas flow variation of more than 5%, it indicates potential chamber wall coating or residue buildup.

ACTION: Recommend a preventative chamber clean and adjust the gas flow to stabilize pressure,
reducing the likelihood of non-uniform etching.


Temperature-Dependent Chamber Cleaning Optimization
---------------------------------------------------
HEURISTIC: If the chamber wall temperature shows a steady increase of 2°C over three lots,
despite maintaining the same power settings, it indicates polymer build-up on the chamber walls.

ACTION: Suggest adjusting the chamber clean cycle frequency and alerts engineers to check the wall lining.
Automated cleaning recommendations can significantly reduce variation and increase yield.


Etch Rate Uniformity Rule
-------------------------
HEURISTIC: If the etch rate between the wafer center and edge varies by more than 7% for three consecutive lots,
this could indicate gas flow distribution issues or hardware alignment issues within the TEL Tactras system.

ACTION: Alert the process engineer to investigate gas flow uniformity
and suggests optimizing flow parameters or performing a hardware realignment.


Chamber Matching Network Heuristic
----------------------------------
HEURISTIC: If the chamber matching network requires more than two adjustments per wafer run
to maintain desired RF power settings, it suggests possible impedance mismatch or degradation in the matching components.

ACTION: Optimize matching network settings and recommend maintenance
if impedance mismatch trends persist, potentially preventing plasma stability issues.


Microloading Effect Detection
-----------------------------
HEURISTIC: If the etch rate is higher in areas with smaller feature densities compared to high-density areas
(indicative of the microloading effect), and the difference exceeds a set threshold,
this can lead to non-uniform etching and yield loss.

ACTION: Alert engineers to optimize gas flow and power settings based on specific wafer feature density,
enhancing etch uniformity across wafers.


Real-Time Recipe Adjustment Based on Yield Data
-----------------------------------------------
HEURISTIC: If yield data shows a consistent defect pattern (e.g., at the wafer edge or specific die locations)
for more than 5% of wafers, correlate this with historical process parameters and makes real-time recipe adjustments.

ACTION: Automated recipe optimization based on yield trends can reduce defect occurrence,
improving overall productivity and wafer quality.


Anomaly Detection with Historical Baseline Comparison
-----------------------------------------------------
HEURISTIC: If real-time sensor data (e.g., temperature, pressure, RF power) shows deviations
outside historical baseline ranges for similar recipes, this could indicate tool degradation or unexpected chamber behavior.

ACTION: Trigger alerts and suggest corrective actions such as parameter adjustment or additional inspections,
preventing potential faults.


Particle Generation Control for Bevel Etching
---------------------------------------------
HEURISTIC: If particle count in the bevel area increases beyond acceptable limits during bevel etching
in the Tactras UDEMAE system, this suggests non-uniform edge plasma distribution or excessive material removal.

ACTION: Recommend reducing RF power or modifying gas flow in the bevel area,
significantly reducing the risk of yield-impacting particle contamination.


Multi-Parameter Fault Isolation for Complex Equipment
-----------------------------------------------------
HEURISTIC: If multiple parameters (e.g., RF power, pressure, temperature) show simultaneous deviations
outside standard operating windows, use historical fault isolation data to pinpoint the most likely root cause.

ACTION: Provide a ranked list of potential root causes with confidence levels,
enabling faster and more accurate fault isolation.
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
rf-power-fluctuation-monitoring:
task: |-
Monitor RF Power fluctuation and recommend inspection/maintenance actions if fluctuation is excessive

sub-htps:
- task: >-
What are the values of Reflected Power in the recent data?

- task: |-
Analyze whether the lowest and highest Reflected Power values differ by more than 15%.
If so, note down the corresponding wafer batch number range between them.

- task: >-
What are the values of Forward Power in the recent data?

- task: |-
Analyze whether the lowest and highest Forward Power values differ by more than 10%.
If so, note down the corresponding wafer batch number range between them.

- task: |-
If there are excessive fluctuations in both Reflected Power and Forward Power in the previous analyses,
and if the wafer batch number ranges overlap, report a RF Power Fluctuation problem,
and recommend the following maintenance actions:
- Inspect the electrodes
- Adjust gas flow
- Adjust power settings


pressure-instability-monitoring:
task: |-
Monitor Chamber Pressure fluctuation and recommend inspection/maintenance actions if fluctuation is excessive

sub-htps:
- task: >-
What are the values of Chamber Pressure in the recent data?

- task: |-
Analyze whether there are consecutive Chamber Pressure values differing by at least 3%.
If so, note down the corresponding wafer batch numbers.

- task: >-
What are the values of Gas Flow Rate in the recent data?

- task: |-
Analyze whether there are consecutive Gas Flow Rate values differing by at least 5%.
If so, note down the corresponding wafer batch numbers.

- task: |-
If there are excessive fluctuations in both Chamber Pressure and Gas Flow Rate in the previous analyses,
and if the wafer batch numbers contain some same batch(es), report a Pressure Instability problem,
and recommend the following maintenance actions:
- Preventative chamber cleaning
- Adjustment of the gas flow to stabilize pressure


chamber-temperature-monitoring:
task: |-
Monitor Chamber Temperature increases and recommend inspection/maintenance actions if heating is excessive

sub-htps:
- task: >-
What are the values of Chamber Temperature in the recent data?

- task: |-
Analyze whether there are 3 consecutive Chamber Temperature values
showing increases of at least 2 Celcius degrees from first to second and from second to third

- task: |-
If there is/are significant Chamber Temperature increase(s) identified in the previous analysis,
recommend the following maintenance actions:
- Adjustment of chamber clean frequency
- Alerting engineers to check wall lining for polymer build-up
20 changes: 20 additions & 0 deletions examples/semiconductor-etching-yieldguard/make.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
@echo off


:: TARGETS
:: =======
SET TARGET=%1

IF "%TARGET%"=="streamlit-run" GOTO streamlit-run


:: STREAMLIT APP
:: =============
:streamlit-run
poetry run streamlit run streamlit-main.py --server.allowRunOnSave=true --server.runOnSave=true
GOTO end


:: END
:: ===
:end
7 changes: 7 additions & 0 deletions examples/semiconductor-etching-yieldguard/measurements.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
WaterBatch,ForwardPower_W,ReflectedPower_W,ChamberPressure_Torr,GasFlowRate_sccm,ChamberWallTemperature_C
1,59.8658484197038,36.58009357302478,3.8912139968434072,59.656320330745594,76.29389990800009
2,58.16704785825934,35.38252446429568,4.178602163853312,58.08397348116461,78.31261142176992
3,58.166955288079336,37.50547593215342,3.850684781489443,56.22890595323773,76.55855538044706
4,57.79118453875756,40.13085924740417,4.2179458479297685,55.054858831268945,79.60034010588906
5,65.30403852879604,42.33805650601139,4.250891926683164,59.68444677837765,81.7335513967164
6,59.87527628850847,37.941053938071626,3.5335182210508873,54.40152493739601,81.92427227762764
1 change: 1 addition & 0 deletions examples/semiconductor-etching-yieldguard/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
OpenSSA[contrib] @ https://GitHub.com/Aitomatic/OpenSSA/archive/main.zip
30 changes: 30 additions & 0 deletions examples/semiconductor-etching-yieldguard/semikong_lm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from __future__ import annotations

from argparse import ArgumentParser
from dataclasses import dataclass

from openssa.core.util.lm.llama import LlamaLM


DEFAULT_MODEL = 'pentagoniac/SEMIKONG-70B'
DEFAULT_API_KEY = '...'
DEFAULT_API_BASE = 'http://34.44.90.64:8081/v1'


@dataclass
class SemiKongLM(LlamaLM):
"""SemiKong LM."""

@classmethod
def from_defaults(cls) -> SemiKongLM:
"""Get default SemiKong LM instance."""
# pylint: disable=unexpected-keyword-arg
return cls(model=DEFAULT_MODEL, api_key=DEFAULT_API_KEY, api_base=DEFAULT_API_BASE)


if __name__ == '__main__':
arg_parser = ArgumentParser()
arg_parser.add_argument('question')
args = arg_parser.parse_args()

print(SemiKongLM.from_defaults().get_response(prompt=args.question))
Loading